@milaboratories/uikit 2.2.77 → 2.2.79

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.
Files changed (37) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/dist/pl-uikit.js +4860 -4729
  3. package/dist/pl-uikit.js.map +1 -1
  4. package/dist/src/components/PlAlert/PlAlert.vue.d.ts +1 -1
  5. package/dist/src/components/PlAlert/PlAlert.vue.d.ts.map +1 -1
  6. package/dist/src/components/PlClipboard/PlClipboard.vue.d.ts +12 -0
  7. package/dist/src/components/PlClipboard/PlClipboard.vue.d.ts.map +1 -0
  8. package/dist/src/components/PlClipboard/index.d.ts +2 -0
  9. package/dist/src/components/PlClipboard/index.d.ts.map +1 -0
  10. package/dist/src/components/PlErrorAlert/PlErrorAlert.vue.d.ts +26 -0
  11. package/dist/src/components/PlErrorAlert/PlErrorAlert.vue.d.ts.map +1 -0
  12. package/dist/src/components/PlErrorAlert/index.d.ts +2 -0
  13. package/dist/src/components/PlErrorAlert/index.d.ts.map +1 -0
  14. package/dist/src/components/PlErrorBoundary/PlErrorBoundary.vue.d.ts +92 -0
  15. package/dist/src/components/PlErrorBoundary/PlErrorBoundary.vue.d.ts.map +1 -0
  16. package/dist/src/components/PlErrorBoundary/index.d.ts +2 -0
  17. package/dist/src/components/PlErrorBoundary/index.d.ts.map +1 -0
  18. package/dist/src/components/PlFileInput/PlFileInput.vue.d.ts.map +1 -1
  19. package/dist/src/index.d.ts +1 -0
  20. package/dist/src/index.d.ts.map +1 -1
  21. package/dist/style.css +1 -1
  22. package/dist/tsconfig.lib.tsbuildinfo +1 -1
  23. package/package.json +5 -5
  24. package/src/assets/base.scss +3 -2
  25. package/src/assets/variables.scss +2 -0
  26. package/src/components/PlAutocomplete/PlAutocomplete.vue +1 -1
  27. package/src/components/PlClipboard/PlClipboard.vue +47 -0
  28. package/src/components/PlClipboard/index.ts +1 -0
  29. package/src/components/PlErrorAlert/PlErrorAlert.vue +105 -0
  30. package/src/components/PlErrorAlert/index.ts +1 -0
  31. package/src/components/PlErrorBoundary/PlErrorBoundary.vue +59 -0
  32. package/src/components/PlErrorBoundary/index.ts +1 -0
  33. package/src/components/PlFileInput/PlFileInput.vue +5 -9
  34. package/src/index.ts +2 -0
  35. package/vite.config.ts +1 -0
  36. package/dist/pl-uikit.umd.cjs +0 -27
  37. package/dist/pl-uikit.umd.cjs.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"file":"pl-uikit.umd.cjs","sources":["../../../util/helpers/dist/index.mjs","../src/components/contextMenu/Menu.vue","../src/components/contextMenu/index.ts","../src/components/DataTable/keys.ts","../src/components/DataTable/BaseCellComponent.vue","../src/components/DataTable/TdCell.vue","../src/components/DataTable/assets/TableIcon.vue","../src/components/DataTable/domain.ts","../src/components/DataTable/ThCell.vue","../src/components/DataTable/TrBody.vue","../src/components/DataTable/ColumnCaret.vue","../src/composition/useEventListener.ts","../src/components/DataTable/composition/useMouseUp.ts","../src/helpers/index.ts","../src/components/DataTable/composition/useColumn.ts","../src/components/DataTable/constants.ts","../src/composition/useMouse.ts","../src/composition/useHover.ts","../src/components/DataTable/composition/useResize.ts","../src/components/DataTable/RowsCommandMenu.vue","../src/components/DataTable/ColumnsCommandMenu.vue","../src/composition/useMouseCapture.ts","../src/components/DataTable/TScroll.vue","../src/components/DataTable/composition/useTableColumns.ts","../src/components/DataTable/composition/useTableRows.ts","../src/components/DataTable/state.ts","../src/components/DataTable/TableComponent.vue","../src/components/DataTable/adapters/RawData.ts","../src/components/DataTable/adapters/AsyncData.ts","../src/components/DataTable/index.ts","../src/helpers/iterators.ts","../src/composition/useLocalStorage.ts","../src/composition/useTheme.ts","../src/components/ThemeSwitcher.vue","../src/layout/PlBlockPage/PlBlockPage.vue","../src/layout/PlContainer/PlContainer.vue","../src/layout/PlRow/PlRow.vue","../src/layout/PlSpacer/PlSpacer.vue","../src/layout/PlGrid/PlGrid.vue","../src/components/PlAlert/PlAlert.vue","../src/assets/images/24_checkbox-light-enabled-unchecked.svg?raw","../src/assets/images/24_checkbox-light-enabled-checked.svg?raw","../src/components/DropdownListItem.vue","../src/helpers/utils.ts","../src/composition/usePosition.ts","../src/components/PlMaskIcon16/PlMaskIcon16.vue","../src/components/PlBtnSplit/PlBtnSplit.vue","../src/composition/useRipple.ts","../src/base/BtnBase.vue","../src/components/PlBtnPrimary/PlBtnPrimary.vue","../src/components/PlBtnAccent/PlBtnAccent.vue","../src/components/PlBtnDanger/PlBtnDanger.vue","../src/components/PlBtnSecondary/PlBtnSecondary.vue","../src/components/PlMaskIcon24/PlMaskIcon24.vue","../src/components/PlBtnGhost/PlBtnGhost.vue","../src/components/PlBtnLink/PlBtnLink.vue","../src/components/PlTooltip/useTooltipPosition.ts","../src/helpers/functions.ts","../src/composition/useClickOutside.ts","../src/components/PlTooltip/Beak.vue","../src/components/PlTooltip/global.ts","../src/components/PlTooltip/PlTooltip.vue","../src/utils/InnerBorder.vue","../src/components/PlBtnGroup/PlBtnGroup.vue","../src/composition/useTransformedModel.ts","../src/components/PlEditableTitle/PlEditableTitle.vue","../src/utils/DoubleContour.vue","../src/composition/utils.ts","../src/global/resizeObserver.ts","../src/utils/useLabelNotch.ts","../src/utils/useValidation.ts","../src/components/PlIcon16/PlIcon16.vue","../src/components/PlTextField/PlTextField.vue","../src/components/PlIcon24/PlIcon24.vue","../src/components/PlSearchField/PlSearchField.vue","../src/components/PlTextArea/PlTextArea.vue","../src/helpers/objects.ts","../src/components/LongText.vue","../src/helpers/dom.ts","../src/utils/DropdownOverlay/DropdownOverlay.vue","../src/components/PlDropdown/PlDropdown.vue","../src/components/PlDropdownRef/PlDropdownRef.vue","../src/composition/useFilteredList.ts","../src/components/PlDropdownLine/ResizableInput.vue","../src/components/TabItem.vue","../src/components/PlDropdownLine/PlDropdownLine.vue","../src/components/PlDropdownLegacy/PlDropdownLegacy.vue","../src/components/PlProgressBar/PlProgressBar.vue","../src/components/PlNumberField/PlNumberField.vue","../src/components/PlChip/PlChip.vue","../src/components/PlDropdownMulti/PlDropdownMulti.vue","../src/components/PlDropdownMultiRef/PlDropdownMultiRef.vue","../src/components/PlCheckbox/PlCheckboxBase.vue","../src/components/PlCheckbox/PlCheckbox.vue","../src/components/PlCheckboxGroup/PlCheckboxGroup.vue","../src/utils/PlCloseModalBtn.vue","../src/components/PlDialogModal/PlDialogModal.vue","../src/components/TransitionSlidePanel.vue","../src/components/PlSlideModal/PlSlideModal.vue","../src/components/PlToggleSwitch/PlToggleSwitch.vue","../../../../node_modules/.pnpm/@vueuse+shared@12.4.0_typescript@5.6.3/node_modules/@vueuse/shared/index.mjs","../../../../node_modules/.pnpm/@vueuse+core@12.4.0_typescript@5.6.3/node_modules/@vueuse/core/index.mjs","../../../../node_modules/.pnpm/zod@3.23.8/node_modules/zod/lib/index.mjs","../../../model/common/dist/index.mjs","../../../../node_modules/.pnpm/json-stringify-safe@5.0.1/node_modules/json-stringify-safe/stringify.js","../../../model/pl-error-like/dist/index.mjs","../../../../sdk/model/dist/index.mjs","../src/components/PlLogView/useLogHandle.ts","../src/components/PlLogView/PlLogView.vue","../src/components/PlTabs/Tab.vue","../src/components/PlTabs/PlTabs.vue","../src/components/PlAccordion/PlAccordion.vue","../src/components/PlAccordion/ExpandTransition.vue","../src/components/PlAccordion/PlAccordionSection.vue","../src/components/PlStatusTag/PlStatusTag.vue","../src/components/PlProgressCell/PlProgressCell.vue","../src/composition/useWatchFetch.ts","../src/components/PlAutocomplete/PlAutocomplete.vue","../src/components/PlFileDialog/remote.ts","../src/components/PlFileDialog/utils.ts","../src/components/PlFileDialog/Remote.vue","../src/components/PlFileDialog/Local.vue","../src/components/PlFileDialog/PlFileDialog.vue","../src/components/PlFileInput/PlFileInput.vue","../src/components/PlNotificationAlert/PlNotificationAlert.vue","../src/components/PlChartStackedBar/StackedRow.vue","../src/components/PlChartStackedBar/Legends.vue","../src/components/PlChartStackedBar/PlChartStackedBar.vue","../src/components/PlChartStackedBar/StackedRowCompact.vue","../src/components/PlChartStackedBar/PlChartStackedBarCompact.vue","../../../../node_modules/.pnpm/d3-array@3.2.4/node_modules/d3-array/src/ascending.js","../../../../node_modules/.pnpm/d3-array@3.2.4/node_modules/d3-array/src/descending.js","../../../../node_modules/.pnpm/d3-array@3.2.4/node_modules/d3-array/src/bisector.js","../../../../node_modules/.pnpm/d3-array@3.2.4/node_modules/d3-array/src/number.js","../../../../node_modules/.pnpm/d3-array@3.2.4/node_modules/d3-array/src/bisect.js","../../../../node_modules/.pnpm/d3-array@3.2.4/node_modules/d3-array/src/count.js","../../../../node_modules/.pnpm/d3-array@3.2.4/node_modules/d3-array/src/extent.js","../../../../node_modules/.pnpm/d3-array@3.2.4/node_modules/d3-array/src/identity.js","../../../../node_modules/.pnpm/d3-array@3.2.4/node_modules/d3-array/src/array.js","../../../../node_modules/.pnpm/d3-array@3.2.4/node_modules/d3-array/src/constant.js","../../../../node_modules/.pnpm/d3-array@3.2.4/node_modules/d3-array/src/ticks.js","../../../../node_modules/.pnpm/d3-array@3.2.4/node_modules/d3-array/src/nice.js","../../../../node_modules/.pnpm/d3-array@3.2.4/node_modules/d3-array/src/threshold/sturges.js","../../../../node_modules/.pnpm/d3-array@3.2.4/node_modules/d3-array/src/bin.js","../../../../node_modules/.pnpm/d3-array@3.2.4/node_modules/d3-array/src/max.js","../../../../node_modules/.pnpm/d3-array@3.2.4/node_modules/d3-array/src/min.js","../../../../node_modules/.pnpm/d3-axis@3.0.0/node_modules/d3-axis/src/identity.js","../../../../node_modules/.pnpm/d3-axis@3.0.0/node_modules/d3-axis/src/axis.js","../../../../node_modules/.pnpm/d3-dispatch@3.0.1/node_modules/d3-dispatch/src/dispatch.js","../../../../node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/namespaces.js","../../../../node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/namespace.js","../../../../node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/creator.js","../../../../node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/selector.js","../../../../node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/selection/select.js","../../../../node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/array.js","../../../../node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/selectorAll.js","../../../../node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/selection/selectAll.js","../../../../node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/matcher.js","../../../../node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/selection/selectChild.js","../../../../node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/selection/selectChildren.js","../../../../node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/selection/filter.js","../../../../node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/selection/sparse.js","../../../../node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/selection/enter.js","../../../../node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/constant.js","../../../../node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/selection/data.js","../../../../node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/selection/exit.js","../../../../node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/selection/join.js","../../../../node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/selection/merge.js","../../../../node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/selection/order.js","../../../../node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/selection/sort.js","../../../../node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/selection/call.js","../../../../node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/selection/nodes.js","../../../../node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/selection/node.js","../../../../node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/selection/size.js","../../../../node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/selection/empty.js","../../../../node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/selection/each.js","../../../../node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/selection/attr.js","../../../../node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/window.js","../../../../node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/selection/style.js","../../../../node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/selection/property.js","../../../../node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/selection/classed.js","../../../../node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/selection/text.js","../../../../node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/selection/html.js","../../../../node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/selection/raise.js","../../../../node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/selection/lower.js","../../../../node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/selection/append.js","../../../../node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/selection/insert.js","../../../../node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/selection/remove.js","../../../../node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/selection/clone.js","../../../../node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/selection/datum.js","../../../../node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/selection/on.js","../../../../node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/selection/dispatch.js","../../../../node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/selection/iterator.js","../../../../node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/selection/index.js","../../../../node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/select.js","../../../../node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/selectAll.js","../../../../node_modules/.pnpm/d3-color@3.1.0/node_modules/d3-color/src/define.js","../../../../node_modules/.pnpm/d3-color@3.1.0/node_modules/d3-color/src/color.js","../../../../node_modules/.pnpm/d3-interpolate@3.0.1/node_modules/d3-interpolate/src/constant.js","../../../../node_modules/.pnpm/d3-interpolate@3.0.1/node_modules/d3-interpolate/src/color.js","../../../../node_modules/.pnpm/d3-interpolate@3.0.1/node_modules/d3-interpolate/src/rgb.js","../../../../node_modules/.pnpm/d3-interpolate@3.0.1/node_modules/d3-interpolate/src/numberArray.js","../../../../node_modules/.pnpm/d3-interpolate@3.0.1/node_modules/d3-interpolate/src/array.js","../../../../node_modules/.pnpm/d3-interpolate@3.0.1/node_modules/d3-interpolate/src/date.js","../../../../node_modules/.pnpm/d3-interpolate@3.0.1/node_modules/d3-interpolate/src/number.js","../../../../node_modules/.pnpm/d3-interpolate@3.0.1/node_modules/d3-interpolate/src/object.js","../../../../node_modules/.pnpm/d3-interpolate@3.0.1/node_modules/d3-interpolate/src/string.js","../../../../node_modules/.pnpm/d3-interpolate@3.0.1/node_modules/d3-interpolate/src/value.js","../../../../node_modules/.pnpm/d3-interpolate@3.0.1/node_modules/d3-interpolate/src/round.js","../../../../node_modules/.pnpm/d3-interpolate@3.0.1/node_modules/d3-interpolate/src/transform/decompose.js","../../../../node_modules/.pnpm/d3-interpolate@3.0.1/node_modules/d3-interpolate/src/transform/parse.js","../../../../node_modules/.pnpm/d3-interpolate@3.0.1/node_modules/d3-interpolate/src/transform/index.js","../../../../node_modules/.pnpm/d3-timer@3.0.1/node_modules/d3-timer/src/timer.js","../../../../node_modules/.pnpm/d3-timer@3.0.1/node_modules/d3-timer/src/timeout.js","../../../../node_modules/.pnpm/d3-transition@3.0.1_d3-selection@3.0.0/node_modules/d3-transition/src/transition/schedule.js","../../../../node_modules/.pnpm/d3-transition@3.0.1_d3-selection@3.0.0/node_modules/d3-transition/src/interrupt.js","../../../../node_modules/.pnpm/d3-transition@3.0.1_d3-selection@3.0.0/node_modules/d3-transition/src/selection/interrupt.js","../../../../node_modules/.pnpm/d3-transition@3.0.1_d3-selection@3.0.0/node_modules/d3-transition/src/transition/tween.js","../../../../node_modules/.pnpm/d3-transition@3.0.1_d3-selection@3.0.0/node_modules/d3-transition/src/transition/interpolate.js","../../../../node_modules/.pnpm/d3-transition@3.0.1_d3-selection@3.0.0/node_modules/d3-transition/src/transition/attr.js","../../../../node_modules/.pnpm/d3-transition@3.0.1_d3-selection@3.0.0/node_modules/d3-transition/src/transition/attrTween.js","../../../../node_modules/.pnpm/d3-transition@3.0.1_d3-selection@3.0.0/node_modules/d3-transition/src/transition/delay.js","../../../../node_modules/.pnpm/d3-transition@3.0.1_d3-selection@3.0.0/node_modules/d3-transition/src/transition/duration.js","../../../../node_modules/.pnpm/d3-transition@3.0.1_d3-selection@3.0.0/node_modules/d3-transition/src/transition/ease.js","../../../../node_modules/.pnpm/d3-transition@3.0.1_d3-selection@3.0.0/node_modules/d3-transition/src/transition/easeVarying.js","../../../../node_modules/.pnpm/d3-transition@3.0.1_d3-selection@3.0.0/node_modules/d3-transition/src/transition/filter.js","../../../../node_modules/.pnpm/d3-transition@3.0.1_d3-selection@3.0.0/node_modules/d3-transition/src/transition/merge.js","../../../../node_modules/.pnpm/d3-transition@3.0.1_d3-selection@3.0.0/node_modules/d3-transition/src/transition/on.js","../../../../node_modules/.pnpm/d3-transition@3.0.1_d3-selection@3.0.0/node_modules/d3-transition/src/transition/remove.js","../../../../node_modules/.pnpm/d3-transition@3.0.1_d3-selection@3.0.0/node_modules/d3-transition/src/transition/select.js","../../../../node_modules/.pnpm/d3-transition@3.0.1_d3-selection@3.0.0/node_modules/d3-transition/src/transition/selectAll.js","../../../../node_modules/.pnpm/d3-transition@3.0.1_d3-selection@3.0.0/node_modules/d3-transition/src/transition/selection.js","../../../../node_modules/.pnpm/d3-transition@3.0.1_d3-selection@3.0.0/node_modules/d3-transition/src/transition/style.js","../../../../node_modules/.pnpm/d3-transition@3.0.1_d3-selection@3.0.0/node_modules/d3-transition/src/transition/styleTween.js","../../../../node_modules/.pnpm/d3-transition@3.0.1_d3-selection@3.0.0/node_modules/d3-transition/src/transition/text.js","../../../../node_modules/.pnpm/d3-transition@3.0.1_d3-selection@3.0.0/node_modules/d3-transition/src/transition/textTween.js","../../../../node_modules/.pnpm/d3-transition@3.0.1_d3-selection@3.0.0/node_modules/d3-transition/src/transition/transition.js","../../../../node_modules/.pnpm/d3-transition@3.0.1_d3-selection@3.0.0/node_modules/d3-transition/src/transition/end.js","../../../../node_modules/.pnpm/d3-transition@3.0.1_d3-selection@3.0.0/node_modules/d3-transition/src/transition/index.js","../../../../node_modules/.pnpm/d3-ease@3.0.1/node_modules/d3-ease/src/cubic.js","../../../../node_modules/.pnpm/d3-transition@3.0.1_d3-selection@3.0.0/node_modules/d3-transition/src/selection/transition.js","../../../../node_modules/.pnpm/d3-transition@3.0.1_d3-selection@3.0.0/node_modules/d3-transition/src/selection/index.js","../../../../node_modules/.pnpm/d3-format@3.1.0/node_modules/d3-format/src/formatDecimal.js","../../../../node_modules/.pnpm/d3-format@3.1.0/node_modules/d3-format/src/exponent.js","../../../../node_modules/.pnpm/d3-format@3.1.0/node_modules/d3-format/src/formatGroup.js","../../../../node_modules/.pnpm/d3-format@3.1.0/node_modules/d3-format/src/formatNumerals.js","../../../../node_modules/.pnpm/d3-format@3.1.0/node_modules/d3-format/src/formatSpecifier.js","../../../../node_modules/.pnpm/d3-format@3.1.0/node_modules/d3-format/src/formatTrim.js","../../../../node_modules/.pnpm/d3-format@3.1.0/node_modules/d3-format/src/formatPrefixAuto.js","../../../../node_modules/.pnpm/d3-format@3.1.0/node_modules/d3-format/src/formatRounded.js","../../../../node_modules/.pnpm/d3-format@3.1.0/node_modules/d3-format/src/formatTypes.js","../../../../node_modules/.pnpm/d3-format@3.1.0/node_modules/d3-format/src/identity.js","../../../../node_modules/.pnpm/d3-format@3.1.0/node_modules/d3-format/src/locale.js","../../../../node_modules/.pnpm/d3-format@3.1.0/node_modules/d3-format/src/defaultLocale.js","../../../../node_modules/.pnpm/d3-format@3.1.0/node_modules/d3-format/src/precisionFixed.js","../../../../node_modules/.pnpm/d3-format@3.1.0/node_modules/d3-format/src/precisionPrefix.js","../../../../node_modules/.pnpm/d3-format@3.1.0/node_modules/d3-format/src/precisionRound.js","../../../../node_modules/.pnpm/d3-scale@4.0.2/node_modules/d3-scale/src/init.js","../../../../node_modules/.pnpm/d3-scale@4.0.2/node_modules/d3-scale/src/constant.js","../../../../node_modules/.pnpm/d3-scale@4.0.2/node_modules/d3-scale/src/number.js","../../../../node_modules/.pnpm/d3-scale@4.0.2/node_modules/d3-scale/src/continuous.js","../../../../node_modules/.pnpm/d3-scale@4.0.2/node_modules/d3-scale/src/tickFormat.js","../../../../node_modules/.pnpm/d3-scale@4.0.2/node_modules/d3-scale/src/linear.js","../../../../node_modules/.pnpm/d3-scale@4.0.2/node_modules/d3-scale/src/symlog.js","../../../../node_modules/.pnpm/d3-zoom@3.0.0/node_modules/d3-zoom/src/transform.js","../src/components/PlChartHistogram/createSvgContainer.ts","../src/components/PlChartHistogram/drawBins.ts","../src/components/PlChartHistogram/createGridlines.ts","../src/components/PlChartHistogram/logspace.ts","../src/components/PlChartHistogram/createLabels.ts","../src/components/PlChartHistogram/drawThreshold.ts","../src/components/PlChartHistogram/normalizeBins.ts","../src/components/PlChartHistogram/histogram.ts","../src/components/PlChartHistogram/PlChartHistogram.vue","../src/components/PlRadio/keys.ts","../src/components/PlRadio/PlRadio.vue","../src/components/PlRadio/PlRadioGroup.vue","../src/colors/palette.ts","../src/colors/color.ts","../src/colors/gradient.ts","../src/components/ContextProvider.vue","../src/helpers/math.ts","../src/composition/useSliderBreakpoints.ts","../src/components/Slider.vue","../src/composition/useScroll.ts","../src/composition/useResizeObserver.ts","../src/composition/useSortable.ts","../src/composition/useSortable2.ts","../src/composition/useInterval.ts","../src/composition/useFormState.ts","../src/composition/useQuery.ts","../src/composition/useDraggable.ts","../src/composition/useComponentProp.ts","../src/components/SliderRangeTriple.vue","../src/components/InputRange.vue","../src/components/SliderRange.vue","../src/components/VScroll.vue","../src/components/HScroll.vue","../src/components/Scrollable.vue","../src/demo-site-data/all-css-variables.ts","../src/generated/icons-16.ts","../src/generated/icons-24.ts","../src/index.ts"],"sourcesContent":["var B = Object.defineProperty;\nvar x = (e, t, n) => t in e ? B(e, t, { enumerable: !0, configurable: !0, writable: !0, value: n }) : e[t] = n;\nvar c = (e, t, n) => x(e, typeof t != \"symbol\" ? t + \"\" : t, n);\nfunction A(e, t) {\n if (e == null)\n throw Error(t ?? \"Empty (null | undefined) value\");\n return e;\n}\nfunction I(e, t) {\n if (e === void 0)\n throw Error(t ?? \"Undefined value\");\n return e;\n}\nfunction q(e = void 0) {\n return e;\n}\nfunction j(e) {\n return e;\n}\nfunction k(e) {\n return [...new Set(e)];\n}\nfunction C(e, t) {\n if (e == null)\n throw Error(t ?? \"Empty (null | undefined) value\");\n}\nfunction N(e, t) {\n if (e === void 0)\n throw Error(t ?? \"Undefined value\");\n}\nfunction U(e, t, n) {\n const r = Math.min(t, n), i = Math.max(t, n);\n return e >= r && e <= i;\n}\nfunction $(e) {\n return e.map((t) => ({ text: String(t), value: t }));\n}\nfunction D(e) {\n return function(...t) {\n const n = e(...t);\n async function r(i) {\n return i.done ? Promise.resolve(i.value) : Promise.resolve(i.value).then((o) => r(n.next(o))).catch((o) => r(n.throw(o)));\n }\n try {\n return r(n.next());\n } catch (i) {\n return Promise.reject(i instanceof Error ? i : Error(String(i)));\n }\n };\n}\nclass L {\n constructor() {\n c(this, \"promise\");\n c(this, \"resolve\", () => {\n });\n c(this, \"reject\", () => {\n });\n this.promise = new Promise((t, n) => {\n this.resolve = t, this.reject = n;\n });\n }\n}\nfunction d(e) {\n return new Promise((t) => setTimeout(t, e));\n}\nfunction z() {\n return new Promise((e) => queueMicrotask(e));\n}\nfunction F() {\n const e = (/* @__PURE__ */ new Date()).getTime();\n return function() {\n return (/* @__PURE__ */ new Date()).getTime() - e;\n };\n}\nfunction V() {\n const e = performance.now();\n return function() {\n return performance.now() - e;\n };\n}\nfunction Y(e) {\n return e();\n}\nfunction R(e, t, n) {\n return t > e ? t : e > n ? n : e;\n}\nfunction Z(e, t) {\n return t(e);\n}\nfunction G(e, t) {\n if (e != null)\n return t(e);\n}\nfunction J(e, t) {\n return e = Math.ceil(e), t = Math.floor(t), Math.floor(Math.random() * (t - e)) + e;\n}\nfunction* w(e, t, n = 1) {\n for (let r = e; r < t; r += n)\n yield r;\n}\nfunction O(e) {\n const t = [];\n for (const n of e)\n t.push(n);\n return t;\n}\nfunction H(e, t) {\n return O(w(0, e)).map(t);\n}\nclass Q {\n constructor(t) {\n this._delay = t;\n }\n async *generate() {\n let t = 0;\n for (; ; )\n await d(this._delay), yield t++;\n }\n async *[Symbol.asyncIterator]() {\n let t = 0;\n for (; ; )\n await d(this._delay), yield t++;\n }\n}\nfunction W(e, t) {\n return Array.from({ length: e }, (n, r) => t(r));\n}\nfunction X(e, t) {\n throw Error(t);\n}\nfunction K(e) {\n return (t) => e[t]();\n}\nfunction ee(e) {\n if (e && e.ok)\n return e.value;\n}\nfunction te(e) {\n if (e && !e.ok)\n return e.error;\n}\nfunction ne(e) {\n if (e.ok)\n return e.value;\n throw Error(e.error);\n}\nfunction re(e) {\n return Array.isArray(e) ? e : [e];\n}\nasync function ie(e) {\n return Object.fromEntries(await Promise.all(Object.entries(e).map(async ([t, n]) => [t, await n])));\n}\nfunction oe(e, t) {\n return Object.keys(t).every((n) => e[n] === t[n]);\n}\nconst ue = (e) => e;\nfunction ce(e) {\n return e;\n}\nfunction fe(e) {\n return Object.entries(e).map(([t, n]) => ({\n key: t,\n value: n\n }));\n}\nconst ft = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({\n __proto__: null,\n Deferred: L,\n Interval: Q,\n alike: oe,\n arrayFrom: W,\n asConst: ce,\n async: D,\n between: U,\n bool: j,\n call: Y,\n checkIfDefined: N,\n checkIfNotEmpty: C,\n clamp: R,\n delay: d,\n errorOptional: te,\n exhaustive: X,\n flatValue: re,\n identity: ue,\n listToOptions: $,\n match: K,\n notEmpty: A,\n notUndef: I,\n okOptional: ee,\n performanceTimer: V,\n randomInt: J,\n range: w,\n resolveAwaited: ie,\n tap: Z,\n tapIf: G,\n tear: z,\n timer: F,\n times: H,\n toList: O,\n undef: q,\n unionize: fe,\n uniqueValues: k,\n unwrap: ne\n}, Symbol.toStringTag, { value: \"Module\" }));\nfunction se(e, t) {\n return e = Math.ceil(e), t = Math.floor(t), Math.floor(Math.random() * (t - e)) + e;\n}\nfunction ae(e) {\n return e = e.replace(\" \", \"-\"), (e[0] || \"\").toLowerCase() + e.slice(1).replace(/[A-Z]/g, (t) => `-${t.toLowerCase()}`);\n}\nfunction le(e, t = []) {\n for (e = e ? String(e) : \"\"; t.includes(e.charAt(0)); ) e = e.substr(1);\n for (; t.includes(e.charAt(e.length - 1)); ) e = e.substr(0, e.length - 1);\n return e;\n}\nfunction he(e, t = []) {\n for (e = e ? String(e) : \"\"; t.includes(e.charAt(0)); ) e = e.substring(1);\n return e;\n}\nfunction E(e) {\n return e.replace(/^.*[\\\\/]/, \"\");\n}\nfunction S(e) {\n return e.replace(/^.*?[.]/, \"\");\n}\nfunction de(e, t) {\n const n = [];\n if (e.dataTransfer)\n for (let r = 0; r < e.dataTransfer.items.length; r++) {\n if (e.dataTransfer.items[r].kind !== \"file\")\n continue;\n const i = e.dataTransfer.items[r].getAsFile();\n i && i.path && n.push(i.path);\n }\n return t ? n.filter((r) => t.includes(S(E(r)))) : n;\n}\nconst pe = (e, t, n = \"s\") => `${e} ${t}${e !== 1 ? n : \"\"}`;\nfunction ye(e) {\n try {\n return new RegExp(e), !0;\n } catch {\n return !1;\n }\n}\nfunction ge(e) {\n return e ? e.charAt(0).toUpperCase() + e.slice(1) : \"\";\n}\nfunction me(e) {\n return e ? e.charAt(0).toLowerCase() + e.slice(1) : \"\";\n}\nfunction T(e) {\n let t = \"\";\n for (let n = 0; n < e; n++)\n t += String.fromCharCode(se(65, 91));\n return t;\n}\nfunction we() {\n return T(42);\n}\nfunction Oe(e, t) {\n return e.substring(0, e.indexOf(t));\n}\nfunction Ee(e, t) {\n return e.substring(0, e.lastIndexOf(t));\n}\nfunction Se(e, t) {\n return e.substring(e.indexOf(t) + t.length, e.length);\n}\nfunction Te(e) {\n if (typeof e != \"string\")\n throw Error(\"Expect string value, got: \" + typeof e);\n}\nfunction be(e) {\n let t = 0, n, r;\n if (e.length === 0) return t;\n for (n = 0; n < e.length; n++)\n r = e.charCodeAt(n), t = (t << 5) - t + r, t |= 0;\n return t;\n}\nconst st = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({\n __proto__: null,\n after: Se,\n assertString: Te,\n before: Oe,\n beforeLast: Ee,\n camelToKebab: ae,\n extractExtension: S,\n extractFileName: E,\n extractPaths: de,\n hashCode: be,\n isRegexpValid: ye,\n lcFirst: me,\n pluralize: pe,\n randomString: T,\n trimChars: le,\n trimCharsLeft: he,\n ucFirst: ge,\n uniqueId: we\n}, Symbol.toStringTag, { value: \"Module\" })), a = Array.isArray;\nfunction l(e) {\n return e !== null && typeof e == \"object\";\n}\nfunction f(e) {\n if (typeof e != \"object\" || e === null)\n return !1;\n const t = Object.getPrototypeOf(e);\n return t === null || t === Object.prototype || Object.getPrototypeOf(t) === null;\n}\nfunction ve(e, t) {\n return Object.keys(e).map((r) => t(e[r], r));\n}\nfunction g(e) {\n return Object.values(e).reduce((t, n) => n !== void 0 ? t + 1 : t, 0);\n}\nfunction h(e, t) {\n if (!(l(e) && l(t)))\n return e === t;\n if (a(e) && a(t))\n return e.length !== t.length ? !1 : [...e.keys()].every((n) => h(e[n], t[n]));\n if (f(e) && f(t))\n return g(e) !== g(t) ? !1 : Object.keys(e).every((n) => h(e[n], t[n]));\n throw Error(`Cannot compare a ${String(e)} and b ${String(t)}`);\n}\nconst Pe = h;\nfunction p(e) {\n if (Array.isArray(e)) {\n const t = [];\n for (let n = 0; n < e.length; n++)\n t[n] = p(e[n]);\n return t;\n } else if (f(e)) {\n const t = {};\n return Object.keys(e).forEach((n) => {\n t[n] = p(e[n]);\n }), t;\n } else\n return e;\n}\nfunction _e(e) {\n return Array.isArray(e) ? Object.assign([], e) : l(e) ? Object.assign({}, e) : e;\n}\nfunction Me(e, t) {\n const n = {};\n for (const r in t)\n t[r] !== e[r] && (n[r] = e[r]);\n return n;\n}\nfunction Be(e) {\n return Object.entries(e).forEach(([t, n]) => {\n n instanceof Function && (e[t] = n.bind(e));\n }), e;\n}\nfunction xe(e, t, n) {\n return e[t] = n, e;\n}\nfunction Ae(e, t) {\n return e[t];\n}\nfunction Ie(e, t) {\n e = { ...e };\n const n = e[t];\n return delete e[t], [n, e];\n}\nfunction qe(e, ...t) {\n return Object.assign({}, ...t.map((n) => ({ [n]: e[n] })));\n}\nfunction je(e, ...t) {\n return t.map((n) => e[n]);\n}\nfunction ke(e, ...t) {\n const n = Object.assign({}, e);\n return t.forEach((r) => delete n[r]), n;\n}\nfunction y(e, t) {\n return (/* @__PURE__ */ new Set([...Object.keys(e), ...Object.keys(t)])).forEach((r) => {\n const i = e[r], o = t[r];\n f(i) && f(o) || a(i) && a(o) && i.length === o.length ? y(i, o) : e[r] = o;\n }), e;\n}\nconst at = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({\n __proto__: null,\n bindMethods: Be,\n deepClone: p,\n deepEqual: Pe,\n deepPatch: y,\n getProp: Ae,\n isArray: a,\n isJsonEqual: h,\n isNonPrimitive: l,\n isPlainObject: f,\n map: ve,\n omit: ke,\n pick: qe,\n pickValues: je,\n setProp: xe,\n shallowClone: _e,\n shallowDiff: Me,\n shiftProp: Ie\n}, Symbol.toStringTag, { value: \"Module\" }));\nfunction Ce(e, t) {\n return e.filter((n) => !t.includes(n));\n}\nfunction Ne(e, t) {\n return [...e, t];\n}\nfunction b(e, t) {\n return e.includes(t) ? [...e] : [...e, t];\n}\nfunction v(e, t) {\n e.includes(t) || e.push(t);\n}\nfunction P(e, t) {\n return e.filter((n) => t.includes(n));\n}\nfunction Ue(e, t) {\n const n = [...e];\n return t.forEach((r) => v(n, r)), n;\n}\nfunction $e(e) {\n let t = e.shift();\n if (!t)\n return [];\n for (const n of e)\n t = P(t, n);\n return t;\n}\nfunction De(e) {\n return e.reduce((t, n) => Math.max(t, n), -1 / 0);\n}\nfunction Le(e, t) {\n [...t].sort((n, r) => r - n).forEach((n) => e.splice(n, 1));\n}\nfunction ze(e, t) {\n return e.filter((n, r) => !t.includes(r));\n}\nfunction Fe(e, t) {\n return [...e.reduce((r, i) => {\n const o = i[t];\n r.has(o) || r.set(o, {});\n const s = r.get(o);\n return Object.keys(i).filter((u) => u !== t).forEach((u) => {\n s[u] = b(s[u] || [], i[u]);\n }), r;\n }, /* @__PURE__ */ new Map()).entries()].map(([r, i]) => ({\n [t]: r,\n ...i\n }));\n}\nfunction Ve(e, t, n) {\n return n.indexOf(e) === t;\n}\nfunction* Ye(e) {\n const t = [];\n for (const n of e)\n t.push(n), t.length === 2 && (yield [t[0], t[1]], t.shift());\n}\nfunction Re(e, t) {\n const n = t.indexOf(e) + 1;\n return t[n >= t.length ? 0 : n];\n}\nfunction Ze(e, t) {\n const n = e.reduce((r, i) => (t(r, i), r), /* @__PURE__ */ new Set());\n return Array.from(n.values());\n}\nfunction Ge(e, t) {\n return e.slice().sort(t);\n}\nfunction Je(e, t) {\n const n = e.findIndex(t);\n if (n < 0)\n return [];\n const r = (() => {\n for (let i = n; i < e.length; i++)\n if (!t(e[i], i))\n return i;\n return e.length;\n })();\n return e.slice(n, r);\n}\nconst lt = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({\n __proto__: null,\n addUnique: b,\n aggregateBy: Fe,\n arrayDiff: Ce,\n deleteIndices: ze,\n intersection: P,\n intersectionAll: $e,\n iterateByPairs: Ye,\n maxValue: De,\n mutableDeleteIndices: Le,\n predicateUnique: Ve,\n pushUnique: v,\n pushValueIm: Ne,\n rotate: Re,\n sliceBy: Je,\n toSorted: Ge,\n unionUnique: Ue,\n uniques: Ze\n}, Symbol.toStringTag, { value: \"Module\" }));\nclass He {\n constructor() {\n c(this, \"acquired\", !1);\n c(this, \"resolvers\", []);\n }\n acquireAsync() {\n return this.acquired ? new Promise((t) => {\n this.resolvers.push(t);\n }) : (this.acquired = !0, Promise.resolve());\n }\n release() {\n var t;\n if (!this.acquired)\n throw new Error(\"Cannot release an unacquired lock\");\n this.resolvers.length ? (t = this.resolvers.shift()) == null || t() : this.acquired = !1;\n }\n}\nfunction Qe(e, t) {\n return Promise.race([e, new Promise((n, r) => setTimeout(() => r(Error(`Timeout exceeded ${t}`)), t))]);\n}\nfunction We(e, t, n) {\n let r;\n return function(...i) {\n const o = n && !r;\n o && e.apply(this, i), r && clearTimeout(r), r = setTimeout(() => {\n r = void 0, o || e.apply(this, i);\n }, t);\n };\n}\nfunction Xe(e, t, n = !0) {\n let r = 0, i;\n return function(...o) {\n i = () => {\n e.apply(this, o), r = (/* @__PURE__ */ new Date()).getTime() + t, i = null, n && setTimeout(() => {\n i == null || i();\n }, t);\n }, (/* @__PURE__ */ new Date()).getTime() > r && i();\n };\n}\nconst Ke = (e) => {\n const t = /* @__PURE__ */ new Map();\n return function(...n) {\n const r = JSON.stringify(n);\n return (t.has(r) || t.set(r, e.call(null, ...n))) && t.get(r);\n };\n}, et = (e, t) => (...n) => (t(), e(...n));\nfunction _(e) {\n const t = (n) => e(n);\n return t.pipe = (n) => _((r) => n(e(r))), t;\n}\nfunction tt(e) {\n let t = 0n, n;\n return async function(...r) {\n const i = ++t;\n try {\n await n;\n } catch {\n }\n if (t !== i)\n return {\n ok: !1\n };\n const o = e(...r);\n return n = o, {\n ok: !0,\n value: await o\n };\n };\n}\nfunction nt(e, t) {\n try {\n return e();\n } catch {\n return t == null ? void 0 : t();\n }\n}\nconst ht = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({\n __proto__: null,\n AwaitLock: He,\n debounce: We,\n exclusiveRequest: tt,\n memoize: Ke,\n pipe: _,\n promiseTimeout: Qe,\n throttle: Xe,\n tryDo: nt,\n wrapFunction: et\n}, Symbol.toStringTag, { value: \"Module\" })), rt = [\n \"B\",\n \"kB\",\n \"MB\",\n \"GB\",\n \"TB\",\n \"PB\",\n \"EB\",\n \"ZB\",\n \"YB\"\n], it = [\n \"B\",\n \"kiB\",\n \"MiB\",\n \"GiB\",\n \"TiB\",\n \"PiB\",\n \"EiB\",\n \"ZiB\",\n \"YiB\"\n], ot = [\n \"b\",\n \"kbit\",\n \"Mbit\",\n \"Gbit\",\n \"Tbit\",\n \"Pbit\",\n \"Ebit\",\n \"Zbit\",\n \"Ybit\"\n], ut = [\n \"b\",\n \"kibit\",\n \"Mibit\",\n \"Gibit\",\n \"Tibit\",\n \"Pibit\",\n \"Eibit\",\n \"Zibit\",\n \"Yibit\"\n], m = (e, t) => {\n let n = String(e);\n return typeof t == \"string\" || Array.isArray(t) ? n = e.toLocaleString(t) : t === !0 && (n = e.toLocaleString(void 0)), n;\n};\nfunction dt(e, t) {\n if (e = typeof e == \"bigint\" ? Number(e) : e, !Number.isFinite(e))\n throw new TypeError(`Expected a finite number, got ${typeof e}: ${e}`);\n Object.assign(t, {\n bits: !1,\n binary: !1\n });\n const n = t.bits ? t.binary ? ut : ot : t.binary ? it : rt;\n if (t.signed && e === 0)\n return ` 0 ${n[0]}`;\n const r = e < 0, i = r ? \"-\" : t.signed ? \"+\" : \"\";\n if (r && (e = -e), e < 1) {\n const M = m(e, t.locale);\n return i + M + \" \" + n[0];\n }\n const o = Math.min(Math.floor(t.binary ? Math.log(e) / Math.log(1024) : Math.log10(e) / 3), n.length - 1);\n e /= (t.binary ? 1024 : 1e3) ** o, e = Number(e.toPrecision(3));\n const s = m(Number(e), t.locale), u = n[o];\n return i + s + \" \" + u;\n}\nfunction pt(e) {\n return e.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n}\nexport {\n He as AwaitLock,\n L as Deferred,\n Q as Interval,\n b as addUnique,\n Se as after,\n Fe as aggregateBy,\n oe as alike,\n Ce as arrayDiff,\n W as arrayFrom,\n ce as asConst,\n Te as assertString,\n D as async,\n Oe as before,\n Ee as beforeLast,\n U as between,\n Be as bindMethods,\n j as bool,\n Y as call,\n ae as camelToKebab,\n N as checkIfDefined,\n C as checkIfNotEmpty,\n R as clamp,\n lt as collections,\n We as debounce,\n p as deepClone,\n Pe as deepEqual,\n y as deepPatch,\n d as delay,\n ze as deleteIndices,\n te as errorOptional,\n pt as escapeRegExp,\n tt as exclusiveRequest,\n X as exhaustive,\n S as extractExtension,\n E as extractFileName,\n de as extractPaths,\n re as flatValue,\n ht as functions,\n Ae as getProp,\n be as hashCode,\n ue as identity,\n P as intersection,\n $e as intersectionAll,\n a as isArray,\n h as isJsonEqual,\n l as isNonPrimitive,\n f as isPlainObject,\n ye as isRegexpValid,\n Ye as iterateByPairs,\n me as lcFirst,\n $ as listToOptions,\n ve as map,\n K as match,\n De as maxValue,\n Ke as memoize,\n Le as mutableDeleteIndices,\n A as notEmpty,\n I as notUndef,\n at as objects,\n ee as okOptional,\n ke as omit,\n V as performanceTimer,\n qe as pick,\n je as pickValues,\n _ as pipe,\n pe as pluralize,\n Ve as predicateUnique,\n dt as prettyBytes,\n Qe as promiseTimeout,\n v as pushUnique,\n Ne as pushValueIm,\n J as randomInt,\n T as randomString,\n w as range,\n ie as resolveAwaited,\n Re as rotate,\n xe as setProp,\n _e as shallowClone,\n Me as shallowDiff,\n Ie as shiftProp,\n Je as sliceBy,\n st as strings,\n Z as tap,\n G as tapIf,\n z as tear,\n Xe as throttle,\n F as timer,\n H as times,\n O as toList,\n Ge as toSorted,\n le as trimChars,\n he as trimCharsLeft,\n nt as tryDo,\n ge as ucFirst,\n q as undef,\n Ue as unionUnique,\n fe as unionize,\n we as uniqueId,\n k as uniqueValues,\n Ze as uniques,\n ne as unwrap,\n ft as utils,\n et as wrapFunction\n};\n//# sourceMappingURL=index.mjs.map\n","<script lang=\"ts\" setup>\nimport type { ContextOption } from './types';\n\nconst emit = defineEmits(['close']);\n\ndefineProps<{\n options: readonly ContextOption[];\n}>();\n\nconst onClickOption = (opt: ContextOption) => {\n opt.cb();\n emit('close');\n};\n</script>\n\n<template>\n <div class=\"context-menu\">\n <div v-for=\"(opt, i) in options\" :key=\"i\" @click.stop=\"onClickOption(opt)\">\n <span>{{ opt.text }}</span>\n </div>\n </div>\n</template>\n\n<style lang=\"scss\" scoped>\n.context-menu {\n display: block;\n position: absolute;\n top: 50px;\n left: 50px;\n z-index: var(--z-context-menu);\n\n margin: 0;\n padding: 3px 0 4px;\n\n background: rgba(255, 255, 255, 0.95);\n box-shadow: 0px 8px 15px rgba(0, 0, 0, 0.35);\n border-radius: 4px;\n\n font-family:\n Lucida Grande,\n sans-serif;\n font-size: 14px;\n line-height: 15px;\n\n &::before {\n display: block;\n position: absolute;\n content: '';\n top: -1px;\n left: -1px;\n bottom: -1px;\n right: -1px;\n\n border-radius: 4px;\n border: 1px solid rgba(0, 0, 0, 0.125);\n z-index: -1;\n }\n\n hr {\n border: none;\n height: 1px;\n background: rgba(0, 0, 0, 0.1);\n margin: 6px 1px 5px;\n padding: 0;\n }\n\n > div {\n display: block;\n padding: 0 20px;\n border-top: 1px solid rgba(0, 0, 0, 0);\n border-bottom: 1px solid rgba(0, 0, 0, 0);\n\n span {\n vertical-align: 2px;\n user-select: none;\n }\n\n &:hover {\n background: -webkit-linear-gradient(top, #648bf5, #2866f2);\n background: linear-gradient(to bottom, #648bf5 0%, #2866f2 100%);\n border-top: 1px solid #5a82eb;\n border-bottom: 1px solid #1758e7;\n }\n\n &:hover::after {\n color: #fff;\n }\n }\n}\n</style>\n","import Menu from './Menu.vue';\nimport { h, render } from 'vue';\nimport type { ContextOption } from './types';\n\nexport function showContextMenu(ev: MouseEvent, options: readonly ContextOption[]) {\n ev.preventDefault();\n\n const destroy = () => {\n render(null, document.body);\n };\n\n const vNode = h(Menu, {\n options,\n onClose: () => {\n destroy();\n },\n });\n\n render(vNode, document.body);\n\n const el = vNode.el as HTMLElement;\n\n el.style.top = ev.clientY + 'px';\n el.style.left = ev.clientX + 'px';\n\n document.addEventListener('click', (ev: Event) => {\n if (!el.contains(ev.target as HTMLElement)) {\n destroy();\n }\n });\n\n return destroy;\n}\n","import { type InjectionKey, type ComputedRef, inject } from 'vue';\nimport type { TableSettings } from './types';\nimport type { State } from './state';\n\nexport const settingsKey = Symbol() as InjectionKey<ComputedRef<TableSettings>>;\n\nexport const stateKey = Symbol() as InjectionKey<State>;\n\nexport const injectState = () => inject(stateKey)!;\n","<script lang=\"ts\" setup>\nimport { call } from '@milaboratories/helpers';\nimport type { ValueType } from './types';\nimport { computed, reactive, ref, unref } from 'vue';\n\nconst emit = defineEmits(['update:modelValue']);\n\nconst props = defineProps<{\n modelValue: unknown;\n valueType: ValueType | undefined;\n editable?: boolean;\n}>();\n\nconst data = reactive({\n edit: false as boolean,\n});\n\nconst valueTypeRef = computed(() => props.valueType);\n\nconst onInput = (ev: Event) => {\n const inputValue = (ev.target as HTMLInputElement)?.value;\n\n const valueType = unref(valueTypeRef);\n\n // @todo temp, replace to parse functions\n const value = call(() => {\n if (valueType === 'integer') {\n return parseInt(inputValue, 10);\n }\n\n if (valueType === 'float') {\n return Number(inputValue);\n }\n\n return inputValue;\n });\n\n emit('update:modelValue', value);\n\n data.edit = false;\n};\n\nconst baseRef = ref<HTMLElement>();\n\nconst onClick = (ev: MouseEvent) => {\n if (!ev.metaKey && props.editable) {\n data.edit = true;\n requestAnimationFrame(() => {\n baseRef.value?.querySelector('input')?.focus();\n });\n }\n};\n</script>\n\n<template>\n <div ref=\"baseRef\" class=\"base-cell\" :class=\"{ 'base-cell__edit': data.edit }\" @click=\"onClick\">\n <input v-if=\"data.edit\" :value=\"modelValue\" @focusout=\"data.edit = false\" @change=\"onInput\" />\n <div v-else>{{ modelValue }}</div>\n </div>\n</template>\n","<script lang=\"ts\" setup>\nimport { tapIf } from '@milaboratories/helpers';\nimport { showContextMenu } from '../contextMenu';\nimport type { ContextOption } from '../contextMenu/types';\nimport { injectState } from './keys';\nimport type { Row, TableCell } from './types';\nimport { computed, ref } from 'vue';\nimport BaseCellComponent from './BaseCellComponent.vue';\n\nconst props = defineProps<{\n cell: TableCell;\n}>();\n\nconst state = injectState();\n\nconst valueTypeRef = computed(() => props.cell.column.valueType);\n\nconst onInput = (value: unknown) => {\n tapIf(state.settings.value.onUpdatedRow, (f) => {\n const row = props.cell.row;\n\n const dataRow = { ...row.dataRow, [props.cell.id]: value };\n\n f({ ...row, dataRow });\n });\n};\n\nconst onClick = (ev: MouseEvent) => {\n if (ev.metaKey) {\n state.selectRow(props.cell.row.primaryKey);\n }\n};\n\nconst onContextMenu = (ev: MouseEvent, row: Row) => {\n if (ev.type === 'contextmenu') {\n ev.preventDefault();\n } else {\n return;\n }\n\n const settings = state.settings ?? {};\n\n const options = [] as ContextOption[];\n\n const { onSelectedRows, onSelectedColumns } = settings.value;\n\n const isSelected = state.data.selectedRows.has(row.primaryKey);\n\n if (onSelectedRows && onSelectedRows.length) {\n if (isSelected) {\n options.push({\n text: 'Deselect row',\n cb() {\n state.data.selectedRows.delete(props.cell.row.primaryKey);\n },\n });\n } else {\n options.push({\n text: 'Select row',\n cb() {\n state.selectRow(props.cell.row.primaryKey);\n },\n });\n }\n }\n\n if (onSelectedColumns && onSelectedColumns.length) {\n options.push({\n text: 'Select column',\n cb() {\n state.selectColumn(props.cell.column.id);\n },\n });\n\n options.push({\n text: 'Unselect column',\n cb() {\n state.unselectColumn(props.cell.column.id);\n },\n });\n }\n\n if (!options.length) {\n return;\n }\n\n showContextMenu(ev, options);\n};\n\nconst cellRef = ref<HTMLElement>();\n\nconst CustomComponent = computed(() => (props.cell.column.component ? props.cell.column.component() : undefined));\n</script>\n\n<template>\n <div\n ref=\"cellRef\"\n class=\"td-cell\"\n :class=\"{ [cell.class]: true }\"\n :data-row-index.attr=\"cell.row.index\"\n @click=\"onClick\"\n @contextmenu=\"(ev) => onContextMenu(ev, cell.row)\"\n >\n <div v-if=\"cell.control\" class=\"control-cell\">{{ cell.row.index }}</div>\n <component :is=\"CustomComponent\" v-else-if=\"CustomComponent\" :model-value=\"cell.value\" @update:model-value=\"onInput\" />\n <BaseCellComponent v-else :model-value=\"cell.value\" :value-type=\"valueTypeRef\" :editable=\"cell.column.editable\" @update:model-value=\"onInput\" />\n </div>\n</template>\n","<template>\n <svg width=\"48\" height=\"48\" viewBox=\"0 0 48 48\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M24 41.5H9C7.61929 41.5 6.5 40.3807 6.5 39V24H9.5V38.5H24V41.5Z\" fill=\"#CFD1DB\" />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M41.5 9C41.5 7.61929 40.3807 6.5 39 6.5H9C7.61929 6.5 6.5 7.61929 6.5 9V19.5H9.5H28.5V38.5V41.5H39C40.3807 41.5 41.5 40.3807 41.5 39V9ZM38.5 9.5V16.5H31.5V9.5H38.5ZM38.5 38.5V19.5H31.5V38.5H38.5ZM9.5 9.5V16.5H28.5V9.5H9.5Z\"\n fill=\"#CFD1DB\"\n />\n </svg>\n</template>\n","export function toComparable(v: unknown) {\n if (typeof v === 'number') {\n return v;\n } else if (typeof v === 'string') {\n return v;\n } else {\n return String(v);\n }\n}\n\nexport function compareRecords(sorts: Record<string, 'ASC' | 'DESC'>, a: Record<string, unknown>, b: Record<string, unknown>) {\n for (const [name, direction] of Object.entries(sorts)) {\n const v1 = toComparable(a[name]);\n const v2 = toComparable(b[name]);\n\n const rev = direction === 'DESC' ? -1 : 1;\n\n if (v1 === v2) {\n continue;\n }\n\n return (v1 > v2 ? 1 : -1) * rev;\n }\n\n return 0;\n}\n\nexport const identity = <T>(v: T): T => v;\n\nexport function rotate<T>(v: T, lst: T[]) {\n const next = lst.indexOf(v) + 1;\n return lst[next >= lst.length ? 0 : next];\n}\n\n/**\n * Returns a first contiguous copy of a section of an array where predicate is true\n * @param arr\n * @param predicate\n * @returns\n */\nexport function sliceBy<T>(arr: readonly T[], predicate: (el: T, index: number) => boolean): T[] {\n const left = arr.findIndex(predicate);\n\n if (left < 0) {\n return [];\n }\n\n const right = (() => {\n for (let i = left; i < arr.length; i++) {\n if (predicate(arr[i], i)) {\n continue;\n }\n\n return i;\n }\n\n return arr.length;\n })();\n\n return arr.slice(left, right);\n}\n","<script lang=\"ts\" setup>\nimport { showContextMenu } from '../contextMenu';\nimport type { ContextOption } from '../contextMenu/types';\nimport { rotate } from './domain';\nimport type { ColumnSpecSettings } from './types';\n\nconst emit = defineEmits(['delete:column', 'expand:column', 'change:sort']);\n\ndefineProps<{\n col: ColumnSpecSettings;\n}>();\n\nfunction onContextMenu(ev: MouseEvent) {\n ev.preventDefault();\n\n const options = [] as ContextOption[]; // @TODO\n\n if (!options.length) {\n return;\n }\n\n showContextMenu(ev, options);\n}\n\nfunction onSort(col: ColumnSpecSettings) {\n const v = col.sort?.direction ?? 'DESC';\n emit('change:sort', {\n colId: col.id,\n direction: rotate(v, ['DESC', 'ASC']),\n });\n}\n</script>\n\n<template>\n <div class=\"cell th-cell\" :data-col-id.attr=\"col.id\" :class=\"{ 'justify-center': col.justify, frozen: col.frozen }\" @contextmenu=\"onContextMenu\">\n <div v-if=\"col.valueType\" :class=\"col.valueType\" />\n {{ col.label }}\n <div v-if=\"col.sort\" class=\"sort\" :class=\"col.sort.direction\" @click.stop=\"() => onSort(col)\" />\n </div>\n</template>\n","<script lang=\"ts\" setup>\nimport { ref, nextTick } from 'vue';\nimport type { TableRow } from './types';\nimport { tapIf } from '@milaboratories/helpers';\n\ndefineProps<{\n row: TableRow;\n}>();\n\nconst trRef = ref<HTMLElement>();\n\n// hook to prevent weird left scroll after child repaint (@TODO)\nconst onScroll = () => {\n nextTick().then(() => {\n tapIf(trRef.value, (el) => (el.scrollLeft = 0));\n });\n};\n</script>\n\n<template>\n <div ref=\"trRef\" class=\"tr-body\" scroll=\"no\" :style=\"row.style\" :class=\"{ selected: row.selected }\" @scroll=\"onScroll\">\n <slot />\n </div>\n</template>\n","<script lang=\"ts\" setup>\nimport { computed } from 'vue';\nimport type { ColumnSpecSettings } from './types';\nimport { injectState } from './keys';\n\nconst state = injectState();\n\nconst props = defineProps<{\n column: ColumnSpecSettings;\n}>();\n\nconst selected = computed(() => state.data.selectedColumns.has(props.column.id));\n</script>\n\n<template>\n <div class=\"column-caret\" :class=\"{ selected, frozen: column.frozen }\" />\n</template>\n","import { onMounted, onUnmounted, unref } from 'vue';\nimport type { MaybeRef } from '@/types';\n\ntype EventMap = WindowEventMap & HTMLElementEventMap & { adjust: Event };\n\nexport function useEventListener<T extends EventTarget, E extends EventMap[K], K extends keyof EventMap>(\n target: MaybeRef<T | undefined>,\n type: K,\n callback: (this: T, evt: E) => void,\n options?: AddEventListenerOptions | boolean,\n) {\n onMounted(() => unref(target)?.addEventListener(type, callback as (this: T, evt: Event) => void, options));\n onUnmounted(() => unref(target)?.removeEventListener(type, callback as (this: T, evt: Event) => void, options));\n}\n","import { onMounted, onUnmounted } from 'vue';\n\nexport function useMouseUp(update: (ev: globalThis.MouseEvent) => void) {\n onMounted(() => window.addEventListener('mouseup', update));\n onUnmounted(() => window.removeEventListener('mouseup', update));\n}\n","export function requestTick<P>(cb: (...args: P[]) => void) {\n let tick = false;\n\n return function handle(...args: P[]) {\n if (!tick) {\n requestAnimationFrame(() => {\n cb(...args);\n tick = false;\n });\n tick = true;\n } else {\n // console.log('handle pressure');\n }\n };\n}\n","import { useEventListener } from '@/composition/useEventListener.ts';\nimport { useMouseUp } from './useMouseUp';\nimport { requestTick } from '@/helpers';\n\nexport function useColumn(cb: (state: { x: number; width: number; diff: number }) => void, clear: () => void) {\n let state = undefined as { x: number; width: number } | undefined;\n\n function start(e: { x: number; width: number }) {\n state = { ...e };\n }\n\n useMouseUp(() => {\n state = undefined;\n clear();\n });\n\n const handle = requestTick(cb);\n\n useEventListener(window, 'mousemove', (e: { x: number }) => {\n if (state) {\n handle({\n x: state.x,\n width: state.width,\n diff: e.x - state.x,\n });\n }\n });\n\n return {\n start,\n };\n}\n","export const GAP = 1;\n\nexport const RESIZE_GAP = 10;\n\nexport const MIN_COLUMN_WIDTH = 30;\n\nexport const DEFAULT_ROW_HEIGHT = 40;\n\nexport const WINDOW_DELTA = 60;\n","import { onMounted, onUnmounted, reactive } from 'vue';\n\nexport function useMouse() {\n const pos = reactive({\n x: 0,\n y: 0,\n });\n\n function update(event: MouseEvent) {\n pos.x = event.pageX;\n pos.y = event.pageY;\n }\n\n onMounted(() => window.addEventListener('mousemove', update));\n onUnmounted(() => window.removeEventListener('mousemove', update));\n\n return pos;\n}\n","import type { Ref } from 'vue';\nimport { ref } from 'vue';\nimport { useEventListener } from './useEventListener';\nimport type { MaybeRef } from '@/types';\n\nexport interface UseElementHoverOptions {\n delayEnter?: number;\n delayLeave?: number;\n}\n\nexport function useHover(el: MaybeRef<EventTarget | undefined>, options: UseElementHoverOptions = {}): Ref<boolean> {\n const { delayEnter = 0, delayLeave = 0 } = options;\n\n const isHovered = ref(false);\n let timer: ReturnType<typeof setTimeout> | undefined;\n\n const toggle = (entering: boolean) => {\n const delay = entering ? delayEnter : delayLeave;\n\n if (timer) {\n clearTimeout(timer);\n timer = undefined;\n }\n\n if (delay) timer = setTimeout(() => (isHovered.value = entering), delay);\n else isHovered.value = entering;\n };\n\n if (!window) return isHovered;\n\n useEventListener(el, 'mouseenter', () => toggle(true));\n useEventListener(el, 'mouseleave', () => toggle(false));\n\n return isHovered;\n}\n","import type { Ref } from 'vue';\nimport { watchEffect, unref } from 'vue';\nimport type { ResizeTh } from '../types';\nimport { useColumn } from './useColumn';\nimport { MIN_COLUMN_WIDTH, RESIZE_GAP } from '../constants';\nimport { useMouse } from '@/composition/useMouse';\nimport { useHover } from '@/composition/useHover';\nimport { tapIf, clamp } from '@milaboratories/helpers';\nimport { identity } from '@milaboratories/helpers';\nimport type { State } from '../state';\n\ntype MaybeRef<T> = T | Ref<T>;\n\nexport function getColumnPositions(tableRef: MaybeRef<HTMLElement | undefined>) {\n const ths = tapIf(unref(tableRef)?.querySelectorAll('.th-cell'), (l) => [...l]) ?? [];\n return ths\n .map((th) => {\n const { width, x } = th.getBoundingClientRect();\n const colId = th.getAttribute('data-col-id')!;\n return identity<ResizeTh>({\n colId,\n width,\n x,\n right: x + width,\n });\n })\n .slice(0, ths.length - 1);\n}\n\nexport function useResize(state: State, tableRef: Ref<HTMLElement | undefined>) {\n const mousePos = useMouse();\n const isHovered = useHover(tableRef, {});\n const { data } = state;\n\n const resize = useColumn(\n (s) => {\n tapIf(data.resizeTh, (th) => {\n const col = data.columns.find((col) => col.id === th.colId);\n if (col) {\n col.width = clamp(s.width + s.diff, MIN_COLUMN_WIDTH, 10000);\n state.adjustWidth();\n }\n });\n },\n () => {\n data.resize = false;\n data.resizeTh = undefined;\n document.body.style.cursor = '';\n },\n );\n\n const mouseDown = (e: MouseEvent) => {\n if (data.resizeTh) {\n data.resize = true;\n resize.start({\n x: e.x,\n width: data.resizeTh.width,\n });\n }\n };\n\n watchEffect(() => {\n if (!isHovered.value) {\n document.body.style.cursor = '';\n return;\n }\n\n if (data.resize) {\n return;\n }\n\n const th = getColumnPositions(tableRef).find((it) => {\n return Math.abs(mousePos.x - it.right) < RESIZE_GAP;\n });\n\n if (th) {\n document.body.style.cursor = 'col-resize';\n data.resizeTh = th;\n } else {\n data.resizeTh = undefined;\n document.body.style.cursor = '';\n }\n });\n\n return {\n mouseDown,\n };\n}\n","<script lang=\"ts\" setup>\nimport { computed } from 'vue';\nimport { injectState } from './keys';\n\nconst state = injectState();\n\nconst selectedRows = computed(() => state.getSelectedRows());\n\nconst isVisible = computed(() => selectedRows.value.length > 0);\n\nconst ops = computed(() => state.settings?.value.onSelectedRows ?? []);\n\nconst actions = computed(() =>\n ops.value.map((op) => ({\n label: op.label,\n cb: () => {\n op.cb(selectedRows.value);\n state.data.selectedRows.clear();\n state.data.rows = [];\n },\n })),\n);\n</script>\n\n<template>\n <div v-if=\"isVisible\" class=\"command-menu\">\n <span v-if=\"selectedRows.length\">{{ selectedRows.length }} rows selected</span>\n <hr />\n <span v-for=\"(action, i) in actions\" :key=\"i\" class=\"command\" @click.stop=\"action.cb\">{{ action.label }}</span>\n </div>\n</template>\n","<script lang=\"ts\" setup>\nimport { computed } from 'vue';\nimport { injectState } from './keys';\n\nconst state = injectState();\n\nconst selectedColumns = computed(() => state.getSelectedColumns());\n\nconst isVisible = computed(() => selectedColumns.value.length > 0);\n\nconst ops = computed(() => state.settings?.value.onSelectedColumns ?? []);\n\nconst actions = computed(() =>\n ops.value.map((op) => ({\n label: op.label,\n cb: () => {\n op.cb(selectedColumns.value);\n state.data.selectedColumns.clear();\n },\n })),\n);\n</script>\n\n<template>\n <div v-if=\"isVisible\" class=\"command-menu\">\n <span v-if=\"selectedColumns.length\">selected columns {{ selectedColumns.length }}</span>\n <hr />\n <span v-for=\"(action, i) in actions\" :key=\"i\" class=\"command\" @click.stop=\"action.cb\">{{ action.label }}</span>\n </div>\n</template>\n","import type { MaybeRef } from '@/types';\nimport { unref } from 'vue';\nimport { useEventListener } from '@/composition/useEventListener';\n\ntype CustomEvent = {\n x: number;\n y: number;\n dx: number;\n dy: number;\n stop?: boolean;\n};\n\ntype CaptureState = {\n el: HTMLElement | undefined;\n x: number;\n y: number;\n};\n\nexport function useMouseCapture<T extends HTMLElement>(elRef: MaybeRef<T | undefined>, cb: (ev: CustomEvent, state: CaptureState) => void) {\n const state: CaptureState = {\n el: undefined as HTMLElement | undefined,\n x: 0,\n y: 0,\n };\n\n const createCustom = (ev: MouseEvent) => ({\n x: ev.x,\n y: ev.y,\n dx: ev.x - state.x,\n dy: ev.y - state.y,\n });\n\n useEventListener(document, 'mousedown', (ev) => {\n if (ev.target === unref(elRef)) {\n // disable selection when moving\n if (ev.stopPropagation) ev.stopPropagation();\n if (ev.preventDefault) ev.preventDefault();\n state.el = unref(elRef);\n state.x = ev.x;\n state.y = ev.y;\n }\n });\n\n useEventListener(document, 'mouseup', (ev) => {\n if (!state.el) {\n return;\n }\n\n state.el = undefined;\n\n cb(\n {\n ...createCustom(ev),\n stop: true,\n },\n state,\n );\n });\n\n useEventListener(document, 'mousemove', (ev) => {\n if (state.el) {\n cb(createCustom(ev), state);\n }\n });\n}\n","<script lang=\"ts\" setup>\nimport { computed, ref } from 'vue';\nimport { useMouseCapture } from '@/composition/useMouseCapture';\n\nconst emit = defineEmits<{\n (e: 'change:offset', value: number): void;\n}>();\n\nconst props = defineProps<{\n offset: number;\n windowSize: number;\n dataSize: number;\n}>();\n\nconst handleRef = ref<HTMLElement>();\n\nconst scrollSize = computed(() => props.windowSize - 12);\n\nconst isVisible = computed(() => props.windowSize < props.dataSize);\n\nconst handleOffset = computed(() => Math.ceil(props.offset * (scrollSize.value / props.dataSize)));\n\nconst handleLength = computed(() => Math.ceil((scrollSize.value * scrollSize.value) / props.dataSize));\n\nconst handleStyle = computed(() => ({ top: `${handleOffset.value}px`, height: `${handleLength.value}px` }));\n\nuseMouseCapture(handleRef, (ev, state) => {\n const newOffset = ((handleOffset.value + ev.dy) * props.dataSize) / scrollSize.value;\n emit('change:offset', newOffset);\n state.x = ev.x;\n state.y = ev.y;\n});\n</script>\n\n<template>\n <div class=\"t-scroll\" :style=\"{ height: `${windowSize}px` }\">\n <div>\n <div v-if=\"isVisible\" ref=\"handleRef\" class=\"t-scroll__handle\" :style=\"handleStyle\" />\n </div>\n </div>\n</template>\n","import type { ColumnSpecSettings, TableSettings, TableColumn, TableData } from '../types';\nimport type { ComputedRef } from 'vue';\nimport { computed } from 'vue';\nimport { sliceBy } from '@milaboratories/helpers';\nimport { asConst } from '@milaboratories/helpers';\nimport { uniqueId } from '@milaboratories/helpers';\nimport { GAP } from '../constants';\n\nexport function useTableColumns(state: { data: TableData; settings: ComputedRef<TableSettings> }) {\n return computed<TableColumn[]>(() => {\n const { data, settings } = state;\n\n const { bodyWidth, scrollLeft } = data;\n\n const columns = [...data.columns];\n\n const controlId = uniqueId();\n\n if (settings.value.controlColumn) {\n columns.unshift(\n asConst<ColumnSpecSettings>({\n id: controlId,\n label: '#',\n width: 60,\n frozen: true,\n }),\n );\n }\n\n let offset = 0;\n\n const tableColumns = columns.map((col) => {\n const it = { ...col, offset };\n offset += col.width + GAP;\n return it;\n });\n\n const frozen = tableColumns.filter((col) => col.frozen);\n\n const visibleColumns = sliceBy(tableColumns, (col) => {\n if (col.frozen) {\n return false;\n }\n return scrollLeft < col.offset + col.width && col.offset < bodyWidth + scrollLeft;\n }).concat(frozen);\n\n return visibleColumns.map<TableColumn>((col) => ({\n ...col,\n style: {\n left: col.frozen ? `${col.offset}px` : `${col.offset - data.scrollLeft}px`,\n width: `${col.width}px`,\n },\n control: col.id === controlId,\n }));\n });\n}\n","import type { ComputedRef } from 'vue';\nimport { computed } from 'vue';\nimport type { TableCell, TableColumn, TableData, TableRow } from '../types';\nimport { identity } from '@milaboratories/helpers';\n\nexport function useTableRows(data: TableData, tableColumns: ComputedRef<TableColumn[]>) {\n const classesRef = computed(() =>\n tableColumns.value.reduce(\n (r, col) => {\n r[col.id] = col.justify ? 'justify-' + col.justify : '';\n return r;\n },\n {} as Record<string | symbol, string>,\n ),\n );\n\n return computed<TableRow[]>(() => {\n return data.rows.map<TableRow>((row) => {\n const classes = classesRef.value;\n\n const { primaryKey, offset, dataRow, height } = row;\n\n const cells = tableColumns.value.map<TableCell>((column) => {\n return {\n id: column.id,\n column,\n row,\n value: dataRow[column.id],\n class: classes[column.id],\n editable: column.editable,\n width: column.width,\n style: column.style,\n control: column.control,\n };\n });\n\n return identity<TableRow>({\n style: {\n top: `${offset - data.scrollTop}px`,\n height: `${row.height}px`,\n },\n primaryKey,\n offset,\n height,\n cells,\n selected: data.selectedRows.has(primaryKey),\n });\n });\n });\n}\n","import { computed, provide, reactive, watch } from 'vue';\nimport type { TableProps, TableData, DataWindow, PrimaryKey, Row, ColumnSpecSettings, DataSource } from './types';\nimport { deepClone, deepEqual } from '@milaboratories/helpers';\nimport { stateKey } from './keys';\nimport { clamp, delay, resolveAwaited, tap } from '@milaboratories/helpers';\nimport { useTableColumns } from './composition/useTableColumns';\nimport { useTableRows } from './composition/useTableRows';\nimport { GAP, WINDOW_DELTA } from './constants';\n\nconst loadRows = async (dataWindow: { scrollTop: number; bodyHeight: number }, dataSource: DataSource) => {\n const { scrollTop, bodyHeight } = dataWindow;\n\n await delay(0);\n\n return resolveAwaited({\n rows: dataSource.getRows(scrollTop, bodyHeight),\n dataWindow,\n });\n};\n\nexport function createState(props: TableProps) {\n const data = reactive<TableData>({\n rowIndex: -1,\n columns: [],\n pendingLoads: 0,\n currentWindow: undefined,\n rows: [],\n resize: false,\n resizeTh: undefined,\n dataHeight: 0,\n bodyHeight: props.settings.height,\n bodyWidth: 0,\n scrollTop: 0,\n scrollLeft: 0,\n selectedRows: new Set<PrimaryKey>(),\n selectedColumns: new Set<string>(),\n });\n\n watch(\n () => props.settings,\n (newSettings) => {\n data.columns = deepClone(newSettings.columns);\n data.currentWindow = undefined;\n newSettings.dataSource\n .getHeight()\n .then((dataHeight) => {\n data.dataHeight = dataHeight;\n state.updateBodyHeight();\n })\n .catch((err) => (data.error = err));\n },\n { immediate: true },\n );\n\n const settings = computed(() => {\n return props.settings;\n });\n\n const columnsWidth = computed(() => {\n return data.columns.reduce((acc, col) => acc + col.width + GAP, 0);\n });\n\n const maxScrollTop = computed(() => tap(state.data.dataHeight - state.data.bodyHeight, (v) => (v > 0 ? v : 0)));\n const maxScrollLeft = computed(() => tap(columnsWidth.value - state.data.bodyWidth, (v) => (v > 0 ? v : 0)));\n\n const dataDimensions = computed<DataWindow & { current?: DataWindow }>(() => {\n return {\n bodyHeight: data.bodyHeight,\n scrollTop: data.scrollTop,\n current: data.currentWindow,\n };\n });\n\n const tableColumns = useTableColumns({\n data,\n settings,\n });\n\n const tableRows = useTableRows(data, tableColumns);\n\n const adjustWidth = () => {\n const newWidth = data.columns.reduce((acc, col) => acc + col.width + GAP, 0);\n\n const rightOffset = data.bodyWidth + data.scrollLeft;\n\n if (newWidth < rightOffset) {\n const last = data.columns[data.columns.length - 1];\n last.width = last.width + (rightOffset - newWidth);\n }\n };\n\n const state = {\n data,\n settings,\n tableColumns,\n tableRows,\n adjustWidth,\n updateOffsets(ev: { deltaY: number; deltaX: number }) {\n this.updateScrollTop(data.scrollTop + ev.deltaY);\n this.updateScrollLeft(data.scrollLeft + ev.deltaX);\n },\n getSelectedRows(): Row[] {\n return data.rows.filter((row) => data.selectedRows.has(row.primaryKey));\n },\n getSelectedColumns(): ColumnSpecSettings[] {\n return data.columns.filter((col) => data.selectedColumns.has(col.id));\n },\n selectRow(rowId: PrimaryKey) {\n data.selectedRows.add(rowId);\n },\n unselectRow(rowId: PrimaryKey) {\n data.selectedRows.delete(rowId);\n },\n selectColumn(columnId: string) {\n data.selectedColumns.add(columnId);\n },\n unselectColumn(columnId: string) {\n data.selectedColumns.delete(columnId);\n },\n updateScrollTop(scrollTop: number) {\n data.scrollTop = clamp(scrollTop, 0, maxScrollTop.value);\n },\n updateScrollLeft(scrollLeft: number) {\n data.scrollLeft = clamp(scrollLeft, 0, maxScrollLeft.value);\n },\n updateBodyHeight() {\n const { height } = props.settings;\n const { dataHeight } = data;\n const bodyHeight = height > dataHeight ? dataHeight : height;\n data.bodyHeight = bodyHeight;\n },\n updateDimensions(rect: { height: number; width: number }) {\n this.updateBodyHeight();\n state.data.bodyWidth = rect.width;\n state.adjustWidth();\n data.rows = [];\n data.currentWindow = undefined;\n },\n };\n\n watch(\n dataDimensions,\n (n, _o) => {\n const current = n.current;\n\n const needToLoad = !current || n.scrollTop < current.scrollTop || n.scrollTop + n.bodyHeight > current.bodyHeight + current.scrollTop;\n\n if (needToLoad) {\n data.currentWindow = {\n scrollTop: n.scrollTop - WINDOW_DELTA,\n bodyHeight: n.bodyHeight + WINDOW_DELTA * 2,\n };\n loadRows(deepClone(data.currentWindow), settings.value.dataSource).then(({ rows, dataWindow }) => {\n if (deepEqual(data.currentWindow, dataWindow)) {\n data.rows = rows;\n }\n });\n }\n },\n { deep: true, immediate: true },\n );\n\n provide(stateKey, state);\n\n return state;\n}\n\nexport type State = ReturnType<typeof createState>;\n","<script lang=\"ts\" setup>\nimport './assets/data-table-style.scss';\nimport { ref, unref, onMounted, nextTick, watchPostEffect, watch, computed } from 'vue';\nimport TdCell from './TdCell.vue';\nimport type { TableSettings, TableData } from './types';\nimport TableIcon from './assets/TableIcon.vue';\nimport TrHead from './TrHead.vue';\nimport ThCell from './ThCell.vue';\nimport TrBody from './TrBody.vue';\nimport ColumnCaret from './ColumnCaret.vue';\nimport { useEventListener } from '@/index';\nimport { tapIf } from '@milaboratories/helpers';\nimport { useResize } from './composition/useResize';\nimport RowsCommandMenu from './RowsCommandMenu.vue';\nimport ColumnsCommandMenu from './ColumnsCommandMenu.vue';\nimport TScroll from './TScroll.vue';\nimport { createState } from './state';\n\nconst emit = defineEmits<{\n (e: 'update:data', value: TableData): void;\n (e: 'change:sort', value: unknown): void;\n}>();\n\nconst props = defineProps<{\n settings: Readonly<TableSettings>;\n}>();\n\nconst state = createState(props);\n\nconst hasNoData = computed(() => state.data.rows.length === 0);\n\nconst tableBodyStyle = computed(() => ({\n height: hasNoData.value ? '212px' /* css value */ : state.data.bodyHeight + 'px',\n}));\n\nwatch(state.data, (v) => emit('update:data', v), { deep: true });\n\nwatch(props, () => updateDimensions);\n\nconst tableRef = ref<HTMLElement>();\nconst headRef = ref<HTMLElement>();\nconst bodyRef = ref<HTMLElement>();\n\nconst updateDimensions = () => {\n tapIf(bodyRef.value, (el) => {\n state.updateDimensions(el.getBoundingClientRect());\n });\n};\n\nconst tableColumns = state.tableColumns;\n\nconst tableRows = state.tableRows;\n\nconst { mouseDown } = useResize(state, tableRef);\n\nonMounted(() => {\n nextTick(updateDimensions);\n});\n\nwatchPostEffect(() => {\n unref(props.settings);\n nextTick(updateDimensions);\n});\n\nuseEventListener(window, 'resize', () => nextTick(updateDimensions));\n\nconst onWheel = (ev: WheelEvent) => {\n ev.preventDefault();\n state.updateOffsets(ev);\n};\n</script>\n\n<template>\n <div ref=\"tableRef\" class=\"data-table\" @mousedown=\"mouseDown\">\n <div class=\"command-menu__container\">\n <RowsCommandMenu />\n <ColumnsCommandMenu />\n </div>\n <div ref=\"headRef\" class=\"table-head\">\n <TrHead>\n <ThCell v-for=\"(col, i) in tableColumns\" :key=\"i\" :col=\"col\" :style=\"col.style\" @change:sort=\"$emit('change:sort', $event)\" />\n </TrHead>\n </div>\n <div ref=\"bodyRef\" class=\"table-body\" :style=\"tableBodyStyle\" @wheel=\"onWheel\">\n <div v-if=\"hasNoData\" class=\"table-body__no-data\">\n <div>\n <TableIcon />\n <div>No Data To Show</div>\n </div>\n </div>\n <TrBody v-for=\"(row, i) in tableRows\" :key=\"i\" :row=\"row\">\n <TdCell v-for=\"cell in row.cells\" :key=\"cell.column.id + ':' + i\" :cell=\"cell\" :style=\"cell.style\" />\n </TrBody>\n </div>\n <div class=\"carets\">\n <ColumnCaret v-for=\"(col, i) in tableColumns\" :key=\"i\" :column=\"col\" :style=\"col.style\" @change:sort=\"$emit('change:sort', $event)\" />\n </div>\n <TScroll\n :offset=\"state.data.scrollTop\"\n :window-size=\"state.data.bodyHeight\"\n :data-size=\"state.data.dataHeight\"\n @change:offset=\"state.updateScrollTop\"\n />\n </div>\n</template>\n","import type * as Types from '../types';\nimport type { DataRow, ResolvePrimaryKey, Row, ResolveRowHeight } from '../types';\nimport { GAP } from '../constants';\nimport { sliceBy } from '../domain';\nimport { notEmpty } from '@milaboratories/helpers';\n\nconst rowsStore = new WeakMap<WeakKey, Row[]>();\n\nexport class RawData<D extends DataRow = DataRow> implements Types.DataSource {\n private dataHeight: number;\n\n constructor(\n public readonly datum: D[],\n public readonly resolveHeight: ResolveRowHeight<D>,\n public readonly resolvePrimaryKey: ResolvePrimaryKey<D>,\n ) {\n const offsets = datum.reduce(\n (dict, it, index) => {\n dict.indices.set(index, dict.total);\n dict.total += this.resolveHeight(it, index) + GAP;\n return dict;\n },\n {\n total: 0,\n indices: new Map<number, number>(),\n },\n );\n\n this.dataHeight = offsets.total;\n\n const rows = datum.map((dataRow, index) => ({\n dataRow,\n index,\n primaryKey: this.resolvePrimaryKey(dataRow, index) as Types.PrimaryKey,\n offset: notEmpty(offsets.indices.get(index)),\n height: this.resolveHeight(dataRow, index),\n }));\n\n rowsStore.set(this, rows);\n }\n\n get rows(): Row<D>[] {\n return rowsStore.get(this)! as Row<D>[];\n }\n\n async getHeight() {\n return this.dataHeight;\n }\n\n async getRows(scrollTop: number, bodyHeight: number): Promise<Row<D>[]> {\n return sliceBy(this.rows, (it) => {\n const offset = it.offset;\n return scrollTop < offset + it.height && offset < bodyHeight + scrollTop;\n });\n }\n}\n","import type * as Types from '../types';\nimport type { DataRow, Row } from '../types';\nimport { GAP } from '../constants';\nimport { clamp } from '@milaboratories/helpers';\n\nexport class AsyncData<D extends DataRow> implements Types.DataSource {\n constructor(\n public readonly api: Types.ExternalApi<D>,\n public readonly rowHeight: number,\n public readonly resolvePrimaryKey: Types.ResolvePrimaryKey,\n ) {}\n\n get height() {\n return this.rowHeight + GAP;\n }\n\n async getHeight(): Promise<number> {\n return (await this.api.count()) * this.height;\n }\n\n async getRows(scrollTop: number, bodyHeight: number): Promise<Row[]> {\n const offset = clamp(Math.floor(scrollTop / this.height), 0, Number.POSITIVE_INFINITY);\n const limit = Math.ceil(bodyHeight + 40 / this.height); // @TODO safe window\n const rows = await this.api.query({ offset, limit });\n return rows.map<Types.Row>((dataRow, index) => ({\n dataRow,\n index: offset + index,\n primaryKey: this.resolvePrimaryKey(dataRow, offset + index) as Types.PrimaryKey,\n offset: (offset + index) * (this.rowHeight + GAP),\n height: this.rowHeight,\n }));\n }\n}\n","import type { TableSettings } from './types';\nimport Component from './TableComponent.vue';\nimport type * as Types from './types';\nimport type { RawTableSettings } from './types';\nimport type { ComputedRef } from 'vue';\nimport { computed, h, reactive, unref } from 'vue';\nimport { RawData } from './adapters/RawData';\nimport type { MaybeRef } from '@/types';\nexport { AsyncData } from './adapters/AsyncData';\n\ntype AnyRef<T> = MaybeRef<T> | ComputedRef<T>;\n\nexport function settings<D extends Types.DataRow>(tableSettings: TableSettings<D>): TableSettings {\n return Object.freeze(tableSettings) as TableSettings;\n}\n\nexport function factory<const S extends TableSettings>(tableSettings: S) {\n return h(Component, { settings: Object.freeze(tableSettings) });\n}\n\nexport { Component };\n\nexport { Types };\n\n/** * Adapters ***/\n\nexport function rawDataSettings<D extends Types.DataRow>(rows: D[], rawSettings: Types.RawTableSettings<D>): TableSettings {\n const dataSource = new RawData<D>(rows, rawSettings.resolveRowHeight, rawSettings.resolvePrimaryKey);\n return { ...rawSettings, dataSource } as TableSettings;\n}\n\nexport function useRawData<D extends Types.DataRow>(rowsRef: AnyRef<D[]>, raw: MaybeRef<RawTableSettings<D>>) {\n return computed(() => {\n const rows = unref(rowsRef);\n return rawDataSettings(rows, unref(raw));\n });\n}\n\n/**\n * @deprecated\n * @param rows\n * @param raw\n * @returns\n */\nexport function useRawDataComponent<D extends Types.DataRow>(rowsRef: AnyRef<D[]>, raw: MaybeRef<RawTableSettings<D>>) {\n const settings = computed(() => {\n const rows = unref(rowsRef);\n return rawDataSettings(rows, unref(raw));\n });\n\n const props = reactive({\n settings,\n });\n\n return computed(() => h(Component, props));\n}\n","export function* mapIterable<T, R>(it: Iterable<T>, cb: (v: T) => R) {\n for (const v of it) {\n yield cb(v);\n }\n}\n\nexport function* filterIterable<T>(it: Iterable<T>, cb: (v: T) => boolean) {\n for (const v of it) {\n if (cb(v)) {\n yield v;\n }\n }\n}\n\nexport function toList<T>(it: Iterable<T>) {\n const res: T[] = [];\n for (const v of it) {\n res.push(v);\n }\n return res;\n}\n","import type { Ref } from 'vue';\nimport { ref, watch } from 'vue';\nimport { notEmpty } from '@milaboratories/helpers';\n\nconst $store = new Map<string, Ref<string | null>>();\n\nfunction getValue(key: string) {\n if (!$store.has(key)) {\n $store.set(key, ref(localStorage.getItem(key)));\n }\n\n return notEmpty($store.get(key), '...');\n}\n\nfunction setValue(key: string, v: string | null | undefined) {\n if (v === undefined || v === null) {\n localStorage.removeItem(key);\n } else {\n localStorage.setItem(key, v);\n }\n}\n\nexport function useLocalStorage<T extends string>(key: string) {\n const value = getValue(key) as Ref<T | null>;\n\n watch(value, (v) => setValue(key, v));\n\n return value;\n}\n","import { computed, onMounted, onUnmounted, ref, unref, watch } from 'vue';\nimport { mapIterable, toList } from '@/helpers/iterators';\nimport { useLocalStorage } from '@/composition/useLocalStorage';\n\ntype Theme = 'light' | 'dark';\n\ntype Callback = (mode: Theme) => void;\n\nconst cm = new Set<Callback>();\n\nif (window.matchMedia) {\n window.matchMedia('(prefers-color-scheme: dark)').addEventListener('change', (e) => {\n toList(mapIterable(cm.values(), (cb) => cb(e.matches ? 'dark' : 'light')));\n });\n}\n\nconst init = window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light';\n\nconst browserTheme = ref<Theme>(init);\nconst savedTheme = useLocalStorage<Theme>('theme');\n\nexport function useTheme(_cb?: Callback) {\n const theme = computed<Theme>(() => {\n return savedTheme.value ? savedTheme.value : browserTheme.value;\n });\n\n const cb = (theme: Theme) => {\n browserTheme.value = theme;\n _cb?.(theme);\n };\n\n function toggleTheme() {\n savedTheme.value = theme.value === 'light' ? 'dark' : theme.value === 'dark' ? 'light' : 'light';\n }\n\n watch(theme, (v) => {\n _cb?.(unref(v));\n });\n\n onMounted(() => {\n cm.add(cb);\n });\n\n onUnmounted(() => {\n cm.delete(cb);\n });\n\n return [theme, toggleTheme] as const;\n}\n","<script lang=\"ts\" setup>\nimport { useTheme } from '@/composition/useTheme';\nconst [theme, toggleTheme] = useTheme();\n</script>\n\n<template>\n <div class=\"ui-theme-switcher\" :class=\"theme\" @click=\"toggleTheme\">\n <div />\n </div>\n</template>\n","<script lang=\"ts\">\n/** Root block page component */\nexport default {\n name: 'PlBlockPage',\n};\n</script>\n\n<script lang=\"ts\" setup>\nimport { useSlots } from 'vue';\nimport './pl-block-page.scss';\nimport PlSplash from '@/components/PlSplash/PlSplash.vue';\n\nconst slots = useSlots();\n\ndefineProps<{\n /**\n * If `true` body gutters are removed\n */\n noBodyGutters?: boolean;\n /**\n * If `true`, a loading overlay is displayed on the page body (over all default slot content)\n */\n bodyLoading?: boolean;\n /**\n * Optional body loading text\n */\n bodyLoadingText?: string;\n}>();\n\nconst setTitleIfNeeded = (el: HTMLElement) => {\n el.removeAttribute('title');\n if (el.clientWidth < el.scrollWidth) {\n el.setAttribute('title', el.innerText);\n }\n};\n\nconst vTextOverflownTitle = {\n mounted: setTitleIfNeeded,\n updated: setTitleIfNeeded,\n};\n</script>\n\n<template>\n <div class=\"pl-layout-component pl-block-page\" :class=\"{ noBodyGutters }\">\n <div v-if=\"slots.title\" class=\"pl-block-page__title\">\n <div class=\"pl-block-page__title__default\">\n <span v-text-overflown-title><slot name=\"title\" /></span>\n <slot name=\"after-title\" />\n </div>\n <div class=\"pl-block-page__title__append\">\n <slot name=\"append\" />\n </div>\n </div>\n <div v-else />\n <PlSplash :loading=\"bodyLoading\" :loading-text=\"bodyLoadingText\" class=\"pl-block-page__body\">\n <slot />\n </PlSplash>\n </div>\n</template>\n","<script lang=\"ts\">\n/** Container with vertical spacing */\nexport default {\n name: 'PlContainer',\n};\n</script>\n\n<script lang=\"ts\" setup>\nimport { computed } from 'vue';\nimport './pl-container.scss';\nimport PlSplash from '@/components/PlSplash/PlSplash.vue';\n\nconst props = defineProps<{\n /**\n * CSS width value (px, %)\n */\n width?: string;\n /**\n * Shows loading overlay\n */\n loading?: boolean;\n /**\n * Optional loading text\n */\n loadingText?: string;\n}>();\n\nconst style = computed(() => ({\n width: props.width,\n}));\n</script>\n\n<template>\n <PlSplash :loading=\"loading\" :loading-text=\"loadingText\" class=\"pl-container pl-layout-component\" :style=\"style\">\n <slot />\n </PlSplash>\n</template>\n","<script lang=\"ts\">\n/** Horizontal Flex flow container */\nexport default {\n name: 'PlRow',\n};\n</script>\n\n<script lang=\"ts\" setup>\nimport './pl-row.scss';\n\ndefineProps<{\n wrap?: boolean;\n alignCenter?: boolean;\n noGap?: boolean;\n}>();\n</script>\n\n<template>\n <div class=\"pl-layout-component pl-row\" :class=\"{ wrap, 'align-center': alignCenter }\">\n <slot />\n </div>\n</template>\n","<script lang=\"ts\">\n/** Fills flex remaining space */\nexport default {\n name: 'PlSpacer',\n};\n</script>\n\n<script lang=\"ts\" setup>\n//\n</script>\n\n<template>\n <div class=\"pl-layout-component\" style=\"flex-grow: 1\" />\n</template>\n","<script lang=\"ts\">\n/** Grid container */\nexport default {\n name: 'PlGrid',\n};\n</script>\n\n<script lang=\"ts\" setup>\nimport { computed } from 'vue';\nimport './pl-grid.scss';\n\nconst props = defineProps<{\n columns: number;\n}>();\n\nconst style = computed(() => {\n return {\n gridTemplateColumns: `repeat(${props.columns}, minmax(0, 1fr))`,\n };\n});\n</script>\n\n<template>\n <div class=\"pl-layout-component pl-grid\" :style=\"style\">\n <slot />\n </div>\n</template>\n","<script lang=\"ts\">\nexport default {\n name: 'PlAlert',\n};\n</script>\n\n<script lang=\"ts\" setup>\nimport './pl-alert.scss';\n\ndefineEmits<{\n /**\n * Emitted when the model value is updated, typically when the close button is clicked.\n *\n * @param value - The new value of the model, generally `false` when the alert is closed.\n */\n (e: 'update:modelValue', value: boolean): void;\n}>();\n\nwithDefaults(\n defineProps<{\n /**\n * Controls the visibility of the alert component. If `true`, the alert is visible.\n *\n * @default true\n */\n modelValue?: boolean;\n /**\n * The type of alert, which determines the alert's style and icon.\n * Can be one of `'success' | 'info' | 'warn' | 'error'`.\n */\n type?: 'success' | 'info' | 'warn' | 'error';\n /**\n * An optional label that appears at the top of the alert.\n */\n label?: string;\n /**\n * If `true`, an icon corresponding to the alert type is displayed.\n */\n icon?: boolean;\n /**\n * If `true`, a close button is displayed in the alert, allowing the user to close it.\n */\n closeable?: boolean;\n /**\n * If `true`, the alert text is displayed in a monospace font.\n */\n monospace?: boolean;\n /**\n * If `true`, the alert content will preserve whitespace and line breaks.\n */\n whiteSpacePre?: boolean;\n\n /**\n * Max height (css value like '120px or 30%')\n */\n maxHeight?: string;\n }>(),\n {\n modelValue: true,\n type: undefined,\n label: undefined,\n icon: undefined,\n closeable: undefined,\n monospace: undefined,\n whiteSpacePre: undefined,\n maxHeight: undefined,\n },\n);\n\nconst iconMap = {\n success: 'success',\n warn: 'warning',\n info: 'edit',\n error: 'error',\n};\n</script>\n\n<template>\n <div v-if=\"modelValue\" class=\"pl-alert\" :style=\"{ maxHeight }\" :class=\"[{ monospace, whiteSpacePre }, type ? `pl-alert__${type}` : '']\">\n <div v-if=\"icon && type\" class=\"pl-alert__icon\">\n <div :class=\"`icon-24 icon-${iconMap[type]}`\" />\n </div>\n <div class=\"pl-alert__main\">\n <label v-if=\"label\">{{ label }}</label>\n <div class=\"pl-alert__main__text\"><slot /></div>\n </div>\n <div v-if=\"closeable\" class=\"pl-alert__close-btn\" aria-label=\"Close alert\" role=\"button\" @click=\"$emit('update:modelValue', false)\" />\n </div>\n</template>\n","export default \"<svg width=\\\"24\\\" height=\\\"24\\\" viewBox=\\\"0 0 24 24\\\" fill=\\\"none\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\">\\n<path fill-rule=\\\"evenodd\\\" clip-rule=\\\"evenodd\\\" d=\\\"M19.5 4.5H4.5L4.5 19.5H19.5V4.5ZM4.5 3C3.67157 3 3 3.67157 3 4.5V19.5C3 20.3284 3.67157 21 4.5 21H19.5C20.3284 21 21 20.3284 21 19.5V4.5C21 3.67157 20.3284 3 19.5 3H4.5Z\\\" fill=\\\"#110529\\\"/>\\n</svg>\\n\"","export default \"<svg width=\\\"24\\\" height=\\\"24\\\" viewBox=\\\"0 0 24 24\\\" fill=\\\"none\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\">\\n<rect x=\\\"3\\\" y=\\\"3\\\" width=\\\"18\\\" height=\\\"18\\\" rx=\\\"2\\\" fill=\\\"#110529\\\"/>\\n<path fill-rule=\\\"evenodd\\\" clip-rule=\\\"evenodd\\\" d=\\\"M17.5431 8.51739L10.3333 16.0877L6.45691 12.0174L7.54312 10.9829L10.3333 13.9127L16.4569 7.48291L17.5431 8.51739Z\\\" fill=\\\"white\\\"/>\\n</svg>\\n\"","<script setup lang=\"ts\">\nimport { computed } from 'vue';\nimport CheckboxUncheckedSvg from '@/assets/images/24_checkbox-light-enabled-unchecked.svg?raw';\nimport CheckboxCheckedSvg from '@/assets/images/24_checkbox-light-enabled-checked.svg?raw';\nimport type { ListOptionNormalized } from '@/types';\n\nconst props = withDefaults(\n defineProps<{\n option: ListOptionNormalized;\n isSelected: boolean;\n size: 'small' | 'medium';\n isHovered: boolean;\n useCheckbox?: boolean;\n }>(),\n {\n size: 'small',\n isSelected: false,\n isHovered: false,\n useCheckbox: false,\n },\n);\n\nconst classes = computed<string>(() => {\n const classItems: string[] = [];\n if (props.size === 'small') {\n classItems.push('dropdown-list-item__small');\n }\n if (props.isSelected) {\n classItems.push('dropdown-list-item__selected');\n }\n if (props.isHovered) {\n classItems.push('hovered-item');\n }\n return classItems.join(' ');\n});\n\nconst checkboxClasses = computed(() => {\n const classes: string[] = ['dropdown-list-item__checkbox', 'flex-self-start'];\n if (props.isSelected) {\n classes.push('checked');\n }\n return classes.join(' ');\n});\n\n// Why??\nconst checkboxSvg = computed(() => (props.isSelected ? CheckboxCheckedSvg : CheckboxUncheckedSvg));\n</script>\n\n<template>\n <div :class=\"classes\" class=\"dropdown-list-item\">\n <!-- eslint-disable vue/no-v-html -->\n <div v-if=\"props.useCheckbox\" :class=\"checkboxClasses\" v-html=\"checkboxSvg\" />\n <!--eslint-enable-->\n <div class=\"dropdown-list-item__title-container\">\n <div class=\"dropdown-list-item__title text-s\">\n {{ option.label }}\n </div>\n <div v-if=\"option.description\" class=\"dropdown-list-item__description text-description\">\n {{ option.description }}\n </div>\n </div>\n <div v-if=\"!props.useCheckbox && props.isSelected\" class=\"dropdown-list-item__icon flex-self-start\" />\n </div>\n</template>\n","import type { ListOption } from '../types';\n\nexport function call<R>(f: () => R): R {\n return f();\n}\n\nexport function requestTick<P>(cb: (...args: P[]) => void) {\n let tick = false;\n\n return function handle(...args: P[]) {\n if (!tick) {\n requestAnimationFrame(() => {\n cb(...args);\n tick = false;\n });\n tick = true;\n }\n };\n}\n\nexport function delay(ms: number) {\n return new Promise((r) => setTimeout(r, ms));\n}\n\nexport function timeout(cb: () => void, ms: number) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const r: any = setTimeout(cb, ms);\n return () => {\n clearTimeout(r);\n };\n}\n\nexport function randomInt(min: number, max: number) {\n min = Math.ceil(min);\n max = Math.floor(max);\n return Math.floor(Math.random() * (max - min)) + min;\n}\n\nexport function randomString(length: number) {\n let s = '';\n for (let i = 0; i < length; i++) {\n s += String.fromCharCode(randomInt(65, 91));\n }\n return s;\n}\n\nexport function makeEaseOut(timing: (t: number) => number) {\n return function (timeFraction: number) {\n return 1 - timing(1 - timeFraction);\n };\n}\n\nexport function makeEaseInOut(timing: (t: number) => number) {\n return function (timeFraction: number) {\n if (timeFraction < 0.5) return timing(2 * timeFraction) / 2;\n else return (2 - timing(2 * (1 - timeFraction))) / 2;\n };\n}\n\nexport function animate(options: { duration: number; draw: (p: number) => void; timing: (t: number) => number }) {\n const { duration, draw, timing } = options;\n const start = performance.now();\n let stop = false;\n requestAnimationFrame(function animate(time) {\n let timeFraction = (time - start) / duration;\n if (timeFraction > 1 || stop) timeFraction = 1;\n const progress = timing(timeFraction);\n draw(progress);\n if (timeFraction < 1) {\n requestAnimationFrame(animate);\n }\n });\n\n return function () {\n stop = true;\n };\n}\n\nexport function animateInfinite(options: { getFraction: (dt: number) => number; draw: (p: number) => void; timing: (t: number) => number }) {\n const { getFraction, draw, timing } = options;\n const start = performance.now();\n let stop = false;\n requestAnimationFrame(function animate(time) {\n let timeFraction = getFraction(time - start);\n if (stop) {\n return;\n }\n if (timeFraction > 1) timeFraction = 1;\n const progress = timing(timeFraction);\n draw(progress);\n if (timeFraction < 1) {\n requestAnimationFrame(animate);\n }\n });\n return function () {\n stop = true;\n };\n}\n\n/* eslint-disable @typescript-eslint/no-explicit-any */\ntype AnyFunction = (...args: any[]) => any;\n\nexport function throttle<F extends AnyFunction>(callback: F, ms: number, trailing = true): (...args: Parameters<F>) => void {\n let t = 0,\n call: AnyFunction | null;\n return function (this: unknown, ...args: Parameters<F>) {\n call = () => {\n callback.apply(this, args);\n t = new Date().getTime() + ms;\n call = null;\n if (trailing) {\n setTimeout(() => {\n call?.();\n }, ms);\n }\n };\n if (new Date().getTime() > t) call();\n };\n}\n\nexport function listToOptions<T>(list: T[] | readonly T[]): ListOption<T>[] {\n return list.map((value) => ({ text: String(value), value }));\n}\n\nexport function normalizeListOptions<V = unknown>(options: Readonly<ListOption<V>[]>) {\n if (!Array.isArray(options)) {\n throw Error('Invalid component options: ' + String(options));\n }\n\n return options.map((it) => ({\n label: 'label' in it ? it.label : it.text,\n value: it.value,\n description: it.description,\n }));\n}\n","import { type Ref, onMounted } from 'vue';\nimport { useEventListener } from '@/composition/useEventListener';\nimport { requestTick } from '@/helpers/utils';\nimport type { ElementPosition } from '@/types';\n\nexport function useElementPosition(el: Ref<HTMLElement | undefined>, cb: (pos: ElementPosition) => void) {\n const update = () => {\n if (el.value) {\n const { scrollTop, scrollLeft, scrollHeight, scrollWidth, clientHeight, clientWidth } = document.documentElement;\n const rect = el.value.getBoundingClientRect();\n cb({\n scrollTop,\n scrollLeft,\n scrollHeight,\n scrollWidth,\n clientHeight,\n clientWidth,\n offsetY: scrollTop + rect.y,\n offsetX: scrollLeft + rect.x,\n top: rect.top,\n right: rect.right,\n bottom: rect.bottom,\n left: rect.left,\n width: rect.width,\n height: rect.height,\n x: rect.x,\n y: rect.y,\n });\n }\n };\n\n const handle = requestTick(update);\n\n onMounted(handle);\n\n useEventListener(window, 'scroll', handle, { capture: true, passive: true });\n\n useEventListener(window, 'resize', handle, { passive: true });\n\n useEventListener(window, 'adjust', handle, true);\n}\n","<script lang=\"ts\" setup>\nimport { computed } from 'vue';\nimport type { MaskIconName16, Size } from '@/types';\n\nconst props = defineProps<{\n name: MaskIconName16;\n size?: Size;\n}>();\n\nconst style = computed(() => (props.size === 'large' ? '--mask-size: 24px' : ''));\n\nconst className = computed(() => `mask-16 mask-${props.name}`);\n</script>\n\n<template>\n <i :style=\"style\" :class=\"[className, $style.icon]\" />\n</template>\n\n<style module>\n.icon {\n display: inline-block;\n}\n</style>\n","<script setup lang=\"ts\" generic=\"M = unknown\">\nimport { computed, reactive, ref, unref, watch } from 'vue';\nimport './pl-btn-split.scss';\nimport DropdownListItem from '../DropdownListItem.vue';\nimport type { ListOption } from '@/types';\nimport { useElementPosition } from '@/composition/usePosition';\nimport { normalizeListOptions } from '@/helpers/utils';\nimport { deepEqual } from '@milaboratories/helpers';\nimport PlMaskIcon16 from '../PlMaskIcon16/PlMaskIcon16.vue';\n\nconst props = defineProps<{\n /**\n * List of available options for the dropdown menu\n */\n options?: Readonly<ListOption<M>[]>;\n\n /**\n * If `true`, the dropdown component is disabled and cannot be interacted with.\n */\n disabled?: boolean;\n\n /**\n * If `true,` the button is disabled, cannot be interacted with, and shows a special 'loading' icon.\n */\n loading?: boolean;\n}>();\n\nconst emits = defineEmits(['click']);\n\nconst model = defineModel<M>({ required: true });\n\nconst root = ref<HTMLElement | undefined>();\nconst list = ref<HTMLElement | undefined>();\nconst menuActivator = ref<HTMLElement | undefined>();\nconst buttonAction = ref<HTMLElement | undefined>();\n\nconst data = reactive({\n open: false,\n optionsHeight: 0,\n activeIndex: -1,\n});\n\ndefineExpose({\n data,\n});\n\nconst optionsStyle = reactive({\n top: '0px',\n left: '0px',\n width: '0px',\n});\n\nwatch(\n list,\n (el) => {\n if (el) {\n const rect = el.getBoundingClientRect();\n data.optionsHeight = rect.height;\n window.dispatchEvent(new CustomEvent('adjust'));\n }\n },\n { immediate: true },\n);\n\nconst iconState = computed(() => (data.open ? 'mask-24 mask-chevron-up' : 'mask-24 mask-chevron-down'));\n\nconst selectedIndex = computed(() => {\n return (props.options ?? []).findIndex((o) => deepEqual(o.value, model.value));\n});\n\nconst items = computed(() =>\n normalizeListOptions(props.options ?? []).map((opt, index) => ({\n ...opt,\n index,\n isSelected: index === selectedIndex.value,\n isActive: index === data.activeIndex,\n })),\n);\n\nconst isLoadingOptions = computed(() => props.loading || props.options === undefined);\n\nconst actionName = computed(() => items.value.find((o) => deepEqual(o.value, model.value))?.label ?? (props.options === undefined ? '...' : ''));\n\nuseElementPosition(root, (pos) => {\n const focusWidth = 3;\n\n const downTopOffset = pos.top + pos.height + focusWidth;\n\n if (downTopOffset + data.optionsHeight > pos.clientHeight) {\n optionsStyle.top = pos.top - data.optionsHeight - focusWidth + 'px';\n } else {\n optionsStyle.top = downTopOffset + 'px';\n }\n\n optionsStyle.left = pos.left + 'px';\n optionsStyle.width = pos.width + 'px';\n});\n\nconst selectOption = (v: M | undefined) => {\n model.value = v!;\n data.open = false;\n root?.value?.focus();\n};\n\nfunction emitEnter() {\n emits('click');\n}\n\nconst handleKeydown = (e: { code: string; preventDefault(): void; stopPropagation(): void; target: EventTarget | null }) => {\n if (!['ArrowDown', 'ArrowUp', 'Enter', 'Escape'].includes(e.code)) {\n return;\n } else {\n e.preventDefault();\n }\n\n if (e.target === buttonAction.value && e.code === 'Enter') {\n emitEnter();\n return;\n }\n\n const { open, activeIndex } = data;\n\n if (!open && e.target === menuActivator.value) {\n if (e.code === 'Enter') {\n data.open = true;\n }\n return;\n }\n\n if (e.code === 'Escape') {\n data.open = false;\n root.value?.focus();\n }\n\n const filtered = unref(items);\n\n const { length } = filtered;\n\n if (!length) {\n return;\n }\n\n if (e.code === 'Enter') {\n selectOption(filtered.find((it) => it.index === activeIndex)?.value);\n }\n\n const localIndex = filtered.findIndex((it) => it.index === activeIndex) ?? -1;\n\n const delta = e.code === 'ArrowDown' ? 1 : e.code === 'ArrowUp' ? -1 : 0;\n\n const newIndex = Math.abs(localIndex + delta + length) % length;\n\n data.activeIndex = items.value[newIndex].index ?? -1;\n};\n\nconst onFocusOut = (event: FocusEvent) => {\n const relatedTarget = event.relatedTarget as Node | null;\n\n if (!root.value?.contains(relatedTarget) && !list.value?.contains(relatedTarget)) {\n data.open = false;\n }\n};\n</script>\n<template>\n <div\n ref=\"root\"\n :class=\"{ disabled: disabled || isLoadingOptions, loading: isLoadingOptions }\"\n class=\"pl-btn-split d-flex\"\n @focusout=\"onFocusOut\"\n @keydown=\"handleKeydown\"\n >\n <div\n ref=\"buttonAction\"\n class=\"pl-btn-split__title flex-grow-1 d-flex align-center text-s-btn\"\n tabindex=\"0\"\n @click=\"emitEnter\"\n @keyup.stop.enter=\"emitEnter\"\n >\n {{ actionName }}\n </div>\n <div ref=\"menuActivator\" class=\"pl-btn-split__icon-container d-flex align-center justify-center\" tabindex=\"0\" @click=\"data.open = !data.open\">\n <PlMaskIcon16 v-if=\"isLoadingOptions\" name=\"loading\" />\n <div v-else :class=\"iconState\" class=\"pl-btn-split__icon\" />\n </div>\n\n <Teleport v-if=\"data.open\" to=\"body\">\n <div ref=\"list\" class=\"pl-dropdown__options\" :style=\"optionsStyle\" tabindex=\"-1\">\n <DropdownListItem\n v-for=\"(item, index) in items\"\n :key=\"index\"\n :option=\"item\"\n :is-selected=\"item.isSelected\"\n :is-hovered=\"item.isActive\"\n :size=\"'medium'\"\n @click.stop=\"selectOption(item.value)\"\n />\n </div>\n </Teleport>\n </div>\n</template>\n","import type { Ref } from 'vue';\nimport { onMounted } from 'vue';\n\nexport function useRipple(el: Ref<HTMLElement | undefined>) {\n function createRipple(event: MouseEvent) {\n const button = event.currentTarget as HTMLButtonElement;\n\n const circle = document.createElement('span');\n const diameter = Math.max(button.clientWidth, button.clientHeight);\n const radius = diameter / 2;\n\n circle.style.width = circle.style.height = `${diameter}px`;\n circle.style.left = `${event.clientX - button.offsetLeft - radius}px`;\n circle.style.top = `${event.clientY - button.offsetTop - radius}px`;\n circle.classList.add('ripple');\n\n const ripple = button.getElementsByClassName('ripple')[0];\n\n if (ripple) {\n ripple.remove();\n }\n\n button.appendChild(circle);\n }\n\n onMounted(() => {\n el.value?.addEventListener('click', createRipple);\n });\n}\n","<script lang=\"ts\">\nexport default {\n inheritAttrs: false,\n};\n</script>\n\n<script lang=\"ts\" setup>\nimport type { MaskIconName16, Size } from '@/types';\nimport { computed, ref } from 'vue';\nimport { PlMaskIcon16 } from '@/components/PlMaskIcon16';\nimport { useRipple } from '@/composition/useRipple';\n\nconst props = defineProps<{\n loading?: boolean;\n small?: boolean;\n large?: boolean;\n size?: Size;\n round?: boolean;\n icon?: MaskIconName16;\n reverse?: boolean;\n justifyCenter?: boolean;\n}>();\n\nconst btn = ref();\n\nconst small = computed(() => props.small || props.size === 'small');\nconst large = computed(() => props.large || props.size === 'large');\n\nuseRipple(btn);\n</script>\n\n<template>\n <button\n ref=\"btn\"\n tabindex=\"0\"\n :class=\"{ loading, small, large, round, reverse, justifyCenter, [$attrs.class + '']: true }\"\n v-bind=\"{ ...$attrs, disabled: Boolean($attrs.disabled) || loading }\"\n >\n <span v-if=\"!round\">\n <slot />\n </span>\n <PlMaskIcon16 v-if=\"loading\" name=\"loading\" :size=\"size\" />\n <PlMaskIcon16 v-else-if=\"icon\" :name=\"icon\" :size=\"size\" />\n </button>\n</template>\n","<script lang=\"ts\">\n/**\n * Primary button\n */\nexport default {\n name: 'PlBtnPrimary',\n};\n</script>\n\n<script lang=\"ts\" setup>\nimport './pl-btn-primary.scss';\nimport type { MaskIconName16, Size } from '@/types';\nimport BtnBase from '@/base/BtnBase.vue';\n\nconst props = defineProps<{\n /**\n * If `true,` the button is disabled, cannot be interacted with, and shows a special 'loading' icon.\n */\n loading?: boolean;\n /**\n * Size of the button, the default value is 'medium'\n */\n size?: Size;\n /**\n * If `true` the shape is round.\n */\n round?: boolean;\n /**\n * Icon to display\n */\n icon?: MaskIconName16;\n /**\n * If `true`, an icon is displayed before the text.\n */\n reverse?: boolean;\n /**\n * Justify text at the center\n */\n justifyCenter?: boolean;\n}>();\n</script>\n\n<template>\n <BtnBase class=\"pl-btn-primary\" v-bind=\"props\">\n <slot />\n </BtnBase>\n</template>\n","<script lang=\"ts\">\n/**\n * Accent button\n */\nexport default {\n name: 'PlBtnAccent',\n};\n</script>\n\n<script lang=\"ts\" setup>\nimport './pl-btn-accent.scss';\nimport type { MaskIconName16, Size } from '@/types';\nimport BtnBase from '@/base/BtnBase.vue';\n\nconst props = defineProps<{\n /**\n * If `true,` the button is disabled, cannot be interacted with, and shows a special 'loading' icon.\n */\n loading?: boolean;\n /**\n * Size of the button, the default value is 'medium'\n */\n size?: Size;\n /**\n * If `true` the shape is round.\n */\n round?: boolean;\n /**\n * Icon to display\n */\n icon?: MaskIconName16;\n /**\n * If `true`, an icon is displayed before the text.\n */\n reverse?: boolean;\n /**\n * Justify text at the center\n */\n justifyCenter?: boolean;\n}>();\n</script>\n\n<template>\n <BtnBase class=\"pl-btn-accent\" v-bind=\"props\">\n <slot />\n </BtnBase>\n</template>\n","<script lang=\"ts\">\n/**\n * Danger button\n */\nexport default {\n name: 'PlBtnDanger',\n};\n</script>\n\n<script lang=\"ts\" setup>\nimport './pl-btn-danger.scss';\nimport type { MaskIconName16, Size } from '@/types';\nimport BtnBase from '@/base/BtnBase.vue';\n\nconst props = defineProps<{\n /**\n * If `true,` the button is disabled, cannot be interacted with, and shows a special 'loading' icon.\n */\n loading?: boolean;\n /**\n * Size of the button, the default value is 'medium'\n */\n size?: Size;\n /**\n * If `true` the shape is round.\n */\n round?: boolean;\n /**\n * Icon to display\n */\n icon?: MaskIconName16;\n /**\n * If `true`, an icon is displayed before the text.\n */\n reverse?: boolean;\n /**\n * Justify text at the center\n */\n justifyCenter?: boolean;\n}>();\n</script>\n\n<template>\n <BtnBase class=\"pl-btn-danger\" v-bind=\"props\">\n <slot />\n </BtnBase>\n</template>\n","<script lang=\"ts\">\n/**\n * Secondary button\n */\nexport default {\n name: 'PlBtnSecondary',\n};\n</script>\n\n<script lang=\"ts\" setup>\nimport './pl-btn-secondary.scss';\nimport type { MaskIconName16, Size } from '@/types';\nimport BtnBase from '@/base/BtnBase.vue';\n\nconst props = defineProps<{\n /**\n * If `true,` the button is disabled, cannot be interacted with, and shows a special 'loading' icon.\n */\n loading?: boolean;\n /**\n * Size of the button, the default value is 'medium'\n */\n size?: Size;\n /**\n * If `true` the shape is round.\n */\n round?: boolean;\n /**\n * Icon to display\n */\n icon?: MaskIconName16;\n /**\n * If `true`, an icon is displayed before the text.\n */\n reverse?: boolean;\n /**\n * Justify text at the center\n */\n justifyCenter?: boolean;\n}>();\n</script>\n\n<template>\n <BtnBase v-bind=\"props\" class=\"pl-btn-secondary\">\n <slot />\n </BtnBase>\n</template>\n","<script lang=\"ts\" setup>\nimport { computed } from 'vue';\nimport type { MaskIconName24, Size } from '@/types';\n\nconst props = defineProps<{\n name: MaskIconName24;\n size?: Size;\n}>();\n\nconst className = computed(() => `mask-24 mask-${props.name}`);\n</script>\n\n<template>\n <i :class=\"[className, $style.icon]\" />\n</template>\n\n<style module>\n.icon {\n display: inline-block;\n}\n</style>\n","<script lang=\"ts\">\n/**\n * Ghost button\n */\nexport default {\n name: 'PlBtnGhost',\n};\n</script>\n\n<script lang=\"ts\" setup>\nimport './pl-btn-ghost.scss';\nimport type { MaskIconName24, Size } from '@/types';\nimport { PlMaskIcon24 } from '@/components/PlMaskIcon24';\nimport { computed, ref, useSlots } from 'vue';\nimport { useRipple } from '@/composition/useRipple';\n\nconst props = withDefaults(\n defineProps<{\n /**\n * If `true,` the button is disabled, cannot be interacted with, and shows a special 'loading' icon.\n */\n loading?: boolean;\n /**\n * Size of the button, the default value is 'medium'\n */\n size?: Size;\n /**\n * If `true` the shape is round.\n */\n round?: boolean;\n /**\n * Icon to display\n */\n icon?: MaskIconName24;\n /**\n * If `true`, an icon is displayed before the text.\n */\n reverse?: boolean;\n /**\n * Justify text at the center (is `false` by default)\n */\n justifyCenter?: boolean;\n }>(),\n {\n size: undefined,\n icon: undefined,\n justifyCenter: false,\n },\n);\n\nconst small = computed(() => props.size === 'small');\nconst large = computed(() => props.size === 'large');\n\nconst btnRef = ref();\n\nconst slots = useSlots();\n\nuseRipple(btnRef);\n</script>\n\n<template>\n <button\n ref=\"btnRef\"\n tabindex=\"0\"\n class=\"pl-btn-ghost\"\n :class=\"{ loading, small, large, round, reverse, justifyCenter, [$attrs.class + '']: true }\"\n v-bind=\"{ ...$attrs, disabled: Boolean($attrs.disabled) || loading }\"\n >\n <span v-if=\"slots.default && !round\">\n <slot />\n </span>\n <PlMaskIcon24 v-if=\"loading\" name=\"loading\" :size=\"size\" />\n <PlMaskIcon24 v-else-if=\"icon\" :name=\"icon\" :size=\"size\" />\n <slot name=\"append\" />\n </button>\n</template>\n","<script lang=\"ts\" setup>\nimport './pl-btn-link.scss';\nimport type { MaskIconName16, Size } from '@/types';\nimport BtnSecondary from '@/components/PlBtnSecondary/PlBtnSecondary.vue';\nimport { ref } from 'vue';\n\nconst props = defineProps<{\n /**\n * If `true,` the button is disabled, cannot be interacted with, and shows a special 'loading' icon.\n */\n loading?: boolean;\n /**\n * Size of the button, the default value is 'medium'\n */\n size?: Size;\n /**\n * Icon to display\n */\n icon?: MaskIconName16;\n /**\n * If `true`, an icon is displayed before the text.\n */\n reverse?: boolean;\n /**\n * Justify text at the center (is `true` by default)\n */\n justifyCenter?: boolean;\n /**\n * If `true`, the button is disabled and cannot be interacted with.\n */\n disabled?: boolean;\n}>();\n\nconst hover = ref(false);\n</script>\n\n<template>\n <div class=\"ui-btn-link\" :class=\"{ disabled, loading, hover }\" @mouseover=\"hover = true\" @mouseleave=\"hover = false\">\n <BtnSecondary round :hover=\"hover\" v-bind=\"props\" />\n <slot />\n </div>\n</template>\n","import { computed, type Ref, ref, unref } from 'vue';\nimport { useElementPosition } from '@/composition/usePosition';\nimport type { ElementPosition } from '@/types';\n\ntype Options = {\n position: 'top-left' | 'right' | 'left' | 'top' | 'southwest';\n gap: number;\n};\n\n/**\n * A custom hook that calculates and returns the CSS style needed to position a tooltip\n * relative to a target HTML element based on the specified position and gap.\n */\nexport function useTooltipPosition(el: Ref<HTMLElement | undefined>, optionsRef: Ref<Options>) {\n const posRef = ref<ElementPosition>();\n\n useElementPosition(el, (v) => {\n posRef.value = v;\n });\n\n return computed(() => {\n const pos = unref(posRef);\n\n const options = unref(optionsRef);\n\n const position = options.position ?? 'top';\n\n const gap = options.gap ?? 8;\n\n if (!pos) {\n return '';\n }\n\n const offsetMiddleY = pos.offsetY + Math.floor(pos.height / 2);\n const offsetMiddleX = pos.offsetX + Math.floor(pos.width / 2);\n\n if (position === 'top-left') {\n return `left: ${pos.offsetX}px; top: ${pos.offsetY - gap}px;`;\n }\n\n if (position === 'top') {\n return `left: ${offsetMiddleX}px; top: ${pos.offsetY - gap}px;`;\n }\n\n if (position === 'right') {\n return `left: ${pos.offsetX + pos.width + gap}px; top: ${offsetMiddleY}px;`;\n }\n\n if (position === 'left') {\n return `right: ${pos.scrollWidth - pos.x + gap}px; top: ${offsetMiddleY}px;`;\n }\n\n if (position === 'southwest') {\n return `left: ${pos.offsetX + pos.width}px; top: ${pos.offsetY + pos.height + gap}px;`;\n }\n\n return '';\n });\n}\n","export function tap<T, R>(v: T, cb: (v: T) => R) {\n return cb(v);\n}\n\nexport function tapIf<T, R>(v: T | null | undefined, cb: (v: T) => R) {\n if (v !== null && v !== undefined) {\n return cb(v);\n }\n}\n\nexport function flatValue<T>(v: T | T[]): T[] {\n return Array.isArray(v) ? v : [v];\n}\n\nexport function generate<R>(count: number, cb: (i: number) => R): R[] {\n const r: R[] = [];\n for (let i = 0; i < count; i++) {\n r.push(cb(i));\n }\n return r;\n}\n\nexport function copyProps<T extends Record<string, unknown>>(target: T, source: T, ...keys: (keyof T)[]) {\n keys.forEach((key) => {\n target[key] = source[key];\n });\n}\n","import type { Ref } from 'vue';\nimport { useEventListener } from '@/composition/useEventListener';\nimport { flatValue } from '@/helpers/functions';\n\ntype HtmlRef = Ref<HTMLElement | undefined>;\n\nexport function useClickOutside(el: HtmlRef | HtmlRef[], cb: () => void) {\n useEventListener(document, 'click', (event) => {\n if (!document.contains(event.target as Node)) {\n return;\n }\n\n const values = flatValue(el)\n .map((e) => e.value)\n .filter((v) => !!v) as HTMLElement[];\n if (!values.some((v) => v?.contains(event.target as Node))) {\n cb();\n }\n });\n}\n","<template>\n <svg class=\"beak\" width=\"5\" height=\"9\" viewBox=\"0 0 3 8\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M4.00222 8.00933L0 4.00711L4.00222 0.00488281L4.00222 8.00933Z\" fill=\"#24223D\" />\n </svg>\n</template>\n","export const tMap = new Map<symbol, () => void>();\n","<script lang=\"ts\">\n/** Simple tooltip on mouseover */\nexport default {\n name: 'PlTooltip',\n};\n</script>\n\n<script lang=\"ts\" setup>\nimport './pl-tooltip.scss';\nimport { computed, onUnmounted, reactive, ref, toRef, watch } from 'vue';\nimport { useTooltipPosition } from './useTooltipPosition';\nimport * as utils from '@/helpers/utils';\nimport { useClickOutside } from '@/composition/useClickOutside';\nimport Beak from './Beak.vue';\nimport { tMap } from './global';\n\nconst emit = defineEmits(['tooltip:close']);\n\nconst tKey = Symbol();\n\nconst props = withDefaults(\n defineProps<{\n /**\n * delay in milliseconds before the tooltip opens\n */\n openDelay?: number;\n /**\n * delay in milliseconds before the tooltip disappears\n */\n closeDelay?: number;\n /**\n * Tooltip position\n */\n position?: 'top-left' | 'left' | 'right' | 'top' | 'southwest';\n /**\n * external prop to hide tooltips\n */\n hide?: boolean;\n /**\n * The gap in pixels between the tooltip and the target element\n */\n gap?: number;\n /**\n * base html element for tooltip\n */\n element?: 'div' | 'span' | 'a' | 'p' | 'h1' | 'h2' | 'h3';\n /**\n * Max width (css value) of the tooltip container (default is 300px)\n */\n maxWidth?: string;\n }>(),\n {\n openDelay: 100,\n closeDelay: 1000,\n gap: 8,\n position: 'top',\n element: 'div',\n maxWidth: '300px',\n },\n);\n\nconst data = reactive({\n open: false,\n over: false,\n tooltipOpen: false,\n key: Symbol(),\n});\n\ntMap.set(tKey, () => closeTooltip());\n\n// Hook to avoid the need to immediately teleport into the body (better performance)\nwatch(\n () => data.open,\n (v) => {\n requestAnimationFrame(() => {\n data.tooltipOpen = v;\n });\n },\n);\n\nlet clearTimeout = () => {};\n\nconst dispatchAdjust = utils.throttle(() => window.dispatchEvent(new CustomEvent('adjust')), 1000);\n\nconst showTooltip = () => {\n data.open = true;\n\n for (const [k, f] of tMap.entries()) {\n if (k !== tKey) {\n f();\n }\n }\n};\n\nconst closeTooltip = () => {\n data.open = false;\n emit('tooltip:close');\n};\n\nconst onOver = async () => {\n if (props.hide) {\n return;\n }\n\n dispatchAdjust();\n\n data.over = true;\n\n clearTimeout();\n\n await utils.delay(100);\n\n if (data.over) {\n showTooltip();\n }\n};\n\nconst onLeave = () => {\n data.over = false;\n clearTimeout = utils.timeout(() => {\n if (!data.over) {\n closeTooltip();\n }\n }, props.closeDelay);\n};\n\nwatch(\n () => props.hide,\n (hide) => {\n if (hide) {\n closeTooltip();\n }\n },\n);\n\nconst rootRef = ref<HTMLElement | undefined>();\nconst tooltip = ref<HTMLElement | undefined>();\n\nconst style = useTooltipPosition(rootRef, toRef(props));\n\nuseClickOutside([rootRef, tooltip], () => closeTooltip());\n\nconst tooltipStyle = computed(() => ({\n '--pl-tooltip-max-width': props.maxWidth,\n}));\n\nonUnmounted(() => {\n tMap.delete(tKey);\n});\n</script>\n\n<template>\n <component :is=\"element\" v-bind=\"$attrs\" ref=\"rootRef\" @click=\"onOver\" @mouseover=\"onOver\" @mouseleave=\"onLeave\">\n <slot />\n <Teleport v-if=\"$slots['tooltip'] && data.open\" to=\"body\">\n <Transition name=\"tooltip-transition\">\n <div v-if=\"data.tooltipOpen\" class=\"pl-tooltip__container\" :style=\"style\">\n <div ref=\"tooltip\" class=\"pl-tooltip\" :style=\"tooltipStyle\" :class=\"position\" @mouseover=\"onOver\" @mouseleave=\"onLeave\">\n <!-- should be one line -->\n <div><slot name=\"tooltip\" /></div>\n <Beak />\n </div>\n </div>\n </Transition>\n </Teleport>\n </component>\n</template>\n","<template>\n <div class=\"inner-border\">\n <slot />\n </div>\n</template>\n\n<script lang=\"ts\">\nexport default {\n // inheritAttrs: false\n};\n</script>\n","<script lang=\"ts\">\n/**\n * A component for selecting one value from a list of options\n */\nexport default {\n name: 'PlBtnGroup',\n};\n</script>\n\n<script lang=\"ts\" setup generic=\"M = unknown\">\nimport './pl-btn-group.scss';\nimport { computed, useSlots } from 'vue';\nimport { PlTooltip } from '@/components/PlTooltip';\nimport InnerBorder from '@/utils/InnerBorder.vue';\nimport type { SimpleOption } from '@/types';\n\nconst slots = useSlots();\n\nconst emit = defineEmits<{\n /**\n * Emitted when the model value is updated.\n */\n (e: 'update:modelValue', value: M): void;\n}>();\n\nconst emitModel = (v: M) => emit('update:modelValue', v);\n\nconst props = defineProps<{\n /**\n * The current selected value.\n */\n modelValue?: M;\n /**\n * The label text for the component (optional)\n */\n label?: string;\n /**\n * List of available options for the component\n */\n options: Readonly<SimpleOption<M>[]>;\n /**\n * If `true`, the component is disabled and cannot be interacted with.\n */\n disabled?: boolean;\n /**\n * If `true`, the height of the component is 32px\n */\n compact?: boolean;\n /**\n * A helper text displayed below the component when there are no errors (optional).\n */\n helper?: string;\n /**\n * Error message displayed below the component (optional)\n */\n error?: string;\n}>();\n\nconst normalizedOptions = computed(() =>\n props.options.map((it) => ({\n label: 'label' in it ? it.label : it.text,\n value: it.value,\n })),\n);\n</script>\n\n<template>\n <div class=\"pl-btn-group\" :class=\"{ disabled, compact }\">\n <label v-if=\"label\">\n <span>{{ label }}</span>\n <PlTooltip v-if=\"slots.tooltip\" class=\"info\" position=\"top\">\n <template #tooltip>\n <slot name=\"tooltip\" />\n </template>\n </PlTooltip>\n </label>\n <InnerBorder class=\"pl-btn-group__container\">\n <div\n v-for=\"(opt, i) in normalizedOptions\"\n :key=\"i\"\n class=\"pl-btn-group__option text-s\"\n :tabindex=\"modelValue === opt.value || disabled ? undefined : 0\"\n :class=\"{ active: modelValue === opt.value }\"\n @keydown.enter=\"emitModel(opt.value)\"\n @click=\"emitModel(opt.value)\"\n >\n {{ opt.label }}\n </div>\n </InnerBorder>\n <div v-if=\"helper\" class=\"pl-btn-group__helper\">{{ helper }}</div>\n <div v-else-if=\"error\" class=\"pl-btn-group__error\">{{ error }}</div>\n </div>\n</template>\n","import type { Ref, UnwrapNestedRefs } from 'vue';\nimport { reactive, computed, ref } from 'vue';\n\n/**\n * Creates a reactive local model with optional transformation and validation logic.\n *\n * @template T The type of the model's value.\n *\n * @param model - A `Ref` representing the underlying value.\n * @param options - Optional configuration for validation and parsing.\n * @param options.update - A function that takes the transformed value and returns `true` if it should be applied to the model, or `false` to keep it in a cached state.\n * @param options.parse - A function that takes the input value and returns a transformed value of type `T`. If omitted, the value is used as-is.\n *\n * @returns A reactive object with the following properties:\n * - `value`: A computed property for getting and setting the model value.\n * - `error`: A `Ref<string | undefined>` containing the last error message, if any.\n * - `reset`: A method to clear the cached value and error state.\n *\n * ### Example\n * ```ts\n * import { ref } from 'vue';\n * import { useTransformedModel } from './useTransformedModel';\n *\n * const model = ref<number>(42);\n *\n * const transformedModel = useTransformedModel(model, {\n * parse: (value) => {\n * const parsed = Number(value);\n * if (!Number.isFinite(parsed)) throw new Error('Invalid number');\n * return parsed;\n * },\n * update: (value) => value >= 0, // Only allow non-negative numbers\n * });\n */\n\nexport function useTransformedModel<T>(model: Ref<T>, options: { update?: (v: T) => boolean; parse?: (v: unknown) => T }) {\n const cached = ref<T | undefined>();\n const error = ref<string>();\n\n const { parse, update } = options;\n\n const reset = () => {\n cached.value = undefined;\n error.value = undefined;\n };\n\n const value = computed<T>({\n get() {\n if (cached.value !== undefined) {\n return cached.value;\n }\n\n return model.value;\n },\n set(value) {\n reset();\n\n try {\n const newValue = parse ? parse(value) : value;\n\n const shouldUpdate = update ? update(newValue) : true;\n\n if (shouldUpdate) {\n model.value = newValue;\n } else {\n cached.value = newValue;\n }\n } catch (err) {\n cached.value = value;\n error.value = err instanceof Error ? err.message : String(err);\n }\n },\n });\n\n return reactive({\n value,\n error,\n reset,\n }) as UnwrapNestedRefs<{ value: T; error?: string; reset: () => void }>;\n}\n","<script lang=\"ts\" setup>\nimport { useTransformedModel } from '@/composition/useTransformedModel';\nimport style from './pl-editable-title.module.scss';\nimport { computed, ref } from 'vue';\n\nconst model = defineModel<string>();\n\nconst props = withDefaults(\n defineProps<{\n /**\n * Standard input placeholder\n */\n placeholder?: string;\n /**\n * Any css `width` value (px, %), default is 80%\n */\n maxWidth?: string;\n /**\n * Fixed non-editable prefix\n */\n prefix?: string;\n /**\n * Max title length (default is 1000)\n */\n maxLength?: number;\n /**\n * Min title length\n */\n minLength?: number;\n }>(),\n {\n placeholder: 'Title',\n maxWidth: '80%',\n prefix: undefined,\n maxLength: 1000,\n minLength: undefined,\n },\n);\n\nconst local = useTransformedModel(model, {\n update() {\n return false;\n },\n parse: (v): string => {\n if (typeof v !== 'string') {\n throw Error('value should be a string');\n }\n\n if (props.maxLength && v.length > props.maxLength) {\n throw Error(`Max title length is ${props.maxLength} characters`);\n }\n\n if (props.minLength && v.length < props.minLength) {\n throw Error(`Min title length is ${props.minLength} characters`);\n }\n\n return v.trim();\n },\n});\n\nconst computedStyle = computed(() => ({\n maxWidth: props.maxWidth ?? '80%',\n}));\n\nconst save = () => {\n model.value = local.value && !local.error ? local.value : model.value;\n local.reset();\n};\n\nconst inputRef = ref<HTMLInputElement>();\n</script>\n\n<template>\n <div class=\"pl-editable-title\" :class=\"style.component\" :style=\"computedStyle\">\n <div :class=\"style.container\" @click=\"() => inputRef?.focus()\">\n <span v-if=\"prefix\">{{ prefix.trim() }}&nbsp;</span>\n <input\n ref=\"inputRef\"\n v-model=\"local.value\"\n :placeholder=\"placeholder\"\n @focusout=\"save\"\n @keydown.escape=\"local.reset\"\n @keydown.enter=\"(ev) => (ev.target as HTMLInputElement)?.blur()\"\n />\n </div>\n <div v-if=\"local.error\" :class=\"style.error\">{{ local.error }}</div>\n </div>\n</template>\n","<script lang=\"ts\" setup></script>\n\n<script lang=\"ts\">\nexport default {\n inheritAttrs: false,\n};\n</script>\n\n<template>\n <div class=\"double-contour\">\n <div v-bind=\"$attrs\">\n <slot />\n </div>\n </div>\n</template>\n","import { onMounted, onUpdated } from 'vue';\n\nexport function onChanged(hook: () => unknown) {\n onMounted(hook);\n onUpdated(hook);\n}\n","import { tapIf } from '@/helpers/functions';\n\nconst cm = new WeakMap<Element, (entry: ResizeObserverEntry) => void>();\n\nconst resizeObserver = new ResizeObserver((entries) => {\n for (const entry of entries) {\n tapIf(cm.get(entry.target), (cb) => cb(entry));\n }\n});\n\nexport function startResizeObserving(el: Element, cb: (entry: ResizeObserverEntry) => void) {\n cm.set(el, cb);\n resizeObserver.unobserve(el);\n resizeObserver.observe(el);\n}\n\nexport function stopResizeObserving(el: Element) {\n resizeObserver.unobserve(el);\n cm.delete(el);\n}\n","import { onBeforeUnmount, type Ref } from 'vue';\nimport { tap, tapIf } from '@/helpers/functions';\nimport { onChanged } from '@/composition/utils';\nimport { call } from '@/helpers/utils';\nimport { startResizeObserving, stopResizeObserving } from '@/global/resizeObserver';\n\nconst offset = 8; // see --label-offset-left-x css var\n\nconst contourOffset = 4; // see --contour-offset css var\n\n/**\n * Adjust the width of the cutout on the clip path for the notched label (TextField, Dropdown)\n */\nexport function useLabelNotch(root: Ref<HTMLElement | undefined>, labelSelector = 'label') {\n const labels = new Set<Element>();\n\n onChanged(() => {\n tapIf(root?.value, (el) => {\n const label = el.querySelector(labelSelector);\n\n if (!label) {\n return;\n }\n\n labels.add(label);\n\n startResizeObserving(label, () => {\n const rightOffset = call(() => {\n return label.getBoundingClientRect().width + tap(offset, (n) => (Number.isNaN(n) ? contourOffset : n + contourOffset)); //\n });\n\n if (el.style.getPropertyValue('--label-offset-right-x') !== `${rightOffset}px`) {\n el.style.setProperty('--label-offset-right-x', `${rightOffset}px`);\n }\n });\n });\n });\n\n onBeforeUnmount(() => {\n Array.from(labels.values()).map((el) => stopResizeObserving(el));\n });\n}\n","import { computed, type Ref } from 'vue';\n\n// Validation rules similar to those in Vuetify\n\nexport function validateFormValue<T>(value: T, rules: ((v: T) => boolean | string)[]) {\n const errors: string[] = [];\n if (rules && rules.length > 0) {\n rules.forEach((rule) => {\n const err = rule(value);\n if (typeof err === 'string') {\n errors.push(err);\n }\n });\n }\n return {\n isValid: errors.length === 0,\n errors: errors,\n };\n}\n\nexport function useValidation<T>(val: Ref<T>, rules: ((v: T) => boolean | string)[]) {\n return computed(() => {\n return validateFormValue(val.value, rules);\n });\n}\n","<script lang=\"ts\" setup>\nimport { computed } from 'vue';\nimport type { MaskIconName16, Size } from '@/types';\n\nconst props = defineProps<{\n name: MaskIconName16;\n size?: Size;\n}>();\n\nconst style = computed(() => (props.size === 'large' ? '--icon-size: 24px' : ''));\n\nconst className = computed(() => `icon-16 icon-${props.name}`);\n</script>\n\n<template>\n <i :style=\"style\" :class=\"[className, $style.icon]\" />\n</template>\n\n<style module>\n.icon {\n display: inline-block;\n}\n</style>\n","<script lang=\"ts\">\n/**\n * Component for one-line string data manipulation\n */\nexport default {\n name: 'PlTextField',\n};\n</script>\n\n<script lang=\"ts\" setup generic=\"M, E = string, C = E\">\nimport './pl-text-field.scss';\nimport { computed, reactive, ref, useSlots } from 'vue';\nimport { PlTooltip } from '@/components/PlTooltip';\nimport DoubleContour from '@/utils/DoubleContour.vue';\nimport { useLabelNotch } from '@/utils/useLabelNotch';\nimport { useValidation } from '@/utils/useValidation';\nimport { PlIcon16 } from '../PlIcon16';\nimport { PlMaskIcon24 } from '../PlMaskIcon24';\nimport type { Equal } from '@milaboratories/helpers';\n\nconst slots = useSlots();\n\ntype Model = Equal<M, E | C> extends true ? M : never; // basically in === out\n\n/**\n * The current value of the input field.\n */\nconst model = defineModel<Model>({\n required: true,\n});\n\nconst props = defineProps<{\n /**\n * The label to display above the input field.\n */\n label?: string;\n /**\n * If `true`, a clear icon will appear in the input field to clear the value (set it to empty string).\n * Or you can pass a callback that returns a custom \"empty\" value (null | undefined | string)\n */\n clearable?: boolean | (() => C);\n /**\n * An optional callback to parse and/or cast the value, the return type overrides the model type.\n * The callback must throw an exception if the value is invalid\n */\n parse?: (v: string) => E;\n /**\n * If `true`, the input field is marked as required.\n */\n required?: boolean;\n /**\n * An error message to display below the input field.\n */\n error?: string;\n /**\n * A helper text to display below the input field when there are no errors.\n */\n helper?: string;\n /**\n * A placeholder text to display inside the input field when it is empty.\n */\n placeholder?: string;\n /**\n * If `true`, the input field is disabled and cannot be interacted with.\n */\n disabled?: boolean;\n /**\n * If `true`, the input field has a dashed border.\n */\n dashed?: boolean;\n /**\n * A prefix text to display inside the input field before the value.\n */\n prefix?: string;\n /**\n * An array of validation rules to apply to the input field. Each rule is a function that takes the current value and returns `true` if valid or an error message if invalid.\n */\n rules?: ((v: string) => boolean | string)[];\n /**\n * The string specifies whether the field should be a password or not, value could be \"password\" or undefined.\n */\n type?: 'password';\n}>();\n\nconst rootRef = ref<HTMLInputElement | undefined>(undefined);\n\nconst inputRef = ref<HTMLInputElement | undefined>();\n\nconst showPassword = ref(false);\n\nconst data = reactive({\n cached: undefined as { error: string; value: string } | undefined,\n});\n\nconst valueRef = computed<string>({\n get() {\n if (data.cached) {\n return data.cached.value;\n }\n return model.value === undefined || model.value === null ? '' : String(model.value);\n },\n set(value) {\n data.cached = undefined;\n\n if (props.parse) {\n try {\n model.value = props.parse(value) as Model;\n } catch (err) {\n data.cached = {\n error: err instanceof Error ? err.message : String(err),\n value,\n };\n }\n } else {\n model.value = value as Model;\n }\n },\n});\n\nconst fieldType = computed(() => {\n if (props.type && props.type === 'password') {\n return showPassword.value ? 'text' : props.type;\n } else {\n return 'text';\n }\n});\n\nconst passwordIcon = computed(() => (showPassword.value ? 'view-show' : 'view-hide'));\n\nconst clear = () => {\n if (props.clearable) {\n data.cached = undefined;\n model.value = props.clearable === true ? ('' as Model) : (props.clearable() as Model);\n }\n};\n\nconst validationData = useValidation(valueRef, props.rules || []);\n\nconst isEmpty = computed(() => {\n if (props.clearable) {\n return props.clearable === true ? model.value === '' : model.value === props.clearable();\n }\n\n return model.value === '';\n});\n\nconst nonEmpty = computed(() => !isEmpty.value);\n\nconst displayErrors = computed(() => {\n const errors: string[] = [];\n if (props.error) {\n errors.push(props.error);\n }\n if (data.cached) {\n errors.push(data.cached.error);\n }\n if (!validationData.value.isValid) {\n errors.push(...validationData.value.errors);\n }\n return errors;\n});\n\nconst hasErrors = computed(() => displayErrors.value.length > 0);\n\nconst canShowClearable = computed(() => props.clearable && nonEmpty.value && props.type !== 'password' && !props.disabled);\n\nconst togglePasswordVisibility = () => (showPassword.value = !showPassword.value);\n\nconst onFocusOut = () => {\n data.cached = undefined;\n};\n\nconst setFocusOnInput = () => inputRef.value?.focus();\n\nuseLabelNotch(rootRef);\n</script>\n\n<template>\n <div class=\"pl-text-field__envelope\">\n <div\n ref=\"rootRef\"\n class=\"pl-text-field\"\n :class=\"{\n error: hasErrors,\n disabled,\n dashed,\n nonEmpty,\n }\"\n >\n <label v-if=\"label\" ref=\"label\">\n <i v-if=\"required\" class=\"required-icon\" />\n <span>{{ label }}</span>\n <PlTooltip v-if=\"slots.tooltip\" class=\"info\" position=\"top\">\n <template #tooltip>\n <slot name=\"tooltip\" />\n </template>\n </PlTooltip>\n </label>\n <div v-if=\"prefix\" class=\"pl-text-field__prefix\">\n {{ prefix }}\n </div>\n <input\n ref=\"inputRef\"\n v-model=\"valueRef\"\n :disabled=\"disabled\"\n :placeholder=\"placeholder || '...'\"\n :type=\"fieldType\"\n spellcheck=\"false\"\n @focusout=\"onFocusOut\"\n />\n <div class=\"pl-text-field__append\" @click=\"setFocusOnInput\">\n <PlIcon16 v-if=\"canShowClearable\" class=\"pl-text-field__clearable\" name=\"delete-clear\" @click.stop=\"clear\" />\n <PlMaskIcon24 v-if=\"type === 'password'\" :name=\"passwordIcon\" style=\"cursor: pointer\" @click.stop=\"togglePasswordVisibility\" />\n <slot name=\"append\" />\n </div>\n <DoubleContour class=\"pl-text-field__contour\" />\n </div>\n <div v-if=\"hasErrors\" class=\"pl-text-field__error\">\n {{ displayErrors.join(' ') }}\n </div>\n <div v-else-if=\"helper\" class=\"pl-text-field__helper\">{{ helper }}</div>\n </div>\n</template>\n","<script lang=\"ts\" setup>\nimport { computed } from 'vue';\nimport type { MaskIconName24, Size } from '@/types';\n\nconst props = defineProps<{\n name: MaskIconName24;\n size?: Size;\n}>();\n\nconst className = computed(() => `icon-24 icon-${props.name}`);\n</script>\n\n<template>\n <i :class=\"[className, $style.icon]\" />\n</template>\n\n<style module>\n.icon {\n display: inline-block;\n}\n</style>\n","<script lang=\"ts\" setup>\nimport { PlIcon16 } from '../PlIcon16';\nimport { PlIcon24 } from '../PlIcon24';\nimport { computed, ref } from 'vue';\n\nconst emit = defineEmits(['update:modelValue']);\n\nconst props = defineProps<{\n modelValue?: string;\n clearable?: boolean;\n placeholder?: string;\n disabled?: boolean;\n}>();\n\nconst root = ref<HTMLInputElement | undefined>(undefined);\nconst input = ref<HTMLInputElement | undefined>();\n\nconst value = computed({\n get() {\n return props.modelValue ?? '';\n },\n set(v) {\n emit('update:modelValue', v);\n },\n});\n\nconst nonEmpty = computed(() => !!props.modelValue);\n\nconst clear = () => emit('update:modelValue', '');\n</script>\n\n<template>\n <div ref=\"root\" class=\"pl-search-field\" :class=\"[$style.component]\">\n <PlIcon24 name=\"search\" />\n <input ref=\"input\" v-model=\"value\" :disabled=\"disabled\" type=\"text\" :placeholder=\"placeholder || 'Find...'\" spellcheck=\"false\" />\n <PlIcon16 v-if=\"clearable && nonEmpty\" :class=\"$style.clear\" name=\"delete-clear\" @click.stop=\"clear\" />\n </div>\n</template>\n\n<style lang=\"scss\" module>\n.component {\n --pl-search-field-border-bottom-color: var(--txt-01);\n --pl-search-field-bg: transparent;\n --pl-search-field-caret-color: auto;\n --pl-search-field-clear-display: none;\n\n position: relative;\n display: flex;\n align-items: center;\n min-height: calc(var(--control-height) - 2px);\n line-height: calc(var(--control-height) - 2px);\n background-color: var(--pl-search-field-bg);\n padding: 0 0 0 0;\n border-bottom: 1px solid var(--pl-search-field-border-bottom-color);\n\n input {\n margin-left: 8px;\n height: 20px;\n border: none;\n outline: none;\n background-color: transparent;\n caret-color: var(--txt-focus);\n font-size: 14px;\n font-weight: 500;\n line-height: 20px;\n caret-color: var(--pl-search-field-caret-color);\n }\n\n &:focus-within {\n --pl-search-field-border-bottom-color: var(--txt-focus);\n --pl-search-field-caret-color: var(--border-color-focus);\n --pl-search-field-clear-display: block;\n }\n\n &:hover {\n --pl-search-field-clear-display: block;\n }\n\n .clear {\n cursor: pointer;\n margin-left: auto;\n display: var(--pl-search-field-clear-display);\n }\n}\n</style>\n","<script lang=\"ts\">\n/** Component for multi-line string data manipulation */\nexport default {\n name: 'PlTextArea',\n};\n</script>\n\n<script lang=\"ts\" setup>\nimport './pl-textarea.scss';\nimport { computed, onMounted, ref, useSlots } from 'vue';\nimport { PlTooltip } from '@/components/PlTooltip';\nimport DoubleContour from '@/utils/DoubleContour.vue';\nimport { useLabelNotch } from '@/utils/useLabelNotch';\nimport { useValidation } from '@/utils/useValidation';\n\nconst slots = useSlots();\n\nconst emit = defineEmits<{\n /**\n * Emitted when the model value is updated.\n */\n (e: 'update:modelValue', value: string): void;\n}>();\n\nconst props = defineProps<{\n /**\n * The current value of the texarea.\n */\n modelValue?: string;\n /**\n * The label to display above the texarea.\n */\n label?: string;\n /**\n * If `true`, the textarea is marked as required.\n */\n required?: boolean;\n /**\n * An error message to display below the textarea.\n */\n error?: string;\n /**\n * A helper text to display below the textarea when there are no errors.\n */\n helper?: string;\n /**\n * A placeholder text to display inside the textarea when it is empty.\n */\n placeholder?: string;\n /**\n * If `true`, the textarea is disabled and cannot be interacted with.\n */\n disabled?: boolean;\n /**\n * If `true`, the textarea is in a read-only state and cannot be edited, but it can still be focused and text can be selected.\n */\n readonly?: boolean;\n /**\n * If `true`, applies a dashed border style to the textarea, likely used for stylistic purposes or to indicate a certain state.\n */\n dashed?: boolean;\n /**\n * The number of visible text lines for the textarea, which controls the height of the textarea.\n */\n rows?: number;\n /**\n * If `true`, the textarea automatically adjusts its height to fit the content as the user types.\n */\n autogrow?: boolean;\n /**\n * An array of validation rules that are applied to the textarea input. Each rule is a function that receives the input value and returns `true` for valid input or an error message string for invalid input.\n */\n rules?: ((v: string) => boolean | string)[];\n}>();\n\nconst root = ref<HTMLInputElement>();\nconst input = ref<HTMLTextAreaElement>();\n\nconst value = computed({\n get() {\n return props.modelValue ?? '';\n },\n set(v) {\n emit('update:modelValue', v);\n },\n});\n\nconst nonEmpty = computed(() => !!props.modelValue);\nconst validationData = useValidation(value, props.rules || []);\n\nuseLabelNotch(root);\n\nconst displayErrors = computed(() => {\n const errors: string[] = [];\n if (props.error) {\n errors.push(props.error);\n }\n errors.push(...validationData.value.errors);\n return errors;\n});\n\nconst hasErrors = computed(() => displayErrors.value.length > 0);\n\nconst adjustHeight = () => {\n if (!props.autogrow) {\n return;\n }\n const el = input.value;\n if (el) {\n el.style.height = 'auto'; // it works, do not delete it\n el.style.height = `${el.scrollHeight}px`; // Set height based on scrollHeight\n }\n};\n\nonMounted(() => {\n adjustHeight();\n});\n</script>\n\n<template>\n <div class=\"ui-text-area__envelope\">\n <div ref=\"root\" class=\"ui-text-area\" :class=\"{ error: hasErrors, disabled, dashed, nonEmpty }\">\n <label v-if=\"label\" ref=\"label\">\n <i v-if=\"required\" class=\"required-icon\" />\n <span>{{ label }}</span>\n <PlTooltip v-if=\"slots.tooltip\" class=\"info\" position=\"top\">\n <template #tooltip>\n <slot name=\"tooltip\" />\n </template>\n </PlTooltip>\n </label>\n <textarea\n ref=\"input\"\n v-model=\"value\"\n :readonly=\"readonly\"\n :rows=\"rows\"\n :disabled=\"disabled\"\n :placeholder=\"placeholder ?? '...'\"\n spellcheck=\"false\"\n @input=\"adjustHeight\"\n />\n <div class=\"ui-text-area__append\">\n <slot name=\"append\" />\n </div>\n <DoubleContour class=\"ui-text-area__contour\" />\n </div>\n <div v-if=\"hasErrors\" class=\"ui-text-area__error\">\n {{ displayErrors.join(' ') }}\n </div>\n <div v-else-if=\"helper\" class=\"ui-text-area__helper\">{{ helper }}</div>\n </div>\n</template>\n","export function isRecord<V, T extends Record<string, V>>(obj: T | unknown): obj is T {\n return obj !== null && typeof obj === 'object';\n}\n\nexport function deepEqual(a: unknown, b: unknown): boolean {\n if (!(isRecord(a) && isRecord(b))) {\n return a === b;\n }\n\n if (Object.keys(a).length !== Object.keys(b).length) {\n return false;\n }\n\n return Object.keys(a).every((k) => deepEqual(a[k], b[k]));\n}\n\nexport function deepIncludes<T>(arr: T[], search: T) {\n return arr.some((it) => deepEqual(it, search));\n}\n","<script setup lang=\"ts\">\nimport { computed, ref } from 'vue';\nimport { debounce, notEmpty } from '@milaboratories/helpers';\n\nconst hasElementEllipsis = ref(false);\n\nconst span = ref<HTMLElement>();\n\nconst isHovered = ref(false);\n\nconst classes = computed(() => (isHovered.value && hasElementEllipsis.value ? 'ui-lt-animate' : ''));\n\nconst updateStatus = debounce((val: boolean) => (isHovered.value = val), 500);\n\nconst animationTime = computed(() => {\n return span.value ? `${span.value?.innerHTML.length * 0.4}s` : '5s';\n});\n\nfunction isEllipsisEnabled() {\n const el = notEmpty(span.value, 'span cannot be empty');\n hasElementEllipsis.value = el.clientWidth < el.scrollWidth;\n}\n\nfunction mouseoverHandler() {\n isEllipsisEnabled();\n updateStatus(true);\n}\n\nfunction mouseoutHandler() {\n updateStatus(false);\n}\n</script>\n\n<template>\n <div v-bind=\"$attrs\" class=\"ui-lt-container\">\n <span @mouseover=\"mouseoverHandler\" @mouseleave=\"mouseoutHandler\">\n <span ref=\"span\" :class=\"classes\"><slot /></span>\n </span>\n </div>\n</template>\n\n<style lang=\"scss\">\n.ui-lt-container {\n min-width: 0;\n white-space: nowrap;\n overflow: hidden;\n position: relative;\n border-radius: 5px;\n\n span {\n display: inline-block;\n overflow: hidden;\n text-overflow: ellipsis;\n width: 100%;\n vertical-align: bottom;\n pointer-events: all !important;\n }\n\n .ui-lt-animate {\n position: relative;\n animation: left-to-right v-bind(animationTime) infinite alternate linear;\n\n overflow: unset !important;\n text-overflow: unset !important;\n width: fit-content !important;\n }\n}\n\n@keyframes left-to-right {\n 0% {\n transform: translateX(0%);\n left: 0%;\n }\n\n 100% {\n transform: translateX(-101%);\n left: 101%;\n }\n}\n</style>\n","import { animate, makeEaseOut } from '@/helpers/utils';\n\nexport function isElementVisible(parent: HTMLElement, el: HTMLElement) {\n const scrollTop = parent.scrollTop;\n const parentHeight = parent.getBoundingClientRect().height;\n const elOffsetTop = el.offsetTop;\n const elHeight = el.getBoundingClientRect().height;\n return elOffsetTop + elHeight < parentHeight + scrollTop && elOffsetTop > scrollTop;\n}\n\nexport function getElementScrollPosition(parent: HTMLElement, el: HTMLElement) {\n const scrollTop = parent.scrollTop;\n const parentHeight = parent.getBoundingClientRect().height;\n const elOffsetTop = el.offsetTop;\n const elHeight = el.getBoundingClientRect().height;\n\n if (elOffsetTop + elHeight < parentHeight + scrollTop) {\n return 'ceil' as const;\n }\n\n if (elOffsetTop > scrollTop) {\n return 'floor' as const;\n }\n\n return 'visible' as const;\n}\n\nexport function scrollIntoView(parent: HTMLElement, el: HTMLElement, options: { duration?: number } = {}) {\n const scrollTop = parent.scrollTop;\n const parentHeight = parent.getBoundingClientRect().height;\n const elHeight = el.getBoundingClientRect().height;\n const offsetTop = el.offsetTop;\n const scrollPosition = getElementScrollPosition(parent, el);\n\n if (scrollPosition === 'visible') {\n return;\n }\n\n const draw = (progress: number) => {\n const to = scrollPosition === 'floor' ? offsetTop - (parentHeight - elHeight) : offsetTop;\n parent.scrollTop = scrollTop + progress * (to - scrollTop);\n };\n\n if (!isElementVisible(parent, el)) {\n animate({\n duration: options.duration || 100,\n timing: makeEaseOut((t) => t),\n draw,\n });\n }\n}\n\nexport function eventListener<K extends keyof DocumentEventMap>(\n el: Document,\n type: K,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n listener: (this: Document, ev: DocumentEventMap[K]) => any,\n options?: boolean | AddEventListenerOptions,\n): () => void;\n\nexport function eventListener<K extends keyof HTMLElementEventMap>(\n el: HTMLElement,\n type: K,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n listener: (this: HTMLElement, ev: HTMLElementEventMap[K]) => any,\n options?: boolean | AddEventListenerOptions,\n): () => void;\n\nexport function eventListener<K extends string>(\n el: HTMLElement | Document,\n type: K,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n listener: (this: HTMLElement | Document, ev: unknown) => any,\n options?: boolean | AddEventListenerOptions,\n) {\n el.addEventListener(type, listener, options);\n\n return function () {\n el.removeEventListener(type, listener);\n };\n}\n\nexport function detectOutside(e: { x: number; y: number }, el: HTMLElement) {\n const rect = el.getBoundingClientRect();\n return e.x < rect.x || e.x > rect.x + rect.width || e.y < rect.y || e.y > rect.y + rect.height;\n}\n","<script lang=\"ts\" setup>\nimport { useElementPosition } from '@/composition/usePosition';\nimport { scrollIntoView } from '@/helpers/dom';\nimport { tapIf } from '@milaboratories/helpers';\nimport { reactive, ref, toRef, watch } from 'vue';\n\nconst props = defineProps<{\n root: HTMLElement | undefined; // element to \"track\"\n gap?: number; // additional gap between overlay and \"root\" component\n}>();\n\nconst data = reactive({\n optionsHeight: 0,\n});\n\nconst optionsStyle = reactive({\n top: '0px',\n left: '0px',\n width: '0px',\n});\n\nconst rootRef = toRef(props, 'root');\n\nconst listRef = ref<HTMLElement>();\n\nconst scrollIntoActive = () => {\n const $list = listRef.value;\n\n if (!$list) {\n return;\n }\n\n tapIf($list.querySelector('.hovered-item') as HTMLElement, (opt) => {\n scrollIntoView($list, opt);\n });\n};\n\ndefineExpose({\n scrollIntoActive,\n listRef,\n});\n\nwatch(listRef, (el) => {\n if (el) {\n requestAnimationFrame(() => {\n const rect = el.getBoundingClientRect();\n data.optionsHeight = rect.height;\n window.dispatchEvent(new CustomEvent('adjust'));\n });\n }\n});\n\nuseElementPosition(rootRef, (pos) => {\n const bodyRect = document.body.getBoundingClientRect();\n\n const top = pos.top - bodyRect.top;\n\n const left = pos.left - bodyRect.left;\n\n const gap = props.gap ?? 0;\n\n const downTopOffset = top + pos.height + gap;\n\n if (downTopOffset + data.optionsHeight > pos.clientHeight) {\n optionsStyle.top = top - data.optionsHeight - gap + 'px';\n } else {\n optionsStyle.top = downTopOffset + 'px';\n }\n\n optionsStyle.left = left + 'px';\n optionsStyle.width = pos.width + 'px';\n});\n</script>\n\n<template>\n <Teleport to=\"body\">\n <div ref=\"listRef\" v-bind=\"$attrs\" :style=\"optionsStyle\" tabindex=\"-1\">\n <slot ref=\"list\" />\n </div>\n </Teleport>\n</template>\n","<script lang=\"ts\">\n/**\n * A component for selecting one value from a list of options\n */\nexport default {\n name: 'PlDropdown',\n};\n</script>\n\n<script lang=\"ts\" setup generic=\"M = unknown\">\nimport './pl-dropdown.scss';\nimport { computed, reactive, ref, unref, useSlots, useTemplateRef, watch, watchPostEffect } from 'vue';\nimport { tap } from '@/helpers/functions';\nimport { PlTooltip } from '@/components/PlTooltip';\nimport DoubleContour from '@/utils/DoubleContour.vue';\nimport { useLabelNotch } from '@/utils/useLabelNotch';\nimport type { ListOption, ListOptionNormalized } from '@/types';\nimport { deepEqual } from '@/helpers/objects';\nimport DropdownListItem from '@/components/DropdownListItem.vue';\nimport LongText from '@/components/LongText.vue';\nimport { normalizeListOptions } from '@/helpers/utils';\nimport { PlIcon16 } from '../PlIcon16';\nimport { PlMaskIcon24 } from '../PlMaskIcon24';\nimport { DropdownOverlay } from '@/utils/DropdownOverlay';\n\nconst emit = defineEmits<{\n /**\n * Emitted when the model value is updated.\n */\n (e: 'update:modelValue', value: M | undefined): void;\n}>();\n\nconst props = withDefaults(\n defineProps<{\n /**\n * The current selected value of the dropdown.\n */\n modelValue: M;\n /**\n * The label text for the dropdown field (optional)\n */\n label?: string;\n /**\n * List of available options for the dropdown\n */\n options?: Readonly<ListOption<M>[]>;\n /**\n * A helper text displayed below the dropdown when there are no errors (optional).\n */\n helper?: string;\n /**\n * A helper text displayed below the dropdown when there are no options yet or options is undefined (optional).\n */\n loadingOptionsHelper?: string;\n /**\n * Error message displayed below the dropdown (optional)\n */\n error?: string;\n /**\n * Placeholder text shown when no value is selected.\n */\n placeholder?: string;\n /**\n * Enables a button to clear the selected value (default: false)\n */\n clearable?: boolean;\n /**\n * If `true`, the dropdown component is marked as required.\n */\n required?: boolean;\n /**\n * If `true`, the dropdown component is disabled and cannot be interacted with.\n */\n disabled?: boolean;\n /**\n * Custom icon (16px) class for the dropdown arrow (optional)\n */\n arrowIcon?: string;\n /**\n * Custom icon (24px) class for the dropdown arrow (optional)\n */\n arrowIconLarge?: string;\n /**\n * Option list item size\n */\n optionSize?: 'small' | 'medium';\n }>(),\n {\n label: '',\n helper: undefined,\n loadingOptionsHelper: undefined,\n error: undefined,\n placeholder: '...',\n clearable: false,\n required: false,\n disabled: false,\n arrowIcon: undefined,\n arrowIconLarge: undefined,\n optionSize: 'small',\n options: undefined,\n },\n);\n\nconst slots = useSlots();\n\nconst rootRef = ref<HTMLElement | undefined>();\nconst input = ref<HTMLInputElement | undefined>();\n\nconst overlayRef = useTemplateRef('overlay');\n\nconst data = reactive({\n search: '',\n activeIndex: -1,\n open: false,\n optionsHeight: 0,\n});\n\nconst findActiveIndex = () =>\n tap(\n filteredRef.value.findIndex((o) => deepEqual(o.value, props.modelValue)),\n (v) => (v < 0 ? 0 : v),\n );\n\nconst updateActive = () => (data.activeIndex = findActiveIndex());\n\nconst isLoadingOptions = computed(() => {\n return props.options === undefined;\n});\n\nconst isDisabled = computed(() => {\n if (isLoadingOptions.value) {\n return true;\n }\n\n return props.disabled;\n});\n\nconst selectedIndex = computed(() => {\n return (props.options ?? []).findIndex((o) => deepEqual(o.value, props.modelValue));\n});\n\nconst computedError = computed(() => {\n if (isLoadingOptions.value) {\n return undefined;\n }\n\n if (props.error) {\n return props.error;\n }\n\n if (props.modelValue !== undefined && selectedIndex.value === -1) {\n return 'The selected value is not one of the options';\n }\n\n return undefined;\n});\n\nconst optionsRef = computed(() =>\n normalizeListOptions(props.options ?? []).map((opt, index) => ({\n ...opt,\n index,\n isSelected: index === selectedIndex.value,\n isActive: index === data.activeIndex,\n })),\n);\n\nconst textValue = computed(() => {\n const options = unref(optionsRef);\n\n const item: ListOption | undefined = options.find((o) => deepEqual(o.value, props.modelValue));\n\n return item?.label || props.modelValue; // @todo show inner value?\n});\n\nconst computedPlaceholder = computed(() => {\n if (!data.open && props.modelValue) {\n return '';\n }\n\n return props.modelValue ? String(textValue.value) : props.placeholder;\n});\n\nconst hasValue = computed(() => {\n return props.modelValue !== undefined && props.modelValue !== null;\n});\n\nconst filteredRef = computed(() => {\n const options = optionsRef.value;\n\n if (data.search) {\n return options.filter((o: ListOptionNormalized) => {\n const search = data.search.toLowerCase();\n\n if (o.label.toLowerCase().includes(search)) {\n return true;\n }\n\n if (o.description && o.description.toLowerCase().includes(search)) {\n return true;\n }\n\n if (typeof o.value === 'string') {\n return o.value.toLowerCase().includes(search);\n }\n\n return o.value === data.search;\n });\n }\n\n return options;\n});\n\nconst tabindex = computed(() => (isDisabled.value ? undefined : '0'));\n\nconst selectOption = (v: M | undefined) => {\n emit('update:modelValue', v);\n data.search = '';\n data.open = false;\n rootRef?.value?.focus();\n};\n\nconst clear = () => emit('update:modelValue', undefined);\n\nconst setFocusOnInput = () => input.value?.focus();\n\nconst toggleOpen = () => {\n data.open = !data.open;\n if (!data.open) {\n data.search = '';\n }\n};\n\nconst onInputFocus = () => (data.open = true);\n\nconst onFocusOut = (event: FocusEvent) => {\n const relatedTarget = event.relatedTarget as Node | null;\n\n if (!rootRef.value?.contains(relatedTarget) && !overlayRef.value?.listRef?.contains(relatedTarget)) {\n data.search = '';\n data.open = false;\n }\n};\n\nconst handleKeydown = (e: { code: string; preventDefault(): void }) => {\n if (!['ArrowDown', 'ArrowUp', 'Enter', 'Escape'].includes(e.code)) {\n return;\n } else {\n e.preventDefault();\n }\n\n const { open, activeIndex } = data;\n\n if (!open) {\n if (e.code === 'Enter') {\n data.open = true;\n }\n return;\n }\n\n if (e.code === 'Escape') {\n data.open = false;\n rootRef.value?.focus();\n }\n\n const filtered = unref(filteredRef);\n\n const { length } = filtered;\n\n if (!length) {\n return;\n }\n\n if (e.code === 'Enter') {\n selectOption(filtered.find((it) => it.index === activeIndex)?.value);\n }\n\n const localIndex = filtered.findIndex((it) => it.index === activeIndex) ?? -1;\n\n const delta = e.code === 'ArrowDown' ? 1 : e.code === 'ArrowUp' ? -1 : 0;\n\n const newIndex = Math.abs(localIndex + delta + length) % length;\n\n data.activeIndex = filteredRef.value[newIndex].index ?? -1;\n};\n\nuseLabelNotch(rootRef);\n\nwatch(() => props.modelValue, updateActive, { immediate: true });\n\nwatch(\n () => data.open,\n (open) => (open ? input.value?.focus() : ''),\n);\n\nwatchPostEffect(() => {\n // eslint-disable-next-line @typescript-eslint/no-unused-expressions\n data.search; // to watch\n\n if (data.activeIndex >= 0 && data.open) {\n overlayRef.value?.scrollIntoActive();\n }\n});\n</script>\n\n<template>\n <div class=\"pl-dropdown__envelope\" @click=\"setFocusOnInput\">\n <div\n ref=\"rootRef\"\n :tabindex=\"tabindex\"\n class=\"pl-dropdown\"\n :class=\"{ open: data.open, error, disabled: isDisabled }\"\n @keydown=\"handleKeydown\"\n @focusout=\"onFocusOut\"\n >\n <div class=\"pl-dropdown__container\">\n <div class=\"pl-dropdown__field\">\n <input\n ref=\"input\"\n v-model=\"data.search\"\n type=\"text\"\n tabindex=\"-1\"\n :disabled=\"isDisabled\"\n :placeholder=\"computedPlaceholder\"\n spellcheck=\"false\"\n autocomplete=\"chrome-off\"\n @focus=\"onInputFocus\"\n />\n\n <div v-if=\"!data.open\" class=\"input-value\">\n <LongText> {{ textValue }} </LongText>\n </div>\n\n <div class=\"pl-dropdown__controls\">\n <PlMaskIcon24 v-if=\"isLoadingOptions\" name=\"loading\" />\n <PlIcon16 v-if=\"clearable && hasValue\" name=\"delete-clear\" @click.stop=\"clear\" />\n <slot name=\"append\" />\n <div class=\"pl-dropdown__arrow-wrapper\" @click.stop=\"toggleOpen\">\n <div v-if=\"arrowIconLarge\" class=\"arrow-icon\" :class=\"[`icon-24 ${arrowIconLarge}`]\" />\n <div v-else-if=\"arrowIcon\" class=\"arrow-icon\" :class=\"[`icon-16 ${arrowIcon}`]\" />\n <div v-else class=\"arrow-icon arrow-icon-default\" />\n </div>\n </div>\n </div>\n <label v-if=\"label\">\n <i v-if=\"required\" class=\"required-icon\" />\n <span>{{ label }}</span>\n <PlTooltip v-if=\"slots.tooltip\" class=\"info\" position=\"top\">\n <template #tooltip>\n <slot name=\"tooltip\" />\n </template>\n </PlTooltip>\n </label>\n <DropdownOverlay v-if=\"data.open\" ref=\"overlay\" :root=\"rootRef\" class=\"pl-dropdown__options\" tabindex=\"-1\" :gap=\"3\">\n <DropdownListItem\n v-for=\"(item, index) in filteredRef\"\n :key=\"index\"\n :option=\"item\"\n :is-selected=\"item.isSelected\"\n :is-hovered=\"item.isActive\"\n :size=\"optionSize\"\n @click.stop=\"selectOption(item.value)\"\n />\n <div v-if=\"!filteredRef.length\" class=\"nothing-found\">Nothing found</div>\n </DropdownOverlay>\n <DoubleContour class=\"pl-dropdown__contour\" />\n </div>\n </div>\n <div v-if=\"computedError\" class=\"pl-dropdown__error\">{{ computedError }}</div>\n <div v-else-if=\"isLoadingOptions && loadingOptionsHelper\" class=\"pl-dropdown__helper\">{{ loadingOptionsHelper }}</div>\n <div v-else-if=\"helper\" class=\"pl-dropdown__helper\">{{ helper }}</div>\n </div>\n</template>\n","<script lang=\"ts\">\n/**\n * A component for selecting one value from a list of options\n */\nexport default {\n name: 'PlDropdownRef',\n};\n</script>\n\n<script lang=\"ts\" setup>\nimport type { ModelRef, RefOption } from '@/types';\nimport { PlDropdown } from '../PlDropdown';\nimport { computed, useSlots } from 'vue';\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nconst slots: any = useSlots();\n\ndefineEmits<{\n /**\n * Emitted when the model value is updated.\n */\n (e: 'update:modelValue', value: ModelRef | undefined): void;\n}>();\n\nconst props = withDefaults(\n defineProps<{\n /**\n * The current selected ref of the dropdown.\n */\n modelValue: ModelRef | undefined;\n /**\n * The label text for the dropdown field (optional)\n */\n label?: string;\n /**\n * List of available ref options for the dropdown\n */\n options?: Readonly<RefOption[]>;\n /**\n * A helper text displayed below the dropdown when there are no errors (optional).\n */\n helper?: string;\n /**\n * A helper text displayed below the dropdown when there are no options yet or options is undefined (optional).\n */\n loadingOptionsHelper?: string;\n /**\n * Error message displayed below the dropdown (optional)\n */\n error?: string;\n /**\n * Placeholder text shown when no value is selected.\n */\n placeholder?: string;\n /**\n * Enables a button to clear the selected value (default: false)\n */\n clearable?: boolean;\n /**\n * If `true`, the dropdown component is marked as required.\n */\n required?: boolean;\n /**\n * If `true`, the dropdown component is disabled and cannot be interacted with.\n */\n disabled?: boolean;\n /**\n * Option list item size\n */\n optionSize?: 'small' | 'medium';\n }>(),\n {\n label: '',\n helper: undefined,\n loadingOptionsHelper: undefined,\n error: undefined,\n placeholder: '...',\n clearable: false,\n required: false,\n disabled: false,\n arrowIcon: undefined,\n optionSize: 'small',\n options: undefined,\n },\n);\n\nconst options = computed(() =>\n props.options?.map((opt) => ({\n label: opt.label,\n value: opt.ref,\n })),\n);\n\nconst arrowIcon = computed(() => (props.disabled ? 'icon-link-disabled' : 'icon-link'));\n</script>\n\n<template>\n <PlDropdown\n v-bind=\"props\"\n :options=\"options\"\n :loading-options-helper=\"loadingOptionsHelper\"\n :arrow-icon-large=\"arrowIcon\"\n @update:model-value=\"$emit('update:modelValue', $event)\"\n >\n <template v-if=\"slots.tooltip\" #tooltip>\n <slot name=\"tooltip\" />\n </template>\n </PlDropdown>\n</template>\n","import type { ComputedRef, Ref } from 'vue';\nimport { computed } from 'vue';\nimport type { ListOption, ListOptionNormalized } from '@/types';\nimport { normalizeListOptions } from '@/helpers/utils';\n\nexport function useFilteredList<V = unknown>(optionsRef: Ref<ListOption<V>[]>, searchPhrase: Ref<string>): ComputedRef<ListOptionNormalized<V>[]> {\n return computed(() => {\n const options = normalizeListOptions(optionsRef.value);\n if (searchPhrase.value) {\n return options.filter((element) => {\n return element.label.toLowerCase().includes(searchPhrase.value.toLowerCase());\n });\n }\n return options;\n });\n}\n","<script setup lang=\"ts\">\nimport './resizable-input.scss';\nimport { computed } from 'vue';\n\nconst props = defineProps<{\n modelValue?: string;\n placeholder?: string;\n disabled?: boolean;\n maxWidth?: string;\n width?: string;\n}>();\n\nconst emit = defineEmits(['update:modelValue']);\n\nconst text = computed(() => {\n if (props.placeholder) {\n return props.placeholder;\n }\n return (props.modelValue)?.replace('\"', '');\n});\n\nconst styles = computed(() => {\n const stl: Record<string, string> = {};\n if (props.width) {\n stl['width'] = props.width;\n }\n if (props.maxWidth) {\n stl['maxWidth'] = props.maxWidth;\n }\n return stl;\n});\n\nfunction handleInput(event: Event) {\n emit('update:modelValue', (event.target as HTMLInputElement).value);\n}\n</script>\n\n<template>\n <div class=\"resizable-input\">\n <span :style=\"styles\" class=\"resizable-input__size-span\">{{ text }}</span>\n <input v-bind=\"$attrs\" :placeholder=\"placeholder\" :value=\"props.modelValue\" :disabled=\"props.disabled\" :style=\"styles\" @input=\"handleInput\" />\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport { computed } from 'vue';\nimport type { ListOptionNormalized } from '@/types';\n\nconst props = withDefaults(\n defineProps<{\n option: ListOptionNormalized;\n isSelected: boolean;\n isHovered: boolean;\n }>(),\n {\n isSelected: false,\n isHovered: false,\n },\n);\n\nconst label = computed(() => props.option.label);\n\nconst classes = computed<string>(() => {\n const classList: string[] = [];\n if (props.isSelected) {\n classList.push('dropdown-tab-item__selected');\n }\n if (props.isHovered) {\n classList.push('hovered-item');\n }\n return classList.join(' ');\n});\n</script>\n<template>\n <div :class=\"classes\" class=\"dropdown-tab-item\">\n <div class=\"dropdown-tab-item__title text-caps13\">\n {{ label }}\n </div>\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport './pl-dropdown-line.scss';\nimport type { StyleValue } from 'vue';\nimport { computed, nextTick, reactive, ref, toRef, watch } from 'vue';\nimport { deepEqual } from '@/helpers/objects';\nimport { useClickOutside } from '@/composition/useClickOutside';\nimport { useFilteredList } from '@/composition/useFilteredList';\nimport ResizableInput from './ResizableInput.vue';\nimport { tapIf, tap } from '@/helpers/functions';\nimport { scrollIntoView } from '@/helpers/dom';\nimport DropdownListItem from '@/components/DropdownListItem.vue';\nimport TabItem from '@/components/TabItem.vue';\nimport type { ListOption } from '@/types';\nimport { normalizeListOptions } from '@/helpers/utils';\nimport { useElementPosition } from '@/composition/usePosition';\n\nconst emit = defineEmits(['update:modelValue']); // at the top always\n\nconst props = withDefaults(\n defineProps<{\n modelValue: unknown;\n disabled?: boolean;\n prefix?: string;\n options: ListOption[]; // @todo extend with size field\n placeholder?: string;\n mode?: 'list' | 'tabs';\n tabsContainerStyles?: StyleValue;\n clearable?: boolean;\n }>(),\n {\n mode: 'list',\n placeholder: 'Select..',\n prefix: '',\n tabsContainerStyles: undefined,\n clearable: false,\n },\n);\n\nconst data = reactive({\n isOpen: false,\n activeOption: -1,\n optionsHeight: 0,\n});\n\nconst container = ref<HTMLElement>();\n\nconst list = ref<HTMLElement>();\n\nconst classes = computed(() => {\n const classesResult = [];\n if (data.isOpen) {\n classesResult.push('open');\n }\n if (props.disabled) {\n classesResult.push('disabled');\n }\n return classesResult.join(' ');\n});\n\nconst searchPhrase = ref<string>('');\n\nconst options = useFilteredList(toRef(props, 'options'), searchPhrase);\n\nconst canShowClearBtn = computed<boolean>(() => !!(props.clearable && data.isOpen && props.modelValue && modelText.value));\n\nconst modelText = computed<string>(() => {\n if (props.modelValue) {\n const index = getIndexForModelInItems();\n if (index !== -1) {\n const item = normalizeListOptions(props.options)[index];\n return item.label;\n }\n }\n return '';\n});\n\nconst inputModel = ref(modelText.value);\n\nwatch(modelText, (v) => {\n inputModel.value = v;\n});\n\nconst placeholderVal = computed(() => {\n if (data.isOpen) {\n if (searchPhrase.value && searchPhrase.value.length >= modelText.value.length - 1) {\n return searchPhrase.value;\n }\n }\n\n return modelText.value || '...';\n});\n\nuseClickOutside(container, () => {\n if (props.mode === 'list') {\n data.isOpen = false;\n }\n});\n\nwatch(\n () => inputModel.value,\n (val) => {\n if (modelText.value !== val) {\n searchPhrase.value = val;\n } else {\n searchPhrase.value = '';\n }\n },\n);\n\nwatch(\n () => data.isOpen,\n (value: boolean) => {\n if (value && container.value) {\n container.value.querySelector('input')?.focus();\n nextTick(() => scrollIntoActive());\n }\n },\n);\n\nwatch(\n () => props.modelValue,\n () => updateSelected(),\n { immediate: true },\n);\n\nfunction getIndexForModelInItems(): number | -1 {\n return props.options.findIndex((o: ListOption) => {\n return deepEqual(o.value, props.modelValue);\n });\n}\n\nfunction updateSelected() {\n data.activeOption = tap(\n options.value.findIndex((o: ListOption) => {\n return deepEqual(o.value, props.modelValue);\n }),\n (v) => (v < 0 ? 0 : v),\n );\n}\n\nfunction resetSearchPhrase() {\n searchPhrase.value = '';\n}\n\nfunction toggleList(): void {\n if (props.disabled) {\n data.isOpen = false;\n } else {\n nextTick(() => {\n data.isOpen = !data.isOpen;\n });\n }\n}\n\nfunction closePopupIfNeeded() {\n if (props.mode === 'list') {\n data.isOpen = false;\n }\n}\n\nfunction selectItem(item?: ListOption): void {\n if (item) {\n emit('update:modelValue', item.value);\n closePopupIfNeeded();\n resetSearchPhrase();\n }\n}\n\nfunction isItemSelected(item: ListOption): boolean {\n return deepEqual(item.value, props.modelValue);\n}\n\nconst onFocusOut = (event: FocusEvent) => {\n const relatedTarget = event.relatedTarget as Node | null;\n\n if (!container.value?.contains(relatedTarget) && !list.value?.contains(relatedTarget)) {\n searchPhrase.value = '';\n data.isOpen = false;\n }\n};\n\nfunction handleKeydown(e: { code: string; preventDefault(): void }) {\n const { activeOption } = data;\n\n if (!data.isOpen && e.code === 'Enter') {\n data.isOpen = true;\n return;\n }\n\n const { length } = options.value;\n\n if (!length) {\n return;\n }\n\n if (['ArrowDown', 'ArrowUp', 'Enter'].includes(e.code)) {\n e.preventDefault();\n }\n\n if (e.code === 'Enter') {\n selectItem(options.value[activeOption]);\n }\n\n const d = e.code === 'ArrowDown' ? 1 : e.code === 'ArrowUp' ? -1 : 0;\n\n data.activeOption = Math.abs(activeOption + d + length) % length;\n\n requestAnimationFrame(scrollIntoActive);\n}\n\nfunction scrollIntoActive() {\n const $list = list.value;\n if (!$list) {\n return;\n }\n tapIf($list.querySelector('.hovered-item'), (el: Element) => {\n if (props.mode === 'list') {\n scrollIntoView($list, el as HTMLElement);\n } else {\n el.scrollIntoView({ behavior: 'smooth', block: 'nearest', inline: 'center' });\n }\n });\n}\n\nfunction clearModel() {\n emit('update:modelValue', undefined);\n}\n\nconst optionsStyle = reactive({\n top: '0px',\n left: '0px',\n});\n\nwatch(list, (el) => {\n if (el) {\n const rect = el.getBoundingClientRect();\n data.optionsHeight = rect.height;\n window.dispatchEvent(new CustomEvent('adjust'));\n }\n});\n\nuseElementPosition(container, (pos) => {\n const gap = 2;\n\n const downTopOffset = pos.top + pos.height + gap;\n\n if (downTopOffset + data.optionsHeight > pos.clientHeight) {\n optionsStyle.top = pos.top - data.optionsHeight - gap + 'px';\n } else {\n optionsStyle.top = downTopOffset + 'px';\n }\n\n optionsStyle.left = pos.left + 'px';\n});\n</script>\n\n<template>\n <div\n ref=\"container\"\n tabindex=\"0\"\n :class=\"classes\"\n class=\"pl-line-dropdown uc-pointer\"\n @keydown=\"handleKeydown\"\n @focusout=\"onFocusOut\"\n @click=\"toggleList\"\n >\n <div class=\"pl-line-dropdown__prefix\">{{ props?.prefix }}</div>\n\n <ResizableInput v-model=\"inputModel\" :placeholder=\"placeholderVal\" :disabled=\"props.disabled\" class=\"pl-line-dropdown__input\" />\n\n <div class=\"pl-line-dropdown__icon-wrapper\">\n <div v-show=\"!canShowClearBtn\" class=\"pl-line-dropdown__icon\" />\n <div v-show=\"canShowClearBtn\" class=\"pl-line-dropdown__icon-clear\" @click=\"clearModel\" />\n </div>\n <Teleport v-if=\"data.isOpen\" to=\"body\">\n <div v-if=\"props.mode === 'list'\" ref=\"list\" :style=\"optionsStyle\" tabindex=\"-1\" class=\"pl-line-dropdown__items\" @focusout=\"onFocusOut\">\n <template v-for=\"(item, index) in options\" :key=\"index\">\n <slot\n name=\"item\"\n :item=\"item\"\n :text-item=\"'text'\"\n :is-selected=\"isItemSelected(item)\"\n :is-hovered=\"data.activeOption == index\"\n @click.stop=\"selectItem(item)\"\n >\n <DropdownListItem\n :option=\"item\"\n :text-item=\"'text'\"\n :is-selected=\"isItemSelected(item)\"\n :is-hovered=\"data.activeOption == index\"\n size=\"medium\"\n @click.stop=\"selectItem(item)\"\n />\n </slot>\n </template>\n\n <div v-if=\"options.length === 0\" class=\"pl-line-dropdown__no-item\">\n <div class=\"pl-line-dropdown__no-item-title text-s\">Didn't find anything that matched</div>\n </div>\n </div>\n <div\n v-else-if=\"props.mode === 'tabs'\"\n ref=\"list\"\n :style=\"optionsStyle\"\n tabindex=\"-1\"\n class=\"pl-line-dropdown__items-tabs\"\n @focusout=\"onFocusOut\"\n >\n <template v-for=\"(item, index) in options\" :key=\"index\">\n <slot name=\"item\" :item=\"item\" :is-selected=\"isItemSelected(item)\" :is-hovered=\"data.activeOption == index\" @click.stop=\"selectItem(item)\">\n <TabItem :option=\"item\" :is-selected=\"isItemSelected(item)\" :is-hovered=\"data.activeOption == index\" @click.stop=\"selectItem(item)\" />\n </slot>\n </template>\n <div v-if=\"options.length === 0\" class=\"pl-line-dropdown__no-item\">\n <div class=\"pl-line-dropdown__no-item-title text-s\">Didn't find anything that matched</div>\n </div>\n </div>\n </Teleport>\n </div>\n</template>\n","<script lang=\"ts\">\n/**\n * A component for selecting one value from a list of options\n */\nexport default {\n name: 'PlDropdown',\n};\n</script>\n\n<script lang=\"ts\" setup generic=\"M = unknown\">\nimport './pl-dropdown-legacy.scss';\nimport { computed, reactive, ref, unref, useSlots, watch, watchPostEffect } from 'vue';\nimport { tap, tapIf } from '@/helpers/functions';\nimport { PlTooltip } from '@/components/PlTooltip';\nimport DoubleContour from '@/utils/DoubleContour.vue';\nimport { useLabelNotch } from '@/utils/useLabelNotch';\nimport type { ListOption, ListOptionNormalized } from '@/types';\nimport { scrollIntoView } from '@/helpers/dom';\nimport { deepEqual } from '@/helpers/objects';\nimport DropdownListItem from '@/components/DropdownListItem.vue';\nimport LongText from '@/components/LongText.vue';\nimport { PlIcon16 } from '../PlIcon16';\nimport { PlMaskIcon24 } from '../PlMaskIcon24';\nimport { normalizeListOptions } from '@/helpers/utils';\n\nconst emit = defineEmits<{\n /**\n * Emitted when the model value is updated.\n */\n (e: 'update:modelValue', value: M | undefined): void;\n}>();\n\nconst props = withDefaults(\n defineProps<{\n /**\n * The current selected value of the dropdown.\n */\n modelValue: M;\n /**\n * The label text for the dropdown field (optional)\n */\n label?: string;\n /**\n * List of available options for the dropdown\n */\n options?: Readonly<ListOption<M>[]>;\n /**\n * A helper text displayed below the dropdown when there are no errors (optional).\n */\n helper?: string;\n /**\n * A helper text displayed below the dropdown when there are no options yet or options is undefined (optional).\n */\n loadingOptionsHelper?: string;\n /**\n * Error message displayed below the dropdown (optional)\n */\n error?: string;\n /**\n * Placeholder text shown when no value is selected.\n */\n placeholder?: string;\n /**\n * Enables a button to clear the selected value (default: false)\n */\n clearable?: boolean;\n /**\n * If `true`, the dropdown component is marked as required.\n */\n required?: boolean;\n /**\n * If `true`, the dropdown component is disabled and cannot be interacted with.\n */\n disabled?: boolean;\n /**\n * Custom icon (16px) class for the dropdown arrow (optional)\n */\n arrowIcon?: string;\n /**\n * Custom icon (24px) class for the dropdown arrow (optional)\n */\n arrowIconLarge?: string;\n /**\n * Option list item size\n */\n optionSize?: 'small' | 'medium';\n }>(),\n {\n label: '',\n helper: undefined,\n loadingOptionsHelper: undefined,\n error: undefined,\n placeholder: '...',\n clearable: false,\n required: false,\n disabled: false,\n arrowIcon: undefined,\n arrowIconLarge: undefined,\n optionSize: 'small',\n options: undefined,\n },\n);\n\nconst slots = useSlots();\n\nconst root = ref<HTMLElement | undefined>();\nconst list = ref<HTMLElement | undefined>();\nconst input = ref<HTMLInputElement | undefined>();\n\nconst data = reactive({\n search: '',\n activeIndex: -1,\n open: false,\n});\n\nconst findActiveIndex = () =>\n tap(\n filteredRef.value.findIndex((o) => deepEqual(o.value, props.modelValue)),\n (v) => (v < 0 ? 0 : v),\n );\n\nconst updateActive = () => (data.activeIndex = findActiveIndex());\n\nconst isLoadingOptions = computed(() => {\n return props.options === undefined;\n});\n\nconst isDisabled = computed(() => {\n if (isLoadingOptions.value) {\n return true;\n }\n\n return props.disabled;\n});\n\nconst selectedIndex = computed(() => {\n return (props.options ?? []).findIndex((o) => deepEqual(o.value, props.modelValue));\n});\n\nconst computedError = computed(() => {\n if (isLoadingOptions.value) {\n return undefined;\n }\n\n if (props.error) {\n return props.error;\n }\n\n if (props.modelValue !== undefined && selectedIndex.value === -1) {\n return 'The selected value is not one of the options';\n }\n\n return undefined;\n});\n\nconst optionsRef = computed(() =>\n normalizeListOptions(props.options ?? []).map((opt, index) => ({\n ...opt,\n index,\n isSelected: index === selectedIndex.value,\n isActive: index === data.activeIndex,\n })),\n);\n\nconst textValue = computed(() => {\n const options = unref(optionsRef);\n\n const item: ListOption | undefined = options.find((o) => deepEqual(o.value, props.modelValue));\n\n return item?.label || props.modelValue; // @todo show inner value?\n});\n\nconst computedPlaceholder = computed(() => {\n if (!data.open && props.modelValue) {\n return '';\n }\n\n return props.modelValue ? String(textValue.value) : props.placeholder;\n});\n\nconst hasValue = computed(() => {\n return props.modelValue !== undefined && props.modelValue !== null;\n});\n\nconst filteredRef = computed(() => {\n const options = optionsRef.value;\n\n if (data.search) {\n return options.filter((o: ListOptionNormalized) => {\n const search = data.search.toLowerCase();\n\n if (o.label.toLowerCase().includes(search)) {\n return true;\n }\n\n if (o.description && o.description.toLowerCase().includes(search)) {\n return true;\n }\n\n if (typeof o.value === 'string') {\n return o.value.toLowerCase().includes(search);\n }\n\n return o.value === data.search;\n });\n }\n\n return options;\n});\n\nconst tabindex = computed(() => (isDisabled.value ? undefined : '0'));\n\nconst selectOption = (v: M | undefined) => {\n emit('update:modelValue', v);\n data.search = '';\n data.open = false;\n root?.value?.focus();\n};\n\nconst clear = () => emit('update:modelValue', undefined);\n\nconst setFocusOnInput = () => input.value?.focus();\n\nconst toggleOpen = () => (data.open = !data.open);\n\nconst onInputFocus = () => (data.open = true);\n\nconst onFocusOut = (event: FocusEvent) => {\n if (!root?.value?.contains(event.relatedTarget as Node | null)) {\n data.search = '';\n data.open = false;\n }\n};\n\nconst scrollIntoActive = () => {\n const $list = list.value;\n\n if (!$list) {\n return;\n }\n\n tapIf($list.querySelector('.hovered-item') as HTMLElement, (opt) => {\n scrollIntoView($list, opt);\n });\n};\n\nconst handleKeydown = (e: { code: string; preventDefault(): void }) => {\n if (!['ArrowDown', 'ArrowUp', 'Enter', 'Escape'].includes(e.code)) {\n return;\n } else {\n e.preventDefault();\n }\n\n const { open, activeIndex } = data;\n\n if (!open) {\n if (e.code === 'Enter') {\n data.open = true;\n }\n return;\n }\n\n if (e.code === 'Escape') {\n data.open = false;\n root.value?.focus();\n }\n\n const filtered = unref(filteredRef);\n\n const { length } = filtered;\n\n if (!length) {\n return;\n }\n\n if (e.code === 'Enter') {\n selectOption(filtered.find((it) => it.index === activeIndex)?.value);\n }\n\n const localIndex = filtered.findIndex((it) => it.index === activeIndex) ?? -1;\n\n const delta = e.code === 'ArrowDown' ? 1 : e.code === 'ArrowUp' ? -1 : 0;\n\n const newIndex = Math.abs(localIndex + delta + length) % length;\n\n data.activeIndex = filteredRef.value[newIndex].index ?? -1;\n};\n\nuseLabelNotch(root);\n\nwatch(() => props.modelValue, updateActive, { immediate: true });\n\nwatch(\n () => data.open,\n (open) => (open ? input.value?.focus() : ''),\n);\n\nwatchPostEffect(() => {\n // eslint-disable-next-line @typescript-eslint/no-unused-expressions\n data.search; // to watch\n\n if (data.activeIndex >= 0 && data.open) {\n scrollIntoActive();\n }\n});\n</script>\n\n<template>\n <div class=\"ui-dropdown__envelope\">\n <div\n ref=\"root\"\n :tabindex=\"tabindex\"\n class=\"ui-dropdown\"\n :class=\"{ open: data.open, error, disabled: isDisabled }\"\n @keydown=\"handleKeydown\"\n @focusout=\"onFocusOut\"\n >\n <div class=\"ui-dropdown__container\">\n <div class=\"ui-dropdown__field\">\n <input\n ref=\"input\"\n v-model=\"data.search\"\n type=\"text\"\n tabindex=\"-1\"\n :disabled=\"isDisabled\"\n :placeholder=\"computedPlaceholder\"\n spellcheck=\"false\"\n autocomplete=\"chrome-off\"\n @focus=\"onInputFocus\"\n />\n\n <div v-if=\"!data.open\" @click=\"setFocusOnInput\">\n <LongText class=\"input-value\"> {{ textValue }} </LongText>\n </div>\n\n <div class=\"ui-dropdown__controls\">\n <PlMaskIcon24 v-if=\"isLoadingOptions\" name=\"loading\" />\n <PlIcon16 v-if=\"clearable && hasValue\" name=\"delete-clear\" @click.stop=\"clear\" />\n <slot name=\"append\" />\n <div v-if=\"arrowIconLarge\" class=\"arrow-icon\" :class=\"[`icon-24 ${arrowIconLarge}`]\" @click.stop=\"toggleOpen\" />\n <div v-else-if=\"arrowIcon\" class=\"arrow-icon\" :class=\"[`icon-16 ${arrowIcon}`]\" @click.stop=\"toggleOpen\" />\n <div v-else class=\"arrow-icon arrow-icon-default\" @click.stop=\"toggleOpen\" />\n </div>\n </div>\n <label v-if=\"label\">\n <i v-if=\"required\" class=\"required-icon\" />\n <span>{{ label }}</span>\n <PlTooltip v-if=\"slots.tooltip\" class=\"info\" position=\"top\">\n <template #tooltip>\n <slot name=\"tooltip\" />\n </template>\n </PlTooltip>\n </label>\n <div v-if=\"data.open\" ref=\"list\" class=\"ui-dropdown__options\">\n <DropdownListItem\n v-for=\"(item, index) in filteredRef\"\n :key=\"index\"\n :option=\"item\"\n :is-selected=\"item.isSelected\"\n :is-hovered=\"item.isActive\"\n :size=\"optionSize\"\n @click.stop=\"selectOption(item.value)\"\n />\n <div v-if=\"!filteredRef.length\" class=\"nothing-found\">Nothing found</div>\n </div>\n <DoubleContour class=\"ui-dropdown__contour\" />\n </div>\n </div>\n <div v-if=\"computedError\" class=\"ui-dropdown__error\">{{ computedError }}</div>\n <div v-else-if=\"isLoadingOptions && loadingOptionsHelper\" class=\"ui-dropdown__helper\">{{ loadingOptionsHelper }}</div>\n <div v-else-if=\"helper\" class=\"ui-dropdown__helper\">{{ helper }}</div>\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport { computed } from 'vue';\n\nconst props = withDefaults(\n defineProps<{\n loading: boolean;\n progress: number;\n completeMessage: string;\n }>(),\n { progress: 0, completeMessage: 'Completed' },\n);\n\nconst readyMsg = computed(() => (props.progress === 100 ? props.completeMessage : ''));\n</script>\n\n<template>\n <div v-if=\"loading\" class=\"ui-progress-bar\">\n <div class=\"ui-progress-bar__indicator\" :style=\"{ width: progress + '%' }\"/>\n <div class=\"ui-progress-bar__messages d-flex align-center pl-6 pr-6\">\n <div class=\"ui-progress-bar__message flex-grow-1\">{{ readyMsg }}</div>\n <div class=\"ui-progress-bar__percent\">{{ progress + '%' }}</div>\n </div>\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport './pl-number-field.scss';\nimport DoubleContour from '@/utils/DoubleContour.vue';\nimport { useLabelNotch } from '@/utils/useLabelNotch';\nimport { computed, ref, useSlots, watch } from 'vue';\nimport { PlTooltip } from '@/components/PlTooltip';\n\ntype NumberInputProps = {\n /** Input is disabled if true */\n disabled?: boolean;\n /** Label on the top border of the field, empty by default */\n label?: string;\n /** Input placeholder, empty by default */\n placeholder?: string;\n /** Step for increment/decrement buttons, 1 by default */\n step?: number;\n /** If defined - show an error if value is lower */\n minValue?: number;\n /** If defined - show an error if value is higher */\n maxValue?: number;\n /** If false - remove buttons on the right */\n useIncrementButtons?: boolean;\n /** If true - changes do not apply immediately, they apply only by removing focus from the input (by click enter or by click outside) */\n updateOnEnterOrClickOutside?: boolean;\n /** Error message that shows always when it's provided, without other checks */\n errorMessage?: string;\n /** Additional validity check for input value that must return an error text if failed */\n validate?: (v: number) => string | undefined;\n};\n\nconst props = withDefaults(defineProps<NumberInputProps>(), {\n step: 1,\n label: undefined,\n placeholder: undefined,\n minValue: undefined,\n maxValue: undefined,\n useIncrementButtons: true,\n updateOnEnter: false,\n errorMessage: undefined,\n validate: undefined,\n});\n\nconst modelValue = defineModel<number | undefined>({ required: true });\n\nconst root = ref<HTMLElement>();\nconst slots = useSlots();\nconst input = ref<HTMLInputElement>();\n\nuseLabelNotch(root);\n\nfunction modelToString(v: number | undefined) {\n return v === undefined ? '' : String(+v); // (+v) to avoid staying in input non-number values if they are provided in model\n}\n\nfunction isPartial(v: string) {\n return v === '.' || v === ',' || v === '-';\n}\nfunction stringToModel(v: string) {\n if (v === '') {\n return undefined;\n }\n if (isPartial(v)) {\n return 0;\n }\n let forParsing = v;\n forParsing = forParsing.replace(',', '.');\n forParsing = forParsing.replace('−', '-'); // minus, replacing for the case of input the whole copied value\n forParsing = forParsing.replace('–', '-'); // dash, replacing for the case of input the whole copied value\n forParsing = forParsing.replace('+', '');\n return parseFloat(forParsing);\n}\n\nconst innerTextValue = ref(modelToString(modelValue.value));\nconst innerNumberValue = computed(() => stringToModel(innerTextValue.value));\n\nwatch(() => modelValue.value, (outerValue) => { // update inner value if outer value is changed\n if (parseFloat(innerTextValue.value) !== outerValue) {\n innerTextValue.value = modelToString(outerValue);\n }\n});\n\nconst NUMBER_REGEX = /^[-−–+]?(\\d+)?[\\\\.,]?(\\d+)?$/; // parseFloat works without errors on strings with multiple dots, or letters in value\nconst inputValue = computed({\n get() {\n return innerTextValue.value;\n },\n set(nextValue: string) {\n const parsedValue = stringToModel(nextValue);\n // we allow to set empty value or valid numeric value, otherwise reset input value to previous valid\n if (parsedValue === undefined\n || (nextValue.match(NUMBER_REGEX) && !isNaN(parsedValue))\n ) {\n innerTextValue.value = nextValue;\n if (!props.updateOnEnterOrClickOutside && !isPartial(nextValue)) { // to avoid applying '-' or '.'\n applyChanges();\n }\n } else if (input.value) {\n input.value.value = innerTextValue.value;\n }\n },\n});\nconst focused = ref(false);\n\nfunction applyChanges() {\n if (innerTextValue.value === '') {\n modelValue.value = undefined;\n return;\n }\n modelValue.value = innerNumberValue.value;\n}\n\nconst errors = computed(() => {\n let ers: string[] = [];\n if (props.errorMessage) {\n ers.push(props.errorMessage);\n }\n const parsedValue = innerNumberValue.value;\n if (parsedValue !== undefined && isNaN(parsedValue)) {\n ers.push('Value is not a number');\n } else if (props.validate && parsedValue !== undefined) {\n const error = props.validate(parsedValue);\n if (error) {\n ers.push(error);\n }\n } else {\n if (props.minValue !== undefined && parsedValue !== undefined && parsedValue < props.minValue) {\n ers.push(`Value must be higher than ${props.minValue}`);\n }\n if (props.maxValue !== undefined && parsedValue !== undefined && parsedValue > props.maxValue) {\n ers.push(`Value must be less than ${props.maxValue}`);\n }\n }\n\n ers = [...ers];\n\n return ers.join(' ');\n});\n\nconst isIncrementDisabled = computed(() => {\n const parsedValue = innerNumberValue.value;\n if (props.maxValue !== undefined && parsedValue !== undefined) {\n return parsedValue >= props.maxValue;\n }\n return false;\n});\n\nconst isDecrementDisabled = computed(() => {\n const parsedValue = innerNumberValue.value;\n if (props.minValue !== undefined && parsedValue !== undefined) {\n return parsedValue <= props.minValue;\n }\n return false;\n});\n\nfunction increment() {\n const parsedValue = innerNumberValue.value;\n if (!isIncrementDisabled.value) {\n let nV;\n if (parsedValue === undefined) {\n nV = props.minValue ? props.minValue : 0;\n } else {\n nV = (parsedValue || 0) + props.step;\n }\n modelValue.value = props.maxValue !== undefined ? Math.min(props.maxValue, nV) : nV;\n }\n}\n\nfunction decrement() {\n const parsedValue = innerNumberValue.value;\n if (!isDecrementDisabled.value) {\n let nV;\n if (parsedValue === undefined) {\n nV = 0;\n } else {\n nV = +(parsedValue || 0) - props.step;\n }\n modelValue.value = props.minValue !== undefined ? Math.max(props.minValue, nV) : nV;\n }\n}\n\nfunction handleKeyPress(e: { code: string; preventDefault(): void }) {\n if (props.updateOnEnterOrClickOutside) {\n if (e.code === 'Escape') {\n innerTextValue.value = modelToString(modelValue.value);\n input.value?.blur();\n }\n if (e.code === 'Enter') {\n input.value?.blur();\n }\n }\n\n if (e.code === 'Enter') {\n innerTextValue.value = String(modelValue.value); // to make .1 => 0.1, 10.00 => 10, remove leading zeros etc\n }\n\n if (['ArrowDown', 'ArrowUp'].includes(e.code)) {\n e.preventDefault();\n }\n if (props.useIncrementButtons && e.code === 'ArrowUp') {\n increment();\n }\n if (props.useIncrementButtons && e.code === 'ArrowDown') {\n decrement();\n }\n}\n\n// https://stackoverflow.com/questions/880512/prevent-text-selection-after-double-click#:~:text=If%20you%20encounter%20a%20situation,none%3B%20to%20the%20summary%20element.\n// this prevents selecting of more than input content in some cases,\n// but also disable selecting input content by double-click (useful feature)\nconst onMousedown = (ev: MouseEvent) => {\n if (ev.detail > 1) {\n ev.preventDefault();\n }\n};\n</script>\n\n<template>\n <div\n ref=\"root\"\n :class=\"{ error: !!errors.trim(), disabled: disabled }\"\n class=\"mi-number-field d-flex-column\"\n @keydown=\"handleKeyPress($event)\"\n >\n <div class=\"mi-number-field__main-wrapper d-flex\">\n <DoubleContour class=\"mi-number-field__contour\"/>\n <div\n class=\"mi-number-field__wrapper flex-grow d-flex flex-align-center\"\n :class=\"{withoutArrows: !useIncrementButtons}\"\n >\n <label v-if=\"label\" class=\"text-description\">\n {{ label }}\n <PlTooltip v-if=\"slots.tooltip\" class=\"info\" position=\"top\">\n <template #tooltip>\n <slot name=\"tooltip\"/>\n </template>\n </PlTooltip>\n </label>\n <input\n ref=\"input\"\n v-model=\"inputValue\"\n :disabled=\"disabled\"\n :placeholder=\"placeholder\"\n class=\"text-s flex-grow\"\n @focusin=\"focused = true\"\n @focusout=\"focused = false; applyChanges()\"\n />\n </div>\n <div v-if=\"useIncrementButtons\" class=\"mi-number-field__icons d-flex-column\" @mousedown=\"onMousedown\">\n <div\n :class=\"{ disabled: isIncrementDisabled }\"\n class=\"mi-number-field__icon d-flex flex-justify-center uc-pointer flex-grow flex-align-center\"\n @click=\"increment\"\n >\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M8 4.93933L13.5303 10.4697L12.4697 11.5303L8 7.06065L3.53033 11.5303L2.46967 10.4697L8 4.93933Z\"\n fill=\"#110529\"\n />\n </svg>\n </div>\n <div\n :class=\"{ disabled: isDecrementDisabled }\"\n class=\"mi-number-field__icon d-flex flex-justify-center uc-pointer flex-grow flex-align-center\"\n @click=\"decrement\"\n >\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M2.46967 6.53033L3.53033 5.46967L8 9.93934L12.4697 5.46967L13.5303 6.53033L8 12.0607L2.46967 6.53033Z\"\n fill=\"#110529\"\n />\n </svg>\n </div>\n </div>\n </div>\n <div v-if=\"errors.trim()\" class=\"mi-number-field__hint text-description\">\n {{ errors }}\n </div>\n </div>\n</template>\n","<script lang=\"ts\" setup>\nimport './pl-chip.scss';\nimport { onMounted, ref } from 'vue';\nimport { PlTooltip } from '@/components/PlTooltip';\n\ndefineEmits(['close']);\n\ndefineProps<{\n closeable?: boolean;\n small?: boolean;\n}>();\n\nconst chip = ref<HTMLElement>();\nconst canShowTooltip = ref(false);\n\nonMounted(() => {\n if (chip.value) {\n canShowTooltip.value = chip.value?.clientWidth >= 256;\n }\n});\n</script>\n\n<template>\n <PlTooltip position=\"top\" class=\"pl-chip-tooltip\" :delay=\"500\">\n <template v-if=\"canShowTooltip\" #tooltip>\n <slot />\n </template>\n <div ref=\"chip\" class=\"pl-chip\" :class=\"{ small }\">\n <div class=\"pl-chip__text\">\n <slot />\n </div>\n <div v-if=\"closeable\" tabindex=\"0\" class=\"pl-chip__close\" @keydown.enter=\"$emit('close')\" @click.stop=\"$emit('close')\">\n <div class=\"pl-chip__close--icon\" />\n </div>\n </div>\n </PlTooltip>\n</template>\n","<script lang=\"ts\">\n/**\n * A component for selecting multiple values from a list of options\n */\nexport default {\n name: 'PlDropdownMulti',\n};\n</script>\n\n<script lang=\"ts\" setup generic=\"M = unknown\">\nimport './pl-dropdown-multi.scss';\nimport { computed, reactive, ref, unref, useSlots, useTemplateRef, watch, watchPostEffect } from 'vue';\nimport { tap } from '@/helpers/functions';\nimport { PlTooltip } from '@/components/PlTooltip';\nimport { PlChip } from '@/components/PlChip';\nimport DoubleContour from '@/utils/DoubleContour.vue';\nimport { useLabelNotch } from '@/utils/useLabelNotch';\nimport type { ListOption } from '@/types';\nimport DropdownListItem from '@/components/DropdownListItem.vue';\nimport { deepEqual, deepIncludes } from '@/helpers/objects';\nimport { normalizeListOptions } from '@/helpers/utils';\nimport DropdownOverlay from '@/utils/DropdownOverlay/DropdownOverlay.vue';\nimport { PlMaskIcon24 } from '../PlMaskIcon24';\n\nconst emit = defineEmits<{\n (e: 'update:modelValue', v: M[]): void;\n}>();\n\nconst emitModel = (v: M[]) => emit('update:modelValue', v);\n\nconst slots = useSlots();\n\nconst props = withDefaults(\n defineProps<{\n /**\n * The current selected values.\n */\n modelValue: M[];\n /**\n * The label text for the dropdown field (optional)\n */\n label?: string;\n /**\n * List of available options for the dropdown\n */\n options?: Readonly<ListOption<M>[]>;\n /**\n * A helper text displayed below the dropdown when there are no errors (optional).\n */\n helper?: string;\n /**\n * Error message displayed below the dropdown (optional)\n */\n error?: string;\n /**\n * Placeholder text shown when no value is selected.\n */\n placeholder?: string;\n /**\n * If `true`, the dropdown component is marked as required.\n */\n required?: boolean;\n /**\n * If `true`, the dropdown component is disabled and cannot be interacted with.\n */\n disabled?: boolean;\n }>(),\n {\n modelValue: () => [],\n label: undefined,\n helper: undefined,\n error: undefined,\n placeholder: '...',\n required: false,\n disabled: false,\n options: undefined,\n },\n);\n\nconst rootRef = ref<HTMLElement | undefined>();\nconst input = ref<HTMLInputElement | undefined>();\n\nconst overlay = useTemplateRef('overlay');\n\nconst data = reactive({\n search: '',\n activeOption: -1,\n open: false,\n optionsHeight: 0,\n});\n\nconst selectedValuesRef = computed(() => (Array.isArray(props.modelValue) ? props.modelValue : []));\n\nconst placeholderRef = computed(() => {\n if (data.open && props.modelValue.length > 0) {\n return props.placeholder;\n }\n\n return props.modelValue.length > 0 ? '' : props.placeholder;\n});\n\nconst normalizedOptionsRef = computed(() => normalizeListOptions(props.options ?? []));\n\nconst selectedOptionsRef = computed(() => {\n return selectedValuesRef.value.map((v) => normalizedOptionsRef.value.find((opt) => deepEqual(opt.value, v))).filter((v) => v !== undefined);\n});\n\nconst filteredOptionsRef = computed(() => {\n const selectedValues = unref(selectedValuesRef);\n\n const options = unref(normalizedOptionsRef);\n\n return (\n data.search\n ? options.filter((opt) => {\n const search = data.search.toLowerCase();\n\n if (opt.label.toLowerCase().includes(search)) {\n return true;\n }\n\n if (typeof opt.value === 'string') {\n return opt.value.toLowerCase().includes(search);\n }\n\n return opt.value === data.search;\n })\n : [...options]\n ).map((opt) => ({\n ...opt,\n selected: deepIncludes(selectedValues, opt.value),\n }));\n});\n\nconst isLoadingOptions = computed(() => {\n return props.options === undefined;\n});\n\nconst isDisabled = computed(() => {\n if (isLoadingOptions.value) {\n return true;\n }\n\n return props.disabled;\n});\n\nconst tabindex = computed(() => (isDisabled.value ? undefined : '0'));\n\nconst updateActiveOption = () => {\n data.activeOption = tap(\n filteredOptionsRef.value.findIndex((o) => deepEqual(o.value, props.modelValue)),\n (v) => (v < 0 ? 0 : v),\n );\n};\n\nconst selectOption = (v: M) => {\n const values = unref(selectedValuesRef);\n emitModel(deepIncludes(values, v) ? values.filter((it) => !deepEqual(it, v)) : [...values, v]);\n data.search = '';\n rootRef?.value?.focus();\n};\n\nconst unselectOption = (d: M) => emitModel(unref(selectedValuesRef).filter((v) => !deepEqual(v, d)));\n\nconst setFocusOnInput = () => input.value?.focus();\n\nconst toggleModel = () => {\n data.open = !data.open;\n if (!data.open) {\n data.search = '';\n }\n};\n\nconst onFocusOut = (event: FocusEvent) => {\n const relatedTarget = event.relatedTarget as Node | null;\n\n if (!rootRef.value?.contains(relatedTarget) && !overlay.value?.listRef?.contains(relatedTarget)) {\n data.search = '';\n data.open = false;\n }\n};\n\nconst handleKeydown = (e: { code: string; preventDefault(): void }) => {\n const { open, activeOption } = data;\n\n if (!open) {\n if (e.code === 'Enter') {\n data.open = true;\n }\n return;\n }\n\n if (e.code === 'Escape') {\n data.open = false;\n rootRef.value?.focus();\n }\n\n const filteredOptions = unref(filteredOptionsRef);\n\n const { length } = filteredOptions;\n\n if (!length) {\n return;\n }\n\n if (['ArrowDown', 'ArrowUp', 'Enter'].includes(e.code)) {\n e.preventDefault();\n }\n\n if (e.code === 'Enter') {\n selectOption(filteredOptions[activeOption].value);\n }\n\n const d = e.code === 'ArrowDown' ? 1 : e.code === 'ArrowUp' ? -1 : 0;\n\n data.activeOption = Math.abs(activeOption + d + length) % length;\n\n requestAnimationFrame(() => overlay.value?.scrollIntoActive());\n};\n\nuseLabelNotch(rootRef);\n\nwatch(\n () => props.modelValue,\n () => updateActiveOption(),\n { immediate: true },\n);\n\nwatchPostEffect(() => {\n // eslint-disable-next-line @typescript-eslint/no-unused-expressions\n data.search;\n\n if (data.open) {\n overlay.value?.scrollIntoActive();\n }\n});\n</script>\n\n<template>\n <div class=\"pl-dropdown-multi__envelope\" @click=\"setFocusOnInput\">\n <div\n ref=\"rootRef\"\n :tabindex=\"tabindex\"\n class=\"pl-dropdown-multi\"\n :class=\"{ open: data.open, error, disabled: isDisabled }\"\n @keydown=\"handleKeydown\"\n @focusout=\"onFocusOut\"\n >\n <div class=\"pl-dropdown-multi__container\">\n <div class=\"pl-dropdown-multi__field\">\n <input\n ref=\"input\"\n v-model=\"data.search\"\n type=\"text\"\n tabindex=\"-1\"\n :disabled=\"isDisabled\"\n :placeholder=\"placeholderRef\"\n spellcheck=\"false\"\n autocomplete=\"chrome-off\"\n @focus=\"data.open = true\"\n />\n <div v-if=\"!data.open\" class=\"chips-container\">\n <PlChip v-for=\"(opt, i) in selectedOptionsRef\" :key=\"i\" closeable small @click.stop=\"data.open = true\" @close=\"unselectOption(opt.value)\">\n {{ opt.label || opt.value }}\n </PlChip>\n </div>\n\n <div class=\"pl-dropdown-multi__controls\">\n <PlMaskIcon24 v-if=\"isLoadingOptions\" name=\"loading\" />\n <slot name=\"append\" />\n <div class=\"pl-dropdown-multi__arrow-wrapper\" @click.stop=\"toggleModel\">\n <div class=\"arrow-icon arrow-icon-default\" />\n </div>\n </div>\n </div>\n <label v-if=\"label\">\n <i v-if=\"required\" class=\"required-icon\" />\n <span>{{ label }}</span>\n <PlTooltip v-if=\"slots.tooltip\" class=\"info\" position=\"top\">\n <template #tooltip>\n <slot name=\"tooltip\" />\n </template>\n </PlTooltip>\n </label>\n <DropdownOverlay\n v-if=\"data.open\"\n ref=\"overlay\"\n :root=\"rootRef\"\n class=\"pl-dropdown-multi__options\"\n :gap=\"5\"\n tabindex=\"-1\"\n @focusout=\"onFocusOut\"\n >\n <div class=\"pl-dropdown-multi__open-chips-container\">\n <PlChip v-for=\"(opt, i) in selectedOptionsRef\" :key=\"i\" closeable small @close=\"unselectOption(opt.value)\">\n {{ opt.label || opt.value }}\n </PlChip>\n </div>\n <DropdownListItem\n v-for=\"(item, index) in filteredOptionsRef\"\n :key=\"index\"\n :option=\"item\"\n :text-item=\"'text'\"\n :is-selected=\"item.selected\"\n :is-hovered=\"data.activeOption == index\"\n size=\"medium\"\n use-checkbox\n @click.stop=\"selectOption(item.value)\"\n />\n <div v-if=\"!filteredOptionsRef.length\" class=\"nothing-found\">Nothing found</div>\n </DropdownOverlay>\n <DoubleContour class=\"pl-dropdown-multi__contour\" />\n </div>\n </div>\n <div v-if=\"error\" class=\"pl-dropdown-multi__error\">{{ error }}</div>\n <div v-else-if=\"helper\" class=\"pl-dropdown-multi__helper\">{{ helper }}</div>\n </div>\n</template>\n","<script lang=\"ts\" setup>\nimport type { ModelRef, RefOption } from '@/types';\nimport PlDropdownMulti from '../PlDropdownMulti/PlDropdownMulti.vue';\nimport { computed, useSlots } from 'vue';\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nconst slots: any = useSlots();\n\ndefineEmits<{\n /**\n * Emitted when the model value is updated.\n */\n (e: 'update:modelValue', value: ModelRef[] | undefined): void;\n}>();\n\nconst props = withDefaults(\n defineProps<{\n /**\n * The current selected values.\n */\n modelValue: ModelRef[] | undefined;\n /**\n * The label text for the dropdown field (optional)\n */\n label?: string;\n /**\n * List of available options for the dropdown\n */\n options?: Readonly<RefOption[]>;\n /**\n * A helper text displayed below the dropdown when there are no errors (optional).\n */\n helper?: string;\n /**\n * Error message displayed below the dropdown (optional)\n */\n error?: string;\n /**\n * Placeholder text shown when no value is selected.\n */\n placeholder?: string;\n /**\n * If `true`, the dropdown component is marked as required.\n */\n required?: boolean;\n /**\n * If `true`, the dropdown component is disabled and cannot be interacted with.\n */\n disabled?: boolean;\n }>(),\n {\n modelValue: () => [],\n label: undefined,\n helper: undefined,\n error: undefined,\n placeholder: '...',\n required: false,\n disabled: false,\n options: undefined,\n },\n);\n\nconst options = computed(() =>\n props.options?.map((opt) => ({\n label: opt.label,\n value: opt.ref,\n })),\n);\n</script>\n\n<template>\n <PlDropdownMulti\n v-bind=\"props\"\n :options=\"options\"\n @update:model-value=\"$emit('update:modelValue', $event)\"\n >\n <template v-if=\"slots.tooltip\" #tooltip>\n <slot name=\"tooltip\" />\n </template>\n </PlDropdownMulti>\n</template>\n","<script lang=\"ts\" setup>\nimport './pl-checkbox-base.scss';\n\ndefineEmits(['update:modelValue']);\n\nconst props = defineProps<{\n modelValue: boolean;\n disabled?: boolean;\n indeterminate?: boolean;\n}>();\n</script>\n\n<template>\n <div\n tabindex=\"0\"\n class=\"pl-checkbox-base\"\n :class=\"{\n ...(props.indeterminate\n ? { indeterminate: true }\n : { checked: props.modelValue }),\n disabled,\n }\"\n @click=\"$emit('update:modelValue', !modelValue)\"\n @keydown.space.prevent=\"$emit('update:modelValue', !modelValue)\"\n />\n</template>\n","<script lang=\"ts\">\n/** Component for boolean model manipulation */\nexport default {\n name: 'PlCheckbox',\n};\n</script>\n\n<script lang=\"ts\" setup>\nimport { useSlots } from 'vue';\nimport './pl-checkbox.scss';\nimport PlCheckboxBase from './PlCheckboxBase.vue';\n\ndefineEmits<{\n /**\n * Emitted when the model value is updated.\n */\n (e: 'update:modelValue', value: boolean): void;\n}>();\n\nconst props = defineProps<{\n /**\n * The current boolean value of the checkbox.\n */\n modelValue: boolean;\n /**\n * If `true`, the checkbox is disabled and cannot be interacted with.\n */\n disabled?: boolean;\n /**\n * If `true`, the checkbox is indeterminate (doesn't affect the model value).\n */\n indeterminate?: boolean;\n}>();\n\nconst slots = useSlots();\n</script>\n\n<template>\n <div v-if=\"slots['default']\" class=\"pl-checkbox\" :class=\"{ disabled }\">\n <PlCheckboxBase v-bind=\"props\" @update:model-value=\"$emit('update:modelValue', $event)\" />\n <label @click=\"$emit('update:modelValue', !$props.modelValue)\"><slot /></label>\n </div>\n <PlCheckboxBase v-else v-bind=\"props\" @update:model-value=\"$emit('update:modelValue', $event)\" />\n</template>\n","<script lang=\"ts\">\n/**\n * Component for selecting multiple values from a list of options\n */\nexport default {\n name: 'PlCheckboxGroup',\n};\n</script>\n\n<script lang=\"ts\" setup generic=\"M = unknown\">\nimport './pl-checkbox-group.scss';\nimport type { SimpleOption } from '@/types';\nimport PlCheckboxBase from '@/components/PlCheckbox/PlCheckboxBase.vue';\nimport { PlTooltip } from '../PlTooltip';\nimport { useSlots } from 'vue';\n\nconst slots = useSlots();\n\nconst emit = defineEmits<{\n (e: 'update:modelValue', v: M[]): void;\n}>();\n\nconst props = defineProps<{\n /**\n * The current selected values.\n */\n modelValue: M[];\n /**\n * The label text for the component (optional)\n */\n label?: string;\n /**\n * List of available options for the component\n */\n options: Readonly<SimpleOption<M>[]>;\n /**\n * If `true`, the component is disabled and cannot be interacted with.\n */\n disabled?: boolean;\n}>();\n\nconst hasValue = (value: M) => {\n return props.modelValue.includes(value);\n};\n\nconst updateModel = (value: M) => {\n const values = props.modelValue ?? [];\n emit('update:modelValue', hasValue(value) ? values.filter((v) => v !== value) : [...values, value]);\n};\n</script>\n\n<template>\n <div class=\"pl-checkbox-group\" :class=\"{ disabled }\">\n <label v-if=\"label\">\n <span>{{ label }}</span>\n <PlTooltip v-if=\"slots.tooltip\" class=\"info\" position=\"top\">\n <template #tooltip>\n <slot name=\"tooltip\" />\n </template>\n </PlTooltip>\n </label>\n <div v-for=\"(opt, i) in options.map((it) => ({ label: 'label' in it ? it.label : it.text, value: it.value }))\" :key=\"i\">\n <PlCheckboxBase :disabled=\"disabled\" :label=\"opt.label\" :model-value=\"hasValue(opt.value)\" @update:model-value=\"() => updateModel(opt.value)\" />\n <label @click.stop=\"() => updateModel(opt.value)\">{{ opt.label }}</label>\n </div>\n </div>\n</template>\n","<template>\n <div :class=\"$style.component\">\n <div />\n </div>\n</template>\n\n<style lang=\"scss\" module>\n@use '@/assets/mixins' as *;\n\n.component {\n display: flex;\n place-content: center;\n place-items: center;\n width: 40px;\n height: 40px;\n cursor: pointer;\n border-radius: 12px; // slide-modal 6px\n &:hover {\n background-color: var(--btn-sec-hover-grey);\n transition: all 0.1s ease-in-out;\n }\n > div {\n background-color: var(--ic-01);\n @include mask(url(@/assets/images/24_close.svg), 24px);\n }\n}\n</style>\n","<script lang=\"ts\">\nexport default {\n inheritAttrs: false,\n};\n</script>\n\n<script lang=\"ts\" setup>\nimport { useEventListener } from '@/composition/useEventListener';\nimport './pl-dialog-modal.scss';\nimport { computed, ref, useSlots } from 'vue';\nimport PlCloseModalBtn from '@/utils/PlCloseModalBtn.vue';\nimport type { Size } from '@/types';\n\nconst slots = useSlots();\n\nconst emit = defineEmits(['update:modelValue']);\n\nconst props = withDefaults(\n defineProps<{\n /**\n * Determines whether the modal is open\n */\n modelValue: boolean;\n /**\n * css width (default value is `448px`)\n */\n width?: string;\n /**\n * css height (default value is `auto`)\n */\n height?: string;\n /**\n * css min-height (default value is `auto`)\n */\n minHeight?: string;\n /**\n * css min-height (default value is `auto` but recommended is 440px)\n */\n maxHeight?: string;\n /**\n * Enables a button to close the modal (default: `true`)\n */\n closable?: boolean;\n /**\n * If `true` content gutters are removed\n */\n noContentGutters?: boolean;\n /**\n * If `true` top content gutter is removed\n */\n noTopContentGutter?: boolean;\n /**\n * Actions slot has a top border (default: `true`)\n */\n actionsHasTopBorder?: boolean;\n /**\n * If `true`, the modal window closes when clicking outside the modal area (default: `true`)\n */\n closeOnOutsideClick?: boolean;\n /**\n * Predefined size (standard small | medium | large). Takes precedence over (min|max)(width|height) properties. Not defined by default.\n */\n size?: Size | undefined;\n }>(),\n {\n width: '448px',\n minHeight: 'auto',\n maxHeight: 'auto',\n height: 'auto',\n closable: true,\n noContentGutters: false,\n actionsHasTopBorder: true,\n size: undefined,\n },\n);\n\nconst modal = ref<HTMLElement>();\n\nconst style = computed(() => {\n const { width, height, minHeight, maxHeight, size } = props;\n\n if (size === 'small') {\n return {\n width: '448px',\n height: '440px',\n minHeight: 'auto',\n maxHeight: 'auto',\n };\n }\n\n if (size === 'medium') {\n return {\n width: '720px',\n height: '720px',\n minHeight: 'auto',\n maxHeight: 'auto',\n };\n }\n\n if (size === 'large') {\n return {\n width: '1080px',\n height: '880px',\n minHeight: 'auto',\n maxHeight: 'auto',\n };\n }\n\n return { width, height, minHeight, maxHeight };\n});\n\nfunction onClickShadow(ev: Event) {\n if (modal.value && props.closeOnOutsideClick && document.contains(ev.target as Node) && !modal.value.contains(ev.target as Node)) {\n emit('update:modelValue', false);\n }\n}\n\nuseEventListener(document.body, 'keyup', (ev) => {\n if (props.modelValue && ev.code === 'Escape') {\n emit('update:modelValue', false);\n }\n});\n</script>\n\n<template>\n <Teleport to=\"body\">\n <Transition name=\"dialog\">\n <div v-if=\"modelValue\" class=\"pl-dialog-modal__shadow\" @click=\"onClickShadow\">\n <div\n v-bind=\"$attrs\"\n ref=\"modal\"\n class=\"pl-dialog-modal\"\n :class=\"{ 'has-title': slots.title, 'has-content': slots.default }\"\n :style=\"style\"\n >\n <PlCloseModalBtn v-if=\"closable\" class=\"close-modal-btn\" @click.stop=\"emit('update:modelValue', false)\" />\n <div v-if=\"slots.title\" class=\"pl-dialog-modal__title\">\n <slot name=\"title\" />\n </div>\n <div class=\"pl-dialog-modal__content\" :class=\"{ 'no-content-gutters': noContentGutters, 'no-top-content-gutter': noTopContentGutter }\">\n <slot />\n </div>\n <div v-if=\"slots.actions\" class=\"pl-dialog-modal__actions\" :class=\"{ 'has-top-border': actionsHasTopBorder }\">\n <slot name=\"actions\" />\n </div>\n </div>\n </div>\n </Transition>\n </Teleport>\n</template>\n","<script lang=\"ts\" setup>\nfunction onAfterEnter() {\n window.dispatchEvent(new CustomEvent('adjust'));\n}\n\nfunction onAfterLeave() {\n window.dispatchEvent(new CustomEvent('adjust'));\n}\n</script>\n\n<template>\n <Transition name=\"slide-panel\" @after-enter=\"onAfterEnter\" @after-leave=\"onAfterLeave\">\n <slot />\n </Transition>\n</template>\n","<script lang=\"ts\">\nexport default {\n name: 'PlSlideModal',\n inheritAttrs: false,\n};\n</script>\n\n<script lang=\"ts\" setup>\nimport './pl-slide-modal.scss';\nimport { ref, useAttrs, useSlots } from 'vue';\nimport TransitionSlidePanel from '@/components/TransitionSlidePanel.vue';\nimport { useClickOutside, useEventListener } from '@/index';\n\nconst slots = useSlots(); // title & actions\n\nconst emit = defineEmits<{\n (e: 'update:modelValue', value: boolean): void;\n}>();\n\nconst props = withDefaults(\n defineProps<{\n /**\n * Determines whether the modal is open\n */\n modelValue: boolean;\n /**\n * Css `width` value (px, %, em etc)\n */\n width?: string;\n /**\n * If `true`, then show shadow (default value `false`)\n */\n shadow?: boolean;\n /**\n * If `true`, the modal window closes when clicking outside the modal area (default: `true`)\n */\n closeOnOutsideClick?: boolean;\n }>(),\n {\n modelValue: false,\n width: '368px',\n shadow: false,\n closeOnOutsideClick: true,\n },\n);\n\nconst modal = ref();\n\nconst $attrs = useAttrs();\n\nuseClickOutside(modal, () => {\n if (props.modelValue && props.closeOnOutsideClick) {\n emit('update:modelValue', false);\n }\n});\n\nuseEventListener(document, 'keydown', (evt: KeyboardEvent) => {\n if (evt.key === 'Escape') {\n emit('update:modelValue', false);\n }\n});\n</script>\n\n<template>\n <Teleport to=\"body\">\n <TransitionSlidePanel>\n <div\n v-if=\"modelValue\"\n ref=\"modal\"\n :style=\"{ width }\"\n v-bind=\"$attrs\"\n class=\"pl-slide-modal\"\n :class=\"{ 'has-title': slots.title, 'has-actions': slots.actions }\"\n @keyup.esc=\"emit('update:modelValue', false)\"\n >\n <div class=\"close-dialog-btn\" @click=\"emit('update:modelValue', false)\" />\n <div v-if=\"slots.title\" class=\"pl-slide-modal__title\">\n <span class=\"pl-slide-modal__title-content\">\n <slot name=\"title\" />\n </span>\n </div>\n <div class=\"pl-slide-modal__content\">\n <slot />\n </div>\n <div v-if=\"slots.actions\" class=\"pl-slide-modal__actions\">\n <slot name=\"actions\" />\n </div>\n </div>\n </TransitionSlidePanel>\n <div v-if=\"modelValue && shadow\" class=\"pl-slide-modal__shadow\" @keyup.esc=\"emit('update:modelValue', false)\" />\n </Teleport>\n</template>\n","<script lang=\"ts\">\n/**\n * Component for manipulating a boolean value\n */\nexport default {\n name: 'PlToggleSwitch',\n};\n</script>\n\n<script lang=\"ts\" setup>\nimport './pl-toggle-switch.scss';\n\ndefineEmits<{\n /**\n * Emitted when the model value is updated\n *\n * @param value - The new boolean value of the model\n */\n (e: 'update:modelValue', value: boolean): void;\n}>();\n\ndefineProps<{\n /**\n * The label text for the component (optional)\n */\n label?: string;\n /**\n * The current boolean value of the component (represents 'on' | 'off' states generally).\n */\n modelValue?: boolean;\n}>();\n</script>\n\n<template>\n <div\n tabindex=\"0\"\n class=\"ui-toggle-switch\"\n :class=\"{ active: modelValue }\"\n @click=\"$emit('update:modelValue', !modelValue)\"\n @keydown.enter=\"$emit('update:modelValue', !modelValue)\"\n >\n <div class=\"ui-toggle-switch__body\">\n <div class=\"ui-toggle-switch__handle\" />\n </div>\n <span v-if=\"label\" class=\"label\">{{ label }}</span>\n </div>\n</template>\n","import { shallowRef, watchEffect, readonly, ref, watch, customRef, getCurrentScope, onScopeDispose, effectScope, getCurrentInstance, hasInjectionContext, inject, provide, isRef, unref, toValue as toValue$1, computed, reactive, toRefs as toRefs$1, toRef as toRef$1, onBeforeMount, nextTick, onBeforeUnmount, onMounted, onUnmounted, isReactive } from 'vue';\n\nfunction computedEager(fn, options) {\n var _a;\n const result = shallowRef();\n watchEffect(() => {\n result.value = fn();\n }, {\n ...options,\n flush: (_a = options == null ? undefined : options.flush) != null ? _a : \"sync\"\n });\n return readonly(result);\n}\n\nfunction computedWithControl(source, fn) {\n let v = undefined;\n let track;\n let trigger;\n const dirty = ref(true);\n const update = () => {\n dirty.value = true;\n trigger();\n };\n watch(source, update, { flush: \"sync\" });\n const get = typeof fn === \"function\" ? fn : fn.get;\n const set = typeof fn === \"function\" ? undefined : fn.set;\n const result = customRef((_track, _trigger) => {\n track = _track;\n trigger = _trigger;\n return {\n get() {\n if (dirty.value) {\n v = get(v);\n dirty.value = false;\n }\n track();\n return v;\n },\n set(v2) {\n set == null ? undefined : set(v2);\n }\n };\n });\n if (Object.isExtensible(result))\n result.trigger = update;\n return result;\n}\n\nfunction tryOnScopeDispose(fn) {\n if (getCurrentScope()) {\n onScopeDispose(fn);\n return true;\n }\n return false;\n}\n\nfunction createEventHook() {\n const fns = /* @__PURE__ */ new Set();\n const off = (fn) => {\n fns.delete(fn);\n };\n const clear = () => {\n fns.clear();\n };\n const on = (fn) => {\n fns.add(fn);\n const offFn = () => off(fn);\n tryOnScopeDispose(offFn);\n return {\n off: offFn\n };\n };\n const trigger = (...args) => {\n return Promise.all(Array.from(fns).map((fn) => fn(...args)));\n };\n return {\n on,\n off,\n trigger,\n clear\n };\n}\n\nfunction createGlobalState(stateFactory) {\n let initialized = false;\n let state;\n const scope = effectScope(true);\n return (...args) => {\n if (!initialized) {\n state = scope.run(() => stateFactory(...args));\n initialized = true;\n }\n return state;\n };\n}\n\nconst localProvidedStateMap = /* @__PURE__ */ new WeakMap();\n\nconst injectLocal = (...args) => {\n var _a;\n const key = args[0];\n const instance = (_a = getCurrentInstance()) == null ? undefined : _a.proxy;\n if (instance == null && !hasInjectionContext())\n throw new Error(\"injectLocal must be called in setup\");\n if (instance && localProvidedStateMap.has(instance) && key in localProvidedStateMap.get(instance))\n return localProvidedStateMap.get(instance)[key];\n return inject(...args);\n};\n\nconst provideLocal = (key, value) => {\n var _a;\n const instance = (_a = getCurrentInstance()) == null ? undefined : _a.proxy;\n if (instance == null)\n throw new Error(\"provideLocal must be called in setup\");\n if (!localProvidedStateMap.has(instance))\n localProvidedStateMap.set(instance, /* @__PURE__ */ Object.create(null));\n const localProvidedState = localProvidedStateMap.get(instance);\n localProvidedState[key] = value;\n provide(key, value);\n};\n\nfunction createInjectionState(composable, options) {\n const key = (options == null ? undefined : options.injectionKey) || Symbol(composable.name || \"InjectionState\");\n const defaultValue = options == null ? undefined : options.defaultValue;\n const useProvidingState = (...args) => {\n const state = composable(...args);\n provideLocal(key, state);\n return state;\n };\n const useInjectedState = () => injectLocal(key, defaultValue);\n return [useProvidingState, useInjectedState];\n}\n\nfunction createSharedComposable(composable) {\n let subscribers = 0;\n let state;\n let scope;\n const dispose = () => {\n subscribers -= 1;\n if (scope && subscribers <= 0) {\n scope.stop();\n state = undefined;\n scope = undefined;\n }\n };\n return (...args) => {\n subscribers += 1;\n if (!scope) {\n scope = effectScope(true);\n state = scope.run(() => composable(...args));\n }\n tryOnScopeDispose(dispose);\n return state;\n };\n}\n\nfunction extendRef(ref, extend, { enumerable = false, unwrap = true } = {}) {\n for (const [key, value] of Object.entries(extend)) {\n if (key === \"value\")\n continue;\n if (isRef(value) && unwrap) {\n Object.defineProperty(ref, key, {\n get() {\n return value.value;\n },\n set(v) {\n value.value = v;\n },\n enumerable\n });\n } else {\n Object.defineProperty(ref, key, { value, enumerable });\n }\n }\n return ref;\n}\n\nfunction get(obj, key) {\n if (key == null)\n return unref(obj);\n return unref(obj)[key];\n}\n\nfunction isDefined(v) {\n return unref(v) != null;\n}\n\nfunction makeDestructurable(obj, arr) {\n if (typeof Symbol !== \"undefined\") {\n const clone = { ...obj };\n Object.defineProperty(clone, Symbol.iterator, {\n enumerable: false,\n value() {\n let index = 0;\n return {\n next: () => ({\n value: arr[index++],\n done: index > arr.length\n })\n };\n }\n });\n return clone;\n } else {\n return Object.assign([...arr], obj);\n }\n}\n\nfunction reactify(fn, options) {\n const unrefFn = (options == null ? undefined : options.computedGetter) === false ? unref : toValue$1;\n return function(...args) {\n return computed(() => fn.apply(this, args.map((i) => unrefFn(i))));\n };\n}\n\nfunction reactifyObject(obj, optionsOrKeys = {}) {\n let keys = [];\n let options;\n if (Array.isArray(optionsOrKeys)) {\n keys = optionsOrKeys;\n } else {\n options = optionsOrKeys;\n const { includeOwnProperties = true } = optionsOrKeys;\n keys.push(...Object.keys(obj));\n if (includeOwnProperties)\n keys.push(...Object.getOwnPropertyNames(obj));\n }\n return Object.fromEntries(\n keys.map((key) => {\n const value = obj[key];\n return [\n key,\n typeof value === \"function\" ? reactify(value.bind(obj), options) : value\n ];\n })\n );\n}\n\nfunction toReactive(objectRef) {\n if (!isRef(objectRef))\n return reactive(objectRef);\n const proxy = new Proxy({}, {\n get(_, p, receiver) {\n return unref(Reflect.get(objectRef.value, p, receiver));\n },\n set(_, p, value) {\n if (isRef(objectRef.value[p]) && !isRef(value))\n objectRef.value[p].value = value;\n else\n objectRef.value[p] = value;\n return true;\n },\n deleteProperty(_, p) {\n return Reflect.deleteProperty(objectRef.value, p);\n },\n has(_, p) {\n return Reflect.has(objectRef.value, p);\n },\n ownKeys() {\n return Object.keys(objectRef.value);\n },\n getOwnPropertyDescriptor() {\n return {\n enumerable: true,\n configurable: true\n };\n }\n });\n return reactive(proxy);\n}\n\nfunction reactiveComputed(fn) {\n return toReactive(computed(fn));\n}\n\nfunction reactiveOmit(obj, ...keys) {\n const flatKeys = keys.flat();\n const predicate = flatKeys[0];\n return reactiveComputed(() => typeof predicate === \"function\" ? Object.fromEntries(Object.entries(toRefs$1(obj)).filter(([k, v]) => !predicate(toValue$1(v), k))) : Object.fromEntries(Object.entries(toRefs$1(obj)).filter((e) => !flatKeys.includes(e[0]))));\n}\n\nconst isClient = typeof window !== \"undefined\" && typeof document !== \"undefined\";\nconst isWorker = typeof WorkerGlobalScope !== \"undefined\" && globalThis instanceof WorkerGlobalScope;\nconst isDef = (val) => typeof val !== \"undefined\";\nconst notNullish = (val) => val != null;\nconst assert = (condition, ...infos) => {\n if (!condition)\n console.warn(...infos);\n};\nconst toString = Object.prototype.toString;\nconst isObject = (val) => toString.call(val) === \"[object Object]\";\nconst now = () => Date.now();\nconst timestamp = () => +Date.now();\nconst clamp = (n, min, max) => Math.min(max, Math.max(min, n));\nconst noop = () => {\n};\nconst rand = (min, max) => {\n min = Math.ceil(min);\n max = Math.floor(max);\n return Math.floor(Math.random() * (max - min + 1)) + min;\n};\nconst hasOwn = (val, key) => Object.prototype.hasOwnProperty.call(val, key);\nconst isIOS = /* @__PURE__ */ getIsIOS();\nfunction getIsIOS() {\n var _a, _b;\n return isClient && ((_a = window == null ? undefined : window.navigator) == null ? undefined : _a.userAgent) && (/iP(?:ad|hone|od)/.test(window.navigator.userAgent) || ((_b = window == null ? undefined : window.navigator) == null ? undefined : _b.maxTouchPoints) > 2 && /iPad|Macintosh/.test(window == null ? undefined : window.navigator.userAgent));\n}\n\nfunction createFilterWrapper(filter, fn) {\n function wrapper(...args) {\n return new Promise((resolve, reject) => {\n Promise.resolve(filter(() => fn.apply(this, args), { fn, thisArg: this, args })).then(resolve).catch(reject);\n });\n }\n return wrapper;\n}\nconst bypassFilter = (invoke) => {\n return invoke();\n};\nfunction debounceFilter(ms, options = {}) {\n let timer;\n let maxTimer;\n let lastRejector = noop;\n const _clearTimeout = (timer2) => {\n clearTimeout(timer2);\n lastRejector();\n lastRejector = noop;\n };\n const filter = (invoke) => {\n const duration = toValue$1(ms);\n const maxDuration = toValue$1(options.maxWait);\n if (timer)\n _clearTimeout(timer);\n if (duration <= 0 || maxDuration !== undefined && maxDuration <= 0) {\n if (maxTimer) {\n _clearTimeout(maxTimer);\n maxTimer = null;\n }\n return Promise.resolve(invoke());\n }\n return new Promise((resolve, reject) => {\n lastRejector = options.rejectOnCancel ? reject : resolve;\n if (maxDuration && !maxTimer) {\n maxTimer = setTimeout(() => {\n if (timer)\n _clearTimeout(timer);\n maxTimer = null;\n resolve(invoke());\n }, maxDuration);\n }\n timer = setTimeout(() => {\n if (maxTimer)\n _clearTimeout(maxTimer);\n maxTimer = null;\n resolve(invoke());\n }, duration);\n });\n };\n return filter;\n}\nfunction throttleFilter(...args) {\n let lastExec = 0;\n let timer;\n let isLeading = true;\n let lastRejector = noop;\n let lastValue;\n let ms;\n let trailing;\n let leading;\n let rejectOnCancel;\n if (!isRef(args[0]) && typeof args[0] === \"object\")\n ({ delay: ms, trailing = true, leading = true, rejectOnCancel = false } = args[0]);\n else\n [ms, trailing = true, leading = true, rejectOnCancel = false] = args;\n const clear = () => {\n if (timer) {\n clearTimeout(timer);\n timer = undefined;\n lastRejector();\n lastRejector = noop;\n }\n };\n const filter = (_invoke) => {\n const duration = toValue$1(ms);\n const elapsed = Date.now() - lastExec;\n const invoke = () => {\n return lastValue = _invoke();\n };\n clear();\n if (duration <= 0) {\n lastExec = Date.now();\n return invoke();\n }\n if (elapsed > duration && (leading || !isLeading)) {\n lastExec = Date.now();\n invoke();\n } else if (trailing) {\n lastValue = new Promise((resolve, reject) => {\n lastRejector = rejectOnCancel ? reject : resolve;\n timer = setTimeout(() => {\n lastExec = Date.now();\n isLeading = true;\n resolve(invoke());\n clear();\n }, Math.max(0, duration - elapsed));\n });\n }\n if (!leading && !timer)\n timer = setTimeout(() => isLeading = true, duration);\n isLeading = false;\n return lastValue;\n };\n return filter;\n}\nfunction pausableFilter(extendFilter = bypassFilter) {\n const isActive = ref(true);\n function pause() {\n isActive.value = false;\n }\n function resume() {\n isActive.value = true;\n }\n const eventFilter = (...args) => {\n if (isActive.value)\n extendFilter(...args);\n };\n return { isActive: readonly(isActive), pause, resume, eventFilter };\n}\n\nfunction cacheStringFunction(fn) {\n const cache = /* @__PURE__ */ Object.create(null);\n return (str) => {\n const hit = cache[str];\n return hit || (cache[str] = fn(str));\n };\n}\nconst hyphenateRE = /\\B([A-Z])/g;\nconst hyphenate = cacheStringFunction((str) => str.replace(hyphenateRE, \"-$1\").toLowerCase());\nconst camelizeRE = /-(\\w)/g;\nconst camelize = cacheStringFunction((str) => {\n return str.replace(camelizeRE, (_, c) => c ? c.toUpperCase() : \"\");\n});\n\nfunction promiseTimeout(ms, throwOnTimeout = false, reason = \"Timeout\") {\n return new Promise((resolve, reject) => {\n if (throwOnTimeout)\n setTimeout(() => reject(reason), ms);\n else\n setTimeout(resolve, ms);\n });\n}\nfunction identity(arg) {\n return arg;\n}\nfunction createSingletonPromise(fn) {\n let _promise;\n function wrapper() {\n if (!_promise)\n _promise = fn();\n return _promise;\n }\n wrapper.reset = async () => {\n const _prev = _promise;\n _promise = undefined;\n if (_prev)\n await _prev;\n };\n return wrapper;\n}\nfunction invoke(fn) {\n return fn();\n}\nfunction containsProp(obj, ...props) {\n return props.some((k) => k in obj);\n}\nfunction increaseWithUnit(target, delta) {\n var _a;\n if (typeof target === \"number\")\n return target + delta;\n const value = ((_a = target.match(/^-?\\d+\\.?\\d*/)) == null ? undefined : _a[0]) || \"\";\n const unit = target.slice(value.length);\n const result = Number.parseFloat(value) + delta;\n if (Number.isNaN(result))\n return target;\n return result + unit;\n}\nfunction pxValue(px) {\n return px.endsWith(\"rem\") ? Number.parseFloat(px) * 16 : Number.parseFloat(px);\n}\nfunction objectPick(obj, keys, omitUndefined = false) {\n return keys.reduce((n, k) => {\n if (k in obj) {\n if (!omitUndefined || obj[k] !== undefined)\n n[k] = obj[k];\n }\n return n;\n }, {});\n}\nfunction objectOmit(obj, keys, omitUndefined = false) {\n return Object.fromEntries(Object.entries(obj).filter(([key, value]) => {\n return (!omitUndefined || value !== undefined) && !keys.includes(key);\n }));\n}\nfunction objectEntries(obj) {\n return Object.entries(obj);\n}\nfunction getLifeCycleTarget(target) {\n return target || getCurrentInstance();\n}\nfunction toArray(value) {\n return Array.isArray(value) ? value : [value];\n}\n\nfunction toRef(...args) {\n if (args.length !== 1)\n return toRef$1(...args);\n const r = args[0];\n return typeof r === \"function\" ? readonly(customRef(() => ({ get: r, set: noop }))) : ref(r);\n}\nconst resolveRef = toRef;\n\nfunction reactivePick(obj, ...keys) {\n const flatKeys = keys.flat();\n const predicate = flatKeys[0];\n return reactiveComputed(() => typeof predicate === \"function\" ? Object.fromEntries(Object.entries(toRefs$1(obj)).filter(([k, v]) => predicate(toValue$1(v), k))) : Object.fromEntries(flatKeys.map((k) => [k, toRef(obj, k)])));\n}\n\nfunction refAutoReset(defaultValue, afterMs = 1e4) {\n return customRef((track, trigger) => {\n let value = toValue$1(defaultValue);\n let timer;\n const resetAfter = () => setTimeout(() => {\n value = toValue$1(defaultValue);\n trigger();\n }, toValue$1(afterMs));\n tryOnScopeDispose(() => {\n clearTimeout(timer);\n });\n return {\n get() {\n track();\n return value;\n },\n set(newValue) {\n value = newValue;\n trigger();\n clearTimeout(timer);\n timer = resetAfter();\n }\n };\n });\n}\n\nfunction useDebounceFn(fn, ms = 200, options = {}) {\n return createFilterWrapper(\n debounceFilter(ms, options),\n fn\n );\n}\n\nfunction refDebounced(value, ms = 200, options = {}) {\n const debounced = ref(value.value);\n const updater = useDebounceFn(() => {\n debounced.value = value.value;\n }, ms, options);\n watch(value, () => updater());\n return debounced;\n}\n\nfunction refDefault(source, defaultValue) {\n return computed({\n get() {\n var _a;\n return (_a = source.value) != null ? _a : defaultValue;\n },\n set(value) {\n source.value = value;\n }\n });\n}\n\nfunction useThrottleFn(fn, ms = 200, trailing = false, leading = true, rejectOnCancel = false) {\n return createFilterWrapper(\n throttleFilter(ms, trailing, leading, rejectOnCancel),\n fn\n );\n}\n\nfunction refThrottled(value, delay = 200, trailing = true, leading = true) {\n if (delay <= 0)\n return value;\n const throttled = ref(value.value);\n const updater = useThrottleFn(() => {\n throttled.value = value.value;\n }, delay, trailing, leading);\n watch(value, () => updater());\n return throttled;\n}\n\nfunction refWithControl(initial, options = {}) {\n let source = initial;\n let track;\n let trigger;\n const ref = customRef((_track, _trigger) => {\n track = _track;\n trigger = _trigger;\n return {\n get() {\n return get();\n },\n set(v) {\n set(v);\n }\n };\n });\n function get(tracking = true) {\n if (tracking)\n track();\n return source;\n }\n function set(value, triggering = true) {\n var _a, _b;\n if (value === source)\n return;\n const old = source;\n if (((_a = options.onBeforeChange) == null ? undefined : _a.call(options, value, old)) === false)\n return;\n source = value;\n (_b = options.onChanged) == null ? undefined : _b.call(options, value, old);\n if (triggering)\n trigger();\n }\n const untrackedGet = () => get(false);\n const silentSet = (v) => set(v, false);\n const peek = () => get(false);\n const lay = (v) => set(v, false);\n return extendRef(\n ref,\n {\n get,\n set,\n untrackedGet,\n silentSet,\n peek,\n lay\n },\n { enumerable: true }\n );\n}\nconst controlledRef = refWithControl;\n\nfunction set(...args) {\n if (args.length === 2) {\n const [ref, value] = args;\n ref.value = value;\n }\n if (args.length === 3) {\n const [target, key, value] = args;\n target[key] = value;\n }\n}\n\nfunction watchWithFilter(source, cb, options = {}) {\n const {\n eventFilter = bypassFilter,\n ...watchOptions\n } = options;\n return watch(\n source,\n createFilterWrapper(\n eventFilter,\n cb\n ),\n watchOptions\n );\n}\n\nfunction watchPausable(source, cb, options = {}) {\n const {\n eventFilter: filter,\n ...watchOptions\n } = options;\n const { eventFilter, pause, resume, isActive } = pausableFilter(filter);\n const stop = watchWithFilter(\n source,\n cb,\n {\n ...watchOptions,\n eventFilter\n }\n );\n return { stop, pause, resume, isActive };\n}\n\nfunction syncRef(left, right, ...[options]) {\n const {\n flush = \"sync\",\n deep = false,\n immediate = true,\n direction = \"both\",\n transform = {}\n } = options || {};\n const watchers = [];\n const transformLTR = \"ltr\" in transform && transform.ltr || ((v) => v);\n const transformRTL = \"rtl\" in transform && transform.rtl || ((v) => v);\n if (direction === \"both\" || direction === \"ltr\") {\n watchers.push(watchPausable(\n left,\n (newValue) => {\n watchers.forEach((w) => w.pause());\n right.value = transformLTR(newValue);\n watchers.forEach((w) => w.resume());\n },\n { flush, deep, immediate }\n ));\n }\n if (direction === \"both\" || direction === \"rtl\") {\n watchers.push(watchPausable(\n right,\n (newValue) => {\n watchers.forEach((w) => w.pause());\n left.value = transformRTL(newValue);\n watchers.forEach((w) => w.resume());\n },\n { flush, deep, immediate }\n ));\n }\n const stop = () => {\n watchers.forEach((w) => w.stop());\n };\n return stop;\n}\n\nfunction syncRefs(source, targets, options = {}) {\n const {\n flush = \"sync\",\n deep = false,\n immediate = true\n } = options;\n targets = toArray(targets);\n return watch(\n source,\n (newValue) => targets.forEach((target) => target.value = newValue),\n { flush, deep, immediate }\n );\n}\n\nfunction toRefs(objectRef, options = {}) {\n if (!isRef(objectRef))\n return toRefs$1(objectRef);\n const result = Array.isArray(objectRef.value) ? Array.from({ length: objectRef.value.length }) : {};\n for (const key in objectRef.value) {\n result[key] = customRef(() => ({\n get() {\n return objectRef.value[key];\n },\n set(v) {\n var _a;\n const replaceRef = (_a = toValue$1(options.replaceRef)) != null ? _a : true;\n if (replaceRef) {\n if (Array.isArray(objectRef.value)) {\n const copy = [...objectRef.value];\n copy[key] = v;\n objectRef.value = copy;\n } else {\n const newObject = { ...objectRef.value, [key]: v };\n Object.setPrototypeOf(newObject, Object.getPrototypeOf(objectRef.value));\n objectRef.value = newObject;\n }\n } else {\n objectRef.value[key] = v;\n }\n }\n }));\n }\n return result;\n}\n\nconst toValue = toValue$1;\nconst resolveUnref = toValue$1;\n\nfunction tryOnBeforeMount(fn, sync = true, target) {\n const instance = getLifeCycleTarget(target);\n if (instance)\n onBeforeMount(fn, target);\n else if (sync)\n fn();\n else\n nextTick(fn);\n}\n\nfunction tryOnBeforeUnmount(fn, target) {\n const instance = getLifeCycleTarget(target);\n if (instance)\n onBeforeUnmount(fn, target);\n}\n\nfunction tryOnMounted(fn, sync = true, target) {\n const instance = getLifeCycleTarget();\n if (instance)\n onMounted(fn, target);\n else if (sync)\n fn();\n else\n nextTick(fn);\n}\n\nfunction tryOnUnmounted(fn, target) {\n const instance = getLifeCycleTarget(target);\n if (instance)\n onUnmounted(fn, target);\n}\n\nfunction createUntil(r, isNot = false) {\n function toMatch(condition, { flush = \"sync\", deep = false, timeout, throwOnTimeout } = {}) {\n let stop = null;\n const watcher = new Promise((resolve) => {\n stop = watch(\n r,\n (v) => {\n if (condition(v) !== isNot) {\n if (stop)\n stop();\n else\n nextTick(() => stop == null ? undefined : stop());\n resolve(v);\n }\n },\n {\n flush,\n deep,\n immediate: true\n }\n );\n });\n const promises = [watcher];\n if (timeout != null) {\n promises.push(\n promiseTimeout(timeout, throwOnTimeout).then(() => toValue$1(r)).finally(() => stop == null ? undefined : stop())\n );\n }\n return Promise.race(promises);\n }\n function toBe(value, options) {\n if (!isRef(value))\n return toMatch((v) => v === value, options);\n const { flush = \"sync\", deep = false, timeout, throwOnTimeout } = options != null ? options : {};\n let stop = null;\n const watcher = new Promise((resolve) => {\n stop = watch(\n [r, value],\n ([v1, v2]) => {\n if (isNot !== (v1 === v2)) {\n if (stop)\n stop();\n else\n nextTick(() => stop == null ? undefined : stop());\n resolve(v1);\n }\n },\n {\n flush,\n deep,\n immediate: true\n }\n );\n });\n const promises = [watcher];\n if (timeout != null) {\n promises.push(\n promiseTimeout(timeout, throwOnTimeout).then(() => toValue$1(r)).finally(() => {\n stop == null ? undefined : stop();\n return toValue$1(r);\n })\n );\n }\n return Promise.race(promises);\n }\n function toBeTruthy(options) {\n return toMatch((v) => Boolean(v), options);\n }\n function toBeNull(options) {\n return toBe(null, options);\n }\n function toBeUndefined(options) {\n return toBe(undefined, options);\n }\n function toBeNaN(options) {\n return toMatch(Number.isNaN, options);\n }\n function toContains(value, options) {\n return toMatch((v) => {\n const array = Array.from(v);\n return array.includes(value) || array.includes(toValue$1(value));\n }, options);\n }\n function changed(options) {\n return changedTimes(1, options);\n }\n function changedTimes(n = 1, options) {\n let count = -1;\n return toMatch(() => {\n count += 1;\n return count >= n;\n }, options);\n }\n if (Array.isArray(toValue$1(r))) {\n const instance = {\n toMatch,\n toContains,\n changed,\n changedTimes,\n get not() {\n return createUntil(r, !isNot);\n }\n };\n return instance;\n } else {\n const instance = {\n toMatch,\n toBe,\n toBeTruthy,\n toBeNull,\n toBeNaN,\n toBeUndefined,\n changed,\n changedTimes,\n get not() {\n return createUntil(r, !isNot);\n }\n };\n return instance;\n }\n}\nfunction until(r) {\n return createUntil(r);\n}\n\nfunction defaultComparator(value, othVal) {\n return value === othVal;\n}\nfunction useArrayDifference(...args) {\n var _a, _b;\n const list = args[0];\n const values = args[1];\n let compareFn = (_a = args[2]) != null ? _a : defaultComparator;\n const {\n symmetric = false\n } = (_b = args[3]) != null ? _b : {};\n if (typeof compareFn === \"string\") {\n const key = compareFn;\n compareFn = (value, othVal) => value[key] === othVal[key];\n }\n const diff1 = computed(() => toValue$1(list).filter((x) => toValue$1(values).findIndex((y) => compareFn(x, y)) === -1));\n if (symmetric) {\n const diff2 = computed(() => toValue$1(values).filter((x) => toValue$1(list).findIndex((y) => compareFn(x, y)) === -1));\n return computed(() => symmetric ? [...toValue$1(diff1), ...toValue$1(diff2)] : toValue$1(diff1));\n } else {\n return diff1;\n }\n}\n\nfunction useArrayEvery(list, fn) {\n return computed(() => toValue$1(list).every((element, index, array) => fn(toValue$1(element), index, array)));\n}\n\nfunction useArrayFilter(list, fn) {\n return computed(() => toValue$1(list).map((i) => toValue$1(i)).filter(fn));\n}\n\nfunction useArrayFind(list, fn) {\n return computed(() => toValue$1(\n toValue$1(list).find((element, index, array) => fn(toValue$1(element), index, array))\n ));\n}\n\nfunction useArrayFindIndex(list, fn) {\n return computed(() => toValue$1(list).findIndex((element, index, array) => fn(toValue$1(element), index, array)));\n}\n\nfunction findLast(arr, cb) {\n let index = arr.length;\n while (index-- > 0) {\n if (cb(arr[index], index, arr))\n return arr[index];\n }\n return undefined;\n}\nfunction useArrayFindLast(list, fn) {\n return computed(() => toValue$1(\n !Array.prototype.findLast ? findLast(toValue$1(list), (element, index, array) => fn(toValue$1(element), index, array)) : toValue$1(list).findLast((element, index, array) => fn(toValue$1(element), index, array))\n ));\n}\n\nfunction isArrayIncludesOptions(obj) {\n return isObject(obj) && containsProp(obj, \"formIndex\", \"comparator\");\n}\nfunction useArrayIncludes(...args) {\n var _a;\n const list = args[0];\n const value = args[1];\n let comparator = args[2];\n let formIndex = 0;\n if (isArrayIncludesOptions(comparator)) {\n formIndex = (_a = comparator.fromIndex) != null ? _a : 0;\n comparator = comparator.comparator;\n }\n if (typeof comparator === \"string\") {\n const key = comparator;\n comparator = (element, value2) => element[key] === toValue$1(value2);\n }\n comparator = comparator != null ? comparator : (element, value2) => element === toValue$1(value2);\n return computed(() => toValue$1(list).slice(formIndex).some((element, index, array) => comparator(\n toValue$1(element),\n toValue$1(value),\n index,\n toValue$1(array)\n )));\n}\n\nfunction useArrayJoin(list, separator) {\n return computed(() => toValue$1(list).map((i) => toValue$1(i)).join(toValue$1(separator)));\n}\n\nfunction useArrayMap(list, fn) {\n return computed(() => toValue$1(list).map((i) => toValue$1(i)).map(fn));\n}\n\nfunction useArrayReduce(list, reducer, ...args) {\n const reduceCallback = (sum, value, index) => reducer(toValue$1(sum), toValue$1(value), index);\n return computed(() => {\n const resolved = toValue$1(list);\n return args.length ? resolved.reduce(reduceCallback, typeof args[0] === \"function\" ? toValue$1(args[0]()) : toValue$1(args[0])) : resolved.reduce(reduceCallback);\n });\n}\n\nfunction useArraySome(list, fn) {\n return computed(() => toValue$1(list).some((element, index, array) => fn(toValue$1(element), index, array)));\n}\n\nfunction uniq(array) {\n return Array.from(new Set(array));\n}\nfunction uniqueElementsBy(array, fn) {\n return array.reduce((acc, v) => {\n if (!acc.some((x) => fn(v, x, array)))\n acc.push(v);\n return acc;\n }, []);\n}\nfunction useArrayUnique(list, compareFn) {\n return computed(() => {\n const resolvedList = toValue$1(list).map((element) => toValue$1(element));\n return compareFn ? uniqueElementsBy(resolvedList, compareFn) : uniq(resolvedList);\n });\n}\n\nfunction useCounter(initialValue = 0, options = {}) {\n let _initialValue = unref(initialValue);\n const count = ref(initialValue);\n const {\n max = Number.POSITIVE_INFINITY,\n min = Number.NEGATIVE_INFINITY\n } = options;\n const inc = (delta = 1) => count.value = Math.max(Math.min(max, count.value + delta), min);\n const dec = (delta = 1) => count.value = Math.min(Math.max(min, count.value - delta), max);\n const get = () => count.value;\n const set = (val) => count.value = Math.max(min, Math.min(max, val));\n const reset = (val = _initialValue) => {\n _initialValue = val;\n return set(val);\n };\n return { count, inc, dec, get, set, reset };\n}\n\nconst REGEX_PARSE = /^(\\d{4})[-/]?(\\d{1,2})?[-/]?(\\d{0,2})[T\\s]*(\\d{1,2})?:?(\\d{1,2})?:?(\\d{1,2})?[.:]?(\\d+)?$/i;\nconst REGEX_FORMAT = /[YMDHhms]o|\\[([^\\]]+)\\]|Y{1,4}|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|a{1,2}|A{1,2}|m{1,2}|s{1,2}|Z{1,2}|SSS/g;\nfunction defaultMeridiem(hours, minutes, isLowercase, hasPeriod) {\n let m = hours < 12 ? \"AM\" : \"PM\";\n if (hasPeriod)\n m = m.split(\"\").reduce((acc, curr) => acc += `${curr}.`, \"\");\n return isLowercase ? m.toLowerCase() : m;\n}\nfunction formatOrdinal(num) {\n const suffixes = [\"th\", \"st\", \"nd\", \"rd\"];\n const v = num % 100;\n return num + (suffixes[(v - 20) % 10] || suffixes[v] || suffixes[0]);\n}\nfunction formatDate(date, formatStr, options = {}) {\n var _a;\n const years = date.getFullYear();\n const month = date.getMonth();\n const days = date.getDate();\n const hours = date.getHours();\n const minutes = date.getMinutes();\n const seconds = date.getSeconds();\n const milliseconds = date.getMilliseconds();\n const day = date.getDay();\n const meridiem = (_a = options.customMeridiem) != null ? _a : defaultMeridiem;\n const matches = {\n Yo: () => formatOrdinal(years),\n YY: () => String(years).slice(-2),\n YYYY: () => years,\n M: () => month + 1,\n Mo: () => formatOrdinal(month + 1),\n MM: () => `${month + 1}`.padStart(2, \"0\"),\n MMM: () => date.toLocaleDateString(toValue$1(options.locales), { month: \"short\" }),\n MMMM: () => date.toLocaleDateString(toValue$1(options.locales), { month: \"long\" }),\n D: () => String(days),\n Do: () => formatOrdinal(days),\n DD: () => `${days}`.padStart(2, \"0\"),\n H: () => String(hours),\n Ho: () => formatOrdinal(hours),\n HH: () => `${hours}`.padStart(2, \"0\"),\n h: () => `${hours % 12 || 12}`.padStart(1, \"0\"),\n ho: () => formatOrdinal(hours % 12 || 12),\n hh: () => `${hours % 12 || 12}`.padStart(2, \"0\"),\n m: () => String(minutes),\n mo: () => formatOrdinal(minutes),\n mm: () => `${minutes}`.padStart(2, \"0\"),\n s: () => String(seconds),\n so: () => formatOrdinal(seconds),\n ss: () => `${seconds}`.padStart(2, \"0\"),\n SSS: () => `${milliseconds}`.padStart(3, \"0\"),\n d: () => day,\n dd: () => date.toLocaleDateString(toValue$1(options.locales), { weekday: \"narrow\" }),\n ddd: () => date.toLocaleDateString(toValue$1(options.locales), { weekday: \"short\" }),\n dddd: () => date.toLocaleDateString(toValue$1(options.locales), { weekday: \"long\" }),\n A: () => meridiem(hours, minutes),\n AA: () => meridiem(hours, minutes, false, true),\n a: () => meridiem(hours, minutes, true),\n aa: () => meridiem(hours, minutes, true, true)\n };\n return formatStr.replace(REGEX_FORMAT, (match, $1) => {\n var _a2, _b;\n return (_b = $1 != null ? $1 : (_a2 = matches[match]) == null ? undefined : _a2.call(matches)) != null ? _b : match;\n });\n}\nfunction normalizeDate(date) {\n if (date === null)\n return new Date(Number.NaN);\n if (date === undefined)\n return /* @__PURE__ */ new Date();\n if (date instanceof Date)\n return new Date(date);\n if (typeof date === \"string\" && !/Z$/i.test(date)) {\n const d = date.match(REGEX_PARSE);\n if (d) {\n const m = d[2] - 1 || 0;\n const ms = (d[7] || \"0\").substring(0, 3);\n return new Date(d[1], m, d[3] || 1, d[4] || 0, d[5] || 0, d[6] || 0, ms);\n }\n }\n return new Date(date);\n}\nfunction useDateFormat(date, formatStr = \"HH:mm:ss\", options = {}) {\n return computed(() => formatDate(normalizeDate(toValue$1(date)), toValue$1(formatStr), options));\n}\n\nfunction useIntervalFn(cb, interval = 1e3, options = {}) {\n const {\n immediate = true,\n immediateCallback = false\n } = options;\n let timer = null;\n const isActive = ref(false);\n function clean() {\n if (timer) {\n clearInterval(timer);\n timer = null;\n }\n }\n function pause() {\n isActive.value = false;\n clean();\n }\n function resume() {\n const intervalValue = toValue$1(interval);\n if (intervalValue <= 0)\n return;\n isActive.value = true;\n if (immediateCallback)\n cb();\n clean();\n if (isActive.value)\n timer = setInterval(cb, intervalValue);\n }\n if (immediate && isClient)\n resume();\n if (isRef(interval) || typeof interval === \"function\") {\n const stopWatch = watch(interval, () => {\n if (isActive.value && isClient)\n resume();\n });\n tryOnScopeDispose(stopWatch);\n }\n tryOnScopeDispose(pause);\n return {\n isActive,\n pause,\n resume\n };\n}\n\nfunction useInterval(interval = 1e3, options = {}) {\n const {\n controls: exposeControls = false,\n immediate = true,\n callback\n } = options;\n const counter = ref(0);\n const update = () => counter.value += 1;\n const reset = () => {\n counter.value = 0;\n };\n const controls = useIntervalFn(\n callback ? () => {\n update();\n callback(counter.value);\n } : update,\n interval,\n { immediate }\n );\n if (exposeControls) {\n return {\n counter,\n reset,\n ...controls\n };\n } else {\n return counter;\n }\n}\n\nfunction useLastChanged(source, options = {}) {\n var _a;\n const ms = ref((_a = options.initialValue) != null ? _a : null);\n watch(\n source,\n () => ms.value = timestamp(),\n options\n );\n return ms;\n}\n\nfunction useTimeoutFn(cb, interval, options = {}) {\n const {\n immediate = true\n } = options;\n const isPending = ref(false);\n let timer = null;\n function clear() {\n if (timer) {\n clearTimeout(timer);\n timer = null;\n }\n }\n function stop() {\n isPending.value = false;\n clear();\n }\n function start(...args) {\n clear();\n isPending.value = true;\n timer = setTimeout(() => {\n isPending.value = false;\n timer = null;\n cb(...args);\n }, toValue$1(interval));\n }\n if (immediate) {\n isPending.value = true;\n if (isClient)\n start();\n }\n tryOnScopeDispose(stop);\n return {\n isPending: readonly(isPending),\n start,\n stop\n };\n}\n\nfunction useTimeout(interval = 1e3, options = {}) {\n const {\n controls: exposeControls = false,\n callback\n } = options;\n const controls = useTimeoutFn(\n callback != null ? callback : noop,\n interval,\n options\n );\n const ready = computed(() => !controls.isPending.value);\n if (exposeControls) {\n return {\n ready,\n ...controls\n };\n } else {\n return ready;\n }\n}\n\nfunction useToNumber(value, options = {}) {\n const {\n method = \"parseFloat\",\n radix,\n nanToZero\n } = options;\n return computed(() => {\n let resolved = toValue$1(value);\n if (typeof method === \"function\")\n resolved = method(resolved);\n else if (typeof resolved === \"string\")\n resolved = Number[method](resolved, radix);\n if (nanToZero && Number.isNaN(resolved))\n resolved = 0;\n return resolved;\n });\n}\n\nfunction useToString(value) {\n return computed(() => `${toValue$1(value)}`);\n}\n\nfunction useToggle(initialValue = false, options = {}) {\n const {\n truthyValue = true,\n falsyValue = false\n } = options;\n const valueIsRef = isRef(initialValue);\n const _value = ref(initialValue);\n function toggle(value) {\n if (arguments.length) {\n _value.value = value;\n return _value.value;\n } else {\n const truthy = toValue$1(truthyValue);\n _value.value = _value.value === truthy ? toValue$1(falsyValue) : truthy;\n return _value.value;\n }\n }\n if (valueIsRef)\n return toggle;\n else\n return [_value, toggle];\n}\n\nfunction watchArray(source, cb, options) {\n let oldList = (options == null ? undefined : options.immediate) ? [] : [...source instanceof Function ? source() : Array.isArray(source) ? source : toValue$1(source)];\n return watch(source, (newList, _, onCleanup) => {\n const oldListRemains = Array.from({ length: oldList.length });\n const added = [];\n for (const obj of newList) {\n let found = false;\n for (let i = 0; i < oldList.length; i++) {\n if (!oldListRemains[i] && obj === oldList[i]) {\n oldListRemains[i] = true;\n found = true;\n break;\n }\n }\n if (!found)\n added.push(obj);\n }\n const removed = oldList.filter((_2, i) => !oldListRemains[i]);\n cb(newList, oldList, added, removed, onCleanup);\n oldList = [...newList];\n }, options);\n}\n\nfunction watchAtMost(source, cb, options) {\n const {\n count,\n ...watchOptions\n } = options;\n const current = ref(0);\n const stop = watchWithFilter(\n source,\n (...args) => {\n current.value += 1;\n if (current.value >= toValue$1(count))\n nextTick(() => stop());\n cb(...args);\n },\n watchOptions\n );\n return { count: current, stop };\n}\n\nfunction watchDebounced(source, cb, options = {}) {\n const {\n debounce = 0,\n maxWait = undefined,\n ...watchOptions\n } = options;\n return watchWithFilter(\n source,\n cb,\n {\n ...watchOptions,\n eventFilter: debounceFilter(debounce, { maxWait })\n }\n );\n}\n\nfunction watchDeep(source, cb, options) {\n return watch(\n source,\n cb,\n {\n ...options,\n deep: true\n }\n );\n}\n\nfunction watchIgnorable(source, cb, options = {}) {\n const {\n eventFilter = bypassFilter,\n ...watchOptions\n } = options;\n const filteredCb = createFilterWrapper(\n eventFilter,\n cb\n );\n let ignoreUpdates;\n let ignorePrevAsyncUpdates;\n let stop;\n if (watchOptions.flush === \"sync\") {\n const ignore = ref(false);\n ignorePrevAsyncUpdates = () => {\n };\n ignoreUpdates = (updater) => {\n ignore.value = true;\n updater();\n ignore.value = false;\n };\n stop = watch(\n source,\n (...args) => {\n if (!ignore.value)\n filteredCb(...args);\n },\n watchOptions\n );\n } else {\n const disposables = [];\n const ignoreCounter = ref(0);\n const syncCounter = ref(0);\n ignorePrevAsyncUpdates = () => {\n ignoreCounter.value = syncCounter.value;\n };\n disposables.push(\n watch(\n source,\n () => {\n syncCounter.value++;\n },\n { ...watchOptions, flush: \"sync\" }\n )\n );\n ignoreUpdates = (updater) => {\n const syncCounterPrev = syncCounter.value;\n updater();\n ignoreCounter.value += syncCounter.value - syncCounterPrev;\n };\n disposables.push(\n watch(\n source,\n (...args) => {\n const ignore = ignoreCounter.value > 0 && ignoreCounter.value === syncCounter.value;\n ignoreCounter.value = 0;\n syncCounter.value = 0;\n if (ignore)\n return;\n filteredCb(...args);\n },\n watchOptions\n )\n );\n stop = () => {\n disposables.forEach((fn) => fn());\n };\n }\n return { stop, ignoreUpdates, ignorePrevAsyncUpdates };\n}\n\nfunction watchImmediate(source, cb, options) {\n return watch(\n source,\n cb,\n {\n ...options,\n immediate: true\n }\n );\n}\n\nfunction watchOnce(source, cb, options) {\n const stop = watch(source, (...args) => {\n nextTick(() => stop());\n return cb(...args);\n }, options);\n return stop;\n}\n\nfunction watchThrottled(source, cb, options = {}) {\n const {\n throttle = 0,\n trailing = true,\n leading = true,\n ...watchOptions\n } = options;\n return watchWithFilter(\n source,\n cb,\n {\n ...watchOptions,\n eventFilter: throttleFilter(throttle, trailing, leading)\n }\n );\n}\n\nfunction watchTriggerable(source, cb, options = {}) {\n let cleanupFn;\n function onEffect() {\n if (!cleanupFn)\n return;\n const fn = cleanupFn;\n cleanupFn = undefined;\n fn();\n }\n function onCleanup(callback) {\n cleanupFn = callback;\n }\n const _cb = (value, oldValue) => {\n onEffect();\n return cb(value, oldValue, onCleanup);\n };\n const res = watchIgnorable(source, _cb, options);\n const { ignoreUpdates } = res;\n const trigger = () => {\n let res2;\n ignoreUpdates(() => {\n res2 = _cb(getWatchSources(source), getOldValue(source));\n });\n return res2;\n };\n return {\n ...res,\n trigger\n };\n}\nfunction getWatchSources(sources) {\n if (isReactive(sources))\n return sources;\n if (Array.isArray(sources))\n return sources.map((item) => toValue$1(item));\n return toValue$1(sources);\n}\nfunction getOldValue(source) {\n return Array.isArray(source) ? source.map(() => undefined) : undefined;\n}\n\nfunction whenever(source, cb, options) {\n const stop = watch(\n source,\n (v, ov, onInvalidate) => {\n if (v) {\n if (options == null ? undefined : options.once)\n nextTick(() => stop());\n cb(v, ov, onInvalidate);\n }\n },\n {\n ...options,\n once: false\n }\n );\n return stop;\n}\n\nexport { assert, refAutoReset as autoResetRef, bypassFilter, camelize, clamp, computedEager, computedWithControl, containsProp, computedWithControl as controlledComputed, controlledRef, createEventHook, createFilterWrapper, createGlobalState, createInjectionState, reactify as createReactiveFn, createSharedComposable, createSingletonPromise, debounceFilter, refDebounced as debouncedRef, watchDebounced as debouncedWatch, computedEager as eagerComputed, extendRef, formatDate, get, getLifeCycleTarget, hasOwn, hyphenate, identity, watchIgnorable as ignorableWatch, increaseWithUnit, injectLocal, invoke, isClient, isDef, isDefined, isIOS, isObject, isWorker, makeDestructurable, noop, normalizeDate, notNullish, now, objectEntries, objectOmit, objectPick, pausableFilter, watchPausable as pausableWatch, promiseTimeout, provideLocal, pxValue, rand, reactify, reactifyObject, reactiveComputed, reactiveOmit, reactivePick, refAutoReset, refDebounced, refDefault, refThrottled, refWithControl, resolveRef, resolveUnref, set, syncRef, syncRefs, throttleFilter, refThrottled as throttledRef, watchThrottled as throttledWatch, timestamp, toArray, toReactive, toRef, toRefs, toValue, tryOnBeforeMount, tryOnBeforeUnmount, tryOnMounted, tryOnScopeDispose, tryOnUnmounted, until, useArrayDifference, useArrayEvery, useArrayFilter, useArrayFind, useArrayFindIndex, useArrayFindLast, useArrayIncludes, useArrayJoin, useArrayMap, useArrayReduce, useArraySome, useArrayUnique, useCounter, useDateFormat, refDebounced as useDebounce, useDebounceFn, useInterval, useIntervalFn, useLastChanged, refThrottled as useThrottle, useThrottleFn, useTimeout, useTimeoutFn, useToNumber, useToString, useToggle, watchArray, watchAtMost, watchDebounced, watchDeep, watchIgnorable, watchImmediate, watchOnce, watchPausable, watchThrottled, watchTriggerable, watchWithFilter, whenever };\n","import { noop, makeDestructurable, camelize, isClient, toArray, isObject, tryOnScopeDispose, isIOS, notNullish, tryOnMounted, objectOmit, promiseTimeout, until, injectLocal, provideLocal, pxValue, increaseWithUnit, objectEntries, createSingletonPromise, useTimeoutFn, pausableWatch, toRef, createEventHook, computedWithControl, timestamp, pausableFilter, watchIgnorable, debounceFilter, bypassFilter, createFilterWrapper, toRefs, useIntervalFn, containsProp, hasOwn, throttleFilter, useDebounceFn, useThrottleFn, tryOnUnmounted, clamp, syncRef, objectPick, watchWithFilter, tryOnBeforeUnmount, identity, isDef, whenever, isWorker } from '@vueuse/shared';\nexport * from '@vueuse/shared';\nimport { isRef, ref, shallowRef, watchEffect, computed, inject, defineComponent, h, TransitionGroup, shallowReactive, Fragment, toValue, watch, getCurrentInstance, onMounted, customRef, onUpdated, readonly, reactive, hasInjectionContext, toRaw, nextTick, markRaw, unref, getCurrentScope, isReadonly, onBeforeUpdate } from 'vue';\n\nfunction computedAsync(evaluationCallback, initialState, optionsOrRef) {\n let options;\n if (isRef(optionsOrRef)) {\n options = {\n evaluating: optionsOrRef\n };\n } else {\n options = optionsOrRef || {};\n }\n const {\n lazy = false,\n evaluating = undefined,\n shallow = true,\n onError = noop\n } = options;\n const started = ref(!lazy);\n const current = shallow ? shallowRef(initialState) : ref(initialState);\n let counter = 0;\n watchEffect(async (onInvalidate) => {\n if (!started.value)\n return;\n counter++;\n const counterAtBeginning = counter;\n let hasFinished = false;\n if (evaluating) {\n Promise.resolve().then(() => {\n evaluating.value = true;\n });\n }\n try {\n const result = await evaluationCallback((cancelCallback) => {\n onInvalidate(() => {\n if (evaluating)\n evaluating.value = false;\n if (!hasFinished)\n cancelCallback();\n });\n });\n if (counterAtBeginning === counter)\n current.value = result;\n } catch (e) {\n onError(e);\n } finally {\n if (evaluating && counterAtBeginning === counter)\n evaluating.value = false;\n hasFinished = true;\n }\n });\n if (lazy) {\n return computed(() => {\n started.value = true;\n return current.value;\n });\n } else {\n return current;\n }\n}\n\nfunction computedInject(key, options, defaultSource, treatDefaultAsFactory) {\n let source = inject(key);\n if (defaultSource)\n source = inject(key, defaultSource);\n if (treatDefaultAsFactory)\n source = inject(key, defaultSource, treatDefaultAsFactory);\n if (typeof options === \"function\") {\n return computed((ctx) => options(source, ctx));\n } else {\n return computed({\n get: (ctx) => options.get(source, ctx),\n set: options.set\n });\n }\n}\n\nfunction createReusableTemplate(options = {}) {\n const {\n inheritAttrs = true\n } = options;\n const render = shallowRef();\n const define = /* #__PURE__ */ defineComponent({\n setup(_, { slots }) {\n return () => {\n render.value = slots.default;\n };\n }\n });\n const reuse = /* #__PURE__ */ defineComponent({\n inheritAttrs,\n setup(_, { attrs, slots }) {\n return () => {\n var _a;\n if (!render.value && process.env.NODE_ENV !== \"production\")\n throw new Error(\"[VueUse] Failed to find the definition of reusable template\");\n const vnode = (_a = render.value) == null ? undefined : _a.call(render, { ...keysToCamelKebabCase(attrs), $slots: slots });\n return inheritAttrs && (vnode == null ? undefined : vnode.length) === 1 ? vnode[0] : vnode;\n };\n }\n });\n return makeDestructurable(\n { define, reuse },\n [define, reuse]\n );\n}\nfunction keysToCamelKebabCase(obj) {\n const newObj = {};\n for (const key in obj)\n newObj[camelize(key)] = obj[key];\n return newObj;\n}\n\nfunction createTemplatePromise(options = {}) {\n let index = 0;\n const instances = ref([]);\n function create(...args) {\n const props = shallowReactive({\n key: index++,\n args,\n promise: undefined,\n resolve: () => {\n },\n reject: () => {\n },\n isResolving: false,\n options\n });\n instances.value.push(props);\n props.promise = new Promise((_resolve, _reject) => {\n props.resolve = (v) => {\n props.isResolving = true;\n return _resolve(v);\n };\n props.reject = _reject;\n }).finally(() => {\n props.promise = undefined;\n const index2 = instances.value.indexOf(props);\n if (index2 !== -1)\n instances.value.splice(index2, 1);\n });\n return props.promise;\n }\n function start(...args) {\n if (options.singleton && instances.value.length > 0)\n return instances.value[0].promise;\n return create(...args);\n }\n const component = /* #__PURE__ */ defineComponent((_, { slots }) => {\n const renderList = () => instances.value.map((props) => {\n var _a;\n return h(Fragment, { key: props.key }, (_a = slots.default) == null ? undefined : _a.call(slots, props));\n });\n if (options.transition)\n return () => h(TransitionGroup, options.transition, renderList);\n return renderList;\n });\n component.start = start;\n return component;\n}\n\nfunction createUnrefFn(fn) {\n return function(...args) {\n return fn.apply(this, args.map((i) => toValue(i)));\n };\n}\n\nconst defaultWindow = isClient ? window : undefined;\nconst defaultDocument = isClient ? window.document : undefined;\nconst defaultNavigator = isClient ? window.navigator : undefined;\nconst defaultLocation = isClient ? window.location : undefined;\n\nfunction unrefElement(elRef) {\n var _a;\n const plain = toValue(elRef);\n return (_a = plain == null ? undefined : plain.$el) != null ? _a : plain;\n}\n\nfunction useEventListener(...args) {\n let target;\n let events;\n let listeners;\n let options;\n if (typeof args[0] === \"string\" || Array.isArray(args[0])) {\n [events, listeners, options] = args;\n target = defaultWindow;\n } else {\n [target, events, listeners, options] = args;\n }\n if (!target)\n return noop;\n events = toArray(events);\n listeners = toArray(listeners);\n const cleanups = [];\n const cleanup = () => {\n cleanups.forEach((fn) => fn());\n cleanups.length = 0;\n };\n const register = (el, event, listener, options2) => {\n el.addEventListener(event, listener, options2);\n return () => el.removeEventListener(event, listener, options2);\n };\n const stopWatch = watch(\n () => [unrefElement(target), toValue(options)],\n ([el, options2]) => {\n cleanup();\n if (!el)\n return;\n const optionsClone = isObject(options2) ? { ...options2 } : options2;\n cleanups.push(\n ...events.flatMap((event) => {\n return listeners.map((listener) => register(el, event, listener, optionsClone));\n })\n );\n },\n { immediate: true, flush: \"post\" }\n );\n const stop = () => {\n stopWatch();\n cleanup();\n };\n tryOnScopeDispose(stop);\n return stop;\n}\n\nlet _iOSWorkaround = false;\nfunction onClickOutside(target, handler, options = {}) {\n const { window = defaultWindow, ignore = [], capture = true, detectIframe = false } = options;\n if (!window)\n return noop;\n if (isIOS && !_iOSWorkaround) {\n _iOSWorkaround = true;\n Array.from(window.document.body.children).forEach((el) => el.addEventListener(\"click\", noop));\n window.document.documentElement.addEventListener(\"click\", noop);\n }\n let shouldListen = true;\n const shouldIgnore = (event) => {\n return toValue(ignore).some((target2) => {\n if (typeof target2 === \"string\") {\n return Array.from(window.document.querySelectorAll(target2)).some((el) => el === event.target || event.composedPath().includes(el));\n } else {\n const el = unrefElement(target2);\n return el && (event.target === el || event.composedPath().includes(el));\n }\n });\n };\n function hasMultipleRoots(target2) {\n const vm = toValue(target2);\n return vm && vm.$.subTree.shapeFlag === 16;\n }\n function checkMultipleRoots(target2, event) {\n const vm = toValue(target2);\n const children = vm.$.subTree && vm.$.subTree.children;\n if (children == null || !Array.isArray(children))\n return false;\n return children.some((child) => child.el === event.target || event.composedPath().includes(child.el));\n }\n const listener = (event) => {\n const el = unrefElement(target);\n if (event.target == null)\n return;\n if (!(el instanceof Element) && hasMultipleRoots(target) && checkMultipleRoots(target, event))\n return;\n if (!el || el === event.target || event.composedPath().includes(el))\n return;\n if (event.detail === 0)\n shouldListen = !shouldIgnore(event);\n if (!shouldListen) {\n shouldListen = true;\n return;\n }\n handler(event);\n };\n let isProcessingClick = false;\n const cleanup = [\n useEventListener(window, \"click\", (event) => {\n if (!isProcessingClick) {\n isProcessingClick = true;\n setTimeout(() => {\n isProcessingClick = false;\n }, 0);\n listener(event);\n }\n }, { passive: true, capture }),\n useEventListener(window, \"pointerdown\", (e) => {\n const el = unrefElement(target);\n shouldListen = !shouldIgnore(e) && !!(el && !e.composedPath().includes(el));\n }, { passive: true }),\n detectIframe && useEventListener(window, \"blur\", (event) => {\n setTimeout(() => {\n var _a;\n const el = unrefElement(target);\n if (((_a = window.document.activeElement) == null ? undefined : _a.tagName) === \"IFRAME\" && !(el == null ? undefined : el.contains(window.document.activeElement))) {\n handler(event);\n }\n }, 0);\n }, { passive: true })\n ].filter(Boolean);\n const stop = () => cleanup.forEach((fn) => fn());\n return stop;\n}\n\nfunction useMounted() {\n const isMounted = ref(false);\n const instance = getCurrentInstance();\n if (instance) {\n onMounted(() => {\n isMounted.value = true;\n }, instance);\n }\n return isMounted;\n}\n\nfunction useSupported(callback) {\n const isMounted = useMounted();\n return computed(() => {\n isMounted.value;\n return Boolean(callback());\n });\n}\n\nfunction useMutationObserver(target, callback, options = {}) {\n const { window = defaultWindow, ...mutationOptions } = options;\n let observer;\n const isSupported = useSupported(() => window && \"MutationObserver\" in window);\n const cleanup = () => {\n if (observer) {\n observer.disconnect();\n observer = undefined;\n }\n };\n const targets = computed(() => {\n const value = toValue(target);\n const items = toArray(value).map(unrefElement).filter(notNullish);\n return new Set(items);\n });\n const stopWatch = watch(\n () => targets.value,\n (targets2) => {\n cleanup();\n if (isSupported.value && targets2.size) {\n observer = new MutationObserver(callback);\n targets2.forEach((el) => observer.observe(el, mutationOptions));\n }\n },\n { immediate: true, flush: \"post\" }\n );\n const takeRecords = () => {\n return observer == null ? undefined : observer.takeRecords();\n };\n const stop = () => {\n stopWatch();\n cleanup();\n };\n tryOnScopeDispose(stop);\n return {\n isSupported,\n stop,\n takeRecords\n };\n}\n\nfunction onElementRemoval(target, callback, options = {}) {\n const {\n window = defaultWindow,\n document = window == null ? undefined : window.document,\n flush = \"sync\"\n } = options;\n if (!window || !document)\n return noop;\n let stopFn;\n const cleanupAndUpdate = (fn) => {\n stopFn == null ? undefined : stopFn();\n stopFn = fn;\n };\n const stopWatch = watchEffect(() => {\n const el = unrefElement(target);\n if (el) {\n const { stop } = useMutationObserver(\n document,\n (mutationsList) => {\n const targetRemoved = mutationsList.map((mutation) => [...mutation.removedNodes]).flat().some((node) => node === el || node.contains(el));\n if (targetRemoved) {\n callback(mutationsList);\n }\n },\n {\n window,\n childList: true,\n subtree: true\n }\n );\n cleanupAndUpdate(stop);\n }\n }, { flush });\n const stopHandle = () => {\n stopWatch();\n cleanupAndUpdate();\n };\n tryOnScopeDispose(stopHandle);\n return stopHandle;\n}\n\nfunction createKeyPredicate(keyFilter) {\n if (typeof keyFilter === \"function\")\n return keyFilter;\n else if (typeof keyFilter === \"string\")\n return (event) => event.key === keyFilter;\n else if (Array.isArray(keyFilter))\n return (event) => keyFilter.includes(event.key);\n return () => true;\n}\nfunction onKeyStroke(...args) {\n let key;\n let handler;\n let options = {};\n if (args.length === 3) {\n key = args[0];\n handler = args[1];\n options = args[2];\n } else if (args.length === 2) {\n if (typeof args[1] === \"object\") {\n key = true;\n handler = args[0];\n options = args[1];\n } else {\n key = args[0];\n handler = args[1];\n }\n } else {\n key = true;\n handler = args[0];\n }\n const {\n target = defaultWindow,\n eventName = \"keydown\",\n passive = false,\n dedupe = false\n } = options;\n const predicate = createKeyPredicate(key);\n const listener = (e) => {\n if (e.repeat && toValue(dedupe))\n return;\n if (predicate(e))\n handler(e);\n };\n return useEventListener(target, eventName, listener, passive);\n}\nfunction onKeyDown(key, handler, options = {}) {\n return onKeyStroke(key, handler, { ...options, eventName: \"keydown\" });\n}\nfunction onKeyPressed(key, handler, options = {}) {\n return onKeyStroke(key, handler, { ...options, eventName: \"keypress\" });\n}\nfunction onKeyUp(key, handler, options = {}) {\n return onKeyStroke(key, handler, { ...options, eventName: \"keyup\" });\n}\n\nconst DEFAULT_DELAY = 500;\nconst DEFAULT_THRESHOLD = 10;\nfunction onLongPress(target, handler, options) {\n var _a, _b;\n const elementRef = computed(() => unrefElement(target));\n let timeout;\n let posStart;\n let startTimestamp;\n let hasLongPressed = false;\n function clear() {\n if (timeout) {\n clearTimeout(timeout);\n timeout = undefined;\n }\n posStart = undefined;\n startTimestamp = undefined;\n hasLongPressed = false;\n }\n function onRelease(ev) {\n var _a2, _b2, _c;\n const [_startTimestamp, _posStart, _hasLongPressed] = [startTimestamp, posStart, hasLongPressed];\n clear();\n if (!(options == null ? undefined : options.onMouseUp) || !_posStart || !_startTimestamp)\n return;\n if (((_a2 = options == null ? undefined : options.modifiers) == null ? undefined : _a2.self) && ev.target !== elementRef.value)\n return;\n if ((_b2 = options == null ? undefined : options.modifiers) == null ? undefined : _b2.prevent)\n ev.preventDefault();\n if ((_c = options == null ? undefined : options.modifiers) == null ? undefined : _c.stop)\n ev.stopPropagation();\n const dx = ev.x - _posStart.x;\n const dy = ev.y - _posStart.y;\n const distance = Math.sqrt(dx * dx + dy * dy);\n options.onMouseUp(ev.timeStamp - _startTimestamp, distance, _hasLongPressed);\n }\n function onDown(ev) {\n var _a2, _b2, _c, _d;\n if (((_a2 = options == null ? undefined : options.modifiers) == null ? undefined : _a2.self) && ev.target !== elementRef.value)\n return;\n clear();\n if ((_b2 = options == null ? undefined : options.modifiers) == null ? undefined : _b2.prevent)\n ev.preventDefault();\n if ((_c = options == null ? undefined : options.modifiers) == null ? undefined : _c.stop)\n ev.stopPropagation();\n posStart = {\n x: ev.x,\n y: ev.y\n };\n startTimestamp = ev.timeStamp;\n timeout = setTimeout(\n () => {\n hasLongPressed = true;\n handler(ev);\n },\n (_d = options == null ? undefined : options.delay) != null ? _d : DEFAULT_DELAY\n );\n }\n function onMove(ev) {\n var _a2, _b2, _c, _d;\n if (((_a2 = options == null ? undefined : options.modifiers) == null ? undefined : _a2.self) && ev.target !== elementRef.value)\n return;\n if (!posStart || (options == null ? undefined : options.distanceThreshold) === false)\n return;\n if ((_b2 = options == null ? undefined : options.modifiers) == null ? undefined : _b2.prevent)\n ev.preventDefault();\n if ((_c = options == null ? undefined : options.modifiers) == null ? undefined : _c.stop)\n ev.stopPropagation();\n const dx = ev.x - posStart.x;\n const dy = ev.y - posStart.y;\n const distance = Math.sqrt(dx * dx + dy * dy);\n if (distance >= ((_d = options == null ? undefined : options.distanceThreshold) != null ? _d : DEFAULT_THRESHOLD))\n clear();\n }\n const listenerOptions = {\n capture: (_a = options == null ? undefined : options.modifiers) == null ? undefined : _a.capture,\n once: (_b = options == null ? undefined : options.modifiers) == null ? undefined : _b.once\n };\n const cleanup = [\n useEventListener(elementRef, \"pointerdown\", onDown, listenerOptions),\n useEventListener(elementRef, \"pointermove\", onMove, listenerOptions),\n useEventListener(elementRef, [\"pointerup\", \"pointerleave\"], onRelease, listenerOptions)\n ];\n const stop = () => cleanup.forEach((fn) => fn());\n return stop;\n}\n\nfunction isFocusedElementEditable() {\n const { activeElement, body } = document;\n if (!activeElement)\n return false;\n if (activeElement === body)\n return false;\n switch (activeElement.tagName) {\n case \"INPUT\":\n case \"TEXTAREA\":\n return true;\n }\n return activeElement.hasAttribute(\"contenteditable\");\n}\nfunction isTypedCharValid({\n keyCode,\n metaKey,\n ctrlKey,\n altKey\n}) {\n if (metaKey || ctrlKey || altKey)\n return false;\n if (keyCode >= 48 && keyCode <= 57)\n return true;\n if (keyCode >= 65 && keyCode <= 90)\n return true;\n if (keyCode >= 97 && keyCode <= 122)\n return true;\n return false;\n}\nfunction onStartTyping(callback, options = {}) {\n const { document: document2 = defaultDocument } = options;\n const keydown = (event) => {\n if (!isFocusedElementEditable() && isTypedCharValid(event)) {\n callback(event);\n }\n };\n if (document2)\n useEventListener(document2, \"keydown\", keydown, { passive: true });\n}\n\nfunction templateRef(key, initialValue = null) {\n const instance = getCurrentInstance();\n let _trigger = () => {\n };\n const element = customRef((track, trigger) => {\n _trigger = trigger;\n return {\n get() {\n var _a, _b;\n track();\n return (_b = (_a = instance == null ? undefined : instance.proxy) == null ? undefined : _a.$refs[key]) != null ? _b : initialValue;\n },\n set() {\n }\n };\n });\n tryOnMounted(_trigger);\n onUpdated(_trigger);\n return element;\n}\n\nfunction useActiveElement(options = {}) {\n var _a;\n const {\n window = defaultWindow,\n deep = true,\n triggerOnRemoval = false\n } = options;\n const document = (_a = options.document) != null ? _a : window == null ? undefined : window.document;\n const getDeepActiveElement = () => {\n var _a2;\n let element = document == null ? undefined : document.activeElement;\n if (deep) {\n while (element == null ? undefined : element.shadowRoot)\n element = (_a2 = element == null ? undefined : element.shadowRoot) == null ? undefined : _a2.activeElement;\n }\n return element;\n };\n const activeElement = ref();\n const trigger = () => {\n activeElement.value = getDeepActiveElement();\n };\n if (window) {\n const listenerOptions = {\n capture: true,\n passive: true\n };\n useEventListener(\n window,\n \"blur\",\n (event) => {\n if (event.relatedTarget !== null)\n return;\n trigger();\n },\n listenerOptions\n );\n useEventListener(\n window,\n \"focus\",\n trigger,\n listenerOptions\n );\n }\n if (triggerOnRemoval) {\n onElementRemoval(activeElement, trigger, { document });\n }\n trigger();\n return activeElement;\n}\n\nfunction useRafFn(fn, options = {}) {\n const {\n immediate = true,\n fpsLimit = undefined,\n window = defaultWindow\n } = options;\n const isActive = ref(false);\n const intervalLimit = computed(() => {\n return fpsLimit ? 1e3 / toValue(fpsLimit) : null;\n });\n let previousFrameTimestamp = 0;\n let rafId = null;\n function loop(timestamp) {\n if (!isActive.value || !window)\n return;\n if (!previousFrameTimestamp)\n previousFrameTimestamp = timestamp;\n const delta = timestamp - previousFrameTimestamp;\n if (intervalLimit.value && delta < intervalLimit.value) {\n rafId = window.requestAnimationFrame(loop);\n return;\n }\n previousFrameTimestamp = timestamp;\n fn({ delta, timestamp });\n rafId = window.requestAnimationFrame(loop);\n }\n function resume() {\n if (!isActive.value && window) {\n isActive.value = true;\n previousFrameTimestamp = 0;\n rafId = window.requestAnimationFrame(loop);\n }\n }\n function pause() {\n isActive.value = false;\n if (rafId != null && window) {\n window.cancelAnimationFrame(rafId);\n rafId = null;\n }\n }\n if (immediate)\n resume();\n tryOnScopeDispose(pause);\n return {\n isActive: readonly(isActive),\n pause,\n resume\n };\n}\n\nfunction useAnimate(target, keyframes, options) {\n let config;\n let animateOptions;\n if (isObject(options)) {\n config = options;\n animateOptions = objectOmit(options, [\"window\", \"immediate\", \"commitStyles\", \"persist\", \"onReady\", \"onError\"]);\n } else {\n config = { duration: options };\n animateOptions = options;\n }\n const {\n window = defaultWindow,\n immediate = true,\n commitStyles,\n persist,\n playbackRate: _playbackRate = 1,\n onReady,\n onError = (e) => {\n console.error(e);\n }\n } = config;\n const isSupported = useSupported(() => window && HTMLElement && \"animate\" in HTMLElement.prototype);\n const animate = shallowRef(undefined);\n const store = shallowReactive({\n startTime: null,\n currentTime: null,\n timeline: null,\n playbackRate: _playbackRate,\n pending: false,\n playState: immediate ? \"idle\" : \"paused\",\n replaceState: \"active\"\n });\n const pending = computed(() => store.pending);\n const playState = computed(() => store.playState);\n const replaceState = computed(() => store.replaceState);\n const startTime = computed({\n get() {\n return store.startTime;\n },\n set(value) {\n store.startTime = value;\n if (animate.value)\n animate.value.startTime = value;\n }\n });\n const currentTime = computed({\n get() {\n return store.currentTime;\n },\n set(value) {\n store.currentTime = value;\n if (animate.value) {\n animate.value.currentTime = value;\n syncResume();\n }\n }\n });\n const timeline = computed({\n get() {\n return store.timeline;\n },\n set(value) {\n store.timeline = value;\n if (animate.value)\n animate.value.timeline = value;\n }\n });\n const playbackRate = computed({\n get() {\n return store.playbackRate;\n },\n set(value) {\n store.playbackRate = value;\n if (animate.value)\n animate.value.playbackRate = value;\n }\n });\n const play = () => {\n if (animate.value) {\n try {\n animate.value.play();\n syncResume();\n } catch (e) {\n syncPause();\n onError(e);\n }\n } else {\n update();\n }\n };\n const pause = () => {\n var _a;\n try {\n (_a = animate.value) == null ? void 0 : _a.pause();\n syncPause();\n } catch (e) {\n onError(e);\n }\n };\n const reverse = () => {\n var _a;\n if (!animate.value)\n update();\n try {\n (_a = animate.value) == null ? void 0 : _a.reverse();\n syncResume();\n } catch (e) {\n syncPause();\n onError(e);\n }\n };\n const finish = () => {\n var _a;\n try {\n (_a = animate.value) == null ? void 0 : _a.finish();\n syncPause();\n } catch (e) {\n onError(e);\n }\n };\n const cancel = () => {\n var _a;\n try {\n (_a = animate.value) == null ? void 0 : _a.cancel();\n syncPause();\n } catch (e) {\n onError(e);\n }\n };\n watch(() => unrefElement(target), (el) => {\n if (el)\n update();\n });\n watch(() => keyframes, (value) => {\n if (animate.value)\n update();\n if (!unrefElement(target) && animate.value) {\n animate.value.effect = new KeyframeEffect(\n unrefElement(target),\n toValue(value),\n animateOptions\n );\n }\n }, { deep: true });\n tryOnMounted(() => update(true), false);\n tryOnScopeDispose(cancel);\n function update(init) {\n const el = unrefElement(target);\n if (!isSupported.value || !el)\n return;\n if (!animate.value)\n animate.value = el.animate(toValue(keyframes), animateOptions);\n if (persist)\n animate.value.persist();\n if (_playbackRate !== 1)\n animate.value.playbackRate = _playbackRate;\n if (init && !immediate)\n animate.value.pause();\n else\n syncResume();\n onReady == null ? undefined : onReady(animate.value);\n }\n useEventListener(animate, [\"cancel\", \"finish\", \"remove\"], syncPause);\n useEventListener(animate, \"finish\", () => {\n var _a;\n if (commitStyles)\n (_a = animate.value) == null ? undefined : _a.commitStyles();\n });\n const { resume: resumeRef, pause: pauseRef } = useRafFn(() => {\n if (!animate.value)\n return;\n store.pending = animate.value.pending;\n store.playState = animate.value.playState;\n store.replaceState = animate.value.replaceState;\n store.startTime = animate.value.startTime;\n store.currentTime = animate.value.currentTime;\n store.timeline = animate.value.timeline;\n store.playbackRate = animate.value.playbackRate;\n }, { immediate: false });\n function syncResume() {\n if (isSupported.value)\n resumeRef();\n }\n function syncPause() {\n if (isSupported.value && window)\n window.requestAnimationFrame(pauseRef);\n }\n return {\n isSupported,\n animate,\n // actions\n play,\n pause,\n reverse,\n finish,\n cancel,\n // state\n pending,\n playState,\n replaceState,\n startTime,\n currentTime,\n timeline,\n playbackRate\n };\n}\n\nfunction useAsyncQueue(tasks, options) {\n const {\n interrupt = true,\n onError = noop,\n onFinished = noop,\n signal\n } = options || {};\n const promiseState = {\n aborted: \"aborted\",\n fulfilled: \"fulfilled\",\n pending: \"pending\",\n rejected: \"rejected\"\n };\n const initialResult = Array.from(Array.from({ length: tasks.length }), () => ({ state: promiseState.pending, data: null }));\n const result = reactive(initialResult);\n const activeIndex = ref(-1);\n if (!tasks || tasks.length === 0) {\n onFinished();\n return {\n activeIndex,\n result\n };\n }\n function updateResult(state, res) {\n activeIndex.value++;\n result[activeIndex.value].data = res;\n result[activeIndex.value].state = state;\n }\n tasks.reduce((prev, curr) => {\n return prev.then((prevRes) => {\n var _a;\n if (signal == null ? undefined : signal.aborted) {\n updateResult(promiseState.aborted, new Error(\"aborted\"));\n return;\n }\n if (((_a = result[activeIndex.value]) == null ? undefined : _a.state) === promiseState.rejected && interrupt) {\n onFinished();\n return;\n }\n const done = curr(prevRes).then((currentRes) => {\n updateResult(promiseState.fulfilled, currentRes);\n if (activeIndex.value === tasks.length - 1)\n onFinished();\n return currentRes;\n });\n if (!signal)\n return done;\n return Promise.race([done, whenAborted(signal)]);\n }).catch((e) => {\n if (signal == null ? undefined : signal.aborted) {\n updateResult(promiseState.aborted, e);\n return e;\n }\n updateResult(promiseState.rejected, e);\n onError();\n return e;\n });\n }, Promise.resolve());\n return {\n activeIndex,\n result\n };\n}\nfunction whenAborted(signal) {\n return new Promise((resolve, reject) => {\n const error = new Error(\"aborted\");\n if (signal.aborted)\n reject(error);\n else\n signal.addEventListener(\"abort\", () => reject(error), { once: true });\n });\n}\n\nfunction useAsyncState(promise, initialState, options) {\n const {\n immediate = true,\n delay = 0,\n onError = noop,\n onSuccess = noop,\n resetOnExecute = true,\n shallow = true,\n throwError\n } = options != null ? options : {};\n const state = shallow ? shallowRef(initialState) : ref(initialState);\n const isReady = ref(false);\n const isLoading = ref(false);\n const error = shallowRef(undefined);\n async function execute(delay2 = 0, ...args) {\n if (resetOnExecute)\n state.value = initialState;\n error.value = undefined;\n isReady.value = false;\n isLoading.value = true;\n if (delay2 > 0)\n await promiseTimeout(delay2);\n const _promise = typeof promise === \"function\" ? promise(...args) : promise;\n try {\n const data = await _promise;\n state.value = data;\n isReady.value = true;\n onSuccess(data);\n } catch (e) {\n error.value = e;\n onError(e);\n if (throwError)\n throw e;\n } finally {\n isLoading.value = false;\n }\n return state.value;\n }\n if (immediate) {\n execute(delay);\n }\n const shell = {\n state,\n isReady,\n isLoading,\n error,\n execute\n };\n function waitUntilIsLoaded() {\n return new Promise((resolve, reject) => {\n until(isLoading).toBe(false).then(() => resolve(shell)).catch(reject);\n });\n }\n return {\n ...shell,\n then(onFulfilled, onRejected) {\n return waitUntilIsLoaded().then(onFulfilled, onRejected);\n }\n };\n}\n\nconst defaults = {\n array: (v) => JSON.stringify(v),\n object: (v) => JSON.stringify(v),\n set: (v) => JSON.stringify(Array.from(v)),\n map: (v) => JSON.stringify(Object.fromEntries(v)),\n null: () => \"\"\n};\nfunction getDefaultSerialization(target) {\n if (!target)\n return defaults.null;\n if (target instanceof Map)\n return defaults.map;\n else if (target instanceof Set)\n return defaults.set;\n else if (Array.isArray(target))\n return defaults.array;\n else\n return defaults.object;\n}\n\nfunction useBase64(target, options) {\n const base64 = ref(\"\");\n const promise = ref();\n function execute() {\n if (!isClient)\n return;\n promise.value = new Promise((resolve, reject) => {\n try {\n const _target = toValue(target);\n if (_target == null) {\n resolve(\"\");\n } else if (typeof _target === \"string\") {\n resolve(blobToBase64(new Blob([_target], { type: \"text/plain\" })));\n } else if (_target instanceof Blob) {\n resolve(blobToBase64(_target));\n } else if (_target instanceof ArrayBuffer) {\n resolve(window.btoa(String.fromCharCode(...new Uint8Array(_target))));\n } else if (_target instanceof HTMLCanvasElement) {\n resolve(_target.toDataURL(options == null ? void 0 : options.type, options == null ? void 0 : options.quality));\n } else if (_target instanceof HTMLImageElement) {\n const img = _target.cloneNode(false);\n img.crossOrigin = \"Anonymous\";\n imgLoaded(img).then(() => {\n const canvas = document.createElement(\"canvas\");\n const ctx = canvas.getContext(\"2d\");\n canvas.width = img.width;\n canvas.height = img.height;\n ctx.drawImage(img, 0, 0, canvas.width, canvas.height);\n resolve(canvas.toDataURL(options == null ? void 0 : options.type, options == null ? void 0 : options.quality));\n }).catch(reject);\n } else if (typeof _target === \"object\") {\n const _serializeFn = (options == null ? void 0 : options.serializer) || getDefaultSerialization(_target);\n const serialized = _serializeFn(_target);\n return resolve(blobToBase64(new Blob([serialized], { type: \"application/json\" })));\n } else {\n reject(new Error(\"target is unsupported types\"));\n }\n } catch (error) {\n reject(error);\n }\n });\n promise.value.then((res) => {\n base64.value = (options == null ? undefined : options.dataUrl) === false ? res.replace(/^data:.*?;base64,/, \"\") : res;\n });\n return promise.value;\n }\n if (isRef(target) || typeof target === \"function\")\n watch(target, execute, { immediate: true });\n else\n execute();\n return {\n base64,\n promise,\n execute\n };\n}\nfunction imgLoaded(img) {\n return new Promise((resolve, reject) => {\n if (!img.complete) {\n img.onload = () => {\n resolve();\n };\n img.onerror = reject;\n } else {\n resolve();\n }\n });\n}\nfunction blobToBase64(blob) {\n return new Promise((resolve, reject) => {\n const fr = new FileReader();\n fr.onload = (e) => {\n resolve(e.target.result);\n };\n fr.onerror = reject;\n fr.readAsDataURL(blob);\n });\n}\n\nfunction useBattery(options = {}) {\n const { navigator = defaultNavigator } = options;\n const events = [\"chargingchange\", \"chargingtimechange\", \"dischargingtimechange\", \"levelchange\"];\n const isSupported = useSupported(() => navigator && \"getBattery\" in navigator && typeof navigator.getBattery === \"function\");\n const charging = ref(false);\n const chargingTime = ref(0);\n const dischargingTime = ref(0);\n const level = ref(1);\n let battery;\n function updateBatteryInfo() {\n charging.value = this.charging;\n chargingTime.value = this.chargingTime || 0;\n dischargingTime.value = this.dischargingTime || 0;\n level.value = this.level;\n }\n if (isSupported.value) {\n navigator.getBattery().then((_battery) => {\n battery = _battery;\n updateBatteryInfo.call(battery);\n useEventListener(battery, events, updateBatteryInfo, { passive: true });\n });\n }\n return {\n isSupported,\n charging,\n chargingTime,\n dischargingTime,\n level\n };\n}\n\nfunction useBluetooth(options) {\n let {\n acceptAllDevices = false\n } = options || {};\n const {\n filters = undefined,\n optionalServices = undefined,\n navigator = defaultNavigator\n } = options || {};\n const isSupported = useSupported(() => navigator && \"bluetooth\" in navigator);\n const device = shallowRef();\n const error = shallowRef(null);\n watch(device, () => {\n connectToBluetoothGATTServer();\n });\n async function requestDevice() {\n if (!isSupported.value)\n return;\n error.value = null;\n if (filters && filters.length > 0)\n acceptAllDevices = false;\n try {\n device.value = await (navigator == null ? void 0 : navigator.bluetooth.requestDevice({\n acceptAllDevices,\n filters,\n optionalServices\n }));\n } catch (err) {\n error.value = err;\n }\n }\n const server = shallowRef();\n const isConnected = shallowRef(false);\n function reset() {\n isConnected.value = false;\n device.value = undefined;\n server.value = undefined;\n }\n async function connectToBluetoothGATTServer() {\n error.value = null;\n if (device.value && device.value.gatt) {\n device.value.addEventListener(\"gattserverdisconnected\", reset);\n try {\n server.value = await device.value.gatt.connect();\n isConnected.value = server.value.connected;\n } catch (err) {\n error.value = err;\n }\n }\n }\n tryOnMounted(() => {\n var _a;\n if (device.value)\n (_a = device.value.gatt) == null ? undefined : _a.connect();\n });\n tryOnScopeDispose(() => {\n var _a;\n if (device.value)\n (_a = device.value.gatt) == null ? undefined : _a.disconnect();\n });\n return {\n isSupported,\n isConnected: readonly(isConnected),\n // Device:\n device,\n requestDevice,\n // Server:\n server,\n // Errors:\n error\n };\n}\n\nconst ssrWidthSymbol = Symbol(\"vueuse-ssr-width\");\nfunction useSSRWidth() {\n const ssrWidth = hasInjectionContext() ? injectLocal(ssrWidthSymbol, null) : null;\n return typeof ssrWidth === \"number\" ? ssrWidth : undefined;\n}\nfunction provideSSRWidth(width, app) {\n if (app !== undefined) {\n app.provide(ssrWidthSymbol, width);\n } else {\n provideLocal(ssrWidthSymbol, width);\n }\n}\n\nfunction useMediaQuery(query, options = {}) {\n const { window = defaultWindow, ssrWidth = useSSRWidth() } = options;\n const isSupported = useSupported(() => window && \"matchMedia\" in window && typeof window.matchMedia === \"function\");\n const ssrSupport = ref(typeof ssrWidth === \"number\");\n let mediaQuery;\n const matches = ref(false);\n const handler = (event) => {\n matches.value = event.matches;\n };\n const cleanup = () => {\n if (!mediaQuery)\n return;\n if (\"removeEventListener\" in mediaQuery)\n mediaQuery.removeEventListener(\"change\", handler);\n else\n mediaQuery.removeListener(handler);\n };\n const stopWatch = watchEffect(() => {\n if (ssrSupport.value) {\n ssrSupport.value = !isSupported.value;\n const queryStrings = toValue(query).split(\",\");\n matches.value = queryStrings.some((queryString) => {\n const not = queryString.includes(\"not all\");\n const minWidth = queryString.match(/\\(\\s*min-width:\\s*(-?\\d+(?:\\.\\d*)?[a-z]+\\s*)\\)/);\n const maxWidth = queryString.match(/\\(\\s*max-width:\\s*(-?\\d+(?:\\.\\d*)?[a-z]+\\s*)\\)/);\n let res = Boolean(minWidth || maxWidth);\n if (minWidth && res) {\n res = ssrWidth >= pxValue(minWidth[1]);\n }\n if (maxWidth && res) {\n res = ssrWidth <= pxValue(maxWidth[1]);\n }\n return not ? !res : res;\n });\n return;\n }\n if (!isSupported.value)\n return;\n cleanup();\n mediaQuery = window.matchMedia(toValue(query));\n if (\"addEventListener\" in mediaQuery)\n mediaQuery.addEventListener(\"change\", handler);\n else\n mediaQuery.addListener(handler);\n matches.value = mediaQuery.matches;\n });\n tryOnScopeDispose(() => {\n stopWatch();\n cleanup();\n mediaQuery = undefined;\n });\n return computed(() => matches.value);\n}\n\nconst breakpointsTailwind = {\n \"sm\": 640,\n \"md\": 768,\n \"lg\": 1024,\n \"xl\": 1280,\n \"2xl\": 1536\n};\nconst breakpointsBootstrapV5 = {\n xs: 0,\n sm: 576,\n md: 768,\n lg: 992,\n xl: 1200,\n xxl: 1400\n};\nconst breakpointsVuetifyV2 = {\n xs: 0,\n sm: 600,\n md: 960,\n lg: 1264,\n xl: 1904\n};\nconst breakpointsVuetifyV3 = {\n xs: 0,\n sm: 600,\n md: 960,\n lg: 1280,\n xl: 1920,\n xxl: 2560\n};\nconst breakpointsVuetify = breakpointsVuetifyV2;\nconst breakpointsAntDesign = {\n xs: 480,\n sm: 576,\n md: 768,\n lg: 992,\n xl: 1200,\n xxl: 1600\n};\nconst breakpointsQuasar = {\n xs: 0,\n sm: 600,\n md: 1024,\n lg: 1440,\n xl: 1920\n};\nconst breakpointsSematic = {\n mobileS: 320,\n mobileM: 375,\n mobileL: 425,\n tablet: 768,\n laptop: 1024,\n laptopL: 1440,\n desktop4K: 2560\n};\nconst breakpointsMasterCss = {\n \"3xs\": 360,\n \"2xs\": 480,\n \"xs\": 600,\n \"sm\": 768,\n \"md\": 1024,\n \"lg\": 1280,\n \"xl\": 1440,\n \"2xl\": 1600,\n \"3xl\": 1920,\n \"4xl\": 2560\n};\nconst breakpointsPrimeFlex = {\n sm: 576,\n md: 768,\n lg: 992,\n xl: 1200\n};\nconst breakpointsElement = {\n xs: 0,\n sm: 768,\n md: 992,\n lg: 1200,\n xl: 1920\n};\n\nfunction useBreakpoints(breakpoints, options = {}) {\n function getValue(k, delta) {\n let v = toValue(breakpoints[toValue(k)]);\n if (delta != null)\n v = increaseWithUnit(v, delta);\n if (typeof v === \"number\")\n v = `${v}px`;\n return v;\n }\n const { window = defaultWindow, strategy = \"min-width\", ssrWidth = useSSRWidth() } = options;\n const ssrSupport = typeof ssrWidth === \"number\";\n const mounted = ssrSupport ? ref(false) : { value: true };\n if (ssrSupport) {\n tryOnMounted(() => mounted.value = !!window);\n }\n function match(query, size) {\n if (!mounted.value && ssrSupport) {\n return query === \"min\" ? ssrWidth >= pxValue(size) : ssrWidth <= pxValue(size);\n }\n if (!window)\n return false;\n return window.matchMedia(`(${query}-width: ${size})`).matches;\n }\n const greaterOrEqual = (k) => {\n return useMediaQuery(() => `(min-width: ${getValue(k)})`, options);\n };\n const smallerOrEqual = (k) => {\n return useMediaQuery(() => `(max-width: ${getValue(k)})`, options);\n };\n const shortcutMethods = Object.keys(breakpoints).reduce((shortcuts, k) => {\n Object.defineProperty(shortcuts, k, {\n get: () => strategy === \"min-width\" ? greaterOrEqual(k) : smallerOrEqual(k),\n enumerable: true,\n configurable: true\n });\n return shortcuts;\n }, {});\n function current() {\n const points = Object.keys(breakpoints).map((k) => [k, shortcutMethods[k], pxValue(getValue(k))]).sort((a, b) => a[2] - b[2]);\n return computed(() => points.filter(([, v]) => v.value).map(([k]) => k));\n }\n return Object.assign(shortcutMethods, {\n greaterOrEqual,\n smallerOrEqual,\n greater(k) {\n return useMediaQuery(() => `(min-width: ${getValue(k, 0.1)})`, options);\n },\n smaller(k) {\n return useMediaQuery(() => `(max-width: ${getValue(k, -0.1)})`, options);\n },\n between(a, b) {\n return useMediaQuery(() => `(min-width: ${getValue(a)}) and (max-width: ${getValue(b, -0.1)})`, options);\n },\n isGreater(k) {\n return match(\"min\", getValue(k, 0.1));\n },\n isGreaterOrEqual(k) {\n return match(\"min\", getValue(k));\n },\n isSmaller(k) {\n return match(\"max\", getValue(k, -0.1));\n },\n isSmallerOrEqual(k) {\n return match(\"max\", getValue(k));\n },\n isInBetween(a, b) {\n return match(\"min\", getValue(a)) && match(\"max\", getValue(b, -0.1));\n },\n current,\n active() {\n const bps = current();\n return computed(() => bps.value.length === 0 ? \"\" : bps.value.at(strategy === \"min-width\" ? -1 : 0));\n }\n });\n}\n\nfunction useBroadcastChannel(options) {\n const {\n name,\n window = defaultWindow\n } = options;\n const isSupported = useSupported(() => window && \"BroadcastChannel\" in window);\n const isClosed = ref(false);\n const channel = ref();\n const data = ref();\n const error = shallowRef(null);\n const post = (data2) => {\n if (channel.value)\n channel.value.postMessage(data2);\n };\n const close = () => {\n if (channel.value)\n channel.value.close();\n isClosed.value = true;\n };\n if (isSupported.value) {\n tryOnMounted(() => {\n error.value = null;\n channel.value = new BroadcastChannel(name);\n channel.value.addEventListener(\"message\", (e) => {\n data.value = e.data;\n }, { passive: true });\n channel.value.addEventListener(\"messageerror\", (e) => {\n error.value = e;\n }, { passive: true });\n channel.value.addEventListener(\"close\", () => {\n isClosed.value = true;\n });\n });\n }\n tryOnScopeDispose(() => {\n close();\n });\n return {\n isSupported,\n channel,\n data,\n post,\n close,\n error,\n isClosed\n };\n}\n\nconst WRITABLE_PROPERTIES = [\n \"hash\",\n \"host\",\n \"hostname\",\n \"href\",\n \"pathname\",\n \"port\",\n \"protocol\",\n \"search\"\n];\nfunction useBrowserLocation(options = {}) {\n const { window = defaultWindow } = options;\n const refs = Object.fromEntries(\n WRITABLE_PROPERTIES.map((key) => [key, ref()])\n );\n for (const [key, ref2] of objectEntries(refs)) {\n watch(ref2, (value) => {\n if (!(window == null ? undefined : window.location) || window.location[key] === value)\n return;\n window.location[key] = value;\n });\n }\n const buildState = (trigger) => {\n var _a;\n const { state: state2, length } = (window == null ? undefined : window.history) || {};\n const { origin } = (window == null ? undefined : window.location) || {};\n for (const key of WRITABLE_PROPERTIES)\n refs[key].value = (_a = window == null ? undefined : window.location) == null ? undefined : _a[key];\n return reactive({\n trigger,\n state: state2,\n length,\n origin,\n ...refs\n });\n };\n const state = ref(buildState(\"load\"));\n if (window) {\n useEventListener(window, \"popstate\", () => state.value = buildState(\"popstate\"), { passive: true });\n useEventListener(window, \"hashchange\", () => state.value = buildState(\"hashchange\"), { passive: true });\n }\n return state;\n}\n\nfunction useCached(refValue, comparator = (a, b) => a === b, watchOptions) {\n const cachedValue = ref(refValue.value);\n watch(() => refValue.value, (value) => {\n if (!comparator(value, cachedValue.value))\n cachedValue.value = value;\n }, watchOptions);\n return cachedValue;\n}\n\nfunction usePermission(permissionDesc, options = {}) {\n const {\n controls = false,\n navigator = defaultNavigator\n } = options;\n const isSupported = useSupported(() => navigator && \"permissions\" in navigator);\n const permissionStatus = shallowRef();\n const desc = typeof permissionDesc === \"string\" ? { name: permissionDesc } : permissionDesc;\n const state = shallowRef();\n const update = () => {\n var _a, _b;\n state.value = (_b = (_a = permissionStatus.value) == null ? undefined : _a.state) != null ? _b : \"prompt\";\n };\n useEventListener(permissionStatus, \"change\", update, { passive: true });\n const query = createSingletonPromise(async () => {\n if (!isSupported.value)\n return;\n if (!permissionStatus.value) {\n try {\n permissionStatus.value = await navigator.permissions.query(desc);\n } catch (e) {\n permissionStatus.value = undefined;\n } finally {\n update();\n }\n }\n if (controls)\n return toRaw(permissionStatus.value);\n });\n query();\n if (controls) {\n return {\n state,\n isSupported,\n query\n };\n } else {\n return state;\n }\n}\n\nfunction useClipboard(options = {}) {\n const {\n navigator = defaultNavigator,\n read = false,\n source,\n copiedDuring = 1500,\n legacy = false\n } = options;\n const isClipboardApiSupported = useSupported(() => navigator && \"clipboard\" in navigator);\n const permissionRead = usePermission(\"clipboard-read\");\n const permissionWrite = usePermission(\"clipboard-write\");\n const isSupported = computed(() => isClipboardApiSupported.value || legacy);\n const text = ref(\"\");\n const copied = ref(false);\n const timeout = useTimeoutFn(() => copied.value = false, copiedDuring, { immediate: false });\n function updateText() {\n if (isClipboardApiSupported.value && isAllowed(permissionRead.value)) {\n navigator.clipboard.readText().then((value) => {\n text.value = value;\n });\n } else {\n text.value = legacyRead();\n }\n }\n if (isSupported.value && read)\n useEventListener([\"copy\", \"cut\"], updateText, { passive: true });\n async function copy(value = toValue(source)) {\n if (isSupported.value && value != null) {\n if (isClipboardApiSupported.value && isAllowed(permissionWrite.value))\n await navigator.clipboard.writeText(value);\n else\n legacyCopy(value);\n text.value = value;\n copied.value = true;\n timeout.start();\n }\n }\n function legacyCopy(value) {\n const ta = document.createElement(\"textarea\");\n ta.value = value != null ? value : \"\";\n ta.style.position = \"absolute\";\n ta.style.opacity = \"0\";\n document.body.appendChild(ta);\n ta.select();\n document.execCommand(\"copy\");\n ta.remove();\n }\n function legacyRead() {\n var _a, _b, _c;\n return (_c = (_b = (_a = document == null ? undefined : document.getSelection) == null ? undefined : _a.call(document)) == null ? undefined : _b.toString()) != null ? _c : \"\";\n }\n function isAllowed(status) {\n return status === \"granted\" || status === \"prompt\";\n }\n return {\n isSupported,\n text,\n copied,\n copy\n };\n}\n\nfunction useClipboardItems(options = {}) {\n const {\n navigator = defaultNavigator,\n read = false,\n source,\n copiedDuring = 1500\n } = options;\n const isSupported = useSupported(() => navigator && \"clipboard\" in navigator);\n const content = ref([]);\n const copied = ref(false);\n const timeout = useTimeoutFn(() => copied.value = false, copiedDuring, { immediate: false });\n function updateContent() {\n if (isSupported.value) {\n navigator.clipboard.read().then((items) => {\n content.value = items;\n });\n }\n }\n if (isSupported.value && read)\n useEventListener([\"copy\", \"cut\"], updateContent, { passive: true });\n async function copy(value = toValue(source)) {\n if (isSupported.value && value != null) {\n await navigator.clipboard.write(value);\n content.value = value;\n copied.value = true;\n timeout.start();\n }\n }\n return {\n isSupported,\n content,\n copied,\n copy\n };\n}\n\nfunction cloneFnJSON(source) {\n return JSON.parse(JSON.stringify(source));\n}\nfunction useCloned(source, options = {}) {\n const cloned = ref({});\n const isModified = ref(false);\n let _lastSync = false;\n const {\n manual,\n clone = cloneFnJSON,\n // watch options\n deep = true,\n immediate = true\n } = options;\n watch(cloned, () => {\n if (_lastSync) {\n _lastSync = false;\n return;\n }\n isModified.value = true;\n }, {\n deep: true,\n flush: \"sync\"\n });\n function sync() {\n _lastSync = true;\n isModified.value = false;\n cloned.value = clone(toValue(source));\n }\n if (!manual && (isRef(source) || typeof source === \"function\")) {\n watch(source, sync, {\n ...options,\n deep,\n immediate\n });\n } else {\n sync();\n }\n return { cloned, isModified, sync };\n}\n\nconst _global = typeof globalThis !== \"undefined\" ? globalThis : typeof window !== \"undefined\" ? window : typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : {};\nconst globalKey = \"__vueuse_ssr_handlers__\";\nconst handlers = /* @__PURE__ */ getHandlers();\nfunction getHandlers() {\n if (!(globalKey in _global))\n _global[globalKey] = _global[globalKey] || {};\n return _global[globalKey];\n}\nfunction getSSRHandler(key, fallback) {\n return handlers[key] || fallback;\n}\nfunction setSSRHandler(key, fn) {\n handlers[key] = fn;\n}\n\nfunction usePreferredDark(options) {\n return useMediaQuery(\"(prefers-color-scheme: dark)\", options);\n}\n\nfunction guessSerializerType(rawInit) {\n return rawInit == null ? \"any\" : rawInit instanceof Set ? \"set\" : rawInit instanceof Map ? \"map\" : rawInit instanceof Date ? \"date\" : typeof rawInit === \"boolean\" ? \"boolean\" : typeof rawInit === \"string\" ? \"string\" : typeof rawInit === \"object\" ? \"object\" : !Number.isNaN(rawInit) ? \"number\" : \"any\";\n}\n\nconst StorageSerializers = {\n boolean: {\n read: (v) => v === \"true\",\n write: (v) => String(v)\n },\n object: {\n read: (v) => JSON.parse(v),\n write: (v) => JSON.stringify(v)\n },\n number: {\n read: (v) => Number.parseFloat(v),\n write: (v) => String(v)\n },\n any: {\n read: (v) => v,\n write: (v) => String(v)\n },\n string: {\n read: (v) => v,\n write: (v) => String(v)\n },\n map: {\n read: (v) => new Map(JSON.parse(v)),\n write: (v) => JSON.stringify(Array.from(v.entries()))\n },\n set: {\n read: (v) => new Set(JSON.parse(v)),\n write: (v) => JSON.stringify(Array.from(v))\n },\n date: {\n read: (v) => new Date(v),\n write: (v) => v.toISOString()\n }\n};\nconst customStorageEventName = \"vueuse-storage\";\nfunction useStorage(key, defaults, storage, options = {}) {\n var _a;\n const {\n flush = \"pre\",\n deep = true,\n listenToStorageChanges = true,\n writeDefaults = true,\n mergeDefaults = false,\n shallow,\n window = defaultWindow,\n eventFilter,\n onError = (e) => {\n console.error(e);\n },\n initOnMounted\n } = options;\n const data = (shallow ? shallowRef : ref)(typeof defaults === \"function\" ? defaults() : defaults);\n const keyComputed = computed(() => toValue(key));\n if (!storage) {\n try {\n storage = getSSRHandler(\"getDefaultStorage\", () => {\n var _a2;\n return (_a2 = defaultWindow) == null ? void 0 : _a2.localStorage;\n })();\n } catch (e) {\n onError(e);\n }\n }\n if (!storage)\n return data;\n const rawInit = toValue(defaults);\n const type = guessSerializerType(rawInit);\n const serializer = (_a = options.serializer) != null ? _a : StorageSerializers[type];\n const { pause: pauseWatch, resume: resumeWatch } = pausableWatch(\n data,\n () => write(data.value),\n { flush, deep, eventFilter }\n );\n watch(keyComputed, () => update(), { flush });\n if (window && listenToStorageChanges) {\n tryOnMounted(() => {\n if (storage instanceof Storage)\n useEventListener(window, \"storage\", update, { passive: true });\n else\n useEventListener(window, customStorageEventName, updateFromCustomEvent);\n if (initOnMounted)\n update();\n });\n }\n if (!initOnMounted)\n update();\n function dispatchWriteEvent(oldValue, newValue) {\n if (window) {\n const payload = {\n key: keyComputed.value,\n oldValue,\n newValue,\n storageArea: storage\n };\n window.dispatchEvent(storage instanceof Storage ? new StorageEvent(\"storage\", payload) : new CustomEvent(customStorageEventName, {\n detail: payload\n }));\n }\n }\n function write(v) {\n try {\n const oldValue = storage.getItem(keyComputed.value);\n if (v == null) {\n dispatchWriteEvent(oldValue, null);\n storage.removeItem(keyComputed.value);\n } else {\n const serialized = serializer.write(v);\n if (oldValue !== serialized) {\n storage.setItem(keyComputed.value, serialized);\n dispatchWriteEvent(oldValue, serialized);\n }\n }\n } catch (e) {\n onError(e);\n }\n }\n function read(event) {\n const rawValue = event ? event.newValue : storage.getItem(keyComputed.value);\n if (rawValue == null) {\n if (writeDefaults && rawInit != null)\n storage.setItem(keyComputed.value, serializer.write(rawInit));\n return rawInit;\n } else if (!event && mergeDefaults) {\n const value = serializer.read(rawValue);\n if (typeof mergeDefaults === \"function\")\n return mergeDefaults(value, rawInit);\n else if (type === \"object\" && !Array.isArray(value))\n return { ...rawInit, ...value };\n return value;\n } else if (typeof rawValue !== \"string\") {\n return rawValue;\n } else {\n return serializer.read(rawValue);\n }\n }\n function update(event) {\n if (event && event.storageArea !== storage)\n return;\n if (event && event.key == null) {\n data.value = rawInit;\n return;\n }\n if (event && event.key !== keyComputed.value)\n return;\n pauseWatch();\n try {\n if ((event == null ? void 0 : event.newValue) !== serializer.write(data.value))\n data.value = read(event);\n } catch (e) {\n onError(e);\n } finally {\n if (event)\n nextTick(resumeWatch);\n else\n resumeWatch();\n }\n }\n function updateFromCustomEvent(event) {\n update(event.detail);\n }\n return data;\n}\n\nconst CSS_DISABLE_TRANS = \"*,*::before,*::after{-webkit-transition:none!important;-moz-transition:none!important;-o-transition:none!important;-ms-transition:none!important;transition:none!important}\";\nfunction useColorMode(options = {}) {\n const {\n selector = \"html\",\n attribute = \"class\",\n initialValue = \"auto\",\n window = defaultWindow,\n storage,\n storageKey = \"vueuse-color-scheme\",\n listenToStorageChanges = true,\n storageRef,\n emitAuto,\n disableTransition = true\n } = options;\n const modes = {\n auto: \"\",\n light: \"light\",\n dark: \"dark\",\n ...options.modes || {}\n };\n const preferredDark = usePreferredDark({ window });\n const system = computed(() => preferredDark.value ? \"dark\" : \"light\");\n const store = storageRef || (storageKey == null ? toRef(initialValue) : useStorage(storageKey, initialValue, storage, { window, listenToStorageChanges }));\n const state = computed(() => store.value === \"auto\" ? system.value : store.value);\n const updateHTMLAttrs = getSSRHandler(\n \"updateHTMLAttrs\",\n (selector2, attribute2, value) => {\n const el = typeof selector2 === \"string\" ? window == null ? undefined : window.document.querySelector(selector2) : unrefElement(selector2);\n if (!el)\n return;\n const classesToAdd = /* @__PURE__ */ new Set();\n const classesToRemove = /* @__PURE__ */ new Set();\n let attributeToChange = null;\n if (attribute2 === \"class\") {\n const current = value.split(/\\s/g);\n Object.values(modes).flatMap((i) => (i || \"\").split(/\\s/g)).filter(Boolean).forEach((v) => {\n if (current.includes(v))\n classesToAdd.add(v);\n else\n classesToRemove.add(v);\n });\n } else {\n attributeToChange = { key: attribute2, value };\n }\n if (classesToAdd.size === 0 && classesToRemove.size === 0 && attributeToChange === null)\n return;\n let style;\n if (disableTransition) {\n style = window.document.createElement(\"style\");\n style.appendChild(document.createTextNode(CSS_DISABLE_TRANS));\n window.document.head.appendChild(style);\n }\n for (const c of classesToAdd) {\n el.classList.add(c);\n }\n for (const c of classesToRemove) {\n el.classList.remove(c);\n }\n if (attributeToChange) {\n el.setAttribute(attributeToChange.key, attributeToChange.value);\n }\n if (disableTransition) {\n window.getComputedStyle(style).opacity;\n document.head.removeChild(style);\n }\n }\n );\n function defaultOnChanged(mode) {\n var _a;\n updateHTMLAttrs(selector, attribute, (_a = modes[mode]) != null ? _a : mode);\n }\n function onChanged(mode) {\n if (options.onChanged)\n options.onChanged(mode, defaultOnChanged);\n else\n defaultOnChanged(mode);\n }\n watch(state, onChanged, { flush: \"post\", immediate: true });\n tryOnMounted(() => onChanged(state.value));\n const auto = computed({\n get() {\n return emitAuto ? store.value : state.value;\n },\n set(v) {\n store.value = v;\n }\n });\n return Object.assign(auto, { store, system, state });\n}\n\nfunction useConfirmDialog(revealed = ref(false)) {\n const confirmHook = createEventHook();\n const cancelHook = createEventHook();\n const revealHook = createEventHook();\n let _resolve = noop;\n const reveal = (data) => {\n revealHook.trigger(data);\n revealed.value = true;\n return new Promise((resolve) => {\n _resolve = resolve;\n });\n };\n const confirm = (data) => {\n revealed.value = false;\n confirmHook.trigger(data);\n _resolve({ data, isCanceled: false });\n };\n const cancel = (data) => {\n revealed.value = false;\n cancelHook.trigger(data);\n _resolve({ data, isCanceled: true });\n };\n return {\n isRevealed: computed(() => revealed.value),\n reveal,\n confirm,\n cancel,\n onReveal: revealHook.on,\n onConfirm: confirmHook.on,\n onCancel: cancelHook.on\n };\n}\n\nfunction useCssVar(prop, target, options = {}) {\n const { window = defaultWindow, initialValue, observe = false } = options;\n const variable = ref(initialValue);\n const elRef = computed(() => {\n var _a;\n return unrefElement(target) || ((_a = window == null ? undefined : window.document) == null ? undefined : _a.documentElement);\n });\n function updateCssVar() {\n var _a;\n const key = toValue(prop);\n const el = toValue(elRef);\n if (el && window && key) {\n const value = (_a = window.getComputedStyle(el).getPropertyValue(key)) == null ? undefined : _a.trim();\n variable.value = value || initialValue;\n }\n }\n if (observe) {\n useMutationObserver(elRef, updateCssVar, {\n attributeFilter: [\"style\", \"class\"],\n window\n });\n }\n watch(\n [elRef, () => toValue(prop)],\n (_, old) => {\n if (old[0] && old[1])\n old[0].style.removeProperty(old[1]);\n updateCssVar();\n },\n { immediate: true }\n );\n watch(\n variable,\n (val) => {\n var _a;\n const raw_prop = toValue(prop);\n if (((_a = elRef.value) == null ? undefined : _a.style) && raw_prop) {\n if (val == null)\n elRef.value.style.removeProperty(raw_prop);\n else\n elRef.value.style.setProperty(raw_prop, val);\n }\n }\n );\n return variable;\n}\n\nfunction useCurrentElement(rootComponent) {\n const vm = getCurrentInstance();\n const currentElement = computedWithControl(\n () => null,\n () => rootComponent ? unrefElement(rootComponent) : vm.proxy.$el\n );\n onUpdated(currentElement.trigger);\n onMounted(currentElement.trigger);\n return currentElement;\n}\n\nfunction useCycleList(list, options) {\n const state = shallowRef(getInitialValue());\n const listRef = toRef(list);\n const index = computed({\n get() {\n var _a;\n const targetList = listRef.value;\n let index2 = (options == null ? undefined : options.getIndexOf) ? options.getIndexOf(state.value, targetList) : targetList.indexOf(state.value);\n if (index2 < 0)\n index2 = (_a = options == null ? undefined : options.fallbackIndex) != null ? _a : 0;\n return index2;\n },\n set(v) {\n set(v);\n }\n });\n function set(i) {\n const targetList = listRef.value;\n const length = targetList.length;\n const index2 = (i % length + length) % length;\n const value = targetList[index2];\n state.value = value;\n return value;\n }\n function shift(delta = 1) {\n return set(index.value + delta);\n }\n function next(n = 1) {\n return shift(n);\n }\n function prev(n = 1) {\n return shift(-n);\n }\n function getInitialValue() {\n var _a, _b;\n return (_b = toValue((_a = options == null ? undefined : options.initialValue) != null ? _a : toValue(list)[0])) != null ? _b : undefined;\n }\n watch(listRef, () => set(index.value));\n return {\n state,\n index,\n next,\n prev,\n go: set\n };\n}\n\nfunction useDark(options = {}) {\n const {\n valueDark = \"dark\",\n valueLight = \"\"\n } = options;\n const mode = useColorMode({\n ...options,\n onChanged: (mode2, defaultHandler) => {\n var _a;\n if (options.onChanged)\n (_a = options.onChanged) == null ? undefined : _a.call(options, mode2 === \"dark\", defaultHandler, mode2);\n else\n defaultHandler(mode2);\n },\n modes: {\n dark: valueDark,\n light: valueLight\n }\n });\n const system = computed(() => mode.system.value);\n const isDark = computed({\n get() {\n return mode.value === \"dark\";\n },\n set(v) {\n const modeVal = v ? \"dark\" : \"light\";\n if (system.value === modeVal)\n mode.value = \"auto\";\n else\n mode.value = modeVal;\n }\n });\n return isDark;\n}\n\nfunction fnBypass(v) {\n return v;\n}\nfunction fnSetSource(source, value) {\n return source.value = value;\n}\nfunction defaultDump(clone) {\n return clone ? typeof clone === \"function\" ? clone : cloneFnJSON : fnBypass;\n}\nfunction defaultParse(clone) {\n return clone ? typeof clone === \"function\" ? clone : cloneFnJSON : fnBypass;\n}\nfunction useManualRefHistory(source, options = {}) {\n const {\n clone = false,\n dump = defaultDump(clone),\n parse = defaultParse(clone),\n setSource = fnSetSource\n } = options;\n function _createHistoryRecord() {\n return markRaw({\n snapshot: dump(source.value),\n timestamp: timestamp()\n });\n }\n const last = ref(_createHistoryRecord());\n const undoStack = ref([]);\n const redoStack = ref([]);\n const _setSource = (record) => {\n setSource(source, parse(record.snapshot));\n last.value = record;\n };\n const commit = () => {\n undoStack.value.unshift(last.value);\n last.value = _createHistoryRecord();\n if (options.capacity && undoStack.value.length > options.capacity)\n undoStack.value.splice(options.capacity, Number.POSITIVE_INFINITY);\n if (redoStack.value.length)\n redoStack.value.splice(0, redoStack.value.length);\n };\n const clear = () => {\n undoStack.value.splice(0, undoStack.value.length);\n redoStack.value.splice(0, redoStack.value.length);\n };\n const undo = () => {\n const state = undoStack.value.shift();\n if (state) {\n redoStack.value.unshift(last.value);\n _setSource(state);\n }\n };\n const redo = () => {\n const state = redoStack.value.shift();\n if (state) {\n undoStack.value.unshift(last.value);\n _setSource(state);\n }\n };\n const reset = () => {\n _setSource(last.value);\n };\n const history = computed(() => [last.value, ...undoStack.value]);\n const canUndo = computed(() => undoStack.value.length > 0);\n const canRedo = computed(() => redoStack.value.length > 0);\n return {\n source,\n undoStack,\n redoStack,\n last,\n history,\n canUndo,\n canRedo,\n clear,\n commit,\n reset,\n undo,\n redo\n };\n}\n\nfunction useRefHistory(source, options = {}) {\n const {\n deep = false,\n flush = \"pre\",\n eventFilter\n } = options;\n const {\n eventFilter: composedFilter,\n pause,\n resume: resumeTracking,\n isActive: isTracking\n } = pausableFilter(eventFilter);\n const {\n ignoreUpdates,\n ignorePrevAsyncUpdates,\n stop\n } = watchIgnorable(\n source,\n commit,\n { deep, flush, eventFilter: composedFilter }\n );\n function setSource(source2, value) {\n ignorePrevAsyncUpdates();\n ignoreUpdates(() => {\n source2.value = value;\n });\n }\n const manualHistory = useManualRefHistory(source, { ...options, clone: options.clone || deep, setSource });\n const { clear, commit: manualCommit } = manualHistory;\n function commit() {\n ignorePrevAsyncUpdates();\n manualCommit();\n }\n function resume(commitNow) {\n resumeTracking();\n if (commitNow)\n commit();\n }\n function batch(fn) {\n let canceled = false;\n const cancel = () => canceled = true;\n ignoreUpdates(() => {\n fn(cancel);\n });\n if (!canceled)\n commit();\n }\n function dispose() {\n stop();\n clear();\n }\n return {\n ...manualHistory,\n isTracking,\n pause,\n resume,\n commit,\n batch,\n dispose\n };\n}\n\nfunction useDebouncedRefHistory(source, options = {}) {\n const filter = options.debounce ? debounceFilter(options.debounce) : undefined;\n const history = useRefHistory(source, { ...options, eventFilter: filter });\n return {\n ...history\n };\n}\n\nfunction useDeviceMotion(options = {}) {\n const {\n window = defaultWindow,\n requestPermissions = false,\n eventFilter = bypassFilter\n } = options;\n const isSupported = useSupported(() => typeof DeviceMotionEvent !== \"undefined\");\n const requirePermissions = useSupported(() => isSupported.value && \"requestPermission\" in DeviceMotionEvent && typeof DeviceMotionEvent.requestPermission === \"function\");\n const permissionGranted = ref(false);\n const acceleration = ref({ x: null, y: null, z: null });\n const rotationRate = ref({ alpha: null, beta: null, gamma: null });\n const interval = ref(0);\n const accelerationIncludingGravity = ref({\n x: null,\n y: null,\n z: null\n });\n function init() {\n if (window) {\n const onDeviceMotion = createFilterWrapper(\n eventFilter,\n (event) => {\n var _a, _b, _c, _d, _e, _f, _g, _h, _i;\n acceleration.value = {\n x: ((_a = event.acceleration) == null ? undefined : _a.x) || null,\n y: ((_b = event.acceleration) == null ? undefined : _b.y) || null,\n z: ((_c = event.acceleration) == null ? undefined : _c.z) || null\n };\n accelerationIncludingGravity.value = {\n x: ((_d = event.accelerationIncludingGravity) == null ? undefined : _d.x) || null,\n y: ((_e = event.accelerationIncludingGravity) == null ? undefined : _e.y) || null,\n z: ((_f = event.accelerationIncludingGravity) == null ? undefined : _f.z) || null\n };\n rotationRate.value = {\n alpha: ((_g = event.rotationRate) == null ? undefined : _g.alpha) || null,\n beta: ((_h = event.rotationRate) == null ? undefined : _h.beta) || null,\n gamma: ((_i = event.rotationRate) == null ? undefined : _i.gamma) || null\n };\n interval.value = event.interval;\n }\n );\n useEventListener(window, \"devicemotion\", onDeviceMotion, { passive: true });\n }\n }\n const ensurePermissions = async () => {\n if (!requirePermissions.value)\n permissionGranted.value = true;\n if (permissionGranted.value)\n return;\n if (requirePermissions.value) {\n const requestPermission = DeviceMotionEvent.requestPermission;\n try {\n const response = await requestPermission();\n if (response === \"granted\") {\n permissionGranted.value = true;\n init();\n }\n } catch (error) {\n console.error(error);\n }\n }\n };\n if (isSupported.value) {\n if (requestPermissions && requirePermissions.value) {\n ensurePermissions().then(() => init());\n } else {\n init();\n }\n }\n return {\n acceleration,\n accelerationIncludingGravity,\n rotationRate,\n interval,\n isSupported,\n requirePermissions,\n ensurePermissions,\n permissionGranted\n };\n}\n\nfunction useDeviceOrientation(options = {}) {\n const { window = defaultWindow } = options;\n const isSupported = useSupported(() => window && \"DeviceOrientationEvent\" in window);\n const isAbsolute = ref(false);\n const alpha = ref(null);\n const beta = ref(null);\n const gamma = ref(null);\n if (window && isSupported.value) {\n useEventListener(window, \"deviceorientation\", (event) => {\n isAbsolute.value = event.absolute;\n alpha.value = event.alpha;\n beta.value = event.beta;\n gamma.value = event.gamma;\n }, { passive: true });\n }\n return {\n isSupported,\n isAbsolute,\n alpha,\n beta,\n gamma\n };\n}\n\nfunction useDevicePixelRatio(options = {}) {\n const {\n window = defaultWindow\n } = options;\n const pixelRatio = ref(1);\n if (window) {\n let observe2 = function() {\n pixelRatio.value = window.devicePixelRatio;\n cleanup2();\n media = window.matchMedia(`(resolution: ${pixelRatio.value}dppx)`);\n media.addEventListener(\"change\", observe2, { once: true });\n }, cleanup2 = function() {\n media == null ? undefined : media.removeEventListener(\"change\", observe2);\n };\n let media;\n observe2();\n tryOnScopeDispose(cleanup2);\n }\n return { pixelRatio };\n}\n\nfunction useDevicesList(options = {}) {\n const {\n navigator = defaultNavigator,\n requestPermissions = false,\n constraints = { audio: true, video: true },\n onUpdated\n } = options;\n const devices = ref([]);\n const videoInputs = computed(() => devices.value.filter((i) => i.kind === \"videoinput\"));\n const audioInputs = computed(() => devices.value.filter((i) => i.kind === \"audioinput\"));\n const audioOutputs = computed(() => devices.value.filter((i) => i.kind === \"audiooutput\"));\n const isSupported = useSupported(() => navigator && navigator.mediaDevices && navigator.mediaDevices.enumerateDevices);\n const permissionGranted = ref(false);\n let stream;\n async function update() {\n if (!isSupported.value)\n return;\n devices.value = await navigator.mediaDevices.enumerateDevices();\n onUpdated == null ? undefined : onUpdated(devices.value);\n if (stream) {\n stream.getTracks().forEach((t) => t.stop());\n stream = null;\n }\n }\n async function ensurePermissions() {\n if (!isSupported.value)\n return false;\n if (permissionGranted.value)\n return true;\n const { state, query } = usePermission(\"camera\", { controls: true });\n await query();\n if (state.value !== \"granted\") {\n let granted = true;\n try {\n stream = await navigator.mediaDevices.getUserMedia(constraints);\n } catch (e) {\n stream = null;\n granted = false;\n }\n update();\n permissionGranted.value = granted;\n } else {\n permissionGranted.value = true;\n }\n return permissionGranted.value;\n }\n if (isSupported.value) {\n if (requestPermissions)\n ensurePermissions();\n useEventListener(navigator.mediaDevices, \"devicechange\", update, { passive: true });\n update();\n }\n return {\n devices,\n ensurePermissions,\n permissionGranted,\n videoInputs,\n audioInputs,\n audioOutputs,\n isSupported\n };\n}\n\nfunction useDisplayMedia(options = {}) {\n var _a;\n const enabled = ref((_a = options.enabled) != null ? _a : false);\n const video = options.video;\n const audio = options.audio;\n const { navigator = defaultNavigator } = options;\n const isSupported = useSupported(() => {\n var _a2;\n return (_a2 = navigator == null ? undefined : navigator.mediaDevices) == null ? undefined : _a2.getDisplayMedia;\n });\n const constraint = { audio, video };\n const stream = shallowRef();\n async function _start() {\n var _a2;\n if (!isSupported.value || stream.value)\n return;\n stream.value = await navigator.mediaDevices.getDisplayMedia(constraint);\n (_a2 = stream.value) == null ? undefined : _a2.getTracks().forEach((t) => t.addEventListener(\"ended\", stop));\n return stream.value;\n }\n async function _stop() {\n var _a2;\n (_a2 = stream.value) == null ? undefined : _a2.getTracks().forEach((t) => t.stop());\n stream.value = undefined;\n }\n function stop() {\n _stop();\n enabled.value = false;\n }\n async function start() {\n await _start();\n if (stream.value)\n enabled.value = true;\n return stream.value;\n }\n watch(\n enabled,\n (v) => {\n if (v)\n _start();\n else\n _stop();\n },\n { immediate: true }\n );\n return {\n isSupported,\n stream,\n start,\n stop,\n enabled\n };\n}\n\nfunction useDocumentVisibility(options = {}) {\n const { document = defaultDocument } = options;\n if (!document)\n return ref(\"visible\");\n const visibility = ref(document.visibilityState);\n useEventListener(document, \"visibilitychange\", () => {\n visibility.value = document.visibilityState;\n }, { passive: true });\n return visibility;\n}\n\nfunction useDraggable(target, options = {}) {\n var _a;\n const {\n pointerTypes,\n preventDefault,\n stopPropagation,\n exact,\n onMove,\n onEnd,\n onStart,\n initialValue,\n axis = \"both\",\n draggingElement = defaultWindow,\n containerElement,\n handle: draggingHandle = target,\n buttons = [0]\n } = options;\n const position = ref(\n (_a = toValue(initialValue)) != null ? _a : { x: 0, y: 0 }\n );\n const pressedDelta = ref();\n const filterEvent = (e) => {\n if (pointerTypes)\n return pointerTypes.includes(e.pointerType);\n return true;\n };\n const handleEvent = (e) => {\n if (toValue(preventDefault))\n e.preventDefault();\n if (toValue(stopPropagation))\n e.stopPropagation();\n };\n const start = (e) => {\n var _a2;\n if (!toValue(buttons).includes(e.button))\n return;\n if (toValue(options.disabled) || !filterEvent(e))\n return;\n if (toValue(exact) && e.target !== toValue(target))\n return;\n const container = toValue(containerElement);\n const containerRect = (_a2 = container == null ? undefined : container.getBoundingClientRect) == null ? undefined : _a2.call(container);\n const targetRect = toValue(target).getBoundingClientRect();\n const pos = {\n x: e.clientX - (container ? targetRect.left - containerRect.left + container.scrollLeft : targetRect.left),\n y: e.clientY - (container ? targetRect.top - containerRect.top + container.scrollTop : targetRect.top)\n };\n if ((onStart == null ? undefined : onStart(pos, e)) === false)\n return;\n pressedDelta.value = pos;\n handleEvent(e);\n };\n const move = (e) => {\n if (toValue(options.disabled) || !filterEvent(e))\n return;\n if (!pressedDelta.value)\n return;\n const container = toValue(containerElement);\n const targetRect = toValue(target).getBoundingClientRect();\n let { x, y } = position.value;\n if (axis === \"x\" || axis === \"both\") {\n x = e.clientX - pressedDelta.value.x;\n if (container)\n x = Math.min(Math.max(0, x), container.scrollWidth - targetRect.width);\n }\n if (axis === \"y\" || axis === \"both\") {\n y = e.clientY - pressedDelta.value.y;\n if (container)\n y = Math.min(Math.max(0, y), container.scrollHeight - targetRect.height);\n }\n position.value = {\n x,\n y\n };\n onMove == null ? undefined : onMove(position.value, e);\n handleEvent(e);\n };\n const end = (e) => {\n if (toValue(options.disabled) || !filterEvent(e))\n return;\n if (!pressedDelta.value)\n return;\n pressedDelta.value = undefined;\n onEnd == null ? undefined : onEnd(position.value, e);\n handleEvent(e);\n };\n if (isClient) {\n const config = () => {\n var _a2;\n return {\n capture: (_a2 = options.capture) != null ? _a2 : true,\n passive: !toValue(preventDefault)\n };\n };\n useEventListener(draggingHandle, \"pointerdown\", start, config);\n useEventListener(draggingElement, \"pointermove\", move, config);\n useEventListener(draggingElement, \"pointerup\", end, config);\n }\n return {\n ...toRefs(position),\n position,\n isDragging: computed(() => !!pressedDelta.value),\n style: computed(\n () => `left:${position.value.x}px;top:${position.value.y}px;`\n )\n };\n}\n\nfunction useDropZone(target, options = {}) {\n var _a, _b;\n const isOverDropZone = ref(false);\n const files = shallowRef(null);\n let counter = 0;\n let isValid = true;\n if (isClient) {\n const _options = typeof options === \"function\" ? { onDrop: options } : options;\n const multiple = (_a = _options.multiple) != null ? _a : true;\n const preventDefaultForUnhandled = (_b = _options.preventDefaultForUnhandled) != null ? _b : false;\n const getFiles = (event) => {\n var _a2, _b2;\n const list = Array.from((_b2 = (_a2 = event.dataTransfer) == null ? undefined : _a2.files) != null ? _b2 : []);\n return list.length === 0 ? null : multiple ? list : [list[0]];\n };\n const checkDataTypes = (types) => {\n const dataTypes = unref(_options.dataTypes);\n if (typeof dataTypes === \"function\")\n return dataTypes(types);\n if (!(dataTypes == null ? undefined : dataTypes.length))\n return true;\n if (types.length === 0)\n return false;\n return types.every(\n (type) => dataTypes.some((allowedType) => type.includes(allowedType))\n );\n };\n const checkValidity = (items) => {\n const types = Array.from(items != null ? items : []).map((item) => item.type);\n const dataTypesValid = checkDataTypes(types);\n const multipleFilesValid = multiple || items.length <= 1;\n return dataTypesValid && multipleFilesValid;\n };\n const isSafari = () => /^(?:(?!chrome|android).)*safari/i.test(navigator.userAgent) && !(\"chrome\" in window);\n const handleDragEvent = (event, eventType) => {\n var _a2, _b2, _c, _d, _e, _f;\n const dataTransferItemList = (_a2 = event.dataTransfer) == null ? undefined : _a2.items;\n isValid = (_b2 = dataTransferItemList && checkValidity(dataTransferItemList)) != null ? _b2 : false;\n if (preventDefaultForUnhandled) {\n event.preventDefault();\n }\n if (!isSafari() && !isValid) {\n if (event.dataTransfer) {\n event.dataTransfer.dropEffect = \"none\";\n }\n return;\n }\n event.preventDefault();\n if (event.dataTransfer) {\n event.dataTransfer.dropEffect = \"copy\";\n }\n const currentFiles = getFiles(event);\n switch (eventType) {\n case \"enter\":\n counter += 1;\n isOverDropZone.value = true;\n (_c = _options.onEnter) == null ? undefined : _c.call(_options, null, event);\n break;\n case \"over\":\n (_d = _options.onOver) == null ? undefined : _d.call(_options, null, event);\n break;\n case \"leave\":\n counter -= 1;\n if (counter === 0)\n isOverDropZone.value = false;\n (_e = _options.onLeave) == null ? undefined : _e.call(_options, null, event);\n break;\n case \"drop\":\n counter = 0;\n isOverDropZone.value = false;\n if (isValid) {\n files.value = currentFiles;\n (_f = _options.onDrop) == null ? undefined : _f.call(_options, currentFiles, event);\n }\n break;\n }\n };\n useEventListener(target, \"dragenter\", (event) => handleDragEvent(event, \"enter\"));\n useEventListener(target, \"dragover\", (event) => handleDragEvent(event, \"over\"));\n useEventListener(target, \"dragleave\", (event) => handleDragEvent(event, \"leave\"));\n useEventListener(target, \"drop\", (event) => handleDragEvent(event, \"drop\"));\n }\n return {\n files,\n isOverDropZone\n };\n}\n\nfunction useResizeObserver(target, callback, options = {}) {\n const { window = defaultWindow, ...observerOptions } = options;\n let observer;\n const isSupported = useSupported(() => window && \"ResizeObserver\" in window);\n const cleanup = () => {\n if (observer) {\n observer.disconnect();\n observer = undefined;\n }\n };\n const targets = computed(() => {\n const _targets = toValue(target);\n return Array.isArray(_targets) ? _targets.map((el) => unrefElement(el)) : [unrefElement(_targets)];\n });\n const stopWatch = watch(\n targets,\n (els) => {\n cleanup();\n if (isSupported.value && window) {\n observer = new ResizeObserver(callback);\n for (const _el of els) {\n if (_el)\n observer.observe(_el, observerOptions);\n }\n }\n },\n { immediate: true, flush: \"post\" }\n );\n const stop = () => {\n cleanup();\n stopWatch();\n };\n tryOnScopeDispose(stop);\n return {\n isSupported,\n stop\n };\n}\n\nfunction useElementBounding(target, options = {}) {\n const {\n reset = true,\n windowResize = true,\n windowScroll = true,\n immediate = true,\n updateTiming = \"sync\"\n } = options;\n const height = ref(0);\n const bottom = ref(0);\n const left = ref(0);\n const right = ref(0);\n const top = ref(0);\n const width = ref(0);\n const x = ref(0);\n const y = ref(0);\n function recalculate() {\n const el = unrefElement(target);\n if (!el) {\n if (reset) {\n height.value = 0;\n bottom.value = 0;\n left.value = 0;\n right.value = 0;\n top.value = 0;\n width.value = 0;\n x.value = 0;\n y.value = 0;\n }\n return;\n }\n const rect = el.getBoundingClientRect();\n height.value = rect.height;\n bottom.value = rect.bottom;\n left.value = rect.left;\n right.value = rect.right;\n top.value = rect.top;\n width.value = rect.width;\n x.value = rect.x;\n y.value = rect.y;\n }\n function update() {\n if (updateTiming === \"sync\")\n recalculate();\n else if (updateTiming === \"next-frame\")\n requestAnimationFrame(() => recalculate());\n }\n useResizeObserver(target, update);\n watch(() => unrefElement(target), (ele) => !ele && update());\n useMutationObserver(target, update, {\n attributeFilter: [\"style\", \"class\"]\n });\n if (windowScroll)\n useEventListener(\"scroll\", update, { capture: true, passive: true });\n if (windowResize)\n useEventListener(\"resize\", update, { passive: true });\n tryOnMounted(() => {\n if (immediate)\n update();\n });\n return {\n height,\n bottom,\n left,\n right,\n top,\n width,\n x,\n y,\n update\n };\n}\n\nfunction useElementByPoint(options) {\n const {\n x,\n y,\n document = defaultDocument,\n multiple,\n interval = \"requestAnimationFrame\",\n immediate = true\n } = options;\n const isSupported = useSupported(() => {\n if (toValue(multiple))\n return document && \"elementsFromPoint\" in document;\n return document && \"elementFromPoint\" in document;\n });\n const element = ref(null);\n const cb = () => {\n var _a, _b;\n element.value = toValue(multiple) ? (_a = document == null ? undefined : document.elementsFromPoint(toValue(x), toValue(y))) != null ? _a : [] : (_b = document == null ? undefined : document.elementFromPoint(toValue(x), toValue(y))) != null ? _b : null;\n };\n const controls = interval === \"requestAnimationFrame\" ? useRafFn(cb, { immediate }) : useIntervalFn(cb, interval, { immediate });\n return {\n isSupported,\n element,\n ...controls\n };\n}\n\nfunction useElementHover(el, options = {}) {\n const {\n delayEnter = 0,\n delayLeave = 0,\n triggerOnRemoval = false,\n window = defaultWindow\n } = options;\n const isHovered = ref(false);\n let timer;\n const toggle = (entering) => {\n const delay = entering ? delayEnter : delayLeave;\n if (timer) {\n clearTimeout(timer);\n timer = undefined;\n }\n if (delay)\n timer = setTimeout(() => isHovered.value = entering, delay);\n else\n isHovered.value = entering;\n };\n if (!window)\n return isHovered;\n useEventListener(el, \"mouseenter\", () => toggle(true), { passive: true });\n useEventListener(el, \"mouseleave\", () => toggle(false), { passive: true });\n if (triggerOnRemoval) {\n onElementRemoval(\n computed(() => unrefElement(el)),\n () => toggle(false)\n );\n }\n return isHovered;\n}\n\nfunction useElementSize(target, initialSize = { width: 0, height: 0 }, options = {}) {\n const { window = defaultWindow, box = \"content-box\" } = options;\n const isSVG = computed(() => {\n var _a, _b;\n return (_b = (_a = unrefElement(target)) == null ? undefined : _a.namespaceURI) == null ? undefined : _b.includes(\"svg\");\n });\n const width = ref(initialSize.width);\n const height = ref(initialSize.height);\n const { stop: stop1 } = useResizeObserver(\n target,\n ([entry]) => {\n const boxSize = box === \"border-box\" ? entry.borderBoxSize : box === \"content-box\" ? entry.contentBoxSize : entry.devicePixelContentBoxSize;\n if (window && isSVG.value) {\n const $elem = unrefElement(target);\n if ($elem) {\n const rect = $elem.getBoundingClientRect();\n width.value = rect.width;\n height.value = rect.height;\n }\n } else {\n if (boxSize) {\n const formatBoxSize = toArray(boxSize);\n width.value = formatBoxSize.reduce((acc, { inlineSize }) => acc + inlineSize, 0);\n height.value = formatBoxSize.reduce((acc, { blockSize }) => acc + blockSize, 0);\n } else {\n width.value = entry.contentRect.width;\n height.value = entry.contentRect.height;\n }\n }\n },\n options\n );\n tryOnMounted(() => {\n const ele = unrefElement(target);\n if (ele) {\n width.value = \"offsetWidth\" in ele ? ele.offsetWidth : initialSize.width;\n height.value = \"offsetHeight\" in ele ? ele.offsetHeight : initialSize.height;\n }\n });\n const stop2 = watch(\n () => unrefElement(target),\n (ele) => {\n width.value = ele ? initialSize.width : 0;\n height.value = ele ? initialSize.height : 0;\n }\n );\n function stop() {\n stop1();\n stop2();\n }\n return {\n width,\n height,\n stop\n };\n}\n\nfunction useIntersectionObserver(target, callback, options = {}) {\n const {\n root,\n rootMargin = \"0px\",\n threshold = 0,\n window = defaultWindow,\n immediate = true\n } = options;\n const isSupported = useSupported(() => window && \"IntersectionObserver\" in window);\n const targets = computed(() => {\n const _target = toValue(target);\n return toArray(_target).map(unrefElement).filter(notNullish);\n });\n let cleanup = noop;\n const isActive = ref(immediate);\n const stopWatch = isSupported.value ? watch(\n () => [targets.value, unrefElement(root), isActive.value],\n ([targets2, root2]) => {\n cleanup();\n if (!isActive.value)\n return;\n if (!targets2.length)\n return;\n const observer = new IntersectionObserver(\n callback,\n {\n root: unrefElement(root2),\n rootMargin,\n threshold\n }\n );\n targets2.forEach((el) => el && observer.observe(el));\n cleanup = () => {\n observer.disconnect();\n cleanup = noop;\n };\n },\n { immediate, flush: \"post\" }\n ) : noop;\n const stop = () => {\n cleanup();\n stopWatch();\n isActive.value = false;\n };\n tryOnScopeDispose(stop);\n return {\n isSupported,\n isActive,\n pause() {\n cleanup();\n isActive.value = false;\n },\n resume() {\n isActive.value = true;\n },\n stop\n };\n}\n\nfunction useElementVisibility(element, options = {}) {\n const {\n window = defaultWindow,\n scrollTarget,\n threshold = 0,\n rootMargin\n } = options;\n const elementIsVisible = ref(false);\n useIntersectionObserver(\n element,\n (intersectionObserverEntries) => {\n let isIntersecting = elementIsVisible.value;\n let latestTime = 0;\n for (const entry of intersectionObserverEntries) {\n if (entry.time >= latestTime) {\n latestTime = entry.time;\n isIntersecting = entry.isIntersecting;\n }\n }\n elementIsVisible.value = isIntersecting;\n },\n {\n root: scrollTarget,\n window,\n threshold,\n rootMargin: toValue(rootMargin)\n }\n );\n return elementIsVisible;\n}\n\nconst events = /* @__PURE__ */ new Map();\n\nfunction useEventBus(key) {\n const scope = getCurrentScope();\n function on(listener) {\n var _a;\n const listeners = events.get(key) || /* @__PURE__ */ new Set();\n listeners.add(listener);\n events.set(key, listeners);\n const _off = () => off(listener);\n (_a = scope == null ? undefined : scope.cleanups) == null ? undefined : _a.push(_off);\n return _off;\n }\n function once(listener) {\n function _listener(...args) {\n off(_listener);\n listener(...args);\n }\n return on(_listener);\n }\n function off(listener) {\n const listeners = events.get(key);\n if (!listeners)\n return;\n listeners.delete(listener);\n if (!listeners.size)\n reset();\n }\n function reset() {\n events.delete(key);\n }\n function emit(event, payload) {\n var _a;\n (_a = events.get(key)) == null ? undefined : _a.forEach((v) => v(event, payload));\n }\n return { on, once, off, emit, reset };\n}\n\nfunction resolveNestedOptions$1(options) {\n if (options === true)\n return {};\n return options;\n}\nfunction useEventSource(url, events = [], options = {}) {\n const event = ref(null);\n const data = ref(null);\n const status = ref(\"CONNECTING\");\n const eventSource = ref(null);\n const error = shallowRef(null);\n const urlRef = toRef(url);\n const lastEventId = shallowRef(null);\n let explicitlyClosed = false;\n let retried = 0;\n const {\n withCredentials = false,\n immediate = true,\n autoConnect = true,\n autoReconnect\n } = options;\n const close = () => {\n if (isClient && eventSource.value) {\n eventSource.value.close();\n eventSource.value = null;\n status.value = \"CLOSED\";\n explicitlyClosed = true;\n }\n };\n const _init = () => {\n if (explicitlyClosed || typeof urlRef.value === \"undefined\")\n return;\n const es = new EventSource(urlRef.value, { withCredentials });\n status.value = \"CONNECTING\";\n eventSource.value = es;\n es.onopen = () => {\n status.value = \"OPEN\";\n error.value = null;\n };\n es.onerror = (e) => {\n status.value = \"CLOSED\";\n error.value = e;\n if (es.readyState === 2 && !explicitlyClosed && autoReconnect) {\n es.close();\n const {\n retries = -1,\n delay = 1e3,\n onFailed\n } = resolveNestedOptions$1(autoReconnect);\n retried += 1;\n if (typeof retries === \"number\" && (retries < 0 || retried < retries))\n setTimeout(_init, delay);\n else if (typeof retries === \"function\" && retries())\n setTimeout(_init, delay);\n else\n onFailed == null ? undefined : onFailed();\n }\n };\n es.onmessage = (e) => {\n event.value = null;\n data.value = e.data;\n lastEventId.value = e.lastEventId;\n };\n for (const event_name of events) {\n useEventListener(es, event_name, (e) => {\n event.value = event_name;\n data.value = e.data || null;\n });\n }\n };\n const open = () => {\n if (!isClient)\n return;\n close();\n explicitlyClosed = false;\n retried = 0;\n _init();\n };\n if (immediate)\n open();\n if (autoConnect)\n watch(urlRef, open);\n tryOnScopeDispose(close);\n return {\n eventSource,\n event,\n data,\n status,\n error,\n open,\n close,\n lastEventId\n };\n}\n\nfunction useEyeDropper(options = {}) {\n const { initialValue = \"\" } = options;\n const isSupported = useSupported(() => typeof window !== \"undefined\" && \"EyeDropper\" in window);\n const sRGBHex = ref(initialValue);\n async function open(openOptions) {\n if (!isSupported.value)\n return;\n const eyeDropper = new window.EyeDropper();\n const result = await eyeDropper.open(openOptions);\n sRGBHex.value = result.sRGBHex;\n return result;\n }\n return { isSupported, sRGBHex, open };\n}\n\nfunction useFavicon(newIcon = null, options = {}) {\n const {\n baseUrl = \"\",\n rel = \"icon\",\n document = defaultDocument\n } = options;\n const favicon = toRef(newIcon);\n const applyIcon = (icon) => {\n const elements = document == null ? undefined : document.head.querySelectorAll(`link[rel*=\"${rel}\"]`);\n if (!elements || elements.length === 0) {\n const link = document == null ? undefined : document.createElement(\"link\");\n if (link) {\n link.rel = rel;\n link.href = `${baseUrl}${icon}`;\n link.type = `image/${icon.split(\".\").pop()}`;\n document == null ? undefined : document.head.append(link);\n }\n return;\n }\n elements == null ? undefined : elements.forEach((el) => el.href = `${baseUrl}${icon}`);\n };\n watch(\n favicon,\n (i, o) => {\n if (typeof i === \"string\" && i !== o)\n applyIcon(i);\n },\n { immediate: true }\n );\n return favicon;\n}\n\nconst payloadMapping = {\n json: \"application/json\",\n text: \"text/plain\"\n};\nfunction isFetchOptions(obj) {\n return obj && containsProp(obj, \"immediate\", \"refetch\", \"initialData\", \"timeout\", \"beforeFetch\", \"afterFetch\", \"onFetchError\", \"fetch\", \"updateDataOnError\");\n}\nconst reAbsolute = /^(?:[a-z][a-z\\d+\\-.]*:)?\\/\\//i;\nfunction isAbsoluteURL(url) {\n return reAbsolute.test(url);\n}\nfunction headersToObject(headers) {\n if (typeof Headers !== \"undefined\" && headers instanceof Headers)\n return Object.fromEntries(headers.entries());\n return headers;\n}\nfunction combineCallbacks(combination, ...callbacks) {\n if (combination === \"overwrite\") {\n return async (ctx) => {\n const callback = callbacks[callbacks.length - 1];\n if (callback)\n return { ...ctx, ...await callback(ctx) };\n return ctx;\n };\n } else {\n return async (ctx) => {\n for (const callback of callbacks) {\n if (callback)\n ctx = { ...ctx, ...await callback(ctx) };\n }\n return ctx;\n };\n }\n}\nfunction createFetch(config = {}) {\n const _combination = config.combination || \"chain\";\n const _options = config.options || {};\n const _fetchOptions = config.fetchOptions || {};\n function useFactoryFetch(url, ...args) {\n const computedUrl = computed(() => {\n const baseUrl = toValue(config.baseUrl);\n const targetUrl = toValue(url);\n return baseUrl && !isAbsoluteURL(targetUrl) ? joinPaths(baseUrl, targetUrl) : targetUrl;\n });\n let options = _options;\n let fetchOptions = _fetchOptions;\n if (args.length > 0) {\n if (isFetchOptions(args[0])) {\n options = {\n ...options,\n ...args[0],\n beforeFetch: combineCallbacks(_combination, _options.beforeFetch, args[0].beforeFetch),\n afterFetch: combineCallbacks(_combination, _options.afterFetch, args[0].afterFetch),\n onFetchError: combineCallbacks(_combination, _options.onFetchError, args[0].onFetchError)\n };\n } else {\n fetchOptions = {\n ...fetchOptions,\n ...args[0],\n headers: {\n ...headersToObject(fetchOptions.headers) || {},\n ...headersToObject(args[0].headers) || {}\n }\n };\n }\n }\n if (args.length > 1 && isFetchOptions(args[1])) {\n options = {\n ...options,\n ...args[1],\n beforeFetch: combineCallbacks(_combination, _options.beforeFetch, args[1].beforeFetch),\n afterFetch: combineCallbacks(_combination, _options.afterFetch, args[1].afterFetch),\n onFetchError: combineCallbacks(_combination, _options.onFetchError, args[1].onFetchError)\n };\n }\n return useFetch(computedUrl, fetchOptions, options);\n }\n return useFactoryFetch;\n}\nfunction useFetch(url, ...args) {\n var _a;\n const supportsAbort = typeof AbortController === \"function\";\n let fetchOptions = {};\n let options = {\n immediate: true,\n refetch: false,\n timeout: 0,\n updateDataOnError: false\n };\n const config = {\n method: \"GET\",\n type: \"text\",\n payload: undefined\n };\n if (args.length > 0) {\n if (isFetchOptions(args[0]))\n options = { ...options, ...args[0] };\n else\n fetchOptions = args[0];\n }\n if (args.length > 1) {\n if (isFetchOptions(args[1]))\n options = { ...options, ...args[1] };\n }\n const {\n fetch = (_a = defaultWindow) == null ? undefined : _a.fetch,\n initialData,\n timeout\n } = options;\n const responseEvent = createEventHook();\n const errorEvent = createEventHook();\n const finallyEvent = createEventHook();\n const isFinished = ref(false);\n const isFetching = ref(false);\n const aborted = ref(false);\n const statusCode = ref(null);\n const response = shallowRef(null);\n const error = shallowRef(null);\n const data = shallowRef(initialData || null);\n const canAbort = computed(() => supportsAbort && isFetching.value);\n let controller;\n let timer;\n const abort = () => {\n if (supportsAbort) {\n controller == null ? undefined : controller.abort();\n controller = new AbortController();\n controller.signal.onabort = () => aborted.value = true;\n fetchOptions = {\n ...fetchOptions,\n signal: controller.signal\n };\n }\n };\n const loading = (isLoading) => {\n isFetching.value = isLoading;\n isFinished.value = !isLoading;\n };\n if (timeout)\n timer = useTimeoutFn(abort, timeout, { immediate: false });\n let executeCounter = 0;\n const execute = async (throwOnFailed = false) => {\n var _a2, _b;\n abort();\n loading(true);\n error.value = null;\n statusCode.value = null;\n aborted.value = false;\n executeCounter += 1;\n const currentExecuteCounter = executeCounter;\n const defaultFetchOptions = {\n method: config.method,\n headers: {}\n };\n const payload = toValue(config.payload);\n if (payload) {\n const headers = headersToObject(defaultFetchOptions.headers);\n const proto = Object.getPrototypeOf(payload);\n if (!config.payloadType && payload && (proto === Object.prototype || Array.isArray(proto)) && !(payload instanceof FormData))\n config.payloadType = \"json\";\n if (config.payloadType)\n headers[\"Content-Type\"] = (_a2 = payloadMapping[config.payloadType]) != null ? _a2 : config.payloadType;\n defaultFetchOptions.body = config.payloadType === \"json\" ? JSON.stringify(payload) : payload;\n }\n let isCanceled = false;\n const context = {\n url: toValue(url),\n options: {\n ...defaultFetchOptions,\n ...fetchOptions\n },\n cancel: () => {\n isCanceled = true;\n }\n };\n if (options.beforeFetch)\n Object.assign(context, await options.beforeFetch(context));\n if (isCanceled || !fetch) {\n loading(false);\n return Promise.resolve(null);\n }\n let responseData = null;\n if (timer)\n timer.start();\n return fetch(\n context.url,\n {\n ...defaultFetchOptions,\n ...context.options,\n headers: {\n ...headersToObject(defaultFetchOptions.headers),\n ...headersToObject((_b = context.options) == null ? undefined : _b.headers)\n }\n }\n ).then(async (fetchResponse) => {\n response.value = fetchResponse;\n statusCode.value = fetchResponse.status;\n responseData = await fetchResponse.clone()[config.type]();\n if (!fetchResponse.ok) {\n data.value = initialData || null;\n throw new Error(fetchResponse.statusText);\n }\n if (options.afterFetch) {\n ({ data: responseData } = await options.afterFetch({\n data: responseData,\n response: fetchResponse\n }));\n }\n data.value = responseData;\n responseEvent.trigger(fetchResponse);\n return fetchResponse;\n }).catch(async (fetchError) => {\n let errorData = fetchError.message || fetchError.name;\n if (options.onFetchError) {\n ({ error: errorData, data: responseData } = await options.onFetchError({\n data: responseData,\n error: fetchError,\n response: response.value\n }));\n }\n error.value = errorData;\n if (options.updateDataOnError)\n data.value = responseData;\n errorEvent.trigger(fetchError);\n if (throwOnFailed)\n throw fetchError;\n return null;\n }).finally(() => {\n if (currentExecuteCounter === executeCounter)\n loading(false);\n if (timer)\n timer.stop();\n finallyEvent.trigger(null);\n });\n };\n const refetch = toRef(options.refetch);\n watch(\n [\n refetch,\n toRef(url)\n ],\n ([refetch2]) => refetch2 && execute(),\n { deep: true }\n );\n const shell = {\n isFinished: readonly(isFinished),\n isFetching: readonly(isFetching),\n statusCode,\n response,\n error,\n data,\n canAbort,\n aborted,\n abort,\n execute,\n onFetchResponse: responseEvent.on,\n onFetchError: errorEvent.on,\n onFetchFinally: finallyEvent.on,\n // method\n get: setMethod(\"GET\"),\n put: setMethod(\"PUT\"),\n post: setMethod(\"POST\"),\n delete: setMethod(\"DELETE\"),\n patch: setMethod(\"PATCH\"),\n head: setMethod(\"HEAD\"),\n options: setMethod(\"OPTIONS\"),\n // type\n json: setType(\"json\"),\n text: setType(\"text\"),\n blob: setType(\"blob\"),\n arrayBuffer: setType(\"arrayBuffer\"),\n formData: setType(\"formData\")\n };\n function setMethod(method) {\n return (payload, payloadType) => {\n if (!isFetching.value) {\n config.method = method;\n config.payload = payload;\n config.payloadType = payloadType;\n if (isRef(config.payload)) {\n watch(\n [\n refetch,\n toRef(config.payload)\n ],\n ([refetch2]) => refetch2 && execute(),\n { deep: true }\n );\n }\n return {\n ...shell,\n then(onFulfilled, onRejected) {\n return waitUntilFinished().then(onFulfilled, onRejected);\n }\n };\n }\n return undefined;\n };\n }\n function waitUntilFinished() {\n return new Promise((resolve, reject) => {\n until(isFinished).toBe(true).then(() => resolve(shell)).catch(reject);\n });\n }\n function setType(type) {\n return () => {\n if (!isFetching.value) {\n config.type = type;\n return {\n ...shell,\n then(onFulfilled, onRejected) {\n return waitUntilFinished().then(onFulfilled, onRejected);\n }\n };\n }\n return undefined;\n };\n }\n if (options.immediate)\n Promise.resolve().then(() => execute());\n return {\n ...shell,\n then(onFulfilled, onRejected) {\n return waitUntilFinished().then(onFulfilled, onRejected);\n }\n };\n}\nfunction joinPaths(start, end) {\n if (!start.endsWith(\"/\") && !end.startsWith(\"/\")) {\n return `${start}/${end}`;\n }\n if (start.endsWith(\"/\") && end.startsWith(\"/\")) {\n return `${start.slice(0, -1)}${end}`;\n }\n return `${start}${end}`;\n}\n\nconst DEFAULT_OPTIONS = {\n multiple: true,\n accept: \"*\",\n reset: false,\n directory: false\n};\nfunction useFileDialog(options = {}) {\n const {\n document = defaultDocument\n } = options;\n const files = ref(null);\n const { on: onChange, trigger: changeTrigger } = createEventHook();\n const { on: onCancel, trigger: cancelTrigger } = createEventHook();\n let input;\n if (document) {\n input = document.createElement(\"input\");\n input.type = \"file\";\n input.onchange = (event) => {\n const result = event.target;\n files.value = result.files;\n changeTrigger(files.value);\n };\n input.oncancel = () => {\n cancelTrigger();\n };\n }\n const reset = () => {\n files.value = null;\n if (input && input.value) {\n input.value = \"\";\n changeTrigger(null);\n }\n };\n const open = (localOptions) => {\n if (!input)\n return;\n const _options = {\n ...DEFAULT_OPTIONS,\n ...options,\n ...localOptions\n };\n input.multiple = _options.multiple;\n input.accept = _options.accept;\n input.webkitdirectory = _options.directory;\n if (hasOwn(_options, \"capture\"))\n input.capture = _options.capture;\n if (_options.reset)\n reset();\n input.click();\n };\n return {\n files: readonly(files),\n open,\n reset,\n onCancel,\n onChange\n };\n}\n\nfunction useFileSystemAccess(options = {}) {\n const {\n window: _window = defaultWindow,\n dataType = \"Text\"\n } = options;\n const window = _window;\n const isSupported = useSupported(() => window && \"showSaveFilePicker\" in window && \"showOpenFilePicker\" in window);\n const fileHandle = ref();\n const data = ref();\n const file = ref();\n const fileName = computed(() => {\n var _a, _b;\n return (_b = (_a = file.value) == null ? undefined : _a.name) != null ? _b : \"\";\n });\n const fileMIME = computed(() => {\n var _a, _b;\n return (_b = (_a = file.value) == null ? undefined : _a.type) != null ? _b : \"\";\n });\n const fileSize = computed(() => {\n var _a, _b;\n return (_b = (_a = file.value) == null ? undefined : _a.size) != null ? _b : 0;\n });\n const fileLastModified = computed(() => {\n var _a, _b;\n return (_b = (_a = file.value) == null ? undefined : _a.lastModified) != null ? _b : 0;\n });\n async function open(_options = {}) {\n if (!isSupported.value)\n return;\n const [handle] = await window.showOpenFilePicker({ ...toValue(options), ..._options });\n fileHandle.value = handle;\n await updateData();\n }\n async function create(_options = {}) {\n if (!isSupported.value)\n return;\n fileHandle.value = await window.showSaveFilePicker({ ...options, ..._options });\n data.value = undefined;\n await updateData();\n }\n async function save(_options = {}) {\n if (!isSupported.value)\n return;\n if (!fileHandle.value)\n return saveAs(_options);\n if (data.value) {\n const writableStream = await fileHandle.value.createWritable();\n await writableStream.write(data.value);\n await writableStream.close();\n }\n await updateFile();\n }\n async function saveAs(_options = {}) {\n if (!isSupported.value)\n return;\n fileHandle.value = await window.showSaveFilePicker({ ...options, ..._options });\n if (data.value) {\n const writableStream = await fileHandle.value.createWritable();\n await writableStream.write(data.value);\n await writableStream.close();\n }\n await updateFile();\n }\n async function updateFile() {\n var _a;\n file.value = await ((_a = fileHandle.value) == null ? undefined : _a.getFile());\n }\n async function updateData() {\n var _a, _b;\n await updateFile();\n const type = toValue(dataType);\n if (type === \"Text\")\n data.value = await ((_a = file.value) == null ? undefined : _a.text());\n else if (type === \"ArrayBuffer\")\n data.value = await ((_b = file.value) == null ? undefined : _b.arrayBuffer());\n else if (type === \"Blob\")\n data.value = file.value;\n }\n watch(() => toValue(dataType), updateData);\n return {\n isSupported,\n data,\n file,\n fileName,\n fileMIME,\n fileSize,\n fileLastModified,\n open,\n create,\n save,\n saveAs,\n updateData\n };\n}\n\nfunction useFocus(target, options = {}) {\n const { initialValue = false, focusVisible = false, preventScroll = false } = options;\n const innerFocused = ref(false);\n const targetElement = computed(() => unrefElement(target));\n const listenerOptions = { passive: true };\n useEventListener(targetElement, \"focus\", (event) => {\n var _a, _b;\n if (!focusVisible || ((_b = (_a = event.target).matches) == null ? undefined : _b.call(_a, \":focus-visible\")))\n innerFocused.value = true;\n }, listenerOptions);\n useEventListener(targetElement, \"blur\", () => innerFocused.value = false, listenerOptions);\n const focused = computed({\n get: () => innerFocused.value,\n set(value) {\n var _a, _b;\n if (!value && innerFocused.value)\n (_a = targetElement.value) == null ? undefined : _a.blur();\n else if (value && !innerFocused.value)\n (_b = targetElement.value) == null ? undefined : _b.focus({ preventScroll });\n }\n });\n watch(\n targetElement,\n () => {\n focused.value = initialValue;\n },\n { immediate: true, flush: \"post\" }\n );\n return { focused };\n}\n\nconst EVENT_FOCUS_IN = \"focusin\";\nconst EVENT_FOCUS_OUT = \"focusout\";\nconst PSEUDO_CLASS_FOCUS_WITHIN = \":focus-within\";\nfunction useFocusWithin(target, options = {}) {\n const { window = defaultWindow } = options;\n const targetElement = computed(() => unrefElement(target));\n const _focused = ref(false);\n const focused = computed(() => _focused.value);\n const activeElement = useActiveElement(options);\n if (!window || !activeElement.value) {\n return { focused };\n }\n const listenerOptions = { passive: true };\n useEventListener(targetElement, EVENT_FOCUS_IN, () => _focused.value = true, listenerOptions);\n useEventListener(targetElement, EVENT_FOCUS_OUT, () => {\n var _a, _b, _c;\n return _focused.value = (_c = (_b = (_a = targetElement.value) == null ? undefined : _a.matches) == null ? undefined : _b.call(_a, PSEUDO_CLASS_FOCUS_WITHIN)) != null ? _c : false;\n }, listenerOptions);\n return { focused };\n}\n\nfunction useFps(options) {\n var _a;\n const fps = ref(0);\n if (typeof performance === \"undefined\")\n return fps;\n const every = (_a = options == null ? undefined : options.every) != null ? _a : 10;\n let last = performance.now();\n let ticks = 0;\n useRafFn(() => {\n ticks += 1;\n if (ticks >= every) {\n const now = performance.now();\n const diff = now - last;\n fps.value = Math.round(1e3 / (diff / ticks));\n last = now;\n ticks = 0;\n }\n });\n return fps;\n}\n\nconst eventHandlers = [\n \"fullscreenchange\",\n \"webkitfullscreenchange\",\n \"webkitendfullscreen\",\n \"mozfullscreenchange\",\n \"MSFullscreenChange\"\n];\nfunction useFullscreen(target, options = {}) {\n const {\n document = defaultDocument,\n autoExit = false\n } = options;\n const targetRef = computed(() => {\n var _a;\n return (_a = unrefElement(target)) != null ? _a : document == null ? undefined : document.querySelector(\"html\");\n });\n const isFullscreen = ref(false);\n const requestMethod = computed(() => {\n return [\n \"requestFullscreen\",\n \"webkitRequestFullscreen\",\n \"webkitEnterFullscreen\",\n \"webkitEnterFullScreen\",\n \"webkitRequestFullScreen\",\n \"mozRequestFullScreen\",\n \"msRequestFullscreen\"\n ].find((m) => document && m in document || targetRef.value && m in targetRef.value);\n });\n const exitMethod = computed(() => {\n return [\n \"exitFullscreen\",\n \"webkitExitFullscreen\",\n \"webkitExitFullScreen\",\n \"webkitCancelFullScreen\",\n \"mozCancelFullScreen\",\n \"msExitFullscreen\"\n ].find((m) => document && m in document || targetRef.value && m in targetRef.value);\n });\n const fullscreenEnabled = computed(() => {\n return [\n \"fullScreen\",\n \"webkitIsFullScreen\",\n \"webkitDisplayingFullscreen\",\n \"mozFullScreen\",\n \"msFullscreenElement\"\n ].find((m) => document && m in document || targetRef.value && m in targetRef.value);\n });\n const fullscreenElementMethod = [\n \"fullscreenElement\",\n \"webkitFullscreenElement\",\n \"mozFullScreenElement\",\n \"msFullscreenElement\"\n ].find((m) => document && m in document);\n const isSupported = useSupported(() => targetRef.value && document && requestMethod.value !== undefined && exitMethod.value !== undefined && fullscreenEnabled.value !== undefined);\n const isCurrentElementFullScreen = () => {\n if (fullscreenElementMethod)\n return (document == null ? undefined : document[fullscreenElementMethod]) === targetRef.value;\n return false;\n };\n const isElementFullScreen = () => {\n if (fullscreenEnabled.value) {\n if (document && document[fullscreenEnabled.value] != null) {\n return document[fullscreenEnabled.value];\n } else {\n const target2 = targetRef.value;\n if ((target2 == null ? undefined : target2[fullscreenEnabled.value]) != null) {\n return Boolean(target2[fullscreenEnabled.value]);\n }\n }\n }\n return false;\n };\n async function exit() {\n if (!isSupported.value || !isFullscreen.value)\n return;\n if (exitMethod.value) {\n if ((document == null ? undefined : document[exitMethod.value]) != null) {\n await document[exitMethod.value]();\n } else {\n const target2 = targetRef.value;\n if ((target2 == null ? undefined : target2[exitMethod.value]) != null)\n await target2[exitMethod.value]();\n }\n }\n isFullscreen.value = false;\n }\n async function enter() {\n if (!isSupported.value || isFullscreen.value)\n return;\n if (isElementFullScreen())\n await exit();\n const target2 = targetRef.value;\n if (requestMethod.value && (target2 == null ? undefined : target2[requestMethod.value]) != null) {\n await target2[requestMethod.value]();\n isFullscreen.value = true;\n }\n }\n async function toggle() {\n await (isFullscreen.value ? exit() : enter());\n }\n const handlerCallback = () => {\n const isElementFullScreenValue = isElementFullScreen();\n if (!isElementFullScreenValue || isElementFullScreenValue && isCurrentElementFullScreen())\n isFullscreen.value = isElementFullScreenValue;\n };\n const listenerOptions = { capture: false, passive: true };\n useEventListener(document, eventHandlers, handlerCallback, listenerOptions);\n useEventListener(() => unrefElement(targetRef), eventHandlers, handlerCallback, listenerOptions);\n if (autoExit)\n tryOnScopeDispose(exit);\n return {\n isSupported,\n isFullscreen,\n enter,\n exit,\n toggle\n };\n}\n\nfunction mapGamepadToXbox360Controller(gamepad) {\n return computed(() => {\n if (gamepad.value) {\n return {\n buttons: {\n a: gamepad.value.buttons[0],\n b: gamepad.value.buttons[1],\n x: gamepad.value.buttons[2],\n y: gamepad.value.buttons[3]\n },\n bumper: {\n left: gamepad.value.buttons[4],\n right: gamepad.value.buttons[5]\n },\n triggers: {\n left: gamepad.value.buttons[6],\n right: gamepad.value.buttons[7]\n },\n stick: {\n left: {\n horizontal: gamepad.value.axes[0],\n vertical: gamepad.value.axes[1],\n button: gamepad.value.buttons[10]\n },\n right: {\n horizontal: gamepad.value.axes[2],\n vertical: gamepad.value.axes[3],\n button: gamepad.value.buttons[11]\n }\n },\n dpad: {\n up: gamepad.value.buttons[12],\n down: gamepad.value.buttons[13],\n left: gamepad.value.buttons[14],\n right: gamepad.value.buttons[15]\n },\n back: gamepad.value.buttons[8],\n start: gamepad.value.buttons[9]\n };\n }\n return null;\n });\n}\nfunction useGamepad(options = {}) {\n const {\n navigator = defaultNavigator\n } = options;\n const isSupported = useSupported(() => navigator && \"getGamepads\" in navigator);\n const gamepads = ref([]);\n const onConnectedHook = createEventHook();\n const onDisconnectedHook = createEventHook();\n const stateFromGamepad = (gamepad) => {\n const hapticActuators = [];\n const vibrationActuator = \"vibrationActuator\" in gamepad ? gamepad.vibrationActuator : null;\n if (vibrationActuator)\n hapticActuators.push(vibrationActuator);\n if (gamepad.hapticActuators)\n hapticActuators.push(...gamepad.hapticActuators);\n return {\n id: gamepad.id,\n index: gamepad.index,\n connected: gamepad.connected,\n mapping: gamepad.mapping,\n timestamp: gamepad.timestamp,\n vibrationActuator: gamepad.vibrationActuator,\n hapticActuators,\n axes: gamepad.axes.map((axes) => axes),\n buttons: gamepad.buttons.map((button) => ({ pressed: button.pressed, touched: button.touched, value: button.value }))\n };\n };\n const updateGamepadState = () => {\n const _gamepads = (navigator == null ? undefined : navigator.getGamepads()) || [];\n for (const gamepad of _gamepads) {\n if (gamepad && gamepads.value[gamepad.index])\n gamepads.value[gamepad.index] = stateFromGamepad(gamepad);\n }\n };\n const { isActive, pause, resume } = useRafFn(updateGamepadState);\n const onGamepadConnected = (gamepad) => {\n if (!gamepads.value.some(({ index }) => index === gamepad.index)) {\n gamepads.value.push(stateFromGamepad(gamepad));\n onConnectedHook.trigger(gamepad.index);\n }\n resume();\n };\n const onGamepadDisconnected = (gamepad) => {\n gamepads.value = gamepads.value.filter((x) => x.index !== gamepad.index);\n onDisconnectedHook.trigger(gamepad.index);\n };\n const listenerOptions = { passive: true };\n useEventListener(\"gamepadconnected\", (e) => onGamepadConnected(e.gamepad), listenerOptions);\n useEventListener(\"gamepaddisconnected\", (e) => onGamepadDisconnected(e.gamepad), listenerOptions);\n tryOnMounted(() => {\n const _gamepads = (navigator == null ? undefined : navigator.getGamepads()) || [];\n for (const gamepad of _gamepads) {\n if (gamepad && gamepads.value[gamepad.index])\n onGamepadConnected(gamepad);\n }\n });\n pause();\n return {\n isSupported,\n onConnected: onConnectedHook.on,\n onDisconnected: onDisconnectedHook.on,\n gamepads,\n pause,\n resume,\n isActive\n };\n}\n\nfunction useGeolocation(options = {}) {\n const {\n enableHighAccuracy = true,\n maximumAge = 3e4,\n timeout = 27e3,\n navigator = defaultNavigator,\n immediate = true\n } = options;\n const isSupported = useSupported(() => navigator && \"geolocation\" in navigator);\n const locatedAt = ref(null);\n const error = shallowRef(null);\n const coords = ref({\n accuracy: 0,\n latitude: Number.POSITIVE_INFINITY,\n longitude: Number.POSITIVE_INFINITY,\n altitude: null,\n altitudeAccuracy: null,\n heading: null,\n speed: null\n });\n function updatePosition(position) {\n locatedAt.value = position.timestamp;\n coords.value = position.coords;\n error.value = null;\n }\n let watcher;\n function resume() {\n if (isSupported.value) {\n watcher = navigator.geolocation.watchPosition(\n updatePosition,\n (err) => error.value = err,\n {\n enableHighAccuracy,\n maximumAge,\n timeout\n }\n );\n }\n }\n if (immediate)\n resume();\n function pause() {\n if (watcher && navigator)\n navigator.geolocation.clearWatch(watcher);\n }\n tryOnScopeDispose(() => {\n pause();\n });\n return {\n isSupported,\n coords,\n locatedAt,\n error,\n resume,\n pause\n };\n}\n\nconst defaultEvents$1 = [\"mousemove\", \"mousedown\", \"resize\", \"keydown\", \"touchstart\", \"wheel\"];\nconst oneMinute = 6e4;\nfunction useIdle(timeout = oneMinute, options = {}) {\n const {\n initialState = false,\n listenForVisibilityChange = true,\n events = defaultEvents$1,\n window = defaultWindow,\n eventFilter = throttleFilter(50)\n } = options;\n const idle = ref(initialState);\n const lastActive = ref(timestamp());\n let timer;\n const reset = () => {\n idle.value = false;\n clearTimeout(timer);\n timer = setTimeout(() => idle.value = true, timeout);\n };\n const onEvent = createFilterWrapper(\n eventFilter,\n () => {\n lastActive.value = timestamp();\n reset();\n }\n );\n if (window) {\n const document = window.document;\n const listenerOptions = { passive: true };\n for (const event of events)\n useEventListener(window, event, onEvent, listenerOptions);\n if (listenForVisibilityChange) {\n useEventListener(document, \"visibilitychange\", () => {\n if (!document.hidden)\n onEvent();\n }, listenerOptions);\n }\n reset();\n }\n return {\n idle,\n lastActive,\n reset\n };\n}\n\nasync function loadImage(options) {\n return new Promise((resolve, reject) => {\n const img = new Image();\n const { src, srcset, sizes, class: clazz, loading, crossorigin, referrerPolicy, width, height, decoding, fetchPriority, ismap, usemap } = options;\n img.src = src;\n if (srcset != null)\n img.srcset = srcset;\n if (sizes != null)\n img.sizes = sizes;\n if (clazz != null)\n img.className = clazz;\n if (loading != null)\n img.loading = loading;\n if (crossorigin != null)\n img.crossOrigin = crossorigin;\n if (referrerPolicy != null)\n img.referrerPolicy = referrerPolicy;\n if (width != null)\n img.width = width;\n if (height != null)\n img.height = height;\n if (decoding != null)\n img.decoding = decoding;\n if (fetchPriority != null)\n img.fetchPriority = fetchPriority;\n if (ismap != null)\n img.isMap = ismap;\n if (usemap != null)\n img.useMap = usemap;\n img.onload = () => resolve(img);\n img.onerror = reject;\n });\n}\nfunction useImage(options, asyncStateOptions = {}) {\n const state = useAsyncState(\n () => loadImage(toValue(options)),\n undefined,\n {\n resetOnExecute: true,\n ...asyncStateOptions\n }\n );\n watch(\n () => toValue(options),\n () => state.execute(asyncStateOptions.delay),\n { deep: true }\n );\n return state;\n}\n\nfunction resolveElement(el) {\n if (typeof Window !== \"undefined\" && el instanceof Window)\n return el.document.documentElement;\n if (typeof Document !== \"undefined\" && el instanceof Document)\n return el.documentElement;\n return el;\n}\n\nconst ARRIVED_STATE_THRESHOLD_PIXELS = 1;\nfunction useScroll(element, options = {}) {\n const {\n throttle = 0,\n idle = 200,\n onStop = noop,\n onScroll = noop,\n offset = {\n left: 0,\n right: 0,\n top: 0,\n bottom: 0\n },\n eventListenerOptions = {\n capture: false,\n passive: true\n },\n behavior = \"auto\",\n window = defaultWindow,\n onError = (e) => {\n console.error(e);\n }\n } = options;\n const internalX = ref(0);\n const internalY = ref(0);\n const x = computed({\n get() {\n return internalX.value;\n },\n set(x2) {\n scrollTo(x2, undefined);\n }\n });\n const y = computed({\n get() {\n return internalY.value;\n },\n set(y2) {\n scrollTo(undefined, y2);\n }\n });\n function scrollTo(_x, _y) {\n var _a, _b, _c, _d;\n if (!window)\n return;\n const _element = toValue(element);\n if (!_element)\n return;\n (_c = _element instanceof Document ? window.document.body : _element) == null ? undefined : _c.scrollTo({\n top: (_a = toValue(_y)) != null ? _a : y.value,\n left: (_b = toValue(_x)) != null ? _b : x.value,\n behavior: toValue(behavior)\n });\n const scrollContainer = ((_d = _element == null ? undefined : _element.document) == null ? undefined : _d.documentElement) || (_element == null ? undefined : _element.documentElement) || _element;\n if (x != null)\n internalX.value = scrollContainer.scrollLeft;\n if (y != null)\n internalY.value = scrollContainer.scrollTop;\n }\n const isScrolling = ref(false);\n const arrivedState = reactive({\n left: true,\n right: false,\n top: true,\n bottom: false\n });\n const directions = reactive({\n left: false,\n right: false,\n top: false,\n bottom: false\n });\n const onScrollEnd = (e) => {\n if (!isScrolling.value)\n return;\n isScrolling.value = false;\n directions.left = false;\n directions.right = false;\n directions.top = false;\n directions.bottom = false;\n onStop(e);\n };\n const onScrollEndDebounced = useDebounceFn(onScrollEnd, throttle + idle);\n const setArrivedState = (target) => {\n var _a;\n if (!window)\n return;\n const el = ((_a = target == null ? undefined : target.document) == null ? undefined : _a.documentElement) || (target == null ? undefined : target.documentElement) || unrefElement(target);\n const { display, flexDirection, direction } = getComputedStyle(el);\n const directionMultipler = direction === \"rtl\" ? -1 : 1;\n const scrollLeft = el.scrollLeft;\n directions.left = scrollLeft < internalX.value;\n directions.right = scrollLeft > internalX.value;\n const left = scrollLeft * directionMultipler <= (offset.left || 0);\n const right = scrollLeft * directionMultipler + el.clientWidth >= el.scrollWidth - (offset.right || 0) - ARRIVED_STATE_THRESHOLD_PIXELS;\n if (display === \"flex\" && flexDirection === \"row-reverse\") {\n arrivedState.left = right;\n arrivedState.right = left;\n } else {\n arrivedState.left = left;\n arrivedState.right = right;\n }\n internalX.value = scrollLeft;\n let scrollTop = el.scrollTop;\n if (target === window.document && !scrollTop)\n scrollTop = window.document.body.scrollTop;\n directions.top = scrollTop < internalY.value;\n directions.bottom = scrollTop > internalY.value;\n const top = scrollTop <= (offset.top || 0);\n const bottom = scrollTop + el.clientHeight >= el.scrollHeight - (offset.bottom || 0) - ARRIVED_STATE_THRESHOLD_PIXELS;\n if (display === \"flex\" && flexDirection === \"column-reverse\") {\n arrivedState.top = bottom;\n arrivedState.bottom = top;\n } else {\n arrivedState.top = top;\n arrivedState.bottom = bottom;\n }\n internalY.value = scrollTop;\n };\n const onScrollHandler = (e) => {\n var _a;\n if (!window)\n return;\n const eventTarget = (_a = e.target.documentElement) != null ? _a : e.target;\n setArrivedState(eventTarget);\n isScrolling.value = true;\n onScrollEndDebounced(e);\n onScroll(e);\n };\n useEventListener(\n element,\n \"scroll\",\n throttle ? useThrottleFn(onScrollHandler, throttle, true, false) : onScrollHandler,\n eventListenerOptions\n );\n tryOnMounted(() => {\n try {\n const _element = toValue(element);\n if (!_element)\n return;\n setArrivedState(_element);\n } catch (e) {\n onError(e);\n }\n });\n useEventListener(\n element,\n \"scrollend\",\n onScrollEnd,\n eventListenerOptions\n );\n return {\n x,\n y,\n isScrolling,\n arrivedState,\n directions,\n measure() {\n const _element = toValue(element);\n if (window && _element)\n setArrivedState(_element);\n }\n };\n}\n\nfunction useInfiniteScroll(element, onLoadMore, options = {}) {\n var _a;\n const {\n direction = \"bottom\",\n interval = 100,\n canLoadMore = () => true\n } = options;\n const state = reactive(useScroll(\n element,\n {\n ...options,\n offset: {\n [direction]: (_a = options.distance) != null ? _a : 0,\n ...options.offset\n }\n }\n ));\n const promise = ref();\n const isLoading = computed(() => !!promise.value);\n const observedElement = computed(() => {\n return resolveElement(toValue(element));\n });\n const isElementVisible = useElementVisibility(observedElement);\n function checkAndLoad() {\n state.measure();\n if (!observedElement.value || !isElementVisible.value || !canLoadMore(observedElement.value))\n return;\n const { scrollHeight, clientHeight, scrollWidth, clientWidth } = observedElement.value;\n const isNarrower = direction === \"bottom\" || direction === \"top\" ? scrollHeight <= clientHeight : scrollWidth <= clientWidth;\n if (state.arrivedState[direction] || isNarrower) {\n if (!promise.value) {\n promise.value = Promise.all([\n onLoadMore(state),\n new Promise((resolve) => setTimeout(resolve, interval))\n ]).finally(() => {\n promise.value = null;\n nextTick(() => checkAndLoad());\n });\n }\n }\n }\n const stop = watch(\n () => [state.arrivedState[direction], isElementVisible.value],\n checkAndLoad,\n { immediate: true }\n );\n tryOnUnmounted(stop);\n return {\n isLoading,\n reset() {\n nextTick(() => checkAndLoad());\n }\n };\n}\n\nconst defaultEvents = [\"mousedown\", \"mouseup\", \"keydown\", \"keyup\"];\nfunction useKeyModifier(modifier, options = {}) {\n const {\n events = defaultEvents,\n document = defaultDocument,\n initial = null\n } = options;\n const state = ref(initial);\n if (document) {\n events.forEach((listenerEvent) => {\n useEventListener(document, listenerEvent, (evt) => {\n if (typeof evt.getModifierState === \"function\")\n state.value = evt.getModifierState(modifier);\n });\n });\n }\n return state;\n}\n\nfunction useLocalStorage(key, initialValue, options = {}) {\n const { window = defaultWindow } = options;\n return useStorage(key, initialValue, window == null ? undefined : window.localStorage, options);\n}\n\nconst DefaultMagicKeysAliasMap = {\n ctrl: \"control\",\n command: \"meta\",\n cmd: \"meta\",\n option: \"alt\",\n up: \"arrowup\",\n down: \"arrowdown\",\n left: \"arrowleft\",\n right: \"arrowright\"\n};\n\nfunction useMagicKeys(options = {}) {\n const {\n reactive: useReactive = false,\n target = defaultWindow,\n aliasMap = DefaultMagicKeysAliasMap,\n passive = true,\n onEventFired = noop\n } = options;\n const current = reactive(/* @__PURE__ */ new Set());\n const obj = {\n toJSON() {\n return {};\n },\n current\n };\n const refs = useReactive ? reactive(obj) : obj;\n const metaDeps = /* @__PURE__ */ new Set();\n const usedKeys = /* @__PURE__ */ new Set();\n function setRefs(key, value) {\n if (key in refs) {\n if (useReactive)\n refs[key] = value;\n else\n refs[key].value = value;\n }\n }\n function reset() {\n current.clear();\n for (const key of usedKeys)\n setRefs(key, false);\n }\n function updateRefs(e, value) {\n var _a, _b;\n const key = (_a = e.key) == null ? undefined : _a.toLowerCase();\n const code = (_b = e.code) == null ? undefined : _b.toLowerCase();\n const values = [code, key].filter(Boolean);\n if (key) {\n if (value)\n current.add(key);\n else\n current.delete(key);\n }\n for (const key2 of values) {\n usedKeys.add(key2);\n setRefs(key2, value);\n }\n if (key === \"meta\" && !value) {\n metaDeps.forEach((key2) => {\n current.delete(key2);\n setRefs(key2, false);\n });\n metaDeps.clear();\n } else if (typeof e.getModifierState === \"function\" && e.getModifierState(\"Meta\") && value) {\n [...current, ...values].forEach((key2) => metaDeps.add(key2));\n }\n }\n useEventListener(target, \"keydown\", (e) => {\n updateRefs(e, true);\n return onEventFired(e);\n }, { passive });\n useEventListener(target, \"keyup\", (e) => {\n updateRefs(e, false);\n return onEventFired(e);\n }, { passive });\n useEventListener(\"blur\", reset, { passive });\n useEventListener(\"focus\", reset, { passive });\n const proxy = new Proxy(\n refs,\n {\n get(target2, prop, rec) {\n if (typeof prop !== \"string\")\n return Reflect.get(target2, prop, rec);\n prop = prop.toLowerCase();\n if (prop in aliasMap)\n prop = aliasMap[prop];\n if (!(prop in refs)) {\n if (/[+_-]/.test(prop)) {\n const keys = prop.split(/[+_-]/g).map((i) => i.trim());\n refs[prop] = computed(() => keys.every((key) => toValue(proxy[key])));\n } else {\n refs[prop] = ref(false);\n }\n }\n const r = Reflect.get(target2, prop, rec);\n return useReactive ? toValue(r) : r;\n }\n }\n );\n return proxy;\n}\n\nfunction usingElRef(source, cb) {\n if (toValue(source))\n cb(toValue(source));\n}\nfunction timeRangeToArray(timeRanges) {\n let ranges = [];\n for (let i = 0; i < timeRanges.length; ++i)\n ranges = [...ranges, [timeRanges.start(i), timeRanges.end(i)]];\n return ranges;\n}\nfunction tracksToArray(tracks) {\n return Array.from(tracks).map(({ label, kind, language, mode, activeCues, cues, inBandMetadataTrackDispatchType }, id) => ({ id, label, kind, language, mode, activeCues, cues, inBandMetadataTrackDispatchType }));\n}\nconst defaultOptions = {\n src: \"\",\n tracks: []\n};\nfunction useMediaControls(target, options = {}) {\n target = toRef(target);\n options = {\n ...defaultOptions,\n ...options\n };\n const {\n document = defaultDocument\n } = options;\n const currentTime = ref(0);\n const duration = ref(0);\n const seeking = ref(false);\n const volume = ref(1);\n const waiting = ref(false);\n const ended = ref(false);\n const playing = ref(false);\n const rate = ref(1);\n const stalled = ref(false);\n const buffered = ref([]);\n const tracks = ref([]);\n const selectedTrack = ref(-1);\n const isPictureInPicture = ref(false);\n const muted = ref(false);\n const supportsPictureInPicture = document && \"pictureInPictureEnabled\" in document;\n const sourceErrorEvent = createEventHook();\n const playbackErrorEvent = createEventHook();\n const disableTrack = (track) => {\n usingElRef(target, (el) => {\n if (track) {\n const id = typeof track === \"number\" ? track : track.id;\n el.textTracks[id].mode = \"disabled\";\n } else {\n for (let i = 0; i < el.textTracks.length; ++i)\n el.textTracks[i].mode = \"disabled\";\n }\n selectedTrack.value = -1;\n });\n };\n const enableTrack = (track, disableTracks = true) => {\n usingElRef(target, (el) => {\n const id = typeof track === \"number\" ? track : track.id;\n if (disableTracks)\n disableTrack();\n el.textTracks[id].mode = \"showing\";\n selectedTrack.value = id;\n });\n };\n const togglePictureInPicture = () => {\n return new Promise((resolve, reject) => {\n usingElRef(target, async (el) => {\n if (supportsPictureInPicture) {\n if (!isPictureInPicture.value) {\n el.requestPictureInPicture().then(resolve).catch(reject);\n } else {\n document.exitPictureInPicture().then(resolve).catch(reject);\n }\n }\n });\n });\n };\n watchEffect(() => {\n if (!document)\n return;\n const el = toValue(target);\n if (!el)\n return;\n const src = toValue(options.src);\n let sources = [];\n if (!src)\n return;\n if (typeof src === \"string\")\n sources = [{ src }];\n else if (Array.isArray(src))\n sources = src;\n else if (isObject(src))\n sources = [src];\n el.querySelectorAll(\"source\").forEach((e) => {\n e.removeEventListener(\"error\", sourceErrorEvent.trigger);\n e.remove();\n });\n sources.forEach(({ src: src2, type, media }) => {\n const source = document.createElement(\"source\");\n source.setAttribute(\"src\", src2);\n source.setAttribute(\"type\", type || \"\");\n source.setAttribute(\"media\", media || \"\");\n source.addEventListener(\"error\", sourceErrorEvent.trigger);\n el.appendChild(source);\n });\n el.load();\n });\n tryOnScopeDispose(() => {\n const el = toValue(target);\n if (!el)\n return;\n el.querySelectorAll(\"source\").forEach((e) => e.removeEventListener(\"error\", sourceErrorEvent.trigger));\n });\n watch([target, volume], () => {\n const el = toValue(target);\n if (!el)\n return;\n el.volume = volume.value;\n });\n watch([target, muted], () => {\n const el = toValue(target);\n if (!el)\n return;\n el.muted = muted.value;\n });\n watch([target, rate], () => {\n const el = toValue(target);\n if (!el)\n return;\n el.playbackRate = rate.value;\n });\n watchEffect(() => {\n if (!document)\n return;\n const textTracks = toValue(options.tracks);\n const el = toValue(target);\n if (!textTracks || !textTracks.length || !el)\n return;\n el.querySelectorAll(\"track\").forEach((e) => e.remove());\n textTracks.forEach(({ default: isDefault, kind, label, src, srcLang }, i) => {\n const track = document.createElement(\"track\");\n track.default = isDefault || false;\n track.kind = kind;\n track.label = label;\n track.src = src;\n track.srclang = srcLang;\n if (track.default)\n selectedTrack.value = i;\n el.appendChild(track);\n });\n });\n const { ignoreUpdates: ignoreCurrentTimeUpdates } = watchIgnorable(currentTime, (time) => {\n const el = toValue(target);\n if (!el)\n return;\n el.currentTime = time;\n });\n const { ignoreUpdates: ignorePlayingUpdates } = watchIgnorable(playing, (isPlaying) => {\n const el = toValue(target);\n if (!el)\n return;\n if (isPlaying) {\n el.play().catch((e) => {\n playbackErrorEvent.trigger(e);\n throw e;\n });\n } else {\n el.pause();\n }\n });\n const listenerOptions = { passive: true };\n useEventListener(\n target,\n \"timeupdate\",\n () => ignoreCurrentTimeUpdates(() => currentTime.value = toValue(target).currentTime),\n listenerOptions\n );\n useEventListener(\n target,\n \"durationchange\",\n () => duration.value = toValue(target).duration,\n listenerOptions\n );\n useEventListener(\n target,\n \"progress\",\n () => buffered.value = timeRangeToArray(toValue(target).buffered),\n listenerOptions\n );\n useEventListener(\n target,\n \"seeking\",\n () => seeking.value = true,\n listenerOptions\n );\n useEventListener(\n target,\n \"seeked\",\n () => seeking.value = false,\n listenerOptions\n );\n useEventListener(\n target,\n [\"waiting\", \"loadstart\"],\n () => {\n waiting.value = true;\n ignorePlayingUpdates(() => playing.value = false);\n },\n listenerOptions\n );\n useEventListener(\n target,\n \"loadeddata\",\n () => waiting.value = false,\n listenerOptions\n );\n useEventListener(\n target,\n \"playing\",\n () => {\n waiting.value = false;\n ended.value = false;\n ignorePlayingUpdates(() => playing.value = true);\n },\n listenerOptions\n );\n useEventListener(\n target,\n \"ratechange\",\n () => rate.value = toValue(target).playbackRate,\n listenerOptions\n );\n useEventListener(\n target,\n \"stalled\",\n () => stalled.value = true,\n listenerOptions\n );\n useEventListener(\n target,\n \"ended\",\n () => ended.value = true,\n listenerOptions\n );\n useEventListener(\n target,\n \"pause\",\n () => ignorePlayingUpdates(() => playing.value = false),\n listenerOptions\n );\n useEventListener(\n target,\n \"play\",\n () => ignorePlayingUpdates(() => playing.value = true),\n listenerOptions\n );\n useEventListener(\n target,\n \"enterpictureinpicture\",\n () => isPictureInPicture.value = true,\n listenerOptions\n );\n useEventListener(\n target,\n \"leavepictureinpicture\",\n () => isPictureInPicture.value = false,\n listenerOptions\n );\n useEventListener(\n target,\n \"volumechange\",\n () => {\n const el = toValue(target);\n if (!el)\n return;\n volume.value = el.volume;\n muted.value = el.muted;\n },\n listenerOptions\n );\n const listeners = [];\n const stop = watch([target], () => {\n const el = toValue(target);\n if (!el)\n return;\n stop();\n listeners[0] = useEventListener(el.textTracks, \"addtrack\", () => tracks.value = tracksToArray(el.textTracks), listenerOptions);\n listeners[1] = useEventListener(el.textTracks, \"removetrack\", () => tracks.value = tracksToArray(el.textTracks), listenerOptions);\n listeners[2] = useEventListener(el.textTracks, \"change\", () => tracks.value = tracksToArray(el.textTracks), listenerOptions);\n });\n tryOnScopeDispose(() => listeners.forEach((listener) => listener()));\n return {\n currentTime,\n duration,\n waiting,\n seeking,\n ended,\n stalled,\n buffered,\n playing,\n rate,\n // Volume\n volume,\n muted,\n // Tracks\n tracks,\n selectedTrack,\n enableTrack,\n disableTrack,\n // Picture in Picture\n supportsPictureInPicture,\n togglePictureInPicture,\n isPictureInPicture,\n // Events\n onSourceError: sourceErrorEvent.on,\n onPlaybackError: playbackErrorEvent.on\n };\n}\n\nfunction useMemoize(resolver, options) {\n const initCache = () => {\n if (options == null ? undefined : options.cache)\n return shallowReactive(options.cache);\n return shallowReactive(/* @__PURE__ */ new Map());\n };\n const cache = initCache();\n const generateKey = (...args) => (options == null ? undefined : options.getKey) ? options.getKey(...args) : JSON.stringify(args);\n const _loadData = (key, ...args) => {\n cache.set(key, resolver(...args));\n return cache.get(key);\n };\n const loadData = (...args) => _loadData(generateKey(...args), ...args);\n const deleteData = (...args) => {\n cache.delete(generateKey(...args));\n };\n const clearData = () => {\n cache.clear();\n };\n const memoized = (...args) => {\n const key = generateKey(...args);\n if (cache.has(key))\n return cache.get(key);\n return _loadData(key, ...args);\n };\n memoized.load = loadData;\n memoized.delete = deleteData;\n memoized.clear = clearData;\n memoized.generateKey = generateKey;\n memoized.cache = cache;\n return memoized;\n}\n\nfunction useMemory(options = {}) {\n const memory = ref();\n const isSupported = useSupported(() => typeof performance !== \"undefined\" && \"memory\" in performance);\n if (isSupported.value) {\n const { interval = 1e3 } = options;\n useIntervalFn(() => {\n memory.value = performance.memory;\n }, interval, { immediate: options.immediate, immediateCallback: options.immediateCallback });\n }\n return { isSupported, memory };\n}\n\nconst UseMouseBuiltinExtractors = {\n page: (event) => [event.pageX, event.pageY],\n client: (event) => [event.clientX, event.clientY],\n screen: (event) => [event.screenX, event.screenY],\n movement: (event) => event instanceof Touch ? null : [event.movementX, event.movementY]\n};\nfunction useMouse(options = {}) {\n const {\n type = \"page\",\n touch = true,\n resetOnTouchEnds = false,\n initialValue = { x: 0, y: 0 },\n window = defaultWindow,\n target = window,\n scroll = true,\n eventFilter\n } = options;\n let _prevMouseEvent = null;\n let _prevScrollX = 0;\n let _prevScrollY = 0;\n const x = ref(initialValue.x);\n const y = ref(initialValue.y);\n const sourceType = ref(null);\n const extractor = typeof type === \"function\" ? type : UseMouseBuiltinExtractors[type];\n const mouseHandler = (event) => {\n const result = extractor(event);\n _prevMouseEvent = event;\n if (result) {\n [x.value, y.value] = result;\n sourceType.value = \"mouse\";\n }\n if (window) {\n _prevScrollX = window.scrollX;\n _prevScrollY = window.scrollY;\n }\n };\n const touchHandler = (event) => {\n if (event.touches.length > 0) {\n const result = extractor(event.touches[0]);\n if (result) {\n [x.value, y.value] = result;\n sourceType.value = \"touch\";\n }\n }\n };\n const scrollHandler = () => {\n if (!_prevMouseEvent || !window)\n return;\n const pos = extractor(_prevMouseEvent);\n if (_prevMouseEvent instanceof MouseEvent && pos) {\n x.value = pos[0] + window.scrollX - _prevScrollX;\n y.value = pos[1] + window.scrollY - _prevScrollY;\n }\n };\n const reset = () => {\n x.value = initialValue.x;\n y.value = initialValue.y;\n };\n const mouseHandlerWrapper = eventFilter ? (event) => eventFilter(() => mouseHandler(event), {}) : (event) => mouseHandler(event);\n const touchHandlerWrapper = eventFilter ? (event) => eventFilter(() => touchHandler(event), {}) : (event) => touchHandler(event);\n const scrollHandlerWrapper = eventFilter ? () => eventFilter(() => scrollHandler(), {}) : () => scrollHandler();\n if (target) {\n const listenerOptions = { passive: true };\n useEventListener(target, [\"mousemove\", \"dragover\"], mouseHandlerWrapper, listenerOptions);\n if (touch && type !== \"movement\") {\n useEventListener(target, [\"touchstart\", \"touchmove\"], touchHandlerWrapper, listenerOptions);\n if (resetOnTouchEnds)\n useEventListener(target, \"touchend\", reset, listenerOptions);\n }\n if (scroll && type === \"page\")\n useEventListener(window, \"scroll\", scrollHandlerWrapper, listenerOptions);\n }\n return {\n x,\n y,\n sourceType\n };\n}\n\nfunction useMouseInElement(target, options = {}) {\n const {\n handleOutside = true,\n window = defaultWindow\n } = options;\n const type = options.type || \"page\";\n const { x, y, sourceType } = useMouse(options);\n const targetRef = ref(target != null ? target : window == null ? undefined : window.document.body);\n const elementX = ref(0);\n const elementY = ref(0);\n const elementPositionX = ref(0);\n const elementPositionY = ref(0);\n const elementHeight = ref(0);\n const elementWidth = ref(0);\n const isOutside = ref(true);\n let stop = () => {\n };\n if (window) {\n stop = watch(\n [targetRef, x, y],\n () => {\n const el = unrefElement(targetRef);\n if (!el || !(el instanceof Element))\n return;\n const {\n left,\n top,\n width,\n height\n } = el.getBoundingClientRect();\n elementPositionX.value = left + (type === \"page\" ? window.pageXOffset : 0);\n elementPositionY.value = top + (type === \"page\" ? window.pageYOffset : 0);\n elementHeight.value = height;\n elementWidth.value = width;\n const elX = x.value - elementPositionX.value;\n const elY = y.value - elementPositionY.value;\n isOutside.value = width === 0 || height === 0 || elX < 0 || elY < 0 || elX > width || elY > height;\n if (handleOutside || !isOutside.value) {\n elementX.value = elX;\n elementY.value = elY;\n }\n },\n { immediate: true }\n );\n useEventListener(\n document,\n \"mouseleave\",\n () => isOutside.value = true,\n { passive: true }\n );\n }\n return {\n x,\n y,\n sourceType,\n elementX,\n elementY,\n elementPositionX,\n elementPositionY,\n elementHeight,\n elementWidth,\n isOutside,\n stop\n };\n}\n\nfunction useMousePressed(options = {}) {\n const {\n touch = true,\n drag = true,\n capture = false,\n initialValue = false,\n window = defaultWindow\n } = options;\n const pressed = ref(initialValue);\n const sourceType = ref(null);\n if (!window) {\n return {\n pressed,\n sourceType\n };\n }\n const onPressed = (srcType) => (event) => {\n var _a;\n pressed.value = true;\n sourceType.value = srcType;\n (_a = options.onPressed) == null ? undefined : _a.call(options, event);\n };\n const onReleased = (event) => {\n var _a;\n pressed.value = false;\n sourceType.value = null;\n (_a = options.onReleased) == null ? undefined : _a.call(options, event);\n };\n const target = computed(() => unrefElement(options.target) || window);\n const listenerOptions = { passive: true, capture };\n useEventListener(target, \"mousedown\", onPressed(\"mouse\"), listenerOptions);\n useEventListener(window, \"mouseleave\", onReleased, listenerOptions);\n useEventListener(window, \"mouseup\", onReleased, listenerOptions);\n if (drag) {\n useEventListener(target, \"dragstart\", onPressed(\"mouse\"), listenerOptions);\n useEventListener(window, \"drop\", onReleased, listenerOptions);\n useEventListener(window, \"dragend\", onReleased, listenerOptions);\n }\n if (touch) {\n useEventListener(target, \"touchstart\", onPressed(\"touch\"), listenerOptions);\n useEventListener(window, \"touchend\", onReleased, listenerOptions);\n useEventListener(window, \"touchcancel\", onReleased, listenerOptions);\n }\n return {\n pressed,\n sourceType\n };\n}\n\nfunction useNavigatorLanguage(options = {}) {\n const { window = defaultWindow } = options;\n const navigator = window == null ? undefined : window.navigator;\n const isSupported = useSupported(() => navigator && \"language\" in navigator);\n const language = ref(navigator == null ? undefined : navigator.language);\n useEventListener(window, \"languagechange\", () => {\n if (navigator)\n language.value = navigator.language;\n }, { passive: true });\n return {\n isSupported,\n language\n };\n}\n\nfunction useNetwork(options = {}) {\n const { window = defaultWindow } = options;\n const navigator = window == null ? undefined : window.navigator;\n const isSupported = useSupported(() => navigator && \"connection\" in navigator);\n const isOnline = ref(true);\n const saveData = ref(false);\n const offlineAt = ref(undefined);\n const onlineAt = ref(undefined);\n const downlink = ref(undefined);\n const downlinkMax = ref(undefined);\n const rtt = ref(undefined);\n const effectiveType = ref(undefined);\n const type = ref(\"unknown\");\n const connection = isSupported.value && navigator.connection;\n function updateNetworkInformation() {\n if (!navigator)\n return;\n isOnline.value = navigator.onLine;\n offlineAt.value = isOnline.value ? undefined : Date.now();\n onlineAt.value = isOnline.value ? Date.now() : undefined;\n if (connection) {\n downlink.value = connection.downlink;\n downlinkMax.value = connection.downlinkMax;\n effectiveType.value = connection.effectiveType;\n rtt.value = connection.rtt;\n saveData.value = connection.saveData;\n type.value = connection.type;\n }\n }\n const listenerOptions = { passive: true };\n if (window) {\n useEventListener(window, \"offline\", () => {\n isOnline.value = false;\n offlineAt.value = Date.now();\n }, listenerOptions);\n useEventListener(window, \"online\", () => {\n isOnline.value = true;\n onlineAt.value = Date.now();\n }, listenerOptions);\n }\n if (connection)\n useEventListener(connection, \"change\", updateNetworkInformation, listenerOptions);\n updateNetworkInformation();\n return {\n isSupported,\n isOnline: readonly(isOnline),\n saveData: readonly(saveData),\n offlineAt: readonly(offlineAt),\n onlineAt: readonly(onlineAt),\n downlink: readonly(downlink),\n downlinkMax: readonly(downlinkMax),\n effectiveType: readonly(effectiveType),\n rtt: readonly(rtt),\n type: readonly(type)\n };\n}\n\nfunction useNow(options = {}) {\n const {\n controls: exposeControls = false,\n interval = \"requestAnimationFrame\"\n } = options;\n const now = ref(/* @__PURE__ */ new Date());\n const update = () => now.value = /* @__PURE__ */ new Date();\n const controls = interval === \"requestAnimationFrame\" ? useRafFn(update, { immediate: true }) : useIntervalFn(update, interval, { immediate: true });\n if (exposeControls) {\n return {\n now,\n ...controls\n };\n } else {\n return now;\n }\n}\n\nfunction useObjectUrl(object) {\n const url = ref();\n const release = () => {\n if (url.value)\n URL.revokeObjectURL(url.value);\n url.value = undefined;\n };\n watch(\n () => toValue(object),\n (newObject) => {\n release();\n if (newObject)\n url.value = URL.createObjectURL(newObject);\n },\n { immediate: true }\n );\n tryOnScopeDispose(release);\n return readonly(url);\n}\n\nfunction useClamp(value, min, max) {\n if (typeof value === \"function\" || isReadonly(value))\n return computed(() => clamp(toValue(value), toValue(min), toValue(max)));\n const _value = ref(value);\n return computed({\n get() {\n return _value.value = clamp(_value.value, toValue(min), toValue(max));\n },\n set(value2) {\n _value.value = clamp(value2, toValue(min), toValue(max));\n }\n });\n}\n\nfunction useOffsetPagination(options) {\n const {\n total = Number.POSITIVE_INFINITY,\n pageSize = 10,\n page = 1,\n onPageChange = noop,\n onPageSizeChange = noop,\n onPageCountChange = noop\n } = options;\n const currentPageSize = useClamp(pageSize, 1, Number.POSITIVE_INFINITY);\n const pageCount = computed(() => Math.max(\n 1,\n Math.ceil(toValue(total) / toValue(currentPageSize))\n ));\n const currentPage = useClamp(page, 1, pageCount);\n const isFirstPage = computed(() => currentPage.value === 1);\n const isLastPage = computed(() => currentPage.value === pageCount.value);\n if (isRef(page)) {\n syncRef(page, currentPage, {\n direction: isReadonly(page) ? \"ltr\" : \"both\"\n });\n }\n if (isRef(pageSize)) {\n syncRef(pageSize, currentPageSize, {\n direction: isReadonly(pageSize) ? \"ltr\" : \"both\"\n });\n }\n function prev() {\n currentPage.value--;\n }\n function next() {\n currentPage.value++;\n }\n const returnValue = {\n currentPage,\n currentPageSize,\n pageCount,\n isFirstPage,\n isLastPage,\n prev,\n next\n };\n watch(currentPage, () => {\n onPageChange(reactive(returnValue));\n });\n watch(currentPageSize, () => {\n onPageSizeChange(reactive(returnValue));\n });\n watch(pageCount, () => {\n onPageCountChange(reactive(returnValue));\n });\n return returnValue;\n}\n\nfunction useOnline(options = {}) {\n const { isOnline } = useNetwork(options);\n return isOnline;\n}\n\nfunction usePageLeave(options = {}) {\n const { window = defaultWindow } = options;\n const isLeft = ref(false);\n const handler = (event) => {\n if (!window)\n return;\n event = event || window.event;\n const from = event.relatedTarget || event.toElement;\n isLeft.value = !from;\n };\n if (window) {\n const listenerOptions = { passive: true };\n useEventListener(window, \"mouseout\", handler, listenerOptions);\n useEventListener(window.document, \"mouseleave\", handler, listenerOptions);\n useEventListener(window.document, \"mouseenter\", handler, listenerOptions);\n }\n return isLeft;\n}\n\nfunction useScreenOrientation(options = {}) {\n const {\n window = defaultWindow\n } = options;\n const isSupported = useSupported(() => window && \"screen\" in window && \"orientation\" in window.screen);\n const screenOrientation = isSupported.value ? window.screen.orientation : {};\n const orientation = ref(screenOrientation.type);\n const angle = ref(screenOrientation.angle || 0);\n if (isSupported.value) {\n useEventListener(window, \"orientationchange\", () => {\n orientation.value = screenOrientation.type;\n angle.value = screenOrientation.angle;\n }, { passive: true });\n }\n const lockOrientation = (type) => {\n if (isSupported.value && typeof screenOrientation.lock === \"function\")\n return screenOrientation.lock(type);\n return Promise.reject(new Error(\"Not supported\"));\n };\n const unlockOrientation = () => {\n if (isSupported.value && typeof screenOrientation.unlock === \"function\")\n screenOrientation.unlock();\n };\n return {\n isSupported,\n orientation,\n angle,\n lockOrientation,\n unlockOrientation\n };\n}\n\nfunction useParallax(target, options = {}) {\n const {\n deviceOrientationTiltAdjust = (i) => i,\n deviceOrientationRollAdjust = (i) => i,\n mouseTiltAdjust = (i) => i,\n mouseRollAdjust = (i) => i,\n window = defaultWindow\n } = options;\n const orientation = reactive(useDeviceOrientation({ window }));\n const screenOrientation = reactive(useScreenOrientation({ window }));\n const {\n elementX: x,\n elementY: y,\n elementWidth: width,\n elementHeight: height\n } = useMouseInElement(target, { handleOutside: false, window });\n const source = computed(() => {\n if (orientation.isSupported && (orientation.alpha != null && orientation.alpha !== 0 || orientation.gamma != null && orientation.gamma !== 0)) {\n return \"deviceOrientation\";\n }\n return \"mouse\";\n });\n const roll = computed(() => {\n if (source.value === \"deviceOrientation\") {\n let value;\n switch (screenOrientation.orientation) {\n case \"landscape-primary\":\n value = orientation.gamma / 90;\n break;\n case \"landscape-secondary\":\n value = -orientation.gamma / 90;\n break;\n case \"portrait-primary\":\n value = -orientation.beta / 90;\n break;\n case \"portrait-secondary\":\n value = orientation.beta / 90;\n break;\n default:\n value = -orientation.beta / 90;\n }\n return deviceOrientationRollAdjust(value);\n } else {\n const value = -(y.value - height.value / 2) / height.value;\n return mouseRollAdjust(value);\n }\n });\n const tilt = computed(() => {\n if (source.value === \"deviceOrientation\") {\n let value;\n switch (screenOrientation.orientation) {\n case \"landscape-primary\":\n value = orientation.beta / 90;\n break;\n case \"landscape-secondary\":\n value = -orientation.beta / 90;\n break;\n case \"portrait-primary\":\n value = orientation.gamma / 90;\n break;\n case \"portrait-secondary\":\n value = -orientation.gamma / 90;\n break;\n default:\n value = orientation.gamma / 90;\n }\n return deviceOrientationTiltAdjust(value);\n } else {\n const value = (x.value - width.value / 2) / width.value;\n return mouseTiltAdjust(value);\n }\n });\n return { roll, tilt, source };\n}\n\nfunction useParentElement(element = useCurrentElement()) {\n const parentElement = shallowRef();\n const update = () => {\n const el = unrefElement(element);\n if (el)\n parentElement.value = el.parentElement;\n };\n tryOnMounted(update);\n watch(() => toValue(element), update);\n return parentElement;\n}\n\nfunction usePerformanceObserver(options, callback) {\n const {\n window = defaultWindow,\n immediate = true,\n ...performanceOptions\n } = options;\n const isSupported = useSupported(() => window && \"PerformanceObserver\" in window);\n let observer;\n const stop = () => {\n observer == null ? undefined : observer.disconnect();\n };\n const start = () => {\n if (isSupported.value) {\n stop();\n observer = new PerformanceObserver(callback);\n observer.observe(performanceOptions);\n }\n };\n tryOnScopeDispose(stop);\n if (immediate)\n start();\n return {\n isSupported,\n start,\n stop\n };\n}\n\nconst defaultState = {\n x: 0,\n y: 0,\n pointerId: 0,\n pressure: 0,\n tiltX: 0,\n tiltY: 0,\n width: 0,\n height: 0,\n twist: 0,\n pointerType: null\n};\nconst keys = /* @__PURE__ */ Object.keys(defaultState);\nfunction usePointer(options = {}) {\n const {\n target = defaultWindow\n } = options;\n const isInside = ref(false);\n const state = ref(options.initialValue || {});\n Object.assign(state.value, defaultState, state.value);\n const handler = (event) => {\n isInside.value = true;\n if (options.pointerTypes && !options.pointerTypes.includes(event.pointerType))\n return;\n state.value = objectPick(event, keys, false);\n };\n if (target) {\n const listenerOptions = { passive: true };\n useEventListener(target, [\"pointerdown\", \"pointermove\", \"pointerup\"], handler, listenerOptions);\n useEventListener(target, \"pointerleave\", () => isInside.value = false, listenerOptions);\n }\n return {\n ...toRefs(state),\n isInside\n };\n}\n\nfunction usePointerLock(target, options = {}) {\n const { document = defaultDocument } = options;\n const isSupported = useSupported(() => document && \"pointerLockElement\" in document);\n const element = ref();\n const triggerElement = ref();\n let targetElement;\n if (isSupported.value) {\n const listenerOptions = { passive: true };\n useEventListener(document, \"pointerlockchange\", () => {\n var _a;\n const currentElement = (_a = document.pointerLockElement) != null ? _a : element.value;\n if (targetElement && currentElement === targetElement) {\n element.value = document.pointerLockElement;\n if (!element.value)\n targetElement = triggerElement.value = null;\n }\n }, listenerOptions);\n useEventListener(document, \"pointerlockerror\", () => {\n var _a;\n const currentElement = (_a = document.pointerLockElement) != null ? _a : element.value;\n if (targetElement && currentElement === targetElement) {\n const action = document.pointerLockElement ? \"release\" : \"acquire\";\n throw new Error(`Failed to ${action} pointer lock.`);\n }\n }, listenerOptions);\n }\n async function lock(e) {\n var _a;\n if (!isSupported.value)\n throw new Error(\"Pointer Lock API is not supported by your browser.\");\n triggerElement.value = e instanceof Event ? e.currentTarget : null;\n targetElement = e instanceof Event ? (_a = unrefElement(target)) != null ? _a : triggerElement.value : unrefElement(e);\n if (!targetElement)\n throw new Error(\"Target element undefined.\");\n targetElement.requestPointerLock();\n return await until(element).toBe(targetElement);\n }\n async function unlock() {\n if (!element.value)\n return false;\n document.exitPointerLock();\n await until(element).toBeNull();\n return true;\n }\n return {\n isSupported,\n element,\n triggerElement,\n lock,\n unlock\n };\n}\n\nfunction usePointerSwipe(target, options = {}) {\n const targetRef = toRef(target);\n const {\n threshold = 50,\n onSwipe,\n onSwipeEnd,\n onSwipeStart,\n disableTextSelect = false\n } = options;\n const posStart = reactive({ x: 0, y: 0 });\n const updatePosStart = (x, y) => {\n posStart.x = x;\n posStart.y = y;\n };\n const posEnd = reactive({ x: 0, y: 0 });\n const updatePosEnd = (x, y) => {\n posEnd.x = x;\n posEnd.y = y;\n };\n const distanceX = computed(() => posStart.x - posEnd.x);\n const distanceY = computed(() => posStart.y - posEnd.y);\n const { max, abs } = Math;\n const isThresholdExceeded = computed(() => max(abs(distanceX.value), abs(distanceY.value)) >= threshold);\n const isSwiping = ref(false);\n const isPointerDown = ref(false);\n const direction = computed(() => {\n if (!isThresholdExceeded.value)\n return \"none\";\n if (abs(distanceX.value) > abs(distanceY.value)) {\n return distanceX.value > 0 ? \"left\" : \"right\";\n } else {\n return distanceY.value > 0 ? \"up\" : \"down\";\n }\n });\n const eventIsAllowed = (e) => {\n var _a, _b, _c;\n const isReleasingButton = e.buttons === 0;\n const isPrimaryButton = e.buttons === 1;\n return (_c = (_b = (_a = options.pointerTypes) == null ? undefined : _a.includes(e.pointerType)) != null ? _b : isReleasingButton || isPrimaryButton) != null ? _c : true;\n };\n const listenerOptions = { passive: true };\n const stops = [\n useEventListener(target, \"pointerdown\", (e) => {\n if (!eventIsAllowed(e))\n return;\n isPointerDown.value = true;\n const eventTarget = e.target;\n eventTarget == null ? undefined : eventTarget.setPointerCapture(e.pointerId);\n const { clientX: x, clientY: y } = e;\n updatePosStart(x, y);\n updatePosEnd(x, y);\n onSwipeStart == null ? undefined : onSwipeStart(e);\n }, listenerOptions),\n useEventListener(target, \"pointermove\", (e) => {\n if (!eventIsAllowed(e))\n return;\n if (!isPointerDown.value)\n return;\n const { clientX: x, clientY: y } = e;\n updatePosEnd(x, y);\n if (!isSwiping.value && isThresholdExceeded.value)\n isSwiping.value = true;\n if (isSwiping.value)\n onSwipe == null ? undefined : onSwipe(e);\n }, listenerOptions),\n useEventListener(target, \"pointerup\", (e) => {\n if (!eventIsAllowed(e))\n return;\n if (isSwiping.value)\n onSwipeEnd == null ? undefined : onSwipeEnd(e, direction.value);\n isPointerDown.value = false;\n isSwiping.value = false;\n }, listenerOptions)\n ];\n tryOnMounted(() => {\n var _a, _b, _c, _d, _e, _f, _g, _h;\n (_b = (_a = targetRef.value) == null ? undefined : _a.style) == null ? undefined : _b.setProperty(\"touch-action\", \"none\");\n if (disableTextSelect) {\n (_d = (_c = targetRef.value) == null ? undefined : _c.style) == null ? undefined : _d.setProperty(\"-webkit-user-select\", \"none\");\n (_f = (_e = targetRef.value) == null ? undefined : _e.style) == null ? undefined : _f.setProperty(\"-ms-user-select\", \"none\");\n (_h = (_g = targetRef.value) == null ? undefined : _g.style) == null ? undefined : _h.setProperty(\"user-select\", \"none\");\n }\n });\n const stop = () => stops.forEach((s) => s());\n return {\n isSwiping: readonly(isSwiping),\n direction: readonly(direction),\n posStart: readonly(posStart),\n posEnd: readonly(posEnd),\n distanceX,\n distanceY,\n stop\n };\n}\n\nfunction usePreferredColorScheme(options) {\n const isLight = useMediaQuery(\"(prefers-color-scheme: light)\", options);\n const isDark = useMediaQuery(\"(prefers-color-scheme: dark)\", options);\n return computed(() => {\n if (isDark.value)\n return \"dark\";\n if (isLight.value)\n return \"light\";\n return \"no-preference\";\n });\n}\n\nfunction usePreferredContrast(options) {\n const isMore = useMediaQuery(\"(prefers-contrast: more)\", options);\n const isLess = useMediaQuery(\"(prefers-contrast: less)\", options);\n const isCustom = useMediaQuery(\"(prefers-contrast: custom)\", options);\n return computed(() => {\n if (isMore.value)\n return \"more\";\n if (isLess.value)\n return \"less\";\n if (isCustom.value)\n return \"custom\";\n return \"no-preference\";\n });\n}\n\nfunction usePreferredLanguages(options = {}) {\n const { window = defaultWindow } = options;\n if (!window)\n return ref([\"en\"]);\n const navigator = window.navigator;\n const value = ref(navigator.languages);\n useEventListener(window, \"languagechange\", () => {\n value.value = navigator.languages;\n }, { passive: true });\n return value;\n}\n\nfunction usePreferredReducedMotion(options) {\n const isReduced = useMediaQuery(\"(prefers-reduced-motion: reduce)\", options);\n return computed(() => {\n if (isReduced.value)\n return \"reduce\";\n return \"no-preference\";\n });\n}\n\nfunction usePreferredReducedTransparency(options) {\n const isReduced = useMediaQuery(\"(prefers-reduced-transparency: reduce)\", options);\n return computed(() => {\n if (isReduced.value)\n return \"reduce\";\n return \"no-preference\";\n });\n}\n\nfunction usePrevious(value, initialValue) {\n const previous = shallowRef(initialValue);\n watch(\n toRef(value),\n (_, oldValue) => {\n previous.value = oldValue;\n },\n { flush: \"sync\" }\n );\n return readonly(previous);\n}\n\nconst topVarName = \"--vueuse-safe-area-top\";\nconst rightVarName = \"--vueuse-safe-area-right\";\nconst bottomVarName = \"--vueuse-safe-area-bottom\";\nconst leftVarName = \"--vueuse-safe-area-left\";\nfunction useScreenSafeArea() {\n const top = ref(\"\");\n const right = ref(\"\");\n const bottom = ref(\"\");\n const left = ref(\"\");\n if (isClient) {\n const topCssVar = useCssVar(topVarName);\n const rightCssVar = useCssVar(rightVarName);\n const bottomCssVar = useCssVar(bottomVarName);\n const leftCssVar = useCssVar(leftVarName);\n topCssVar.value = \"env(safe-area-inset-top, 0px)\";\n rightCssVar.value = \"env(safe-area-inset-right, 0px)\";\n bottomCssVar.value = \"env(safe-area-inset-bottom, 0px)\";\n leftCssVar.value = \"env(safe-area-inset-left, 0px)\";\n update();\n useEventListener(\"resize\", useDebounceFn(update), { passive: true });\n }\n function update() {\n top.value = getValue(topVarName);\n right.value = getValue(rightVarName);\n bottom.value = getValue(bottomVarName);\n left.value = getValue(leftVarName);\n }\n return {\n top,\n right,\n bottom,\n left,\n update\n };\n}\nfunction getValue(position) {\n return getComputedStyle(document.documentElement).getPropertyValue(position);\n}\n\nfunction useScriptTag(src, onLoaded = noop, options = {}) {\n const {\n immediate = true,\n manual = false,\n type = \"text/javascript\",\n async = true,\n crossOrigin,\n referrerPolicy,\n noModule,\n defer,\n document = defaultDocument,\n attrs = {}\n } = options;\n const scriptTag = ref(null);\n let _promise = null;\n const loadScript = (waitForScriptLoad) => new Promise((resolve, reject) => {\n const resolveWithElement = (el2) => {\n scriptTag.value = el2;\n resolve(el2);\n return el2;\n };\n if (!document) {\n resolve(false);\n return;\n }\n let shouldAppend = false;\n let el = document.querySelector(`script[src=\"${toValue(src)}\"]`);\n if (!el) {\n el = document.createElement(\"script\");\n el.type = type;\n el.async = async;\n el.src = toValue(src);\n if (defer)\n el.defer = defer;\n if (crossOrigin)\n el.crossOrigin = crossOrigin;\n if (noModule)\n el.noModule = noModule;\n if (referrerPolicy)\n el.referrerPolicy = referrerPolicy;\n Object.entries(attrs).forEach(([name, value]) => el == null ? undefined : el.setAttribute(name, value));\n shouldAppend = true;\n } else if (el.hasAttribute(\"data-loaded\")) {\n resolveWithElement(el);\n }\n el.addEventListener(\"error\", (event) => reject(event));\n el.addEventListener(\"abort\", (event) => reject(event));\n el.addEventListener(\"load\", () => {\n el.setAttribute(\"data-loaded\", \"true\");\n onLoaded(el);\n resolveWithElement(el);\n });\n if (shouldAppend)\n el = document.head.appendChild(el);\n if (!waitForScriptLoad)\n resolveWithElement(el);\n });\n const load = (waitForScriptLoad = true) => {\n if (!_promise)\n _promise = loadScript(waitForScriptLoad);\n return _promise;\n };\n const unload = () => {\n if (!document)\n return;\n _promise = null;\n if (scriptTag.value)\n scriptTag.value = null;\n const el = document.querySelector(`script[src=\"${toValue(src)}\"]`);\n if (el)\n document.head.removeChild(el);\n };\n if (immediate && !manual)\n tryOnMounted(load);\n if (!manual)\n tryOnUnmounted(unload);\n return { scriptTag, load, unload };\n}\n\nfunction checkOverflowScroll(ele) {\n const style = window.getComputedStyle(ele);\n if (style.overflowX === \"scroll\" || style.overflowY === \"scroll\" || style.overflowX === \"auto\" && ele.clientWidth < ele.scrollWidth || style.overflowY === \"auto\" && ele.clientHeight < ele.scrollHeight) {\n return true;\n } else {\n const parent = ele.parentNode;\n if (!parent || parent.tagName === \"BODY\")\n return false;\n return checkOverflowScroll(parent);\n }\n}\nfunction preventDefault(rawEvent) {\n const e = rawEvent || window.event;\n const _target = e.target;\n if (checkOverflowScroll(_target))\n return false;\n if (e.touches.length > 1)\n return true;\n if (e.preventDefault)\n e.preventDefault();\n return false;\n}\nconst elInitialOverflow = /* @__PURE__ */ new WeakMap();\nfunction useScrollLock(element, initialState = false) {\n const isLocked = ref(initialState);\n let stopTouchMoveListener = null;\n let initialOverflow = \"\";\n watch(toRef(element), (el) => {\n const target = resolveElement(toValue(el));\n if (target) {\n const ele = target;\n if (!elInitialOverflow.get(ele))\n elInitialOverflow.set(ele, ele.style.overflow);\n if (ele.style.overflow !== \"hidden\")\n initialOverflow = ele.style.overflow;\n if (ele.style.overflow === \"hidden\")\n return isLocked.value = true;\n if (isLocked.value)\n return ele.style.overflow = \"hidden\";\n }\n }, {\n immediate: true\n });\n const lock = () => {\n const el = resolveElement(toValue(element));\n if (!el || isLocked.value)\n return;\n if (isIOS) {\n stopTouchMoveListener = useEventListener(\n el,\n \"touchmove\",\n (e) => {\n preventDefault(e);\n },\n { passive: false }\n );\n }\n el.style.overflow = \"hidden\";\n isLocked.value = true;\n };\n const unlock = () => {\n const el = resolveElement(toValue(element));\n if (!el || !isLocked.value)\n return;\n if (isIOS)\n stopTouchMoveListener == null ? undefined : stopTouchMoveListener();\n el.style.overflow = initialOverflow;\n elInitialOverflow.delete(el);\n isLocked.value = false;\n };\n tryOnScopeDispose(unlock);\n return computed({\n get() {\n return isLocked.value;\n },\n set(v) {\n if (v)\n lock();\n else unlock();\n }\n });\n}\n\nfunction useSessionStorage(key, initialValue, options = {}) {\n const { window = defaultWindow } = options;\n return useStorage(key, initialValue, window == null ? undefined : window.sessionStorage, options);\n}\n\nfunction useShare(shareOptions = {}, options = {}) {\n const { navigator = defaultNavigator } = options;\n const _navigator = navigator;\n const isSupported = useSupported(() => _navigator && \"canShare\" in _navigator);\n const share = async (overrideOptions = {}) => {\n if (isSupported.value) {\n const data = {\n ...toValue(shareOptions),\n ...toValue(overrideOptions)\n };\n let granted = true;\n if (data.files && _navigator.canShare)\n granted = _navigator.canShare({ files: data.files });\n if (granted)\n return _navigator.share(data);\n }\n };\n return {\n isSupported,\n share\n };\n}\n\nconst defaultSortFn = (source, compareFn) => source.sort(compareFn);\nconst defaultCompare = (a, b) => a - b;\nfunction useSorted(...args) {\n var _a, _b, _c, _d;\n const [source] = args;\n let compareFn = defaultCompare;\n let options = {};\n if (args.length === 2) {\n if (typeof args[1] === \"object\") {\n options = args[1];\n compareFn = (_a = options.compareFn) != null ? _a : defaultCompare;\n } else {\n compareFn = (_b = args[1]) != null ? _b : defaultCompare;\n }\n } else if (args.length > 2) {\n compareFn = (_c = args[1]) != null ? _c : defaultCompare;\n options = (_d = args[2]) != null ? _d : {};\n }\n const {\n dirty = false,\n sortFn = defaultSortFn\n } = options;\n if (!dirty)\n return computed(() => sortFn([...toValue(source)], compareFn));\n watchEffect(() => {\n const result = sortFn(toValue(source), compareFn);\n if (isRef(source))\n source.value = result;\n else\n source.splice(0, source.length, ...result);\n });\n return source;\n}\n\nfunction useSpeechRecognition(options = {}) {\n const {\n interimResults = true,\n continuous = true,\n maxAlternatives = 1,\n window = defaultWindow\n } = options;\n const lang = toRef(options.lang || \"en-US\");\n const isListening = ref(false);\n const isFinal = ref(false);\n const result = ref(\"\");\n const error = shallowRef(undefined);\n let recognition;\n const start = () => {\n if (!isListening.value)\n recognition == null ? undefined : recognition.start();\n };\n const stop = () => {\n if (isListening.value)\n recognition == null ? undefined : recognition.stop();\n };\n const toggle = (value = !isListening.value) => {\n if (value) {\n start();\n } else {\n stop();\n }\n };\n const SpeechRecognition = window && (window.SpeechRecognition || window.webkitSpeechRecognition);\n const isSupported = useSupported(() => SpeechRecognition);\n if (isSupported.value) {\n recognition = new SpeechRecognition();\n recognition.continuous = continuous;\n recognition.interimResults = interimResults;\n recognition.lang = toValue(lang);\n recognition.maxAlternatives = maxAlternatives;\n recognition.onstart = () => {\n isListening.value = true;\n isFinal.value = false;\n };\n watch(lang, (lang2) => {\n if (recognition && !isListening.value)\n recognition.lang = lang2;\n });\n recognition.onresult = (event) => {\n const currentResult = event.results[event.resultIndex];\n const { transcript } = currentResult[0];\n isFinal.value = currentResult.isFinal;\n result.value = transcript;\n error.value = undefined;\n };\n recognition.onerror = (event) => {\n error.value = event;\n };\n recognition.onend = () => {\n isListening.value = false;\n recognition.lang = toValue(lang);\n };\n watch(isListening, () => {\n if (isListening.value)\n recognition.start();\n else\n recognition.stop();\n });\n }\n tryOnScopeDispose(() => {\n stop();\n });\n return {\n isSupported,\n isListening,\n isFinal,\n recognition,\n result,\n error,\n toggle,\n start,\n stop\n };\n}\n\nfunction useSpeechSynthesis(text, options = {}) {\n const {\n pitch = 1,\n rate = 1,\n volume = 1,\n window = defaultWindow\n } = options;\n const synth = window && window.speechSynthesis;\n const isSupported = useSupported(() => synth);\n const isPlaying = ref(false);\n const status = ref(\"init\");\n const spokenText = toRef(text || \"\");\n const lang = toRef(options.lang || \"en-US\");\n const error = shallowRef(undefined);\n const toggle = (value = !isPlaying.value) => {\n isPlaying.value = value;\n };\n const bindEventsForUtterance = (utterance2) => {\n utterance2.lang = toValue(lang);\n utterance2.voice = toValue(options.voice) || null;\n utterance2.pitch = toValue(pitch);\n utterance2.rate = toValue(rate);\n utterance2.volume = volume;\n utterance2.onstart = () => {\n isPlaying.value = true;\n status.value = \"play\";\n };\n utterance2.onpause = () => {\n isPlaying.value = false;\n status.value = \"pause\";\n };\n utterance2.onresume = () => {\n isPlaying.value = true;\n status.value = \"play\";\n };\n utterance2.onend = () => {\n isPlaying.value = false;\n status.value = \"end\";\n };\n utterance2.onerror = (event) => {\n error.value = event;\n };\n };\n const utterance = computed(() => {\n isPlaying.value = false;\n status.value = \"init\";\n const newUtterance = new SpeechSynthesisUtterance(spokenText.value);\n bindEventsForUtterance(newUtterance);\n return newUtterance;\n });\n const speak = () => {\n synth.cancel();\n if (utterance)\n synth.speak(utterance.value);\n };\n const stop = () => {\n synth.cancel();\n isPlaying.value = false;\n };\n if (isSupported.value) {\n bindEventsForUtterance(utterance.value);\n watch(lang, (lang2) => {\n if (utterance.value && !isPlaying.value)\n utterance.value.lang = lang2;\n });\n if (options.voice) {\n watch(options.voice, () => {\n synth.cancel();\n });\n }\n watch(isPlaying, () => {\n if (isPlaying.value)\n synth.resume();\n else\n synth.pause();\n });\n }\n tryOnScopeDispose(() => {\n isPlaying.value = false;\n });\n return {\n isSupported,\n isPlaying,\n status,\n utterance,\n error,\n stop,\n toggle,\n speak\n };\n}\n\nfunction useStepper(steps, initialStep) {\n const stepsRef = ref(steps);\n const stepNames = computed(() => Array.isArray(stepsRef.value) ? stepsRef.value : Object.keys(stepsRef.value));\n const index = ref(stepNames.value.indexOf(initialStep != null ? initialStep : stepNames.value[0]));\n const current = computed(() => at(index.value));\n const isFirst = computed(() => index.value === 0);\n const isLast = computed(() => index.value === stepNames.value.length - 1);\n const next = computed(() => stepNames.value[index.value + 1]);\n const previous = computed(() => stepNames.value[index.value - 1]);\n function at(index2) {\n if (Array.isArray(stepsRef.value))\n return stepsRef.value[index2];\n return stepsRef.value[stepNames.value[index2]];\n }\n function get(step) {\n if (!stepNames.value.includes(step))\n return;\n return at(stepNames.value.indexOf(step));\n }\n function goTo(step) {\n if (stepNames.value.includes(step))\n index.value = stepNames.value.indexOf(step);\n }\n function goToNext() {\n if (isLast.value)\n return;\n index.value++;\n }\n function goToPrevious() {\n if (isFirst.value)\n return;\n index.value--;\n }\n function goBackTo(step) {\n if (isAfter(step))\n goTo(step);\n }\n function isNext(step) {\n return stepNames.value.indexOf(step) === index.value + 1;\n }\n function isPrevious(step) {\n return stepNames.value.indexOf(step) === index.value - 1;\n }\n function isCurrent(step) {\n return stepNames.value.indexOf(step) === index.value;\n }\n function isBefore(step) {\n return index.value < stepNames.value.indexOf(step);\n }\n function isAfter(step) {\n return index.value > stepNames.value.indexOf(step);\n }\n return {\n steps: stepsRef,\n stepNames,\n index,\n current,\n next,\n previous,\n isFirst,\n isLast,\n at,\n get,\n goTo,\n goToNext,\n goToPrevious,\n goBackTo,\n isNext,\n isPrevious,\n isCurrent,\n isBefore,\n isAfter\n };\n}\n\nfunction useStorageAsync(key, initialValue, storage, options = {}) {\n var _a;\n const {\n flush = \"pre\",\n deep = true,\n listenToStorageChanges = true,\n writeDefaults = true,\n mergeDefaults = false,\n shallow,\n window = defaultWindow,\n eventFilter,\n onError = (e) => {\n console.error(e);\n }\n } = options;\n const rawInit = toValue(initialValue);\n const type = guessSerializerType(rawInit);\n const data = (shallow ? shallowRef : ref)(toValue(initialValue));\n const serializer = (_a = options.serializer) != null ? _a : StorageSerializers[type];\n if (!storage) {\n try {\n storage = getSSRHandler(\"getDefaultStorageAsync\", () => {\n var _a2;\n return (_a2 = defaultWindow) == null ? void 0 : _a2.localStorage;\n })();\n } catch (e) {\n onError(e);\n }\n }\n async function read(event) {\n if (!storage || event && event.key !== key)\n return;\n try {\n const rawValue = event ? event.newValue : await storage.getItem(key);\n if (rawValue == null) {\n data.value = rawInit;\n if (writeDefaults && rawInit !== null)\n await storage.setItem(key, await serializer.write(rawInit));\n } else if (mergeDefaults) {\n const value = await serializer.read(rawValue);\n if (typeof mergeDefaults === \"function\")\n data.value = mergeDefaults(value, rawInit);\n else if (type === \"object\" && !Array.isArray(value))\n data.value = { ...rawInit, ...value };\n else data.value = value;\n } else {\n data.value = await serializer.read(rawValue);\n }\n } catch (e) {\n onError(e);\n }\n }\n read();\n if (window && listenToStorageChanges)\n useEventListener(window, \"storage\", (e) => Promise.resolve().then(() => read(e)), { passive: true });\n if (storage) {\n watchWithFilter(\n data,\n async () => {\n try {\n if (data.value == null)\n await storage.removeItem(key);\n else\n await storage.setItem(key, await serializer.write(data.value));\n } catch (e) {\n onError(e);\n }\n },\n {\n flush,\n deep,\n eventFilter\n }\n );\n }\n return data;\n}\n\nlet _id = 0;\nfunction useStyleTag(css, options = {}) {\n const isLoaded = ref(false);\n const {\n document = defaultDocument,\n immediate = true,\n manual = false,\n id = `vueuse_styletag_${++_id}`\n } = options;\n const cssRef = ref(css);\n let stop = () => {\n };\n const load = () => {\n if (!document)\n return;\n const el = document.getElementById(id) || document.createElement(\"style\");\n if (!el.isConnected) {\n el.id = id;\n if (options.media)\n el.media = options.media;\n document.head.appendChild(el);\n }\n if (isLoaded.value)\n return;\n stop = watch(\n cssRef,\n (value) => {\n el.textContent = value;\n },\n { immediate: true }\n );\n isLoaded.value = true;\n };\n const unload = () => {\n if (!document || !isLoaded.value)\n return;\n stop();\n document.head.removeChild(document.getElementById(id));\n isLoaded.value = false;\n };\n if (immediate && !manual)\n tryOnMounted(load);\n if (!manual)\n tryOnScopeDispose(unload);\n return {\n id,\n css: cssRef,\n unload,\n load,\n isLoaded: readonly(isLoaded)\n };\n}\n\nfunction useSwipe(target, options = {}) {\n const {\n threshold = 50,\n onSwipe,\n onSwipeEnd,\n onSwipeStart,\n passive = true\n } = options;\n const coordsStart = reactive({ x: 0, y: 0 });\n const coordsEnd = reactive({ x: 0, y: 0 });\n const diffX = computed(() => coordsStart.x - coordsEnd.x);\n const diffY = computed(() => coordsStart.y - coordsEnd.y);\n const { max, abs } = Math;\n const isThresholdExceeded = computed(() => max(abs(diffX.value), abs(diffY.value)) >= threshold);\n const isSwiping = ref(false);\n const direction = computed(() => {\n if (!isThresholdExceeded.value)\n return \"none\";\n if (abs(diffX.value) > abs(diffY.value)) {\n return diffX.value > 0 ? \"left\" : \"right\";\n } else {\n return diffY.value > 0 ? \"up\" : \"down\";\n }\n });\n const getTouchEventCoords = (e) => [e.touches[0].clientX, e.touches[0].clientY];\n const updateCoordsStart = (x, y) => {\n coordsStart.x = x;\n coordsStart.y = y;\n };\n const updateCoordsEnd = (x, y) => {\n coordsEnd.x = x;\n coordsEnd.y = y;\n };\n const listenerOptions = { passive, capture: !passive };\n const onTouchEnd = (e) => {\n if (isSwiping.value)\n onSwipeEnd == null ? undefined : onSwipeEnd(e, direction.value);\n isSwiping.value = false;\n };\n const stops = [\n useEventListener(target, \"touchstart\", (e) => {\n if (e.touches.length !== 1)\n return;\n const [x, y] = getTouchEventCoords(e);\n updateCoordsStart(x, y);\n updateCoordsEnd(x, y);\n onSwipeStart == null ? undefined : onSwipeStart(e);\n }, listenerOptions),\n useEventListener(target, \"touchmove\", (e) => {\n if (e.touches.length !== 1)\n return;\n const [x, y] = getTouchEventCoords(e);\n updateCoordsEnd(x, y);\n if (listenerOptions.capture && !listenerOptions.passive && Math.abs(diffX.value) > Math.abs(diffY.value))\n e.preventDefault();\n if (!isSwiping.value && isThresholdExceeded.value)\n isSwiping.value = true;\n if (isSwiping.value)\n onSwipe == null ? undefined : onSwipe(e);\n }, listenerOptions),\n useEventListener(target, [\"touchend\", \"touchcancel\"], onTouchEnd, listenerOptions)\n ];\n const stop = () => stops.forEach((s) => s());\n return {\n isSwiping,\n direction,\n coordsStart,\n coordsEnd,\n lengthX: diffX,\n lengthY: diffY,\n stop,\n // TODO: Remove in the next major version\n isPassiveEventSupported: true\n };\n}\n\nfunction useTemplateRefsList() {\n const refs = ref([]);\n refs.value.set = (el) => {\n if (el)\n refs.value.push(el);\n };\n onBeforeUpdate(() => {\n refs.value.length = 0;\n });\n return refs;\n}\n\nfunction useTextDirection(options = {}) {\n const {\n document = defaultDocument,\n selector = \"html\",\n observe = false,\n initialValue = \"ltr\"\n } = options;\n function getValue() {\n var _a, _b;\n return (_b = (_a = document == null ? undefined : document.querySelector(selector)) == null ? undefined : _a.getAttribute(\"dir\")) != null ? _b : initialValue;\n }\n const dir = ref(getValue());\n tryOnMounted(() => dir.value = getValue());\n if (observe && document) {\n useMutationObserver(\n document.querySelector(selector),\n () => dir.value = getValue(),\n { attributes: true }\n );\n }\n return computed({\n get() {\n return dir.value;\n },\n set(v) {\n var _a, _b;\n dir.value = v;\n if (!document)\n return;\n if (dir.value)\n (_a = document.querySelector(selector)) == null ? undefined : _a.setAttribute(\"dir\", dir.value);\n else\n (_b = document.querySelector(selector)) == null ? undefined : _b.removeAttribute(\"dir\");\n }\n });\n}\n\nfunction getRangesFromSelection(selection) {\n var _a;\n const rangeCount = (_a = selection.rangeCount) != null ? _a : 0;\n return Array.from({ length: rangeCount }, (_, i) => selection.getRangeAt(i));\n}\nfunction useTextSelection(options = {}) {\n const {\n window = defaultWindow\n } = options;\n const selection = ref(null);\n const text = computed(() => {\n var _a, _b;\n return (_b = (_a = selection.value) == null ? undefined : _a.toString()) != null ? _b : \"\";\n });\n const ranges = computed(() => selection.value ? getRangesFromSelection(selection.value) : []);\n const rects = computed(() => ranges.value.map((range) => range.getBoundingClientRect()));\n function onSelectionChange() {\n selection.value = null;\n if (window)\n selection.value = window.getSelection();\n }\n if (window)\n useEventListener(window.document, \"selectionchange\", onSelectionChange, { passive: true });\n return {\n text,\n rects,\n ranges,\n selection\n };\n}\n\nfunction useTextareaAutosize(options) {\n var _a, _b;\n const textarea = toRef(options == null ? undefined : options.element);\n const input = toRef((_a = options == null ? undefined : options.input) != null ? _a : \"\");\n const styleProp = (_b = options == null ? undefined : options.styleProp) != null ? _b : \"height\";\n const textareaScrollHeight = ref(1);\n const textareaOldWidth = ref(0);\n function triggerResize() {\n var _a2;\n if (!textarea.value)\n return;\n let height = \"\";\n textarea.value.style[styleProp] = \"1px\";\n textareaScrollHeight.value = (_a2 = textarea.value) == null ? undefined : _a2.scrollHeight;\n const _styleTarget = toValue(options == null ? undefined : options.styleTarget);\n if (_styleTarget)\n _styleTarget.style[styleProp] = `${textareaScrollHeight.value}px`;\n else\n height = `${textareaScrollHeight.value}px`;\n textarea.value.style[styleProp] = height;\n }\n watch([input, textarea], () => nextTick(triggerResize), { immediate: true });\n watch(textareaScrollHeight, () => {\n var _a2;\n return (_a2 = options == null ? undefined : options.onResize) == null ? undefined : _a2.call(options);\n });\n useResizeObserver(textarea, ([{ contentRect }]) => {\n if (textareaOldWidth.value === contentRect.width)\n return;\n textareaOldWidth.value = contentRect.width;\n triggerResize();\n });\n if (options == null ? undefined : options.watch)\n watch(options.watch, triggerResize, { immediate: true, deep: true });\n return {\n textarea,\n input,\n triggerResize\n };\n}\n\nfunction useThrottledRefHistory(source, options = {}) {\n const { throttle = 200, trailing = true } = options;\n const filter = throttleFilter(throttle, trailing);\n const history = useRefHistory(source, { ...options, eventFilter: filter });\n return {\n ...history\n };\n}\n\nconst DEFAULT_UNITS = [\n { max: 6e4, value: 1e3, name: \"second\" },\n { max: 276e4, value: 6e4, name: \"minute\" },\n { max: 72e6, value: 36e5, name: \"hour\" },\n { max: 5184e5, value: 864e5, name: \"day\" },\n { max: 24192e5, value: 6048e5, name: \"week\" },\n { max: 28512e6, value: 2592e6, name: \"month\" },\n { max: Number.POSITIVE_INFINITY, value: 31536e6, name: \"year\" }\n];\nconst DEFAULT_MESSAGES = {\n justNow: \"just now\",\n past: (n) => n.match(/\\d/) ? `${n} ago` : n,\n future: (n) => n.match(/\\d/) ? `in ${n}` : n,\n month: (n, past) => n === 1 ? past ? \"last month\" : \"next month\" : `${n} month${n > 1 ? \"s\" : \"\"}`,\n year: (n, past) => n === 1 ? past ? \"last year\" : \"next year\" : `${n} year${n > 1 ? \"s\" : \"\"}`,\n day: (n, past) => n === 1 ? past ? \"yesterday\" : \"tomorrow\" : `${n} day${n > 1 ? \"s\" : \"\"}`,\n week: (n, past) => n === 1 ? past ? \"last week\" : \"next week\" : `${n} week${n > 1 ? \"s\" : \"\"}`,\n hour: (n) => `${n} hour${n > 1 ? \"s\" : \"\"}`,\n minute: (n) => `${n} minute${n > 1 ? \"s\" : \"\"}`,\n second: (n) => `${n} second${n > 1 ? \"s\" : \"\"}`,\n invalid: \"\"\n};\nfunction DEFAULT_FORMATTER(date) {\n return date.toISOString().slice(0, 10);\n}\nfunction useTimeAgo(time, options = {}) {\n const {\n controls: exposeControls = false,\n updateInterval = 3e4\n } = options;\n const { now, ...controls } = useNow({ interval: updateInterval, controls: true });\n const timeAgo = computed(() => formatTimeAgo(new Date(toValue(time)), options, toValue(now)));\n if (exposeControls) {\n return {\n timeAgo,\n ...controls\n };\n } else {\n return timeAgo;\n }\n}\nfunction formatTimeAgo(from, options = {}, now = Date.now()) {\n var _a;\n const {\n max,\n messages = DEFAULT_MESSAGES,\n fullDateFormatter = DEFAULT_FORMATTER,\n units = DEFAULT_UNITS,\n showSecond = false,\n rounding = \"round\"\n } = options;\n const roundFn = typeof rounding === \"number\" ? (n) => +n.toFixed(rounding) : Math[rounding];\n const diff = +now - +from;\n const absDiff = Math.abs(diff);\n function getValue(diff2, unit) {\n return roundFn(Math.abs(diff2) / unit.value);\n }\n function format(diff2, unit) {\n const val = getValue(diff2, unit);\n const past = diff2 > 0;\n const str = applyFormat(unit.name, val, past);\n return applyFormat(past ? \"past\" : \"future\", str, past);\n }\n function applyFormat(name, val, isPast) {\n const formatter = messages[name];\n if (typeof formatter === \"function\")\n return formatter(val, isPast);\n return formatter.replace(\"{0}\", val.toString());\n }\n if (absDiff < 6e4 && !showSecond)\n return messages.justNow;\n if (typeof max === \"number\" && absDiff > max)\n return fullDateFormatter(new Date(from));\n if (typeof max === \"string\") {\n const unitMax = (_a = units.find((i) => i.name === max)) == null ? undefined : _a.max;\n if (unitMax && absDiff > unitMax)\n return fullDateFormatter(new Date(from));\n }\n for (const [idx, unit] of units.entries()) {\n const val = getValue(diff, unit);\n if (val <= 0 && units[idx - 1])\n return format(diff, units[idx - 1]);\n if (absDiff < unit.max)\n return format(diff, unit);\n }\n return messages.invalid;\n}\n\nfunction useTimeoutPoll(fn, interval, options = {}) {\n const {\n immediate = true\n } = options;\n const { start } = useTimeoutFn(loop, interval, { immediate: false });\n const isActive = ref(false);\n async function loop() {\n if (!isActive.value)\n return;\n await fn();\n start();\n }\n function resume() {\n if (!isActive.value) {\n isActive.value = true;\n loop();\n }\n }\n function pause() {\n isActive.value = false;\n }\n if (immediate && isClient)\n resume();\n tryOnScopeDispose(pause);\n return {\n isActive,\n pause,\n resume\n };\n}\n\nfunction useTimestamp(options = {}) {\n const {\n controls: exposeControls = false,\n offset = 0,\n immediate = true,\n interval = \"requestAnimationFrame\",\n callback\n } = options;\n const ts = ref(timestamp() + offset);\n const update = () => ts.value = timestamp() + offset;\n const cb = callback ? () => {\n update();\n callback(ts.value);\n } : update;\n const controls = interval === \"requestAnimationFrame\" ? useRafFn(cb, { immediate }) : useIntervalFn(cb, interval, { immediate });\n if (exposeControls) {\n return {\n timestamp: ts,\n ...controls\n };\n } else {\n return ts;\n }\n}\n\nfunction useTitle(newTitle = null, options = {}) {\n var _a, _b, _c;\n const {\n document = defaultDocument,\n restoreOnUnmount = (t) => t\n } = options;\n const originalTitle = (_a = document == null ? undefined : document.title) != null ? _a : \"\";\n const title = toRef((_b = newTitle != null ? newTitle : document == null ? undefined : document.title) != null ? _b : null);\n const isReadonly = newTitle && typeof newTitle === \"function\";\n function format(t) {\n if (!(\"titleTemplate\" in options))\n return t;\n const template = options.titleTemplate || \"%s\";\n return typeof template === \"function\" ? template(t) : toValue(template).replace(/%s/g, t);\n }\n watch(\n title,\n (t, o) => {\n if (t !== o && document)\n document.title = format(typeof t === \"string\" ? t : \"\");\n },\n { immediate: true }\n );\n if (options.observe && !options.titleTemplate && document && !isReadonly) {\n useMutationObserver(\n (_c = document.head) == null ? undefined : _c.querySelector(\"title\"),\n () => {\n if (document && document.title !== title.value)\n title.value = format(document.title);\n },\n { childList: true }\n );\n }\n tryOnBeforeUnmount(() => {\n if (restoreOnUnmount) {\n const restoredTitle = restoreOnUnmount(originalTitle, title.value || \"\");\n if (restoredTitle != null && document)\n document.title = restoredTitle;\n }\n });\n return title;\n}\n\nconst _TransitionPresets = {\n easeInSine: [0.12, 0, 0.39, 0],\n easeOutSine: [0.61, 1, 0.88, 1],\n easeInOutSine: [0.37, 0, 0.63, 1],\n easeInQuad: [0.11, 0, 0.5, 0],\n easeOutQuad: [0.5, 1, 0.89, 1],\n easeInOutQuad: [0.45, 0, 0.55, 1],\n easeInCubic: [0.32, 0, 0.67, 0],\n easeOutCubic: [0.33, 1, 0.68, 1],\n easeInOutCubic: [0.65, 0, 0.35, 1],\n easeInQuart: [0.5, 0, 0.75, 0],\n easeOutQuart: [0.25, 1, 0.5, 1],\n easeInOutQuart: [0.76, 0, 0.24, 1],\n easeInQuint: [0.64, 0, 0.78, 0],\n easeOutQuint: [0.22, 1, 0.36, 1],\n easeInOutQuint: [0.83, 0, 0.17, 1],\n easeInExpo: [0.7, 0, 0.84, 0],\n easeOutExpo: [0.16, 1, 0.3, 1],\n easeInOutExpo: [0.87, 0, 0.13, 1],\n easeInCirc: [0.55, 0, 1, 0.45],\n easeOutCirc: [0, 0.55, 0.45, 1],\n easeInOutCirc: [0.85, 0, 0.15, 1],\n easeInBack: [0.36, 0, 0.66, -0.56],\n easeOutBack: [0.34, 1.56, 0.64, 1],\n easeInOutBack: [0.68, -0.6, 0.32, 1.6]\n};\nconst TransitionPresets = /* @__PURE__ */ Object.assign({}, { linear: identity }, _TransitionPresets);\nfunction createEasingFunction([p0, p1, p2, p3]) {\n const a = (a1, a2) => 1 - 3 * a2 + 3 * a1;\n const b = (a1, a2) => 3 * a2 - 6 * a1;\n const c = (a1) => 3 * a1;\n const calcBezier = (t, a1, a2) => ((a(a1, a2) * t + b(a1, a2)) * t + c(a1)) * t;\n const getSlope = (t, a1, a2) => 3 * a(a1, a2) * t * t + 2 * b(a1, a2) * t + c(a1);\n const getTforX = (x) => {\n let aGuessT = x;\n for (let i = 0; i < 4; ++i) {\n const currentSlope = getSlope(aGuessT, p0, p2);\n if (currentSlope === 0)\n return aGuessT;\n const currentX = calcBezier(aGuessT, p0, p2) - x;\n aGuessT -= currentX / currentSlope;\n }\n return aGuessT;\n };\n return (x) => p0 === p1 && p2 === p3 ? x : calcBezier(getTforX(x), p1, p3);\n}\nfunction lerp(a, b, alpha) {\n return a + alpha * (b - a);\n}\nfunction toVec(t) {\n return (typeof t === \"number\" ? [t] : t) || [];\n}\nfunction executeTransition(source, from, to, options = {}) {\n var _a, _b;\n const fromVal = toValue(from);\n const toVal = toValue(to);\n const v1 = toVec(fromVal);\n const v2 = toVec(toVal);\n const duration = (_a = toValue(options.duration)) != null ? _a : 1e3;\n const startedAt = Date.now();\n const endAt = Date.now() + duration;\n const trans = typeof options.transition === \"function\" ? options.transition : (_b = toValue(options.transition)) != null ? _b : identity;\n const ease = typeof trans === \"function\" ? trans : createEasingFunction(trans);\n return new Promise((resolve) => {\n source.value = fromVal;\n const tick = () => {\n var _a2;\n if ((_a2 = options.abort) == null ? undefined : _a2.call(options)) {\n resolve();\n return;\n }\n const now = Date.now();\n const alpha = ease((now - startedAt) / duration);\n const arr = toVec(source.value).map((n, i) => lerp(v1[i], v2[i], alpha));\n if (Array.isArray(source.value))\n source.value = arr.map((n, i) => {\n var _a3, _b2;\n return lerp((_a3 = v1[i]) != null ? _a3 : 0, (_b2 = v2[i]) != null ? _b2 : 0, alpha);\n });\n else if (typeof source.value === \"number\")\n source.value = arr[0];\n if (now < endAt) {\n requestAnimationFrame(tick);\n } else {\n source.value = toVal;\n resolve();\n }\n };\n tick();\n });\n}\nfunction useTransition(source, options = {}) {\n let currentId = 0;\n const sourceVal = () => {\n const v = toValue(source);\n return typeof v === \"number\" ? v : v.map(toValue);\n };\n const outputRef = ref(sourceVal());\n watch(sourceVal, async (to) => {\n var _a, _b;\n if (toValue(options.disabled))\n return;\n const id = ++currentId;\n if (options.delay)\n await promiseTimeout(toValue(options.delay));\n if (id !== currentId)\n return;\n const toVal = Array.isArray(to) ? to.map(toValue) : toValue(to);\n (_a = options.onStarted) == null ? undefined : _a.call(options);\n await executeTransition(outputRef, outputRef.value, toVal, {\n ...options,\n abort: () => {\n var _a2;\n return id !== currentId || ((_a2 = options.abort) == null ? undefined : _a2.call(options));\n }\n });\n (_b = options.onFinished) == null ? undefined : _b.call(options);\n }, { deep: true });\n watch(() => toValue(options.disabled), (disabled) => {\n if (disabled) {\n currentId++;\n outputRef.value = sourceVal();\n }\n });\n tryOnScopeDispose(() => {\n currentId++;\n });\n return computed(() => toValue(options.disabled) ? sourceVal() : outputRef.value);\n}\n\nfunction useUrlSearchParams(mode = \"history\", options = {}) {\n const {\n initialValue = {},\n removeNullishValues = true,\n removeFalsyValues = false,\n write: enableWrite = true,\n writeMode = \"replace\",\n window = defaultWindow\n } = options;\n if (!window)\n return reactive(initialValue);\n const state = reactive({});\n function getRawParams() {\n if (mode === \"history\") {\n return window.location.search || \"\";\n } else if (mode === \"hash\") {\n const hash = window.location.hash || \"\";\n const index = hash.indexOf(\"?\");\n return index > 0 ? hash.slice(index) : \"\";\n } else {\n return (window.location.hash || \"\").replace(/^#/, \"\");\n }\n }\n function constructQuery(params) {\n const stringified = params.toString();\n if (mode === \"history\")\n return `${stringified ? `?${stringified}` : \"\"}${window.location.hash || \"\"}`;\n if (mode === \"hash-params\")\n return `${window.location.search || \"\"}${stringified ? `#${stringified}` : \"\"}`;\n const hash = window.location.hash || \"#\";\n const index = hash.indexOf(\"?\");\n if (index > 0)\n return `${window.location.search || \"\"}${hash.slice(0, index)}${stringified ? `?${stringified}` : \"\"}`;\n return `${window.location.search || \"\"}${hash}${stringified ? `?${stringified}` : \"\"}`;\n }\n function read() {\n return new URLSearchParams(getRawParams());\n }\n function updateState(params) {\n const unusedKeys = new Set(Object.keys(state));\n for (const key of params.keys()) {\n const paramsForKey = params.getAll(key);\n state[key] = paramsForKey.length > 1 ? paramsForKey : params.get(key) || \"\";\n unusedKeys.delete(key);\n }\n Array.from(unusedKeys).forEach((key) => delete state[key]);\n }\n const { pause, resume } = pausableWatch(\n state,\n () => {\n const params = new URLSearchParams(\"\");\n Object.keys(state).forEach((key) => {\n const mapEntry = state[key];\n if (Array.isArray(mapEntry))\n mapEntry.forEach((value) => params.append(key, value));\n else if (removeNullishValues && mapEntry == null)\n params.delete(key);\n else if (removeFalsyValues && !mapEntry)\n params.delete(key);\n else\n params.set(key, mapEntry);\n });\n write(params, false);\n },\n { deep: true }\n );\n function write(params, shouldUpdate) {\n pause();\n if (shouldUpdate)\n updateState(params);\n if (writeMode === \"replace\") {\n window.history.replaceState(\n window.history.state,\n window.document.title,\n window.location.pathname + constructQuery(params)\n );\n } else {\n window.history.pushState(\n window.history.state,\n window.document.title,\n window.location.pathname + constructQuery(params)\n );\n }\n resume();\n }\n function onChanged() {\n if (!enableWrite)\n return;\n write(read(), true);\n }\n const listenerOptions = { passive: true };\n useEventListener(window, \"popstate\", onChanged, listenerOptions);\n if (mode !== \"history\")\n useEventListener(window, \"hashchange\", onChanged, listenerOptions);\n const initial = read();\n if (initial.keys().next().value)\n updateState(initial);\n else\n Object.assign(state, initialValue);\n return state;\n}\n\nfunction useUserMedia(options = {}) {\n var _a, _b;\n const enabled = ref((_a = options.enabled) != null ? _a : false);\n const autoSwitch = ref((_b = options.autoSwitch) != null ? _b : true);\n const constraints = ref(options.constraints);\n const { navigator = defaultNavigator } = options;\n const isSupported = useSupported(() => {\n var _a2;\n return (_a2 = navigator == null ? undefined : navigator.mediaDevices) == null ? undefined : _a2.getUserMedia;\n });\n const stream = shallowRef();\n function getDeviceOptions(type) {\n switch (type) {\n case \"video\": {\n if (constraints.value)\n return constraints.value.video || false;\n break;\n }\n case \"audio\": {\n if (constraints.value)\n return constraints.value.audio || false;\n break;\n }\n }\n }\n async function _start() {\n if (!isSupported.value || stream.value)\n return;\n stream.value = await navigator.mediaDevices.getUserMedia({\n video: getDeviceOptions(\"video\"),\n audio: getDeviceOptions(\"audio\")\n });\n return stream.value;\n }\n function _stop() {\n var _a2;\n (_a2 = stream.value) == null ? undefined : _a2.getTracks().forEach((t) => t.stop());\n stream.value = undefined;\n }\n function stop() {\n _stop();\n enabled.value = false;\n }\n async function start() {\n await _start();\n if (stream.value)\n enabled.value = true;\n return stream.value;\n }\n async function restart() {\n _stop();\n return await start();\n }\n watch(\n enabled,\n (v) => {\n if (v)\n _start();\n else _stop();\n },\n { immediate: true }\n );\n watch(\n constraints,\n () => {\n if (autoSwitch.value && stream.value)\n restart();\n },\n { immediate: true }\n );\n tryOnScopeDispose(() => {\n stop();\n });\n return {\n isSupported,\n stream,\n start,\n stop,\n restart,\n constraints,\n enabled,\n autoSwitch\n };\n}\n\nfunction useVModel(props, key, emit, options = {}) {\n var _a, _b, _c;\n const {\n clone = false,\n passive = false,\n eventName,\n deep = false,\n defaultValue,\n shouldEmit\n } = options;\n const vm = getCurrentInstance();\n const _emit = emit || (vm == null ? undefined : vm.emit) || ((_a = vm == null ? undefined : vm.$emit) == null ? undefined : _a.bind(vm)) || ((_c = (_b = vm == null ? undefined : vm.proxy) == null ? undefined : _b.$emit) == null ? undefined : _c.bind(vm == null ? undefined : vm.proxy));\n let event = eventName;\n if (!key) {\n key = \"modelValue\";\n }\n event = event || `update:${key.toString()}`;\n const cloneFn = (val) => !clone ? val : typeof clone === \"function\" ? clone(val) : cloneFnJSON(val);\n const getValue = () => isDef(props[key]) ? cloneFn(props[key]) : defaultValue;\n const triggerEmit = (value) => {\n if (shouldEmit) {\n if (shouldEmit(value))\n _emit(event, value);\n } else {\n _emit(event, value);\n }\n };\n if (passive) {\n const initialValue = getValue();\n const proxy = ref(initialValue);\n let isUpdating = false;\n watch(\n () => props[key],\n (v) => {\n if (!isUpdating) {\n isUpdating = true;\n proxy.value = cloneFn(v);\n nextTick(() => isUpdating = false);\n }\n }\n );\n watch(\n proxy,\n (v) => {\n if (!isUpdating && (v !== props[key] || deep))\n triggerEmit(v);\n },\n { deep }\n );\n return proxy;\n } else {\n return computed({\n get() {\n return getValue();\n },\n set(value) {\n triggerEmit(value);\n }\n });\n }\n}\n\nfunction useVModels(props, emit, options = {}) {\n const ret = {};\n for (const key in props) {\n ret[key] = useVModel(\n props,\n key,\n emit,\n options\n );\n }\n return ret;\n}\n\nfunction useVibrate(options) {\n const {\n pattern = [],\n interval = 0,\n navigator = defaultNavigator\n } = options || {};\n const isSupported = useSupported(() => typeof navigator !== \"undefined\" && \"vibrate\" in navigator);\n const patternRef = toRef(pattern);\n let intervalControls;\n const vibrate = (pattern2 = patternRef.value) => {\n if (isSupported.value)\n navigator.vibrate(pattern2);\n };\n const stop = () => {\n if (isSupported.value)\n navigator.vibrate(0);\n intervalControls == null ? undefined : intervalControls.pause();\n };\n if (interval > 0) {\n intervalControls = useIntervalFn(\n vibrate,\n interval,\n {\n immediate: false,\n immediateCallback: false\n }\n );\n }\n return {\n isSupported,\n pattern,\n intervalControls,\n vibrate,\n stop\n };\n}\n\nfunction useVirtualList(list, options) {\n const { containerStyle, wrapperProps, scrollTo, calculateRange, currentList, containerRef } = \"itemHeight\" in options ? useVerticalVirtualList(options, list) : useHorizontalVirtualList(options, list);\n return {\n list: currentList,\n scrollTo,\n containerProps: {\n ref: containerRef,\n onScroll: () => {\n calculateRange();\n },\n style: containerStyle\n },\n wrapperProps\n };\n}\nfunction useVirtualListResources(list) {\n const containerRef = ref(null);\n const size = useElementSize(containerRef);\n const currentList = ref([]);\n const source = shallowRef(list);\n const state = ref({ start: 0, end: 10 });\n return { state, source, currentList, size, containerRef };\n}\nfunction createGetViewCapacity(state, source, itemSize) {\n return (containerSize) => {\n if (typeof itemSize === \"number\")\n return Math.ceil(containerSize / itemSize);\n const { start = 0 } = state.value;\n let sum = 0;\n let capacity = 0;\n for (let i = start; i < source.value.length; i++) {\n const size = itemSize(i);\n sum += size;\n capacity = i;\n if (sum > containerSize)\n break;\n }\n return capacity - start;\n };\n}\nfunction createGetOffset(source, itemSize) {\n return (scrollDirection) => {\n if (typeof itemSize === \"number\")\n return Math.floor(scrollDirection / itemSize) + 1;\n let sum = 0;\n let offset = 0;\n for (let i = 0; i < source.value.length; i++) {\n const size = itemSize(i);\n sum += size;\n if (sum >= scrollDirection) {\n offset = i;\n break;\n }\n }\n return offset + 1;\n };\n}\nfunction createCalculateRange(type, overscan, getOffset, getViewCapacity, { containerRef, state, currentList, source }) {\n return () => {\n const element = containerRef.value;\n if (element) {\n const offset = getOffset(type === \"vertical\" ? element.scrollTop : element.scrollLeft);\n const viewCapacity = getViewCapacity(type === \"vertical\" ? element.clientHeight : element.clientWidth);\n const from = offset - overscan;\n const to = offset + viewCapacity + overscan;\n state.value = {\n start: from < 0 ? 0 : from,\n end: to > source.value.length ? source.value.length : to\n };\n currentList.value = source.value.slice(state.value.start, state.value.end).map((ele, index) => ({\n data: ele,\n index: index + state.value.start\n }));\n }\n };\n}\nfunction createGetDistance(itemSize, source) {\n return (index) => {\n if (typeof itemSize === \"number\") {\n const size2 = index * itemSize;\n return size2;\n }\n const size = source.value.slice(0, index).reduce((sum, _, i) => sum + itemSize(i), 0);\n return size;\n };\n}\nfunction useWatchForSizes(size, list, containerRef, calculateRange) {\n watch([size.width, size.height, list, containerRef], () => {\n calculateRange();\n });\n}\nfunction createComputedTotalSize(itemSize, source) {\n return computed(() => {\n if (typeof itemSize === \"number\")\n return source.value.length * itemSize;\n return source.value.reduce((sum, _, index) => sum + itemSize(index), 0);\n });\n}\nconst scrollToDictionaryForElementScrollKey = {\n horizontal: \"scrollLeft\",\n vertical: \"scrollTop\"\n};\nfunction createScrollTo(type, calculateRange, getDistance, containerRef) {\n return (index) => {\n if (containerRef.value) {\n containerRef.value[scrollToDictionaryForElementScrollKey[type]] = getDistance(index);\n calculateRange();\n }\n };\n}\nfunction useHorizontalVirtualList(options, list) {\n const resources = useVirtualListResources(list);\n const { state, source, currentList, size, containerRef } = resources;\n const containerStyle = { overflowX: \"auto\" };\n const { itemWidth, overscan = 5 } = options;\n const getViewCapacity = createGetViewCapacity(state, source, itemWidth);\n const getOffset = createGetOffset(source, itemWidth);\n const calculateRange = createCalculateRange(\"horizontal\", overscan, getOffset, getViewCapacity, resources);\n const getDistanceLeft = createGetDistance(itemWidth, source);\n const offsetLeft = computed(() => getDistanceLeft(state.value.start));\n const totalWidth = createComputedTotalSize(itemWidth, source);\n useWatchForSizes(size, list, containerRef, calculateRange);\n const scrollTo = createScrollTo(\"horizontal\", calculateRange, getDistanceLeft, containerRef);\n const wrapperProps = computed(() => {\n return {\n style: {\n height: \"100%\",\n width: `${totalWidth.value - offsetLeft.value}px`,\n marginLeft: `${offsetLeft.value}px`,\n display: \"flex\"\n }\n };\n });\n return {\n scrollTo,\n calculateRange,\n wrapperProps,\n containerStyle,\n currentList,\n containerRef\n };\n}\nfunction useVerticalVirtualList(options, list) {\n const resources = useVirtualListResources(list);\n const { state, source, currentList, size, containerRef } = resources;\n const containerStyle = { overflowY: \"auto\" };\n const { itemHeight, overscan = 5 } = options;\n const getViewCapacity = createGetViewCapacity(state, source, itemHeight);\n const getOffset = createGetOffset(source, itemHeight);\n const calculateRange = createCalculateRange(\"vertical\", overscan, getOffset, getViewCapacity, resources);\n const getDistanceTop = createGetDistance(itemHeight, source);\n const offsetTop = computed(() => getDistanceTop(state.value.start));\n const totalHeight = createComputedTotalSize(itemHeight, source);\n useWatchForSizes(size, list, containerRef, calculateRange);\n const scrollTo = createScrollTo(\"vertical\", calculateRange, getDistanceTop, containerRef);\n const wrapperProps = computed(() => {\n return {\n style: {\n width: \"100%\",\n height: `${totalHeight.value - offsetTop.value}px`,\n marginTop: `${offsetTop.value}px`\n }\n };\n });\n return {\n calculateRange,\n scrollTo,\n containerStyle,\n wrapperProps,\n currentList,\n containerRef\n };\n}\n\nfunction useWakeLock(options = {}) {\n const {\n navigator = defaultNavigator,\n document = defaultDocument\n } = options;\n const requestedType = ref(false);\n const sentinel = shallowRef(null);\n const documentVisibility = useDocumentVisibility({ document });\n const isSupported = useSupported(() => navigator && \"wakeLock\" in navigator);\n const isActive = computed(() => !!sentinel.value && documentVisibility.value === \"visible\");\n if (isSupported.value) {\n useEventListener(sentinel, \"release\", () => {\n var _a, _b;\n requestedType.value = (_b = (_a = sentinel.value) == null ? undefined : _a.type) != null ? _b : false;\n }, { passive: true });\n whenever(\n () => documentVisibility.value === \"visible\" && (document == null ? undefined : document.visibilityState) === \"visible\" && requestedType.value,\n (type) => {\n requestedType.value = false;\n forceRequest(type);\n }\n );\n }\n async function forceRequest(type) {\n var _a;\n await ((_a = sentinel.value) == null ? undefined : _a.release());\n sentinel.value = isSupported.value ? await navigator.wakeLock.request(type) : null;\n }\n async function request(type) {\n if (documentVisibility.value === \"visible\")\n await forceRequest(type);\n else\n requestedType.value = type;\n }\n async function release() {\n requestedType.value = false;\n const s = sentinel.value;\n sentinel.value = null;\n await (s == null ? undefined : s.release());\n }\n return {\n sentinel,\n isSupported,\n isActive,\n request,\n forceRequest,\n release\n };\n}\n\nfunction useWebNotification(options = {}) {\n const {\n window = defaultWindow,\n requestPermissions: _requestForPermissions = true\n } = options;\n const defaultWebNotificationOptions = options;\n const isSupported = useSupported(() => {\n if (!window || !(\"Notification\" in window))\n return false;\n if (Notification.permission === \"granted\")\n return true;\n try {\n const notification2 = new Notification(\"\");\n notification2.onshow = () => {\n notification2.close();\n };\n } catch (e) {\n if (e.name === \"TypeError\")\n return false;\n }\n return true;\n });\n const permissionGranted = ref(isSupported.value && \"permission\" in Notification && Notification.permission === \"granted\");\n const notification = ref(null);\n const ensurePermissions = async () => {\n if (!isSupported.value)\n return;\n if (!permissionGranted.value && Notification.permission !== \"denied\") {\n const result = await Notification.requestPermission();\n if (result === \"granted\")\n permissionGranted.value = true;\n }\n return permissionGranted.value;\n };\n const { on: onClick, trigger: clickTrigger } = createEventHook();\n const { on: onShow, trigger: showTrigger } = createEventHook();\n const { on: onError, trigger: errorTrigger } = createEventHook();\n const { on: onClose, trigger: closeTrigger } = createEventHook();\n const show = async (overrides) => {\n if (!isSupported.value || !permissionGranted.value)\n return;\n const options2 = Object.assign({}, defaultWebNotificationOptions, overrides);\n notification.value = new Notification(options2.title || \"\", options2);\n notification.value.onclick = clickTrigger;\n notification.value.onshow = showTrigger;\n notification.value.onerror = errorTrigger;\n notification.value.onclose = closeTrigger;\n return notification.value;\n };\n const close = () => {\n if (notification.value)\n notification.value.close();\n notification.value = null;\n };\n if (_requestForPermissions)\n tryOnMounted(ensurePermissions);\n tryOnScopeDispose(close);\n if (isSupported.value && window) {\n const document = window.document;\n useEventListener(document, \"visibilitychange\", (e) => {\n e.preventDefault();\n if (document.visibilityState === \"visible\") {\n close();\n }\n });\n }\n return {\n isSupported,\n notification,\n ensurePermissions,\n permissionGranted,\n show,\n close,\n onClick,\n onShow,\n onError,\n onClose\n };\n}\n\nconst DEFAULT_PING_MESSAGE = \"ping\";\nfunction resolveNestedOptions(options) {\n if (options === true)\n return {};\n return options;\n}\nfunction useWebSocket(url, options = {}) {\n const {\n onConnected,\n onDisconnected,\n onError,\n onMessage,\n immediate = true,\n autoConnect = true,\n autoClose = true,\n protocols = []\n } = options;\n const data = ref(null);\n const status = ref(\"CLOSED\");\n const wsRef = ref();\n const urlRef = toRef(url);\n let heartbeatPause;\n let heartbeatResume;\n let explicitlyClosed = false;\n let retried = 0;\n let bufferedData = [];\n let retryTimeout;\n let pongTimeoutWait;\n const _sendBuffer = () => {\n if (bufferedData.length && wsRef.value && status.value === \"OPEN\") {\n for (const buffer of bufferedData)\n wsRef.value.send(buffer);\n bufferedData = [];\n }\n };\n const resetRetry = () => {\n if (retryTimeout != null) {\n clearTimeout(retryTimeout);\n retryTimeout = undefined;\n }\n };\n const resetHeartbeat = () => {\n clearTimeout(pongTimeoutWait);\n pongTimeoutWait = undefined;\n };\n const close = (code = 1e3, reason) => {\n resetRetry();\n if (!isClient && !isWorker || !wsRef.value)\n return;\n explicitlyClosed = true;\n resetHeartbeat();\n heartbeatPause == null ? undefined : heartbeatPause();\n wsRef.value.close(code, reason);\n wsRef.value = undefined;\n };\n const send = (data2, useBuffer = true) => {\n if (!wsRef.value || status.value !== \"OPEN\") {\n if (useBuffer)\n bufferedData.push(data2);\n return false;\n }\n _sendBuffer();\n wsRef.value.send(data2);\n return true;\n };\n const _init = () => {\n if (explicitlyClosed || typeof urlRef.value === \"undefined\")\n return;\n const ws = new WebSocket(urlRef.value, protocols);\n wsRef.value = ws;\n status.value = \"CONNECTING\";\n ws.onopen = () => {\n status.value = \"OPEN\";\n retried = 0;\n onConnected == null ? undefined : onConnected(ws);\n heartbeatResume == null ? undefined : heartbeatResume();\n _sendBuffer();\n };\n ws.onclose = (ev) => {\n status.value = \"CLOSED\";\n onDisconnected == null ? undefined : onDisconnected(ws, ev);\n if (!explicitlyClosed && options.autoReconnect && (wsRef.value == null || ws === wsRef.value)) {\n const {\n retries = -1,\n delay = 1e3,\n onFailed\n } = resolveNestedOptions(options.autoReconnect);\n if (typeof retries === \"number\" && (retries < 0 || retried < retries)) {\n retried += 1;\n retryTimeout = setTimeout(_init, delay);\n } else if (typeof retries === \"function\" && retries()) {\n retryTimeout = setTimeout(_init, delay);\n } else {\n onFailed == null ? undefined : onFailed();\n }\n }\n };\n ws.onerror = (e) => {\n onError == null ? undefined : onError(ws, e);\n };\n ws.onmessage = (e) => {\n if (options.heartbeat) {\n resetHeartbeat();\n const {\n message = DEFAULT_PING_MESSAGE,\n responseMessage = message\n } = resolveNestedOptions(options.heartbeat);\n if (e.data === toValue(responseMessage))\n return;\n }\n data.value = e.data;\n onMessage == null ? undefined : onMessage(ws, e);\n };\n };\n if (options.heartbeat) {\n const {\n message = DEFAULT_PING_MESSAGE,\n interval = 1e3,\n pongTimeout = 1e3\n } = resolveNestedOptions(options.heartbeat);\n const { pause, resume } = useIntervalFn(\n () => {\n send(toValue(message), false);\n if (pongTimeoutWait != null)\n return;\n pongTimeoutWait = setTimeout(() => {\n close();\n explicitlyClosed = false;\n }, pongTimeout);\n },\n interval,\n { immediate: false }\n );\n heartbeatPause = pause;\n heartbeatResume = resume;\n }\n if (autoClose) {\n if (isClient)\n useEventListener(\"beforeunload\", () => close(), { passive: true });\n tryOnScopeDispose(close);\n }\n const open = () => {\n if (!isClient && !isWorker)\n return;\n close();\n explicitlyClosed = false;\n retried = 0;\n _init();\n };\n if (immediate)\n open();\n if (autoConnect)\n watch(urlRef, open);\n return {\n data,\n status,\n close,\n send,\n open,\n ws: wsRef\n };\n}\n\nfunction useWebWorker(arg0, workerOptions, options) {\n const {\n window = defaultWindow\n } = options != null ? options : {};\n const data = ref(null);\n const worker = shallowRef();\n const post = (...args) => {\n if (!worker.value)\n return;\n worker.value.postMessage(...args);\n };\n const terminate = function terminate2() {\n if (!worker.value)\n return;\n worker.value.terminate();\n };\n if (window) {\n if (typeof arg0 === \"string\")\n worker.value = new Worker(arg0, workerOptions);\n else if (typeof arg0 === \"function\")\n worker.value = arg0();\n else\n worker.value = arg0;\n worker.value.onmessage = (e) => {\n data.value = e.data;\n };\n tryOnScopeDispose(() => {\n if (worker.value)\n worker.value.terminate();\n });\n }\n return {\n data,\n post,\n terminate,\n worker\n };\n}\n\nfunction depsParser(deps, localDeps) {\n if (deps.length === 0 && localDeps.length === 0)\n return \"\";\n const depsString = deps.map((dep) => `'${dep}'`).toString();\n const depsFunctionString = localDeps.filter((dep) => typeof dep === \"function\").map((fn) => {\n const str = fn.toString();\n if (str.trim().startsWith(\"function\")) {\n return str;\n } else {\n const name = fn.name;\n return `const ${name} = ${str}`;\n }\n }).join(\";\");\n const importString = `importScripts(${depsString});`;\n return `${depsString.trim() === \"\" ? \"\" : importString} ${depsFunctionString}`;\n}\n\nfunction jobRunner(userFunc) {\n return (e) => {\n const userFuncArgs = e.data[0];\n return Promise.resolve(userFunc.apply(undefined, userFuncArgs)).then((result) => {\n postMessage([\"SUCCESS\", result]);\n }).catch((error) => {\n postMessage([\"ERROR\", error]);\n });\n };\n}\n\nfunction createWorkerBlobUrl(fn, deps, localDeps) {\n const blobCode = `${depsParser(deps, localDeps)}; onmessage=(${jobRunner})(${fn})`;\n const blob = new Blob([blobCode], { type: \"text/javascript\" });\n const url = URL.createObjectURL(blob);\n return url;\n}\n\nfunction useWebWorkerFn(fn, options = {}) {\n const {\n dependencies = [],\n localDependencies = [],\n timeout,\n window = defaultWindow\n } = options;\n const worker = ref();\n const workerStatus = ref(\"PENDING\");\n const promise = ref({});\n const timeoutId = ref();\n const workerTerminate = (status = \"PENDING\") => {\n if (worker.value && worker.value._url && window) {\n worker.value.terminate();\n URL.revokeObjectURL(worker.value._url);\n promise.value = {};\n worker.value = undefined;\n window.clearTimeout(timeoutId.value);\n workerStatus.value = status;\n }\n };\n workerTerminate();\n tryOnScopeDispose(workerTerminate);\n const generateWorker = () => {\n const blobUrl = createWorkerBlobUrl(fn, dependencies, localDependencies);\n const newWorker = new Worker(blobUrl);\n newWorker._url = blobUrl;\n newWorker.onmessage = (e) => {\n const { resolve = () => {\n }, reject = () => {\n } } = promise.value;\n const [status, result] = e.data;\n switch (status) {\n case \"SUCCESS\":\n resolve(result);\n workerTerminate(status);\n break;\n default:\n reject(result);\n workerTerminate(\"ERROR\");\n break;\n }\n };\n newWorker.onerror = (e) => {\n const { reject = () => {\n } } = promise.value;\n e.preventDefault();\n reject(e);\n workerTerminate(\"ERROR\");\n };\n if (timeout) {\n timeoutId.value = setTimeout(\n () => workerTerminate(\"TIMEOUT_EXPIRED\"),\n timeout\n );\n }\n return newWorker;\n };\n const callWorker = (...fnArgs) => new Promise((resolve, reject) => {\n var _a;\n promise.value = {\n resolve,\n reject\n };\n (_a = worker.value) == null ? undefined : _a.postMessage([[...fnArgs]]);\n workerStatus.value = \"RUNNING\";\n });\n const workerFn = (...fnArgs) => {\n if (workerStatus.value === \"RUNNING\") {\n console.error(\n \"[useWebWorkerFn] You can only run one instance of the worker at a time.\"\n );\n return Promise.reject();\n }\n worker.value = generateWorker();\n return callWorker(...fnArgs);\n };\n return {\n workerFn,\n workerStatus,\n workerTerminate\n };\n}\n\nfunction useWindowFocus(options = {}) {\n const { window = defaultWindow } = options;\n if (!window)\n return ref(false);\n const focused = ref(window.document.hasFocus());\n const listenerOptions = { passive: true };\n useEventListener(window, \"blur\", () => {\n focused.value = false;\n }, listenerOptions);\n useEventListener(window, \"focus\", () => {\n focused.value = true;\n }, listenerOptions);\n return focused;\n}\n\nfunction useWindowScroll(options = {}) {\n const { window = defaultWindow, ...rest } = options;\n return useScroll(window, rest);\n}\n\nfunction useWindowSize(options = {}) {\n const {\n window = defaultWindow,\n initialWidth = Number.POSITIVE_INFINITY,\n initialHeight = Number.POSITIVE_INFINITY,\n listenOrientation = true,\n includeScrollbar = true,\n type = \"inner\"\n } = options;\n const width = ref(initialWidth);\n const height = ref(initialHeight);\n const update = () => {\n if (window) {\n if (type === \"outer\") {\n width.value = window.outerWidth;\n height.value = window.outerHeight;\n } else if (type === \"visual\" && window.visualViewport) {\n const { width: visualViewportWidth, height: visualViewportHeight, scale } = window.visualViewport;\n width.value = Math.round(visualViewportWidth * scale);\n height.value = Math.round(visualViewportHeight * scale);\n } else if (includeScrollbar) {\n width.value = window.innerWidth;\n height.value = window.innerHeight;\n } else {\n width.value = window.document.documentElement.clientWidth;\n height.value = window.document.documentElement.clientHeight;\n }\n }\n };\n update();\n tryOnMounted(update);\n const listenerOptions = { passive: true };\n useEventListener(\"resize\", update, listenerOptions);\n if (window && type === \"visual\" && window.visualViewport) {\n useEventListener(window.visualViewport, \"resize\", update, listenerOptions);\n }\n if (listenOrientation) {\n const matches = useMediaQuery(\"(orientation: portrait)\");\n watch(matches, () => update());\n }\n return { width, height };\n}\n\nexport { DefaultMagicKeysAliasMap, StorageSerializers, TransitionPresets, computedAsync as asyncComputed, breakpointsAntDesign, breakpointsBootstrapV5, breakpointsElement, breakpointsMasterCss, breakpointsPrimeFlex, breakpointsQuasar, breakpointsSematic, breakpointsTailwind, breakpointsVuetify, breakpointsVuetifyV2, breakpointsVuetifyV3, cloneFnJSON, computedAsync, computedInject, createFetch, createReusableTemplate, createTemplatePromise, createUnrefFn, customStorageEventName, defaultDocument, defaultLocation, defaultNavigator, defaultWindow, executeTransition, formatTimeAgo, getSSRHandler, mapGamepadToXbox360Controller, onClickOutside, onElementRemoval, onKeyDown, onKeyPressed, onKeyStroke, onKeyUp, onLongPress, onStartTyping, provideSSRWidth, setSSRHandler, templateRef, unrefElement, useActiveElement, useAnimate, useAsyncQueue, useAsyncState, useBase64, useBattery, useBluetooth, useBreakpoints, useBroadcastChannel, useBrowserLocation, useCached, useClipboard, useClipboardItems, useCloned, useColorMode, useConfirmDialog, useCssVar, useCurrentElement, useCycleList, useDark, useDebouncedRefHistory, useDeviceMotion, useDeviceOrientation, useDevicePixelRatio, useDevicesList, useDisplayMedia, useDocumentVisibility, useDraggable, useDropZone, useElementBounding, useElementByPoint, useElementHover, useElementSize, useElementVisibility, useEventBus, useEventListener, useEventSource, useEyeDropper, useFavicon, useFetch, useFileDialog, useFileSystemAccess, useFocus, useFocusWithin, useFps, useFullscreen, useGamepad, useGeolocation, useIdle, useImage, useInfiniteScroll, useIntersectionObserver, useKeyModifier, useLocalStorage, useMagicKeys, useManualRefHistory, useMediaControls, useMediaQuery, useMemoize, useMemory, useMounted, useMouse, useMouseInElement, useMousePressed, useMutationObserver, useNavigatorLanguage, useNetwork, useNow, useObjectUrl, useOffsetPagination, useOnline, usePageLeave, useParallax, useParentElement, usePerformanceObserver, usePermission, usePointer, usePointerLock, usePointerSwipe, usePreferredColorScheme, usePreferredContrast, usePreferredDark, usePreferredLanguages, usePreferredReducedMotion, usePreferredReducedTransparency, usePrevious, useRafFn, useRefHistory, useResizeObserver, useSSRWidth, useScreenOrientation, useScreenSafeArea, useScriptTag, useScroll, useScrollLock, useSessionStorage, useShare, useSorted, useSpeechRecognition, useSpeechSynthesis, useStepper, useStorage, useStorageAsync, useStyleTag, useSupported, useSwipe, useTemplateRefsList, useTextDirection, useTextSelection, useTextareaAutosize, useThrottledRefHistory, useTimeAgo, useTimeoutPoll, useTimestamp, useTitle, useTransition, useUrlSearchParams, useUserMedia, useVModel, useVModels, useVibrate, useVirtualList, useWakeLock, useWebNotification, useWebSocket, useWebWorker, useWebWorkerFn, useWindowFocus, useWindowScroll, useWindowSize };\n","var util;\n(function (util) {\n util.assertEqual = (val) => val;\n function assertIs(_arg) { }\n util.assertIs = assertIs;\n function assertNever(_x) {\n throw new Error();\n }\n util.assertNever = assertNever;\n util.arrayToEnum = (items) => {\n const obj = {};\n for (const item of items) {\n obj[item] = item;\n }\n return obj;\n };\n util.getValidEnumValues = (obj) => {\n const validKeys = util.objectKeys(obj).filter((k) => typeof obj[obj[k]] !== \"number\");\n const filtered = {};\n for (const k of validKeys) {\n filtered[k] = obj[k];\n }\n return util.objectValues(filtered);\n };\n util.objectValues = (obj) => {\n return util.objectKeys(obj).map(function (e) {\n return obj[e];\n });\n };\n util.objectKeys = typeof Object.keys === \"function\" // eslint-disable-line ban/ban\n ? (obj) => Object.keys(obj) // eslint-disable-line ban/ban\n : (object) => {\n const keys = [];\n for (const key in object) {\n if (Object.prototype.hasOwnProperty.call(object, key)) {\n keys.push(key);\n }\n }\n return keys;\n };\n util.find = (arr, checker) => {\n for (const item of arr) {\n if (checker(item))\n return item;\n }\n return undefined;\n };\n util.isInteger = typeof Number.isInteger === \"function\"\n ? (val) => Number.isInteger(val) // eslint-disable-line ban/ban\n : (val) => typeof val === \"number\" && isFinite(val) && Math.floor(val) === val;\n function joinValues(array, separator = \" | \") {\n return array\n .map((val) => (typeof val === \"string\" ? `'${val}'` : val))\n .join(separator);\n }\n util.joinValues = joinValues;\n util.jsonStringifyReplacer = (_, value) => {\n if (typeof value === \"bigint\") {\n return value.toString();\n }\n return value;\n };\n})(util || (util = {}));\nvar objectUtil;\n(function (objectUtil) {\n objectUtil.mergeShapes = (first, second) => {\n return {\n ...first,\n ...second, // second overwrites first\n };\n };\n})(objectUtil || (objectUtil = {}));\nconst ZodParsedType = util.arrayToEnum([\n \"string\",\n \"nan\",\n \"number\",\n \"integer\",\n \"float\",\n \"boolean\",\n \"date\",\n \"bigint\",\n \"symbol\",\n \"function\",\n \"undefined\",\n \"null\",\n \"array\",\n \"object\",\n \"unknown\",\n \"promise\",\n \"void\",\n \"never\",\n \"map\",\n \"set\",\n]);\nconst getParsedType = (data) => {\n const t = typeof data;\n switch (t) {\n case \"undefined\":\n return ZodParsedType.undefined;\n case \"string\":\n return ZodParsedType.string;\n case \"number\":\n return isNaN(data) ? ZodParsedType.nan : ZodParsedType.number;\n case \"boolean\":\n return ZodParsedType.boolean;\n case \"function\":\n return ZodParsedType.function;\n case \"bigint\":\n return ZodParsedType.bigint;\n case \"symbol\":\n return ZodParsedType.symbol;\n case \"object\":\n if (Array.isArray(data)) {\n return ZodParsedType.array;\n }\n if (data === null) {\n return ZodParsedType.null;\n }\n if (data.then &&\n typeof data.then === \"function\" &&\n data.catch &&\n typeof data.catch === \"function\") {\n return ZodParsedType.promise;\n }\n if (typeof Map !== \"undefined\" && data instanceof Map) {\n return ZodParsedType.map;\n }\n if (typeof Set !== \"undefined\" && data instanceof Set) {\n return ZodParsedType.set;\n }\n if (typeof Date !== \"undefined\" && data instanceof Date) {\n return ZodParsedType.date;\n }\n return ZodParsedType.object;\n default:\n return ZodParsedType.unknown;\n }\n};\n\nconst ZodIssueCode = util.arrayToEnum([\n \"invalid_type\",\n \"invalid_literal\",\n \"custom\",\n \"invalid_union\",\n \"invalid_union_discriminator\",\n \"invalid_enum_value\",\n \"unrecognized_keys\",\n \"invalid_arguments\",\n \"invalid_return_type\",\n \"invalid_date\",\n \"invalid_string\",\n \"too_small\",\n \"too_big\",\n \"invalid_intersection_types\",\n \"not_multiple_of\",\n \"not_finite\",\n]);\nconst quotelessJson = (obj) => {\n const json = JSON.stringify(obj, null, 2);\n return json.replace(/\"([^\"]+)\":/g, \"$1:\");\n};\nclass ZodError extends Error {\n constructor(issues) {\n super();\n this.issues = [];\n this.addIssue = (sub) => {\n this.issues = [...this.issues, sub];\n };\n this.addIssues = (subs = []) => {\n this.issues = [...this.issues, ...subs];\n };\n const actualProto = new.target.prototype;\n if (Object.setPrototypeOf) {\n // eslint-disable-next-line ban/ban\n Object.setPrototypeOf(this, actualProto);\n }\n else {\n this.__proto__ = actualProto;\n }\n this.name = \"ZodError\";\n this.issues = issues;\n }\n get errors() {\n return this.issues;\n }\n format(_mapper) {\n const mapper = _mapper ||\n function (issue) {\n return issue.message;\n };\n const fieldErrors = { _errors: [] };\n const processError = (error) => {\n for (const issue of error.issues) {\n if (issue.code === \"invalid_union\") {\n issue.unionErrors.map(processError);\n }\n else if (issue.code === \"invalid_return_type\") {\n processError(issue.returnTypeError);\n }\n else if (issue.code === \"invalid_arguments\") {\n processError(issue.argumentsError);\n }\n else if (issue.path.length === 0) {\n fieldErrors._errors.push(mapper(issue));\n }\n else {\n let curr = fieldErrors;\n let i = 0;\n while (i < issue.path.length) {\n const el = issue.path[i];\n const terminal = i === issue.path.length - 1;\n if (!terminal) {\n curr[el] = curr[el] || { _errors: [] };\n // if (typeof el === \"string\") {\n // curr[el] = curr[el] || { _errors: [] };\n // } else if (typeof el === \"number\") {\n // const errorArray: any = [];\n // errorArray._errors = [];\n // curr[el] = curr[el] || errorArray;\n // }\n }\n else {\n curr[el] = curr[el] || { _errors: [] };\n curr[el]._errors.push(mapper(issue));\n }\n curr = curr[el];\n i++;\n }\n }\n }\n };\n processError(this);\n return fieldErrors;\n }\n static assert(value) {\n if (!(value instanceof ZodError)) {\n throw new Error(`Not a ZodError: ${value}`);\n }\n }\n toString() {\n return this.message;\n }\n get message() {\n return JSON.stringify(this.issues, util.jsonStringifyReplacer, 2);\n }\n get isEmpty() {\n return this.issues.length === 0;\n }\n flatten(mapper = (issue) => issue.message) {\n const fieldErrors = {};\n const formErrors = [];\n for (const sub of this.issues) {\n if (sub.path.length > 0) {\n fieldErrors[sub.path[0]] = fieldErrors[sub.path[0]] || [];\n fieldErrors[sub.path[0]].push(mapper(sub));\n }\n else {\n formErrors.push(mapper(sub));\n }\n }\n return { formErrors, fieldErrors };\n }\n get formErrors() {\n return this.flatten();\n }\n}\nZodError.create = (issues) => {\n const error = new ZodError(issues);\n return error;\n};\n\nconst errorMap = (issue, _ctx) => {\n let message;\n switch (issue.code) {\n case ZodIssueCode.invalid_type:\n if (issue.received === ZodParsedType.undefined) {\n message = \"Required\";\n }\n else {\n message = `Expected ${issue.expected}, received ${issue.received}`;\n }\n break;\n case ZodIssueCode.invalid_literal:\n message = `Invalid literal value, expected ${JSON.stringify(issue.expected, util.jsonStringifyReplacer)}`;\n break;\n case ZodIssueCode.unrecognized_keys:\n message = `Unrecognized key(s) in object: ${util.joinValues(issue.keys, \", \")}`;\n break;\n case ZodIssueCode.invalid_union:\n message = `Invalid input`;\n break;\n case ZodIssueCode.invalid_union_discriminator:\n message = `Invalid discriminator value. Expected ${util.joinValues(issue.options)}`;\n break;\n case ZodIssueCode.invalid_enum_value:\n message = `Invalid enum value. Expected ${util.joinValues(issue.options)}, received '${issue.received}'`;\n break;\n case ZodIssueCode.invalid_arguments:\n message = `Invalid function arguments`;\n break;\n case ZodIssueCode.invalid_return_type:\n message = `Invalid function return type`;\n break;\n case ZodIssueCode.invalid_date:\n message = `Invalid date`;\n break;\n case ZodIssueCode.invalid_string:\n if (typeof issue.validation === \"object\") {\n if (\"includes\" in issue.validation) {\n message = `Invalid input: must include \"${issue.validation.includes}\"`;\n if (typeof issue.validation.position === \"number\") {\n message = `${message} at one or more positions greater than or equal to ${issue.validation.position}`;\n }\n }\n else if (\"startsWith\" in issue.validation) {\n message = `Invalid input: must start with \"${issue.validation.startsWith}\"`;\n }\n else if (\"endsWith\" in issue.validation) {\n message = `Invalid input: must end with \"${issue.validation.endsWith}\"`;\n }\n else {\n util.assertNever(issue.validation);\n }\n }\n else if (issue.validation !== \"regex\") {\n message = `Invalid ${issue.validation}`;\n }\n else {\n message = \"Invalid\";\n }\n break;\n case ZodIssueCode.too_small:\n if (issue.type === \"array\")\n message = `Array must contain ${issue.exact ? \"exactly\" : issue.inclusive ? `at least` : `more than`} ${issue.minimum} element(s)`;\n else if (issue.type === \"string\")\n message = `String must contain ${issue.exact ? \"exactly\" : issue.inclusive ? `at least` : `over`} ${issue.minimum} character(s)`;\n else if (issue.type === \"number\")\n message = `Number must be ${issue.exact\n ? `exactly equal to `\n : issue.inclusive\n ? `greater than or equal to `\n : `greater than `}${issue.minimum}`;\n else if (issue.type === \"date\")\n message = `Date must be ${issue.exact\n ? `exactly equal to `\n : issue.inclusive\n ? `greater than or equal to `\n : `greater than `}${new Date(Number(issue.minimum))}`;\n else\n message = \"Invalid input\";\n break;\n case ZodIssueCode.too_big:\n if (issue.type === \"array\")\n message = `Array must contain ${issue.exact ? `exactly` : issue.inclusive ? `at most` : `less than`} ${issue.maximum} element(s)`;\n else if (issue.type === \"string\")\n message = `String must contain ${issue.exact ? `exactly` : issue.inclusive ? `at most` : `under`} ${issue.maximum} character(s)`;\n else if (issue.type === \"number\")\n message = `Number must be ${issue.exact\n ? `exactly`\n : issue.inclusive\n ? `less than or equal to`\n : `less than`} ${issue.maximum}`;\n else if (issue.type === \"bigint\")\n message = `BigInt must be ${issue.exact\n ? `exactly`\n : issue.inclusive\n ? `less than or equal to`\n : `less than`} ${issue.maximum}`;\n else if (issue.type === \"date\")\n message = `Date must be ${issue.exact\n ? `exactly`\n : issue.inclusive\n ? `smaller than or equal to`\n : `smaller than`} ${new Date(Number(issue.maximum))}`;\n else\n message = \"Invalid input\";\n break;\n case ZodIssueCode.custom:\n message = `Invalid input`;\n break;\n case ZodIssueCode.invalid_intersection_types:\n message = `Intersection results could not be merged`;\n break;\n case ZodIssueCode.not_multiple_of:\n message = `Number must be a multiple of ${issue.multipleOf}`;\n break;\n case ZodIssueCode.not_finite:\n message = \"Number must be finite\";\n break;\n default:\n message = _ctx.defaultError;\n util.assertNever(issue);\n }\n return { message };\n};\n\nlet overrideErrorMap = errorMap;\nfunction setErrorMap(map) {\n overrideErrorMap = map;\n}\nfunction getErrorMap() {\n return overrideErrorMap;\n}\n\nconst makeIssue = (params) => {\n const { data, path, errorMaps, issueData } = params;\n const fullPath = [...path, ...(issueData.path || [])];\n const fullIssue = {\n ...issueData,\n path: fullPath,\n };\n if (issueData.message !== undefined) {\n return {\n ...issueData,\n path: fullPath,\n message: issueData.message,\n };\n }\n let errorMessage = \"\";\n const maps = errorMaps\n .filter((m) => !!m)\n .slice()\n .reverse();\n for (const map of maps) {\n errorMessage = map(fullIssue, { data, defaultError: errorMessage }).message;\n }\n return {\n ...issueData,\n path: fullPath,\n message: errorMessage,\n };\n};\nconst EMPTY_PATH = [];\nfunction addIssueToContext(ctx, issueData) {\n const overrideMap = getErrorMap();\n const issue = makeIssue({\n issueData: issueData,\n data: ctx.data,\n path: ctx.path,\n errorMaps: [\n ctx.common.contextualErrorMap,\n ctx.schemaErrorMap,\n overrideMap,\n overrideMap === errorMap ? undefined : errorMap, // then global default map\n ].filter((x) => !!x),\n });\n ctx.common.issues.push(issue);\n}\nclass ParseStatus {\n constructor() {\n this.value = \"valid\";\n }\n dirty() {\n if (this.value === \"valid\")\n this.value = \"dirty\";\n }\n abort() {\n if (this.value !== \"aborted\")\n this.value = \"aborted\";\n }\n static mergeArray(status, results) {\n const arrayValue = [];\n for (const s of results) {\n if (s.status === \"aborted\")\n return INVALID;\n if (s.status === \"dirty\")\n status.dirty();\n arrayValue.push(s.value);\n }\n return { status: status.value, value: arrayValue };\n }\n static async mergeObjectAsync(status, pairs) {\n const syncPairs = [];\n for (const pair of pairs) {\n const key = await pair.key;\n const value = await pair.value;\n syncPairs.push({\n key,\n value,\n });\n }\n return ParseStatus.mergeObjectSync(status, syncPairs);\n }\n static mergeObjectSync(status, pairs) {\n const finalObject = {};\n for (const pair of pairs) {\n const { key, value } = pair;\n if (key.status === \"aborted\")\n return INVALID;\n if (value.status === \"aborted\")\n return INVALID;\n if (key.status === \"dirty\")\n status.dirty();\n if (value.status === \"dirty\")\n status.dirty();\n if (key.value !== \"__proto__\" &&\n (typeof value.value !== \"undefined\" || pair.alwaysSet)) {\n finalObject[key.value] = value.value;\n }\n }\n return { status: status.value, value: finalObject };\n }\n}\nconst INVALID = Object.freeze({\n status: \"aborted\",\n});\nconst DIRTY = (value) => ({ status: \"dirty\", value });\nconst OK = (value) => ({ status: \"valid\", value });\nconst isAborted = (x) => x.status === \"aborted\";\nconst isDirty = (x) => x.status === \"dirty\";\nconst isValid = (x) => x.status === \"valid\";\nconst isAsync = (x) => typeof Promise !== \"undefined\" && x instanceof Promise;\n\n/******************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n\r\nfunction __classPrivateFieldGet(receiver, state, kind, f) {\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\r\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\r\n}\r\n\r\nfunction __classPrivateFieldSet(receiver, state, value, kind, f) {\r\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\r\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\r\n}\r\n\r\ntypeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\r\n var e = new Error(message);\r\n return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\r\n};\n\nvar errorUtil;\n(function (errorUtil) {\n errorUtil.errToObj = (message) => typeof message === \"string\" ? { message } : message || {};\n errorUtil.toString = (message) => typeof message === \"string\" ? message : message === null || message === void 0 ? void 0 : message.message;\n})(errorUtil || (errorUtil = {}));\n\nvar _ZodEnum_cache, _ZodNativeEnum_cache;\nclass ParseInputLazyPath {\n constructor(parent, value, path, key) {\n this._cachedPath = [];\n this.parent = parent;\n this.data = value;\n this._path = path;\n this._key = key;\n }\n get path() {\n if (!this._cachedPath.length) {\n if (this._key instanceof Array) {\n this._cachedPath.push(...this._path, ...this._key);\n }\n else {\n this._cachedPath.push(...this._path, this._key);\n }\n }\n return this._cachedPath;\n }\n}\nconst handleResult = (ctx, result) => {\n if (isValid(result)) {\n return { success: true, data: result.value };\n }\n else {\n if (!ctx.common.issues.length) {\n throw new Error(\"Validation failed but no issues detected.\");\n }\n return {\n success: false,\n get error() {\n if (this._error)\n return this._error;\n const error = new ZodError(ctx.common.issues);\n this._error = error;\n return this._error;\n },\n };\n }\n};\nfunction processCreateParams(params) {\n if (!params)\n return {};\n const { errorMap, invalid_type_error, required_error, description } = params;\n if (errorMap && (invalid_type_error || required_error)) {\n throw new Error(`Can't use \"invalid_type_error\" or \"required_error\" in conjunction with custom error map.`);\n }\n if (errorMap)\n return { errorMap: errorMap, description };\n const customMap = (iss, ctx) => {\n var _a, _b;\n const { message } = params;\n if (iss.code === \"invalid_enum_value\") {\n return { message: message !== null && message !== void 0 ? message : ctx.defaultError };\n }\n if (typeof ctx.data === \"undefined\") {\n return { message: (_a = message !== null && message !== void 0 ? message : required_error) !== null && _a !== void 0 ? _a : ctx.defaultError };\n }\n if (iss.code !== \"invalid_type\")\n return { message: ctx.defaultError };\n return { message: (_b = message !== null && message !== void 0 ? message : invalid_type_error) !== null && _b !== void 0 ? _b : ctx.defaultError };\n };\n return { errorMap: customMap, description };\n}\nclass ZodType {\n constructor(def) {\n /** Alias of safeParseAsync */\n this.spa = this.safeParseAsync;\n this._def = def;\n this.parse = this.parse.bind(this);\n this.safeParse = this.safeParse.bind(this);\n this.parseAsync = this.parseAsync.bind(this);\n this.safeParseAsync = this.safeParseAsync.bind(this);\n this.spa = this.spa.bind(this);\n this.refine = this.refine.bind(this);\n this.refinement = this.refinement.bind(this);\n this.superRefine = this.superRefine.bind(this);\n this.optional = this.optional.bind(this);\n this.nullable = this.nullable.bind(this);\n this.nullish = this.nullish.bind(this);\n this.array = this.array.bind(this);\n this.promise = this.promise.bind(this);\n this.or = this.or.bind(this);\n this.and = this.and.bind(this);\n this.transform = this.transform.bind(this);\n this.brand = this.brand.bind(this);\n this.default = this.default.bind(this);\n this.catch = this.catch.bind(this);\n this.describe = this.describe.bind(this);\n this.pipe = this.pipe.bind(this);\n this.readonly = this.readonly.bind(this);\n this.isNullable = this.isNullable.bind(this);\n this.isOptional = this.isOptional.bind(this);\n }\n get description() {\n return this._def.description;\n }\n _getType(input) {\n return getParsedType(input.data);\n }\n _getOrReturnCtx(input, ctx) {\n return (ctx || {\n common: input.parent.common,\n data: input.data,\n parsedType: getParsedType(input.data),\n schemaErrorMap: this._def.errorMap,\n path: input.path,\n parent: input.parent,\n });\n }\n _processInputParams(input) {\n return {\n status: new ParseStatus(),\n ctx: {\n common: input.parent.common,\n data: input.data,\n parsedType: getParsedType(input.data),\n schemaErrorMap: this._def.errorMap,\n path: input.path,\n parent: input.parent,\n },\n };\n }\n _parseSync(input) {\n const result = this._parse(input);\n if (isAsync(result)) {\n throw new Error(\"Synchronous parse encountered promise.\");\n }\n return result;\n }\n _parseAsync(input) {\n const result = this._parse(input);\n return Promise.resolve(result);\n }\n parse(data, params) {\n const result = this.safeParse(data, params);\n if (result.success)\n return result.data;\n throw result.error;\n }\n safeParse(data, params) {\n var _a;\n const ctx = {\n common: {\n issues: [],\n async: (_a = params === null || params === void 0 ? void 0 : params.async) !== null && _a !== void 0 ? _a : false,\n contextualErrorMap: params === null || params === void 0 ? void 0 : params.errorMap,\n },\n path: (params === null || params === void 0 ? void 0 : params.path) || [],\n schemaErrorMap: this._def.errorMap,\n parent: null,\n data,\n parsedType: getParsedType(data),\n };\n const result = this._parseSync({ data, path: ctx.path, parent: ctx });\n return handleResult(ctx, result);\n }\n async parseAsync(data, params) {\n const result = await this.safeParseAsync(data, params);\n if (result.success)\n return result.data;\n throw result.error;\n }\n async safeParseAsync(data, params) {\n const ctx = {\n common: {\n issues: [],\n contextualErrorMap: params === null || params === void 0 ? void 0 : params.errorMap,\n async: true,\n },\n path: (params === null || params === void 0 ? void 0 : params.path) || [],\n schemaErrorMap: this._def.errorMap,\n parent: null,\n data,\n parsedType: getParsedType(data),\n };\n const maybeAsyncResult = this._parse({ data, path: ctx.path, parent: ctx });\n const result = await (isAsync(maybeAsyncResult)\n ? maybeAsyncResult\n : Promise.resolve(maybeAsyncResult));\n return handleResult(ctx, result);\n }\n refine(check, message) {\n const getIssueProperties = (val) => {\n if (typeof message === \"string\" || typeof message === \"undefined\") {\n return { message };\n }\n else if (typeof message === \"function\") {\n return message(val);\n }\n else {\n return message;\n }\n };\n return this._refinement((val, ctx) => {\n const result = check(val);\n const setError = () => ctx.addIssue({\n code: ZodIssueCode.custom,\n ...getIssueProperties(val),\n });\n if (typeof Promise !== \"undefined\" && result instanceof Promise) {\n return result.then((data) => {\n if (!data) {\n setError();\n return false;\n }\n else {\n return true;\n }\n });\n }\n if (!result) {\n setError();\n return false;\n }\n else {\n return true;\n }\n });\n }\n refinement(check, refinementData) {\n return this._refinement((val, ctx) => {\n if (!check(val)) {\n ctx.addIssue(typeof refinementData === \"function\"\n ? refinementData(val, ctx)\n : refinementData);\n return false;\n }\n else {\n return true;\n }\n });\n }\n _refinement(refinement) {\n return new ZodEffects({\n schema: this,\n typeName: ZodFirstPartyTypeKind.ZodEffects,\n effect: { type: \"refinement\", refinement },\n });\n }\n superRefine(refinement) {\n return this._refinement(refinement);\n }\n optional() {\n return ZodOptional.create(this, this._def);\n }\n nullable() {\n return ZodNullable.create(this, this._def);\n }\n nullish() {\n return this.nullable().optional();\n }\n array() {\n return ZodArray.create(this, this._def);\n }\n promise() {\n return ZodPromise.create(this, this._def);\n }\n or(option) {\n return ZodUnion.create([this, option], this._def);\n }\n and(incoming) {\n return ZodIntersection.create(this, incoming, this._def);\n }\n transform(transform) {\n return new ZodEffects({\n ...processCreateParams(this._def),\n schema: this,\n typeName: ZodFirstPartyTypeKind.ZodEffects,\n effect: { type: \"transform\", transform },\n });\n }\n default(def) {\n const defaultValueFunc = typeof def === \"function\" ? def : () => def;\n return new ZodDefault({\n ...processCreateParams(this._def),\n innerType: this,\n defaultValue: defaultValueFunc,\n typeName: ZodFirstPartyTypeKind.ZodDefault,\n });\n }\n brand() {\n return new ZodBranded({\n typeName: ZodFirstPartyTypeKind.ZodBranded,\n type: this,\n ...processCreateParams(this._def),\n });\n }\n catch(def) {\n const catchValueFunc = typeof def === \"function\" ? def : () => def;\n return new ZodCatch({\n ...processCreateParams(this._def),\n innerType: this,\n catchValue: catchValueFunc,\n typeName: ZodFirstPartyTypeKind.ZodCatch,\n });\n }\n describe(description) {\n const This = this.constructor;\n return new This({\n ...this._def,\n description,\n });\n }\n pipe(target) {\n return ZodPipeline.create(this, target);\n }\n readonly() {\n return ZodReadonly.create(this);\n }\n isOptional() {\n return this.safeParse(undefined).success;\n }\n isNullable() {\n return this.safeParse(null).success;\n }\n}\nconst cuidRegex = /^c[^\\s-]{8,}$/i;\nconst cuid2Regex = /^[0-9a-z]+$/;\nconst ulidRegex = /^[0-9A-HJKMNP-TV-Z]{26}$/;\n// const uuidRegex =\n// /^([a-f0-9]{8}-[a-f0-9]{4}-[1-5][a-f0-9]{3}-[a-f0-9]{4}-[a-f0-9]{12}|00000000-0000-0000-0000-000000000000)$/i;\nconst uuidRegex = /^[0-9a-fA-F]{8}\\b-[0-9a-fA-F]{4}\\b-[0-9a-fA-F]{4}\\b-[0-9a-fA-F]{4}\\b-[0-9a-fA-F]{12}$/i;\nconst nanoidRegex = /^[a-z0-9_-]{21}$/i;\nconst durationRegex = /^[-+]?P(?!$)(?:(?:[-+]?\\d+Y)|(?:[-+]?\\d+[.,]\\d+Y$))?(?:(?:[-+]?\\d+M)|(?:[-+]?\\d+[.,]\\d+M$))?(?:(?:[-+]?\\d+W)|(?:[-+]?\\d+[.,]\\d+W$))?(?:(?:[-+]?\\d+D)|(?:[-+]?\\d+[.,]\\d+D$))?(?:T(?=[\\d+-])(?:(?:[-+]?\\d+H)|(?:[-+]?\\d+[.,]\\d+H$))?(?:(?:[-+]?\\d+M)|(?:[-+]?\\d+[.,]\\d+M$))?(?:[-+]?\\d+(?:[.,]\\d+)?S)?)??$/;\n// from https://stackoverflow.com/a/46181/1550155\n// old version: too slow, didn't support unicode\n// const emailRegex = /^((([a-z]|\\d|[!#\\$%&'\\*\\+\\-\\/=\\?\\^_`{\\|}~]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])+(\\.([a-z]|\\d|[!#\\$%&'\\*\\+\\-\\/=\\?\\^_`{\\|}~]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])+)*)|((\\x22)((((\\x20|\\x09)*(\\x0d\\x0a))?(\\x20|\\x09)+)?(([\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x7f]|\\x21|[\\x23-\\x5b]|[\\x5d-\\x7e]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(\\\\([\\x01-\\x09\\x0b\\x0c\\x0d-\\x7f]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF]))))*(((\\x20|\\x09)*(\\x0d\\x0a))?(\\x20|\\x09)+)?(\\x22)))@((([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))\\.)+(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))$/i;\n//old email regex\n// const emailRegex = /^(([^<>()[\\].,;:\\s@\"]+(\\.[^<>()[\\].,;:\\s@\"]+)*)|(\".+\"))@((?!-)([^<>()[\\].,;:\\s@\"]+\\.)+[^<>()[\\].,;:\\s@\"]{1,})[^-<>()[\\].,;:\\s@\"]$/i;\n// eslint-disable-next-line\n// const emailRegex =\n// /^(([^<>()[\\]\\\\.,;:\\s@\\\"]+(\\.[^<>()[\\]\\\\.,;:\\s@\\\"]+)*)|(\\\".+\\\"))@((\\[(((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))\\.){3}((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))\\])|(\\[IPv6:(([a-f0-9]{1,4}:){7}|::([a-f0-9]{1,4}:){0,6}|([a-f0-9]{1,4}:){1}:([a-f0-9]{1,4}:){0,5}|([a-f0-9]{1,4}:){2}:([a-f0-9]{1,4}:){0,4}|([a-f0-9]{1,4}:){3}:([a-f0-9]{1,4}:){0,3}|([a-f0-9]{1,4}:){4}:([a-f0-9]{1,4}:){0,2}|([a-f0-9]{1,4}:){5}:([a-f0-9]{1,4}:){0,1})([a-f0-9]{1,4}|(((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))\\.){3}((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2})))\\])|([A-Za-z0-9]([A-Za-z0-9-]*[A-Za-z0-9])*(\\.[A-Za-z]{2,})+))$/;\n// const emailRegex =\n// /^[a-zA-Z0-9\\.\\!\\#\\$\\%\\&\\'\\*\\+\\/\\=\\?\\^\\_\\`\\{\\|\\}\\~\\-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/;\n// const emailRegex =\n// /^(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|\"(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21\\x23-\\x5b\\x5d-\\x7f]|\\\\[\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])*\")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\\[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-z0-9-]*[a-z0-9]:(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21-\\x5a\\x53-\\x7f]|\\\\[\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])+)\\])$/i;\nconst emailRegex = /^(?!\\.)(?!.*\\.\\.)([A-Z0-9_'+\\-\\.]*)[A-Z0-9_+-]@([A-Z0-9][A-Z0-9\\-]*\\.)+[A-Z]{2,}$/i;\n// const emailRegex =\n// /^[a-z0-9.!#$%&’*+/=?^_`{|}~-]+@[a-z0-9-]+(?:\\.[a-z0-9\\-]+)*$/i;\n// from https://thekevinscott.com/emojis-in-javascript/#writing-a-regular-expression\nconst _emojiRegex = `^(\\\\p{Extended_Pictographic}|\\\\p{Emoji_Component})+$`;\nlet emojiRegex;\n// faster, simpler, safer\nconst ipv4Regex = /^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])$/;\nconst ipv6Regex = /^(([a-f0-9]{1,4}:){7}|::([a-f0-9]{1,4}:){0,6}|([a-f0-9]{1,4}:){1}:([a-f0-9]{1,4}:){0,5}|([a-f0-9]{1,4}:){2}:([a-f0-9]{1,4}:){0,4}|([a-f0-9]{1,4}:){3}:([a-f0-9]{1,4}:){0,3}|([a-f0-9]{1,4}:){4}:([a-f0-9]{1,4}:){0,2}|([a-f0-9]{1,4}:){5}:([a-f0-9]{1,4}:){0,1})([a-f0-9]{1,4}|(((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))\\.){3}((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2})))$/;\n// https://stackoverflow.com/questions/7860392/determine-if-string-is-in-base64-using-javascript\nconst base64Regex = /^([0-9a-zA-Z+/]{4})*(([0-9a-zA-Z+/]{2}==)|([0-9a-zA-Z+/]{3}=))?$/;\n// simple\n// const dateRegexSource = `\\\\d{4}-\\\\d{2}-\\\\d{2}`;\n// no leap year validation\n// const dateRegexSource = `\\\\d{4}-((0[13578]|10|12)-31|(0[13-9]|1[0-2])-30|(0[1-9]|1[0-2])-(0[1-9]|1\\\\d|2\\\\d))`;\n// with leap year validation\nconst dateRegexSource = `((\\\\d\\\\d[2468][048]|\\\\d\\\\d[13579][26]|\\\\d\\\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\\\d{4}-((0[13578]|1[02])-(0[1-9]|[12]\\\\d|3[01])|(0[469]|11)-(0[1-9]|[12]\\\\d|30)|(02)-(0[1-9]|1\\\\d|2[0-8])))`;\nconst dateRegex = new RegExp(`^${dateRegexSource}$`);\nfunction timeRegexSource(args) {\n // let regex = `\\\\d{2}:\\\\d{2}:\\\\d{2}`;\n let regex = `([01]\\\\d|2[0-3]):[0-5]\\\\d:[0-5]\\\\d`;\n if (args.precision) {\n regex = `${regex}\\\\.\\\\d{${args.precision}}`;\n }\n else if (args.precision == null) {\n regex = `${regex}(\\\\.\\\\d+)?`;\n }\n return regex;\n}\nfunction timeRegex(args) {\n return new RegExp(`^${timeRegexSource(args)}$`);\n}\n// Adapted from https://stackoverflow.com/a/3143231\nfunction datetimeRegex(args) {\n let regex = `${dateRegexSource}T${timeRegexSource(args)}`;\n const opts = [];\n opts.push(args.local ? `Z?` : `Z`);\n if (args.offset)\n opts.push(`([+-]\\\\d{2}:?\\\\d{2})`);\n regex = `${regex}(${opts.join(\"|\")})`;\n return new RegExp(`^${regex}$`);\n}\nfunction isValidIP(ip, version) {\n if ((version === \"v4\" || !version) && ipv4Regex.test(ip)) {\n return true;\n }\n if ((version === \"v6\" || !version) && ipv6Regex.test(ip)) {\n return true;\n }\n return false;\n}\nclass ZodString extends ZodType {\n _parse(input) {\n if (this._def.coerce) {\n input.data = String(input.data);\n }\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.string) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.string,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n const status = new ParseStatus();\n let ctx = undefined;\n for (const check of this._def.checks) {\n if (check.kind === \"min\") {\n if (input.data.length < check.value) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n minimum: check.value,\n type: \"string\",\n inclusive: true,\n exact: false,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"max\") {\n if (input.data.length > check.value) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n maximum: check.value,\n type: \"string\",\n inclusive: true,\n exact: false,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"length\") {\n const tooBig = input.data.length > check.value;\n const tooSmall = input.data.length < check.value;\n if (tooBig || tooSmall) {\n ctx = this._getOrReturnCtx(input, ctx);\n if (tooBig) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n maximum: check.value,\n type: \"string\",\n inclusive: true,\n exact: true,\n message: check.message,\n });\n }\n else if (tooSmall) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n minimum: check.value,\n type: \"string\",\n inclusive: true,\n exact: true,\n message: check.message,\n });\n }\n status.dirty();\n }\n }\n else if (check.kind === \"email\") {\n if (!emailRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"email\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"emoji\") {\n if (!emojiRegex) {\n emojiRegex = new RegExp(_emojiRegex, \"u\");\n }\n if (!emojiRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"emoji\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"uuid\") {\n if (!uuidRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"uuid\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"nanoid\") {\n if (!nanoidRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"nanoid\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"cuid\") {\n if (!cuidRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"cuid\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"cuid2\") {\n if (!cuid2Regex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"cuid2\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"ulid\") {\n if (!ulidRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"ulid\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"url\") {\n try {\n new URL(input.data);\n }\n catch (_a) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"url\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"regex\") {\n check.regex.lastIndex = 0;\n const testResult = check.regex.test(input.data);\n if (!testResult) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"regex\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"trim\") {\n input.data = input.data.trim();\n }\n else if (check.kind === \"includes\") {\n if (!input.data.includes(check.value, check.position)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_string,\n validation: { includes: check.value, position: check.position },\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"toLowerCase\") {\n input.data = input.data.toLowerCase();\n }\n else if (check.kind === \"toUpperCase\") {\n input.data = input.data.toUpperCase();\n }\n else if (check.kind === \"startsWith\") {\n if (!input.data.startsWith(check.value)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_string,\n validation: { startsWith: check.value },\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"endsWith\") {\n if (!input.data.endsWith(check.value)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_string,\n validation: { endsWith: check.value },\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"datetime\") {\n const regex = datetimeRegex(check);\n if (!regex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_string,\n validation: \"datetime\",\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"date\") {\n const regex = dateRegex;\n if (!regex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_string,\n validation: \"date\",\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"time\") {\n const regex = timeRegex(check);\n if (!regex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_string,\n validation: \"time\",\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"duration\") {\n if (!durationRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"duration\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"ip\") {\n if (!isValidIP(input.data, check.version)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"ip\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"base64\") {\n if (!base64Regex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"base64\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else {\n util.assertNever(check);\n }\n }\n return { status: status.value, value: input.data };\n }\n _regex(regex, validation, message) {\n return this.refinement((data) => regex.test(data), {\n validation,\n code: ZodIssueCode.invalid_string,\n ...errorUtil.errToObj(message),\n });\n }\n _addCheck(check) {\n return new ZodString({\n ...this._def,\n checks: [...this._def.checks, check],\n });\n }\n email(message) {\n return this._addCheck({ kind: \"email\", ...errorUtil.errToObj(message) });\n }\n url(message) {\n return this._addCheck({ kind: \"url\", ...errorUtil.errToObj(message) });\n }\n emoji(message) {\n return this._addCheck({ kind: \"emoji\", ...errorUtil.errToObj(message) });\n }\n uuid(message) {\n return this._addCheck({ kind: \"uuid\", ...errorUtil.errToObj(message) });\n }\n nanoid(message) {\n return this._addCheck({ kind: \"nanoid\", ...errorUtil.errToObj(message) });\n }\n cuid(message) {\n return this._addCheck({ kind: \"cuid\", ...errorUtil.errToObj(message) });\n }\n cuid2(message) {\n return this._addCheck({ kind: \"cuid2\", ...errorUtil.errToObj(message) });\n }\n ulid(message) {\n return this._addCheck({ kind: \"ulid\", ...errorUtil.errToObj(message) });\n }\n base64(message) {\n return this._addCheck({ kind: \"base64\", ...errorUtil.errToObj(message) });\n }\n ip(options) {\n return this._addCheck({ kind: \"ip\", ...errorUtil.errToObj(options) });\n }\n datetime(options) {\n var _a, _b;\n if (typeof options === \"string\") {\n return this._addCheck({\n kind: \"datetime\",\n precision: null,\n offset: false,\n local: false,\n message: options,\n });\n }\n return this._addCheck({\n kind: \"datetime\",\n precision: typeof (options === null || options === void 0 ? void 0 : options.precision) === \"undefined\" ? null : options === null || options === void 0 ? void 0 : options.precision,\n offset: (_a = options === null || options === void 0 ? void 0 : options.offset) !== null && _a !== void 0 ? _a : false,\n local: (_b = options === null || options === void 0 ? void 0 : options.local) !== null && _b !== void 0 ? _b : false,\n ...errorUtil.errToObj(options === null || options === void 0 ? void 0 : options.message),\n });\n }\n date(message) {\n return this._addCheck({ kind: \"date\", message });\n }\n time(options) {\n if (typeof options === \"string\") {\n return this._addCheck({\n kind: \"time\",\n precision: null,\n message: options,\n });\n }\n return this._addCheck({\n kind: \"time\",\n precision: typeof (options === null || options === void 0 ? void 0 : options.precision) === \"undefined\" ? null : options === null || options === void 0 ? void 0 : options.precision,\n ...errorUtil.errToObj(options === null || options === void 0 ? void 0 : options.message),\n });\n }\n duration(message) {\n return this._addCheck({ kind: \"duration\", ...errorUtil.errToObj(message) });\n }\n regex(regex, message) {\n return this._addCheck({\n kind: \"regex\",\n regex: regex,\n ...errorUtil.errToObj(message),\n });\n }\n includes(value, options) {\n return this._addCheck({\n kind: \"includes\",\n value: value,\n position: options === null || options === void 0 ? void 0 : options.position,\n ...errorUtil.errToObj(options === null || options === void 0 ? void 0 : options.message),\n });\n }\n startsWith(value, message) {\n return this._addCheck({\n kind: \"startsWith\",\n value: value,\n ...errorUtil.errToObj(message),\n });\n }\n endsWith(value, message) {\n return this._addCheck({\n kind: \"endsWith\",\n value: value,\n ...errorUtil.errToObj(message),\n });\n }\n min(minLength, message) {\n return this._addCheck({\n kind: \"min\",\n value: minLength,\n ...errorUtil.errToObj(message),\n });\n }\n max(maxLength, message) {\n return this._addCheck({\n kind: \"max\",\n value: maxLength,\n ...errorUtil.errToObj(message),\n });\n }\n length(len, message) {\n return this._addCheck({\n kind: \"length\",\n value: len,\n ...errorUtil.errToObj(message),\n });\n }\n /**\n * @deprecated Use z.string().min(1) instead.\n * @see {@link ZodString.min}\n */\n nonempty(message) {\n return this.min(1, errorUtil.errToObj(message));\n }\n trim() {\n return new ZodString({\n ...this._def,\n checks: [...this._def.checks, { kind: \"trim\" }],\n });\n }\n toLowerCase() {\n return new ZodString({\n ...this._def,\n checks: [...this._def.checks, { kind: \"toLowerCase\" }],\n });\n }\n toUpperCase() {\n return new ZodString({\n ...this._def,\n checks: [...this._def.checks, { kind: \"toUpperCase\" }],\n });\n }\n get isDatetime() {\n return !!this._def.checks.find((ch) => ch.kind === \"datetime\");\n }\n get isDate() {\n return !!this._def.checks.find((ch) => ch.kind === \"date\");\n }\n get isTime() {\n return !!this._def.checks.find((ch) => ch.kind === \"time\");\n }\n get isDuration() {\n return !!this._def.checks.find((ch) => ch.kind === \"duration\");\n }\n get isEmail() {\n return !!this._def.checks.find((ch) => ch.kind === \"email\");\n }\n get isURL() {\n return !!this._def.checks.find((ch) => ch.kind === \"url\");\n }\n get isEmoji() {\n return !!this._def.checks.find((ch) => ch.kind === \"emoji\");\n }\n get isUUID() {\n return !!this._def.checks.find((ch) => ch.kind === \"uuid\");\n }\n get isNANOID() {\n return !!this._def.checks.find((ch) => ch.kind === \"nanoid\");\n }\n get isCUID() {\n return !!this._def.checks.find((ch) => ch.kind === \"cuid\");\n }\n get isCUID2() {\n return !!this._def.checks.find((ch) => ch.kind === \"cuid2\");\n }\n get isULID() {\n return !!this._def.checks.find((ch) => ch.kind === \"ulid\");\n }\n get isIP() {\n return !!this._def.checks.find((ch) => ch.kind === \"ip\");\n }\n get isBase64() {\n return !!this._def.checks.find((ch) => ch.kind === \"base64\");\n }\n get minLength() {\n let min = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"min\") {\n if (min === null || ch.value > min)\n min = ch.value;\n }\n }\n return min;\n }\n get maxLength() {\n let max = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"max\") {\n if (max === null || ch.value < max)\n max = ch.value;\n }\n }\n return max;\n }\n}\nZodString.create = (params) => {\n var _a;\n return new ZodString({\n checks: [],\n typeName: ZodFirstPartyTypeKind.ZodString,\n coerce: (_a = params === null || params === void 0 ? void 0 : params.coerce) !== null && _a !== void 0 ? _a : false,\n ...processCreateParams(params),\n });\n};\n// https://stackoverflow.com/questions/3966484/why-does-modulus-operator-return-fractional-number-in-javascript/31711034#31711034\nfunction floatSafeRemainder(val, step) {\n const valDecCount = (val.toString().split(\".\")[1] || \"\").length;\n const stepDecCount = (step.toString().split(\".\")[1] || \"\").length;\n const decCount = valDecCount > stepDecCount ? valDecCount : stepDecCount;\n const valInt = parseInt(val.toFixed(decCount).replace(\".\", \"\"));\n const stepInt = parseInt(step.toFixed(decCount).replace(\".\", \"\"));\n return (valInt % stepInt) / Math.pow(10, decCount);\n}\nclass ZodNumber extends ZodType {\n constructor() {\n super(...arguments);\n this.min = this.gte;\n this.max = this.lte;\n this.step = this.multipleOf;\n }\n _parse(input) {\n if (this._def.coerce) {\n input.data = Number(input.data);\n }\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.number) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.number,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n let ctx = undefined;\n const status = new ParseStatus();\n for (const check of this._def.checks) {\n if (check.kind === \"int\") {\n if (!util.isInteger(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: \"integer\",\n received: \"float\",\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"min\") {\n const tooSmall = check.inclusive\n ? input.data < check.value\n : input.data <= check.value;\n if (tooSmall) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n minimum: check.value,\n type: \"number\",\n inclusive: check.inclusive,\n exact: false,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"max\") {\n const tooBig = check.inclusive\n ? input.data > check.value\n : input.data >= check.value;\n if (tooBig) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n maximum: check.value,\n type: \"number\",\n inclusive: check.inclusive,\n exact: false,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"multipleOf\") {\n if (floatSafeRemainder(input.data, check.value) !== 0) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.not_multiple_of,\n multipleOf: check.value,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"finite\") {\n if (!Number.isFinite(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.not_finite,\n message: check.message,\n });\n status.dirty();\n }\n }\n else {\n util.assertNever(check);\n }\n }\n return { status: status.value, value: input.data };\n }\n gte(value, message) {\n return this.setLimit(\"min\", value, true, errorUtil.toString(message));\n }\n gt(value, message) {\n return this.setLimit(\"min\", value, false, errorUtil.toString(message));\n }\n lte(value, message) {\n return this.setLimit(\"max\", value, true, errorUtil.toString(message));\n }\n lt(value, message) {\n return this.setLimit(\"max\", value, false, errorUtil.toString(message));\n }\n setLimit(kind, value, inclusive, message) {\n return new ZodNumber({\n ...this._def,\n checks: [\n ...this._def.checks,\n {\n kind,\n value,\n inclusive,\n message: errorUtil.toString(message),\n },\n ],\n });\n }\n _addCheck(check) {\n return new ZodNumber({\n ...this._def,\n checks: [...this._def.checks, check],\n });\n }\n int(message) {\n return this._addCheck({\n kind: \"int\",\n message: errorUtil.toString(message),\n });\n }\n positive(message) {\n return this._addCheck({\n kind: \"min\",\n value: 0,\n inclusive: false,\n message: errorUtil.toString(message),\n });\n }\n negative(message) {\n return this._addCheck({\n kind: \"max\",\n value: 0,\n inclusive: false,\n message: errorUtil.toString(message),\n });\n }\n nonpositive(message) {\n return this._addCheck({\n kind: \"max\",\n value: 0,\n inclusive: true,\n message: errorUtil.toString(message),\n });\n }\n nonnegative(message) {\n return this._addCheck({\n kind: \"min\",\n value: 0,\n inclusive: true,\n message: errorUtil.toString(message),\n });\n }\n multipleOf(value, message) {\n return this._addCheck({\n kind: \"multipleOf\",\n value: value,\n message: errorUtil.toString(message),\n });\n }\n finite(message) {\n return this._addCheck({\n kind: \"finite\",\n message: errorUtil.toString(message),\n });\n }\n safe(message) {\n return this._addCheck({\n kind: \"min\",\n inclusive: true,\n value: Number.MIN_SAFE_INTEGER,\n message: errorUtil.toString(message),\n })._addCheck({\n kind: \"max\",\n inclusive: true,\n value: Number.MAX_SAFE_INTEGER,\n message: errorUtil.toString(message),\n });\n }\n get minValue() {\n let min = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"min\") {\n if (min === null || ch.value > min)\n min = ch.value;\n }\n }\n return min;\n }\n get maxValue() {\n let max = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"max\") {\n if (max === null || ch.value < max)\n max = ch.value;\n }\n }\n return max;\n }\n get isInt() {\n return !!this._def.checks.find((ch) => ch.kind === \"int\" ||\n (ch.kind === \"multipleOf\" && util.isInteger(ch.value)));\n }\n get isFinite() {\n let max = null, min = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"finite\" ||\n ch.kind === \"int\" ||\n ch.kind === \"multipleOf\") {\n return true;\n }\n else if (ch.kind === \"min\") {\n if (min === null || ch.value > min)\n min = ch.value;\n }\n else if (ch.kind === \"max\") {\n if (max === null || ch.value < max)\n max = ch.value;\n }\n }\n return Number.isFinite(min) && Number.isFinite(max);\n }\n}\nZodNumber.create = (params) => {\n return new ZodNumber({\n checks: [],\n typeName: ZodFirstPartyTypeKind.ZodNumber,\n coerce: (params === null || params === void 0 ? void 0 : params.coerce) || false,\n ...processCreateParams(params),\n });\n};\nclass ZodBigInt extends ZodType {\n constructor() {\n super(...arguments);\n this.min = this.gte;\n this.max = this.lte;\n }\n _parse(input) {\n if (this._def.coerce) {\n input.data = BigInt(input.data);\n }\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.bigint) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.bigint,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n let ctx = undefined;\n const status = new ParseStatus();\n for (const check of this._def.checks) {\n if (check.kind === \"min\") {\n const tooSmall = check.inclusive\n ? input.data < check.value\n : input.data <= check.value;\n if (tooSmall) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n type: \"bigint\",\n minimum: check.value,\n inclusive: check.inclusive,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"max\") {\n const tooBig = check.inclusive\n ? input.data > check.value\n : input.data >= check.value;\n if (tooBig) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n type: \"bigint\",\n maximum: check.value,\n inclusive: check.inclusive,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"multipleOf\") {\n if (input.data % check.value !== BigInt(0)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.not_multiple_of,\n multipleOf: check.value,\n message: check.message,\n });\n status.dirty();\n }\n }\n else {\n util.assertNever(check);\n }\n }\n return { status: status.value, value: input.data };\n }\n gte(value, message) {\n return this.setLimit(\"min\", value, true, errorUtil.toString(message));\n }\n gt(value, message) {\n return this.setLimit(\"min\", value, false, errorUtil.toString(message));\n }\n lte(value, message) {\n return this.setLimit(\"max\", value, true, errorUtil.toString(message));\n }\n lt(value, message) {\n return this.setLimit(\"max\", value, false, errorUtil.toString(message));\n }\n setLimit(kind, value, inclusive, message) {\n return new ZodBigInt({\n ...this._def,\n checks: [\n ...this._def.checks,\n {\n kind,\n value,\n inclusive,\n message: errorUtil.toString(message),\n },\n ],\n });\n }\n _addCheck(check) {\n return new ZodBigInt({\n ...this._def,\n checks: [...this._def.checks, check],\n });\n }\n positive(message) {\n return this._addCheck({\n kind: \"min\",\n value: BigInt(0),\n inclusive: false,\n message: errorUtil.toString(message),\n });\n }\n negative(message) {\n return this._addCheck({\n kind: \"max\",\n value: BigInt(0),\n inclusive: false,\n message: errorUtil.toString(message),\n });\n }\n nonpositive(message) {\n return this._addCheck({\n kind: \"max\",\n value: BigInt(0),\n inclusive: true,\n message: errorUtil.toString(message),\n });\n }\n nonnegative(message) {\n return this._addCheck({\n kind: \"min\",\n value: BigInt(0),\n inclusive: true,\n message: errorUtil.toString(message),\n });\n }\n multipleOf(value, message) {\n return this._addCheck({\n kind: \"multipleOf\",\n value,\n message: errorUtil.toString(message),\n });\n }\n get minValue() {\n let min = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"min\") {\n if (min === null || ch.value > min)\n min = ch.value;\n }\n }\n return min;\n }\n get maxValue() {\n let max = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"max\") {\n if (max === null || ch.value < max)\n max = ch.value;\n }\n }\n return max;\n }\n}\nZodBigInt.create = (params) => {\n var _a;\n return new ZodBigInt({\n checks: [],\n typeName: ZodFirstPartyTypeKind.ZodBigInt,\n coerce: (_a = params === null || params === void 0 ? void 0 : params.coerce) !== null && _a !== void 0 ? _a : false,\n ...processCreateParams(params),\n });\n};\nclass ZodBoolean extends ZodType {\n _parse(input) {\n if (this._def.coerce) {\n input.data = Boolean(input.data);\n }\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.boolean) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.boolean,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n return OK(input.data);\n }\n}\nZodBoolean.create = (params) => {\n return new ZodBoolean({\n typeName: ZodFirstPartyTypeKind.ZodBoolean,\n coerce: (params === null || params === void 0 ? void 0 : params.coerce) || false,\n ...processCreateParams(params),\n });\n};\nclass ZodDate extends ZodType {\n _parse(input) {\n if (this._def.coerce) {\n input.data = new Date(input.data);\n }\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.date) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.date,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n if (isNaN(input.data.getTime())) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_date,\n });\n return INVALID;\n }\n const status = new ParseStatus();\n let ctx = undefined;\n for (const check of this._def.checks) {\n if (check.kind === \"min\") {\n if (input.data.getTime() < check.value) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n message: check.message,\n inclusive: true,\n exact: false,\n minimum: check.value,\n type: \"date\",\n });\n status.dirty();\n }\n }\n else if (check.kind === \"max\") {\n if (input.data.getTime() > check.value) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n message: check.message,\n inclusive: true,\n exact: false,\n maximum: check.value,\n type: \"date\",\n });\n status.dirty();\n }\n }\n else {\n util.assertNever(check);\n }\n }\n return {\n status: status.value,\n value: new Date(input.data.getTime()),\n };\n }\n _addCheck(check) {\n return new ZodDate({\n ...this._def,\n checks: [...this._def.checks, check],\n });\n }\n min(minDate, message) {\n return this._addCheck({\n kind: \"min\",\n value: minDate.getTime(),\n message: errorUtil.toString(message),\n });\n }\n max(maxDate, message) {\n return this._addCheck({\n kind: \"max\",\n value: maxDate.getTime(),\n message: errorUtil.toString(message),\n });\n }\n get minDate() {\n let min = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"min\") {\n if (min === null || ch.value > min)\n min = ch.value;\n }\n }\n return min != null ? new Date(min) : null;\n }\n get maxDate() {\n let max = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"max\") {\n if (max === null || ch.value < max)\n max = ch.value;\n }\n }\n return max != null ? new Date(max) : null;\n }\n}\nZodDate.create = (params) => {\n return new ZodDate({\n checks: [],\n coerce: (params === null || params === void 0 ? void 0 : params.coerce) || false,\n typeName: ZodFirstPartyTypeKind.ZodDate,\n ...processCreateParams(params),\n });\n};\nclass ZodSymbol extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.symbol) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.symbol,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n return OK(input.data);\n }\n}\nZodSymbol.create = (params) => {\n return new ZodSymbol({\n typeName: ZodFirstPartyTypeKind.ZodSymbol,\n ...processCreateParams(params),\n });\n};\nclass ZodUndefined extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.undefined) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.undefined,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n return OK(input.data);\n }\n}\nZodUndefined.create = (params) => {\n return new ZodUndefined({\n typeName: ZodFirstPartyTypeKind.ZodUndefined,\n ...processCreateParams(params),\n });\n};\nclass ZodNull extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.null) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.null,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n return OK(input.data);\n }\n}\nZodNull.create = (params) => {\n return new ZodNull({\n typeName: ZodFirstPartyTypeKind.ZodNull,\n ...processCreateParams(params),\n });\n};\nclass ZodAny extends ZodType {\n constructor() {\n super(...arguments);\n // to prevent instances of other classes from extending ZodAny. this causes issues with catchall in ZodObject.\n this._any = true;\n }\n _parse(input) {\n return OK(input.data);\n }\n}\nZodAny.create = (params) => {\n return new ZodAny({\n typeName: ZodFirstPartyTypeKind.ZodAny,\n ...processCreateParams(params),\n });\n};\nclass ZodUnknown extends ZodType {\n constructor() {\n super(...arguments);\n // required\n this._unknown = true;\n }\n _parse(input) {\n return OK(input.data);\n }\n}\nZodUnknown.create = (params) => {\n return new ZodUnknown({\n typeName: ZodFirstPartyTypeKind.ZodUnknown,\n ...processCreateParams(params),\n });\n};\nclass ZodNever extends ZodType {\n _parse(input) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.never,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n}\nZodNever.create = (params) => {\n return new ZodNever({\n typeName: ZodFirstPartyTypeKind.ZodNever,\n ...processCreateParams(params),\n });\n};\nclass ZodVoid extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.undefined) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.void,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n return OK(input.data);\n }\n}\nZodVoid.create = (params) => {\n return new ZodVoid({\n typeName: ZodFirstPartyTypeKind.ZodVoid,\n ...processCreateParams(params),\n });\n};\nclass ZodArray extends ZodType {\n _parse(input) {\n const { ctx, status } = this._processInputParams(input);\n const def = this._def;\n if (ctx.parsedType !== ZodParsedType.array) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.array,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n if (def.exactLength !== null) {\n const tooBig = ctx.data.length > def.exactLength.value;\n const tooSmall = ctx.data.length < def.exactLength.value;\n if (tooBig || tooSmall) {\n addIssueToContext(ctx, {\n code: tooBig ? ZodIssueCode.too_big : ZodIssueCode.too_small,\n minimum: (tooSmall ? def.exactLength.value : undefined),\n maximum: (tooBig ? def.exactLength.value : undefined),\n type: \"array\",\n inclusive: true,\n exact: true,\n message: def.exactLength.message,\n });\n status.dirty();\n }\n }\n if (def.minLength !== null) {\n if (ctx.data.length < def.minLength.value) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n minimum: def.minLength.value,\n type: \"array\",\n inclusive: true,\n exact: false,\n message: def.minLength.message,\n });\n status.dirty();\n }\n }\n if (def.maxLength !== null) {\n if (ctx.data.length > def.maxLength.value) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n maximum: def.maxLength.value,\n type: \"array\",\n inclusive: true,\n exact: false,\n message: def.maxLength.message,\n });\n status.dirty();\n }\n }\n if (ctx.common.async) {\n return Promise.all([...ctx.data].map((item, i) => {\n return def.type._parseAsync(new ParseInputLazyPath(ctx, item, ctx.path, i));\n })).then((result) => {\n return ParseStatus.mergeArray(status, result);\n });\n }\n const result = [...ctx.data].map((item, i) => {\n return def.type._parseSync(new ParseInputLazyPath(ctx, item, ctx.path, i));\n });\n return ParseStatus.mergeArray(status, result);\n }\n get element() {\n return this._def.type;\n }\n min(minLength, message) {\n return new ZodArray({\n ...this._def,\n minLength: { value: minLength, message: errorUtil.toString(message) },\n });\n }\n max(maxLength, message) {\n return new ZodArray({\n ...this._def,\n maxLength: { value: maxLength, message: errorUtil.toString(message) },\n });\n }\n length(len, message) {\n return new ZodArray({\n ...this._def,\n exactLength: { value: len, message: errorUtil.toString(message) },\n });\n }\n nonempty(message) {\n return this.min(1, message);\n }\n}\nZodArray.create = (schema, params) => {\n return new ZodArray({\n type: schema,\n minLength: null,\n maxLength: null,\n exactLength: null,\n typeName: ZodFirstPartyTypeKind.ZodArray,\n ...processCreateParams(params),\n });\n};\nfunction deepPartialify(schema) {\n if (schema instanceof ZodObject) {\n const newShape = {};\n for (const key in schema.shape) {\n const fieldSchema = schema.shape[key];\n newShape[key] = ZodOptional.create(deepPartialify(fieldSchema));\n }\n return new ZodObject({\n ...schema._def,\n shape: () => newShape,\n });\n }\n else if (schema instanceof ZodArray) {\n return new ZodArray({\n ...schema._def,\n type: deepPartialify(schema.element),\n });\n }\n else if (schema instanceof ZodOptional) {\n return ZodOptional.create(deepPartialify(schema.unwrap()));\n }\n else if (schema instanceof ZodNullable) {\n return ZodNullable.create(deepPartialify(schema.unwrap()));\n }\n else if (schema instanceof ZodTuple) {\n return ZodTuple.create(schema.items.map((item) => deepPartialify(item)));\n }\n else {\n return schema;\n }\n}\nclass ZodObject extends ZodType {\n constructor() {\n super(...arguments);\n this._cached = null;\n /**\n * @deprecated In most cases, this is no longer needed - unknown properties are now silently stripped.\n * If you want to pass through unknown properties, use `.passthrough()` instead.\n */\n this.nonstrict = this.passthrough;\n // extend<\n // Augmentation extends ZodRawShape,\n // NewOutput extends util.flatten<{\n // [k in keyof Augmentation | keyof Output]: k extends keyof Augmentation\n // ? Augmentation[k][\"_output\"]\n // : k extends keyof Output\n // ? Output[k]\n // : never;\n // }>,\n // NewInput extends util.flatten<{\n // [k in keyof Augmentation | keyof Input]: k extends keyof Augmentation\n // ? Augmentation[k][\"_input\"]\n // : k extends keyof Input\n // ? Input[k]\n // : never;\n // }>\n // >(\n // augmentation: Augmentation\n // ): ZodObject<\n // extendShape<T, Augmentation>,\n // UnknownKeys,\n // Catchall,\n // NewOutput,\n // NewInput\n // > {\n // return new ZodObject({\n // ...this._def,\n // shape: () => ({\n // ...this._def.shape(),\n // ...augmentation,\n // }),\n // }) as any;\n // }\n /**\n * @deprecated Use `.extend` instead\n * */\n this.augment = this.extend;\n }\n _getCached() {\n if (this._cached !== null)\n return this._cached;\n const shape = this._def.shape();\n const keys = util.objectKeys(shape);\n return (this._cached = { shape, keys });\n }\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.object) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.object,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n const { status, ctx } = this._processInputParams(input);\n const { shape, keys: shapeKeys } = this._getCached();\n const extraKeys = [];\n if (!(this._def.catchall instanceof ZodNever &&\n this._def.unknownKeys === \"strip\")) {\n for (const key in ctx.data) {\n if (!shapeKeys.includes(key)) {\n extraKeys.push(key);\n }\n }\n }\n const pairs = [];\n for (const key of shapeKeys) {\n const keyValidator = shape[key];\n const value = ctx.data[key];\n pairs.push({\n key: { status: \"valid\", value: key },\n value: keyValidator._parse(new ParseInputLazyPath(ctx, value, ctx.path, key)),\n alwaysSet: key in ctx.data,\n });\n }\n if (this._def.catchall instanceof ZodNever) {\n const unknownKeys = this._def.unknownKeys;\n if (unknownKeys === \"passthrough\") {\n for (const key of extraKeys) {\n pairs.push({\n key: { status: \"valid\", value: key },\n value: { status: \"valid\", value: ctx.data[key] },\n });\n }\n }\n else if (unknownKeys === \"strict\") {\n if (extraKeys.length > 0) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.unrecognized_keys,\n keys: extraKeys,\n });\n status.dirty();\n }\n }\n else if (unknownKeys === \"strip\") ;\n else {\n throw new Error(`Internal ZodObject error: invalid unknownKeys value.`);\n }\n }\n else {\n // run catchall validation\n const catchall = this._def.catchall;\n for (const key of extraKeys) {\n const value = ctx.data[key];\n pairs.push({\n key: { status: \"valid\", value: key },\n value: catchall._parse(new ParseInputLazyPath(ctx, value, ctx.path, key) //, ctx.child(key), value, getParsedType(value)\n ),\n alwaysSet: key in ctx.data,\n });\n }\n }\n if (ctx.common.async) {\n return Promise.resolve()\n .then(async () => {\n const syncPairs = [];\n for (const pair of pairs) {\n const key = await pair.key;\n const value = await pair.value;\n syncPairs.push({\n key,\n value,\n alwaysSet: pair.alwaysSet,\n });\n }\n return syncPairs;\n })\n .then((syncPairs) => {\n return ParseStatus.mergeObjectSync(status, syncPairs);\n });\n }\n else {\n return ParseStatus.mergeObjectSync(status, pairs);\n }\n }\n get shape() {\n return this._def.shape();\n }\n strict(message) {\n errorUtil.errToObj;\n return new ZodObject({\n ...this._def,\n unknownKeys: \"strict\",\n ...(message !== undefined\n ? {\n errorMap: (issue, ctx) => {\n var _a, _b, _c, _d;\n const defaultError = (_c = (_b = (_a = this._def).errorMap) === null || _b === void 0 ? void 0 : _b.call(_a, issue, ctx).message) !== null && _c !== void 0 ? _c : ctx.defaultError;\n if (issue.code === \"unrecognized_keys\")\n return {\n message: (_d = errorUtil.errToObj(message).message) !== null && _d !== void 0 ? _d : defaultError,\n };\n return {\n message: defaultError,\n };\n },\n }\n : {}),\n });\n }\n strip() {\n return new ZodObject({\n ...this._def,\n unknownKeys: \"strip\",\n });\n }\n passthrough() {\n return new ZodObject({\n ...this._def,\n unknownKeys: \"passthrough\",\n });\n }\n // const AugmentFactory =\n // <Def extends ZodObjectDef>(def: Def) =>\n // <Augmentation extends ZodRawShape>(\n // augmentation: Augmentation\n // ): ZodObject<\n // extendShape<ReturnType<Def[\"shape\"]>, Augmentation>,\n // Def[\"unknownKeys\"],\n // Def[\"catchall\"]\n // > => {\n // return new ZodObject({\n // ...def,\n // shape: () => ({\n // ...def.shape(),\n // ...augmentation,\n // }),\n // }) as any;\n // };\n extend(augmentation) {\n return new ZodObject({\n ...this._def,\n shape: () => ({\n ...this._def.shape(),\n ...augmentation,\n }),\n });\n }\n /**\n * Prior to zod@1.0.12 there was a bug in the\n * inferred type of merged objects. Please\n * upgrade if you are experiencing issues.\n */\n merge(merging) {\n const merged = new ZodObject({\n unknownKeys: merging._def.unknownKeys,\n catchall: merging._def.catchall,\n shape: () => ({\n ...this._def.shape(),\n ...merging._def.shape(),\n }),\n typeName: ZodFirstPartyTypeKind.ZodObject,\n });\n return merged;\n }\n // merge<\n // Incoming extends AnyZodObject,\n // Augmentation extends Incoming[\"shape\"],\n // NewOutput extends {\n // [k in keyof Augmentation | keyof Output]: k extends keyof Augmentation\n // ? Augmentation[k][\"_output\"]\n // : k extends keyof Output\n // ? Output[k]\n // : never;\n // },\n // NewInput extends {\n // [k in keyof Augmentation | keyof Input]: k extends keyof Augmentation\n // ? Augmentation[k][\"_input\"]\n // : k extends keyof Input\n // ? Input[k]\n // : never;\n // }\n // >(\n // merging: Incoming\n // ): ZodObject<\n // extendShape<T, ReturnType<Incoming[\"_def\"][\"shape\"]>>,\n // Incoming[\"_def\"][\"unknownKeys\"],\n // Incoming[\"_def\"][\"catchall\"],\n // NewOutput,\n // NewInput\n // > {\n // const merged: any = new ZodObject({\n // unknownKeys: merging._def.unknownKeys,\n // catchall: merging._def.catchall,\n // shape: () =>\n // objectUtil.mergeShapes(this._def.shape(), merging._def.shape()),\n // typeName: ZodFirstPartyTypeKind.ZodObject,\n // }) as any;\n // return merged;\n // }\n setKey(key, schema) {\n return this.augment({ [key]: schema });\n }\n // merge<Incoming extends AnyZodObject>(\n // merging: Incoming\n // ): //ZodObject<T & Incoming[\"_shape\"], UnknownKeys, Catchall> = (merging) => {\n // ZodObject<\n // extendShape<T, ReturnType<Incoming[\"_def\"][\"shape\"]>>,\n // Incoming[\"_def\"][\"unknownKeys\"],\n // Incoming[\"_def\"][\"catchall\"]\n // > {\n // // const mergedShape = objectUtil.mergeShapes(\n // // this._def.shape(),\n // // merging._def.shape()\n // // );\n // const merged: any = new ZodObject({\n // unknownKeys: merging._def.unknownKeys,\n // catchall: merging._def.catchall,\n // shape: () =>\n // objectUtil.mergeShapes(this._def.shape(), merging._def.shape()),\n // typeName: ZodFirstPartyTypeKind.ZodObject,\n // }) as any;\n // return merged;\n // }\n catchall(index) {\n return new ZodObject({\n ...this._def,\n catchall: index,\n });\n }\n pick(mask) {\n const shape = {};\n util.objectKeys(mask).forEach((key) => {\n if (mask[key] && this.shape[key]) {\n shape[key] = this.shape[key];\n }\n });\n return new ZodObject({\n ...this._def,\n shape: () => shape,\n });\n }\n omit(mask) {\n const shape = {};\n util.objectKeys(this.shape).forEach((key) => {\n if (!mask[key]) {\n shape[key] = this.shape[key];\n }\n });\n return new ZodObject({\n ...this._def,\n shape: () => shape,\n });\n }\n /**\n * @deprecated\n */\n deepPartial() {\n return deepPartialify(this);\n }\n partial(mask) {\n const newShape = {};\n util.objectKeys(this.shape).forEach((key) => {\n const fieldSchema = this.shape[key];\n if (mask && !mask[key]) {\n newShape[key] = fieldSchema;\n }\n else {\n newShape[key] = fieldSchema.optional();\n }\n });\n return new ZodObject({\n ...this._def,\n shape: () => newShape,\n });\n }\n required(mask) {\n const newShape = {};\n util.objectKeys(this.shape).forEach((key) => {\n if (mask && !mask[key]) {\n newShape[key] = this.shape[key];\n }\n else {\n const fieldSchema = this.shape[key];\n let newField = fieldSchema;\n while (newField instanceof ZodOptional) {\n newField = newField._def.innerType;\n }\n newShape[key] = newField;\n }\n });\n return new ZodObject({\n ...this._def,\n shape: () => newShape,\n });\n }\n keyof() {\n return createZodEnum(util.objectKeys(this.shape));\n }\n}\nZodObject.create = (shape, params) => {\n return new ZodObject({\n shape: () => shape,\n unknownKeys: \"strip\",\n catchall: ZodNever.create(),\n typeName: ZodFirstPartyTypeKind.ZodObject,\n ...processCreateParams(params),\n });\n};\nZodObject.strictCreate = (shape, params) => {\n return new ZodObject({\n shape: () => shape,\n unknownKeys: \"strict\",\n catchall: ZodNever.create(),\n typeName: ZodFirstPartyTypeKind.ZodObject,\n ...processCreateParams(params),\n });\n};\nZodObject.lazycreate = (shape, params) => {\n return new ZodObject({\n shape,\n unknownKeys: \"strip\",\n catchall: ZodNever.create(),\n typeName: ZodFirstPartyTypeKind.ZodObject,\n ...processCreateParams(params),\n });\n};\nclass ZodUnion extends ZodType {\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n const options = this._def.options;\n function handleResults(results) {\n // return first issue-free validation if it exists\n for (const result of results) {\n if (result.result.status === \"valid\") {\n return result.result;\n }\n }\n for (const result of results) {\n if (result.result.status === \"dirty\") {\n // add issues from dirty option\n ctx.common.issues.push(...result.ctx.common.issues);\n return result.result;\n }\n }\n // return invalid\n const unionErrors = results.map((result) => new ZodError(result.ctx.common.issues));\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_union,\n unionErrors,\n });\n return INVALID;\n }\n if (ctx.common.async) {\n return Promise.all(options.map(async (option) => {\n const childCtx = {\n ...ctx,\n common: {\n ...ctx.common,\n issues: [],\n },\n parent: null,\n };\n return {\n result: await option._parseAsync({\n data: ctx.data,\n path: ctx.path,\n parent: childCtx,\n }),\n ctx: childCtx,\n };\n })).then(handleResults);\n }\n else {\n let dirty = undefined;\n const issues = [];\n for (const option of options) {\n const childCtx = {\n ...ctx,\n common: {\n ...ctx.common,\n issues: [],\n },\n parent: null,\n };\n const result = option._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: childCtx,\n });\n if (result.status === \"valid\") {\n return result;\n }\n else if (result.status === \"dirty\" && !dirty) {\n dirty = { result, ctx: childCtx };\n }\n if (childCtx.common.issues.length) {\n issues.push(childCtx.common.issues);\n }\n }\n if (dirty) {\n ctx.common.issues.push(...dirty.ctx.common.issues);\n return dirty.result;\n }\n const unionErrors = issues.map((issues) => new ZodError(issues));\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_union,\n unionErrors,\n });\n return INVALID;\n }\n }\n get options() {\n return this._def.options;\n }\n}\nZodUnion.create = (types, params) => {\n return new ZodUnion({\n options: types,\n typeName: ZodFirstPartyTypeKind.ZodUnion,\n ...processCreateParams(params),\n });\n};\n/////////////////////////////////////////////////////\n/////////////////////////////////////////////////////\n////////// //////////\n////////// ZodDiscriminatedUnion //////////\n////////// //////////\n/////////////////////////////////////////////////////\n/////////////////////////////////////////////////////\nconst getDiscriminator = (type) => {\n if (type instanceof ZodLazy) {\n return getDiscriminator(type.schema);\n }\n else if (type instanceof ZodEffects) {\n return getDiscriminator(type.innerType());\n }\n else if (type instanceof ZodLiteral) {\n return [type.value];\n }\n else if (type instanceof ZodEnum) {\n return type.options;\n }\n else if (type instanceof ZodNativeEnum) {\n // eslint-disable-next-line ban/ban\n return util.objectValues(type.enum);\n }\n else if (type instanceof ZodDefault) {\n return getDiscriminator(type._def.innerType);\n }\n else if (type instanceof ZodUndefined) {\n return [undefined];\n }\n else if (type instanceof ZodNull) {\n return [null];\n }\n else if (type instanceof ZodOptional) {\n return [undefined, ...getDiscriminator(type.unwrap())];\n }\n else if (type instanceof ZodNullable) {\n return [null, ...getDiscriminator(type.unwrap())];\n }\n else if (type instanceof ZodBranded) {\n return getDiscriminator(type.unwrap());\n }\n else if (type instanceof ZodReadonly) {\n return getDiscriminator(type.unwrap());\n }\n else if (type instanceof ZodCatch) {\n return getDiscriminator(type._def.innerType);\n }\n else {\n return [];\n }\n};\nclass ZodDiscriminatedUnion extends ZodType {\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n if (ctx.parsedType !== ZodParsedType.object) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.object,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n const discriminator = this.discriminator;\n const discriminatorValue = ctx.data[discriminator];\n const option = this.optionsMap.get(discriminatorValue);\n if (!option) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_union_discriminator,\n options: Array.from(this.optionsMap.keys()),\n path: [discriminator],\n });\n return INVALID;\n }\n if (ctx.common.async) {\n return option._parseAsync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n });\n }\n else {\n return option._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n });\n }\n }\n get discriminator() {\n return this._def.discriminator;\n }\n get options() {\n return this._def.options;\n }\n get optionsMap() {\n return this._def.optionsMap;\n }\n /**\n * The constructor of the discriminated union schema. Its behaviour is very similar to that of the normal z.union() constructor.\n * However, it only allows a union of objects, all of which need to share a discriminator property. This property must\n * have a different value for each object in the union.\n * @param discriminator the name of the discriminator property\n * @param types an array of object schemas\n * @param params\n */\n static create(discriminator, options, params) {\n // Get all the valid discriminator values\n const optionsMap = new Map();\n // try {\n for (const type of options) {\n const discriminatorValues = getDiscriminator(type.shape[discriminator]);\n if (!discriminatorValues.length) {\n throw new Error(`A discriminator value for key \\`${discriminator}\\` could not be extracted from all schema options`);\n }\n for (const value of discriminatorValues) {\n if (optionsMap.has(value)) {\n throw new Error(`Discriminator property ${String(discriminator)} has duplicate value ${String(value)}`);\n }\n optionsMap.set(value, type);\n }\n }\n return new ZodDiscriminatedUnion({\n typeName: ZodFirstPartyTypeKind.ZodDiscriminatedUnion,\n discriminator,\n options,\n optionsMap,\n ...processCreateParams(params),\n });\n }\n}\nfunction mergeValues(a, b) {\n const aType = getParsedType(a);\n const bType = getParsedType(b);\n if (a === b) {\n return { valid: true, data: a };\n }\n else if (aType === ZodParsedType.object && bType === ZodParsedType.object) {\n const bKeys = util.objectKeys(b);\n const sharedKeys = util\n .objectKeys(a)\n .filter((key) => bKeys.indexOf(key) !== -1);\n const newObj = { ...a, ...b };\n for (const key of sharedKeys) {\n const sharedValue = mergeValues(a[key], b[key]);\n if (!sharedValue.valid) {\n return { valid: false };\n }\n newObj[key] = sharedValue.data;\n }\n return { valid: true, data: newObj };\n }\n else if (aType === ZodParsedType.array && bType === ZodParsedType.array) {\n if (a.length !== b.length) {\n return { valid: false };\n }\n const newArray = [];\n for (let index = 0; index < a.length; index++) {\n const itemA = a[index];\n const itemB = b[index];\n const sharedValue = mergeValues(itemA, itemB);\n if (!sharedValue.valid) {\n return { valid: false };\n }\n newArray.push(sharedValue.data);\n }\n return { valid: true, data: newArray };\n }\n else if (aType === ZodParsedType.date &&\n bType === ZodParsedType.date &&\n +a === +b) {\n return { valid: true, data: a };\n }\n else {\n return { valid: false };\n }\n}\nclass ZodIntersection extends ZodType {\n _parse(input) {\n const { status, ctx } = this._processInputParams(input);\n const handleParsed = (parsedLeft, parsedRight) => {\n if (isAborted(parsedLeft) || isAborted(parsedRight)) {\n return INVALID;\n }\n const merged = mergeValues(parsedLeft.value, parsedRight.value);\n if (!merged.valid) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_intersection_types,\n });\n return INVALID;\n }\n if (isDirty(parsedLeft) || isDirty(parsedRight)) {\n status.dirty();\n }\n return { status: status.value, value: merged.data };\n };\n if (ctx.common.async) {\n return Promise.all([\n this._def.left._parseAsync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n }),\n this._def.right._parseAsync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n }),\n ]).then(([left, right]) => handleParsed(left, right));\n }\n else {\n return handleParsed(this._def.left._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n }), this._def.right._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n }));\n }\n }\n}\nZodIntersection.create = (left, right, params) => {\n return new ZodIntersection({\n left: left,\n right: right,\n typeName: ZodFirstPartyTypeKind.ZodIntersection,\n ...processCreateParams(params),\n });\n};\nclass ZodTuple extends ZodType {\n _parse(input) {\n const { status, ctx } = this._processInputParams(input);\n if (ctx.parsedType !== ZodParsedType.array) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.array,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n if (ctx.data.length < this._def.items.length) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n minimum: this._def.items.length,\n inclusive: true,\n exact: false,\n type: \"array\",\n });\n return INVALID;\n }\n const rest = this._def.rest;\n if (!rest && ctx.data.length > this._def.items.length) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n maximum: this._def.items.length,\n inclusive: true,\n exact: false,\n type: \"array\",\n });\n status.dirty();\n }\n const items = [...ctx.data]\n .map((item, itemIndex) => {\n const schema = this._def.items[itemIndex] || this._def.rest;\n if (!schema)\n return null;\n return schema._parse(new ParseInputLazyPath(ctx, item, ctx.path, itemIndex));\n })\n .filter((x) => !!x); // filter nulls\n if (ctx.common.async) {\n return Promise.all(items).then((results) => {\n return ParseStatus.mergeArray(status, results);\n });\n }\n else {\n return ParseStatus.mergeArray(status, items);\n }\n }\n get items() {\n return this._def.items;\n }\n rest(rest) {\n return new ZodTuple({\n ...this._def,\n rest,\n });\n }\n}\nZodTuple.create = (schemas, params) => {\n if (!Array.isArray(schemas)) {\n throw new Error(\"You must pass an array of schemas to z.tuple([ ... ])\");\n }\n return new ZodTuple({\n items: schemas,\n typeName: ZodFirstPartyTypeKind.ZodTuple,\n rest: null,\n ...processCreateParams(params),\n });\n};\nclass ZodRecord extends ZodType {\n get keySchema() {\n return this._def.keyType;\n }\n get valueSchema() {\n return this._def.valueType;\n }\n _parse(input) {\n const { status, ctx } = this._processInputParams(input);\n if (ctx.parsedType !== ZodParsedType.object) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.object,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n const pairs = [];\n const keyType = this._def.keyType;\n const valueType = this._def.valueType;\n for (const key in ctx.data) {\n pairs.push({\n key: keyType._parse(new ParseInputLazyPath(ctx, key, ctx.path, key)),\n value: valueType._parse(new ParseInputLazyPath(ctx, ctx.data[key], ctx.path, key)),\n alwaysSet: key in ctx.data,\n });\n }\n if (ctx.common.async) {\n return ParseStatus.mergeObjectAsync(status, pairs);\n }\n else {\n return ParseStatus.mergeObjectSync(status, pairs);\n }\n }\n get element() {\n return this._def.valueType;\n }\n static create(first, second, third) {\n if (second instanceof ZodType) {\n return new ZodRecord({\n keyType: first,\n valueType: second,\n typeName: ZodFirstPartyTypeKind.ZodRecord,\n ...processCreateParams(third),\n });\n }\n return new ZodRecord({\n keyType: ZodString.create(),\n valueType: first,\n typeName: ZodFirstPartyTypeKind.ZodRecord,\n ...processCreateParams(second),\n });\n }\n}\nclass ZodMap extends ZodType {\n get keySchema() {\n return this._def.keyType;\n }\n get valueSchema() {\n return this._def.valueType;\n }\n _parse(input) {\n const { status, ctx } = this._processInputParams(input);\n if (ctx.parsedType !== ZodParsedType.map) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.map,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n const keyType = this._def.keyType;\n const valueType = this._def.valueType;\n const pairs = [...ctx.data.entries()].map(([key, value], index) => {\n return {\n key: keyType._parse(new ParseInputLazyPath(ctx, key, ctx.path, [index, \"key\"])),\n value: valueType._parse(new ParseInputLazyPath(ctx, value, ctx.path, [index, \"value\"])),\n };\n });\n if (ctx.common.async) {\n const finalMap = new Map();\n return Promise.resolve().then(async () => {\n for (const pair of pairs) {\n const key = await pair.key;\n const value = await pair.value;\n if (key.status === \"aborted\" || value.status === \"aborted\") {\n return INVALID;\n }\n if (key.status === \"dirty\" || value.status === \"dirty\") {\n status.dirty();\n }\n finalMap.set(key.value, value.value);\n }\n return { status: status.value, value: finalMap };\n });\n }\n else {\n const finalMap = new Map();\n for (const pair of pairs) {\n const key = pair.key;\n const value = pair.value;\n if (key.status === \"aborted\" || value.status === \"aborted\") {\n return INVALID;\n }\n if (key.status === \"dirty\" || value.status === \"dirty\") {\n status.dirty();\n }\n finalMap.set(key.value, value.value);\n }\n return { status: status.value, value: finalMap };\n }\n }\n}\nZodMap.create = (keyType, valueType, params) => {\n return new ZodMap({\n valueType,\n keyType,\n typeName: ZodFirstPartyTypeKind.ZodMap,\n ...processCreateParams(params),\n });\n};\nclass ZodSet extends ZodType {\n _parse(input) {\n const { status, ctx } = this._processInputParams(input);\n if (ctx.parsedType !== ZodParsedType.set) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.set,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n const def = this._def;\n if (def.minSize !== null) {\n if (ctx.data.size < def.minSize.value) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n minimum: def.minSize.value,\n type: \"set\",\n inclusive: true,\n exact: false,\n message: def.minSize.message,\n });\n status.dirty();\n }\n }\n if (def.maxSize !== null) {\n if (ctx.data.size > def.maxSize.value) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n maximum: def.maxSize.value,\n type: \"set\",\n inclusive: true,\n exact: false,\n message: def.maxSize.message,\n });\n status.dirty();\n }\n }\n const valueType = this._def.valueType;\n function finalizeSet(elements) {\n const parsedSet = new Set();\n for (const element of elements) {\n if (element.status === \"aborted\")\n return INVALID;\n if (element.status === \"dirty\")\n status.dirty();\n parsedSet.add(element.value);\n }\n return { status: status.value, value: parsedSet };\n }\n const elements = [...ctx.data.values()].map((item, i) => valueType._parse(new ParseInputLazyPath(ctx, item, ctx.path, i)));\n if (ctx.common.async) {\n return Promise.all(elements).then((elements) => finalizeSet(elements));\n }\n else {\n return finalizeSet(elements);\n }\n }\n min(minSize, message) {\n return new ZodSet({\n ...this._def,\n minSize: { value: minSize, message: errorUtil.toString(message) },\n });\n }\n max(maxSize, message) {\n return new ZodSet({\n ...this._def,\n maxSize: { value: maxSize, message: errorUtil.toString(message) },\n });\n }\n size(size, message) {\n return this.min(size, message).max(size, message);\n }\n nonempty(message) {\n return this.min(1, message);\n }\n}\nZodSet.create = (valueType, params) => {\n return new ZodSet({\n valueType,\n minSize: null,\n maxSize: null,\n typeName: ZodFirstPartyTypeKind.ZodSet,\n ...processCreateParams(params),\n });\n};\nclass ZodFunction extends ZodType {\n constructor() {\n super(...arguments);\n this.validate = this.implement;\n }\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n if (ctx.parsedType !== ZodParsedType.function) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.function,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n function makeArgsIssue(args, error) {\n return makeIssue({\n data: args,\n path: ctx.path,\n errorMaps: [\n ctx.common.contextualErrorMap,\n ctx.schemaErrorMap,\n getErrorMap(),\n errorMap,\n ].filter((x) => !!x),\n issueData: {\n code: ZodIssueCode.invalid_arguments,\n argumentsError: error,\n },\n });\n }\n function makeReturnsIssue(returns, error) {\n return makeIssue({\n data: returns,\n path: ctx.path,\n errorMaps: [\n ctx.common.contextualErrorMap,\n ctx.schemaErrorMap,\n getErrorMap(),\n errorMap,\n ].filter((x) => !!x),\n issueData: {\n code: ZodIssueCode.invalid_return_type,\n returnTypeError: error,\n },\n });\n }\n const params = { errorMap: ctx.common.contextualErrorMap };\n const fn = ctx.data;\n if (this._def.returns instanceof ZodPromise) {\n // Would love a way to avoid disabling this rule, but we need\n // an alias (using an arrow function was what caused 2651).\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n const me = this;\n return OK(async function (...args) {\n const error = new ZodError([]);\n const parsedArgs = await me._def.args\n .parseAsync(args, params)\n .catch((e) => {\n error.addIssue(makeArgsIssue(args, e));\n throw error;\n });\n const result = await Reflect.apply(fn, this, parsedArgs);\n const parsedReturns = await me._def.returns._def.type\n .parseAsync(result, params)\n .catch((e) => {\n error.addIssue(makeReturnsIssue(result, e));\n throw error;\n });\n return parsedReturns;\n });\n }\n else {\n // Would love a way to avoid disabling this rule, but we need\n // an alias (using an arrow function was what caused 2651).\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n const me = this;\n return OK(function (...args) {\n const parsedArgs = me._def.args.safeParse(args, params);\n if (!parsedArgs.success) {\n throw new ZodError([makeArgsIssue(args, parsedArgs.error)]);\n }\n const result = Reflect.apply(fn, this, parsedArgs.data);\n const parsedReturns = me._def.returns.safeParse(result, params);\n if (!parsedReturns.success) {\n throw new ZodError([makeReturnsIssue(result, parsedReturns.error)]);\n }\n return parsedReturns.data;\n });\n }\n }\n parameters() {\n return this._def.args;\n }\n returnType() {\n return this._def.returns;\n }\n args(...items) {\n return new ZodFunction({\n ...this._def,\n args: ZodTuple.create(items).rest(ZodUnknown.create()),\n });\n }\n returns(returnType) {\n return new ZodFunction({\n ...this._def,\n returns: returnType,\n });\n }\n implement(func) {\n const validatedFunc = this.parse(func);\n return validatedFunc;\n }\n strictImplement(func) {\n const validatedFunc = this.parse(func);\n return validatedFunc;\n }\n static create(args, returns, params) {\n return new ZodFunction({\n args: (args\n ? args\n : ZodTuple.create([]).rest(ZodUnknown.create())),\n returns: returns || ZodUnknown.create(),\n typeName: ZodFirstPartyTypeKind.ZodFunction,\n ...processCreateParams(params),\n });\n }\n}\nclass ZodLazy extends ZodType {\n get schema() {\n return this._def.getter();\n }\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n const lazySchema = this._def.getter();\n return lazySchema._parse({ data: ctx.data, path: ctx.path, parent: ctx });\n }\n}\nZodLazy.create = (getter, params) => {\n return new ZodLazy({\n getter: getter,\n typeName: ZodFirstPartyTypeKind.ZodLazy,\n ...processCreateParams(params),\n });\n};\nclass ZodLiteral extends ZodType {\n _parse(input) {\n if (input.data !== this._def.value) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n received: ctx.data,\n code: ZodIssueCode.invalid_literal,\n expected: this._def.value,\n });\n return INVALID;\n }\n return { status: \"valid\", value: input.data };\n }\n get value() {\n return this._def.value;\n }\n}\nZodLiteral.create = (value, params) => {\n return new ZodLiteral({\n value: value,\n typeName: ZodFirstPartyTypeKind.ZodLiteral,\n ...processCreateParams(params),\n });\n};\nfunction createZodEnum(values, params) {\n return new ZodEnum({\n values,\n typeName: ZodFirstPartyTypeKind.ZodEnum,\n ...processCreateParams(params),\n });\n}\nclass ZodEnum extends ZodType {\n constructor() {\n super(...arguments);\n _ZodEnum_cache.set(this, void 0);\n }\n _parse(input) {\n if (typeof input.data !== \"string\") {\n const ctx = this._getOrReturnCtx(input);\n const expectedValues = this._def.values;\n addIssueToContext(ctx, {\n expected: util.joinValues(expectedValues),\n received: ctx.parsedType,\n code: ZodIssueCode.invalid_type,\n });\n return INVALID;\n }\n if (!__classPrivateFieldGet(this, _ZodEnum_cache, \"f\")) {\n __classPrivateFieldSet(this, _ZodEnum_cache, new Set(this._def.values), \"f\");\n }\n if (!__classPrivateFieldGet(this, _ZodEnum_cache, \"f\").has(input.data)) {\n const ctx = this._getOrReturnCtx(input);\n const expectedValues = this._def.values;\n addIssueToContext(ctx, {\n received: ctx.data,\n code: ZodIssueCode.invalid_enum_value,\n options: expectedValues,\n });\n return INVALID;\n }\n return OK(input.data);\n }\n get options() {\n return this._def.values;\n }\n get enum() {\n const enumValues = {};\n for (const val of this._def.values) {\n enumValues[val] = val;\n }\n return enumValues;\n }\n get Values() {\n const enumValues = {};\n for (const val of this._def.values) {\n enumValues[val] = val;\n }\n return enumValues;\n }\n get Enum() {\n const enumValues = {};\n for (const val of this._def.values) {\n enumValues[val] = val;\n }\n return enumValues;\n }\n extract(values, newDef = this._def) {\n return ZodEnum.create(values, {\n ...this._def,\n ...newDef,\n });\n }\n exclude(values, newDef = this._def) {\n return ZodEnum.create(this.options.filter((opt) => !values.includes(opt)), {\n ...this._def,\n ...newDef,\n });\n }\n}\n_ZodEnum_cache = new WeakMap();\nZodEnum.create = createZodEnum;\nclass ZodNativeEnum extends ZodType {\n constructor() {\n super(...arguments);\n _ZodNativeEnum_cache.set(this, void 0);\n }\n _parse(input) {\n const nativeEnumValues = util.getValidEnumValues(this._def.values);\n const ctx = this._getOrReturnCtx(input);\n if (ctx.parsedType !== ZodParsedType.string &&\n ctx.parsedType !== ZodParsedType.number) {\n const expectedValues = util.objectValues(nativeEnumValues);\n addIssueToContext(ctx, {\n expected: util.joinValues(expectedValues),\n received: ctx.parsedType,\n code: ZodIssueCode.invalid_type,\n });\n return INVALID;\n }\n if (!__classPrivateFieldGet(this, _ZodNativeEnum_cache, \"f\")) {\n __classPrivateFieldSet(this, _ZodNativeEnum_cache, new Set(util.getValidEnumValues(this._def.values)), \"f\");\n }\n if (!__classPrivateFieldGet(this, _ZodNativeEnum_cache, \"f\").has(input.data)) {\n const expectedValues = util.objectValues(nativeEnumValues);\n addIssueToContext(ctx, {\n received: ctx.data,\n code: ZodIssueCode.invalid_enum_value,\n options: expectedValues,\n });\n return INVALID;\n }\n return OK(input.data);\n }\n get enum() {\n return this._def.values;\n }\n}\n_ZodNativeEnum_cache = new WeakMap();\nZodNativeEnum.create = (values, params) => {\n return new ZodNativeEnum({\n values: values,\n typeName: ZodFirstPartyTypeKind.ZodNativeEnum,\n ...processCreateParams(params),\n });\n};\nclass ZodPromise extends ZodType {\n unwrap() {\n return this._def.type;\n }\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n if (ctx.parsedType !== ZodParsedType.promise &&\n ctx.common.async === false) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.promise,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n const promisified = ctx.parsedType === ZodParsedType.promise\n ? ctx.data\n : Promise.resolve(ctx.data);\n return OK(promisified.then((data) => {\n return this._def.type.parseAsync(data, {\n path: ctx.path,\n errorMap: ctx.common.contextualErrorMap,\n });\n }));\n }\n}\nZodPromise.create = (schema, params) => {\n return new ZodPromise({\n type: schema,\n typeName: ZodFirstPartyTypeKind.ZodPromise,\n ...processCreateParams(params),\n });\n};\nclass ZodEffects extends ZodType {\n innerType() {\n return this._def.schema;\n }\n sourceType() {\n return this._def.schema._def.typeName === ZodFirstPartyTypeKind.ZodEffects\n ? this._def.schema.sourceType()\n : this._def.schema;\n }\n _parse(input) {\n const { status, ctx } = this._processInputParams(input);\n const effect = this._def.effect || null;\n const checkCtx = {\n addIssue: (arg) => {\n addIssueToContext(ctx, arg);\n if (arg.fatal) {\n status.abort();\n }\n else {\n status.dirty();\n }\n },\n get path() {\n return ctx.path;\n },\n };\n checkCtx.addIssue = checkCtx.addIssue.bind(checkCtx);\n if (effect.type === \"preprocess\") {\n const processed = effect.transform(ctx.data, checkCtx);\n if (ctx.common.async) {\n return Promise.resolve(processed).then(async (processed) => {\n if (status.value === \"aborted\")\n return INVALID;\n const result = await this._def.schema._parseAsync({\n data: processed,\n path: ctx.path,\n parent: ctx,\n });\n if (result.status === \"aborted\")\n return INVALID;\n if (result.status === \"dirty\")\n return DIRTY(result.value);\n if (status.value === \"dirty\")\n return DIRTY(result.value);\n return result;\n });\n }\n else {\n if (status.value === \"aborted\")\n return INVALID;\n const result = this._def.schema._parseSync({\n data: processed,\n path: ctx.path,\n parent: ctx,\n });\n if (result.status === \"aborted\")\n return INVALID;\n if (result.status === \"dirty\")\n return DIRTY(result.value);\n if (status.value === \"dirty\")\n return DIRTY(result.value);\n return result;\n }\n }\n if (effect.type === \"refinement\") {\n const executeRefinement = (acc) => {\n const result = effect.refinement(acc, checkCtx);\n if (ctx.common.async) {\n return Promise.resolve(result);\n }\n if (result instanceof Promise) {\n throw new Error(\"Async refinement encountered during synchronous parse operation. Use .parseAsync instead.\");\n }\n return acc;\n };\n if (ctx.common.async === false) {\n const inner = this._def.schema._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n });\n if (inner.status === \"aborted\")\n return INVALID;\n if (inner.status === \"dirty\")\n status.dirty();\n // return value is ignored\n executeRefinement(inner.value);\n return { status: status.value, value: inner.value };\n }\n else {\n return this._def.schema\n ._parseAsync({ data: ctx.data, path: ctx.path, parent: ctx })\n .then((inner) => {\n if (inner.status === \"aborted\")\n return INVALID;\n if (inner.status === \"dirty\")\n status.dirty();\n return executeRefinement(inner.value).then(() => {\n return { status: status.value, value: inner.value };\n });\n });\n }\n }\n if (effect.type === \"transform\") {\n if (ctx.common.async === false) {\n const base = this._def.schema._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n });\n if (!isValid(base))\n return base;\n const result = effect.transform(base.value, checkCtx);\n if (result instanceof Promise) {\n throw new Error(`Asynchronous transform encountered during synchronous parse operation. Use .parseAsync instead.`);\n }\n return { status: status.value, value: result };\n }\n else {\n return this._def.schema\n ._parseAsync({ data: ctx.data, path: ctx.path, parent: ctx })\n .then((base) => {\n if (!isValid(base))\n return base;\n return Promise.resolve(effect.transform(base.value, checkCtx)).then((result) => ({ status: status.value, value: result }));\n });\n }\n }\n util.assertNever(effect);\n }\n}\nZodEffects.create = (schema, effect, params) => {\n return new ZodEffects({\n schema,\n typeName: ZodFirstPartyTypeKind.ZodEffects,\n effect,\n ...processCreateParams(params),\n });\n};\nZodEffects.createWithPreprocess = (preprocess, schema, params) => {\n return new ZodEffects({\n schema,\n effect: { type: \"preprocess\", transform: preprocess },\n typeName: ZodFirstPartyTypeKind.ZodEffects,\n ...processCreateParams(params),\n });\n};\nclass ZodOptional extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType === ZodParsedType.undefined) {\n return OK(undefined);\n }\n return this._def.innerType._parse(input);\n }\n unwrap() {\n return this._def.innerType;\n }\n}\nZodOptional.create = (type, params) => {\n return new ZodOptional({\n innerType: type,\n typeName: ZodFirstPartyTypeKind.ZodOptional,\n ...processCreateParams(params),\n });\n};\nclass ZodNullable extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType === ZodParsedType.null) {\n return OK(null);\n }\n return this._def.innerType._parse(input);\n }\n unwrap() {\n return this._def.innerType;\n }\n}\nZodNullable.create = (type, params) => {\n return new ZodNullable({\n innerType: type,\n typeName: ZodFirstPartyTypeKind.ZodNullable,\n ...processCreateParams(params),\n });\n};\nclass ZodDefault extends ZodType {\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n let data = ctx.data;\n if (ctx.parsedType === ZodParsedType.undefined) {\n data = this._def.defaultValue();\n }\n return this._def.innerType._parse({\n data,\n path: ctx.path,\n parent: ctx,\n });\n }\n removeDefault() {\n return this._def.innerType;\n }\n}\nZodDefault.create = (type, params) => {\n return new ZodDefault({\n innerType: type,\n typeName: ZodFirstPartyTypeKind.ZodDefault,\n defaultValue: typeof params.default === \"function\"\n ? params.default\n : () => params.default,\n ...processCreateParams(params),\n });\n};\nclass ZodCatch extends ZodType {\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n // newCtx is used to not collect issues from inner types in ctx\n const newCtx = {\n ...ctx,\n common: {\n ...ctx.common,\n issues: [],\n },\n };\n const result = this._def.innerType._parse({\n data: newCtx.data,\n path: newCtx.path,\n parent: {\n ...newCtx,\n },\n });\n if (isAsync(result)) {\n return result.then((result) => {\n return {\n status: \"valid\",\n value: result.status === \"valid\"\n ? result.value\n : this._def.catchValue({\n get error() {\n return new ZodError(newCtx.common.issues);\n },\n input: newCtx.data,\n }),\n };\n });\n }\n else {\n return {\n status: \"valid\",\n value: result.status === \"valid\"\n ? result.value\n : this._def.catchValue({\n get error() {\n return new ZodError(newCtx.common.issues);\n },\n input: newCtx.data,\n }),\n };\n }\n }\n removeCatch() {\n return this._def.innerType;\n }\n}\nZodCatch.create = (type, params) => {\n return new ZodCatch({\n innerType: type,\n typeName: ZodFirstPartyTypeKind.ZodCatch,\n catchValue: typeof params.catch === \"function\" ? params.catch : () => params.catch,\n ...processCreateParams(params),\n });\n};\nclass ZodNaN extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.nan) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.nan,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n return { status: \"valid\", value: input.data };\n }\n}\nZodNaN.create = (params) => {\n return new ZodNaN({\n typeName: ZodFirstPartyTypeKind.ZodNaN,\n ...processCreateParams(params),\n });\n};\nconst BRAND = Symbol(\"zod_brand\");\nclass ZodBranded extends ZodType {\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n const data = ctx.data;\n return this._def.type._parse({\n data,\n path: ctx.path,\n parent: ctx,\n });\n }\n unwrap() {\n return this._def.type;\n }\n}\nclass ZodPipeline extends ZodType {\n _parse(input) {\n const { status, ctx } = this._processInputParams(input);\n if (ctx.common.async) {\n const handleAsync = async () => {\n const inResult = await this._def.in._parseAsync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n });\n if (inResult.status === \"aborted\")\n return INVALID;\n if (inResult.status === \"dirty\") {\n status.dirty();\n return DIRTY(inResult.value);\n }\n else {\n return this._def.out._parseAsync({\n data: inResult.value,\n path: ctx.path,\n parent: ctx,\n });\n }\n };\n return handleAsync();\n }\n else {\n const inResult = this._def.in._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n });\n if (inResult.status === \"aborted\")\n return INVALID;\n if (inResult.status === \"dirty\") {\n status.dirty();\n return {\n status: \"dirty\",\n value: inResult.value,\n };\n }\n else {\n return this._def.out._parseSync({\n data: inResult.value,\n path: ctx.path,\n parent: ctx,\n });\n }\n }\n }\n static create(a, b) {\n return new ZodPipeline({\n in: a,\n out: b,\n typeName: ZodFirstPartyTypeKind.ZodPipeline,\n });\n }\n}\nclass ZodReadonly extends ZodType {\n _parse(input) {\n const result = this._def.innerType._parse(input);\n const freeze = (data) => {\n if (isValid(data)) {\n data.value = Object.freeze(data.value);\n }\n return data;\n };\n return isAsync(result)\n ? result.then((data) => freeze(data))\n : freeze(result);\n }\n unwrap() {\n return this._def.innerType;\n }\n}\nZodReadonly.create = (type, params) => {\n return new ZodReadonly({\n innerType: type,\n typeName: ZodFirstPartyTypeKind.ZodReadonly,\n ...processCreateParams(params),\n });\n};\nfunction custom(check, params = {}, \n/**\n * @deprecated\n *\n * Pass `fatal` into the params object instead:\n *\n * ```ts\n * z.string().custom((val) => val.length > 5, { fatal: false })\n * ```\n *\n */\nfatal) {\n if (check)\n return ZodAny.create().superRefine((data, ctx) => {\n var _a, _b;\n if (!check(data)) {\n const p = typeof params === \"function\"\n ? params(data)\n : typeof params === \"string\"\n ? { message: params }\n : params;\n const _fatal = (_b = (_a = p.fatal) !== null && _a !== void 0 ? _a : fatal) !== null && _b !== void 0 ? _b : true;\n const p2 = typeof p === \"string\" ? { message: p } : p;\n ctx.addIssue({ code: \"custom\", ...p2, fatal: _fatal });\n }\n });\n return ZodAny.create();\n}\nconst late = {\n object: ZodObject.lazycreate,\n};\nvar ZodFirstPartyTypeKind;\n(function (ZodFirstPartyTypeKind) {\n ZodFirstPartyTypeKind[\"ZodString\"] = \"ZodString\";\n ZodFirstPartyTypeKind[\"ZodNumber\"] = \"ZodNumber\";\n ZodFirstPartyTypeKind[\"ZodNaN\"] = \"ZodNaN\";\n ZodFirstPartyTypeKind[\"ZodBigInt\"] = \"ZodBigInt\";\n ZodFirstPartyTypeKind[\"ZodBoolean\"] = \"ZodBoolean\";\n ZodFirstPartyTypeKind[\"ZodDate\"] = \"ZodDate\";\n ZodFirstPartyTypeKind[\"ZodSymbol\"] = \"ZodSymbol\";\n ZodFirstPartyTypeKind[\"ZodUndefined\"] = \"ZodUndefined\";\n ZodFirstPartyTypeKind[\"ZodNull\"] = \"ZodNull\";\n ZodFirstPartyTypeKind[\"ZodAny\"] = \"ZodAny\";\n ZodFirstPartyTypeKind[\"ZodUnknown\"] = \"ZodUnknown\";\n ZodFirstPartyTypeKind[\"ZodNever\"] = \"ZodNever\";\n ZodFirstPartyTypeKind[\"ZodVoid\"] = \"ZodVoid\";\n ZodFirstPartyTypeKind[\"ZodArray\"] = \"ZodArray\";\n ZodFirstPartyTypeKind[\"ZodObject\"] = \"ZodObject\";\n ZodFirstPartyTypeKind[\"ZodUnion\"] = \"ZodUnion\";\n ZodFirstPartyTypeKind[\"ZodDiscriminatedUnion\"] = \"ZodDiscriminatedUnion\";\n ZodFirstPartyTypeKind[\"ZodIntersection\"] = \"ZodIntersection\";\n ZodFirstPartyTypeKind[\"ZodTuple\"] = \"ZodTuple\";\n ZodFirstPartyTypeKind[\"ZodRecord\"] = \"ZodRecord\";\n ZodFirstPartyTypeKind[\"ZodMap\"] = \"ZodMap\";\n ZodFirstPartyTypeKind[\"ZodSet\"] = \"ZodSet\";\n ZodFirstPartyTypeKind[\"ZodFunction\"] = \"ZodFunction\";\n ZodFirstPartyTypeKind[\"ZodLazy\"] = \"ZodLazy\";\n ZodFirstPartyTypeKind[\"ZodLiteral\"] = \"ZodLiteral\";\n ZodFirstPartyTypeKind[\"ZodEnum\"] = \"ZodEnum\";\n ZodFirstPartyTypeKind[\"ZodEffects\"] = \"ZodEffects\";\n ZodFirstPartyTypeKind[\"ZodNativeEnum\"] = \"ZodNativeEnum\";\n ZodFirstPartyTypeKind[\"ZodOptional\"] = \"ZodOptional\";\n ZodFirstPartyTypeKind[\"ZodNullable\"] = \"ZodNullable\";\n ZodFirstPartyTypeKind[\"ZodDefault\"] = \"ZodDefault\";\n ZodFirstPartyTypeKind[\"ZodCatch\"] = \"ZodCatch\";\n ZodFirstPartyTypeKind[\"ZodPromise\"] = \"ZodPromise\";\n ZodFirstPartyTypeKind[\"ZodBranded\"] = \"ZodBranded\";\n ZodFirstPartyTypeKind[\"ZodPipeline\"] = \"ZodPipeline\";\n ZodFirstPartyTypeKind[\"ZodReadonly\"] = \"ZodReadonly\";\n})(ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {}));\nconst instanceOfType = (\n// const instanceOfType = <T extends new (...args: any[]) => any>(\ncls, params = {\n message: `Input not instance of ${cls.name}`,\n}) => custom((data) => data instanceof cls, params);\nconst stringType = ZodString.create;\nconst numberType = ZodNumber.create;\nconst nanType = ZodNaN.create;\nconst bigIntType = ZodBigInt.create;\nconst booleanType = ZodBoolean.create;\nconst dateType = ZodDate.create;\nconst symbolType = ZodSymbol.create;\nconst undefinedType = ZodUndefined.create;\nconst nullType = ZodNull.create;\nconst anyType = ZodAny.create;\nconst unknownType = ZodUnknown.create;\nconst neverType = ZodNever.create;\nconst voidType = ZodVoid.create;\nconst arrayType = ZodArray.create;\nconst objectType = ZodObject.create;\nconst strictObjectType = ZodObject.strictCreate;\nconst unionType = ZodUnion.create;\nconst discriminatedUnionType = ZodDiscriminatedUnion.create;\nconst intersectionType = ZodIntersection.create;\nconst tupleType = ZodTuple.create;\nconst recordType = ZodRecord.create;\nconst mapType = ZodMap.create;\nconst setType = ZodSet.create;\nconst functionType = ZodFunction.create;\nconst lazyType = ZodLazy.create;\nconst literalType = ZodLiteral.create;\nconst enumType = ZodEnum.create;\nconst nativeEnumType = ZodNativeEnum.create;\nconst promiseType = ZodPromise.create;\nconst effectsType = ZodEffects.create;\nconst optionalType = ZodOptional.create;\nconst nullableType = ZodNullable.create;\nconst preprocessType = ZodEffects.createWithPreprocess;\nconst pipelineType = ZodPipeline.create;\nconst ostring = () => stringType().optional();\nconst onumber = () => numberType().optional();\nconst oboolean = () => booleanType().optional();\nconst coerce = {\n string: ((arg) => ZodString.create({ ...arg, coerce: true })),\n number: ((arg) => ZodNumber.create({ ...arg, coerce: true })),\n boolean: ((arg) => ZodBoolean.create({\n ...arg,\n coerce: true,\n })),\n bigint: ((arg) => ZodBigInt.create({ ...arg, coerce: true })),\n date: ((arg) => ZodDate.create({ ...arg, coerce: true })),\n};\nconst NEVER = INVALID;\n\nvar z = /*#__PURE__*/Object.freeze({\n __proto__: null,\n defaultErrorMap: errorMap,\n setErrorMap: setErrorMap,\n getErrorMap: getErrorMap,\n makeIssue: makeIssue,\n EMPTY_PATH: EMPTY_PATH,\n addIssueToContext: addIssueToContext,\n ParseStatus: ParseStatus,\n INVALID: INVALID,\n DIRTY: DIRTY,\n OK: OK,\n isAborted: isAborted,\n isDirty: isDirty,\n isValid: isValid,\n isAsync: isAsync,\n get util () { return util; },\n get objectUtil () { return objectUtil; },\n ZodParsedType: ZodParsedType,\n getParsedType: getParsedType,\n ZodType: ZodType,\n datetimeRegex: datetimeRegex,\n ZodString: ZodString,\n ZodNumber: ZodNumber,\n ZodBigInt: ZodBigInt,\n ZodBoolean: ZodBoolean,\n ZodDate: ZodDate,\n ZodSymbol: ZodSymbol,\n ZodUndefined: ZodUndefined,\n ZodNull: ZodNull,\n ZodAny: ZodAny,\n ZodUnknown: ZodUnknown,\n ZodNever: ZodNever,\n ZodVoid: ZodVoid,\n ZodArray: ZodArray,\n ZodObject: ZodObject,\n ZodUnion: ZodUnion,\n ZodDiscriminatedUnion: ZodDiscriminatedUnion,\n ZodIntersection: ZodIntersection,\n ZodTuple: ZodTuple,\n ZodRecord: ZodRecord,\n ZodMap: ZodMap,\n ZodSet: ZodSet,\n ZodFunction: ZodFunction,\n ZodLazy: ZodLazy,\n ZodLiteral: ZodLiteral,\n ZodEnum: ZodEnum,\n ZodNativeEnum: ZodNativeEnum,\n ZodPromise: ZodPromise,\n ZodEffects: ZodEffects,\n ZodTransformer: ZodEffects,\n ZodOptional: ZodOptional,\n ZodNullable: ZodNullable,\n ZodDefault: ZodDefault,\n ZodCatch: ZodCatch,\n ZodNaN: ZodNaN,\n BRAND: BRAND,\n ZodBranded: ZodBranded,\n ZodPipeline: ZodPipeline,\n ZodReadonly: ZodReadonly,\n custom: custom,\n Schema: ZodType,\n ZodSchema: ZodType,\n late: late,\n get ZodFirstPartyTypeKind () { return ZodFirstPartyTypeKind; },\n coerce: coerce,\n any: anyType,\n array: arrayType,\n bigint: bigIntType,\n boolean: booleanType,\n date: dateType,\n discriminatedUnion: discriminatedUnionType,\n effect: effectsType,\n 'enum': enumType,\n 'function': functionType,\n 'instanceof': instanceOfType,\n intersection: intersectionType,\n lazy: lazyType,\n literal: literalType,\n map: mapType,\n nan: nanType,\n nativeEnum: nativeEnumType,\n never: neverType,\n 'null': nullType,\n nullable: nullableType,\n number: numberType,\n object: objectType,\n oboolean: oboolean,\n onumber: onumber,\n optional: optionalType,\n ostring: ostring,\n pipeline: pipelineType,\n preprocess: preprocessType,\n promise: promiseType,\n record: recordType,\n set: setType,\n strictObject: strictObjectType,\n string: stringType,\n symbol: symbolType,\n transformer: effectsType,\n tuple: tupleType,\n 'undefined': undefinedType,\n union: unionType,\n unknown: unknownType,\n 'void': voidType,\n NEVER: NEVER,\n ZodIssueCode: ZodIssueCode,\n quotelessJson: quotelessJson,\n ZodError: ZodError\n});\n\nexport { BRAND, DIRTY, EMPTY_PATH, INVALID, NEVER, OK, ParseStatus, ZodType as Schema, ZodAny, ZodArray, ZodBigInt, ZodBoolean, ZodBranded, ZodCatch, ZodDate, ZodDefault, ZodDiscriminatedUnion, ZodEffects, ZodEnum, ZodError, ZodFirstPartyTypeKind, ZodFunction, ZodIntersection, ZodIssueCode, ZodLazy, ZodLiteral, ZodMap, ZodNaN, ZodNativeEnum, ZodNever, ZodNull, ZodNullable, ZodNumber, ZodObject, ZodOptional, ZodParsedType, ZodPipeline, ZodPromise, ZodReadonly, ZodRecord, ZodType as ZodSchema, ZodSet, ZodString, ZodSymbol, ZodEffects as ZodTransformer, ZodTuple, ZodType, ZodUndefined, ZodUnion, ZodUnknown, ZodVoid, addIssueToContext, anyType as any, arrayType as array, bigIntType as bigint, booleanType as boolean, coerce, custom, dateType as date, datetimeRegex, z as default, errorMap as defaultErrorMap, discriminatedUnionType as discriminatedUnion, effectsType as effect, enumType as enum, functionType as function, getErrorMap, getParsedType, instanceOfType as instanceof, intersectionType as intersection, isAborted, isAsync, isDirty, isValid, late, lazyType as lazy, literalType as literal, makeIssue, mapType as map, nanType as nan, nativeEnumType as nativeEnum, neverType as never, nullType as null, nullableType as nullable, numberType as number, objectType as object, objectUtil, oboolean, onumber, optionalType as optional, ostring, pipelineType as pipeline, preprocessType as preprocess, promiseType as promise, quotelessJson, recordType as record, setType as set, setErrorMap, strictObjectType as strictObject, stringType as string, symbolType as symbol, effectsType as transformer, tupleType as tuple, undefinedType as undefined, unionType as union, unknownType as unknown, util, voidType as void, z };\n","var I = Object.defineProperty;\nvar D = (n, e, t) => e in n ? I(n, e, { enumerable: !0, configurable: !0, writable: !0, value: t }) : n[e] = t;\nvar l = (n, e, t) => D(n, typeof e != \"symbol\" ? e + \"\" : e, t);\nimport y from \"canonicalize\";\nimport { z as m } from \"zod\";\nfunction dn(n, e) {\n if (!(n == null || e == null))\n return { from: n, to: e };\n}\nfunction mn(n, e) {\n if (n.from < 0 || n.to < 0 || n.from >= n.to)\n throw new Error(`${e}: invalid bytes range: ${n}`);\n}\nfunction pn(n) {\n return n !== void 0 && n.startsWith(\"log+live://log/\");\n}\nfunction w(n) {\n throw new Error(\"Unexpected object: \" + n);\n}\nconst E = \"upload://upload/\", S = \"index://index/\";\nfunction L(n) {\n return n.startsWith(E);\n}\nfunction V(n) {\n return n.startsWith(S);\n}\nfunction B(n) {\n if (V(n)) {\n const e = n.slice(S.length);\n return JSON.parse(decodeURIComponent(e)).path;\n } else if (L(n)) {\n const e = n.slice(E.length);\n return JSON.parse(decodeURIComponent(e)).localPath;\n }\n w(n);\n}\nfunction j(n) {\n return n.replace(/^.*[\\\\/]/, \"\");\n}\nfunction ln(n) {\n return j(B(n));\n}\nfunction yn(n) {\n if (!n || typeof n != \"object\")\n return !1;\n const e = n;\n if (!(\"type\" in e))\n return !1;\n switch (e.type) {\n case \"Json\":\n return typeof e.keyLength == \"number\" && e.data !== void 0 && typeof e.data == \"object\";\n case \"JsonPartitioned\":\n return typeof e.partitionKeyLength == \"number\" && e.parts !== void 0 && typeof e.parts == \"object\";\n case \"BinaryPartitioned\":\n return typeof e.partitionKeyLength == \"number\" && e.parts !== void 0 && typeof e.parts == \"object\";\n default:\n return !1;\n }\n}\nfunction hn(n, e) {\n if (n !== void 0)\n switch (n.type) {\n case \"Json\":\n return n;\n case \"JsonPartitioned\": {\n const t = {};\n for (const [r, o] of Object.entries(n.parts))\n t[r] = e(o);\n return {\n ...n,\n parts: t\n };\n }\n case \"BinaryPartitioned\": {\n const t = {};\n for (const [r, o] of Object.entries(n.parts))\n t[r] = {\n index: e(o.index),\n values: e(o.values)\n };\n return {\n ...n,\n parts: t\n };\n }\n }\n}\nfunction F(n) {\n if (!n || typeof n != \"object\")\n return !1;\n const e = n;\n if (!(\"type\" in e))\n return !1;\n switch (e.type) {\n case \"Json\":\n return typeof e.keyLength == \"number\" && Array.isArray(e.data);\n case \"JsonPartitioned\":\n return typeof e.partitionKeyLength == \"number\" && Array.isArray(e.parts);\n case \"BinaryPartitioned\":\n return typeof e.partitionKeyLength == \"number\" && Array.isArray(e.parts);\n default:\n return !1;\n }\n}\nfunction gn(n) {\n return F(n) ? n.type === \"JsonPartitioned\" || n.type === \"BinaryPartitioned\" : !1;\n}\nfunction bn(n) {\n switch (n.type) {\n case \"Json\": {\n const e = Object.entries(n.data).map(([t, r]) => ({ key: JSON.parse(t), value: r }));\n return {\n type: \"Json\",\n keyLength: n.keyLength,\n data: e\n };\n }\n case \"JsonPartitioned\": {\n const e = Object.entries(n.parts).map(([t, r]) => ({ key: JSON.parse(t), value: r }));\n return {\n type: \"JsonPartitioned\",\n partitionKeyLength: n.partitionKeyLength,\n parts: e\n };\n }\n case \"BinaryPartitioned\": {\n const e = Object.entries(n.parts).map(([t, r]) => ({ key: JSON.parse(t), value: r }));\n return {\n type: \"BinaryPartitioned\",\n partitionKeyLength: n.partitionKeyLength,\n parts: e\n };\n }\n }\n}\nfunction wn(n) {\n switch (n.type) {\n case \"Json\": {\n const e = {};\n for (const t of n.data)\n e[JSON.stringify(t.key)] = t.value;\n return {\n type: \"Json\",\n keyLength: n.keyLength,\n data: e\n };\n }\n case \"JsonPartitioned\": {\n const e = {};\n for (const t of n.parts)\n e[JSON.stringify(t.key)] = t.value;\n return {\n type: \"JsonPartitioned\",\n partitionKeyLength: n.partitionKeyLength,\n parts: e\n };\n }\n case \"BinaryPartitioned\": {\n const e = {};\n for (const t of n.parts)\n e[JSON.stringify(t.key)] = t.value;\n return {\n type: \"BinaryPartitioned\",\n partitionKeyLength: n.partitionKeyLength,\n parts: e\n };\n }\n }\n}\nfunction Pn(n, e) {\n if (n !== void 0)\n switch (n.type) {\n case \"Json\":\n return n;\n case \"JsonPartitioned\": {\n const t = n.parts.map((r) => ({\n key: r.key,\n value: e(r.value)\n }));\n return {\n ...n,\n parts: t\n };\n }\n case \"BinaryPartitioned\": {\n const t = n.parts.map((r) => ({\n key: r.key,\n value: {\n index: e(r.value.index),\n values: e(r.value.values)\n }\n }));\n return {\n ...n,\n parts: t\n };\n }\n }\n}\nconst U = -2147483648, P = -9007199254740991n, xn = NaN, An = NaN, K = null, R = null;\nfunction g(n, e) {\n switch (e) {\n case \"Int\":\n return n === U;\n case \"Long\":\n return n === Number(P) || n === P;\n case \"Float\":\n return Number.isNaN(n);\n case \"Double\":\n return Number.isNaN(n);\n case \"String\":\n return n === K;\n case \"Bytes\":\n return n === R;\n default:\n throw Error(`unsupported data type: ${e}`);\n }\n}\nfunction kn(n) {\n if (!v(n)) throw new Error(`Expected not-NA PValue, got ${n}`);\n return n;\n}\nfunction v(n, e) {\n if (!e)\n return typeof n == \"string\" || typeof n == \"number\" && isFinite(n) || typeof n == \"bigint\";\n if (g(n, e)) return !1;\n switch (e) {\n case \"Int\":\n return typeof n == \"number\";\n case \"Long\":\n return typeof n == \"number\" || typeof n == \"bigint\";\n case \"Float\":\n return typeof n == \"number\";\n case \"Double\":\n return typeof n == \"number\";\n case \"String\":\n return typeof n == \"string\";\n case \"Bytes\":\n throw Error(\"Bytes not yet supported\");\n default:\n throw Error(`unsupported data type: ${e}`);\n }\n}\nfunction _(n, e) {\n if (!e)\n return n === null || typeof n == \"string\" || typeof n == \"number\" || typeof n == \"bigint\";\n if (g(n, e)) return !0;\n switch (e) {\n case \"Int\":\n return typeof n == \"number\";\n case \"Long\":\n return typeof n == \"number\" || typeof n == \"bigint\";\n case \"Float\":\n return typeof n == \"number\";\n case \"Double\":\n return typeof n == \"number\";\n case \"String\":\n return typeof n == \"string\";\n case \"Bytes\":\n throw Error(\"Bytes not yet supported\");\n default:\n throw Error(`unsupported data type: ${e}`);\n }\n}\nfunction Nn(n) {\n if (n === null || typeof n == \"string\" || typeof n == \"number\") return n;\n if (typeof n == \"bigint\") return { bigint: n.toString() };\n throw new Error(`Type ${typeof n} (value ${n}) not yet supported.`);\n}\nfunction M(n, e) {\n if (n === null || typeof n == \"string\" || typeof n == \"number\" || typeof n == \"bigint\") {\n if (e && !g(n, e) && !_(n, e))\n throw new Error(`Unexpected value type, got ${typeof n}, expected ${e}`);\n return n;\n }\n if (typeof n == \"object\" && n !== null && \"bigint\" in n && typeof n.bigint == \"string\") {\n if (e && e !== \"Long\")\n throw new Error(`Unexpected value type, got serialized bigint, expected ${e}`);\n return BigInt(n.bigint);\n }\n throw new Error(`Unsupported type ${typeof n} (value ${n}).`);\n}\nfunction En(n) {\n if (n = T(n), n === null) throw new Error(\"Value is null\");\n return n;\n}\nfunction T(n) {\n if (n = M(n), n === null) return null;\n if (typeof n == \"string\") return n;\n if (typeof n == \"number\") {\n if (!isFinite(n)) throw new Error(`Value is not finite (${n})`);\n return n;\n }\n if (typeof n == \"bigint\")\n return Number(n);\n throw new Error(`Unexpected value type: ${typeof n}`);\n}\nfunction H(n, e) {\n const t = Math.floor(e / 8), r = 1 << 7 - e % 8;\n return (n[t] & r) > 0;\n}\nconst q = { type: \"absent\" }, W = null;\nfunction Sn(n) {\n return typeof n == \"object\" && n !== null && n.type === \"absent\";\n}\nfunction Cn(n, e, t = {}) {\n if (H(n.absent, e))\n return t.absent === void 0 ? q : t.absent;\n const r = n.data[e], o = n.type;\n if (g(r, o)) return t.na === void 0 ? W : t.na;\n switch (o) {\n case \"Int\":\n return r;\n case \"Long\":\n return Number(r);\n case \"Float\":\n return r;\n case \"Double\":\n return r;\n case \"String\":\n return r;\n case \"Bytes\":\n throw Error(\"Bytes not yet supported\");\n default:\n throw Error(`unsupported data type: ${o}`);\n }\n}\nfunction Jn(n) {\n return {\n kind: n.kind,\n valueType: n.valueType,\n name: n.name,\n domain: n.domain,\n parentAxes: n.parentAxes,\n axesId: C(n.axesSpec)\n };\n}\nfunction On(n) {\n return {\n columnId: n.id,\n spec: n.spec\n };\n}\nfunction p(n) {\n const { type: e, name: t, domain: r } = n;\n return { type: e, name: t, ...r && { domain: r } };\n}\nfunction C(n) {\n return n.map(p);\n}\nfunction $n(n) {\n return y(p(n));\n}\nfunction z(n, e) {\n if (n === void 0) return e === void 0;\n if (e === void 0) return !0;\n for (const t in e)\n if (n[t] !== e[t]) return !1;\n return !0;\n}\nfunction X(n, e) {\n return n.name === e.name && z(n.domain, e.domain);\n}\nfunction In(n, e) {\n return { ...n, src: h(n.src, e) };\n}\nfunction h(n, e) {\n switch (n.type) {\n case \"column\":\n return {\n type: \"column\",\n column: e(n.column)\n };\n case \"slicedColumn\":\n return {\n type: \"slicedColumn\",\n column: e(n.column),\n newId: n.newId,\n axisFilters: n.axisFilters\n };\n case \"inlineColumn\":\n return n;\n case \"inner\":\n case \"full\":\n return {\n type: n.type,\n entries: n.entries.map((t) => h(t, e))\n };\n case \"outer\":\n return {\n type: \"outer\",\n primary: h(n.primary, e),\n secondary: n.secondary.map((t) => h(t, e))\n };\n default:\n w(n);\n }\n}\nfunction G(n) {\n return y(n);\n}\nfunction Dn(n) {\n return JSON.parse(n);\n}\nfunction x(n) {\n return y(p(n));\n}\nfunction A(n, e) {\n return JSON.stringify([n, e]);\n}\nclass Ln {\n /**\n * Creates a new anchor context from a set of anchor column specifications\n * @param anchors Record of anchor column specifications indexed by anchor ID\n */\n constructor(e) {\n l(this, \"domains\", /* @__PURE__ */ new Map());\n l(this, \"axes\", /* @__PURE__ */ new Map());\n /**\n * Domain packs are used to group domain keys that can be anchored to the same anchor\n * This is used to optimize the lookup of domain anchors\n */\n l(this, \"domainPacks\", []);\n /**\n * Maps domain packs to anchors\n */\n l(this, \"domainPackToAnchor\", /* @__PURE__ */ new Map());\n this.anchors = e;\n const t = Object.entries(e);\n t.sort((r, o) => r[0].localeCompare(o[0]));\n for (const [r, o] of t) {\n for (let s = 0; s < o.axesSpec.length; s++) {\n const a = o.axesSpec[s], i = x(a);\n this.axes.set(i, { anchor: r, idx: s });\n }\n if (o.domain !== void 0) {\n const s = Object.entries(o.domain);\n s.sort((a, i) => a[0].localeCompare(i[0])), this.domainPackToAnchor.set(JSON.stringify(s), r), this.domainPacks.push(s.map(([a]) => a));\n for (const [a, i] of s) {\n const u = A(a, i);\n this.domains.set(u, r);\n }\n }\n }\n }\n /**\n * Implementation of derive method\n */\n derive(e, t) {\n const r = {\n name: e.name,\n axes: []\n };\n let o;\n if (e.domain !== void 0)\n n:\n for (const a of this.domainPacks) {\n const i = [];\n for (const c of a) {\n const d = e.domain[c];\n if (d !== void 0)\n i.push([c, d]);\n else\n break n;\n }\n const u = this.domainPackToAnchor.get(JSON.stringify(i));\n if (u !== void 0) {\n r.domainAnchor = u, o = new Set(a);\n break;\n }\n }\n for (const [a, i] of Object.entries(e.domain ?? {})) {\n if (o !== void 0 && o.has(a))\n continue;\n const u = A(a, i), c = this.domains.get(u);\n r.domain ?? (r.domain = {}), r.domain[a] = c ? { anchor: c } : i;\n }\n if (r.axes = e.axesSpec.map((a) => {\n const i = x(a), u = this.axes.get(i);\n return u === void 0 ? p(a) : u;\n }), !t || t.length === 0)\n return r;\n const s = [];\n for (const a of t) {\n const [i, u] = a;\n if (typeof i == \"number\") {\n if (i < 0 || i >= e.axesSpec.length)\n throw new Error(`Axis index ${i} is out of bounds (0-${e.axesSpec.length - 1})`);\n s.push([i, u]);\n } else {\n const c = e.axesSpec.findIndex((d) => d.name === i);\n if (c === -1)\n throw new Error(`Axis with name \"${i}\" not found in the column specification`);\n s.push([c, u]);\n }\n }\n return s.sort((a, i) => a[0] - i[0]), {\n source: r,\n axisFilters: s\n };\n }\n /**\n * Derives a canonicalized string representation of an anchored column identifier, can be used as a unique identifier for the column\n * @param spec Column specification to anchor\n * @param axisFilters Optional axis filters to apply to the column\n * @returns A canonicalized string representation of the anchored column identifier\n */\n deriveS(e, t) {\n return G(this.derive(e, t));\n }\n}\nfunction Vn(n, e, t) {\n const r = { ...e }, o = (t == null ? void 0 : t.ignoreMissingDomains) ?? !1;\n if (r.domainAnchor !== void 0) {\n const s = n[r.domainAnchor];\n if (!s)\n throw new Error(`Anchor \"${r.domainAnchor}\" not found`);\n const a = s.domain || {};\n r.domain = { ...a, ...r.domain }, delete r.domainAnchor;\n }\n if (r.domain) {\n const s = {};\n for (const [a, i] of Object.entries(r.domain))\n if (typeof i == \"string\")\n s[a] = i;\n else {\n const u = n[i.anchor];\n if (!u)\n throw new Error(`Anchor \"${i.anchor}\" not found for domain key \"${a}\"`);\n if (!u.domain || u.domain[a] === void 0) {\n if (!o)\n throw new Error(`Domain key \"${a}\" not found in anchor \"${i.anchor}\"`);\n continue;\n }\n s[a] = u.domain[a];\n }\n r.domain = s;\n }\n return r.axes && (r.axes = r.axes.map((s) => Q(n, s))), r;\n}\nfunction Q(n, e) {\n if (!Y(e))\n return e;\n const t = e.anchor, r = n[t];\n if (!r)\n throw new Error(`Anchor \"${t}\" not found for axis reference`);\n if (\"idx\" in e) {\n if (e.idx < 0 || e.idx >= r.axesSpec.length)\n throw new Error(`Axis index ${e.idx} out of bounds for anchor \"${t}\"`);\n return r.axesSpec[e.idx];\n } else if (\"name\" in e) {\n const o = r.axesSpec.filter((s) => s.name === e.name);\n if (o.length > 1)\n throw new Error(`Multiple axes with name \"${e.name}\" found in anchor \"${t}\"`);\n if (o.length === 0)\n throw new Error(`Axis with name \"${e.name}\" not found in anchor \"${t}\"`);\n return o[0];\n } else if (\"id\" in e) {\n const o = r.axesSpec.filter((s) => X(e.id, p(s)));\n if (o.length > 1)\n throw new Error(`Multiple matching axes found for matcher in anchor \"${t}\"`);\n if (o.length === 0)\n throw new Error(`No matching axis found for matcher in anchor \"${t}\"`);\n return o[0];\n }\n throw new Error(\"Unsupported axis reference type\");\n}\nfunction Y(n) {\n return typeof n == \"object\" && \"anchor\" in n;\n}\nfunction Bn(n) {\n return typeof n == \"object\" && n !== null && \"source\" in n && \"axisFilters\" in n;\n}\nfunction f(n) {\n return n.kind === \"PColumn\";\n}\nfunction Z(n) {\n return f(n.spec);\n}\nfunction jn(n) {\n return f(n.obj);\n}\nfunction Fn(n) {\n return f(n.obj.spec);\n}\nfunction Un(n) {\n if (!Z(n)) throw new Error(`not a PColumn (kind = ${n.spec.kind})`);\n return n;\n}\nfunction Kn(n, e) {\n return n === void 0 ? void 0 : {\n ...n,\n data: e(n.data)\n };\n}\nfunction Rn(n) {\n const e = /* @__PURE__ */ new Map(), t = (r) => {\n switch (r.type) {\n case \"column\":\n e.set(r.column.id, r.column);\n return;\n case \"slicedColumn\":\n e.set(r.column.id, r.column);\n return;\n case \"inlineColumn\":\n return;\n case \"full\":\n case \"inner\":\n for (const o of r.entries) t(o);\n return;\n case \"outer\":\n t(r.primary);\n for (const o of r.secondary) t(o);\n return;\n default:\n w(r);\n }\n };\n return t(n), [...e.values()];\n}\nfunction nn(n) {\n throw new Error(\"Unexpected object: \" + n);\n}\nfunction b(n, e) {\n switch (n.type) {\n case \"and\":\n for (const t of n.operands)\n if (!b(t, e)) return !1;\n return !0;\n case \"or\":\n for (const t of n.operands)\n if (b(t, e)) return !0;\n return !1;\n case \"not\":\n return !b(n.operand, e);\n case \"name\":\n return f(e) && e.name === n.name;\n case \"name_pattern\":\n return f(e) && !!e.name.match(n.pattern);\n case \"annotation\":\n return f(e) && e.annotations !== void 0 && e.annotations[n.annotation] === n.value;\n case \"annotation_pattern\":\n return f(e) && e.annotations !== void 0 && e.annotations[n.annotation] !== void 0 && !!e.annotations[n.annotation].match(n.pattern);\n case \"has_axes\":\n return f(e) && n.axes.every(\n (t) => e.axesSpec.some(\n (r) => (t.type === void 0 || t.type === r.type) && (t.name === void 0 || t.name === r.name) && (t.domain === void 0 || Object.keys(t.domain).length === 0 || r.domain !== void 0 && Object.entries(t.domain).every(\n ([o, s]) => r.domain[o] === s\n ))\n )\n );\n default:\n nn(n);\n }\n}\nfunction k(n, e) {\n if (n.name !== void 0 && n.name !== e.name)\n return !1;\n if (n.type !== void 0) {\n if (Array.isArray(n.type)) {\n if (!n.type.includes(e.type))\n return !1;\n } else if (n.type !== e.type)\n return !1;\n }\n if (n.domain !== void 0) {\n const t = e.domain || {};\n for (const [r, o] of Object.entries(n.domain))\n if (t[r] !== o)\n return !1;\n }\n return !0;\n}\nfunction N(n, e) {\n if (e.name !== void 0 && n.name !== e.name || e.namePattern !== void 0 && !new RegExp(e.namePattern).test(n.name))\n return !1;\n if (e.type !== void 0) {\n if (Array.isArray(e.type)) {\n if (!e.type.includes(n.valueType))\n return !1;\n } else if (e.type !== n.valueType)\n return !1;\n }\n if (e.domain !== void 0) {\n const t = n.domain || {};\n for (const [r, o] of Object.entries(e.domain))\n if (t[r] !== o)\n return !1;\n }\n if (e.axes !== void 0) {\n const t = n.axesSpec.map(p);\n if (e.partialAxesMatch) {\n for (const r of e.axes)\n if (!t.some((o) => k(r, o)))\n return !1;\n } else {\n if (t.length !== e.axes.length)\n return !1;\n for (let r = 0; r < e.axes.length; r++)\n if (!k(e.axes[r], t[r]))\n return !1;\n }\n }\n if (e.annotations !== void 0) {\n const t = n.annotations || {};\n for (const [r, o] of Object.entries(e.annotations))\n if (t[r] !== o)\n return !1;\n }\n if (e.annotationPatterns !== void 0) {\n const t = n.annotations || {};\n for (const [r, o] of Object.entries(e.annotationPatterns)) {\n const s = t[r];\n if (s === void 0 || !new RegExp(o).test(s))\n return !1;\n }\n }\n return !0;\n}\nfunction vn(n) {\n return Array.isArray(n) ? (e) => n.some((t) => f(e) && N(e, t)) : (e) => f(e) && N(e, n);\n}\nfunction _n(n) {\n const e = {\n kind: n.kind,\n name: n.name\n };\n return n.domain !== void 0 && (e.domain = n.domain), f(n) && (e.axesSpec = C(n.axesSpec)), y(e);\n}\nconst Mn = { href: \"/\" }, Tn = m.object({\n __isRef: m.literal(!0).describe(\"Crucial marker for the block dependency tree reconstruction\"),\n blockId: m.string().describe(\"Upstream block id\"),\n name: m.string().describe(\"Name of the output provided to the upstream block's output context\"),\n requireEnrichments: m.literal(!0).optional().describe(\"True if current block that stores this reference in its args, may need enrichments for the references value originating from the blocks in between current and referenced block\")\n}).describe(\n \"Universal reference type, allowing to set block connections. It is crucial that {@link __isRef} is present and equal to true, internal logic relies on this marker to build block dependency trees.\"\n).readonly();\nfunction Hn(n) {\n return typeof n == \"object\" && n !== null && \"__isRef\" in n && n.__isRef === !0 && \"blockId\" in n && \"name\" in n;\n}\nfunction qn(n, e, t = !1) {\n return t ? {\n __isRef: !0,\n blockId: n,\n name: e,\n requireEnrichments: !0\n } : {\n __isRef: !0,\n blockId: n,\n name: e\n };\n}\nfunction Wn(n, e = !0) {\n if (e)\n return {\n ...n,\n requireEnrichments: !0\n };\n {\n const { requireEnrichments: t, ...r } = n;\n return r;\n }\n}\nfunction zn(n, e, t = !1) {\n return n.blockId === e.blockId && n.name === e.name && (t || n.requireEnrichments === e.requireEnrichments);\n}\nfunction Xn(n, e) {\n return n.ok ? { ok: !0, value: e(n.value) } : n;\n}\nfunction en(n) {\n if (n instanceof Int8Array || n instanceof Uint8Array || n instanceof Uint8ClampedArray)\n return new DataView(n.buffer, n.byteOffset, n.byteLength);\n if (n instanceof ArrayBuffer) return new DataView(n);\n throw new TypeError(\n \"Expected `data` to be an ArrayBuffer, Buffer, Int8Array, Uint8Array or Uint8ClampedArray\"\n );\n}\nconst tn = \"ABCDEFGHIJKLMNOPQRSTUVWXYZ234567\", rn = \"0123456789ABCDEFGHIJKLMNOPQRSTUV\", on = \"0123456789ABCDEFGHJKMNPQRSTVWXYZ\";\nfunction J(n, e, t) {\n t = t || {};\n let r, o;\n switch (e) {\n case \"RFC3548\":\n case \"RFC4648\":\n r = tn, o = !0;\n break;\n case \"RFC4648-HEX\":\n r = rn, o = !0;\n break;\n case \"Crockford\":\n r = on, o = !1;\n break;\n default:\n throw new Error(\"Unknown base32 variant: \" + String(e));\n }\n const s = t.padding !== void 0 ? t.padding : o, a = en(n);\n let i = 0, u = 0, c = \"\";\n for (let d = 0; d < a.byteLength; d++)\n for (u = u << 8 | a.getUint8(d), i += 8; i >= 5; )\n c += r[u >>> i - 5 & 31], i -= 5;\n if (i > 0 && (c += r[u << 5 - i & 31]), s)\n for (; c.length % 8 !== 0; )\n c += \"=\";\n return c;\n}\nconst O = 15, sn = 24, $ = m.string().length(sn).regex(/[ABCDEFGHIJKLMNOPQRSTUVWXYZ234567]/).brand(\"PlId\");\nfunction Gn() {\n const n = new Uint8Array(O);\n return crypto.getRandomValues(n), $.parse(J(n, \"RFC4648\"));\n}\nfunction an(n) {\n if (n.length !== O) throw new Error(`Wrong number of bytes: ${n.length}`);\n return $.parse(J(n, \"RFC4648\"));\n}\nasync function Qn(n) {\n const e = new TextEncoder(), t = await crypto.subtle.digest(\"SHA-256\", e.encode(n));\n return an(new Uint8Array(t.slice(0, 15)));\n}\nfunction Yn(n) {\n return JSON.stringify(n);\n}\nfunction Zn(n) {\n return y(n);\n}\nfunction ne(n) {\n return JSON.parse(n);\n}\nexport {\n Ln as AnchoredIdDeriver,\n Mn as DefaultNavigationState,\n q as PTableAbsent,\n W as PTableNA,\n R as PValueBytesNA,\n An as PValueDoubleNA,\n xn as PValueFloatNA,\n U as PValueIntNA,\n P as PValueLongNA,\n K as PValueStringNA,\n $ as PlId,\n O as PlIdBytes,\n sn as PlIdLength,\n Tn as PlRef,\n $n as canonicalizeAxisId,\n Zn as canonicalizeJson,\n qn as createPlRef,\n bn as dataInfoToEntries,\n _n as deriveNativeId,\n Qn as digestPlId,\n kn as ensureNotNAPValue,\n Un as ensurePColumn,\n wn as entriesToDataInfo,\n b as executePSpecPredicate,\n Rn as extractAllColumns,\n C as getAxesId,\n p as getAxisId,\n On as getColumnIdAndSpec,\n ln as getFileNameFromHandle,\n B as getFilePathFromHandle,\n Jn as getPColumnSpecId,\n yn as isDataInfo,\n F as isDataInfoEntries,\n Bn as isFilteredPColumn,\n V as isImportFileHandleIndex,\n L as isImportFileHandleUpload,\n pn as isLiveLog,\n v as isNotNAPValue,\n Z as isPColumn,\n Fn as isPColumnResult,\n f as isPColumnSpec,\n jn as isPColumnSpecResult,\n Sn as isPTableAbsent,\n _ as isPValue,\n gn as isPartitionedDataInfoEntries,\n Hn as isPlRef,\n H as isValueAbsent,\n g as isValueNA,\n hn as mapDataInfo,\n Pn as mapDataInfoEntries,\n h as mapJoinEntry,\n Kn as mapPObjectData,\n In as mapPTableDef,\n Xn as mapValueInVOE,\n k as matchAxis,\n X as matchAxisId,\n N as matchPColumn,\n dn as newRangeBytesOpt,\n Cn as pTableValue,\n En as pValueToStringOrNumber,\n T as pValueToStringOrNumberOrNull,\n Dn as parseColumnId,\n ne as parseJson,\n an as plId,\n zn as plRefsEqual,\n Vn as resolveAnchors,\n M as safeConvertToPValue,\n vn as selectorsToPredicate,\n G as stringifyColumnId,\n Yn as stringifyJson,\n Nn as toJsonSafePValue,\n Gn as uniquePlId,\n mn as validateRangeBytes,\n Wn as withEnrichments\n};\n//# sourceMappingURL=index.mjs.map\n","exports = module.exports = stringify\nexports.getSerialize = serializer\n\nfunction stringify(obj, replacer, spaces, cycleReplacer) {\n return JSON.stringify(obj, serializer(replacer, cycleReplacer), spaces)\n}\n\nfunction serializer(replacer, cycleReplacer) {\n var stack = [], keys = []\n\n if (cycleReplacer == null) cycleReplacer = function(key, value) {\n if (stack[0] === value) return \"[Circular ~]\"\n return \"[Circular ~.\" + keys.slice(0, stack.indexOf(value)).join(\".\") + \"]\"\n }\n\n return function(key, value) {\n if (stack.length > 0) {\n var thisPos = stack.indexOf(this)\n ~thisPos ? stack.splice(thisPos + 1) : stack.push(this)\n ~thisPos ? keys.splice(thisPos, Infinity, key) : keys.push(key)\n if (~stack.indexOf(value)) value = cycleReplacer.call(this, key, value)\n }\n else stack.push(value)\n\n return replacer == null ? value : replacer.call(this, key, value)\n }\n}\n","import i from \"json-stringify-safe\";\nimport { z as r } from \"zod\";\nconst l = r.object({\n type: r.literal(\"PlError\"),\n name: r.string(),\n message: r.string(),\n /** The message with all details needed for SDK developers. */\n fullMessage: r.string().optional(),\n stack: r.string().optional()\n}), c = l.extend({\n cause: r.lazy(() => s).optional(),\n errors: r.lazy(() => s.array()).optional()\n}), m = r.object({\n type: r.literal(\"StandardError\"),\n name: r.string(),\n message: r.string(),\n stack: r.string().optional()\n}), p = m.extend({\n cause: r.lazy(() => s).optional(),\n errors: r.lazy(() => s.array()).optional()\n}), s = r.union([p, c]);\nfunction t(a) {\n const o = n.safeParse(a);\n if (o.success) {\n const e = o.data;\n return e.name === \"PlQuickJSError\" || e.name === \"PlErrorReport\" || e.name === \"PlInternalError\" || e.name === \"PlTengoError\" || e.name === \"PlRunnerError\" || e.name === \"PlMonetizationError\" ? {\n type: \"PlError\",\n name: e.name,\n message: e.message,\n fullMessage: e.fullMessage ?? void 0,\n stack: e.stack ?? void 0,\n cause: e.cause ? t(e.cause) : void 0,\n errors: e.errors ? e.errors.map(t) : void 0\n } : {\n type: \"StandardError\",\n name: e.name,\n message: e.message,\n stack: e.stack ?? void 0,\n cause: e.cause ? t(e.cause) : void 0,\n errors: e.errors ? e.errors.map(t) : void 0\n };\n }\n return {\n type: \"StandardError\",\n name: \"Error\",\n // Stringify without circular dependencies.\n // Maps (and sets?) will be converted to empty json objects,\n // if this is a problem, we should change the library,\n // but the new library must work in all QuickJS, UI and Node.js like this one.\n message: i(a)\n };\n}\nfunction d(a) {\n try {\n return s.safeParse(JSON.parse(a));\n } catch (o) {\n return { success: !1, error: new Error(`parseErrorLikeSafe: could not parse JSON: ${a}, ${String(o)}`) };\n }\n}\nconst u = r.object({\n name: r.string(),\n message: r.string(),\n fullMessage: r.string().optional(),\n stack: r.string().optional()\n}), n = u.extend({\n cause: r.lazy(() => n).optional(),\n errors: r.lazy(() => n.array()).optional()\n});\nexport {\n l as BasePlErrorLike,\n s as ErrorLike,\n c as PlErrorLike,\n p as StandardErrorLike,\n t as ensureErrorLike,\n d as parseErrorLikeSafe\n};\n//# sourceMappingURL=index.mjs.map\n","var Xe = Object.defineProperty;\nvar Qe = (t, e, n) => e in t ? Xe(t, e, { enumerable: !0, configurable: !0, writable: !0, value: n }) : t[e] = n;\nvar R = (t, e, n) => Qe(t, typeof e != \"symbol\" ? e + \"\" : e, n);\nimport { isPColumn as be, mapPObjectData as we, isDataInfoEntries as Ee, isDataInfo as Ae, dataInfoToEntries as Ze, selectorsToPredicate as X, resolveAnchors as xe, deriveNativeId as et, isPColumnSpec as ne, isPartitionedDataInfoEntries as tt, getAxisId as T, entriesToDataInfo as nt, canonicalizeAxisId as rt, withEnrichments as Ce, AnchoredIdDeriver as Pe, isPlRef as it, mapValueInVOE as st, ensurePColumn as ot, extractAllColumns as at, mapPTableDef as lt, mapDataInfo as ut, canonicalizeJson as F, parseJson as fe, matchAxisId as K, getPColumnSpecId as ue, getColumnIdAndSpec as Oe, isPTableAbsent as ct, PTableNA as pt } from \"@milaboratories/pl-model-common\";\nexport * from \"@milaboratories/pl-model-common\";\nimport ke from \"canonicalize\";\nimport { z as U } from \"zod\";\nexport * from \"@milaboratories/pl-error-like\";\nclass dt extends Error {\n constructor(e, n) {\n super(`${e.length}${n ? \"+\" : \"\"} errors, first error: ` + e[0].message), this.errors = e, this.moreErrors = n;\n }\n}\nfunction ft(t) {\n if (!t.ok) throw new dt(t.errors, t.moreErrors);\n return t.value;\n}\nfunction tn(t) {\n return new Proxy(t, {\n get(e, n) {\n return ft(e[n]);\n }\n });\n}\nfunction P(t) {\n return typeof t == \"string\" || typeof t == \"number\" || typeof t == \"boolean\" || t === null ? re(t) : t;\n}\nfunction Q(t) {\n return { type: \"GetFromCtx\", variable: t };\n}\nfunction nn(t) {\n return {\n type: \"Isolate\",\n cfg: t\n };\n}\nconst rn = Q(\"$args\"), sn = Q(\"$it\"), on = Q(\"$prod\"), an = Q(\"$staging\"), ln = Q(\"$ui\");\nfunction re(t) {\n return { type: \"Immediate\", value: t };\n}\nfunction Re(t) {\n const e = {};\n for (const [n, r] of Object.entries(t)) e[n] = P(r);\n return {\n type: \"MakeObject\",\n template: e\n };\n}\nfunction un(...t) {\n const e = [];\n for (const n of t) e.push(P(n));\n return {\n type: \"MakeArray\",\n template: e\n };\n}\nfunction ie(t, e) {\n return {\n type: \"GetJsonField\",\n source: P(t),\n field: P(e)\n };\n}\nfunction cn(t, e, n = \"$it\") {\n return {\n type: \"MapRecordValues\",\n source: t,\n mapping: e,\n itVar: n\n };\n}\nfunction pn(t, e, n = \"$it\") {\n return {\n type: \"MapArrayValues\",\n source: t,\n mapping: e,\n itVar: n\n };\n}\nfunction dn(t) {\n return {\n type: \"Flatten\",\n source: t\n };\n}\nfunction fn(t) {\n return {\n type: \"IsEmpty\",\n arg: t\n };\n}\nfunction hn(t) {\n return {\n type: \"Not\",\n operand: t\n };\n}\nfunction gn(t, e) {\n return {\n type: \"And\",\n operand1: t,\n operand2: e\n };\n}\nfunction mn(t, e) {\n return {\n type: \"Or\",\n operand1: t,\n operand2: e\n };\n}\nfunction yn(t, e) {\n return {\n type: \"GetResourceField\",\n source: P(t),\n field: P(e)\n };\n}\nfunction vn() {\n return function(t) {\n return {\n type: \"GetResourceValueAsJson\",\n source: P(t)\n };\n };\n}\nfunction bn(t, e, n = \"$it\") {\n return {\n type: \"MapResourceFields\",\n source: t,\n mapping: e,\n itVar: n\n };\n}\nfunction wn(t, e) {\n return {\n type: \"GetBlobContent\",\n range: e,\n source: P(t)\n };\n}\nfunction An(t, e) {\n return {\n type: \"GetBlobContentAsString\",\n range: e,\n source: P(t)\n };\n}\nfunction xn() {\n return function(t, e) {\n return {\n type: \"GetBlobContentAsJson\",\n range: e,\n source: P(t)\n };\n };\n}\nfunction Cn(t) {\n return {\n type: \"GetDownloadedBlobContent\",\n source: P(t)\n };\n}\nfunction Pn(t) {\n return {\n type: \"GetOnDemandBlobContent\",\n source: P(t)\n };\n}\nfunction Sn(t, e) {\n return {\n type: \"ExtractArchiveAndGetURL\",\n format: e,\n source: P(t)\n };\n}\nfunction _n(t) {\n return {\n type: \"GetImportProgress\",\n source: P(t)\n };\n}\nfunction In(t, e) {\n return {\n type: \"GetLastLogs\",\n source: P(t),\n lines: e\n };\n}\nfunction Tn(t, e) {\n return {\n type: \"GetProgressLog\",\n source: P(t),\n patternToSearch: e\n };\n}\nfunction Ln(t, e) {\n return {\n type: \"GetProgressLogWithInfo\",\n source: P(t),\n patternToSearch: e\n };\n}\nfunction En(t) {\n return {\n type: \"GetLogHandle\",\n source: P(t)\n };\n}\nfunction ht() {\n return typeof globalThis.getPlatforma < \"u\" || typeof globalThis.platforma < \"u\";\n}\nfunction De(t) {\n if (t && typeof globalThis.getPlatforma == \"function\")\n return globalThis.getPlatforma(t);\n if (typeof globalThis.platforma < \"u\") return globalThis.platforma;\n throw new Error(\"Can't get platforma instance.\");\n}\nfunction gt() {\n if (typeof globalThis.cfgRenderCtx < \"u\") return globalThis.cfgRenderCtx;\n}\nfunction h() {\n if (typeof globalThis.cfgRenderCtx < \"u\") return globalThis.cfgRenderCtx;\n throw new Error(\"Not in config rendering context\");\n}\nfunction H(t, e) {\n const n = gt();\n if (n === void 0) return !1;\n if (t in n.callbackRegistry) throw new Error(`Callback with key ${t} already registered.`);\n return n.callbackRegistry[t] = e, !0;\n}\nconst ce = /* @__PURE__ */ new Map();\nfunction mt(t, e) {\n t in h().callbackRegistry || (h().callbackRegistry[t] = (n) => {\n for (const r of ce.get(t))\n r(n);\n }, ce.set(t, [])), ce.get(t).push(e);\n}\nclass I {\n constructor(e, n = (r) => r) {\n R(this, \"isResolved\", !1);\n R(this, \"resolvedValue\");\n this.handle = e, this.postProcess = n, mt(e, (r) => {\n this.resolvedValue = n(r), this.isResolved = !0;\n });\n }\n map(e) {\n return new I(this.handle, (n) => e(this.postProcess(n)));\n }\n mapDefined(e) {\n return new I(this.handle, (n) => {\n const r = this.postProcess(n);\n return r ? e(r) : void 0;\n });\n }\n toJSON() {\n return this.isResolved ? this.resolvedValue : { __awaited_futures__: [this.handle] };\n }\n}\nfunction he(t, e) {\n return t === void 0 ? void 0 : e(t);\n}\nclass O {\n constructor(e, n) {\n this.handle = e, this.resolvePath = n;\n }\n resolve(...e) {\n const n = e.map(\n (r) => ({\n assertFieldType: \"Input\",\n ...typeof r == \"string\" ? { field: r } : r\n })\n );\n return this.resolveWithCommon({}, ...n);\n }\n resolveOutput(...e) {\n const n = e.map(\n (r) => ({\n assertFieldType: \"Output\",\n ...typeof r == \"string\" ? { field: r } : r\n })\n );\n return this.resolveWithCommon({}, ...n);\n }\n resolveInput(...e) {\n const n = e.map(\n (r) => ({\n assertFieldType: \"Input\",\n ...typeof r == \"string\" ? { field: r } : r\n })\n );\n return this.resolveWithCommon({}, ...n);\n }\n resolveAny(...e) {\n return this.resolveWithCommon({}, ...e);\n }\n resolveWithCommon(e, ...n) {\n const r = [\n ...this.resolvePath,\n ...n.map((i) => typeof i == \"string\" ? i : i.field)\n ];\n return he(\n h().resolveWithCommon(this.handle, e, ...n),\n (i) => new O(i, r)\n );\n }\n get resourceType() {\n return h().getResourceType(this.handle);\n }\n getInputsLocked() {\n return h().getInputsLocked(this.handle);\n }\n getOutputsLocked() {\n return h().getOutputsLocked(this.handle);\n }\n getIsReadyOrError() {\n return h().getIsReadyOrError(this.handle);\n }\n getIsFinal() {\n return h().getIsFinal(this.handle);\n }\n getError() {\n const e = [...this.resolvePath, \"error\"];\n return he(\n h().getError(this.handle),\n (n) => new O(n, e)\n );\n }\n listInputFields() {\n return h().listInputFields(this.handle);\n }\n listOutputFields() {\n return h().listOutputFields(this.handle);\n }\n listDynamicFields() {\n return h().listDynamicFields(this.handle);\n }\n getKeyValueBase64(e) {\n return h().getKeyValueBase64(this.handle, e);\n }\n getKeyValueAsString(e) {\n return h().getKeyValueAsString(this.handle, e);\n }\n getKeyValueAsJson(e) {\n const n = this.getKeyValueAsString(e);\n if (n == null) throw new Error(\"Resource has no content.\");\n return JSON.parse(n);\n }\n getDataBase64() {\n return h().getDataBase64(this.handle);\n }\n getDataAsString() {\n return h().getDataAsString(this.handle);\n }\n getDataAsJson() {\n const e = this.getDataAsString();\n if (e == null) throw new Error(\"Resource has no content.\");\n return JSON.parse(e);\n }\n /**\n *\n */\n getPColumns(e = !1, n = \"\") {\n const r = this.parsePObjectCollection(e, n);\n return r === void 0 ? void 0 : Object.entries(r).map(([, s]) => {\n if (!be(s)) throw new Error(`not a PColumn (kind = ${s.spec.kind})`);\n return s;\n });\n }\n /**\n *\n */\n parsePObjectCollection(e = !1, n = \"\") {\n const r = h().parsePObjectCollection(\n this.handle,\n e,\n n,\n ...this.resolvePath\n );\n if (r === void 0) return;\n const i = {};\n for (const [s, o] of Object.entries(r)) {\n const a = [...this.resolvePath, s];\n i[s] = we(o, (l) => new O(l, a));\n }\n return i;\n }\n getFileContentAsBase64(e) {\n return new I(h().getBlobContentAsBase64(this.handle, e));\n }\n getFileContentAsString(e) {\n return new I(h().getBlobContentAsString(this.handle, e));\n }\n getFileContentAsJson(e) {\n return new I(\n h().getBlobContentAsString(this.handle, e)\n ).mapDefined((n) => JSON.parse(n));\n }\n /**\n * @deprecated use getFileContentAsBase64\n */\n getBlobContentAsBase64() {\n return this.getFileContentAsBase64();\n }\n /**\n * @deprecated use getFileContentAsString\n */\n getBlobContentAsString() {\n return this.getFileContentAsString();\n }\n /**\n * @returns downloaded file handle\n */\n getFileHandle() {\n return new I(h().getDownloadedBlobContentHandle(this.handle));\n }\n /**\n * @deprecated use getFileHandle\n */\n getDownloadedBlobHandle() {\n return this.getFileHandle();\n }\n /**\n * @returns downloaded file handle\n */\n getRemoteFileHandle() {\n return new I(h().getOnDemandBlobContentHandle(this.handle));\n }\n /**\n * @deprecated use getRemoteFileHandle\n */\n getOnDemandBlobHandle() {\n return this.getRemoteFileHandle();\n }\n /**\n * @returns the url to the extracted folder\n */\n extractArchiveAndGetURL(e) {\n return new I(h().extractArchiveAndGetURL(this.handle, e));\n }\n getImportProgress() {\n return new I(h().getImportProgress(this.handle));\n }\n getLastLogs(e) {\n return new I(h().getLastLogs(this.handle, e));\n }\n getProgressLog(e) {\n return new I(h().getProgressLog(this.handle, e));\n }\n getProgressLogWithInfo(e) {\n return new I(h().getProgressLogWithInfo(this.handle, e));\n }\n getLogHandle() {\n return new I(h().getLogHandle(this.handle));\n }\n allFieldsResolved(e = \"Input\") {\n switch (e) {\n case \"Input\":\n return this.getInputsLocked() && this.listInputFields().every(\n (n) => this.resolve({ field: n, assertFieldType: \"Input\" }) !== void 0\n );\n case \"Output\":\n return this.getOutputsLocked() && this.listOutputFields().every(\n (n) => this.resolve({ field: n, assertFieldType: \"Output\" }) !== void 0\n );\n }\n }\n mapFields(e, n) {\n const { fieldType: r, requireLocked: i, skipUnresolved: s } = {\n fieldType: \"Input\",\n requireLocked: !0,\n skipUnresolved: !1,\n ...n\n }, o = e;\n if (i && (r === \"Input\" && !this.getInputsLocked() || r === \"Output\" && !this.getOutputsLocked()))\n return;\n let l = (r === \"Input\" ? this.listInputFields() : r === \"Output\" ? this.listOutputFields() : this.listDynamicFields()).map(\n (u) => [u, this.resolve({ field: u, assertFieldType: r })]\n );\n return s && (l = l.filter((u) => u[1] !== void 0)), l.map(([u, d]) => o(u, d));\n }\n}\nconst Fe = \"staging\", Ke = \"main\", yt = {\n explicitColumnsSupport: !0,\n inlineColumnsSupport: !0,\n activeArgs: !0\n};\nfunction je(t) {\n return typeof t == \"object\" && t !== null && \"__awaited_futures__\" in t;\n}\nfunction ge(t, e, n) {\n if (e.has(n)) return;\n if (e.add(n), typeof n === \"object\")\n if (je(n)) n.__awaited_futures__.forEach((i) => t.add(i));\n else if (Array.isArray(n))\n for (const i of n) ge(t, e, i);\n else\n for (const [, i] of Object.entries(n))\n i !== n && ge(t, e, i);\n}\nfunction vt(t) {\n const e = /* @__PURE__ */ new Set();\n return ge(e, /* @__PURE__ */ new Set(), t), e;\n}\nconst On = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({\n __proto__: null,\n GlobalCfgRenderCtxFeatureFlags: yt,\n MainAccessorName: Ke,\n StagingAccessorName: Fe,\n getAllFutureAwaits: vt,\n isFutureAwait: je\n}, Symbol.toStringTag, { value: \"Module\" })), bt = \"pl7.app/label\", wt = \"pl7.app/trace\", At = U.object({\n type: U.string(),\n importance: U.number().optional(),\n id: U.string().optional(),\n label: U.string()\n}), xt = U.array(At), Ct = 1e-3, Pt = \"__LABEL__\", Se = \"__LABEL__@1\";\nfunction Ve(t, e, n = {}) {\n const r = /* @__PURE__ */ new Map(), i = n.forceTraceElements !== void 0 && n.forceTraceElements.length > 0 ? new Set(n.forceTraceElements) : void 0, s = /* @__PURE__ */ new Map(), o = t.map((f) => {\n var S, D;\n const w = e(f);\n let c, g, x;\n \"spec\" in w && typeof w.spec == \"object\" ? (c = w.spec, g = w.prefixTrace, x = w.suffixTrace) : c = w;\n const p = (S = c.annotations) == null ? void 0 : S[bt], A = (D = c.annotations) == null ? void 0 : D[wt], m = (A ? xt.safeParse(JSON.parse(A)).data : void 0) ?? [], v = [\n ...g ?? [],\n ...m,\n ...x ?? []\n ];\n if (p !== void 0) {\n const k = { label: p, type: Pt, importance: -2 };\n n.addLabelAsSuffix ? v.push(k) : v.splice(0, 0, k);\n }\n const C = [], L = /* @__PURE__ */ new Map();\n for (let k = v.length - 1; k >= 0; --k) {\n const { type: W } = v[k], V = v[k].importance ?? 0, N = (L.get(W) ?? 0) + 1;\n L.set(W, N);\n const j = `${W}@${N}`;\n s.set(j, (s.get(j) ?? 0) + 1), r.set(\n j,\n Math.max(\n r.get(j) ?? Number.NEGATIVE_INFINITY,\n V - (v.length - k) * Ct\n )\n ), C.push({ ...v[k], fullType: j, occurrenceIndex: N });\n }\n return C.reverse(), {\n value: f,\n spec: c,\n label: p,\n fullTrace: C\n };\n }), a = [], l = [], u = [...r];\n u.sort(([, f], [, w]) => w - f);\n for (const [f] of u)\n f.endsWith(\"@1\") || s.get(f) === t.length ? a.push(f) : l.push(f);\n const d = (f, w = !1) => {\n const c = [];\n for (let g = 0; g < o.length; g++) {\n const x = o[g], p = x.fullTrace.filter((v) => f.has(v.fullType) || i && i.has(v.type));\n if (p.length === 0)\n if (w)\n c.push({\n label: \"Unlabeled\",\n value: x.value\n });\n else return;\n const A = p.map((v) => v.label), m = n.separator ?? \" / \";\n c.push({\n label: A.join(m),\n value: x.value\n });\n }\n return c;\n };\n if (a.length === 0) {\n if (l.length !== 0) throw new Error(\"Non-empty secondary types list while main types list is empty.\");\n return d(new Set(Se), !0);\n }\n let y = 0, b = -1;\n for (; y < a.length; ) {\n const f = /* @__PURE__ */ new Set();\n n.includeNativeLabel && f.add(Se);\n for (let c = 0; c < y; ++c) f.add(a[c]);\n b >= 0 && f.add(a[b]);\n const w = d(f);\n if (w !== void 0 && new Set(w.map((c) => c.label)).size === t.length) return w;\n b++, b >= a.length && (y++, b = y);\n }\n return d(/* @__PURE__ */ new Set([...a, ...l]), !0);\n}\nconst Z = \"PColumnData/\", se = Z + \"ResourceMap\", oe = Z + \"Partitioned/ResourceMap\", q = Z + \"JsonPartitioned\", B = Z + \"BinaryPartitioned\", $e = Z + \"Partitioned/\", ae = $e + \"JsonPartitioned\", z = $e + \"BinaryPartitioned\";\nfunction Ne(t, e, n, r = [], i) {\n if (t === void 0) return !1;\n switch (t.resourceType.name) {\n case se: {\n let s = t.getInputsLocked();\n for (const o of t.listInputFields()) {\n const a = t.resolve({ field: o, assertFieldType: \"Input\" }), l = [...r, ...JSON.parse(o)], u = a === void 0 ? void 0 : e(a);\n u === void 0 && (s = !1), (u !== void 0 || i) && n.push({ key: l, value: u });\n }\n return s;\n }\n case oe: {\n let s = t.getInputsLocked();\n for (const o of t.listInputFields()) {\n const a = t.resolve({ field: o, assertFieldType: \"Input\" });\n if (a === void 0) s = !1;\n else {\n const l = [...r, ...JSON.parse(o)], u = Ne(\n a,\n e,\n n,\n l,\n i\n );\n s = s && u;\n }\n }\n return s;\n }\n default:\n throw new Error(`Unknown resource type: ${t.resourceType.name}`);\n }\n}\nfunction kn(t, e, n = !1) {\n const r = [];\n return { isComplete: Ne(t, e, r, [], n), data: r };\n}\nconst me = (t) => {\n if (t.endsWith(\".index\"))\n return { baseKey: t.substring(0, t.length - 6), type: \"index\" };\n if (t.endsWith(\".values\"))\n return { baseKey: t.substring(0, t.length - 7), type: \"values\" };\n throw new Error(`key must ends on .index/.values for binary p-column, got: ${t}`);\n};\nfunction St(t) {\n if (!t) return;\n const e = t.resourceType.name, n = t.getDataAsJson(), r = [];\n let i = 0;\n switch (e) {\n case se:\n i = n.keyLength;\n break;\n case oe:\n i = n.partitionKeyLength + n.keyLength;\n break;\n case q:\n case B:\n i = n.partitionKeyLength;\n break;\n case z:\n case ae:\n i = n.superPartitionKeyLength + n.partitionKeyLength;\n break;\n }\n switch (e) {\n case se:\n case q:\n case B:\n for (let s of t.listInputFields()) {\n e === B && (s = me(s).baseKey);\n const o = [...JSON.parse(s)];\n r.push(o);\n }\n break;\n case oe:\n case z:\n case ae:\n for (const s of t.listInputFields()) {\n const o = [...JSON.parse(s)], a = t.resolve({ field: s, assertFieldType: \"Input\" });\n if (a !== void 0)\n for (let l of a.listInputFields()) {\n e === z && (l = me(l).baseKey);\n const u = [...o, ...JSON.parse(l)];\n r.push(u);\n }\n }\n break;\n }\n return { data: r, keyLength: i };\n}\nfunction _t(t) {\n if (t.type !== \"JsonPartitioned\" && t.type !== \"BinaryPartitioned\")\n throw new Error(`Splitting requires Partitioned DataInfoEntries, got ${t.type}`);\n const { parts: e, partitionKeyLength: n } = t, r = [];\n for (let i = 0; i < n; ++i)\n r.push(/* @__PURE__ */ new Set());\n for (const i of e) {\n const s = i.key;\n if (s.length !== n)\n throw new Error(\n `Key length (${s.length}) does not match partition length (${n}) for key: ${JSON.stringify(\n s\n )}`\n );\n for (let o = 0; o < n; ++o)\n r[o].add(s[o]);\n }\n return r.map((i) => Array.from(i.values()));\n}\nfunction It(t) {\n if (t === void 0) return;\n if (Ee(t))\n return _t(t);\n const e = St(t);\n if (!e) return;\n const { data: n, keyLength: r } = e, i = [];\n for (let s = 0; s < r; ++s)\n i.push(/* @__PURE__ */ new Set());\n for (const s of n) {\n if (s.length !== r)\n throw new Error(\"key length does not match partition length\");\n for (let o = 0; o < r; ++o)\n i[o].add(s[o]);\n }\n return i.map((s) => Array.from(s.values()));\n}\nfunction ye(t, e = []) {\n if (t === void 0 || !t.getIsReadyOrError()) return;\n const n = t.resourceType.name, r = t.getDataAsJson();\n if (e.length > 0 && (n === ae || n === z))\n throw new Error(`Unexpected nested super-partitioned resource: ${n}`);\n switch (n) {\n case se:\n case oe:\n throw new Error(`Only data columns are supported, got: ${n}`);\n case q: {\n if (typeof (r == null ? void 0 : r.partitionKeyLength) != \"number\")\n throw new Error(`Missing partitionKeyLength in metadata for ${n}`);\n const i = [];\n for (const s of t.listInputFields()) {\n const o = t.resolve({ field: s, assertFieldType: \"Input\" });\n if (o === void 0) return;\n const a = [...e, ...JSON.parse(s)];\n i.push({ key: a, value: o });\n }\n return {\n type: \"JsonPartitioned\",\n partitionKeyLength: r.partitionKeyLength,\n parts: i\n };\n }\n case B: {\n if (typeof (r == null ? void 0 : r.partitionKeyLength) != \"number\")\n throw new Error(`Missing partitionKeyLength in metadata for ${n}`);\n const i = [], s = /* @__PURE__ */ new Map();\n for (const o of t.listInputFields()) {\n const a = me(o), l = t.resolve({ field: o, assertFieldType: \"Input\" });\n if (l === void 0) return;\n let u = s.get(a.baseKey);\n u || (u = {}, s.set(a.baseKey, u)), a.type === \"index\" ? u.index = l : u.values = l;\n }\n for (const [o, a] of s.entries()) {\n if (!a.index || !a.values) return;\n const l = [...e, ...JSON.parse(o)];\n i.push({\n key: l,\n value: {\n index: a.index,\n values: a.values\n }\n });\n }\n return {\n type: \"BinaryPartitioned\",\n partitionKeyLength: r.partitionKeyLength,\n parts: i\n };\n }\n case ae: {\n if (typeof (r == null ? void 0 : r.superPartitionKeyLength) != \"number\" || typeof (r == null ? void 0 : r.partitionKeyLength) != \"number\")\n throw new Error(`Missing superPartitionKeyLength or partitionKeyLength in metadata for ${n}`);\n const i = r.superPartitionKeyLength + r.partitionKeyLength, s = [];\n for (const o of t.listInputFields()) {\n const a = t.resolve({ field: o, assertFieldType: \"Input\" });\n if (a === void 0) return;\n if (a.resourceType.name !== q)\n throw new Error(`Expected ${q} inside ${n}, but got ${a.resourceType.name}`);\n const l = ye(a, JSON.parse(o));\n if (l === void 0) return;\n if (l.type !== \"JsonPartitioned\")\n throw new Error(`Unexpected inner result type for ${n}: ${l.type}`);\n s.push(...l.parts);\n }\n return {\n type: \"JsonPartitioned\",\n partitionKeyLength: i,\n parts: s\n };\n }\n case z: {\n if (typeof (r == null ? void 0 : r.superPartitionKeyLength) != \"number\" || typeof (r == null ? void 0 : r.partitionKeyLength) != \"number\")\n throw new Error(`Missing superPartitionKeyLength or partitionKeyLength in metadata for ${n}`);\n const i = r.superPartitionKeyLength + r.partitionKeyLength, s = [];\n for (const o of t.listInputFields()) {\n const a = t.resolve({ field: o, assertFieldType: \"Input\" });\n if (a === void 0) return;\n if (a.resourceType.name !== B)\n throw new Error(`Expected ${B} inside ${n}, but got ${a.resourceType.name}`);\n const l = ye(a, JSON.parse(o));\n if (l === void 0) return;\n if (l.type !== \"BinaryPartitioned\")\n throw new Error(`Unexpected inner result type for ${n}: ${l.type}`);\n s.push(...l.parts);\n }\n return {\n type: \"BinaryPartitioned\",\n partitionKeyLength: i,\n parts: s\n };\n }\n default:\n throw new Error(`Unknown resource type: ${n}`);\n }\n}\nfunction Tt(t) {\n if (t !== void 0) {\n if (Ee(t)) return t;\n if (Ae(t)) return Ze(t);\n if (t instanceof O) return ye(t);\n throw new Error(`Unexpected input type: ${typeof t}`);\n }\n}\nfunction Lt(t, e) {\n const n = [...e].sort((s, o) => o[0] - s[0]);\n if (t.type === \"JsonPartitioned\" || t.type === \"BinaryPartitioned\") {\n const { partitionKeyLength: s } = t;\n for (const [o] of e)\n if (o >= s)\n throw new Error(`Can't filter on non-partitioned axis ${o}. Must be >= ${s}`);\n } else if (t.type === \"Json\") {\n const { keyLength: s } = t;\n for (const [o] of e)\n if (o >= s)\n throw new Error(`Can't filter on non-data axis ${o}. Must be >= ${s}`);\n }\n const r = (s) => {\n for (const [o, a] of n)\n if (s[o] !== a)\n return !1;\n return !0;\n }, i = (s) => {\n const o = [...s];\n for (const [a] of n)\n o.splice(a, 1);\n return o;\n };\n switch (t.type) {\n case \"Json\": {\n const s = t.data.filter((o) => r(o.key)).map((o) => ({\n key: i(o.key),\n value: o.value\n }));\n return {\n type: \"Json\",\n keyLength: t.keyLength - e.length,\n data: s\n };\n }\n case \"JsonPartitioned\": {\n const s = t.parts.filter((o) => r(o.key)).map((o) => ({\n key: i(o.key),\n value: o.value\n }));\n return {\n type: \"JsonPartitioned\",\n partitionKeyLength: t.partitionKeyLength - e.length,\n parts: s\n };\n }\n case \"BinaryPartitioned\": {\n const s = t.parts.filter((o) => r(o.key)).map((o) => ({\n key: i(o.key),\n value: o.value\n }));\n return {\n type: \"BinaryPartitioned\",\n partitionKeyLength: t.partitionKeyLength - e.length,\n parts: s\n };\n }\n }\n}\nclass Et {\n constructor(e) {\n this.columns = e;\n }\n selectColumns(e) {\n const n = typeof e == \"function\" ? e : X(e);\n return this.columns.filter((r) => n(r.spec));\n }\n}\nfunction Ot(t) {\n if (t)\n return t.map((e) => ({\n type: `split:${rt(e.axisId)}`,\n label: e.label,\n importance: 1e6\n // High importance for split filters in labels\n }));\n}\nfunction kt(t) {\n if (t)\n return t.map((e) => [e.axisIdx, e.value]);\n}\nfunction Rt(t, e) {\n if (!e || e.length === 0) return t;\n const n = [...e].sort((r, i) => r[0] - i[0]);\n return ke({ id: t, axisFilters: n });\n}\nfunction _e(t) {\n if (!t || typeof t != \"object\") return !1;\n const e = t, n = e.domain && typeof e.domain == \"object\" && Object.values(e.domain).some((i) => typeof i == \"object\" && i !== null && \"anchor\" in i), r = e.axes && Array.isArray(e.axes) && e.axes.some((i) => typeof i == \"object\" && i !== null && \"anchor\" in i);\n return !!e.domainAnchor || n || r;\n}\nfunction Dt(t) {\n if (typeof t != \"object\" || !(\"axes\" in t) || t.axes === void 0)\n return [];\n const e = t.axes.map((n, r) => typeof n == \"object\" && \"split\" in n && n.split === !0 ? r : -1).filter((n) => n !== -1);\n if (e.length > 0 && t.partialAxesMatch !== void 0)\n throw new Error(\"Axis splitting is not supported when `partialAxesMatch` is defined.\");\n return e.sort((n, r) => n - r), e;\n}\nclass ve {\n constructor() {\n R(this, \"defaultProviderStore\", []);\n R(this, \"providers\", [new Et(this.defaultProviderStore)]);\n R(this, \"axisLabelProviders\", []);\n }\n addColumnProvider(e) {\n return this.providers.push(e), this;\n }\n addAxisLabelProvider(e) {\n return this.axisLabelProviders.push(e), this;\n }\n addColumns(e) {\n return this.defaultProviderStore.push(...e), this;\n }\n addColumn(e) {\n return this.defaultProviderStore.push(e), this;\n }\n /** Fetches labels for a given axis from the registered providers */\n findLabels(e) {\n for (const n of this.axisLabelProviders) {\n const r = n.findLabels(e);\n if (r) return r;\n }\n }\n getUniversalEntries(e, n) {\n const { anchorCtx: r, labelOps: i, dontWaitAllData: s = !1, overrideLabelAnnotation: o = !1, exclude: a } = n ?? {}, l = {\n ...o && (i == null ? void 0 : i.includeNativeLabel) !== !1 ? { includeNativeLabel: !0 } : {},\n ...i ?? {}\n };\n let u = () => !1;\n if (a) {\n const c = (Array.isArray(a) ? a : [a]).map((g) => {\n if (_e(g)) {\n if (!r)\n throw new Error(\"Anchored selectors in exclude require an AnchoredIdDeriver to be provided in options.\");\n return X(xe(r.anchors, g, n));\n } else\n return X(g);\n });\n u = (g) => c.some((x) => x(g));\n }\n const d = typeof e == \"function\" ? [e] : Array.isArray(e) ? e : [e], y = [], b = /* @__PURE__ */ new Set();\n for (const c of d) {\n const g = _e(c);\n let x;\n if (g) {\n if (!r)\n throw new Error(\"Anchored selectors require an AnchoredIdDeriver to be provided in options.\");\n x = xe(r.anchors, c, n);\n } else\n x = c;\n const p = /* @__PURE__ */ new Set(), A = [];\n for (const C of this.providers) {\n const L = C.selectColumns(x);\n for (const S of L) {\n if (u(S.spec)) continue;\n if (p.has(S.id))\n throw new Error(`Duplicate column id ${S.id} in provider ${C.constructor.name}`);\n const D = et(S.spec);\n b.has(D) || (p.add(S.id), b.add(D), A.push(S));\n }\n }\n if (A.length === 0) continue;\n const m = Dt(c), v = m.length > 0;\n for (const C of A) {\n if (!ne(C.spec)) continue;\n const L = C.spec;\n if (v) {\n const S = Tt(C.data);\n if (!S) {\n if (s) continue;\n return;\n }\n if (!tt(S))\n throw new Error(`Splitting requires Partitioned DataInfoEntries, but parsing resulted in ${S.type} for column ${C.id}`);\n const D = It(S), k = m[m.length - 1];\n if (k >= S.partitionKeyLength)\n throw new Error(`Not enough partition keys (${S.partitionKeyLength}) for requested split axes (max index ${k}) in column ${L.name}`);\n const W = m.map((_) => this.findLabels(T(L.axesSpec[_]))), V = [], N = (_, G) => {\n if (G >= m.length) {\n if (V.push([..._]), V.length > 1e4)\n throw new Error(\"Too many key combinations, aborting.\");\n return;\n }\n const $ = m[G];\n if ($ >= D.length)\n throw new Error(`Axis index ${$} out of bounds for unique keys array (length ${D.length}) during split key generation for column ${C.id}`);\n const J = D[$];\n if (!J || J.length === 0) {\n V.length = 0;\n return;\n }\n for (const ee of J)\n _.push(ee), N(_, G + 1), _.pop();\n };\n if (N([], 0), V.length === 0)\n continue;\n const j = [...L.axesSpec], He = m.map((_) => _);\n for (let _ = m.length - 1; _ >= 0; _--)\n j.splice(m[_], 1);\n const qe = { ...L, axesSpec: j };\n for (const _ of V) {\n const G = _.map(($, J) => {\n const ee = He[J], ze = T(L.axesSpec[ee]), le = W[J], Ye = (le == null ? void 0 : le[$]) ?? String($);\n return { axisIdx: ee, axisId: ze, value: $, label: Ye };\n });\n y.push({\n type: \"split\",\n originalColumn: C,\n spec: L,\n adjustedSpec: qe,\n dataEntries: S,\n axisFilters: G\n });\n }\n } else\n y.push({\n type: \"direct\",\n originalColumn: C,\n spec: L,\n adjustedSpec: L\n });\n }\n }\n if (y.length === 0) return [];\n const f = Ve(\n y,\n (c) => ({\n spec: c.spec,\n suffixTrace: c.type === \"split\" ? Ot(c.axisFilters) : void 0\n }),\n l\n ), w = [];\n for (const { value: c, label: g } of f) {\n const { originalColumn: x, spec: p } = c, A = c.type === \"split\" ? c.axisFilters : void 0, m = kt(A);\n let v;\n r ? v = r.deriveS(p, m) : v = Rt(x.id, m);\n let C = { ...c.adjustedSpec };\n o && (C = {\n ...C,\n annotations: {\n ...C.annotations ?? {},\n \"pl7.app/label\": g\n }\n }), w.push({\n id: v,\n spec: C,\n data: () => c.type === \"split\" ? nt(Lt(c.dataEntries, m)) : c.originalColumn.data,\n label: g\n });\n }\n return w;\n }\n getColumns(e, n) {\n const r = this.getUniversalEntries(e, {\n overrideLabelAnnotation: !0,\n // default for getColumns\n ...n ?? {}\n });\n if (!r) return;\n const i = [];\n for (const s of r) {\n const o = s.data();\n if (!o) {\n if (n != null && n.dontWaitAllData) continue;\n return;\n }\n i.push({\n id: s.id,\n spec: s.spec,\n data: o\n });\n }\n return i;\n }\n}\nfunction pe(t, e) {\n if (t === void 0) return e === void 0;\n if (e === void 0) return !0;\n for (const n in e)\n if (t[n] !== e[n]) return !1;\n return !0;\n}\nfunction Ie(t) {\n return we(t, (e) => e instanceof O ? e.handle : Ae(e) ? ut(e, (n) => n.handle) : e);\n}\nclass Ft {\n constructor() {\n R(this, \"ctx\", h());\n }\n /**\n * @deprecated use getOptions()\n */\n calculateOptions(e) {\n return this.ctx.calculateOptions(e);\n }\n getOptions(e, n) {\n const r = typeof e == \"function\" ? e : X(e), i = this.getSpecs().entries.filter((a) => r(a.obj));\n let s = {}, o = !1;\n return typeof n < \"u\" && (typeof n == \"function\" ? s = n : typeof n == \"object\" && (\"includeNativeLabel\" in n || \"separator\" in n || \"addLabelAsSuffix\" in n ? s = n : (n = n, s = n.label ?? {}, o = n.refsWithEnrichments ?? !1))), typeof s == \"object\" ? Ve(i, (a) => a.obj, s ?? {}).map(({ value: { ref: a }, label: l }) => ({\n ref: Ce(a, o),\n label: l\n })) : i.map(({ ref: a, obj: l }) => ({\n ref: Ce(a, o),\n label: s(l, a)\n }));\n }\n resolveAnchorCtx(e) {\n if (e instanceof Pe) return e;\n const n = {};\n for (const [r, i] of Object.entries(e))\n if (it(i)) {\n const s = this.getPColumnSpecByRef(i);\n if (!s)\n return;\n n[r] = s;\n } else\n n[r] = i;\n return new Pe(n);\n }\n /**\n * Returns columns that match the provided anchors and selectors. It applies axis filters and label derivation.\n *\n * @param anchorsOrCtx - Anchor context for column selection (same as in getCanonicalOptions)\n * @param predicateOrSelectors - Predicate or selectors for filtering columns (same as in getCanonicalOptions)\n * @param opts - Optional configuration for label generation and data waiting\n * @returns A PFrameHandle for the created PFrame, or undefined if any required data is missing\n */\n getAnchoredPColumns(e, n, r) {\n const i = this.resolveAnchorCtx(e);\n if (i)\n return new ve().addColumnProvider(this).addAxisLabelProvider(this).getColumns(n, {\n ...r,\n anchorCtx: i\n });\n }\n /**\n * Calculates anchored identifier options for columns matching a given predicate and returns their\n * canonicalized representations.\n *\n * This function filters column specifications from the result pool that match the provided predicate,\n * creates a standardized AnchorCtx from the provided anchors, and generates a list of label-value\n * pairs for UI components (like dropdowns).\n *\n * @param anchorsOrCtx - Either:\n * - An existing AnchorCtx instance\n * - A record mapping anchor IDs to PColumnSpec objects\n * - A record mapping anchor IDs to PlRef objects (which will be resolved to PColumnSpec)\n * @param predicateOrSelectors - Either:\n * - A predicate function that takes a PColumnSpec and returns a boolean.\n * Only specs that return true will be included.\n * - An APColumnSelector object for declarative filtering, which will be\n * resolved against the provided anchors and matched using matchPColumn.\n * - An array of APColumnSelector objects - columns matching ANY selector\n * in the array will be included (OR operation).\n * @param opts - Optional configuration for label generation:\n * - labelOps: Optional configuration for label generation:\n * - includeNativeLabel: Whether to include native column labels\n * - separator: String to use between label parts (defaults to \" / \")\n * - addLabelAsSuffix: Whether to add labels as suffix instead of prefix\n * - dontWaitAllData: Whether to skip columns that don't have all data (if not set, will return undefined,\n * if at least one column that requires splitting is missing data)\n * @returns An array of objects with `label` (display text) and `value` (anchored ID string) properties,\n * or undefined if any PlRef resolution fails.\n */\n getCanonicalOptions(e, n, r) {\n const i = this.resolveAnchorCtx(e);\n if (!i) return;\n const s = new ve().addColumnProvider(this).addAxisLabelProvider(this).getUniversalEntries(n, {\n ...r,\n anchorCtx: i\n });\n if (s)\n return s.map((o) => ({\n value: o.id,\n label: o.label\n }));\n }\n /**\n * @deprecated use getData()\n */\n getDataFromResultPool() {\n return this.getData();\n }\n getData() {\n const e = this.ctx.getDataFromResultPool();\n return {\n isComplete: e.isComplete,\n entries: e.entries.map((n) => ({\n ref: n.ref,\n obj: {\n ...n.obj,\n data: new O(n.obj.data, [n.ref.blockId, n.ref.name])\n }\n }))\n };\n }\n /**\n * @deprecated use getDataWithErrors()\n */\n getDataWithErrorsFromResultPool() {\n return this.getDataWithErrors();\n }\n getDataWithErrors() {\n const e = this.ctx.getDataWithErrorsFromResultPool();\n return {\n isComplete: e.isComplete,\n entries: e.entries.map((n) => ({\n ref: n.ref,\n obj: {\n ...n.obj,\n data: st(\n n.obj.data,\n (r) => new O(r, [n.ref.blockId, n.ref.name])\n )\n }\n }))\n };\n }\n /**\n * @deprecated use getSpecs()\n */\n getSpecsFromResultPool() {\n return this.getSpecs();\n }\n getSpecs() {\n return this.ctx.getSpecsFromResultPool();\n }\n /**\n * @param ref a Ref\n * @returns data associated with the ref\n */\n getDataByRef(e) {\n var r;\n if (typeof this.ctx.getDataFromResultPoolByRef > \"u\")\n return (r = this.getData().entries.find(\n (i) => i.ref.blockId === e.blockId && i.ref.name === e.name\n )) == null ? void 0 : r.obj;\n const n = this.ctx.getDataFromResultPoolByRef(e.blockId, e.name);\n if (n)\n return we(\n n,\n (i) => new O(i, [e.blockId, e.name])\n );\n }\n /**\n * Returns data associated with the ref ensuring that it is a p-column.\n * @param ref a Ref\n * @returns p-column associated with the ref\n */\n getPColumnByRef(e) {\n const n = this.getDataByRef(e);\n if (n)\n return ot(n);\n }\n /**\n * Returns spec associated with the ref ensuring that it is a p-column spec.\n * @param ref a Ref\n * @returns p-column spec associated with the ref\n */\n getPColumnSpecByRef(e) {\n const n = this.getSpecByRef(e);\n if (n) {\n if (!ne(n)) throw new Error(`not a PColumn spec (kind = ${n.kind})`);\n return n;\n }\n }\n /**\n * @param ref a Ref\n * @returns object spec associated with the ref\n */\n getSpecByRef(e) {\n return this.ctx.getSpecFromResultPoolByRef(e.blockId, e.name);\n }\n /**\n * @param spec object specification\n * @returns array of data objects with compatible specs\n * @deprecated delete this method after Jan 1, 2025\n */\n findDataWithCompatibleSpec(e) {\n const n = [];\n e: for (const r of this.getData().entries) {\n if (!ne(r.obj.spec))\n continue;\n const i = r.obj.spec;\n if (e.name === i.name && e.valueType === i.valueType && e.axesSpec.length === i.axesSpec.length && pe(e.domain, i.domain)) {\n for (let s = 0; s < e.axesSpec.length; ++s) {\n const o = e.axesSpec[s], a = i.axesSpec[s];\n if (o.name !== a.name || o.type !== a.type || !pe(o.domain, a.domain))\n continue e;\n }\n n.push(r.obj);\n }\n }\n return n;\n }\n /**\n * Find labels data for a given axis id. It will search for a label column and return its data as a map.\n * @returns a map of axis value => label\n */\n findLabels(e) {\n const n = this.getData();\n for (const r of n.entries) {\n if (!be(r.obj)) continue;\n const i = r.obj.spec;\n if (i.name === \"pl7.app/label\" && i.axesSpec.length === 1 && i.axesSpec[0].name === e.name && i.axesSpec[0].type === e.type && pe(e.domain, i.axesSpec[0].domain)) {\n if (r.obj.data.resourceType.name !== \"PColumnData/Json\")\n throw Error(`Expected JSON column for labels, got: ${r.obj.data.resourceType.name}`);\n return Object.fromEntries(\n Object.entries(\n r.obj.data.getDataAsJson().data\n ).map((o) => [JSON.parse(o[0])[0], o[1]])\n );\n }\n }\n }\n /**\n * Selects columns based on the provided selectors, returning PColumn objects\n * with lazily loaded data.\n *\n * @param selectors - A predicate function, a single selector, or an array of selectors.\n * @returns An array of PColumn objects matching the selectors. Data is loaded on first access.\n */\n selectColumns(e) {\n const n = typeof e == \"function\" ? e : X(e);\n return this.getSpecs().entries.filter(({ obj: i }) => ne(i) ? n(i) : !1).map(({ ref: i, obj: s }) => {\n const o = s;\n let a = null;\n const l = this;\n return {\n id: ke(i),\n spec: o,\n get data() {\n var u;\n return a !== null || (a = (u = l.getPColumnByRef(i)) == null ? void 0 : u.data), a;\n }\n };\n });\n }\n /**\n * Find labels data for a given axis id of a p-column.\n * @returns a map of axis value => label\n */\n findLabelsForColumnAxis(e, n) {\n var s;\n const r = this.findLabels(e.axesSpec[n]);\n if (!r) return;\n const i = (s = e.annotations) == null ? void 0 : s[\"pl7.app/axisKeys/\" + n];\n if (i !== void 0) {\n const o = JSON.parse(i);\n return Object.fromEntries(o.map((a) => [a, r[a] ?? \"Unlabelled\"]));\n } else\n return r;\n }\n}\nclass te {\n constructor() {\n R(this, \"ctx\");\n R(this, \"args\");\n R(this, \"uiState\");\n // lazy rendering because this feature is rarely used\n R(this, \"_activeArgsCache\");\n R(this, \"resultPool\", new Ft());\n this.ctx = h(), this.args = JSON.parse(this.ctx.args), this.uiState = this.ctx.uiState !== void 0 ? JSON.parse(this.ctx.uiState) : {};\n }\n /**\n * Returns args snapshot the block was executed for (i.e. when \"Run\" button was pressed).\n * Returns undefined, if block was never executed or stopped mid-way execution, so that the result was cleared.\n * */\n get activeArgs() {\n return this._activeArgsCache === void 0 && (this._activeArgsCache = {\n v: this.ctx.activeArgs ? JSON.parse(this.ctx.activeArgs) : void 0\n }), this._activeArgsCache.v;\n }\n // /** Can be used to determine features provided by the desktop instance. */\n // public get featureFlags() {\n // return this.ctx.featureFlags;\n // }\n getNamedAccessor(e) {\n return he(\n this.ctx.getAccessorHandleByName(e),\n (n) => new O(n, [e])\n );\n }\n get prerun() {\n return this.getNamedAccessor(Fe);\n }\n get outputs() {\n return this.getNamedAccessor(Ke);\n }\n /**\n * Find labels data for a given axis id. It will search for a label column and return its data as a map.\n * @returns a map of axis value => label\n * @deprecated Use resultPool.findLabels instead\n */\n findLabels(e) {\n return this.resultPool.findLabels(e);\n }\n verifyInlineAndExplicitColumnsSupport(e) {\n var i;\n const n = e.some((s) => !(s.data instanceof O) || Ae(s.data)), r = ((i = this.ctx.featureFlags) == null ? void 0 : i.inlineColumnsSupport) === !0;\n if (n && !r) throw Error(\"Inline or explicit columns not supported\");\n }\n // TODO remove all non-PColumn fields\n createPFrame(e) {\n return this.verifyInlineAndExplicitColumnsSupport(e), this.ctx.createPFrame(\n e.map((n) => Ie(n))\n );\n }\n createPTable(e) {\n let n;\n return \"columns\" in e ? n = {\n src: {\n type: \"full\",\n entries: e.columns.map((r) => ({ type: \"column\", column: r }))\n },\n filters: e.filters ?? [],\n sorting: e.sorting ?? []\n } : n = e, this.verifyInlineAndExplicitColumnsSupport(at(n.src)), this.ctx.createPTable(\n lt(n, (r) => Ie(r))\n );\n }\n /** @deprecated scheduled for removal from SDK */\n getBlockLabel(e) {\n return this.ctx.getBlockLabel(e);\n }\n getCurrentUnstableMarker() {\n return this.ctx.getCurrentUnstableMarker();\n }\n logInfo(e) {\n this.ctx.logInfo(e);\n }\n logWarn(e) {\n this.ctx.logWarn(e);\n }\n logError(e) {\n this.ctx.logError(e);\n }\n}\nconst Y = \"1.32.1\";\nfunction Kt(t) {\n return t.__renderLambda === !0;\n}\nfunction de(t) {\n if (t !== void 0)\n return Kt(t) ? t.handle : t;\n}\nfunction M(t) {\n if (t !== void 0)\n return typeof t == \"string\" ? { __renderLambda: !0, handle: t, retentive: !1 } : t;\n}\nfunction Rn(t) {\n if (t.v3 !== void 0) {\n const {\n initialArgs: e,\n initialUiState: n,\n inputsValid: r,\n outputs: i,\n renderingMode: s,\n sdkVersion: o,\n sections: a,\n title: l,\n enrichmentTargets: u\n } = t.v3, { code: d } = t;\n return {\n initialArgs: e,\n initialUiState: n,\n inputsValid: r,\n outputs: i,\n renderingMode: s,\n sdkVersion: o,\n sections: a,\n title: l,\n code: d,\n enrichmentTargets: u\n };\n } else if (t.inputsValid !== void 0) {\n const { sdkVersion: e, renderingMode: n, outputs: r, inputsValid: i, sections: s, initialArgs: o, code: a } = t, l = Object.keys(t);\n if (e === void 0 || n === void 0 || r === void 0 || i === void 0 || s === void 0 || o === void 0)\n throw new Error(\n `Malformed config v2. SDK version ${e}; Fields = ${l.join(\", \")}`\n );\n return {\n sdkVersion: e,\n renderingMode: n,\n initialArgs: o,\n outputs: Object.fromEntries(\n Object.entries(r).map(([u, d]) => [u, M(d)])\n ),\n inputsValid: M(i),\n sections: M(s),\n initialUiState: void 0,\n code: a\n };\n } else if (t.renderingMode !== void 0) {\n const { sdkVersion: e, canRun: n, renderingMode: r, outputs: i, sections: s, initialArgs: o, code: a } = t, l = Object.keys(t);\n if (r === void 0 || i === void 0 || n === void 0 || s === void 0 || o === void 0)\n throw new Error(\n `Malformed config v1. SDK version ${e}; Fields = ${l.join(\", \")}`\n );\n return {\n sdkVersion: e ?? \"unknown\",\n renderingMode: r,\n initialArgs: o,\n outputs: Object.fromEntries(\n Object.entries(i).map(([u, d]) => [u, M(d)])\n ),\n inputsValid: M(n),\n sections: M(s),\n initialUiState: void 0,\n code: a\n };\n } else {\n const { sdkVersion: e } = t, n = Object.keys(t);\n throw new Error(\n `Config format not supported: SDK = ${e}; Fields = ${n.join(\", \")}`\n );\n }\n}\nclass E {\n constructor(e, n, r, i, s, o, a, l) {\n this._renderingMode = e, this._initialArgs = n, this._initialUiState = r, this._outputs = i, this._inputsValid = s, this._sections = o, this._title = a, this._enrichmentTargets = l;\n }\n static create(e = \"Heavy\") {\n return new E(\n e,\n void 0,\n {},\n {},\n re(!0),\n re([]),\n void 0,\n void 0\n );\n }\n output(e, n, r = {}) {\n if (typeof n == \"function\") {\n const i = `output#${e}`;\n return H(i, () => n(new te())), new E(\n this._renderingMode,\n this._initialArgs,\n this._initialUiState,\n {\n ...this._outputs,\n [e]: {\n __renderLambda: !0,\n handle: i,\n ...r\n }\n },\n this._inputsValid,\n this._sections,\n this._title,\n this._enrichmentTargets\n );\n } else\n return new E(\n this._renderingMode,\n this._initialArgs,\n this._initialUiState,\n {\n ...this._outputs,\n [e]: n\n },\n this._inputsValid,\n this._sections,\n this._title,\n this._enrichmentTargets\n );\n }\n /** Shortcut for {@link output} with retentive flag set to true. */\n retentiveOutput(e, n) {\n return this.output(e, n, { retentive: !0 });\n }\n argsValid(e) {\n return typeof e == \"function\" ? (H(\"inputsValid\", () => e(new te())), new E(\n this._renderingMode,\n this._initialArgs,\n this._initialUiState,\n this._outputs,\n {\n __renderLambda: !0,\n handle: \"inputsValid\"\n },\n this._sections,\n this._title,\n this._enrichmentTargets\n )) : new E(\n this._renderingMode,\n this._initialArgs,\n this._initialUiState,\n this._outputs,\n e,\n this._sections,\n this._title,\n this._enrichmentTargets\n );\n }\n sections(e) {\n return Array.isArray(e) ? this.sections(re(e)) : typeof e == \"function\" ? (H(\"sections\", () => e(new te())), new E(\n this._renderingMode,\n this._initialArgs,\n this._initialUiState,\n this._outputs,\n this._inputsValid,\n { __renderLambda: !0, handle: \"sections\" },\n this._title,\n this._enrichmentTargets\n )) : new E(\n this._renderingMode,\n this._initialArgs,\n this._initialUiState,\n this._outputs,\n this._inputsValid,\n e,\n this._title,\n this._enrichmentTargets\n );\n }\n /** Sets a rendering function to derive block title, shown for the block in the left blocks-overview panel. */\n title(e) {\n return H(\"title\", () => e(new te())), new E(\n this._renderingMode,\n this._initialArgs,\n this._initialUiState,\n this._outputs,\n this._inputsValid,\n this._sections,\n { __renderLambda: !0, handle: \"title\" },\n this._enrichmentTargets\n );\n }\n /**\n * Sets initial args for the block, this value must be specified.\n * @deprecated use {@link withArgs}\n * */\n initialArgs(e) {\n return new E(\n this._renderingMode,\n e,\n this._initialUiState,\n this._outputs,\n this._inputsValid,\n this._sections,\n this._title,\n this._enrichmentTargets\n );\n }\n /** Sets initial args for the block, this value must be specified. */\n withArgs(e) {\n return new E(\n this._renderingMode,\n e,\n this._initialUiState,\n this._outputs,\n this._inputsValid,\n this._sections,\n this._title,\n this._enrichmentTargets\n );\n }\n /** Defines type and sets initial value for block UiState. */\n withUiState(e) {\n return new E(\n this._renderingMode,\n this._initialArgs,\n e,\n this._outputs,\n this._inputsValid,\n this._sections,\n this._title,\n this._enrichmentTargets\n );\n }\n /**\n * Defines how to derive list of upstream references this block is meant to enrich with its exports from block args.\n * Influences dependency graph construction.\n */\n enriches(e) {\n return H(\"enrichmentTargets\", e), new E(\n this._renderingMode,\n this._initialArgs,\n this._initialUiState,\n this._outputs,\n this._inputsValid,\n this._sections,\n this._title,\n { __renderLambda: !0, handle: \"enrichmentTargets\" }\n );\n }\n /** Renders all provided block settings into a pre-configured platforma API\n * instance, that can be used in frontend to interact with block state, and\n * other features provided by the platforma to the block. */\n done() {\n if (this._initialArgs === void 0) throw new Error(\"Initial arguments not set.\");\n const e = {\n v3: {\n sdkVersion: Y,\n renderingMode: this._renderingMode,\n initialArgs: this._initialArgs,\n initialUiState: this._initialUiState,\n inputsValid: this._inputsValid,\n sections: this._sections,\n title: this._title,\n outputs: this._outputs,\n enrichmentTargets: this._enrichmentTargets\n },\n // fields below are added to allow previous desktop versions read generated configs\n sdkVersion: Y,\n renderingMode: this._renderingMode,\n initialArgs: this._initialArgs,\n inputsValid: de(this._inputsValid),\n sections: de(this._sections),\n outputs: Object.fromEntries(\n Object.entries(this._outputs).map(([n, r]) => [n, de(r)])\n )\n };\n return ht() ? De({ sdkVersion: Y }) : { config: e };\n }\n}\nconst jt = (t, e) => {\n let n = t.toString();\n return e == null || e.forEach((r) => {\n if (r)\n for (const [i, s] of Object.entries(r))\n n += i, n += s;\n }), n;\n};\nfunction Vt(t) {\n if (!t.length)\n return [];\n let e = [[]];\n return t.forEach((n) => {\n const r = [];\n n.forEach((i) => {\n r.push(...e.map((s) => [...s, i]));\n }), e = r;\n }), e;\n}\nfunction $t(t) {\n var e;\n return t.axesSpec.length === 2 && ((e = t.annotations) == null ? void 0 : e[Ut]) === \"true\";\n}\nfunction Nt(t) {\n var n, r;\n const e = /* @__PURE__ */ new Map();\n for (const { id: i, spec: s } of t) {\n const [o, a] = s.axesSpec.map(T).map(F);\n e.has(o) || e.set(o, /* @__PURE__ */ new Map()), e.has(a) || e.set(a, /* @__PURE__ */ new Map()), (n = e.get(o)) == null || n.set(a, { columnId: i, spec: s }), (r = e.get(a)) == null || r.set(o, { columnId: i, spec: s });\n }\n return e;\n}\nfunction Je(t, e, n) {\n var l;\n const i = [...t.keys()].map(fe).find((u) => K(e, u));\n if (!i) return !1;\n const s = F(T(i)), o = /* @__PURE__ */ new Set([s]);\n let a = [s];\n for (; a.length; ) {\n const u = [];\n for (const d of a)\n for (const y of ((l = t.get(d)) == null ? void 0 : l.keys()) ?? []) {\n const b = fe(y);\n if (K(n, b)) return !0;\n o.has(y) || (u.push(y), o.add(y));\n }\n a = u;\n }\n return !1;\n}\nfunction Jt(t, e, n) {\n const r = t.axesSpec.map(T), i = e.axesSpec.map(T);\n return i.some((s) => r.some((o) => K(o, s) && K(s, o))) || !!n && i.some((s) => r.some((o) => Je(n, o, s)));\n}\nfunction Me(t, e, n) {\n const r = t.axesSpec.map(T), i = e.axesSpec.map(T);\n return i.some((s) => r.some((o) => K(o, s))) || !!n && i.some((s) => r.some((o) => Je(n, o, s)));\n}\nconst Mt = \"pl7.app/graph/isVirtual\", Te = \"pl7.app/label\", Ut = \"pl7.app/isLinkerColumn\";\nfunction Le(t, e, n) {\n const r = t.spec.axesSpec.map(T), i = e.spec.axesSpec.map(T);\n if (Jt(t.spec, e.spec, n))\n return [];\n if (!Me(t.spec, e.spec, n))\n return [];\n const a = i.map((b) => r.filter((f) => K(f, b))), l = Vt(a), u = /* @__PURE__ */ new Set(), d = /* @__PURE__ */ new Set(), y = l.map((b) => {\n const f = /* @__PURE__ */ new Set();\n return b.map((w, c) => {\n const g = e.spec.axesSpec[c].domain, x = w.domain;\n return Object.entries(x ?? {}).forEach(([p, A]) => {\n if ((g == null ? void 0 : g[p]) === void 0) {\n const m = JSON.stringify([p, A]);\n f.add(m), u.add(m);\n }\n }), {\n ...w,\n annotations: e.spec.axesSpec[c].annotations\n };\n }), f;\n });\n return [...u].forEach((b) => {\n y.some((f) => !f.has(b)) && d.add(b);\n }), l.map((b, f) => {\n var p;\n const w = jt(e.id, b.map((A) => A.domain)), c = ((p = e.spec.annotations) == null ? void 0 : p[Te]) ?? \"\", g = [...y[f]].filter((A) => d.has(A)).sort().map((A) => {\n var m;\n return (m = JSON.parse(A)) == null ? void 0 : m[1];\n }).join(\" / \"), x = {\n ...e.spec.annotations,\n [Mt]: \"true\"\n };\n return (c || g) && (x[Te] = c && g ? c + \" / \" + g : c + g), {\n id: w,\n spec: {\n ...e.spec,\n axesSpec: b.map((A, m) => ({\n ...A,\n annotations: e.spec.axesSpec[m].annotations\n })),\n annotations: x\n },\n data: e.data\n };\n });\n}\nfunction Bt(t, e = /* @__PURE__ */ new Map()) {\n const n = [];\n for (let r = 0; r < t.length; r++)\n for (let i = r + 1; i < t.length; i++) {\n const s = t[r], o = t[i];\n n.push(\n ...Le(s, o, e),\n ...Le(o, s, e)\n );\n }\n return n;\n}\nfunction Wt(t, e, n = [], r = /* @__PURE__ */ new Map()) {\n const i = /* @__PURE__ */ new Set(), s = /* @__PURE__ */ new Map();\n t.forEach((a) => {\n i.add(a.id), s.set(F(ue(a.spec)), a);\n });\n const o = /* @__PURE__ */ new Map();\n for (const a of e) {\n if (i.has(a.id)) continue;\n const l = F(ue(a.spec));\n if (!s.has(l)) {\n for (const u of s.values())\n if (Me(u.spec, a.spec, r)) {\n o.set(l, a);\n break;\n }\n }\n }\n for (const a of n) {\n if (i.has(a.id)) continue;\n const l = F(ue(a.spec));\n s.has(l) || o.has(l) || (i.add(a.id), s.set(l, a));\n }\n return [...s.values(), ...o.values()];\n}\nfunction Dn(t, e) {\n if (!e) return;\n const n = t.resultPool.getData().entries.map((l) => l.obj).filter(be), i = [...e, ...n].filter((l) => $t(l.spec)), s = Nt(i), o = Wt(e, n, i, s), a = [...o, ...Bt(o, s)];\n if (!a.some(\n (l) => l.data instanceof O && !l.data.getIsReadyOrError()\n ))\n return t.createPFrame(a);\n}\nfunction Fn(t) {\n const e = t.type;\n switch (e) {\n case \"axis\":\n return F(t);\n case \"column\":\n return F(t);\n default:\n throw Error(`unsupported column type: ${e}`);\n }\n}\nfunction Gt(t) {\n return t.axesSpec.length === 1 && t.name === \"pl7.app/label\";\n}\nfunction Ue(t) {\n return new ve().addAxisLabelProvider(t).addColumnProvider(t).getColumns({\n name: \"pl7.app/label\",\n axes: [{}]\n // exactly one axis\n }, { dontWaitAllData: !0 });\n}\nfunction Be(t, e) {\n const n = [], r = [];\n for (const a of t)\n Gt(a.spec) ? n.push(a) : r.push(a);\n const i = [];\n for (const a of r)\n for (const l of a.spec.axesSpec) {\n const u = T(l);\n i.some((d) => K(d, u)) || i.push(u);\n }\n for (const a of n) {\n const l = T(a.spec.axesSpec[0]), u = i.findIndex((d) => K(d, l));\n u !== -1 && i.splice(u, 1);\n }\n const s = (a, l) => {\n let u = a.toString();\n if (l)\n for (const d in l)\n u += d, u += l[d];\n return u;\n }, o = [];\n for (const a of e) {\n const l = a.spec.axesSpec[0], u = T(l), d = i.findIndex((y) => K(y, u));\n if (d !== -1) {\n const y = i[d], b = Object.keys(y.domain ?? {}).length, f = Object.keys(l.domain ?? {}).length;\n b > f ? o.push({\n id: s(a.id, y.domain),\n spec: {\n ...a.spec,\n axesSpec: [{ ...y, annotations: l.annotations }]\n },\n data: a.data\n }) : o.push(a), i.splice(d, 1);\n }\n }\n return o;\n}\nfunction We(t) {\n const e = (i) => Array.isArray(i), n = (i) => i instanceof O, r = (i) => typeof i == \"object\" && \"type\" in i;\n return t.map((i) => i.data).every((i) => {\n if (e(i))\n return !0;\n if (n(i))\n return i.getIsReadyOrError();\n if (r(i))\n switch (i.type) {\n case \"Json\":\n return !0;\n case \"JsonPartitioned\":\n return Object.values(i.parts).every((o) => o.getIsReadyOrError());\n case \"BinaryPartitioned\":\n return Object.values(i.parts).every((o) => o.index.getIsReadyOrError() && o.values.getIsReadyOrError());\n }\n else\n throw Error(`unsupported column data type: ${i}`);\n });\n}\nfunction Ge(t, e, n, r, i, s) {\n let o = t;\n const a = [];\n if (s) {\n o = [];\n for (const l of t)\n s(l.spec) ? o.push(l) : a.push(l);\n }\n return a.push(...e), {\n src: {\n type: \"outer\",\n primary: {\n type: n,\n entries: o.map((l) => ({ type: \"column\", column: l }))\n },\n secondary: a.map((l) => ({ type: \"column\", column: l }))\n },\n filters: r,\n sorting: i\n };\n}\nfunction Kn(t, e, n, r) {\n var u, d;\n Array.isArray(r) && (r = { filters: r });\n const i = (r == null ? void 0 : r.coreJoinType) ?? \"full\", s = [...(r == null ? void 0 : r.filters) ?? [], ...((u = n == null ? void 0 : n.pTableParams) == null ? void 0 : u.filters) ?? []], o = ((d = n == null ? void 0 : n.pTableParams) == null ? void 0 : d.sorting) ?? [], a = Ue(t.resultPool);\n if (!a) return;\n const l = Be(e.map(Oe), a);\n if (We([...e, ...l]))\n return t.createPTable(\n Ge(e, l, i, s, o, r == null ? void 0 : r.coreColumnPredicate)\n );\n}\nfunction Ht(t) {\n var e;\n return ((e = t.annotations) == null ? void 0 : e[\"pl7.app/table/visibility\"]) === \"hidden\";\n}\nfunction qt(t) {\n var e;\n return ((e = t.annotations) == null ? void 0 : e[\"pl7.app/table/visibility\"]) === \"optional\";\n}\nfunction jn(t, e, n, r, i) {\n var g, x;\n const s = (i == null ? void 0 : i.coreJoinType) ?? \"full\", o = [...(i == null ? void 0 : i.filters) ?? [], ...((g = r == null ? void 0 : r.pTableParams) == null ? void 0 : g.filters) ?? []], a = ((x = r == null ? void 0 : r.pTableParams) == null ? void 0 : x.sorting) ?? [], l = e.filter((p) => !Ht(p.spec)), u = l.find((p) => n(p.spec));\n if (!u) return;\n const d = Ue(t.resultPool);\n if (!d) return;\n const y = new Set((() => {\n var A, m;\n if (s === \"inner\") return [];\n const p = (m = (A = r == null ? void 0 : r.gridState.columnVisibility) == null ? void 0 : A.hiddenColIds) == null ? void 0 : m.map(fe).filter((v) => v.type === \"column\").map((v) => v.id);\n return p || l.filter((v) => qt(v.spec)).map((v) => v.id);\n })());\n y.delete(u.id), [...o.map((p) => p.column), ...a.map((p) => p.column)].filter((p) => p.type === \"column\").map((p) => y.delete(p.id));\n const b = l.filter((p) => !y.has(p.id)), f = Be(b.map(Oe), d), w = [\n ...u.spec.axesSpec.map((p) => ({\n type: \"axis\",\n id: T(p),\n spec: p\n })),\n ...[...l, ...f].map((p) => ({\n type: \"column\",\n id: p.id,\n spec: p.spec\n }))\n ];\n if (!We([...b, ...f])) return;\n const c = t.createPTable(\n Ge(l, f, s, o, a, i == null ? void 0 : i.coreColumnPredicate)\n );\n return {\n tableSpec: w,\n tableHandle: c\n };\n}\nfunction Vn(t, e, n) {\n const r = t.resultPool.findLabels(e);\n return {\n axis: e,\n options: n.map((i) => ({\n value: i,\n label: (r == null ? void 0 : r[i]) ?? i.toString()\n })),\n defaultValue: n[0]\n };\n}\nfunction $n(t) {\n const e = t.type;\n switch (e) {\n case \"axis\":\n return F(t);\n case \"column\":\n return F(t);\n default:\n throw Error(`unsupported column type: ${e}`);\n }\n}\nfunction Nn(t, e, n, r) {\n if (!(!e || e.axesSpec.length === 0))\n return {\n id: t,\n spec: {\n kind: \"PColumn\",\n valueType: \"Int\",\n name: \"pl7.app/table/row-selection\",\n axesSpec: e.axesSpec,\n ...r && { domain: r },\n annotations: {\n \"pl7.app/label\": n ?? \"Selected rows\",\n \"pl7.app/discreteValues\": \"[1]\"\n }\n },\n data: e.selectedKeys.filter((i) => !i.some((s) => ct(s))).map((i) => ({ key: i, val: 1 }))\n };\n}\nfunction Jn(t) {\n return t === pt ? (console.error(\"Axis value can never be N/A\"), \"\") : t;\n}\nclass Mn {\n constructor(e) {\n this.handle = e;\n }\n async findColumns(e) {\n return await platforma.pFrameDriver.findColumns(this.handle, e);\n }\n async getColumnSpec(e) {\n return await platforma.pFrameDriver.getColumnSpec(this.handle, e);\n }\n async listColumns() {\n return await platforma.pFrameDriver.listColumns(this.handle);\n }\n async calculateTableData(e, n) {\n return await platforma.pFrameDriver.calculateTableData(this.handle, e, n);\n }\n async getUniqueValues(e) {\n return await platforma.pFrameDriver.getUniqueValues(this.handle, e);\n }\n}\nfunction zt(t) {\n return Re({\n __isRef: !0,\n blockId: ie(t, \"blockId\"),\n name: ie(t, \"name\")\n });\n}\nfunction Un(t) {\n return Re({\n ref: zt(ie(t, \"ref\")),\n label: ie(t, \"label\")\n });\n}\nconst Bn = {\n sdkVersion: Y\n};\nfunction Yt() {\n return De({ sdkVersion: Y });\n}\nfunction Wn(t) {\n try {\n return Yt();\n } catch {\n return t;\n }\n}\nfunction Gn(t) {\n if (typeof globalThis.getEnvironmentValue == \"function\")\n return globalThis.getEnvironmentValue(t);\n}\nexport {\n rn as Args,\n E as BlockModel,\n Bn as CurrentSdkInfo,\n I as FutureRef,\n Mt as IS_VIRTUAL_COLUMN,\n sn as It,\n On as JsRenderInternal,\n Te as LABEL_ANNOTATION,\n Ut as LINKER_COLUMN_ANNOTATION,\n on as MainOutputs,\n dt as OutputError,\n bt as PAnnotationLabel,\n wt as PAnnotationTrace,\n ve as PColumnCollection,\n Mn as PFrameImpl,\n B as RT_BINARY_PARTITIONED,\n z as RT_BINARY_SUPER_PARTITIONED,\n q as RT_JSON_PARTITIONED,\n ae as RT_JSON_SUPER_PARTITIONED,\n se as RT_RESOURCE_MAP,\n oe as RT_RESOURCE_MAP_PARTITIONED,\n te as RenderCtx,\n Ft as ResultPool,\n an as StagingOutputs,\n xt as Trace,\n At as TraceEntry,\n O as TreeNodeAccessor,\n ln as UiState,\n We as allColumnsComputed,\n gn as and,\n Tt as convertOrParsePColumnData,\n Dn as createPFrameForGraphs,\n Kn as createPlDataTable,\n Vn as createPlDataTableSheet,\n jn as createPlDataTableV2,\n Nn as createRowSelectionColumn,\n Ve as deriveLabels,\n de as downgradeCfgOrLambda,\n Wt as enrichColumnsWithCompatible,\n Sn as extractArchiveAndGetURL,\n Rn as extractConfig,\n Lt as filterDataInfoEntries,\n dn as flatten,\n Un as fromPlOption,\n zt as fromPlRef,\n Bt as getAdditionalColumns,\n Ue as getAllLabelColumns,\n wn as getBlobContent,\n xn as getBlobContentAsJson,\n An as getBlobContentAsString,\n Cn as getDownloadedBlobContent,\n Gn as getEnvironmentValue,\n Q as getFromCfg,\n re as getImmediate,\n _n as getImportProgress,\n ie as getJsonField,\n In as getLastLogs,\n Nt as getLinkerColumnsMap,\n En as getLogHandle,\n Be as getMatchingLabelColumns,\n Pn as getOnDemandBlobContent,\n St as getPartitionKeysList,\n Wn as getPlatformaOrDefault,\n Tn as getProgressLog,\n Ln as getProgressLogWithInfo,\n Yt as getRawPlatformaInstance,\n yn as getResourceField,\n vn as getResourceValueAsJson,\n It as getUniquePartitionKeys,\n Je as hasPathWithLinkerColumns,\n he as ifDef,\n Ht as isColumnHidden,\n qt as isColumnOptional,\n Kt as isConfigLambda,\n fn as isEmpty,\n Gt as isLabelColumn,\n $t as isLinkerColumn,\n nn as isolate,\n un as makeArray,\n Re as makeObject,\n pn as mapArrayValues,\n Jn as mapPTableValueToAxisKey,\n cn as mapRecordValues,\n bn as mapResourceFields,\n hn as not,\n mn as or,\n ye as parsePColumnData,\n kn as parseResourceMap,\n ft as readOutput,\n $n as stringifyPTableColumnId,\n Fn as stringifyPTableColumnSpec,\n tn as wrapOutputs\n};\n//# sourceMappingURL=index.mjs.map\n","import { reactive, type Reactive, ref, watch } from 'vue';\nimport { useTimeoutPoll, whenever } from '@vueuse/core';\nimport { getRawPlatformaInstance, type AnyLogHandle, type Platforma } from '@platforma-sdk/model';\n\ntype LogState = {\n logHandle: AnyLogHandle;\n lines: string;\n lastOffset: number;\n finished: boolean;\n error: unknown;\n};\n\nconst ProgressPrefixDefault = '[==PROGRESS==]'; // @TODO ?\n\n// from here https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_expressions#escaping\nfunction escapeRegExp(str: string) {\n return str.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n}\n\nexport function useLogHandle(\n props: Reactive<{ logHandle: AnyLogHandle | undefined; maxRetries?: number; mockPlatforma?: Platforma; progressPrefix?: string }>,\n) {\n const logState = ref<LogState>();\n\n const data = reactive({\n errorCount: 0,\n });\n\n async function fetchLogs() {\n // making a snapshot of the ref\n let currentLogState: LogState | undefined = logState.value;\n\n if (currentLogState === undefined) return;\n\n const platforma = props.mockPlatforma ?? getRawPlatformaInstance();\n\n if (!platforma) {\n console.warn('Platforma API is not available');\n return;\n }\n\n while (true) {\n const result = await platforma.logDriver.readText(currentLogState.logHandle, 100, currentLogState.lastOffset);\n\n currentLogState.error = undefined;\n\n data.errorCount = 0;\n\n if (result.shouldUpdateHandle) return;\n\n // somebody changed target log while we were fetching log data\n // @TODO There may be a situation where the new descriptor points to the same file and we don't need to reread it\n if (currentLogState.logHandle !== logState.value?.logHandle) return;\n\n const progressPrefix = props.progressPrefix ?? ProgressPrefixDefault;\n\n const newLines = new TextDecoder().decode(result.data).replace(new RegExp(`${escapeRegExp(progressPrefix)}`, 'g'), '');\n\n // We simply change it in a mutable way: if logHandle has been changed, it points to the new object\n currentLogState = Object.assign(currentLogState, {\n lines: currentLogState.lines + newLines,\n lastOffset: result.newOffset,\n finished: !result.live,\n });\n\n if (result.newOffset >= result.size) break;\n }\n }\n\n const fetchAndCatch = () =>\n fetchLogs().catch((err) => {\n if (logState.value) {\n data.errorCount++;\n if (data.errorCount > (props.maxRetries ?? 3)) {\n logState.value.error = err;\n } else {\n console.warn('skip error:', err, 'retry...');\n }\n }\n });\n\n // Only trigger after last fetch is done\n const timeoutPoll = useTimeoutPoll(fetchAndCatch, 1500, { immediate: false });\n\n whenever(\n () => logState?.value?.finished,\n () => timeoutPoll.pause(),\n );\n\n watch(\n () => props.logHandle,\n (lh) => {\n if (lh === undefined) {\n logState.value = undefined;\n timeoutPoll.pause();\n } else if (lh !== logState.value?.logHandle) {\n logState.value = { logHandle: lh, lastOffset: 0, lines: '', finished: false, error: undefined };\n data.errorCount = 0;\n timeoutPoll.resume();\n }\n },\n { immediate: true },\n );\n\n return logState;\n}\n","<script lang=\"ts\">\n/**\n * Log Viewer Component\n */\nexport default {\n name: 'PlLogView',\n};\n</script>\n\n<script lang=\"ts\" setup>\nimport { computed, ref, useSlots, watch } from 'vue';\nimport { PlMaskIcon24 } from '../PlMaskIcon24';\nimport './pl-log-view.scss';\nimport { okOptional, tapIf } from '@milaboratories/helpers';\nimport type { AnyLogHandle, Platforma, ValueOrErrors } from '@platforma-sdk/model';\nimport { useLogHandle } from './useLogHandle';\nimport { useLabelNotch } from '@/utils/useLabelNotch';\nimport DoubleContour from '@/utils/DoubleContour.vue';\nimport { PlTooltip } from '../PlTooltip';\n\nconst getOutputError = <T>(o?: ValueOrErrors<T>) => {\n if (o && o.ok === false) {\n return o.errors.join('\\n');\n }\n};\n\nconst slots = useSlots();\n\nconst props = defineProps<{\n /**\n * String contents\n */\n value?: string;\n /**\n * The content to copy (Note: it takes precedence over value property)\n */\n valueToCopy?: string;\n /**\n * AnyLogHandle\n */\n logHandle?: AnyLogHandle;\n /**\n * Custom progress prefix (to filter logHandle results)\n */\n progressPrefix?: string;\n /**\n * String contents\n */\n error?: unknown;\n /**\n * Block output (Note: error and value take precedence over output property)\n */\n output?: ValueOrErrors<unknown>;\n /**\n * Max retries for AnyLogHandle fetch (with the same parameters)\n */\n maxRetries?: number;\n /**\n * @TODO\n */\n mockPlatforma?: Platforma;\n /**\n * The label to display above the texarea.\n */\n label?: string;\n /**\n * Do not scroll to bottom on content change. Default is false (scroll to bottom).\n */\n disableAutoScroll?: boolean;\n}>();\n\nconst logState = useLogHandle(props);\n\nconst isAnchored = ref<boolean>(true);\n\nconst contentRef = ref<HTMLElement>();\n\nconst root = ref<HTMLInputElement>();\n\nconst computedError = computed(() => logState.value?.error ?? props.error ?? getOutputError(props.output));\n\nconst computedValue = computed(() => logState.value?.lines ?? props.value ?? okOptional(props.output));\n\nconst copyActive = ref(false);\n\nuseLabelNotch(root);\n\nconst iconName = computed(() => (copyActive.value ? 'clipboard-copied' : 'clipboard'));\n\nconst onClickCopy = () => {\n copyActive.value = true;\n setTimeout(() => {\n copyActive.value = false;\n }, 1200);\n\n let toCopy: string | undefined = undefined;\n if (props.valueToCopy) {\n toCopy = props.valueToCopy;\n } else if (computedValue.value && typeof computedValue.value === 'string') {\n toCopy = computedValue.value;\n }\n\n if (toCopy !== undefined) {\n navigator.clipboard.writeText(toCopy);\n }\n};\n\nconst optionallyScrollDown = () => {\n if (props.disableAutoScroll) {\n return;\n }\n\n tapIf(contentRef.value, (el) => {\n if (isAnchored.value) {\n el.scrollTo(el.scrollLeft, el.scrollHeight);\n }\n });\n};\n\nwatch(\n computedValue,\n () => {\n requestAnimationFrame(() => {\n optionallyScrollDown();\n });\n },\n { immediate: true },\n);\n\nconst onContentScroll = (ev: Event) => {\n const el = ev.target as HTMLElement;\n isAnchored.value = el.scrollTop + 20 /* ~ 1 line height */ >= el.scrollHeight - el.offsetHeight;\n};\n</script>\n\n<template>\n <div ref=\"root\" class=\"pl-log-view\" :class=\"{ 'has-error': computedError }\">\n <label v-if=\"label\">\n <span>{{ label }}</span>\n <PlTooltip v-if=\"slots.tooltip\" class=\"info\" position=\"top\">\n <template #tooltip>\n <slot name=\"tooltip\" />\n </template>\n </PlTooltip>\n </label>\n <DoubleContour class=\"pl-log-view__contour\" />\n <div class=\"pl-log-view__copy\">\n <PlTooltip :close-delay=\"800\" position=\"top\">\n <PlMaskIcon24 title=\"Copy content\" :name=\"iconName\" @click=\"onClickCopy\" />\n <template #tooltip>{{ copyActive ? 'copied' : 'copy' }}</template>\n </PlTooltip>\n </div>\n <div v-if=\"computedError\" class=\"pl-log-view__error\">{{ computedError }}</div>\n <div v-else ref=\"contentRef\" class=\"pl-log-view__content\" @scroll=\"onContentScroll\">{{ computedValue }}</div>\n </div>\n</template>\n","<script lang=\"ts\" setup>\nimport { onMounted, unref, ref, reactive } from 'vue';\nimport { PlTooltip } from '../PlTooltip';\nimport type { TabOption } from './types';\n\nconst rootRef = ref<{ $el: HTMLElement }>();\n\ndefineProps<{\n option: TabOption;\n}>();\n\nconst data = reactive({\n isOverflown: false,\n});\n\nonMounted(() => {\n const root = unref(rootRef);\n\n if (!root) {\n return;\n }\n\n const el = root.$el.querySelector('span') as HTMLElement | null;\n\n if (!el) {\n return;\n }\n\n requestAnimationFrame(() => {\n if (el.offsetWidth < el.scrollWidth) {\n data.isOverflown = true;\n }\n });\n});\n</script>\n\n<template>\n <PlTooltip\n ref=\"rootRef\"\n element=\"div\"\n position=\"top\"\n :hide=\"!data.isOverflown\"\n :close-delay=\"300\"\n :data-is-overflown=\"data.isOverflown ? 'true' : 'false'\"\n >\n <slot />\n <template #tooltip>\n {{ option.label }}\n </template>\n </PlTooltip>\n</template>\n","<script lang=\"ts\">\n/**\n * A component for selecting one value from a list of options\n */\nexport default {\n name: 'PlTabs',\n};\n</script>\n\n<script lang=\"ts\" setup generic=\"M extends string\">\nimport style from './pl-tabs.module.scss';\nimport type { TabOption } from './types';\nimport Tab from './Tab.vue';\n\nconst emit = defineEmits<{\n /**\n * Emitted when the model value is updated.\n */\n (e: 'update:modelValue', value: M): void;\n}>();\n\nconst emitModel = (v: M) => emit('update:modelValue', v);\n\ndefineProps<{\n /**\n * The current selected tab value.\n */\n modelValue?: M;\n /**\n * List of available options for the component\n */\n options: Readonly<TabOption<M>[]>;\n /**\n * If `true`, the component is disabled and cannot be interacted with.\n */\n disabled?: boolean;\n /**\n * If `true`, the `active` line appears on the top of element.\n */\n topLine?: boolean;\n /**\n * Maximum tab width (css value), can be overridden for each option\n */\n maxTabWidth?: string;\n}>();\n</script>\n\n<template>\n <div :class=\"[style.component, { [style.disabled]: disabled, [style.topLine]: topLine }]\">\n <Tab\n v-for=\"(opt, i) in options\"\n :key=\"i\"\n :tabindex=\"modelValue === opt.value || disabled || opt.disabled ? undefined : 0\"\n :option=\"opt\"\n :class=\"[{ [style.active]: modelValue === opt.value, [style.disabled]: opt.disabled }, style.tab]\"\n :style=\"{ '--pl-tabs-item-max-width': opt.maxWidth ?? maxTabWidth }\"\n @keydown.enter=\"emitModel(opt.value)\"\n @click=\"emitModel(opt.value)\"\n >\n <slot :name=\"opt.value\" :option=\"opt\">\n <span>{{ opt.label }}</span>\n </slot>\n </Tab>\n </div>\n</template>\n","<script lang=\"ts\" setup>\nimport { provide, toRef } from 'vue';\n\nconst model = defineModel<string>();\n\nconst props = defineProps<{\n /**\n * Allow multiple accordion sections to be opened at the same time\n */\n multiple?: boolean;\n}>();\n\nprovide('pl-accordion-model', model);\nprovide('pl-accordion-props', toRef(props));\n</script>\n\n<template>\n <slot name=\"header\" />\n <slot />\n</template>\n","<script lang=\"ts\" setup>\nconst onStart = (el: Element) => {\n el.classList.add('expand-collapse-fix');\n (el as HTMLElement).style.setProperty('--component-height', el.scrollHeight + 'px');\n};\n\nconst onAfter = (el: Element) => {\n (el as HTMLElement).style.removeProperty('--component-height');\n el.classList.remove('expand-collapse-fix');\n};\n</script>\n\n<template>\n <Transition name=\"expand-collapse\" @enter=\"onStart\" @leave=\"onStart\" @after-enter=\"onAfter\" @after-leave=\"onAfter\">\n <slot/>\n </Transition>\n</template>\n\n<style>\n.expand-collapse-fix {\n overflow: hidden;\n}\n\n.expand-collapse-enter-active,\n.expand-collapse-leave-active {\n transition:\n height 0.2s ease-in-out,\n opacity 0.2s ease-in-out;\n height: var(--component-height);\n}\n\n.expand-collapse-enter-from,\n.expand-collapse-leave-to {\n opacity: 0.5;\n height: 0;\n}\n</style>\n","<script setup lang=\"ts\">\nimport { uniqueId } from '@milaboratories/helpers';\nimport { PlMaskIcon16 } from '../PlMaskIcon16';\nimport { PlSectionSeparator } from '../PlSectionSeparator';\nimport ExpandTransition from './ExpandTransition.vue';\nimport type { Ref } from 'vue';\nimport { computed, inject } from 'vue';\n\nconst $m = inject<Ref<string>>('pl-accordion-model');\n\nconst $p = inject<\n Ref<{\n multiple?: boolean;\n }>\n>('pl-accordion-props');\n\nconst model = defineModel<boolean>();\n\nconst id = uniqueId();\n\nconst isMulti = computed(() => !$p || $p.value.multiple);\n\nconst open = computed({\n get() {\n if (isMulti.value) {\n return model.value;\n }\n\n return $m ? $m.value === id : model.value;\n },\n set(on) {\n if (isMulti.value) {\n model.value = on;\n } else if ($m) {\n $m.value = $m.value === id ? '' : id;\n }\n },\n});\n\ndefineProps<{\n /**\n * The label text (optional)\n */\n label?: string;\n /**\n * If `true`, remove top padding\n */\n compact?: boolean;\n}>();\n</script>\n\n<template>\n <div class=\"pl-accordion-section\">\n <PlSectionSeparator :class=\"$style.separator\" :compact=\"compact\" @click=\"open = !open\">\n <PlMaskIcon16 name=\"chevron-right\" :class=\"[{ [$style.down]: open }, $style.chevron]\" />\n {{ label }}\n </PlSectionSeparator>\n <ExpandTransition>\n <div v-if=\"open\" :class=\"$style.content\">\n <slot />\n </div>\n </ExpandTransition>\n </div>\n</template>\n\n<style module>\n.content {\n display: flex;\n flex-direction: column;\n gap: var(--gap-v);\n will-change: height, opacity;\n /* transform: translateZ(0);\n backface-visibility: hidden; */\n}\n\n.content > *:first-child {\n margin-top: 24px;\n}\n\n.content > *:last-child {\n margin-bottom: 4px;\n}\n\n.separator {\n cursor: pointer;\n &:hover {\n --pl-separator-txt-color: var(--txt-01);\n --mask-icon-bg-color: var(--ic-01);\n }\n}\n\n.chevron {\n transition-duration: 50ms;\n}\n\n.down {\n transform: rotate(90deg);\n}\n</style>\n","<script lang=\"ts\" setup>\nimport { reactive } from 'vue';\nimport './pl-status-tag.scss';\nimport type { PlStatusTagType } from './types';\n\ndefineProps<{ type?: PlStatusTagType }>();\n\nconst data = reactive<{ typeToText: Record<PlStatusTagType, string> }>({\n typeToText: {\n OK: 'OK',\n WARN: 'WARN',\n ALERT: 'ALERT',\n HOLD: 'HOLD',\n },\n});\n</script>\n<template>\n <div v-if=\"type\" v-bind=\"$attrs\" :class=\"{[type.toLocaleLowerCase()]: true}\" class=\"pl-status-tag text-caps11 d-flex align-center\">\n <slot>\n {{ data.typeToText[type] }}\n </slot>\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport { computed } from 'vue';\nimport './pl-progress-cell.scss';\nimport PlMaskIcon24 from '../PlMaskIcon24/PlMaskIcon24.vue';\nimport type { PlProgressCellProps } from './types';\n\nconst props = withDefaults(defineProps<PlProgressCellProps>(), {\n stage: 'not_started',\n step: '', // main text (left)\n progressString: '', // appended text on the right side (right)\n progress: undefined,\n error: '',\n});\n\nconst canShowWhiteBg = computed(() => props.stage !== 'not_started');\n\nconst currentProgress = computed(() => props.stage === 'done' ? 100 : Math.min(100, props.progress || 0));\n\nconst canShowInfinityLoader = computed(() => props.progress === undefined && props.stage !== 'done' && props.stage !== 'not_started' && !props.error);\n</script>\n\n<template>\n <div :class=\"{'progress-cell':true, 'progress-cell__white-bg': canShowWhiteBg, error, 'not-started': props.stage === 'not_started' }\">\n <div v-if=\"canShowInfinityLoader\" class=\"progress-cell__infinity-loader\">\n <div class=\"progress-cell__infinity-gradient\"/>\n </div>\n <div v-if=\"!canShowInfinityLoader && !error\" class=\"progress-cell__indicator\" :style=\"{ width: currentProgress + '%' }\"/>\n <div class=\"progress-cell__body\">\n <div class=\"progress-cell__stage text-s\">\n {{ error ? error : step }}\n </div>\n <div class=\"progress-cell__percentage text-s d-flex align-center justify-end\">\n <PlMaskIcon24 v-if=\"error\" name=\"error\" />\n <template v-if=\"!error\">\n {{ progressString }}\n </template>\n </div>\n </div>\n </div>\n</template>\n","import type { WatchSource, WatchOptions } from 'vue';\nimport { reactive, watch, ref, computed } from 'vue';\nimport { exclusiveRequest } from '@milaboratories/helpers';\n\nexport type FetchResult<V, E = unknown> = {\n loading: boolean;\n value: V | undefined;\n error: E;\n};\n\n// TODO Should we keep the old value while fetching the new value?\n\n/**\n * Watch any reactive source and perform an asynchronous operation\n *\n * @example\n * ```ts\n * const v = useWatchFetch(\n * watchSource,\n * async (sourceValue) => {\n * return await fetchDataFromApi(sourceValue);\n * }\n * );\n *\n * // Usage in a template\n * <template>\n * <div v-if=\"v.loading\">Loading...</div>\n * <div v-else-if=\"v.error\">Error: {{ v.error.message }}</div>\n * <div v-else>Data: {{ v.value }}</div>\n * </template>\n * ```\n */\nexport function useWatchFetch<S, V>(watchSource: WatchSource<S>, doFetch: (s: S) => Promise<V>, watchOptions?: WatchOptions): FetchResult<V> {\n const loadingRef = ref(0);\n\n const data = reactive({\n loading: computed(() => loadingRef.value > 0),\n loadingRef,\n value: undefined as V,\n error: undefined,\n }) as FetchResult<V>;\n\n const exclusive = exclusiveRequest(doFetch);\n\n watch(\n watchSource,\n async (s) => {\n data.error = undefined;\n loadingRef.value++;\n exclusive(s)\n .then((res) => {\n if (res.ok) {\n data.value = res.value;\n }\n })\n .catch((err) => {\n data.value = undefined;\n data.error = err;\n })\n .finally(() => {\n loadingRef.value--;\n });\n },\n Object.assign({ immediate: true, deep: true }, watchOptions ?? {}),\n );\n\n return data;\n}\n","<script lang=\"ts\">\n/**\n * A component for selecting one value from a big list of options using string search request\n */\nexport default {\n name: 'PlAutocomplete',\n};\n</script>\n\n<script lang=\"ts\" setup generic=\"M = unknown\">\nimport './pl-autocomplete.scss';\nimport { computed, reactive, ref, unref, useSlots, useTemplateRef, watch, watchPostEffect } from 'vue';\nimport { tap } from '@/helpers/functions';\nimport { PlTooltip } from '@/components/PlTooltip';\nimport DoubleContour from '@/utils/DoubleContour.vue';\nimport { useLabelNotch } from '@/utils/useLabelNotch';\nimport type { ListOption, ListOptionNormalized } from '@/types';\nimport { deepEqual } from '@/helpers/objects';\nimport DropdownListItem from '@/components/DropdownListItem.vue';\nimport LongText from '@/components/LongText.vue';\nimport { normalizeListOptions } from '@/helpers/utils';\nimport { PlIcon16 } from '../PlIcon16';\nimport { PlMaskIcon24 } from '../PlMaskIcon24';\nimport { DropdownOverlay } from '@/utils/DropdownOverlay';\nimport { refDebounced } from '@vueuse/core';\nimport { useWatchFetch } from '@/composition/useWatchFetch.ts';\n\n/**\n * The current selected value.\n */\nconst model = defineModel<M>({ required: true });\n\nconst props = withDefaults(\n defineProps<{\n /**\n * Lambda for requesting of available options for the dropdown by search string.\n */\n optionsSearch: (s: string) => Promise<ListOption<M>[]>;\n /**\n * Lambda for requesting of corresponding option for current model value. If empty, optionsSearch is used for this.\n */\n modelSearch?: (v: M) => Promise<ListOption<M>>;\n /**\n * The label text for the dropdown field (optional)\n */\n label?: string;\n /**\n * A helper text displayed below the dropdown when there are no errors (optional).\n */\n helper?: string;\n /**\n * A helper text displayed below the dropdown when there are no options yet or options is undefined (optional).\n */\n loadingOptionsHelper?: string;\n /**\n * Error message displayed below the dropdown (optional)\n */\n error?: string;\n /**\n * Placeholder text shown when no value is selected.\n */\n placeholder?: string;\n /**\n * Enables a button to clear the selected value (default: false)\n */\n clearable?: boolean;\n /**\n * If `true`, the dropdown component is marked as required.\n */\n required?: boolean;\n /**\n * If `true`, the dropdown component is disabled and cannot be interacted with.\n */\n disabled?: boolean;\n /**\n * Custom icon (16px) class for the dropdown arrow (optional)\n */\n arrowIcon?: string;\n /**\n * Custom icon (24px) class for the dropdown arrow (optional)\n */\n arrowIconLarge?: string;\n /**\n * Option list item size\n */\n optionSize?: 'small' | 'medium';\n /**\n * Formatter for the selected value if its label is absent\n */\n formatValue?: (value: M) => string;\n }>(),\n {\n modelSearch: undefined,\n label: '',\n helper: undefined,\n loadingOptionsHelper: undefined,\n error: undefined,\n placeholder: '...',\n clearable: false,\n required: false,\n disabled: false,\n arrowIcon: undefined,\n arrowIconLarge: undefined,\n optionSize: 'small',\n formatValue: (v: M) => String(v),\n },\n);\n\nconst slots = useSlots();\n\nconst rootRef = ref<HTMLElement | undefined>();\nconst input = ref<HTMLInputElement | undefined>();\n\nconst overlayRef = useTemplateRef('overlay');\n\nconst search = ref<string | null>(null);\nconst data = reactive({\n activeIndex: -1,\n open: false,\n});\n\nconst findActiveIndex = () =>\n tap(\n renderedOptionsRef.value.findIndex((o) => deepEqual(o.value, model.value)),\n (v) => (v < 0 ? 0 : v),\n );\n\nconst updateActive = () => (data.activeIndex = findActiveIndex());\n\nconst loadedOptionsRef = ref<ListOption<M>[]>([]);\nconst modelOptionRef = ref<ListOptionNormalized<M> | undefined>(); // list of 1 option that is selected or empty, to keep selected label\n\nconst renderedOptionsRef = computed(() => {\n return normalizeListOptions(loadedOptionsRef.value).map((opt, index) => ({\n ...opt,\n index,\n isSelected: index === selectedIndex.value,\n isActive: index === data.activeIndex,\n }));\n});\nconst isLoadingOptions = ref<boolean>(true);\nconst isLoadingError = ref<boolean>(false);\n\nconst isDisabled = computed(() => {\n return props.disabled;\n});\n\nconst selectedIndex = computed(() => {\n return loadedOptionsRef.value.findIndex((o) => deepEqual(o.value, model.value));\n});\n\nconst computedError = computed(() => {\n if (isLoadingOptions.value) {\n return undefined;\n }\n\n if (props.error) {\n return props.error;\n }\n\n if (isLoadingError.value) {\n return 'Data loading error';\n }\n\n return undefined;\n});\n\nconst textValue = computed(() => {\n const modelOption = unref(modelOptionRef);\n const options = unref(renderedOptionsRef);\n\n const item: ListOptionNormalized | undefined = modelOption ?? options.find((o) => deepEqual(o.value, model.value)) ?? options.find((o) => deepEqual(o.value, model.value));\n\n return item?.label || (model.value ? props.formatValue(model.value) : '');\n});\n\nconst computedPlaceholder = computed(() => {\n if (!data.open && model.value) {\n return '';\n }\n\n return model.value ? String(textValue.value) : props.placeholder;\n});\n\nconst hasValue = computed(() => {\n return model.value !== undefined && model.value !== null;\n});\n\nconst tabindex = computed(() => (isDisabled.value ? undefined : '0'));\n\nconst selectOption = (v: ListOptionNormalized<M> | undefined) => {\n model.value = v?.value as M;\n modelOptionRef.value = v;\n search.value = null;\n data.open = false;\n rootRef?.value?.focus();\n};\n\nconst clear = () => {\n model.value = undefined as M;\n modelOptionRef.value = undefined;\n};\n\nconst setFocusOnInput = () => input.value?.focus();\n\nconst toggleOpen = () => {\n data.open = !data.open;\n};\n\nwatch(() => data.open, (v) => {\n search.value = v ? '' : null;\n})\n\nconst onInputFocus = () => {\n data.open = true;\n};\n\nconst onFocusOut = (event: FocusEvent) => {\n const relatedTarget = event.relatedTarget as Node | null;\n\n if (!rootRef.value?.contains(relatedTarget) && !overlayRef.value?.listRef?.contains(relatedTarget)) {\n search.value = null;\n data.open = false;\n }\n};\n\nconst handleKeydown = (e: { code: string; preventDefault(): void }) => {\n if (!['ArrowDown', 'ArrowUp', 'Enter', 'Escape'].includes(e.code)) {\n return;\n } else {\n e.preventDefault();\n }\n\n const { open, activeIndex } = data;\n\n if (!open) {\n if (e.code === 'Enter') {\n data.open = true;\n search.value = '';\n }\n return;\n }\n\n if (e.code === 'Escape') {\n data.open = false;\n search.value = null;\n rootRef.value?.focus();\n }\n\n const options = unref(renderedOptionsRef);\n\n const { length } = options;\n\n if (!length) {\n return;\n }\n\n if (e.code === 'Enter') {\n selectOption(options.find((it) => it.index === activeIndex));\n }\n\n const localIndex = options.findIndex((it) => it.index === activeIndex) ?? -1;\n\n const delta = e.code === 'ArrowDown' ? 1 : e.code === 'ArrowUp' ? -1 : 0;\n\n const newIndex = Math.abs(localIndex + delta + length) % length;\n\n data.activeIndex = renderedOptionsRef.value[newIndex].index ?? -1;\n};\n\nuseLabelNotch(rootRef);\n\nwatch(() => model.value, updateActive, { immediate: true });\n\nwatch(\n () => data.open,\n (open) => (open ? input.value?.focus() : ''),\n);\n\nwatchPostEffect(() => {\n // eslint-disable-next-line @typescript-eslint/no-unused-expressions\n search.value; // to watch\n\n if (data.activeIndex >= 0 && data.open) {\n overlayRef.value?.scrollIntoActive();\n }\n});\n\nconst searchDebounced = refDebounced(search, 300, { maxWait: 1000 });\n\nconst optionsRequest = useWatchFetch(() => searchDebounced.value, async (v) => {\n if (v !== null) { // search is null when dropdown is closed;\n return props.optionsSearch(v);\n }\n return [];\n});\n\nconst modelOptionRequest = useWatchFetch(() => model.value, async (v) => {\n if (v && !deepEqual(modelOptionRef.value?.value, v)) { // load label for selected value if it was updated from outside the component\n if (props.modelSearch) {\n return props.modelSearch(v);\n }\n return (await props.optionsSearch(String(v)))?.[0];\n }\n return modelOptionRef.value;\n});\n\nwatch(() => optionsRequest.value, (result) => {\n if (result) {\n loadedOptionsRef.value = result;\n if (search.value !== null) {\n isLoadingError.value = false;\n }\n }\n});\n\nwatch(() => modelOptionRequest.value, (result) => {\n if (result) {\n modelOptionRef.value = normalizeListOptions([result])[0];\n }\n});\n\nwatch(() => optionsRequest.error, (err) => {\n if (err) {\n isLoadingError.value = Boolean(err);\n }\n});\n\nwatch(() => optionsRequest.loading || modelOptionRequest.loading, (loading) => {\n isLoadingOptions.value = loading;\n});\n</script>\n\n<template>\n <div class=\"pl-autocomplete__envelope\" @click.stop=\"setFocusOnInput\">\n <div\n ref=\"rootRef\"\n :tabindex=\"tabindex\"\n class=\"pl-autocomplete\"\n :class=\"{ open: data.open, error: Boolean(computedError), disabled: isDisabled }\"\n @keydown=\"handleKeydown\"\n @focusout=\"onFocusOut\"\n >\n <div class=\"pl-autocomplete__container\">\n <div class=\"pl-autocomplete__field\">\n <input\n ref=\"input\"\n v-model=\"search\"\n type=\"text\"\n tabindex=\"-1\"\n :disabled=\"isDisabled\"\n :placeholder=\"computedPlaceholder\"\n spellcheck=\"false\"\n autocomplete=\"chrome-off\"\n @focus=\"onInputFocus\"\n />\n\n <div v-if=\"!data.open\" class=\"input-value\">\n <LongText> {{ textValue }} </LongText>\n </div>\n\n <div class=\"pl-autocomplete__controls\">\n <PlMaskIcon24 v-if=\"isLoadingOptions\" name=\"loading\" />\n <PlIcon16 v-if=\"clearable && hasValue\" name=\"delete-clear\" @click.stop=\"clear\" />\n <slot name=\"append\" />\n <div class=\"pl-autocomplete__arrow-wrapper\" @click.stop=\"toggleOpen\">\n <div v-if=\"arrowIconLarge\" class=\"arrow-icon\" :class=\"[`icon-24 ${arrowIconLarge}`]\" />\n <div v-else-if=\"arrowIcon\" class=\"arrow-icon\" :class=\"[`icon-16 ${arrowIcon}`]\" />\n <div v-else class=\"arrow-icon arrow-icon-default\" />\n </div>\n </div>\n </div>\n <label v-if=\"label\">\n <i v-if=\"required\" class=\"required-icon\" />\n <span>{{ label }}</span>\n <PlTooltip v-if=\"slots.tooltip\" class=\"info\" position=\"top\">\n <template #tooltip>\n <slot name=\"tooltip\" />\n </template>\n </PlTooltip>\n </label>\n <DropdownOverlay v-if=\"data.open\" ref=\"overlay\" :root=\"rootRef\" class=\"pl-autocomplete__options\" tabindex=\"-1\" :gap=\"3\">\n <DropdownListItem\n v-for=\"(item, index) in renderedOptionsRef\"\n :key=\"index\"\n :option=\"item\"\n :is-selected=\"item.isSelected\"\n :is-hovered=\"item.isActive\"\n :size=\"optionSize\"\n @click.stop=\"selectOption(item)\"\n />\n <div v-if=\"!renderedOptionsRef.length\" class=\"nothing-found\">Nothing found</div>\n </DropdownOverlay>\n <DoubleContour class=\"pl-autocomplete__contour\" />\n </div>\n </div>\n <div v-if=\"computedError\" class=\"pl-autocomplete__error\">{{ computedError }}</div>\n <div v-else-if=\"isLoadingOptions && loadingOptionsHelper\" class=\"pl-autocomplete__helper\">{{ loadingOptionsHelper }}</div>\n <div v-else-if=\"helper\" class=\"pl-autocomplete__helper\">{{ helper }}</div>\n </div>\n</template>\n","import type { Option } from '@milaboratories/helpers';\nimport type { StorageEntry } from '@platforma-sdk/model';\nimport type { FileDialogItem } from './utils';\nimport { computed } from 'vue';\n\nexport const defaultData = () => ({\n dirPath: '' as string,\n search: '',\n storageEntry: undefined as StorageEntry | undefined,\n items: [] as FileDialogItem[],\n error: '',\n storageOptions: [] as Option<StorageEntry>[],\n selected: [],\n lastSelected: undefined as number | undefined,\n currentLoadingPath: undefined as string | undefined,\n showHiddenItems: false,\n});\n\nexport type Data = ReturnType<typeof defaultData>;\n\nexport function useVisibleItems(data: Data) {\n return computed(() => {\n let items = data.items;\n\n if (!data.showHiddenItems) {\n items = items.filter((it) => !it.name.startsWith('.'));\n }\n\n if (data.search) {\n const search = data.search.toLocaleLowerCase();\n items = items.filter((it) => it.name.toLocaleLowerCase().includes(search));\n }\n\n return items;\n });\n}\n\nexport const vTextOverflown = {\n mounted: (el: HTMLElement) => {\n if (el.clientWidth < el.scrollWidth) {\n const s = el.innerText;\n el.innerText = s.substring(0, 57) + '...' + s.substring(s.length - 10);\n }\n },\n};\n","import { trimChars, trimCharsLeft } from '@milaboratories/helpers';\nimport type { ImportFileHandle } from '@platforma-sdk/model';\n\nexport function normalizeExtensions(extensions: string[] | undefined) {\n return extensions ? extensions.map((it) => '.' + trimCharsLeft(it, ['.'])) : undefined;\n}\n\n// NOTE: works only with '/' separator on *nix systems.\nexport function getFilePathBreadcrumbs(filePath: string) {\n // FIXME: separator probably should be got from ls driver from backend.\n // or else this component won't work with remote storages on Windows.\n const sep = '/';\n\n // If file path starts with '/',\n // the storage was set up with absolute paths,\n // and we need to add the separator to the results.\n const isAbsolute = filePath.startsWith(sep);\n const chunks = trimChars(filePath, [sep]).split(sep);\n\n const stack: { index: number; path: string; name: string }[] = [\n {\n index: 0,\n name: 'Root',\n path: '',\n },\n ];\n\n if (chunks.length === 1 && chunks[0] === '') {\n return stack;\n }\n\n for (let i = 0; i < chunks.length; i++) {\n const pathPrefix = isAbsolute ? sep : '';\n const p = pathPrefix + chunks.slice(0, i + 1).join(sep);\n\n stack.push({\n index: i + 1,\n name: chunks[i],\n path: p,\n });\n }\n\n return stack;\n}\n\nexport type FileDialogItem = {\n id: number;\n path: string;\n name: string;\n canBeSelected: boolean;\n isDir: boolean;\n selected: boolean;\n handle: ImportFileHandle | undefined;\n};\n","<script lang=\"ts\" setup>\nimport { useEventListener } from '@/composition/useEventListener';\nimport type { ImportedFiles } from '@/types';\nimport { between, notEmpty, tapIf } from '@milaboratories/helpers';\nimport { getRawPlatformaInstance, type StorageHandle } from '@platforma-sdk/model';\nimport { computed, onMounted, reactive, toRef, watch } from 'vue';\nimport { PlDropdown } from '../PlDropdown';\nimport { PlIcon16 } from '../PlIcon16';\nimport Shortcuts from './Shortcuts.vue';\nimport { PlMaskIcon16 } from '../PlMaskIcon16';\nimport { PlSearchField } from '../PlSearchField';\nimport style from './pl-file-dialog.module.scss';\nimport { defaultData, useVisibleItems, vTextOverflown } from './remote';\nimport { getFilePathBreadcrumbs, normalizeExtensions, type FileDialogItem } from './utils';\n\n// note that on a Mac, a click combined with the control key is intercepted by the operating system and used to open a context menu, so ctrlKey is not detectable on click events.\nconst isCtrlOrMeta = (ev: KeyboardEvent | MouseEvent) => ev.ctrlKey || ev.metaKey;\n\ndefineEmits<{\n (e: 'update:modelValue', value: boolean): void;\n (e: 'import:files', value: ImportedFiles): void;\n}>();\n\nconst props = withDefaults(\n defineProps<{\n modelValue: boolean;\n extensions?: string[]; // with dot, like ['.fastq.gz', '.fastq']\n multi?: boolean;\n title?: string;\n autoSelectStorage?: boolean;\n submit: () => void;\n }>(),\n {\n extensions: undefined,\n title: undefined,\n autoSelectStorage: true,\n },\n);\n\nconst data = reactive(defaultData());\n\nconst resetData = () => {\n data.search = '';\n data.error = '';\n data.lastSelected = undefined;\n};\n\nconst extensions = computed(() => normalizeExtensions(props.extensions));\n\nconst visibleItems = useVisibleItems(data);\n\nconst lookup = computed(() => {\n return {\n modelValue: props.modelValue,\n dirPath: data.dirPath,\n storageHandle: data.storageEntry?.handle,\n };\n});\n\nconst query = (storageHandle: StorageHandle, dirPath: string) => {\n if (!getRawPlatformaInstance()) {\n return;\n }\n\n if (data.currentLoadingPath === dirPath) {\n return;\n }\n\n data.currentLoadingPath = dirPath;\n\n getRawPlatformaInstance().lsDriver\n .listFiles(storageHandle, dirPath)\n .then((res) => {\n if (dirPath !== data.dirPath) {\n return;\n }\n\n data.items = notEmpty(res)\n .entries.map((item) => ({\n path: item.fullPath,\n name: item.name,\n isDir: item.type === 'dir',\n canBeSelected: item.type === 'file' && (!extensions.value || extensions.value.some((ext) => item.fullPath.endsWith(ext))),\n handle: item.type === 'file' ? item.handle : undefined,\n selected: false,\n }))\n .sort((a, b) => {\n if (a.isDir && !b.isDir) return -1;\n if (!a.isDir && b.isDir) return 1;\n // localeCompare for unicode alphabets\n return a.name.localeCompare(b.name);\n })\n .map((it, id) => ({ id, ...it }));\n\n data.lastSelected = undefined;\n })\n .catch((err) => (data.error = String(err)))\n .finally(() => {\n data.currentLoadingPath = undefined;\n });\n};\n\nconst load = () => {\n resetData();\n const { storageHandle, dirPath, modelValue } = lookup.value;\n if (storageHandle && modelValue) {\n query(storageHandle, dirPath);\n }\n};\n\nconst breadcrumbs = computed(() => getFilePathBreadcrumbs(data.dirPath));\n\nconst selectedFiles = computed(() => data.items.filter((f) => f.canBeSelected && f.selected && !f.isDir));\n\nconst isReady = computed(() => selectedFiles.value.length > 0 && data.storageEntry?.handle);\n\nconst getFilesToImport = () => ({\n storageHandle: notEmpty(data.storageEntry?.handle),\n files: selectedFiles.value.map((f) => f.handle!),\n});\n\nconst setDirPath = (dirPath: string) => {\n data.dirPath = dirPath;\n};\n\nconst selectFile = (ev: MouseEvent, file: FileDialogItem) => {\n const { shiftKey } = ev;\n\n const ctrlOrMetaKey = isCtrlOrMeta(ev);\n\n const { lastSelected } = data;\n\n ev.preventDefault();\n\n const items = visibleItems.value;\n\n if (file.canBeSelected) {\n if (!props.multi) {\n items.forEach((f) => (f.selected = false));\n }\n\n file.selected = !file.selected;\n\n if (!props.multi) {\n return;\n }\n\n if (!ctrlOrMetaKey && !shiftKey) {\n items.forEach((f) => {\n if (f.id !== file.id) {\n f.selected = false;\n }\n });\n }\n\n if (shiftKey && lastSelected !== undefined) {\n items.forEach((f) => {\n if (between(f.id, lastSelected, file.id)) {\n f.selected = true;\n }\n });\n }\n\n if (file.selected) {\n data.lastSelected = file.id;\n }\n }\n};\n\nconst changeAll = (selected: boolean) => {\n if (selected && !props.multi) {\n return;\n }\n\n visibleItems.value\n .filter((f) => f.canBeSelected)\n .forEach((file) => {\n file.selected = selected;\n });\n};\n\nconst selectAll = () => changeAll(true);\n\nconst deselectAll = () => changeAll(false);\n\nconst loadAvailableStorages = () => {\n resetData();\n deselectAll();\n if (!getRawPlatformaInstance()) {\n console.warn('platforma API is not found');\n return;\n }\n getRawPlatformaInstance().lsDriver\n .getStorageList()\n .then((storageEntries) => {\n // local storage is always returned by the ML, so we need to remove it from remote dialog manually\n storageEntries = storageEntries.filter((it) => it.name !== 'local' && !it.name.startsWith('local_disk_'));\n\n data.storageOptions = storageEntries.map((it) => ({\n text: it.name,\n value: it,\n }));\n\n if (props.autoSelectStorage) {\n tapIf(storageEntries[0], (entry) => {\n data.storageEntry = entry;\n });\n }\n })\n .catch((err) => (data.error = String(err)));\n};\n\nwatch(\n toRef(data, 'storageEntry'),\n (entry) => {\n resetData();\n data.dirPath = entry?.initialFullPath ?? '';\n },\n { immediate: true },\n);\n\nwatch([() => data.dirPath, () => data.storageEntry], () => {\n load();\n});\n\nwatch(\n () => props.modelValue,\n (isOpen) => {\n if (isOpen) {\n loadAvailableStorages();\n } else {\n Object.assign(data, defaultData());\n }\n },\n { immediate: true },\n);\n\nuseEventListener(document, 'keydown', (ev: KeyboardEvent) => {\n if (!props.modelValue) {\n return;\n }\n\n if (ev.target !== document.body) {\n return;\n }\n\n const ctrlOrMetaKey = isCtrlOrMeta(ev);\n\n if (ctrlOrMetaKey && ev.code === 'KeyA') {\n ev.preventDefault();\n selectAll();\n }\n\n if (ctrlOrMetaKey && ev.shiftKey && ev.code === 'Period') {\n ev.preventDefault();\n data.showHiddenItems = !data.showHiddenItems;\n }\n\n if (ev.code === 'Enter') {\n props.submit();\n }\n});\n\ndefineExpose({\n isReady,\n getFilesToImport,\n});\n\nonMounted(loadAvailableStorages);\n</script>\n\n<template>\n <div :class=\"style.remote\" @click.stop=\"deselectAll\">\n <div :class=\"style.search\">\n <div>\n <PlDropdown v-model=\"data.storageEntry\" label=\"Select storage\" :options=\"data.storageOptions\" />\n </div>\n <div>\n <PlSearchField v-model=\"data.search\" label=\"Search in folder\" clearable />\n </div>\n </div>\n <div :class=\"style['ls-container']\">\n <div :class=\"style['ls-head']\">\n <div :class=\"style['breadcrumbs']\">\n <template v-for=\"(s, i) in breadcrumbs\" :key=\"i\">\n <div :title=\"s.path\" @click=\"setDirPath(s.path)\">{{ s.name }}</div>\n <PlIcon16 v-if=\"s.index !== breadcrumbs.length - 1\" name=\"chevron-right\" />\n </template>\n </div>\n <div :class=\"style.selected\">\n <span>Selected: {{ selectedFiles.length }}</span>\n <Shortcuts />\n </div>\n </div>\n <div v-if=\"data.currentLoadingPath !== undefined\" class=\"ls-loader\">\n <i class=\"mask-24 mask-loading loader-icon\" />\n </div>\n <div v-else-if=\"!data.storageEntry\" :class=\"style['ls-empty']\">\n <div :class=\"style.cat\" />\n <div :class=\"style.message\">Select storage to preview</div>\n </div>\n <div v-else-if=\"data.error\" :class=\"style['ls-error']\">\n <div :class=\"style.cat\" />\n <div :class=\"style.message\">{{ data.error }}</div>\n </div>\n <div v-else :class=\"style['ls-body']\">\n <template v-for=\"file in visibleItems\" :key=\"file.id\">\n <div v-if=\"file.isDir\" :class=\"style.isDir\" @click=\"setDirPath(file.path)\">\n <PlIcon16 name=\"chevron-right\" />\n <span v-text-overflown :title=\"file.name\">{{ file.name }}</span>\n </div>\n <div\n v-else\n :class=\"{ [style.canBeSelected]: file.canBeSelected, [style.selected]: file.selected }\"\n @click.stop=\"(ev) => selectFile(ev, file)\"\n >\n <PlMaskIcon16 name=\"box\" :class=\"style.isFile\" />\n <span v-text-overflown :title=\"file.name\">{{ file.name }}</span>\n </div>\n </template>\n </div>\n </div>\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport style from './pl-file-dialog.module.scss';\nimport type { ImportedFiles } from '@/types';\nimport { PlIcon24 } from '../PlIcon24';\nimport { computed, reactive } from 'vue';\nimport { getRawPlatformaInstance, type OpenDialogFilter } from '@platforma-sdk/model';\nimport { normalizeExtensions } from './utils';\n\nconst props = defineProps<{\n importFiles: (value: ImportedFiles) => void;\n multi?: boolean;\n extensions?: string[];\n}>();\n\nconst data = reactive({\n error: undefined as unknown,\n});\n\nconst label = computed(() => (props.multi ? 'Drag & Drop files here or click to add' : 'Drag & Drop file here or click to add'));\n\nconst onDrop = async (ev: DragEvent) => {\n const fileToImportHandle = getRawPlatformaInstance()?.lsDriver?.fileToImportHandle;\n\n if (!fileToImportHandle) {\n return console.error('API getPlatformaRawInstance().lsDriver.fileToImportHandle is not available');\n }\n\n const extensions = normalizeExtensions(props.extensions);\n\n const files = await Promise.all(\n [...(ev.dataTransfer?.files ?? [])]\n .filter((f) => !!f)\n .filter((f) => (extensions ? extensions.some((ext) => f.name.endsWith(ext)) : true))\n .map((file) => {\n return fileToImportHandle(file);\n }),\n );\n\n if (files.length) {\n props.importFiles({\n files,\n });\n }\n};\n\nconst openNativeDialog = async () => {\n const filters: OpenDialogFilter[] = props.extensions\n ? [\n {\n name: 'All Files',\n extensions: [...props.extensions],\n },\n ]\n : [];\n\n if (props.multi) {\n getRawPlatformaInstance()?.lsDriver\n .showOpenMultipleFilesDialog({\n title: 'Select files to import',\n filters,\n })\n .then(({ files }) => {\n if (files) {\n props.importFiles({\n files,\n });\n }\n })\n .catch((err) => (data.error = err));\n } else {\n getRawPlatformaInstance()?.lsDriver\n .showOpenSingleFileDialog({\n title: 'Select file to import',\n filters,\n })\n .then(({ file }) => {\n if (file) {\n props.importFiles({\n files: [file],\n });\n }\n })\n .catch((err) => (data.error = err));\n }\n};\n</script>\n\n<template>\n <div :class=\"style.local\" @drop=\"onDrop\" @dragover.prevent @click=\"openNativeDialog\">\n <PlIcon24 name=\"cloud-upload\" />\n <span>{{ label }}</span>\n <span v-if=\"extensions\" :class=\"style.supported\">Supported formats: {{ extensions.join(', ') }}</span>\n <span v-if=\"data.error\" class=\"alert-error\">{{ data.error }}</span>\n </div>\n</template>\n","<script lang=\"ts\" setup>\nimport style from './pl-file-dialog.module.scss';\nimport { computed, ref, useTemplateRef } from 'vue';\nimport { notEmpty } from '@milaboratories/helpers';\nimport type { ImportedFiles, SimpleOption } from '@/types';\nimport { PlDialogModal } from '../PlDialogModal';\nimport { PlBtnPrimary } from '../PlBtnPrimary';\nimport { PlBtnGhost } from '../PlBtnGhost';\nimport { PlBtnGroup } from '../PlBtnGroup';\nimport Remote from './Remote.vue';\nimport Local from './Local.vue';\n\nconst emit = defineEmits<{\n (e: 'update:modelValue', value: boolean): void;\n (e: 'import:files', value: ImportedFiles): void;\n}>();\n\nconst props = withDefaults(\n defineProps<{\n /**\n * Controls the visibility of the modal.\n *\n * When `true`, the modal is open. When `false`, the modal is closed.\n */\n modelValue: boolean;\n /**\n * Specifies the file extensions that are allowed for selection.\n *\n * Provide an array of strings representing file extensions (leading dot can be omitted)\n * If not specified, all file types are allowed.\n */\n extensions?: string[];\n /**\n * Enables the selection of multiple files.\n *\n * When `true`, the user can select multiple files.\n * When `false` or not specified, only a single file can be selected.\n */\n multi?: boolean;\n /**\n * The custom title of the dialog.\n */\n title?: string;\n /**\n * Automatically selects the initial storage option.\n * When `true`, the default storage is pre-selected for the user (default: `true`)\n */\n autoSelectStorage?: boolean;\n /**\n * If `true`, the modal window closes when clicking outside the modal area (default: `true`)\n */\n closeOnOutsideClick?: boolean;\n }>(),\n {\n extensions: undefined,\n title: undefined,\n autoSelectStorage: true,\n closeOnOutsideClick: true,\n },\n);\n\nconst mode = ref<'local' | 'remote'>('local');\n\nconst defaultTitle = computed(() => (props.multi ? 'Select Files to Import' : 'Select File to Import'));\n\nconst modeOptions = [\n {\n label: 'My Computer',\n value: 'local',\n },\n {\n label: 'Remote',\n value: 'remote',\n },\n] satisfies SimpleOption[];\n\nconst closeModal = () => emit('update:modelValue', false);\n\nconst remoteRef = useTemplateRef('remote');\n\nconst submit = () => {\n if (remoteRef.value?.isReady) {\n emit('import:files', notEmpty(remoteRef.value?.getFilesToImport()));\n closeModal();\n }\n};\n\nconst importFiles = (importedFiles: ImportedFiles) => {\n emit('import:files', importedFiles);\n closeModal();\n};\n</script>\n\n<template>\n <PlDialogModal\n :no-content-gutters=\"true\"\n :close-on-outside-click=\"closeOnOutsideClick\"\n class=\"pl-dialog-modal\"\n :class=\"style.component\"\n :model-value=\"modelValue\"\n width=\"688px\"\n height=\"720px\"\n @update:model-value=\"closeModal\"\n >\n <template #title>{{ title ?? defaultTitle }}</template>\n <div style=\"margin: 0 24px\">\n <PlBtnGroup v-model=\"mode\" :options=\"modeOptions\" />\n </div>\n <Remote v-if=\"mode === 'remote'\" ref=\"remote\" v-bind=\"$props\" :submit=\"submit\" />\n <Local v-if=\"mode === 'local'\" :import-files=\"importFiles\" v-bind=\"$props\" />\n <template v-if=\"mode === 'remote'\" #actions>\n <PlBtnPrimary style=\"min-width: 160px\" :disabled=\"!remoteRef?.isReady\" @click.stop=\"submit\">Import</PlBtnPrimary>\n <PlBtnGhost :justify-center=\"false\" @click.stop=\"closeModal\">Cancel</PlBtnGhost>\n </template>\n </PlDialogModal>\n</template>\n","<script lang=\"ts\" setup>\nimport './pl-file-input.scss';\nimport { PlTooltip } from '@/components/PlTooltip';\nimport { PlFileDialog } from '@/components/PlFileDialog';\nimport type { ImportedFiles } from '@/types';\nimport { PlMaskIcon24 } from '../PlMaskIcon24';\nimport { computed, reactive, ref, useSlots, watch } from 'vue';\nimport type { ImportFileHandle, ImportProgress } from '@platforma-sdk/model';\nimport { getFileNameFromHandle, getFilePathFromHandle } from '@platforma-sdk/model';\nimport DoubleContour from '@/utils/DoubleContour.vue';\nimport { useLabelNotch } from '@/utils/useLabelNotch';\nimport { prettyBytes, tryDo } from '@milaboratories/helpers';\n\nconst data = reactive({\n fileDialogOpen: false,\n error: '',\n});\n\nconst slots = useSlots();\n\nconst emit = defineEmits<{\n (e: 'update:modelValue', value: ImportFileHandle | undefined): void;\n}>();\n\nconst props = withDefaults(\n defineProps<{\n /**\n * The current import file handle.\n */\n modelValue: ImportFileHandle | undefined;\n /**\n * The label to display above the input field.\n */\n label?: string;\n /**\n * If `true`, the input field is marked as required.\n */\n required?: boolean;\n /**\n * If `true`, the component border is dashed.\n */\n dashed?: boolean;\n /**\n * Allowed file extensions (should start with `.`)\n */\n extensions?: string[];\n /**\n * Placeholder text\n */\n placeholder?: string;\n /**\n * Import/Upload progress\n */\n progress?: ImportProgress;\n /**\n * An error message to display below the input field.\n */\n error?: unknown;\n /**\n * A helper text to display below the input field when there are no errors.\n */\n helper?: string;\n /**\n * Remove rounded border and change styles\n */\n cellStyle?: boolean;\n /**\n * File dialog title\n */\n fileDialogTitle?: string;\n /**\n * If `true`, the file dialog window closes when clicking outside the modal area (default: `true`)\n */\n fileDialogCloseOnOutsideClick?: boolean;\n }>(),\n {\n label: undefined,\n extensions: undefined,\n fileDialogTitle: undefined,\n placeholder: undefined,\n progress: undefined,\n error: undefined,\n helper: undefined,\n cellStyle: false,\n fileDialogCloseOnOutsideClick: true,\n },\n);\n\nconst tryValue = <T extends ImportFileHandle>(v: T | undefined, cb: (v: T) => string | undefined) => {\n if (!v) {\n return undefined;\n }\n\n try {\n return cb(v);\n } catch (err) {\n data.error = err instanceof Error ? err.message : String(err);\n return v;\n }\n};\n\nconst isErrorObject = (error: unknown): error is { message: string } => {\n return typeof error === 'object' && error != null && 'message' in error && typeof error.message === 'string';\n};\n\nconst fileName = computed(() => tryValue(props.modelValue, getFileNameFromHandle));\n\nconst filePath = computed(() => tryValue(props.modelValue, getFilePathFromHandle));\n\nconst isUploading = computed(() => props.progress && !props.progress.done);\n\nconst isUploaded = computed(() => props.progress && props.progress.done);\n\nconst computedError = computed(() => {\n let message: undefined | string = undefined;\n\n if (data.error.length > 0) {\n message = data.error;\n } else if (typeof props.error === 'string') {\n message = props.error;\n } else if (isErrorObject(props.error)) {\n message = props.error.message;\n } else if (props.error != null) {\n const unknownString = tryDo(() => JSON.stringify(props.error, null, 4), () => String(props.error));\n message = `Unknown error type:\\n${unknownString}`;\n }\n\n if (typeof message === 'string' && message.length === 0) {\n message = 'Empty error';\n }\n\n return message;\n});\n\nconst hasErrors = computed(() => typeof computedError.value === 'string' && computedError.value.length > 0);\n\nconst uploadStats = computed(() => {\n const { status, done } = props.progress ?? {};\n\n if (!status || !status.bytesTotal) {\n return '';\n }\n\n if (status.bytesProcessed && !done) {\n return prettyBytes(status.bytesProcessed, {}) + ' / ' + prettyBytes(status.bytesTotal, {});\n }\n\n return prettyBytes(status.bytesTotal, {});\n});\n\nconst progressStyle = computed(() => {\n const { progress } = props;\n\n if (!progress) {\n return {};\n }\n\n return {\n width: progress.done ? '100%' : Math.round((progress.status?.progress ?? 0) * 100) + '%',\n };\n});\n\nconst openFileDialog = () => {\n data.fileDialogOpen = true;\n};\n\nconst onImport = (v: ImportedFiles) => {\n if (v.files.length) {\n emit('update:modelValue', v.files[0]);\n }\n};\n\nconst clear = () => emit('update:modelValue', undefined);\n\nwatch(\n () => props.modelValue,\n () => {\n data.error = '';\n },\n { immediate: true },\n);\n\nconst rootRef = ref();\n\nif (!props.cellStyle) {\n useLabelNotch(rootRef);\n}\n</script>\n\n<template>\n <div :class=\"{ 'pl-file-input__cell-style': !!cellStyle, 'has-file': !!fileName }\" class=\"pl-file-input__envelope\">\n <div\n ref=\"rootRef\"\n class=\"pl-file-input\"\n tabindex=\"0\"\n :class=\"{ dashed, error: hasErrors }\"\n @keyup.enter=\"openFileDialog\"\n @click.stop=\"openFileDialog\"\n >\n <div class=\"pl-file-input__progress\" :style=\"progressStyle\" />\n <label v-if=\"!cellStyle && label\" ref=\"label\">\n <i v-if=\"required\" class=\"required-icon\" />\n <span>{{ label }}</span>\n <PlTooltip v-if=\"slots.tooltip || filePath\" class=\"info\" position=\"top\">\n <template #tooltip>\n <slot v-if=\"slots.tooltip\" name=\"tooltip\" />\n <template v-else>{{ filePath }}</template>\n </template>\n </PlTooltip>\n </label>\n <PlMaskIcon24 v-if=\"hasErrors\" name=\"restart\" />\n <PlMaskIcon24 v-else-if=\"isUploading\" name=\"cloud-upload\" />\n <PlMaskIcon24 v-else-if=\"isUploaded\" name=\"success\" />\n <PlMaskIcon24 v-else name=\"paper-clip\" />\n <div :data-placeholder=\"placeholder ?? 'Choose file'\" class=\"pl-file-input__filename\">\n {{ fileName }}\n </div>\n <div v-if=\"uploadStats\" class=\"pl-file-input__stats\">{{ uploadStats }}</div>\n <PlMaskIcon24 v-if=\"modelValue\" name=\"close\" @click.stop=\"clear\" />\n <DoubleContour class=\"pl-file-input__contour\" />\n </div>\n <div v-if=\"hasErrors\" class=\"pl-file-input__error\">\n {{ computedError }}\n </div>\n <div v-else-if=\"helper\" class=\"pl-file-input__helper\">{{ helper }}</div>\n </div>\n <PlFileDialog\n v-model=\"data.fileDialogOpen\"\n :extensions=\"extensions\"\n :title=\"fileDialogTitle\"\n :close-on-outside-click=\"fileDialogCloseOnOutsideClick\"\n @import:files=\"onImport\"\n />\n</template>\n","<script setup lang=\"ts\">\nimport { PlBtnGhost } from '../PlBtnGhost';\nimport './pl-notification-alert.scss';\n\nconst props = withDefaults(\n defineProps<{\n type?: 'success' | 'error' | 'warning' | 'neutral';\n width?: string;\n closable?: boolean;\n }>(),\n { type: 'neutral', width: '256px' },\n);\n\nconst model = defineModel({ type: Boolean, default: true });\n\nfunction closeAlert() {\n if (props.closable) {\n model.value = false;\n }\n}\n</script>\n\n<template>\n <div v-if=\"model\" :class=\"type\" :style=\"{ width: `${width}` }\" class=\"pl-notification-alert d-flex flex-column gap-16\">\n <div class=\"pl-notification-alert__wrapper d-flex text-s\">\n <div class=\"pl-notification-alert__content flex-grow-1\">\n <slot />\n </div>\n <div v-if=\"closable\" class=\"pl-notification-alert__close\">\n <PlBtnGhost icon=\"close\" @click.stop=\"closeAlert\" />\n </div>\n </div>\n\n <div v-if=\"!!$slots.actions\" class=\"pl-notification-alert__actions d-flex\">\n <slot name=\"actions\" />\n </div>\n </div>\n</template>\n","<script lang=\"ts\" setup>\nimport { computed } from 'vue';\nimport type { PlChartStackedBarSegment } from './types';\n\nconst props = defineProps<{\n value: PlChartStackedBarSegment[];\n height?: number;\n}>();\n\nconst style = computed(() => ({\n height: props.height ?? '100%',\n minHeight: '82px',\n}));\n\nconst parts = computed(() => {\n const parts = props.value || [];\n const total = parts.reduce((res, it) => res + it.value, 0);\n return parts.map((p) => {\n const fraction = (p.value / total) * 100;\n const label = p.label;\n return {\n color: p.color.toString(),\n description: p.description,\n fraction,\n label,\n };\n });\n});\n\nconst trackTransforms = [-40, -50, -50, -50, -80];\n</script>\n\n<template>\n <div\n :class=\"[$style.component]\" :style=\"style\"\n >\n <div :class=\"$style.track\">\n <div\n v-for=\"(v, i) in [0, 25, 50, 75, 100]\"\n :key=\"i\"\n :style=\"{\n left: `${v}%`,\n '--transform': `translateX(${trackTransforms[i]}%)`\n }\"\n :data-content=\"`${v}%`\"\n />\n </div>\n <div :class=\"$style.container\">\n <div v-if=\"!parts.length\" :class=\"$style.notReady\">Not ready</div>\n <div\n v-for=\"(p, i) in parts\"\n :key=\"i\"\n :title.prop=\"p.description ?? p.label\"\n :style=\"{\n width: `${p.fraction}%`,\n backgroundColor: p.color\n }\"\n />\n </div>\n </div>\n</template>\n\n<style lang=\"scss\" module>\n.component {\n height: auto;\n position: relative;\n overflow: visible;\n border: 1px solid var(--txt-01);\n padding: 12px 6px;\n border-radius: 0;\n margin-bottom: 24px;\n}\n\n.container {\n display: flex;\n flex-direction: row;\n width: 100%;\n height: 100%;\n align-items: center;\n overflow: hidden;\n > div {\n height: 100%;\n display: flex;\n align-items: center;\n }\n}\n\n.track {\n position: absolute;\n top: 0;\n left: 6px;\n right: 6px;\n bottom: 0;\n /* z-index: 1; */\n > div {\n height: 100%;\n position: absolute;\n bottom: 0;\n border-left: 1px solid #e1e3eb;\n &::after {\n position: absolute;\n content: attr(data-content);\n transform: var(--transform);\n left: 0;\n bottom: -24px;\n }\n }\n}\n\n.notReady {\n color: var(--txt-03) !important;\n}\n\n.component .notReady {\n font-size: larger;\n font-weight: bolder;\n color: var(--txt-mask);\n margin-left: 24px;\n}\n\n.component .container {\n position: relative;\n z-index: 1;\n}\n</style>\n","<script lang=\"ts\" setup>\nimport { computed } from 'vue';\nimport type { Color } from '@/colors';\n\nfunction splitBy<T>(arr: T[], n: number): T[][] {\n const res = [];\n let chunk: T[] = [];\n\n for (let i = 0; i < arr.length; i++) {\n if (chunk.length < n) {\n chunk.push(arr[i]);\n } else {\n res.push(chunk);\n chunk = [arr[i]];\n }\n }\n\n res.push(chunk);\n\n return res;\n}\n\nconst props = defineProps<{\n maxInColumn?: number;\n legends: {\n color: string | Color;\n text: string;\n }[];\n}>();\n\nconst groups = computed(() => {\n return splitBy(props.legends, props.maxInColumn ?? 5);\n});\n</script>\n\n<template>\n <div :class=\"$style.component\">\n <div v-for=\"(group, k) in groups\" :key=\"k\" :class=\"$style.legend\">\n <div v-for=\"(l, i) in group\" :key=\"i\" :class=\"$style.item\">\n <div :class=\"$style.chip\" :style=\"{ backgroundColor: l.color.toString() }\" />\n {{ l.text }}\n </div>\n </div>\n </div>\n</template>\n\n<style lang=\"css\" module>\n.component {\n display: flex;\n flex-direction: row;\n gap: 24px;\n justify-content: space-between;\n}\n\n.legend {\n display: flex;\n flex-direction: column;\n gap: 4px;\n flex-wrap: nowrap;\n margin-top: 24px;\n max-height: 120px;\n flex: 1;\n}\n\n.chip {\n width: 16px;\n height: 16px;\n border-radius: 2px;\n flex-grow: 0;\n}\n\n.group {\n display: flex;\n flex-direction: column;\n gap: 4px;\n}\n\n.item {\n display: flex;\n gap: 8px;\n align-items: center;\n font-size: 14px;\n font-weight: 500;\n line-height: 20px;\n color: var(--color-txt-01);\n}\n</style>\n","<script lang=\"ts\" setup>\nimport { computed } from 'vue';\nimport StackedRow from './StackedRow.vue';\nimport Legends from './Legends.vue';\nimport type { PlChartStackedBarSettings } from './types';\n\nconst props = defineProps<{\n settings: PlChartStackedBarSettings;\n}>();\n\nconst showLegends = computed(() => props.settings.showLegends ?? true);\n\nconst data = computed(() => {\n return props.settings.data ?? [];\n});\n\nconst legends = computed(() => data.value.map((p) => ({\n color: p.color,\n text: p.label,\n})));\n</script>\n\n<template>\n <div :class=\"$style.component\">\n <div v-if=\"settings.title\" :class=\"$style.title\">{{ settings.title }}</div>\n <StackedRow :value=\"data\"/>\n <Legends v-if=\"showLegends && legends.length\" :legends=\"legends\" :max-in-column=\"settings.maxLegendsInColumn\" />\n </div>\n</template>\n\n<style lang=\"scss\" module>\n.component {\n display: flex;\n flex-direction: column;\n width: 100%;\n}\n\n.title {\n font-size: 20px;\n font-weight: 500;\n line-height: 24px; /* 120% */\n letter-spacing: -0.2px;\n margin-bottom: 24px;\n}\n</style>\n","<script lang=\"ts\" setup>\nimport { computed } from 'vue';\nimport type { PlChartStackedBarSegment } from './types';\n\nconst props = defineProps<{\n value: PlChartStackedBarSegment[];\n height?: number;\n}>();\n\nconst style = computed(() => ({\n height: props.height ?? '100%',\n minHeight: '24px',\n}));\n\nconst parts = computed(() => {\n const parts = props.value || [];\n const total = parts.reduce((res, it) => res + it.value, 0);\n return parts.map((p) => {\n const fraction = (p.value / total) * 100;\n const label = p.label;\n return {\n color: p.color.toString(),\n description: p.description,\n fraction,\n label,\n };\n });\n});\n</script>\n\n<template>\n <div\n :class=\"[$style.component]\" :style=\"style\"\n >\n <div :class=\"$style.container\">\n <div v-if=\"!parts.length\" :class=\"$style.notReady\">Not ready</div>\n <div\n v-for=\"(p, i) in parts\"\n :key=\"i\"\n :title.prop=\"p.description ?? p.label\"\n :style=\"{\n width: `${p.fraction}%`,\n backgroundColor: p.color\n }\"\n />\n </div>\n </div>\n</template>\n\n<style lang=\"scss\" module>\n.component {\n display: flex;\n position: relative;\n overflow: hidden;\n padding: 0;\n border-radius: 2px;\n\n .notReady {\n color: var(--txt-01);\n font-family: var(--font-family-base);\n font-size: 14px;\n font-style: normal;\n font-weight: 500;\n line-height: 20px;\n }\n\n .container {\n position: relative;\n }\n}\n\n.container {\n display: flex;\n flex-direction: row;\n width: 100%;\n flex: 1;\n align-items: center;\n overflow: hidden;\n > div {\n height: 100%;\n display: flex;\n align-items: center;\n }\n}\n\n.notReady {\n color: var(--txt-03) !important;\n}\n</style>\n","<script lang=\"ts\" setup>\nimport { computed } from 'vue';\nimport type { PlChartStackedBarSettingsCompact } from './types';\nimport StackedRowCompact from './StackedRowCompact.vue';\n\nconst props = defineProps<{\n settings: PlChartStackedBarSettingsCompact;\n}>();\n\nconst data = computed(() => {\n return props.settings.data ?? [];\n});\n</script>\n\n<template>\n <div :class=\"$style.component\">\n <StackedRowCompact :value=\"data\"/>\n </div>\n</template>\n\n<style lang=\"scss\" module>\n.component {\n display: flex;\n flex-direction: column;\n width: 100%;\n}\n</style>\n","export default function ascending(a, b) {\n return a == null || b == null ? NaN : a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;\n}\n","export default function descending(a, b) {\n return a == null || b == null ? NaN\n : b < a ? -1\n : b > a ? 1\n : b >= a ? 0\n : NaN;\n}\n","import ascending from \"./ascending.js\";\nimport descending from \"./descending.js\";\n\nexport default function bisector(f) {\n let compare1, compare2, delta;\n\n // If an accessor is specified, promote it to a comparator. In this case we\n // can test whether the search value is (self-) comparable. We can’t do this\n // for a comparator (except for specific, known comparators) because we can’t\n // tell if the comparator is symmetric, and an asymmetric comparator can’t be\n // used to test whether a single value is comparable.\n if (f.length !== 2) {\n compare1 = ascending;\n compare2 = (d, x) => ascending(f(d), x);\n delta = (d, x) => f(d) - x;\n } else {\n compare1 = f === ascending || f === descending ? f : zero;\n compare2 = f;\n delta = f;\n }\n\n function left(a, x, lo = 0, hi = a.length) {\n if (lo < hi) {\n if (compare1(x, x) !== 0) return hi;\n do {\n const mid = (lo + hi) >>> 1;\n if (compare2(a[mid], x) < 0) lo = mid + 1;\n else hi = mid;\n } while (lo < hi);\n }\n return lo;\n }\n\n function right(a, x, lo = 0, hi = a.length) {\n if (lo < hi) {\n if (compare1(x, x) !== 0) return hi;\n do {\n const mid = (lo + hi) >>> 1;\n if (compare2(a[mid], x) <= 0) lo = mid + 1;\n else hi = mid;\n } while (lo < hi);\n }\n return lo;\n }\n\n function center(a, x, lo = 0, hi = a.length) {\n const i = left(a, x, lo, hi - 1);\n return i > lo && delta(a[i - 1], x) > -delta(a[i], x) ? i - 1 : i;\n }\n\n return {left, center, right};\n}\n\nfunction zero() {\n return 0;\n}\n","export default function number(x) {\n return x === null ? NaN : +x;\n}\n\nexport function* numbers(values, valueof) {\n if (valueof === undefined) {\n for (let value of values) {\n if (value != null && (value = +value) >= value) {\n yield value;\n }\n }\n } else {\n let index = -1;\n for (let value of values) {\n if ((value = valueof(value, ++index, values)) != null && (value = +value) >= value) {\n yield value;\n }\n }\n }\n}\n","import ascending from \"./ascending.js\";\nimport bisector from \"./bisector.js\";\nimport number from \"./number.js\";\n\nconst ascendingBisect = bisector(ascending);\nexport const bisectRight = ascendingBisect.right;\nexport const bisectLeft = ascendingBisect.left;\nexport const bisectCenter = bisector(number).center;\nexport default bisectRight;\n","export default function count(values, valueof) {\n let count = 0;\n if (valueof === undefined) {\n for (let value of values) {\n if (value != null && (value = +value) >= value) {\n ++count;\n }\n }\n } else {\n let index = -1;\n for (let value of values) {\n if ((value = valueof(value, ++index, values)) != null && (value = +value) >= value) {\n ++count;\n }\n }\n }\n return count;\n}\n","export default function extent(values, valueof) {\n let min;\n let max;\n if (valueof === undefined) {\n for (const value of values) {\n if (value != null) {\n if (min === undefined) {\n if (value >= value) min = max = value;\n } else {\n if (min > value) min = value;\n if (max < value) max = value;\n }\n }\n }\n } else {\n let index = -1;\n for (let value of values) {\n if ((value = valueof(value, ++index, values)) != null) {\n if (min === undefined) {\n if (value >= value) min = max = value;\n } else {\n if (min > value) min = value;\n if (max < value) max = value;\n }\n }\n }\n }\n return [min, max];\n}\n","export default function identity(x) {\n return x;\n}\n","var array = Array.prototype;\n\nexport var slice = array.slice;\nexport var map = array.map;\n","export default function constant(x) {\n return () => x;\n}\n","const e10 = Math.sqrt(50),\n e5 = Math.sqrt(10),\n e2 = Math.sqrt(2);\n\nfunction tickSpec(start, stop, count) {\n const step = (stop - start) / Math.max(0, count),\n power = Math.floor(Math.log10(step)),\n error = step / Math.pow(10, power),\n factor = error >= e10 ? 10 : error >= e5 ? 5 : error >= e2 ? 2 : 1;\n let i1, i2, inc;\n if (power < 0) {\n inc = Math.pow(10, -power) / factor;\n i1 = Math.round(start * inc);\n i2 = Math.round(stop * inc);\n if (i1 / inc < start) ++i1;\n if (i2 / inc > stop) --i2;\n inc = -inc;\n } else {\n inc = Math.pow(10, power) * factor;\n i1 = Math.round(start / inc);\n i2 = Math.round(stop / inc);\n if (i1 * inc < start) ++i1;\n if (i2 * inc > stop) --i2;\n }\n if (i2 < i1 && 0.5 <= count && count < 2) return tickSpec(start, stop, count * 2);\n return [i1, i2, inc];\n}\n\nexport default function ticks(start, stop, count) {\n stop = +stop, start = +start, count = +count;\n if (!(count > 0)) return [];\n if (start === stop) return [start];\n const reverse = stop < start, [i1, i2, inc] = reverse ? tickSpec(stop, start, count) : tickSpec(start, stop, count);\n if (!(i2 >= i1)) return [];\n const n = i2 - i1 + 1, ticks = new Array(n);\n if (reverse) {\n if (inc < 0) for (let i = 0; i < n; ++i) ticks[i] = (i2 - i) / -inc;\n else for (let i = 0; i < n; ++i) ticks[i] = (i2 - i) * inc;\n } else {\n if (inc < 0) for (let i = 0; i < n; ++i) ticks[i] = (i1 + i) / -inc;\n else for (let i = 0; i < n; ++i) ticks[i] = (i1 + i) * inc;\n }\n return ticks;\n}\n\nexport function tickIncrement(start, stop, count) {\n stop = +stop, start = +start, count = +count;\n return tickSpec(start, stop, count)[2];\n}\n\nexport function tickStep(start, stop, count) {\n stop = +stop, start = +start, count = +count;\n const reverse = stop < start, inc = reverse ? tickIncrement(stop, start, count) : tickIncrement(start, stop, count);\n return (reverse ? -1 : 1) * (inc < 0 ? 1 / -inc : inc);\n}\n","import {tickIncrement} from \"./ticks.js\";\n\nexport default function nice(start, stop, count) {\n let prestep;\n while (true) {\n const step = tickIncrement(start, stop, count);\n if (step === prestep || step === 0 || !isFinite(step)) {\n return [start, stop];\n } else if (step > 0) {\n start = Math.floor(start / step) * step;\n stop = Math.ceil(stop / step) * step;\n } else if (step < 0) {\n start = Math.ceil(start * step) / step;\n stop = Math.floor(stop * step) / step;\n }\n prestep = step;\n }\n}\n","import count from \"../count.js\";\n\nexport default function thresholdSturges(values) {\n return Math.max(1, Math.ceil(Math.log(count(values)) / Math.LN2) + 1);\n}\n","import {slice} from \"./array.js\";\nimport bisect from \"./bisect.js\";\nimport constant from \"./constant.js\";\nimport extent from \"./extent.js\";\nimport identity from \"./identity.js\";\nimport nice from \"./nice.js\";\nimport ticks, {tickIncrement} from \"./ticks.js\";\nimport sturges from \"./threshold/sturges.js\";\n\nexport default function bin() {\n var value = identity,\n domain = extent,\n threshold = sturges;\n\n function histogram(data) {\n if (!Array.isArray(data)) data = Array.from(data);\n\n var i,\n n = data.length,\n x,\n step,\n values = new Array(n);\n\n for (i = 0; i < n; ++i) {\n values[i] = value(data[i], i, data);\n }\n\n var xz = domain(values),\n x0 = xz[0],\n x1 = xz[1],\n tz = threshold(values, x0, x1);\n\n // Convert number of thresholds into uniform thresholds, and nice the\n // default domain accordingly.\n if (!Array.isArray(tz)) {\n const max = x1, tn = +tz;\n if (domain === extent) [x0, x1] = nice(x0, x1, tn);\n tz = ticks(x0, x1, tn);\n\n // If the domain is aligned with the first tick (which it will by\n // default), then we can use quantization rather than bisection to bin\n // values, which is substantially faster.\n if (tz[0] <= x0) step = tickIncrement(x0, x1, tn);\n\n // If the last threshold is coincident with the domain’s upper bound, the\n // last bin will be zero-width. If the default domain is used, and this\n // last threshold is coincident with the maximum input value, we can\n // extend the niced upper bound by one tick to ensure uniform bin widths;\n // otherwise, we simply remove the last threshold. Note that we don’t\n // coerce values or the domain to numbers, and thus must be careful to\n // compare order (>=) rather than strict equality (===)!\n if (tz[tz.length - 1] >= x1) {\n if (max >= x1 && domain === extent) {\n const step = tickIncrement(x0, x1, tn);\n if (isFinite(step)) {\n if (step > 0) {\n x1 = (Math.floor(x1 / step) + 1) * step;\n } else if (step < 0) {\n x1 = (Math.ceil(x1 * -step) + 1) / -step;\n }\n }\n } else {\n tz.pop();\n }\n }\n }\n\n // Remove any thresholds outside the domain.\n // Be careful not to mutate an array owned by the user!\n var m = tz.length, a = 0, b = m;\n while (tz[a] <= x0) ++a;\n while (tz[b - 1] > x1) --b;\n if (a || b < m) tz = tz.slice(a, b), m = b - a;\n\n var bins = new Array(m + 1),\n bin;\n\n // Initialize bins.\n for (i = 0; i <= m; ++i) {\n bin = bins[i] = [];\n bin.x0 = i > 0 ? tz[i - 1] : x0;\n bin.x1 = i < m ? tz[i] : x1;\n }\n\n // Assign data to bins by value, ignoring any outside the domain.\n if (isFinite(step)) {\n if (step > 0) {\n for (i = 0; i < n; ++i) {\n if ((x = values[i]) != null && x0 <= x && x <= x1) {\n bins[Math.min(m, Math.floor((x - x0) / step))].push(data[i]);\n }\n }\n } else if (step < 0) {\n for (i = 0; i < n; ++i) {\n if ((x = values[i]) != null && x0 <= x && x <= x1) {\n const j = Math.floor((x0 - x) * step);\n bins[Math.min(m, j + (tz[j] <= x))].push(data[i]); // handle off-by-one due to rounding\n }\n }\n }\n } else {\n for (i = 0; i < n; ++i) {\n if ((x = values[i]) != null && x0 <= x && x <= x1) {\n bins[bisect(tz, x, 0, m)].push(data[i]);\n }\n }\n }\n\n return bins;\n }\n\n histogram.value = function(_) {\n return arguments.length ? (value = typeof _ === \"function\" ? _ : constant(_), histogram) : value;\n };\n\n histogram.domain = function(_) {\n return arguments.length ? (domain = typeof _ === \"function\" ? _ : constant([_[0], _[1]]), histogram) : domain;\n };\n\n histogram.thresholds = function(_) {\n return arguments.length ? (threshold = typeof _ === \"function\" ? _ : constant(Array.isArray(_) ? slice.call(_) : _), histogram) : threshold;\n };\n\n return histogram;\n}\n","export default function max(values, valueof) {\n let max;\n if (valueof === undefined) {\n for (const value of values) {\n if (value != null\n && (max < value || (max === undefined && value >= value))) {\n max = value;\n }\n }\n } else {\n let index = -1;\n for (let value of values) {\n if ((value = valueof(value, ++index, values)) != null\n && (max < value || (max === undefined && value >= value))) {\n max = value;\n }\n }\n }\n return max;\n}\n","export default function min(values, valueof) {\n let min;\n if (valueof === undefined) {\n for (const value of values) {\n if (value != null\n && (min > value || (min === undefined && value >= value))) {\n min = value;\n }\n }\n } else {\n let index = -1;\n for (let value of values) {\n if ((value = valueof(value, ++index, values)) != null\n && (min > value || (min === undefined && value >= value))) {\n min = value;\n }\n }\n }\n return min;\n}\n","export default function(x) {\n return x;\n}\n","import identity from \"./identity.js\";\n\nvar top = 1,\n right = 2,\n bottom = 3,\n left = 4,\n epsilon = 1e-6;\n\nfunction translateX(x) {\n return \"translate(\" + x + \",0)\";\n}\n\nfunction translateY(y) {\n return \"translate(0,\" + y + \")\";\n}\n\nfunction number(scale) {\n return d => +scale(d);\n}\n\nfunction center(scale, offset) {\n offset = Math.max(0, scale.bandwidth() - offset * 2) / 2;\n if (scale.round()) offset = Math.round(offset);\n return d => +scale(d) + offset;\n}\n\nfunction entering() {\n return !this.__axis;\n}\n\nfunction axis(orient, scale) {\n var tickArguments = [],\n tickValues = null,\n tickFormat = null,\n tickSizeInner = 6,\n tickSizeOuter = 6,\n tickPadding = 3,\n offset = typeof window !== \"undefined\" && window.devicePixelRatio > 1 ? 0 : 0.5,\n k = orient === top || orient === left ? -1 : 1,\n x = orient === left || orient === right ? \"x\" : \"y\",\n transform = orient === top || orient === bottom ? translateX : translateY;\n\n function axis(context) {\n var values = tickValues == null ? (scale.ticks ? scale.ticks.apply(scale, tickArguments) : scale.domain()) : tickValues,\n format = tickFormat == null ? (scale.tickFormat ? scale.tickFormat.apply(scale, tickArguments) : identity) : tickFormat,\n spacing = Math.max(tickSizeInner, 0) + tickPadding,\n range = scale.range(),\n range0 = +range[0] + offset,\n range1 = +range[range.length - 1] + offset,\n position = (scale.bandwidth ? center : number)(scale.copy(), offset),\n selection = context.selection ? context.selection() : context,\n path = selection.selectAll(\".domain\").data([null]),\n tick = selection.selectAll(\".tick\").data(values, scale).order(),\n tickExit = tick.exit(),\n tickEnter = tick.enter().append(\"g\").attr(\"class\", \"tick\"),\n line = tick.select(\"line\"),\n text = tick.select(\"text\");\n\n path = path.merge(path.enter().insert(\"path\", \".tick\")\n .attr(\"class\", \"domain\")\n .attr(\"stroke\", \"currentColor\"));\n\n tick = tick.merge(tickEnter);\n\n line = line.merge(tickEnter.append(\"line\")\n .attr(\"stroke\", \"currentColor\")\n .attr(x + \"2\", k * tickSizeInner));\n\n text = text.merge(tickEnter.append(\"text\")\n .attr(\"fill\", \"currentColor\")\n .attr(x, k * spacing)\n .attr(\"dy\", orient === top ? \"0em\" : orient === bottom ? \"0.71em\" : \"0.32em\"));\n\n if (context !== selection) {\n path = path.transition(context);\n tick = tick.transition(context);\n line = line.transition(context);\n text = text.transition(context);\n\n tickExit = tickExit.transition(context)\n .attr(\"opacity\", epsilon)\n .attr(\"transform\", function(d) { return isFinite(d = position(d)) ? transform(d + offset) : this.getAttribute(\"transform\"); });\n\n tickEnter\n .attr(\"opacity\", epsilon)\n .attr(\"transform\", function(d) { var p = this.parentNode.__axis; return transform((p && isFinite(p = p(d)) ? p : position(d)) + offset); });\n }\n\n tickExit.remove();\n\n path\n .attr(\"d\", orient === left || orient === right\n ? (tickSizeOuter ? \"M\" + k * tickSizeOuter + \",\" + range0 + \"H\" + offset + \"V\" + range1 + \"H\" + k * tickSizeOuter : \"M\" + offset + \",\" + range0 + \"V\" + range1)\n : (tickSizeOuter ? \"M\" + range0 + \",\" + k * tickSizeOuter + \"V\" + offset + \"H\" + range1 + \"V\" + k * tickSizeOuter : \"M\" + range0 + \",\" + offset + \"H\" + range1));\n\n tick\n .attr(\"opacity\", 1)\n .attr(\"transform\", function(d) { return transform(position(d) + offset); });\n\n line\n .attr(x + \"2\", k * tickSizeInner);\n\n text\n .attr(x, k * spacing)\n .text(format);\n\n selection.filter(entering)\n .attr(\"fill\", \"none\")\n .attr(\"font-size\", 10)\n .attr(\"font-family\", \"sans-serif\")\n .attr(\"text-anchor\", orient === right ? \"start\" : orient === left ? \"end\" : \"middle\");\n\n selection\n .each(function() { this.__axis = position; });\n }\n\n axis.scale = function(_) {\n return arguments.length ? (scale = _, axis) : scale;\n };\n\n axis.ticks = function() {\n return tickArguments = Array.from(arguments), axis;\n };\n\n axis.tickArguments = function(_) {\n return arguments.length ? (tickArguments = _ == null ? [] : Array.from(_), axis) : tickArguments.slice();\n };\n\n axis.tickValues = function(_) {\n return arguments.length ? (tickValues = _ == null ? null : Array.from(_), axis) : tickValues && tickValues.slice();\n };\n\n axis.tickFormat = function(_) {\n return arguments.length ? (tickFormat = _, axis) : tickFormat;\n };\n\n axis.tickSize = function(_) {\n return arguments.length ? (tickSizeInner = tickSizeOuter = +_, axis) : tickSizeInner;\n };\n\n axis.tickSizeInner = function(_) {\n return arguments.length ? (tickSizeInner = +_, axis) : tickSizeInner;\n };\n\n axis.tickSizeOuter = function(_) {\n return arguments.length ? (tickSizeOuter = +_, axis) : tickSizeOuter;\n };\n\n axis.tickPadding = function(_) {\n return arguments.length ? (tickPadding = +_, axis) : tickPadding;\n };\n\n axis.offset = function(_) {\n return arguments.length ? (offset = +_, axis) : offset;\n };\n\n return axis;\n}\n\nexport function axisTop(scale) {\n return axis(top, scale);\n}\n\nexport function axisRight(scale) {\n return axis(right, scale);\n}\n\nexport function axisBottom(scale) {\n return axis(bottom, scale);\n}\n\nexport function axisLeft(scale) {\n return axis(left, scale);\n}\n","var noop = {value: () => {}};\n\nfunction dispatch() {\n for (var i = 0, n = arguments.length, _ = {}, t; i < n; ++i) {\n if (!(t = arguments[i] + \"\") || (t in _) || /[\\s.]/.test(t)) throw new Error(\"illegal type: \" + t);\n _[t] = [];\n }\n return new Dispatch(_);\n}\n\nfunction Dispatch(_) {\n this._ = _;\n}\n\nfunction parseTypenames(typenames, types) {\n return typenames.trim().split(/^|\\s+/).map(function(t) {\n var name = \"\", i = t.indexOf(\".\");\n if (i >= 0) name = t.slice(i + 1), t = t.slice(0, i);\n if (t && !types.hasOwnProperty(t)) throw new Error(\"unknown type: \" + t);\n return {type: t, name: name};\n });\n}\n\nDispatch.prototype = dispatch.prototype = {\n constructor: Dispatch,\n on: function(typename, callback) {\n var _ = this._,\n T = parseTypenames(typename + \"\", _),\n t,\n i = -1,\n n = T.length;\n\n // If no callback was specified, return the callback of the given type and name.\n if (arguments.length < 2) {\n while (++i < n) if ((t = (typename = T[i]).type) && (t = get(_[t], typename.name))) return t;\n return;\n }\n\n // If a type was specified, set the callback for the given type and name.\n // Otherwise, if a null callback was specified, remove callbacks of the given name.\n if (callback != null && typeof callback !== \"function\") throw new Error(\"invalid callback: \" + callback);\n while (++i < n) {\n if (t = (typename = T[i]).type) _[t] = set(_[t], typename.name, callback);\n else if (callback == null) for (t in _) _[t] = set(_[t], typename.name, null);\n }\n\n return this;\n },\n copy: function() {\n var copy = {}, _ = this._;\n for (var t in _) copy[t] = _[t].slice();\n return new Dispatch(copy);\n },\n call: function(type, that) {\n if ((n = arguments.length - 2) > 0) for (var args = new Array(n), i = 0, n, t; i < n; ++i) args[i] = arguments[i + 2];\n if (!this._.hasOwnProperty(type)) throw new Error(\"unknown type: \" + type);\n for (t = this._[type], i = 0, n = t.length; i < n; ++i) t[i].value.apply(that, args);\n },\n apply: function(type, that, args) {\n if (!this._.hasOwnProperty(type)) throw new Error(\"unknown type: \" + type);\n for (var t = this._[type], i = 0, n = t.length; i < n; ++i) t[i].value.apply(that, args);\n }\n};\n\nfunction get(type, name) {\n for (var i = 0, n = type.length, c; i < n; ++i) {\n if ((c = type[i]).name === name) {\n return c.value;\n }\n }\n}\n\nfunction set(type, name, callback) {\n for (var i = 0, n = type.length; i < n; ++i) {\n if (type[i].name === name) {\n type[i] = noop, type = type.slice(0, i).concat(type.slice(i + 1));\n break;\n }\n }\n if (callback != null) type.push({name: name, value: callback});\n return type;\n}\n\nexport default dispatch;\n","export var xhtml = \"http://www.w3.org/1999/xhtml\";\n\nexport default {\n svg: \"http://www.w3.org/2000/svg\",\n xhtml: xhtml,\n xlink: \"http://www.w3.org/1999/xlink\",\n xml: \"http://www.w3.org/XML/1998/namespace\",\n xmlns: \"http://www.w3.org/2000/xmlns/\"\n};\n","import namespaces from \"./namespaces.js\";\n\nexport default function(name) {\n var prefix = name += \"\", i = prefix.indexOf(\":\");\n if (i >= 0 && (prefix = name.slice(0, i)) !== \"xmlns\") name = name.slice(i + 1);\n return namespaces.hasOwnProperty(prefix) ? {space: namespaces[prefix], local: name} : name; // eslint-disable-line no-prototype-builtins\n}\n","import namespace from \"./namespace.js\";\nimport {xhtml} from \"./namespaces.js\";\n\nfunction creatorInherit(name) {\n return function() {\n var document = this.ownerDocument,\n uri = this.namespaceURI;\n return uri === xhtml && document.documentElement.namespaceURI === xhtml\n ? document.createElement(name)\n : document.createElementNS(uri, name);\n };\n}\n\nfunction creatorFixed(fullname) {\n return function() {\n return this.ownerDocument.createElementNS(fullname.space, fullname.local);\n };\n}\n\nexport default function(name) {\n var fullname = namespace(name);\n return (fullname.local\n ? creatorFixed\n : creatorInherit)(fullname);\n}\n","function none() {}\n\nexport default function(selector) {\n return selector == null ? none : function() {\n return this.querySelector(selector);\n };\n}\n","import {Selection} from \"./index.js\";\nimport selector from \"../selector.js\";\n\nexport default function(select) {\n if (typeof select !== \"function\") select = selector(select);\n\n for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, subgroup = subgroups[j] = new Array(n), node, subnode, i = 0; i < n; ++i) {\n if ((node = group[i]) && (subnode = select.call(node, node.__data__, i, group))) {\n if (\"__data__\" in node) subnode.__data__ = node.__data__;\n subgroup[i] = subnode;\n }\n }\n }\n\n return new Selection(subgroups, this._parents);\n}\n","// Given something array like (or null), returns something that is strictly an\n// array. This is used to ensure that array-like objects passed to d3.selectAll\n// or selection.selectAll are converted into proper arrays when creating a\n// selection; we don’t ever want to create a selection backed by a live\n// HTMLCollection or NodeList. However, note that selection.selectAll will use a\n// static NodeList as a group, since it safely derived from querySelectorAll.\nexport default function array(x) {\n return x == null ? [] : Array.isArray(x) ? x : Array.from(x);\n}\n","function empty() {\n return [];\n}\n\nexport default function(selector) {\n return selector == null ? empty : function() {\n return this.querySelectorAll(selector);\n };\n}\n","import {Selection} from \"./index.js\";\nimport array from \"../array.js\";\nimport selectorAll from \"../selectorAll.js\";\n\nfunction arrayAll(select) {\n return function() {\n return array(select.apply(this, arguments));\n };\n}\n\nexport default function(select) {\n if (typeof select === \"function\") select = arrayAll(select);\n else select = selectorAll(select);\n\n for (var groups = this._groups, m = groups.length, subgroups = [], parents = [], j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n if (node = group[i]) {\n subgroups.push(select.call(node, node.__data__, i, group));\n parents.push(node);\n }\n }\n }\n\n return new Selection(subgroups, parents);\n}\n","export default function(selector) {\n return function() {\n return this.matches(selector);\n };\n}\n\nexport function childMatcher(selector) {\n return function(node) {\n return node.matches(selector);\n };\n}\n\n","import {childMatcher} from \"../matcher.js\";\n\nvar find = Array.prototype.find;\n\nfunction childFind(match) {\n return function() {\n return find.call(this.children, match);\n };\n}\n\nfunction childFirst() {\n return this.firstElementChild;\n}\n\nexport default function(match) {\n return this.select(match == null ? childFirst\n : childFind(typeof match === \"function\" ? match : childMatcher(match)));\n}\n","import {childMatcher} from \"../matcher.js\";\n\nvar filter = Array.prototype.filter;\n\nfunction children() {\n return Array.from(this.children);\n}\n\nfunction childrenFilter(match) {\n return function() {\n return filter.call(this.children, match);\n };\n}\n\nexport default function(match) {\n return this.selectAll(match == null ? children\n : childrenFilter(typeof match === \"function\" ? match : childMatcher(match)));\n}\n","import {Selection} from \"./index.js\";\nimport matcher from \"../matcher.js\";\n\nexport default function(match) {\n if (typeof match !== \"function\") match = matcher(match);\n\n for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, subgroup = subgroups[j] = [], node, i = 0; i < n; ++i) {\n if ((node = group[i]) && match.call(node, node.__data__, i, group)) {\n subgroup.push(node);\n }\n }\n }\n\n return new Selection(subgroups, this._parents);\n}\n","export default function(update) {\n return new Array(update.length);\n}\n","import sparse from \"./sparse.js\";\nimport {Selection} from \"./index.js\";\n\nexport default function() {\n return new Selection(this._enter || this._groups.map(sparse), this._parents);\n}\n\nexport function EnterNode(parent, datum) {\n this.ownerDocument = parent.ownerDocument;\n this.namespaceURI = parent.namespaceURI;\n this._next = null;\n this._parent = parent;\n this.__data__ = datum;\n}\n\nEnterNode.prototype = {\n constructor: EnterNode,\n appendChild: function(child) { return this._parent.insertBefore(child, this._next); },\n insertBefore: function(child, next) { return this._parent.insertBefore(child, next); },\n querySelector: function(selector) { return this._parent.querySelector(selector); },\n querySelectorAll: function(selector) { return this._parent.querySelectorAll(selector); }\n};\n","export default function(x) {\n return function() {\n return x;\n };\n}\n","import {Selection} from \"./index.js\";\nimport {EnterNode} from \"./enter.js\";\nimport constant from \"../constant.js\";\n\nfunction bindIndex(parent, group, enter, update, exit, data) {\n var i = 0,\n node,\n groupLength = group.length,\n dataLength = data.length;\n\n // Put any non-null nodes that fit into update.\n // Put any null nodes into enter.\n // Put any remaining data into enter.\n for (; i < dataLength; ++i) {\n if (node = group[i]) {\n node.__data__ = data[i];\n update[i] = node;\n } else {\n enter[i] = new EnterNode(parent, data[i]);\n }\n }\n\n // Put any non-null nodes that don’t fit into exit.\n for (; i < groupLength; ++i) {\n if (node = group[i]) {\n exit[i] = node;\n }\n }\n}\n\nfunction bindKey(parent, group, enter, update, exit, data, key) {\n var i,\n node,\n nodeByKeyValue = new Map,\n groupLength = group.length,\n dataLength = data.length,\n keyValues = new Array(groupLength),\n keyValue;\n\n // Compute the key for each node.\n // If multiple nodes have the same key, the duplicates are added to exit.\n for (i = 0; i < groupLength; ++i) {\n if (node = group[i]) {\n keyValues[i] = keyValue = key.call(node, node.__data__, i, group) + \"\";\n if (nodeByKeyValue.has(keyValue)) {\n exit[i] = node;\n } else {\n nodeByKeyValue.set(keyValue, node);\n }\n }\n }\n\n // Compute the key for each datum.\n // If there a node associated with this key, join and add it to update.\n // If there is not (or the key is a duplicate), add it to enter.\n for (i = 0; i < dataLength; ++i) {\n keyValue = key.call(parent, data[i], i, data) + \"\";\n if (node = nodeByKeyValue.get(keyValue)) {\n update[i] = node;\n node.__data__ = data[i];\n nodeByKeyValue.delete(keyValue);\n } else {\n enter[i] = new EnterNode(parent, data[i]);\n }\n }\n\n // Add any remaining nodes that were not bound to data to exit.\n for (i = 0; i < groupLength; ++i) {\n if ((node = group[i]) && (nodeByKeyValue.get(keyValues[i]) === node)) {\n exit[i] = node;\n }\n }\n}\n\nfunction datum(node) {\n return node.__data__;\n}\n\nexport default function(value, key) {\n if (!arguments.length) return Array.from(this, datum);\n\n var bind = key ? bindKey : bindIndex,\n parents = this._parents,\n groups = this._groups;\n\n if (typeof value !== \"function\") value = constant(value);\n\n for (var m = groups.length, update = new Array(m), enter = new Array(m), exit = new Array(m), j = 0; j < m; ++j) {\n var parent = parents[j],\n group = groups[j],\n groupLength = group.length,\n data = arraylike(value.call(parent, parent && parent.__data__, j, parents)),\n dataLength = data.length,\n enterGroup = enter[j] = new Array(dataLength),\n updateGroup = update[j] = new Array(dataLength),\n exitGroup = exit[j] = new Array(groupLength);\n\n bind(parent, group, enterGroup, updateGroup, exitGroup, data, key);\n\n // Now connect the enter nodes to their following update node, such that\n // appendChild can insert the materialized enter node before this node,\n // rather than at the end of the parent node.\n for (var i0 = 0, i1 = 0, previous, next; i0 < dataLength; ++i0) {\n if (previous = enterGroup[i0]) {\n if (i0 >= i1) i1 = i0 + 1;\n while (!(next = updateGroup[i1]) && ++i1 < dataLength);\n previous._next = next || null;\n }\n }\n }\n\n update = new Selection(update, parents);\n update._enter = enter;\n update._exit = exit;\n return update;\n}\n\n// Given some data, this returns an array-like view of it: an object that\n// exposes a length property and allows numeric indexing. Note that unlike\n// selectAll, this isn’t worried about “live” collections because the resulting\n// array will only be used briefly while data is being bound. (It is possible to\n// cause the data to change while iterating by using a key function, but please\n// don’t; we’d rather avoid a gratuitous copy.)\nfunction arraylike(data) {\n return typeof data === \"object\" && \"length\" in data\n ? data // Array, TypedArray, NodeList, array-like\n : Array.from(data); // Map, Set, iterable, string, or anything else\n}\n","import sparse from \"./sparse.js\";\nimport {Selection} from \"./index.js\";\n\nexport default function() {\n return new Selection(this._exit || this._groups.map(sparse), this._parents);\n}\n","export default function(onenter, onupdate, onexit) {\n var enter = this.enter(), update = this, exit = this.exit();\n if (typeof onenter === \"function\") {\n enter = onenter(enter);\n if (enter) enter = enter.selection();\n } else {\n enter = enter.append(onenter + \"\");\n }\n if (onupdate != null) {\n update = onupdate(update);\n if (update) update = update.selection();\n }\n if (onexit == null) exit.remove(); else onexit(exit);\n return enter && update ? enter.merge(update).order() : update;\n}\n","import {Selection} from \"./index.js\";\n\nexport default function(context) {\n var selection = context.selection ? context.selection() : context;\n\n for (var groups0 = this._groups, groups1 = selection._groups, m0 = groups0.length, m1 = groups1.length, m = Math.min(m0, m1), merges = new Array(m0), j = 0; j < m; ++j) {\n for (var group0 = groups0[j], group1 = groups1[j], n = group0.length, merge = merges[j] = new Array(n), node, i = 0; i < n; ++i) {\n if (node = group0[i] || group1[i]) {\n merge[i] = node;\n }\n }\n }\n\n for (; j < m0; ++j) {\n merges[j] = groups0[j];\n }\n\n return new Selection(merges, this._parents);\n}\n","export default function() {\n\n for (var groups = this._groups, j = -1, m = groups.length; ++j < m;) {\n for (var group = groups[j], i = group.length - 1, next = group[i], node; --i >= 0;) {\n if (node = group[i]) {\n if (next && node.compareDocumentPosition(next) ^ 4) next.parentNode.insertBefore(node, next);\n next = node;\n }\n }\n }\n\n return this;\n}\n","import {Selection} from \"./index.js\";\n\nexport default function(compare) {\n if (!compare) compare = ascending;\n\n function compareNode(a, b) {\n return a && b ? compare(a.__data__, b.__data__) : !a - !b;\n }\n\n for (var groups = this._groups, m = groups.length, sortgroups = new Array(m), j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, sortgroup = sortgroups[j] = new Array(n), node, i = 0; i < n; ++i) {\n if (node = group[i]) {\n sortgroup[i] = node;\n }\n }\n sortgroup.sort(compareNode);\n }\n\n return new Selection(sortgroups, this._parents).order();\n}\n\nfunction ascending(a, b) {\n return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;\n}\n","export default function() {\n var callback = arguments[0];\n arguments[0] = this;\n callback.apply(null, arguments);\n return this;\n}\n","export default function() {\n return Array.from(this);\n}\n","export default function() {\n\n for (var groups = this._groups, j = 0, m = groups.length; j < m; ++j) {\n for (var group = groups[j], i = 0, n = group.length; i < n; ++i) {\n var node = group[i];\n if (node) return node;\n }\n }\n\n return null;\n}\n","export default function() {\n let size = 0;\n for (const node of this) ++size; // eslint-disable-line no-unused-vars\n return size;\n}\n","export default function() {\n return !this.node();\n}\n","export default function(callback) {\n\n for (var groups = this._groups, j = 0, m = groups.length; j < m; ++j) {\n for (var group = groups[j], i = 0, n = group.length, node; i < n; ++i) {\n if (node = group[i]) callback.call(node, node.__data__, i, group);\n }\n }\n\n return this;\n}\n","import namespace from \"../namespace.js\";\n\nfunction attrRemove(name) {\n return function() {\n this.removeAttribute(name);\n };\n}\n\nfunction attrRemoveNS(fullname) {\n return function() {\n this.removeAttributeNS(fullname.space, fullname.local);\n };\n}\n\nfunction attrConstant(name, value) {\n return function() {\n this.setAttribute(name, value);\n };\n}\n\nfunction attrConstantNS(fullname, value) {\n return function() {\n this.setAttributeNS(fullname.space, fullname.local, value);\n };\n}\n\nfunction attrFunction(name, value) {\n return function() {\n var v = value.apply(this, arguments);\n if (v == null) this.removeAttribute(name);\n else this.setAttribute(name, v);\n };\n}\n\nfunction attrFunctionNS(fullname, value) {\n return function() {\n var v = value.apply(this, arguments);\n if (v == null) this.removeAttributeNS(fullname.space, fullname.local);\n else this.setAttributeNS(fullname.space, fullname.local, v);\n };\n}\n\nexport default function(name, value) {\n var fullname = namespace(name);\n\n if (arguments.length < 2) {\n var node = this.node();\n return fullname.local\n ? node.getAttributeNS(fullname.space, fullname.local)\n : node.getAttribute(fullname);\n }\n\n return this.each((value == null\n ? (fullname.local ? attrRemoveNS : attrRemove) : (typeof value === \"function\"\n ? (fullname.local ? attrFunctionNS : attrFunction)\n : (fullname.local ? attrConstantNS : attrConstant)))(fullname, value));\n}\n","export default function(node) {\n return (node.ownerDocument && node.ownerDocument.defaultView) // node is a Node\n || (node.document && node) // node is a Window\n || node.defaultView; // node is a Document\n}\n","import defaultView from \"../window.js\";\n\nfunction styleRemove(name) {\n return function() {\n this.style.removeProperty(name);\n };\n}\n\nfunction styleConstant(name, value, priority) {\n return function() {\n this.style.setProperty(name, value, priority);\n };\n}\n\nfunction styleFunction(name, value, priority) {\n return function() {\n var v = value.apply(this, arguments);\n if (v == null) this.style.removeProperty(name);\n else this.style.setProperty(name, v, priority);\n };\n}\n\nexport default function(name, value, priority) {\n return arguments.length > 1\n ? this.each((value == null\n ? styleRemove : typeof value === \"function\"\n ? styleFunction\n : styleConstant)(name, value, priority == null ? \"\" : priority))\n : styleValue(this.node(), name);\n}\n\nexport function styleValue(node, name) {\n return node.style.getPropertyValue(name)\n || defaultView(node).getComputedStyle(node, null).getPropertyValue(name);\n}\n","function propertyRemove(name) {\n return function() {\n delete this[name];\n };\n}\n\nfunction propertyConstant(name, value) {\n return function() {\n this[name] = value;\n };\n}\n\nfunction propertyFunction(name, value) {\n return function() {\n var v = value.apply(this, arguments);\n if (v == null) delete this[name];\n else this[name] = v;\n };\n}\n\nexport default function(name, value) {\n return arguments.length > 1\n ? this.each((value == null\n ? propertyRemove : typeof value === \"function\"\n ? propertyFunction\n : propertyConstant)(name, value))\n : this.node()[name];\n}\n","function classArray(string) {\n return string.trim().split(/^|\\s+/);\n}\n\nfunction classList(node) {\n return node.classList || new ClassList(node);\n}\n\nfunction ClassList(node) {\n this._node = node;\n this._names = classArray(node.getAttribute(\"class\") || \"\");\n}\n\nClassList.prototype = {\n add: function(name) {\n var i = this._names.indexOf(name);\n if (i < 0) {\n this._names.push(name);\n this._node.setAttribute(\"class\", this._names.join(\" \"));\n }\n },\n remove: function(name) {\n var i = this._names.indexOf(name);\n if (i >= 0) {\n this._names.splice(i, 1);\n this._node.setAttribute(\"class\", this._names.join(\" \"));\n }\n },\n contains: function(name) {\n return this._names.indexOf(name) >= 0;\n }\n};\n\nfunction classedAdd(node, names) {\n var list = classList(node), i = -1, n = names.length;\n while (++i < n) list.add(names[i]);\n}\n\nfunction classedRemove(node, names) {\n var list = classList(node), i = -1, n = names.length;\n while (++i < n) list.remove(names[i]);\n}\n\nfunction classedTrue(names) {\n return function() {\n classedAdd(this, names);\n };\n}\n\nfunction classedFalse(names) {\n return function() {\n classedRemove(this, names);\n };\n}\n\nfunction classedFunction(names, value) {\n return function() {\n (value.apply(this, arguments) ? classedAdd : classedRemove)(this, names);\n };\n}\n\nexport default function(name, value) {\n var names = classArray(name + \"\");\n\n if (arguments.length < 2) {\n var list = classList(this.node()), i = -1, n = names.length;\n while (++i < n) if (!list.contains(names[i])) return false;\n return true;\n }\n\n return this.each((typeof value === \"function\"\n ? classedFunction : value\n ? classedTrue\n : classedFalse)(names, value));\n}\n","function textRemove() {\n this.textContent = \"\";\n}\n\nfunction textConstant(value) {\n return function() {\n this.textContent = value;\n };\n}\n\nfunction textFunction(value) {\n return function() {\n var v = value.apply(this, arguments);\n this.textContent = v == null ? \"\" : v;\n };\n}\n\nexport default function(value) {\n return arguments.length\n ? this.each(value == null\n ? textRemove : (typeof value === \"function\"\n ? textFunction\n : textConstant)(value))\n : this.node().textContent;\n}\n","function htmlRemove() {\n this.innerHTML = \"\";\n}\n\nfunction htmlConstant(value) {\n return function() {\n this.innerHTML = value;\n };\n}\n\nfunction htmlFunction(value) {\n return function() {\n var v = value.apply(this, arguments);\n this.innerHTML = v == null ? \"\" : v;\n };\n}\n\nexport default function(value) {\n return arguments.length\n ? this.each(value == null\n ? htmlRemove : (typeof value === \"function\"\n ? htmlFunction\n : htmlConstant)(value))\n : this.node().innerHTML;\n}\n","function raise() {\n if (this.nextSibling) this.parentNode.appendChild(this);\n}\n\nexport default function() {\n return this.each(raise);\n}\n","function lower() {\n if (this.previousSibling) this.parentNode.insertBefore(this, this.parentNode.firstChild);\n}\n\nexport default function() {\n return this.each(lower);\n}\n","import creator from \"../creator.js\";\n\nexport default function(name) {\n var create = typeof name === \"function\" ? name : creator(name);\n return this.select(function() {\n return this.appendChild(create.apply(this, arguments));\n });\n}\n","import creator from \"../creator.js\";\nimport selector from \"../selector.js\";\n\nfunction constantNull() {\n return null;\n}\n\nexport default function(name, before) {\n var create = typeof name === \"function\" ? name : creator(name),\n select = before == null ? constantNull : typeof before === \"function\" ? before : selector(before);\n return this.select(function() {\n return this.insertBefore(create.apply(this, arguments), select.apply(this, arguments) || null);\n });\n}\n","function remove() {\n var parent = this.parentNode;\n if (parent) parent.removeChild(this);\n}\n\nexport default function() {\n return this.each(remove);\n}\n","function selection_cloneShallow() {\n var clone = this.cloneNode(false), parent = this.parentNode;\n return parent ? parent.insertBefore(clone, this.nextSibling) : clone;\n}\n\nfunction selection_cloneDeep() {\n var clone = this.cloneNode(true), parent = this.parentNode;\n return parent ? parent.insertBefore(clone, this.nextSibling) : clone;\n}\n\nexport default function(deep) {\n return this.select(deep ? selection_cloneDeep : selection_cloneShallow);\n}\n","export default function(value) {\n return arguments.length\n ? this.property(\"__data__\", value)\n : this.node().__data__;\n}\n","function contextListener(listener) {\n return function(event) {\n listener.call(this, event, this.__data__);\n };\n}\n\nfunction parseTypenames(typenames) {\n return typenames.trim().split(/^|\\s+/).map(function(t) {\n var name = \"\", i = t.indexOf(\".\");\n if (i >= 0) name = t.slice(i + 1), t = t.slice(0, i);\n return {type: t, name: name};\n });\n}\n\nfunction onRemove(typename) {\n return function() {\n var on = this.__on;\n if (!on) return;\n for (var j = 0, i = -1, m = on.length, o; j < m; ++j) {\n if (o = on[j], (!typename.type || o.type === typename.type) && o.name === typename.name) {\n this.removeEventListener(o.type, o.listener, o.options);\n } else {\n on[++i] = o;\n }\n }\n if (++i) on.length = i;\n else delete this.__on;\n };\n}\n\nfunction onAdd(typename, value, options) {\n return function() {\n var on = this.__on, o, listener = contextListener(value);\n if (on) for (var j = 0, m = on.length; j < m; ++j) {\n if ((o = on[j]).type === typename.type && o.name === typename.name) {\n this.removeEventListener(o.type, o.listener, o.options);\n this.addEventListener(o.type, o.listener = listener, o.options = options);\n o.value = value;\n return;\n }\n }\n this.addEventListener(typename.type, listener, options);\n o = {type: typename.type, name: typename.name, value: value, listener: listener, options: options};\n if (!on) this.__on = [o];\n else on.push(o);\n };\n}\n\nexport default function(typename, value, options) {\n var typenames = parseTypenames(typename + \"\"), i, n = typenames.length, t;\n\n if (arguments.length < 2) {\n var on = this.node().__on;\n if (on) for (var j = 0, m = on.length, o; j < m; ++j) {\n for (i = 0, o = on[j]; i < n; ++i) {\n if ((t = typenames[i]).type === o.type && t.name === o.name) {\n return o.value;\n }\n }\n }\n return;\n }\n\n on = value ? onAdd : onRemove;\n for (i = 0; i < n; ++i) this.each(on(typenames[i], value, options));\n return this;\n}\n","import defaultView from \"../window.js\";\n\nfunction dispatchEvent(node, type, params) {\n var window = defaultView(node),\n event = window.CustomEvent;\n\n if (typeof event === \"function\") {\n event = new event(type, params);\n } else {\n event = window.document.createEvent(\"Event\");\n if (params) event.initEvent(type, params.bubbles, params.cancelable), event.detail = params.detail;\n else event.initEvent(type, false, false);\n }\n\n node.dispatchEvent(event);\n}\n\nfunction dispatchConstant(type, params) {\n return function() {\n return dispatchEvent(this, type, params);\n };\n}\n\nfunction dispatchFunction(type, params) {\n return function() {\n return dispatchEvent(this, type, params.apply(this, arguments));\n };\n}\n\nexport default function(type, params) {\n return this.each((typeof params === \"function\"\n ? dispatchFunction\n : dispatchConstant)(type, params));\n}\n","export default function*() {\n for (var groups = this._groups, j = 0, m = groups.length; j < m; ++j) {\n for (var group = groups[j], i = 0, n = group.length, node; i < n; ++i) {\n if (node = group[i]) yield node;\n }\n }\n}\n","import selection_select from \"./select.js\";\nimport selection_selectAll from \"./selectAll.js\";\nimport selection_selectChild from \"./selectChild.js\";\nimport selection_selectChildren from \"./selectChildren.js\";\nimport selection_filter from \"./filter.js\";\nimport selection_data from \"./data.js\";\nimport selection_enter from \"./enter.js\";\nimport selection_exit from \"./exit.js\";\nimport selection_join from \"./join.js\";\nimport selection_merge from \"./merge.js\";\nimport selection_order from \"./order.js\";\nimport selection_sort from \"./sort.js\";\nimport selection_call from \"./call.js\";\nimport selection_nodes from \"./nodes.js\";\nimport selection_node from \"./node.js\";\nimport selection_size from \"./size.js\";\nimport selection_empty from \"./empty.js\";\nimport selection_each from \"./each.js\";\nimport selection_attr from \"./attr.js\";\nimport selection_style from \"./style.js\";\nimport selection_property from \"./property.js\";\nimport selection_classed from \"./classed.js\";\nimport selection_text from \"./text.js\";\nimport selection_html from \"./html.js\";\nimport selection_raise from \"./raise.js\";\nimport selection_lower from \"./lower.js\";\nimport selection_append from \"./append.js\";\nimport selection_insert from \"./insert.js\";\nimport selection_remove from \"./remove.js\";\nimport selection_clone from \"./clone.js\";\nimport selection_datum from \"./datum.js\";\nimport selection_on from \"./on.js\";\nimport selection_dispatch from \"./dispatch.js\";\nimport selection_iterator from \"./iterator.js\";\n\nexport var root = [null];\n\nexport function Selection(groups, parents) {\n this._groups = groups;\n this._parents = parents;\n}\n\nfunction selection() {\n return new Selection([[document.documentElement]], root);\n}\n\nfunction selection_selection() {\n return this;\n}\n\nSelection.prototype = selection.prototype = {\n constructor: Selection,\n select: selection_select,\n selectAll: selection_selectAll,\n selectChild: selection_selectChild,\n selectChildren: selection_selectChildren,\n filter: selection_filter,\n data: selection_data,\n enter: selection_enter,\n exit: selection_exit,\n join: selection_join,\n merge: selection_merge,\n selection: selection_selection,\n order: selection_order,\n sort: selection_sort,\n call: selection_call,\n nodes: selection_nodes,\n node: selection_node,\n size: selection_size,\n empty: selection_empty,\n each: selection_each,\n attr: selection_attr,\n style: selection_style,\n property: selection_property,\n classed: selection_classed,\n text: selection_text,\n html: selection_html,\n raise: selection_raise,\n lower: selection_lower,\n append: selection_append,\n insert: selection_insert,\n remove: selection_remove,\n clone: selection_clone,\n datum: selection_datum,\n on: selection_on,\n dispatch: selection_dispatch,\n [Symbol.iterator]: selection_iterator\n};\n\nexport default selection;\n","import {Selection, root} from \"./selection/index.js\";\n\nexport default function(selector) {\n return typeof selector === \"string\"\n ? new Selection([[document.querySelector(selector)]], [document.documentElement])\n : new Selection([[selector]], root);\n}\n","import array from \"./array.js\";\nimport {Selection, root} from \"./selection/index.js\";\n\nexport default function(selector) {\n return typeof selector === \"string\"\n ? new Selection([document.querySelectorAll(selector)], [document.documentElement])\n : new Selection([array(selector)], root);\n}\n","export default function(constructor, factory, prototype) {\n constructor.prototype = factory.prototype = prototype;\n prototype.constructor = constructor;\n}\n\nexport function extend(parent, definition) {\n var prototype = Object.create(parent.prototype);\n for (var key in definition) prototype[key] = definition[key];\n return prototype;\n}\n","import define, {extend} from \"./define.js\";\n\nexport function Color() {}\n\nexport var darker = 0.7;\nexport var brighter = 1 / darker;\n\nvar reI = \"\\\\s*([+-]?\\\\d+)\\\\s*\",\n reN = \"\\\\s*([+-]?(?:\\\\d*\\\\.)?\\\\d+(?:[eE][+-]?\\\\d+)?)\\\\s*\",\n reP = \"\\\\s*([+-]?(?:\\\\d*\\\\.)?\\\\d+(?:[eE][+-]?\\\\d+)?)%\\\\s*\",\n reHex = /^#([0-9a-f]{3,8})$/,\n reRgbInteger = new RegExp(`^rgb\\\\(${reI},${reI},${reI}\\\\)$`),\n reRgbPercent = new RegExp(`^rgb\\\\(${reP},${reP},${reP}\\\\)$`),\n reRgbaInteger = new RegExp(`^rgba\\\\(${reI},${reI},${reI},${reN}\\\\)$`),\n reRgbaPercent = new RegExp(`^rgba\\\\(${reP},${reP},${reP},${reN}\\\\)$`),\n reHslPercent = new RegExp(`^hsl\\\\(${reN},${reP},${reP}\\\\)$`),\n reHslaPercent = new RegExp(`^hsla\\\\(${reN},${reP},${reP},${reN}\\\\)$`);\n\nvar named = {\n aliceblue: 0xf0f8ff,\n antiquewhite: 0xfaebd7,\n aqua: 0x00ffff,\n aquamarine: 0x7fffd4,\n azure: 0xf0ffff,\n beige: 0xf5f5dc,\n bisque: 0xffe4c4,\n black: 0x000000,\n blanchedalmond: 0xffebcd,\n blue: 0x0000ff,\n blueviolet: 0x8a2be2,\n brown: 0xa52a2a,\n burlywood: 0xdeb887,\n cadetblue: 0x5f9ea0,\n chartreuse: 0x7fff00,\n chocolate: 0xd2691e,\n coral: 0xff7f50,\n cornflowerblue: 0x6495ed,\n cornsilk: 0xfff8dc,\n crimson: 0xdc143c,\n cyan: 0x00ffff,\n darkblue: 0x00008b,\n darkcyan: 0x008b8b,\n darkgoldenrod: 0xb8860b,\n darkgray: 0xa9a9a9,\n darkgreen: 0x006400,\n darkgrey: 0xa9a9a9,\n darkkhaki: 0xbdb76b,\n darkmagenta: 0x8b008b,\n darkolivegreen: 0x556b2f,\n darkorange: 0xff8c00,\n darkorchid: 0x9932cc,\n darkred: 0x8b0000,\n darksalmon: 0xe9967a,\n darkseagreen: 0x8fbc8f,\n darkslateblue: 0x483d8b,\n darkslategray: 0x2f4f4f,\n darkslategrey: 0x2f4f4f,\n darkturquoise: 0x00ced1,\n darkviolet: 0x9400d3,\n deeppink: 0xff1493,\n deepskyblue: 0x00bfff,\n dimgray: 0x696969,\n dimgrey: 0x696969,\n dodgerblue: 0x1e90ff,\n firebrick: 0xb22222,\n floralwhite: 0xfffaf0,\n forestgreen: 0x228b22,\n fuchsia: 0xff00ff,\n gainsboro: 0xdcdcdc,\n ghostwhite: 0xf8f8ff,\n gold: 0xffd700,\n goldenrod: 0xdaa520,\n gray: 0x808080,\n green: 0x008000,\n greenyellow: 0xadff2f,\n grey: 0x808080,\n honeydew: 0xf0fff0,\n hotpink: 0xff69b4,\n indianred: 0xcd5c5c,\n indigo: 0x4b0082,\n ivory: 0xfffff0,\n khaki: 0xf0e68c,\n lavender: 0xe6e6fa,\n lavenderblush: 0xfff0f5,\n lawngreen: 0x7cfc00,\n lemonchiffon: 0xfffacd,\n lightblue: 0xadd8e6,\n lightcoral: 0xf08080,\n lightcyan: 0xe0ffff,\n lightgoldenrodyellow: 0xfafad2,\n lightgray: 0xd3d3d3,\n lightgreen: 0x90ee90,\n lightgrey: 0xd3d3d3,\n lightpink: 0xffb6c1,\n lightsalmon: 0xffa07a,\n lightseagreen: 0x20b2aa,\n lightskyblue: 0x87cefa,\n lightslategray: 0x778899,\n lightslategrey: 0x778899,\n lightsteelblue: 0xb0c4de,\n lightyellow: 0xffffe0,\n lime: 0x00ff00,\n limegreen: 0x32cd32,\n linen: 0xfaf0e6,\n magenta: 0xff00ff,\n maroon: 0x800000,\n mediumaquamarine: 0x66cdaa,\n mediumblue: 0x0000cd,\n mediumorchid: 0xba55d3,\n mediumpurple: 0x9370db,\n mediumseagreen: 0x3cb371,\n mediumslateblue: 0x7b68ee,\n mediumspringgreen: 0x00fa9a,\n mediumturquoise: 0x48d1cc,\n mediumvioletred: 0xc71585,\n midnightblue: 0x191970,\n mintcream: 0xf5fffa,\n mistyrose: 0xffe4e1,\n moccasin: 0xffe4b5,\n navajowhite: 0xffdead,\n navy: 0x000080,\n oldlace: 0xfdf5e6,\n olive: 0x808000,\n olivedrab: 0x6b8e23,\n orange: 0xffa500,\n orangered: 0xff4500,\n orchid: 0xda70d6,\n palegoldenrod: 0xeee8aa,\n palegreen: 0x98fb98,\n paleturquoise: 0xafeeee,\n palevioletred: 0xdb7093,\n papayawhip: 0xffefd5,\n peachpuff: 0xffdab9,\n peru: 0xcd853f,\n pink: 0xffc0cb,\n plum: 0xdda0dd,\n powderblue: 0xb0e0e6,\n purple: 0x800080,\n rebeccapurple: 0x663399,\n red: 0xff0000,\n rosybrown: 0xbc8f8f,\n royalblue: 0x4169e1,\n saddlebrown: 0x8b4513,\n salmon: 0xfa8072,\n sandybrown: 0xf4a460,\n seagreen: 0x2e8b57,\n seashell: 0xfff5ee,\n sienna: 0xa0522d,\n silver: 0xc0c0c0,\n skyblue: 0x87ceeb,\n slateblue: 0x6a5acd,\n slategray: 0x708090,\n slategrey: 0x708090,\n snow: 0xfffafa,\n springgreen: 0x00ff7f,\n steelblue: 0x4682b4,\n tan: 0xd2b48c,\n teal: 0x008080,\n thistle: 0xd8bfd8,\n tomato: 0xff6347,\n turquoise: 0x40e0d0,\n violet: 0xee82ee,\n wheat: 0xf5deb3,\n white: 0xffffff,\n whitesmoke: 0xf5f5f5,\n yellow: 0xffff00,\n yellowgreen: 0x9acd32\n};\n\ndefine(Color, color, {\n copy(channels) {\n return Object.assign(new this.constructor, this, channels);\n },\n displayable() {\n return this.rgb().displayable();\n },\n hex: color_formatHex, // Deprecated! Use color.formatHex.\n formatHex: color_formatHex,\n formatHex8: color_formatHex8,\n formatHsl: color_formatHsl,\n formatRgb: color_formatRgb,\n toString: color_formatRgb\n});\n\nfunction color_formatHex() {\n return this.rgb().formatHex();\n}\n\nfunction color_formatHex8() {\n return this.rgb().formatHex8();\n}\n\nfunction color_formatHsl() {\n return hslConvert(this).formatHsl();\n}\n\nfunction color_formatRgb() {\n return this.rgb().formatRgb();\n}\n\nexport default function color(format) {\n var m, l;\n format = (format + \"\").trim().toLowerCase();\n return (m = reHex.exec(format)) ? (l = m[1].length, m = parseInt(m[1], 16), l === 6 ? rgbn(m) // #ff0000\n : l === 3 ? new Rgb((m >> 8 & 0xf) | (m >> 4 & 0xf0), (m >> 4 & 0xf) | (m & 0xf0), ((m & 0xf) << 4) | (m & 0xf), 1) // #f00\n : l === 8 ? rgba(m >> 24 & 0xff, m >> 16 & 0xff, m >> 8 & 0xff, (m & 0xff) / 0xff) // #ff000000\n : l === 4 ? rgba((m >> 12 & 0xf) | (m >> 8 & 0xf0), (m >> 8 & 0xf) | (m >> 4 & 0xf0), (m >> 4 & 0xf) | (m & 0xf0), (((m & 0xf) << 4) | (m & 0xf)) / 0xff) // #f000\n : null) // invalid hex\n : (m = reRgbInteger.exec(format)) ? new Rgb(m[1], m[2], m[3], 1) // rgb(255, 0, 0)\n : (m = reRgbPercent.exec(format)) ? new Rgb(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, 1) // rgb(100%, 0%, 0%)\n : (m = reRgbaInteger.exec(format)) ? rgba(m[1], m[2], m[3], m[4]) // rgba(255, 0, 0, 1)\n : (m = reRgbaPercent.exec(format)) ? rgba(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, m[4]) // rgb(100%, 0%, 0%, 1)\n : (m = reHslPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, 1) // hsl(120, 50%, 50%)\n : (m = reHslaPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, m[4]) // hsla(120, 50%, 50%, 1)\n : named.hasOwnProperty(format) ? rgbn(named[format]) // eslint-disable-line no-prototype-builtins\n : format === \"transparent\" ? new Rgb(NaN, NaN, NaN, 0)\n : null;\n}\n\nfunction rgbn(n) {\n return new Rgb(n >> 16 & 0xff, n >> 8 & 0xff, n & 0xff, 1);\n}\n\nfunction rgba(r, g, b, a) {\n if (a <= 0) r = g = b = NaN;\n return new Rgb(r, g, b, a);\n}\n\nexport function rgbConvert(o) {\n if (!(o instanceof Color)) o = color(o);\n if (!o) return new Rgb;\n o = o.rgb();\n return new Rgb(o.r, o.g, o.b, o.opacity);\n}\n\nexport function rgb(r, g, b, opacity) {\n return arguments.length === 1 ? rgbConvert(r) : new Rgb(r, g, b, opacity == null ? 1 : opacity);\n}\n\nexport function Rgb(r, g, b, opacity) {\n this.r = +r;\n this.g = +g;\n this.b = +b;\n this.opacity = +opacity;\n}\n\ndefine(Rgb, rgb, extend(Color, {\n brighter(k) {\n k = k == null ? brighter : Math.pow(brighter, k);\n return new Rgb(this.r * k, this.g * k, this.b * k, this.opacity);\n },\n darker(k) {\n k = k == null ? darker : Math.pow(darker, k);\n return new Rgb(this.r * k, this.g * k, this.b * k, this.opacity);\n },\n rgb() {\n return this;\n },\n clamp() {\n return new Rgb(clampi(this.r), clampi(this.g), clampi(this.b), clampa(this.opacity));\n },\n displayable() {\n return (-0.5 <= this.r && this.r < 255.5)\n && (-0.5 <= this.g && this.g < 255.5)\n && (-0.5 <= this.b && this.b < 255.5)\n && (0 <= this.opacity && this.opacity <= 1);\n },\n hex: rgb_formatHex, // Deprecated! Use color.formatHex.\n formatHex: rgb_formatHex,\n formatHex8: rgb_formatHex8,\n formatRgb: rgb_formatRgb,\n toString: rgb_formatRgb\n}));\n\nfunction rgb_formatHex() {\n return `#${hex(this.r)}${hex(this.g)}${hex(this.b)}`;\n}\n\nfunction rgb_formatHex8() {\n return `#${hex(this.r)}${hex(this.g)}${hex(this.b)}${hex((isNaN(this.opacity) ? 1 : this.opacity) * 255)}`;\n}\n\nfunction rgb_formatRgb() {\n const a = clampa(this.opacity);\n return `${a === 1 ? \"rgb(\" : \"rgba(\"}${clampi(this.r)}, ${clampi(this.g)}, ${clampi(this.b)}${a === 1 ? \")\" : `, ${a})`}`;\n}\n\nfunction clampa(opacity) {\n return isNaN(opacity) ? 1 : Math.max(0, Math.min(1, opacity));\n}\n\nfunction clampi(value) {\n return Math.max(0, Math.min(255, Math.round(value) || 0));\n}\n\nfunction hex(value) {\n value = clampi(value);\n return (value < 16 ? \"0\" : \"\") + value.toString(16);\n}\n\nfunction hsla(h, s, l, a) {\n if (a <= 0) h = s = l = NaN;\n else if (l <= 0 || l >= 1) h = s = NaN;\n else if (s <= 0) h = NaN;\n return new Hsl(h, s, l, a);\n}\n\nexport function hslConvert(o) {\n if (o instanceof Hsl) return new Hsl(o.h, o.s, o.l, o.opacity);\n if (!(o instanceof Color)) o = color(o);\n if (!o) return new Hsl;\n if (o instanceof Hsl) return o;\n o = o.rgb();\n var r = o.r / 255,\n g = o.g / 255,\n b = o.b / 255,\n min = Math.min(r, g, b),\n max = Math.max(r, g, b),\n h = NaN,\n s = max - min,\n l = (max + min) / 2;\n if (s) {\n if (r === max) h = (g - b) / s + (g < b) * 6;\n else if (g === max) h = (b - r) / s + 2;\n else h = (r - g) / s + 4;\n s /= l < 0.5 ? max + min : 2 - max - min;\n h *= 60;\n } else {\n s = l > 0 && l < 1 ? 0 : h;\n }\n return new Hsl(h, s, l, o.opacity);\n}\n\nexport function hsl(h, s, l, opacity) {\n return arguments.length === 1 ? hslConvert(h) : new Hsl(h, s, l, opacity == null ? 1 : opacity);\n}\n\nfunction Hsl(h, s, l, opacity) {\n this.h = +h;\n this.s = +s;\n this.l = +l;\n this.opacity = +opacity;\n}\n\ndefine(Hsl, hsl, extend(Color, {\n brighter(k) {\n k = k == null ? brighter : Math.pow(brighter, k);\n return new Hsl(this.h, this.s, this.l * k, this.opacity);\n },\n darker(k) {\n k = k == null ? darker : Math.pow(darker, k);\n return new Hsl(this.h, this.s, this.l * k, this.opacity);\n },\n rgb() {\n var h = this.h % 360 + (this.h < 0) * 360,\n s = isNaN(h) || isNaN(this.s) ? 0 : this.s,\n l = this.l,\n m2 = l + (l < 0.5 ? l : 1 - l) * s,\n m1 = 2 * l - m2;\n return new Rgb(\n hsl2rgb(h >= 240 ? h - 240 : h + 120, m1, m2),\n hsl2rgb(h, m1, m2),\n hsl2rgb(h < 120 ? h + 240 : h - 120, m1, m2),\n this.opacity\n );\n },\n clamp() {\n return new Hsl(clamph(this.h), clampt(this.s), clampt(this.l), clampa(this.opacity));\n },\n displayable() {\n return (0 <= this.s && this.s <= 1 || isNaN(this.s))\n && (0 <= this.l && this.l <= 1)\n && (0 <= this.opacity && this.opacity <= 1);\n },\n formatHsl() {\n const a = clampa(this.opacity);\n return `${a === 1 ? \"hsl(\" : \"hsla(\"}${clamph(this.h)}, ${clampt(this.s) * 100}%, ${clampt(this.l) * 100}%${a === 1 ? \")\" : `, ${a})`}`;\n }\n}));\n\nfunction clamph(value) {\n value = (value || 0) % 360;\n return value < 0 ? value + 360 : value;\n}\n\nfunction clampt(value) {\n return Math.max(0, Math.min(1, value || 0));\n}\n\n/* From FvD 13.37, CSS Color Module Level 3 */\nfunction hsl2rgb(h, m1, m2) {\n return (h < 60 ? m1 + (m2 - m1) * h / 60\n : h < 180 ? m2\n : h < 240 ? m1 + (m2 - m1) * (240 - h) / 60\n : m1) * 255;\n}\n","export default x => () => x;\n","import constant from \"./constant.js\";\n\nfunction linear(a, d) {\n return function(t) {\n return a + t * d;\n };\n}\n\nfunction exponential(a, b, y) {\n return a = Math.pow(a, y), b = Math.pow(b, y) - a, y = 1 / y, function(t) {\n return Math.pow(a + t * b, y);\n };\n}\n\nexport function hue(a, b) {\n var d = b - a;\n return d ? linear(a, d > 180 || d < -180 ? d - 360 * Math.round(d / 360) : d) : constant(isNaN(a) ? b : a);\n}\n\nexport function gamma(y) {\n return (y = +y) === 1 ? nogamma : function(a, b) {\n return b - a ? exponential(a, b, y) : constant(isNaN(a) ? b : a);\n };\n}\n\nexport default function nogamma(a, b) {\n var d = b - a;\n return d ? linear(a, d) : constant(isNaN(a) ? b : a);\n}\n","import {rgb as colorRgb} from \"d3-color\";\nimport basis from \"./basis.js\";\nimport basisClosed from \"./basisClosed.js\";\nimport nogamma, {gamma} from \"./color.js\";\n\nexport default (function rgbGamma(y) {\n var color = gamma(y);\n\n function rgb(start, end) {\n var r = color((start = colorRgb(start)).r, (end = colorRgb(end)).r),\n g = color(start.g, end.g),\n b = color(start.b, end.b),\n opacity = nogamma(start.opacity, end.opacity);\n return function(t) {\n start.r = r(t);\n start.g = g(t);\n start.b = b(t);\n start.opacity = opacity(t);\n return start + \"\";\n };\n }\n\n rgb.gamma = rgbGamma;\n\n return rgb;\n})(1);\n\nfunction rgbSpline(spline) {\n return function(colors) {\n var n = colors.length,\n r = new Array(n),\n g = new Array(n),\n b = new Array(n),\n i, color;\n for (i = 0; i < n; ++i) {\n color = colorRgb(colors[i]);\n r[i] = color.r || 0;\n g[i] = color.g || 0;\n b[i] = color.b || 0;\n }\n r = spline(r);\n g = spline(g);\n b = spline(b);\n color.opacity = 1;\n return function(t) {\n color.r = r(t);\n color.g = g(t);\n color.b = b(t);\n return color + \"\";\n };\n };\n}\n\nexport var rgbBasis = rgbSpline(basis);\nexport var rgbBasisClosed = rgbSpline(basisClosed);\n","export default function(a, b) {\n if (!b) b = [];\n var n = a ? Math.min(b.length, a.length) : 0,\n c = b.slice(),\n i;\n return function(t) {\n for (i = 0; i < n; ++i) c[i] = a[i] * (1 - t) + b[i] * t;\n return c;\n };\n}\n\nexport function isNumberArray(x) {\n return ArrayBuffer.isView(x) && !(x instanceof DataView);\n}\n","import value from \"./value.js\";\nimport numberArray, {isNumberArray} from \"./numberArray.js\";\n\nexport default function(a, b) {\n return (isNumberArray(b) ? numberArray : genericArray)(a, b);\n}\n\nexport function genericArray(a, b) {\n var nb = b ? b.length : 0,\n na = a ? Math.min(nb, a.length) : 0,\n x = new Array(na),\n c = new Array(nb),\n i;\n\n for (i = 0; i < na; ++i) x[i] = value(a[i], b[i]);\n for (; i < nb; ++i) c[i] = b[i];\n\n return function(t) {\n for (i = 0; i < na; ++i) c[i] = x[i](t);\n return c;\n };\n}\n","export default function(a, b) {\n var d = new Date;\n return a = +a, b = +b, function(t) {\n return d.setTime(a * (1 - t) + b * t), d;\n };\n}\n","export default function(a, b) {\n return a = +a, b = +b, function(t) {\n return a * (1 - t) + b * t;\n };\n}\n","import value from \"./value.js\";\n\nexport default function(a, b) {\n var i = {},\n c = {},\n k;\n\n if (a === null || typeof a !== \"object\") a = {};\n if (b === null || typeof b !== \"object\") b = {};\n\n for (k in b) {\n if (k in a) {\n i[k] = value(a[k], b[k]);\n } else {\n c[k] = b[k];\n }\n }\n\n return function(t) {\n for (k in i) c[k] = i[k](t);\n return c;\n };\n}\n","import number from \"./number.js\";\n\nvar reA = /[-+]?(?:\\d+\\.?\\d*|\\.?\\d+)(?:[eE][-+]?\\d+)?/g,\n reB = new RegExp(reA.source, \"g\");\n\nfunction zero(b) {\n return function() {\n return b;\n };\n}\n\nfunction one(b) {\n return function(t) {\n return b(t) + \"\";\n };\n}\n\nexport default function(a, b) {\n var bi = reA.lastIndex = reB.lastIndex = 0, // scan index for next number in b\n am, // current match in a\n bm, // current match in b\n bs, // string preceding current number in b, if any\n i = -1, // index in s\n s = [], // string constants and placeholders\n q = []; // number interpolators\n\n // Coerce inputs to strings.\n a = a + \"\", b = b + \"\";\n\n // Interpolate pairs of numbers in a & b.\n while ((am = reA.exec(a))\n && (bm = reB.exec(b))) {\n if ((bs = bm.index) > bi) { // a string precedes the next number in b\n bs = b.slice(bi, bs);\n if (s[i]) s[i] += bs; // coalesce with previous string\n else s[++i] = bs;\n }\n if ((am = am[0]) === (bm = bm[0])) { // numbers in a & b match\n if (s[i]) s[i] += bm; // coalesce with previous string\n else s[++i] = bm;\n } else { // interpolate non-matching numbers\n s[++i] = null;\n q.push({i: i, x: number(am, bm)});\n }\n bi = reB.lastIndex;\n }\n\n // Add remains of b.\n if (bi < b.length) {\n bs = b.slice(bi);\n if (s[i]) s[i] += bs; // coalesce with previous string\n else s[++i] = bs;\n }\n\n // Special optimization for only a single match.\n // Otherwise, interpolate each of the numbers and rejoin the string.\n return s.length < 2 ? (q[0]\n ? one(q[0].x)\n : zero(b))\n : (b = q.length, function(t) {\n for (var i = 0, o; i < b; ++i) s[(o = q[i]).i] = o.x(t);\n return s.join(\"\");\n });\n}\n","import {color} from \"d3-color\";\nimport rgb from \"./rgb.js\";\nimport {genericArray} from \"./array.js\";\nimport date from \"./date.js\";\nimport number from \"./number.js\";\nimport object from \"./object.js\";\nimport string from \"./string.js\";\nimport constant from \"./constant.js\";\nimport numberArray, {isNumberArray} from \"./numberArray.js\";\n\nexport default function(a, b) {\n var t = typeof b, c;\n return b == null || t === \"boolean\" ? constant(b)\n : (t === \"number\" ? number\n : t === \"string\" ? ((c = color(b)) ? (b = c, rgb) : string)\n : b instanceof color ? rgb\n : b instanceof Date ? date\n : isNumberArray(b) ? numberArray\n : Array.isArray(b) ? genericArray\n : typeof b.valueOf !== \"function\" && typeof b.toString !== \"function\" || isNaN(b) ? object\n : number)(a, b);\n}\n","export default function(a, b) {\n return a = +a, b = +b, function(t) {\n return Math.round(a * (1 - t) + b * t);\n };\n}\n","var degrees = 180 / Math.PI;\n\nexport var identity = {\n translateX: 0,\n translateY: 0,\n rotate: 0,\n skewX: 0,\n scaleX: 1,\n scaleY: 1\n};\n\nexport default function(a, b, c, d, e, f) {\n var scaleX, scaleY, skewX;\n if (scaleX = Math.sqrt(a * a + b * b)) a /= scaleX, b /= scaleX;\n if (skewX = a * c + b * d) c -= a * skewX, d -= b * skewX;\n if (scaleY = Math.sqrt(c * c + d * d)) c /= scaleY, d /= scaleY, skewX /= scaleY;\n if (a * d < b * c) a = -a, b = -b, skewX = -skewX, scaleX = -scaleX;\n return {\n translateX: e,\n translateY: f,\n rotate: Math.atan2(b, a) * degrees,\n skewX: Math.atan(skewX) * degrees,\n scaleX: scaleX,\n scaleY: scaleY\n };\n}\n","import decompose, {identity} from \"./decompose.js\";\n\nvar svgNode;\n\n/* eslint-disable no-undef */\nexport function parseCss(value) {\n const m = new (typeof DOMMatrix === \"function\" ? DOMMatrix : WebKitCSSMatrix)(value + \"\");\n return m.isIdentity ? identity : decompose(m.a, m.b, m.c, m.d, m.e, m.f);\n}\n\nexport function parseSvg(value) {\n if (value == null) return identity;\n if (!svgNode) svgNode = document.createElementNS(\"http://www.w3.org/2000/svg\", \"g\");\n svgNode.setAttribute(\"transform\", value);\n if (!(value = svgNode.transform.baseVal.consolidate())) return identity;\n value = value.matrix;\n return decompose(value.a, value.b, value.c, value.d, value.e, value.f);\n}\n","import number from \"../number.js\";\nimport {parseCss, parseSvg} from \"./parse.js\";\n\nfunction interpolateTransform(parse, pxComma, pxParen, degParen) {\n\n function pop(s) {\n return s.length ? s.pop() + \" \" : \"\";\n }\n\n function translate(xa, ya, xb, yb, s, q) {\n if (xa !== xb || ya !== yb) {\n var i = s.push(\"translate(\", null, pxComma, null, pxParen);\n q.push({i: i - 4, x: number(xa, xb)}, {i: i - 2, x: number(ya, yb)});\n } else if (xb || yb) {\n s.push(\"translate(\" + xb + pxComma + yb + pxParen);\n }\n }\n\n function rotate(a, b, s, q) {\n if (a !== b) {\n if (a - b > 180) b += 360; else if (b - a > 180) a += 360; // shortest path\n q.push({i: s.push(pop(s) + \"rotate(\", null, degParen) - 2, x: number(a, b)});\n } else if (b) {\n s.push(pop(s) + \"rotate(\" + b + degParen);\n }\n }\n\n function skewX(a, b, s, q) {\n if (a !== b) {\n q.push({i: s.push(pop(s) + \"skewX(\", null, degParen) - 2, x: number(a, b)});\n } else if (b) {\n s.push(pop(s) + \"skewX(\" + b + degParen);\n }\n }\n\n function scale(xa, ya, xb, yb, s, q) {\n if (xa !== xb || ya !== yb) {\n var i = s.push(pop(s) + \"scale(\", null, \",\", null, \")\");\n q.push({i: i - 4, x: number(xa, xb)}, {i: i - 2, x: number(ya, yb)});\n } else if (xb !== 1 || yb !== 1) {\n s.push(pop(s) + \"scale(\" + xb + \",\" + yb + \")\");\n }\n }\n\n return function(a, b) {\n var s = [], // string constants and placeholders\n q = []; // number interpolators\n a = parse(a), b = parse(b);\n translate(a.translateX, a.translateY, b.translateX, b.translateY, s, q);\n rotate(a.rotate, b.rotate, s, q);\n skewX(a.skewX, b.skewX, s, q);\n scale(a.scaleX, a.scaleY, b.scaleX, b.scaleY, s, q);\n a = b = null; // gc\n return function(t) {\n var i = -1, n = q.length, o;\n while (++i < n) s[(o = q[i]).i] = o.x(t);\n return s.join(\"\");\n };\n };\n}\n\nexport var interpolateTransformCss = interpolateTransform(parseCss, \"px, \", \"px)\", \"deg)\");\nexport var interpolateTransformSvg = interpolateTransform(parseSvg, \", \", \")\", \")\");\n","var frame = 0, // is an animation frame pending?\n timeout = 0, // is a timeout pending?\n interval = 0, // are any timers active?\n pokeDelay = 1000, // how frequently we check for clock skew\n taskHead,\n taskTail,\n clockLast = 0,\n clockNow = 0,\n clockSkew = 0,\n clock = typeof performance === \"object\" && performance.now ? performance : Date,\n setFrame = typeof window === \"object\" && window.requestAnimationFrame ? window.requestAnimationFrame.bind(window) : function(f) { setTimeout(f, 17); };\n\nexport function now() {\n return clockNow || (setFrame(clearNow), clockNow = clock.now() + clockSkew);\n}\n\nfunction clearNow() {\n clockNow = 0;\n}\n\nexport function Timer() {\n this._call =\n this._time =\n this._next = null;\n}\n\nTimer.prototype = timer.prototype = {\n constructor: Timer,\n restart: function(callback, delay, time) {\n if (typeof callback !== \"function\") throw new TypeError(\"callback is not a function\");\n time = (time == null ? now() : +time) + (delay == null ? 0 : +delay);\n if (!this._next && taskTail !== this) {\n if (taskTail) taskTail._next = this;\n else taskHead = this;\n taskTail = this;\n }\n this._call = callback;\n this._time = time;\n sleep();\n },\n stop: function() {\n if (this._call) {\n this._call = null;\n this._time = Infinity;\n sleep();\n }\n }\n};\n\nexport function timer(callback, delay, time) {\n var t = new Timer;\n t.restart(callback, delay, time);\n return t;\n}\n\nexport function timerFlush() {\n now(); // Get the current time, if not already set.\n ++frame; // Pretend we’ve set an alarm, if we haven’t already.\n var t = taskHead, e;\n while (t) {\n if ((e = clockNow - t._time) >= 0) t._call.call(undefined, e);\n t = t._next;\n }\n --frame;\n}\n\nfunction wake() {\n clockNow = (clockLast = clock.now()) + clockSkew;\n frame = timeout = 0;\n try {\n timerFlush();\n } finally {\n frame = 0;\n nap();\n clockNow = 0;\n }\n}\n\nfunction poke() {\n var now = clock.now(), delay = now - clockLast;\n if (delay > pokeDelay) clockSkew -= delay, clockLast = now;\n}\n\nfunction nap() {\n var t0, t1 = taskHead, t2, time = Infinity;\n while (t1) {\n if (t1._call) {\n if (time > t1._time) time = t1._time;\n t0 = t1, t1 = t1._next;\n } else {\n t2 = t1._next, t1._next = null;\n t1 = t0 ? t0._next = t2 : taskHead = t2;\n }\n }\n taskTail = t0;\n sleep(time);\n}\n\nfunction sleep(time) {\n if (frame) return; // Soonest alarm already set, or will be.\n if (timeout) timeout = clearTimeout(timeout);\n var delay = time - clockNow; // Strictly less than if we recomputed clockNow.\n if (delay > 24) {\n if (time < Infinity) timeout = setTimeout(wake, time - clock.now() - clockSkew);\n if (interval) interval = clearInterval(interval);\n } else {\n if (!interval) clockLast = clock.now(), interval = setInterval(poke, pokeDelay);\n frame = 1, setFrame(wake);\n }\n}\n","import {Timer} from \"./timer.js\";\n\nexport default function(callback, delay, time) {\n var t = new Timer;\n delay = delay == null ? 0 : +delay;\n t.restart(elapsed => {\n t.stop();\n callback(elapsed + delay);\n }, delay, time);\n return t;\n}\n","import {dispatch} from \"d3-dispatch\";\nimport {timer, timeout} from \"d3-timer\";\n\nvar emptyOn = dispatch(\"start\", \"end\", \"cancel\", \"interrupt\");\nvar emptyTween = [];\n\nexport var CREATED = 0;\nexport var SCHEDULED = 1;\nexport var STARTING = 2;\nexport var STARTED = 3;\nexport var RUNNING = 4;\nexport var ENDING = 5;\nexport var ENDED = 6;\n\nexport default function(node, name, id, index, group, timing) {\n var schedules = node.__transition;\n if (!schedules) node.__transition = {};\n else if (id in schedules) return;\n create(node, id, {\n name: name,\n index: index, // For context during callback.\n group: group, // For context during callback.\n on: emptyOn,\n tween: emptyTween,\n time: timing.time,\n delay: timing.delay,\n duration: timing.duration,\n ease: timing.ease,\n timer: null,\n state: CREATED\n });\n}\n\nexport function init(node, id) {\n var schedule = get(node, id);\n if (schedule.state > CREATED) throw new Error(\"too late; already scheduled\");\n return schedule;\n}\n\nexport function set(node, id) {\n var schedule = get(node, id);\n if (schedule.state > STARTED) throw new Error(\"too late; already running\");\n return schedule;\n}\n\nexport function get(node, id) {\n var schedule = node.__transition;\n if (!schedule || !(schedule = schedule[id])) throw new Error(\"transition not found\");\n return schedule;\n}\n\nfunction create(node, id, self) {\n var schedules = node.__transition,\n tween;\n\n // Initialize the self timer when the transition is created.\n // Note the actual delay is not known until the first callback!\n schedules[id] = self;\n self.timer = timer(schedule, 0, self.time);\n\n function schedule(elapsed) {\n self.state = SCHEDULED;\n self.timer.restart(start, self.delay, self.time);\n\n // If the elapsed delay is less than our first sleep, start immediately.\n if (self.delay <= elapsed) start(elapsed - self.delay);\n }\n\n function start(elapsed) {\n var i, j, n, o;\n\n // If the state is not SCHEDULED, then we previously errored on start.\n if (self.state !== SCHEDULED) return stop();\n\n for (i in schedules) {\n o = schedules[i];\n if (o.name !== self.name) continue;\n\n // While this element already has a starting transition during this frame,\n // defer starting an interrupting transition until that transition has a\n // chance to tick (and possibly end); see d3/d3-transition#54!\n if (o.state === STARTED) return timeout(start);\n\n // Interrupt the active transition, if any.\n if (o.state === RUNNING) {\n o.state = ENDED;\n o.timer.stop();\n o.on.call(\"interrupt\", node, node.__data__, o.index, o.group);\n delete schedules[i];\n }\n\n // Cancel any pre-empted transitions.\n else if (+i < id) {\n o.state = ENDED;\n o.timer.stop();\n o.on.call(\"cancel\", node, node.__data__, o.index, o.group);\n delete schedules[i];\n }\n }\n\n // Defer the first tick to end of the current frame; see d3/d3#1576.\n // Note the transition may be canceled after start and before the first tick!\n // Note this must be scheduled before the start event; see d3/d3-transition#16!\n // Assuming this is successful, subsequent callbacks go straight to tick.\n timeout(function() {\n if (self.state === STARTED) {\n self.state = RUNNING;\n self.timer.restart(tick, self.delay, self.time);\n tick(elapsed);\n }\n });\n\n // Dispatch the start event.\n // Note this must be done before the tween are initialized.\n self.state = STARTING;\n self.on.call(\"start\", node, node.__data__, self.index, self.group);\n if (self.state !== STARTING) return; // interrupted\n self.state = STARTED;\n\n // Initialize the tween, deleting null tween.\n tween = new Array(n = self.tween.length);\n for (i = 0, j = -1; i < n; ++i) {\n if (o = self.tween[i].value.call(node, node.__data__, self.index, self.group)) {\n tween[++j] = o;\n }\n }\n tween.length = j + 1;\n }\n\n function tick(elapsed) {\n var t = elapsed < self.duration ? self.ease.call(null, elapsed / self.duration) : (self.timer.restart(stop), self.state = ENDING, 1),\n i = -1,\n n = tween.length;\n\n while (++i < n) {\n tween[i].call(node, t);\n }\n\n // Dispatch the end event.\n if (self.state === ENDING) {\n self.on.call(\"end\", node, node.__data__, self.index, self.group);\n stop();\n }\n }\n\n function stop() {\n self.state = ENDED;\n self.timer.stop();\n delete schedules[id];\n for (var i in schedules) return; // eslint-disable-line no-unused-vars\n delete node.__transition;\n }\n}\n","import {STARTING, ENDING, ENDED} from \"./transition/schedule.js\";\n\nexport default function(node, name) {\n var schedules = node.__transition,\n schedule,\n active,\n empty = true,\n i;\n\n if (!schedules) return;\n\n name = name == null ? null : name + \"\";\n\n for (i in schedules) {\n if ((schedule = schedules[i]).name !== name) { empty = false; continue; }\n active = schedule.state > STARTING && schedule.state < ENDING;\n schedule.state = ENDED;\n schedule.timer.stop();\n schedule.on.call(active ? \"interrupt\" : \"cancel\", node, node.__data__, schedule.index, schedule.group);\n delete schedules[i];\n }\n\n if (empty) delete node.__transition;\n}\n","import interrupt from \"../interrupt.js\";\n\nexport default function(name) {\n return this.each(function() {\n interrupt(this, name);\n });\n}\n","import {get, set} from \"./schedule.js\";\n\nfunction tweenRemove(id, name) {\n var tween0, tween1;\n return function() {\n var schedule = set(this, id),\n tween = schedule.tween;\n\n // If this node shared tween with the previous node,\n // just assign the updated shared tween and we’re done!\n // Otherwise, copy-on-write.\n if (tween !== tween0) {\n tween1 = tween0 = tween;\n for (var i = 0, n = tween1.length; i < n; ++i) {\n if (tween1[i].name === name) {\n tween1 = tween1.slice();\n tween1.splice(i, 1);\n break;\n }\n }\n }\n\n schedule.tween = tween1;\n };\n}\n\nfunction tweenFunction(id, name, value) {\n var tween0, tween1;\n if (typeof value !== \"function\") throw new Error;\n return function() {\n var schedule = set(this, id),\n tween = schedule.tween;\n\n // If this node shared tween with the previous node,\n // just assign the updated shared tween and we’re done!\n // Otherwise, copy-on-write.\n if (tween !== tween0) {\n tween1 = (tween0 = tween).slice();\n for (var t = {name: name, value: value}, i = 0, n = tween1.length; i < n; ++i) {\n if (tween1[i].name === name) {\n tween1[i] = t;\n break;\n }\n }\n if (i === n) tween1.push(t);\n }\n\n schedule.tween = tween1;\n };\n}\n\nexport default function(name, value) {\n var id = this._id;\n\n name += \"\";\n\n if (arguments.length < 2) {\n var tween = get(this.node(), id).tween;\n for (var i = 0, n = tween.length, t; i < n; ++i) {\n if ((t = tween[i]).name === name) {\n return t.value;\n }\n }\n return null;\n }\n\n return this.each((value == null ? tweenRemove : tweenFunction)(id, name, value));\n}\n\nexport function tweenValue(transition, name, value) {\n var id = transition._id;\n\n transition.each(function() {\n var schedule = set(this, id);\n (schedule.value || (schedule.value = {}))[name] = value.apply(this, arguments);\n });\n\n return function(node) {\n return get(node, id).value[name];\n };\n}\n","import {color} from \"d3-color\";\nimport {interpolateNumber, interpolateRgb, interpolateString} from \"d3-interpolate\";\n\nexport default function(a, b) {\n var c;\n return (typeof b === \"number\" ? interpolateNumber\n : b instanceof color ? interpolateRgb\n : (c = color(b)) ? (b = c, interpolateRgb)\n : interpolateString)(a, b);\n}\n","import {interpolateTransformSvg as interpolateTransform} from \"d3-interpolate\";\nimport {namespace} from \"d3-selection\";\nimport {tweenValue} from \"./tween.js\";\nimport interpolate from \"./interpolate.js\";\n\nfunction attrRemove(name) {\n return function() {\n this.removeAttribute(name);\n };\n}\n\nfunction attrRemoveNS(fullname) {\n return function() {\n this.removeAttributeNS(fullname.space, fullname.local);\n };\n}\n\nfunction attrConstant(name, interpolate, value1) {\n var string00,\n string1 = value1 + \"\",\n interpolate0;\n return function() {\n var string0 = this.getAttribute(name);\n return string0 === string1 ? null\n : string0 === string00 ? interpolate0\n : interpolate0 = interpolate(string00 = string0, value1);\n };\n}\n\nfunction attrConstantNS(fullname, interpolate, value1) {\n var string00,\n string1 = value1 + \"\",\n interpolate0;\n return function() {\n var string0 = this.getAttributeNS(fullname.space, fullname.local);\n return string0 === string1 ? null\n : string0 === string00 ? interpolate0\n : interpolate0 = interpolate(string00 = string0, value1);\n };\n}\n\nfunction attrFunction(name, interpolate, value) {\n var string00,\n string10,\n interpolate0;\n return function() {\n var string0, value1 = value(this), string1;\n if (value1 == null) return void this.removeAttribute(name);\n string0 = this.getAttribute(name);\n string1 = value1 + \"\";\n return string0 === string1 ? null\n : string0 === string00 && string1 === string10 ? interpolate0\n : (string10 = string1, interpolate0 = interpolate(string00 = string0, value1));\n };\n}\n\nfunction attrFunctionNS(fullname, interpolate, value) {\n var string00,\n string10,\n interpolate0;\n return function() {\n var string0, value1 = value(this), string1;\n if (value1 == null) return void this.removeAttributeNS(fullname.space, fullname.local);\n string0 = this.getAttributeNS(fullname.space, fullname.local);\n string1 = value1 + \"\";\n return string0 === string1 ? null\n : string0 === string00 && string1 === string10 ? interpolate0\n : (string10 = string1, interpolate0 = interpolate(string00 = string0, value1));\n };\n}\n\nexport default function(name, value) {\n var fullname = namespace(name), i = fullname === \"transform\" ? interpolateTransform : interpolate;\n return this.attrTween(name, typeof value === \"function\"\n ? (fullname.local ? attrFunctionNS : attrFunction)(fullname, i, tweenValue(this, \"attr.\" + name, value))\n : value == null ? (fullname.local ? attrRemoveNS : attrRemove)(fullname)\n : (fullname.local ? attrConstantNS : attrConstant)(fullname, i, value));\n}\n","import {namespace} from \"d3-selection\";\n\nfunction attrInterpolate(name, i) {\n return function(t) {\n this.setAttribute(name, i.call(this, t));\n };\n}\n\nfunction attrInterpolateNS(fullname, i) {\n return function(t) {\n this.setAttributeNS(fullname.space, fullname.local, i.call(this, t));\n };\n}\n\nfunction attrTweenNS(fullname, value) {\n var t0, i0;\n function tween() {\n var i = value.apply(this, arguments);\n if (i !== i0) t0 = (i0 = i) && attrInterpolateNS(fullname, i);\n return t0;\n }\n tween._value = value;\n return tween;\n}\n\nfunction attrTween(name, value) {\n var t0, i0;\n function tween() {\n var i = value.apply(this, arguments);\n if (i !== i0) t0 = (i0 = i) && attrInterpolate(name, i);\n return t0;\n }\n tween._value = value;\n return tween;\n}\n\nexport default function(name, value) {\n var key = \"attr.\" + name;\n if (arguments.length < 2) return (key = this.tween(key)) && key._value;\n if (value == null) return this.tween(key, null);\n if (typeof value !== \"function\") throw new Error;\n var fullname = namespace(name);\n return this.tween(key, (fullname.local ? attrTweenNS : attrTween)(fullname, value));\n}\n","import {get, init} from \"./schedule.js\";\n\nfunction delayFunction(id, value) {\n return function() {\n init(this, id).delay = +value.apply(this, arguments);\n };\n}\n\nfunction delayConstant(id, value) {\n return value = +value, function() {\n init(this, id).delay = value;\n };\n}\n\nexport default function(value) {\n var id = this._id;\n\n return arguments.length\n ? this.each((typeof value === \"function\"\n ? delayFunction\n : delayConstant)(id, value))\n : get(this.node(), id).delay;\n}\n","import {get, set} from \"./schedule.js\";\n\nfunction durationFunction(id, value) {\n return function() {\n set(this, id).duration = +value.apply(this, arguments);\n };\n}\n\nfunction durationConstant(id, value) {\n return value = +value, function() {\n set(this, id).duration = value;\n };\n}\n\nexport default function(value) {\n var id = this._id;\n\n return arguments.length\n ? this.each((typeof value === \"function\"\n ? durationFunction\n : durationConstant)(id, value))\n : get(this.node(), id).duration;\n}\n","import {get, set} from \"./schedule.js\";\n\nfunction easeConstant(id, value) {\n if (typeof value !== \"function\") throw new Error;\n return function() {\n set(this, id).ease = value;\n };\n}\n\nexport default function(value) {\n var id = this._id;\n\n return arguments.length\n ? this.each(easeConstant(id, value))\n : get(this.node(), id).ease;\n}\n","import {set} from \"./schedule.js\";\n\nfunction easeVarying(id, value) {\n return function() {\n var v = value.apply(this, arguments);\n if (typeof v !== \"function\") throw new Error;\n set(this, id).ease = v;\n };\n}\n\nexport default function(value) {\n if (typeof value !== \"function\") throw new Error;\n return this.each(easeVarying(this._id, value));\n}\n","import {matcher} from \"d3-selection\";\nimport {Transition} from \"./index.js\";\n\nexport default function(match) {\n if (typeof match !== \"function\") match = matcher(match);\n\n for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, subgroup = subgroups[j] = [], node, i = 0; i < n; ++i) {\n if ((node = group[i]) && match.call(node, node.__data__, i, group)) {\n subgroup.push(node);\n }\n }\n }\n\n return new Transition(subgroups, this._parents, this._name, this._id);\n}\n","import {Transition} from \"./index.js\";\n\nexport default function(transition) {\n if (transition._id !== this._id) throw new Error;\n\n for (var groups0 = this._groups, groups1 = transition._groups, m0 = groups0.length, m1 = groups1.length, m = Math.min(m0, m1), merges = new Array(m0), j = 0; j < m; ++j) {\n for (var group0 = groups0[j], group1 = groups1[j], n = group0.length, merge = merges[j] = new Array(n), node, i = 0; i < n; ++i) {\n if (node = group0[i] || group1[i]) {\n merge[i] = node;\n }\n }\n }\n\n for (; j < m0; ++j) {\n merges[j] = groups0[j];\n }\n\n return new Transition(merges, this._parents, this._name, this._id);\n}\n","import {get, set, init} from \"./schedule.js\";\n\nfunction start(name) {\n return (name + \"\").trim().split(/^|\\s+/).every(function(t) {\n var i = t.indexOf(\".\");\n if (i >= 0) t = t.slice(0, i);\n return !t || t === \"start\";\n });\n}\n\nfunction onFunction(id, name, listener) {\n var on0, on1, sit = start(name) ? init : set;\n return function() {\n var schedule = sit(this, id),\n on = schedule.on;\n\n // If this node shared a dispatch with the previous node,\n // just assign the updated shared dispatch and we’re done!\n // Otherwise, copy-on-write.\n if (on !== on0) (on1 = (on0 = on).copy()).on(name, listener);\n\n schedule.on = on1;\n };\n}\n\nexport default function(name, listener) {\n var id = this._id;\n\n return arguments.length < 2\n ? get(this.node(), id).on.on(name)\n : this.each(onFunction(id, name, listener));\n}\n","function removeFunction(id) {\n return function() {\n var parent = this.parentNode;\n for (var i in this.__transition) if (+i !== id) return;\n if (parent) parent.removeChild(this);\n };\n}\n\nexport default function() {\n return this.on(\"end.remove\", removeFunction(this._id));\n}\n","import {selector} from \"d3-selection\";\nimport {Transition} from \"./index.js\";\nimport schedule, {get} from \"./schedule.js\";\n\nexport default function(select) {\n var name = this._name,\n id = this._id;\n\n if (typeof select !== \"function\") select = selector(select);\n\n for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, subgroup = subgroups[j] = new Array(n), node, subnode, i = 0; i < n; ++i) {\n if ((node = group[i]) && (subnode = select.call(node, node.__data__, i, group))) {\n if (\"__data__\" in node) subnode.__data__ = node.__data__;\n subgroup[i] = subnode;\n schedule(subgroup[i], name, id, i, subgroup, get(node, id));\n }\n }\n }\n\n return new Transition(subgroups, this._parents, name, id);\n}\n","import {selectorAll} from \"d3-selection\";\nimport {Transition} from \"./index.js\";\nimport schedule, {get} from \"./schedule.js\";\n\nexport default function(select) {\n var name = this._name,\n id = this._id;\n\n if (typeof select !== \"function\") select = selectorAll(select);\n\n for (var groups = this._groups, m = groups.length, subgroups = [], parents = [], j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n if (node = group[i]) {\n for (var children = select.call(node, node.__data__, i, group), child, inherit = get(node, id), k = 0, l = children.length; k < l; ++k) {\n if (child = children[k]) {\n schedule(child, name, id, k, children, inherit);\n }\n }\n subgroups.push(children);\n parents.push(node);\n }\n }\n }\n\n return new Transition(subgroups, parents, name, id);\n}\n","import {selection} from \"d3-selection\";\n\nvar Selection = selection.prototype.constructor;\n\nexport default function() {\n return new Selection(this._groups, this._parents);\n}\n","import {interpolateTransformCss as interpolateTransform} from \"d3-interpolate\";\nimport {style} from \"d3-selection\";\nimport {set} from \"./schedule.js\";\nimport {tweenValue} from \"./tween.js\";\nimport interpolate from \"./interpolate.js\";\n\nfunction styleNull(name, interpolate) {\n var string00,\n string10,\n interpolate0;\n return function() {\n var string0 = style(this, name),\n string1 = (this.style.removeProperty(name), style(this, name));\n return string0 === string1 ? null\n : string0 === string00 && string1 === string10 ? interpolate0\n : interpolate0 = interpolate(string00 = string0, string10 = string1);\n };\n}\n\nfunction styleRemove(name) {\n return function() {\n this.style.removeProperty(name);\n };\n}\n\nfunction styleConstant(name, interpolate, value1) {\n var string00,\n string1 = value1 + \"\",\n interpolate0;\n return function() {\n var string0 = style(this, name);\n return string0 === string1 ? null\n : string0 === string00 ? interpolate0\n : interpolate0 = interpolate(string00 = string0, value1);\n };\n}\n\nfunction styleFunction(name, interpolate, value) {\n var string00,\n string10,\n interpolate0;\n return function() {\n var string0 = style(this, name),\n value1 = value(this),\n string1 = value1 + \"\";\n if (value1 == null) string1 = value1 = (this.style.removeProperty(name), style(this, name));\n return string0 === string1 ? null\n : string0 === string00 && string1 === string10 ? interpolate0\n : (string10 = string1, interpolate0 = interpolate(string00 = string0, value1));\n };\n}\n\nfunction styleMaybeRemove(id, name) {\n var on0, on1, listener0, key = \"style.\" + name, event = \"end.\" + key, remove;\n return function() {\n var schedule = set(this, id),\n on = schedule.on,\n listener = schedule.value[key] == null ? remove || (remove = styleRemove(name)) : undefined;\n\n // If this node shared a dispatch with the previous node,\n // just assign the updated shared dispatch and we’re done!\n // Otherwise, copy-on-write.\n if (on !== on0 || listener0 !== listener) (on1 = (on0 = on).copy()).on(event, listener0 = listener);\n\n schedule.on = on1;\n };\n}\n\nexport default function(name, value, priority) {\n var i = (name += \"\") === \"transform\" ? interpolateTransform : interpolate;\n return value == null ? this\n .styleTween(name, styleNull(name, i))\n .on(\"end.style.\" + name, styleRemove(name))\n : typeof value === \"function\" ? this\n .styleTween(name, styleFunction(name, i, tweenValue(this, \"style.\" + name, value)))\n .each(styleMaybeRemove(this._id, name))\n : this\n .styleTween(name, styleConstant(name, i, value), priority)\n .on(\"end.style.\" + name, null);\n}\n","function styleInterpolate(name, i, priority) {\n return function(t) {\n this.style.setProperty(name, i.call(this, t), priority);\n };\n}\n\nfunction styleTween(name, value, priority) {\n var t, i0;\n function tween() {\n var i = value.apply(this, arguments);\n if (i !== i0) t = (i0 = i) && styleInterpolate(name, i, priority);\n return t;\n }\n tween._value = value;\n return tween;\n}\n\nexport default function(name, value, priority) {\n var key = \"style.\" + (name += \"\");\n if (arguments.length < 2) return (key = this.tween(key)) && key._value;\n if (value == null) return this.tween(key, null);\n if (typeof value !== \"function\") throw new Error;\n return this.tween(key, styleTween(name, value, priority == null ? \"\" : priority));\n}\n","import {tweenValue} from \"./tween.js\";\n\nfunction textConstant(value) {\n return function() {\n this.textContent = value;\n };\n}\n\nfunction textFunction(value) {\n return function() {\n var value1 = value(this);\n this.textContent = value1 == null ? \"\" : value1;\n };\n}\n\nexport default function(value) {\n return this.tween(\"text\", typeof value === \"function\"\n ? textFunction(tweenValue(this, \"text\", value))\n : textConstant(value == null ? \"\" : value + \"\"));\n}\n","function textInterpolate(i) {\n return function(t) {\n this.textContent = i.call(this, t);\n };\n}\n\nfunction textTween(value) {\n var t0, i0;\n function tween() {\n var i = value.apply(this, arguments);\n if (i !== i0) t0 = (i0 = i) && textInterpolate(i);\n return t0;\n }\n tween._value = value;\n return tween;\n}\n\nexport default function(value) {\n var key = \"text\";\n if (arguments.length < 1) return (key = this.tween(key)) && key._value;\n if (value == null) return this.tween(key, null);\n if (typeof value !== \"function\") throw new Error;\n return this.tween(key, textTween(value));\n}\n","import {Transition, newId} from \"./index.js\";\nimport schedule, {get} from \"./schedule.js\";\n\nexport default function() {\n var name = this._name,\n id0 = this._id,\n id1 = newId();\n\n for (var groups = this._groups, m = groups.length, j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n if (node = group[i]) {\n var inherit = get(node, id0);\n schedule(node, name, id1, i, group, {\n time: inherit.time + inherit.delay + inherit.duration,\n delay: 0,\n duration: inherit.duration,\n ease: inherit.ease\n });\n }\n }\n }\n\n return new Transition(groups, this._parents, name, id1);\n}\n","import {set} from \"./schedule.js\";\n\nexport default function() {\n var on0, on1, that = this, id = that._id, size = that.size();\n return new Promise(function(resolve, reject) {\n var cancel = {value: reject},\n end = {value: function() { if (--size === 0) resolve(); }};\n\n that.each(function() {\n var schedule = set(this, id),\n on = schedule.on;\n\n // If this node shared a dispatch with the previous node,\n // just assign the updated shared dispatch and we’re done!\n // Otherwise, copy-on-write.\n if (on !== on0) {\n on1 = (on0 = on).copy();\n on1._.cancel.push(cancel);\n on1._.interrupt.push(cancel);\n on1._.end.push(end);\n }\n\n schedule.on = on1;\n });\n\n // The selection was empty, resolve end immediately\n if (size === 0) resolve();\n });\n}\n","import {selection} from \"d3-selection\";\nimport transition_attr from \"./attr.js\";\nimport transition_attrTween from \"./attrTween.js\";\nimport transition_delay from \"./delay.js\";\nimport transition_duration from \"./duration.js\";\nimport transition_ease from \"./ease.js\";\nimport transition_easeVarying from \"./easeVarying.js\";\nimport transition_filter from \"./filter.js\";\nimport transition_merge from \"./merge.js\";\nimport transition_on from \"./on.js\";\nimport transition_remove from \"./remove.js\";\nimport transition_select from \"./select.js\";\nimport transition_selectAll from \"./selectAll.js\";\nimport transition_selection from \"./selection.js\";\nimport transition_style from \"./style.js\";\nimport transition_styleTween from \"./styleTween.js\";\nimport transition_text from \"./text.js\";\nimport transition_textTween from \"./textTween.js\";\nimport transition_transition from \"./transition.js\";\nimport transition_tween from \"./tween.js\";\nimport transition_end from \"./end.js\";\n\nvar id = 0;\n\nexport function Transition(groups, parents, name, id) {\n this._groups = groups;\n this._parents = parents;\n this._name = name;\n this._id = id;\n}\n\nexport default function transition(name) {\n return selection().transition(name);\n}\n\nexport function newId() {\n return ++id;\n}\n\nvar selection_prototype = selection.prototype;\n\nTransition.prototype = transition.prototype = {\n constructor: Transition,\n select: transition_select,\n selectAll: transition_selectAll,\n selectChild: selection_prototype.selectChild,\n selectChildren: selection_prototype.selectChildren,\n filter: transition_filter,\n merge: transition_merge,\n selection: transition_selection,\n transition: transition_transition,\n call: selection_prototype.call,\n nodes: selection_prototype.nodes,\n node: selection_prototype.node,\n size: selection_prototype.size,\n empty: selection_prototype.empty,\n each: selection_prototype.each,\n on: transition_on,\n attr: transition_attr,\n attrTween: transition_attrTween,\n style: transition_style,\n styleTween: transition_styleTween,\n text: transition_text,\n textTween: transition_textTween,\n remove: transition_remove,\n tween: transition_tween,\n delay: transition_delay,\n duration: transition_duration,\n ease: transition_ease,\n easeVarying: transition_easeVarying,\n end: transition_end,\n [Symbol.iterator]: selection_prototype[Symbol.iterator]\n};\n","export function cubicIn(t) {\n return t * t * t;\n}\n\nexport function cubicOut(t) {\n return --t * t * t + 1;\n}\n\nexport function cubicInOut(t) {\n return ((t *= 2) <= 1 ? t * t * t : (t -= 2) * t * t + 2) / 2;\n}\n","import {Transition, newId} from \"../transition/index.js\";\nimport schedule from \"../transition/schedule.js\";\nimport {easeCubicInOut} from \"d3-ease\";\nimport {now} from \"d3-timer\";\n\nvar defaultTiming = {\n time: null, // Set on use.\n delay: 0,\n duration: 250,\n ease: easeCubicInOut\n};\n\nfunction inherit(node, id) {\n var timing;\n while (!(timing = node.__transition) || !(timing = timing[id])) {\n if (!(node = node.parentNode)) {\n throw new Error(`transition ${id} not found`);\n }\n }\n return timing;\n}\n\nexport default function(name) {\n var id,\n timing;\n\n if (name instanceof Transition) {\n id = name._id, name = name._name;\n } else {\n id = newId(), (timing = defaultTiming).time = now(), name = name == null ? null : name + \"\";\n }\n\n for (var groups = this._groups, m = groups.length, j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n if (node = group[i]) {\n schedule(node, name, id, i, group, timing || inherit(node, id));\n }\n }\n }\n\n return new Transition(groups, this._parents, name, id);\n}\n","import {selection} from \"d3-selection\";\nimport selection_interrupt from \"./interrupt.js\";\nimport selection_transition from \"./transition.js\";\n\nselection.prototype.interrupt = selection_interrupt;\nselection.prototype.transition = selection_transition;\n","export default function(x) {\n return Math.abs(x = Math.round(x)) >= 1e21\n ? x.toLocaleString(\"en\").replace(/,/g, \"\")\n : x.toString(10);\n}\n\n// Computes the decimal coefficient and exponent of the specified number x with\n// significant digits p, where x is positive and p is in [1, 21] or undefined.\n// For example, formatDecimalParts(1.23) returns [\"123\", 0].\nexport function formatDecimalParts(x, p) {\n if ((i = (x = p ? x.toExponential(p - 1) : x.toExponential()).indexOf(\"e\")) < 0) return null; // NaN, ±Infinity\n var i, coefficient = x.slice(0, i);\n\n // The string returned by toExponential either has the form \\d\\.\\d+e[-+]\\d+\n // (e.g., 1.2e+3) or the form \\de[-+]\\d+ (e.g., 1e+3).\n return [\n coefficient.length > 1 ? coefficient[0] + coefficient.slice(2) : coefficient,\n +x.slice(i + 1)\n ];\n}\n","import {formatDecimalParts} from \"./formatDecimal.js\";\n\nexport default function(x) {\n return x = formatDecimalParts(Math.abs(x)), x ? x[1] : NaN;\n}\n","export default function(grouping, thousands) {\n return function(value, width) {\n var i = value.length,\n t = [],\n j = 0,\n g = grouping[0],\n length = 0;\n\n while (i > 0 && g > 0) {\n if (length + g + 1 > width) g = Math.max(1, width - length);\n t.push(value.substring(i -= g, i + g));\n if ((length += g + 1) > width) break;\n g = grouping[j = (j + 1) % grouping.length];\n }\n\n return t.reverse().join(thousands);\n };\n}\n","export default function(numerals) {\n return function(value) {\n return value.replace(/[0-9]/g, function(i) {\n return numerals[+i];\n });\n };\n}\n","// [[fill]align][sign][symbol][0][width][,][.precision][~][type]\nvar re = /^(?:(.)?([<>=^]))?([+\\-( ])?([$#])?(0)?(\\d+)?(,)?(\\.\\d+)?(~)?([a-z%])?$/i;\n\nexport default function formatSpecifier(specifier) {\n if (!(match = re.exec(specifier))) throw new Error(\"invalid format: \" + specifier);\n var match;\n return new FormatSpecifier({\n fill: match[1],\n align: match[2],\n sign: match[3],\n symbol: match[4],\n zero: match[5],\n width: match[6],\n comma: match[7],\n precision: match[8] && match[8].slice(1),\n trim: match[9],\n type: match[10]\n });\n}\n\nformatSpecifier.prototype = FormatSpecifier.prototype; // instanceof\n\nexport function FormatSpecifier(specifier) {\n this.fill = specifier.fill === undefined ? \" \" : specifier.fill + \"\";\n this.align = specifier.align === undefined ? \">\" : specifier.align + \"\";\n this.sign = specifier.sign === undefined ? \"-\" : specifier.sign + \"\";\n this.symbol = specifier.symbol === undefined ? \"\" : specifier.symbol + \"\";\n this.zero = !!specifier.zero;\n this.width = specifier.width === undefined ? undefined : +specifier.width;\n this.comma = !!specifier.comma;\n this.precision = specifier.precision === undefined ? undefined : +specifier.precision;\n this.trim = !!specifier.trim;\n this.type = specifier.type === undefined ? \"\" : specifier.type + \"\";\n}\n\nFormatSpecifier.prototype.toString = function() {\n return this.fill\n + this.align\n + this.sign\n + this.symbol\n + (this.zero ? \"0\" : \"\")\n + (this.width === undefined ? \"\" : Math.max(1, this.width | 0))\n + (this.comma ? \",\" : \"\")\n + (this.precision === undefined ? \"\" : \".\" + Math.max(0, this.precision | 0))\n + (this.trim ? \"~\" : \"\")\n + this.type;\n};\n","// Trims insignificant zeros, e.g., replaces 1.2000k with 1.2k.\nexport default function(s) {\n out: for (var n = s.length, i = 1, i0 = -1, i1; i < n; ++i) {\n switch (s[i]) {\n case \".\": i0 = i1 = i; break;\n case \"0\": if (i0 === 0) i0 = i; i1 = i; break;\n default: if (!+s[i]) break out; if (i0 > 0) i0 = 0; break;\n }\n }\n return i0 > 0 ? s.slice(0, i0) + s.slice(i1 + 1) : s;\n}\n","import {formatDecimalParts} from \"./formatDecimal.js\";\n\nexport var prefixExponent;\n\nexport default function(x, p) {\n var d = formatDecimalParts(x, p);\n if (!d) return x + \"\";\n var coefficient = d[0],\n exponent = d[1],\n i = exponent - (prefixExponent = Math.max(-8, Math.min(8, Math.floor(exponent / 3))) * 3) + 1,\n n = coefficient.length;\n return i === n ? coefficient\n : i > n ? coefficient + new Array(i - n + 1).join(\"0\")\n : i > 0 ? coefficient.slice(0, i) + \".\" + coefficient.slice(i)\n : \"0.\" + new Array(1 - i).join(\"0\") + formatDecimalParts(x, Math.max(0, p + i - 1))[0]; // less than 1y!\n}\n","import {formatDecimalParts} from \"./formatDecimal.js\";\n\nexport default function(x, p) {\n var d = formatDecimalParts(x, p);\n if (!d) return x + \"\";\n var coefficient = d[0],\n exponent = d[1];\n return exponent < 0 ? \"0.\" + new Array(-exponent).join(\"0\") + coefficient\n : coefficient.length > exponent + 1 ? coefficient.slice(0, exponent + 1) + \".\" + coefficient.slice(exponent + 1)\n : coefficient + new Array(exponent - coefficient.length + 2).join(\"0\");\n}\n","import formatDecimal from \"./formatDecimal.js\";\nimport formatPrefixAuto from \"./formatPrefixAuto.js\";\nimport formatRounded from \"./formatRounded.js\";\n\nexport default {\n \"%\": (x, p) => (x * 100).toFixed(p),\n \"b\": (x) => Math.round(x).toString(2),\n \"c\": (x) => x + \"\",\n \"d\": formatDecimal,\n \"e\": (x, p) => x.toExponential(p),\n \"f\": (x, p) => x.toFixed(p),\n \"g\": (x, p) => x.toPrecision(p),\n \"o\": (x) => Math.round(x).toString(8),\n \"p\": (x, p) => formatRounded(x * 100, p),\n \"r\": formatRounded,\n \"s\": formatPrefixAuto,\n \"X\": (x) => Math.round(x).toString(16).toUpperCase(),\n \"x\": (x) => Math.round(x).toString(16)\n};\n","export default function(x) {\n return x;\n}\n","import exponent from \"./exponent.js\";\nimport formatGroup from \"./formatGroup.js\";\nimport formatNumerals from \"./formatNumerals.js\";\nimport formatSpecifier from \"./formatSpecifier.js\";\nimport formatTrim from \"./formatTrim.js\";\nimport formatTypes from \"./formatTypes.js\";\nimport {prefixExponent} from \"./formatPrefixAuto.js\";\nimport identity from \"./identity.js\";\n\nvar map = Array.prototype.map,\n prefixes = [\"y\",\"z\",\"a\",\"f\",\"p\",\"n\",\"µ\",\"m\",\"\",\"k\",\"M\",\"G\",\"T\",\"P\",\"E\",\"Z\",\"Y\"];\n\nexport default function(locale) {\n var group = locale.grouping === undefined || locale.thousands === undefined ? identity : formatGroup(map.call(locale.grouping, Number), locale.thousands + \"\"),\n currencyPrefix = locale.currency === undefined ? \"\" : locale.currency[0] + \"\",\n currencySuffix = locale.currency === undefined ? \"\" : locale.currency[1] + \"\",\n decimal = locale.decimal === undefined ? \".\" : locale.decimal + \"\",\n numerals = locale.numerals === undefined ? identity : formatNumerals(map.call(locale.numerals, String)),\n percent = locale.percent === undefined ? \"%\" : locale.percent + \"\",\n minus = locale.minus === undefined ? \"−\" : locale.minus + \"\",\n nan = locale.nan === undefined ? \"NaN\" : locale.nan + \"\";\n\n function newFormat(specifier) {\n specifier = formatSpecifier(specifier);\n\n var fill = specifier.fill,\n align = specifier.align,\n sign = specifier.sign,\n symbol = specifier.symbol,\n zero = specifier.zero,\n width = specifier.width,\n comma = specifier.comma,\n precision = specifier.precision,\n trim = specifier.trim,\n type = specifier.type;\n\n // The \"n\" type is an alias for \",g\".\n if (type === \"n\") comma = true, type = \"g\";\n\n // The \"\" type, and any invalid type, is an alias for \".12~g\".\n else if (!formatTypes[type]) precision === undefined && (precision = 12), trim = true, type = \"g\";\n\n // If zero fill is specified, padding goes after sign and before digits.\n if (zero || (fill === \"0\" && align === \"=\")) zero = true, fill = \"0\", align = \"=\";\n\n // Compute the prefix and suffix.\n // For SI-prefix, the suffix is lazily computed.\n var prefix = symbol === \"$\" ? currencyPrefix : symbol === \"#\" && /[boxX]/.test(type) ? \"0\" + type.toLowerCase() : \"\",\n suffix = symbol === \"$\" ? currencySuffix : /[%p]/.test(type) ? percent : \"\";\n\n // What format function should we use?\n // Is this an integer type?\n // Can this type generate exponential notation?\n var formatType = formatTypes[type],\n maybeSuffix = /[defgprs%]/.test(type);\n\n // Set the default precision if not specified,\n // or clamp the specified precision to the supported range.\n // For significant precision, it must be in [1, 21].\n // For fixed precision, it must be in [0, 20].\n precision = precision === undefined ? 6\n : /[gprs]/.test(type) ? Math.max(1, Math.min(21, precision))\n : Math.max(0, Math.min(20, precision));\n\n function format(value) {\n var valuePrefix = prefix,\n valueSuffix = suffix,\n i, n, c;\n\n if (type === \"c\") {\n valueSuffix = formatType(value) + valueSuffix;\n value = \"\";\n } else {\n value = +value;\n\n // Determine the sign. -0 is not less than 0, but 1 / -0 is!\n var valueNegative = value < 0 || 1 / value < 0;\n\n // Perform the initial formatting.\n value = isNaN(value) ? nan : formatType(Math.abs(value), precision);\n\n // Trim insignificant zeros.\n if (trim) value = formatTrim(value);\n\n // If a negative value rounds to zero after formatting, and no explicit positive sign is requested, hide the sign.\n if (valueNegative && +value === 0 && sign !== \"+\") valueNegative = false;\n\n // Compute the prefix and suffix.\n valuePrefix = (valueNegative ? (sign === \"(\" ? sign : minus) : sign === \"-\" || sign === \"(\" ? \"\" : sign) + valuePrefix;\n valueSuffix = (type === \"s\" ? prefixes[8 + prefixExponent / 3] : \"\") + valueSuffix + (valueNegative && sign === \"(\" ? \")\" : \"\");\n\n // Break the formatted value into the integer “value” part that can be\n // grouped, and fractional or exponential “suffix” part that is not.\n if (maybeSuffix) {\n i = -1, n = value.length;\n while (++i < n) {\n if (c = value.charCodeAt(i), 48 > c || c > 57) {\n valueSuffix = (c === 46 ? decimal + value.slice(i + 1) : value.slice(i)) + valueSuffix;\n value = value.slice(0, i);\n break;\n }\n }\n }\n }\n\n // If the fill character is not \"0\", grouping is applied before padding.\n if (comma && !zero) value = group(value, Infinity);\n\n // Compute the padding.\n var length = valuePrefix.length + value.length + valueSuffix.length,\n padding = length < width ? new Array(width - length + 1).join(fill) : \"\";\n\n // If the fill character is \"0\", grouping is applied after padding.\n if (comma && zero) value = group(padding + value, padding.length ? width - valueSuffix.length : Infinity), padding = \"\";\n\n // Reconstruct the final output based on the desired alignment.\n switch (align) {\n case \"<\": value = valuePrefix + value + valueSuffix + padding; break;\n case \"=\": value = valuePrefix + padding + value + valueSuffix; break;\n case \"^\": value = padding.slice(0, length = padding.length >> 1) + valuePrefix + value + valueSuffix + padding.slice(length); break;\n default: value = padding + valuePrefix + value + valueSuffix; break;\n }\n\n return numerals(value);\n }\n\n format.toString = function() {\n return specifier + \"\";\n };\n\n return format;\n }\n\n function formatPrefix(specifier, value) {\n var f = newFormat((specifier = formatSpecifier(specifier), specifier.type = \"f\", specifier)),\n e = Math.max(-8, Math.min(8, Math.floor(exponent(value) / 3))) * 3,\n k = Math.pow(10, -e),\n prefix = prefixes[8 + e / 3];\n return function(value) {\n return f(k * value) + prefix;\n };\n }\n\n return {\n format: newFormat,\n formatPrefix: formatPrefix\n };\n}\n","import formatLocale from \"./locale.js\";\n\nvar locale;\nexport var format;\nexport var formatPrefix;\n\ndefaultLocale({\n thousands: \",\",\n grouping: [3],\n currency: [\"$\", \"\"]\n});\n\nexport default function defaultLocale(definition) {\n locale = formatLocale(definition);\n format = locale.format;\n formatPrefix = locale.formatPrefix;\n return locale;\n}\n","import exponent from \"./exponent.js\";\n\nexport default function(step) {\n return Math.max(0, -exponent(Math.abs(step)));\n}\n","import exponent from \"./exponent.js\";\n\nexport default function(step, value) {\n return Math.max(0, Math.max(-8, Math.min(8, Math.floor(exponent(value) / 3))) * 3 - exponent(Math.abs(step)));\n}\n","import exponent from \"./exponent.js\";\n\nexport default function(step, max) {\n step = Math.abs(step), max = Math.abs(max) - step;\n return Math.max(0, exponent(max) - exponent(step)) + 1;\n}\n","export function initRange(domain, range) {\n switch (arguments.length) {\n case 0: break;\n case 1: this.range(domain); break;\n default: this.range(range).domain(domain); break;\n }\n return this;\n}\n\nexport function initInterpolator(domain, interpolator) {\n switch (arguments.length) {\n case 0: break;\n case 1: {\n if (typeof domain === \"function\") this.interpolator(domain);\n else this.range(domain);\n break;\n }\n default: {\n this.domain(domain);\n if (typeof interpolator === \"function\") this.interpolator(interpolator);\n else this.range(interpolator);\n break;\n }\n }\n return this;\n}\n","export default function constants(x) {\n return function() {\n return x;\n };\n}\n","export default function number(x) {\n return +x;\n}\n","import {bisect} from \"d3-array\";\nimport {interpolate as interpolateValue, interpolateNumber, interpolateRound} from \"d3-interpolate\";\nimport constant from \"./constant.js\";\nimport number from \"./number.js\";\n\nvar unit = [0, 1];\n\nexport function identity(x) {\n return x;\n}\n\nfunction normalize(a, b) {\n return (b -= (a = +a))\n ? function(x) { return (x - a) / b; }\n : constant(isNaN(b) ? NaN : 0.5);\n}\n\nfunction clamper(a, b) {\n var t;\n if (a > b) t = a, a = b, b = t;\n return function(x) { return Math.max(a, Math.min(b, x)); };\n}\n\n// normalize(a, b)(x) takes a domain value x in [a,b] and returns the corresponding parameter t in [0,1].\n// interpolate(a, b)(t) takes a parameter t in [0,1] and returns the corresponding range value x in [a,b].\nfunction bimap(domain, range, interpolate) {\n var d0 = domain[0], d1 = domain[1], r0 = range[0], r1 = range[1];\n if (d1 < d0) d0 = normalize(d1, d0), r0 = interpolate(r1, r0);\n else d0 = normalize(d0, d1), r0 = interpolate(r0, r1);\n return function(x) { return r0(d0(x)); };\n}\n\nfunction polymap(domain, range, interpolate) {\n var j = Math.min(domain.length, range.length) - 1,\n d = new Array(j),\n r = new Array(j),\n i = -1;\n\n // Reverse descending domains.\n if (domain[j] < domain[0]) {\n domain = domain.slice().reverse();\n range = range.slice().reverse();\n }\n\n while (++i < j) {\n d[i] = normalize(domain[i], domain[i + 1]);\n r[i] = interpolate(range[i], range[i + 1]);\n }\n\n return function(x) {\n var i = bisect(domain, x, 1, j) - 1;\n return r[i](d[i](x));\n };\n}\n\nexport function copy(source, target) {\n return target\n .domain(source.domain())\n .range(source.range())\n .interpolate(source.interpolate())\n .clamp(source.clamp())\n .unknown(source.unknown());\n}\n\nexport function transformer() {\n var domain = unit,\n range = unit,\n interpolate = interpolateValue,\n transform,\n untransform,\n unknown,\n clamp = identity,\n piecewise,\n output,\n input;\n\n function rescale() {\n var n = Math.min(domain.length, range.length);\n if (clamp !== identity) clamp = clamper(domain[0], domain[n - 1]);\n piecewise = n > 2 ? polymap : bimap;\n output = input = null;\n return scale;\n }\n\n function scale(x) {\n return x == null || isNaN(x = +x) ? unknown : (output || (output = piecewise(domain.map(transform), range, interpolate)))(transform(clamp(x)));\n }\n\n scale.invert = function(y) {\n return clamp(untransform((input || (input = piecewise(range, domain.map(transform), interpolateNumber)))(y)));\n };\n\n scale.domain = function(_) {\n return arguments.length ? (domain = Array.from(_, number), rescale()) : domain.slice();\n };\n\n scale.range = function(_) {\n return arguments.length ? (range = Array.from(_), rescale()) : range.slice();\n };\n\n scale.rangeRound = function(_) {\n return range = Array.from(_), interpolate = interpolateRound, rescale();\n };\n\n scale.clamp = function(_) {\n return arguments.length ? (clamp = _ ? true : identity, rescale()) : clamp !== identity;\n };\n\n scale.interpolate = function(_) {\n return arguments.length ? (interpolate = _, rescale()) : interpolate;\n };\n\n scale.unknown = function(_) {\n return arguments.length ? (unknown = _, scale) : unknown;\n };\n\n return function(t, u) {\n transform = t, untransform = u;\n return rescale();\n };\n}\n\nexport default function continuous() {\n return transformer()(identity, identity);\n}\n","import {tickStep} from \"d3-array\";\nimport {format, formatPrefix, formatSpecifier, precisionFixed, precisionPrefix, precisionRound} from \"d3-format\";\n\nexport default function tickFormat(start, stop, count, specifier) {\n var step = tickStep(start, stop, count),\n precision;\n specifier = formatSpecifier(specifier == null ? \",f\" : specifier);\n switch (specifier.type) {\n case \"s\": {\n var value = Math.max(Math.abs(start), Math.abs(stop));\n if (specifier.precision == null && !isNaN(precision = precisionPrefix(step, value))) specifier.precision = precision;\n return formatPrefix(specifier, value);\n }\n case \"\":\n case \"e\":\n case \"g\":\n case \"p\":\n case \"r\": {\n if (specifier.precision == null && !isNaN(precision = precisionRound(step, Math.max(Math.abs(start), Math.abs(stop))))) specifier.precision = precision - (specifier.type === \"e\");\n break;\n }\n case \"f\":\n case \"%\": {\n if (specifier.precision == null && !isNaN(precision = precisionFixed(step))) specifier.precision = precision - (specifier.type === \"%\") * 2;\n break;\n }\n }\n return format(specifier);\n}\n","import {ticks, tickIncrement} from \"d3-array\";\nimport continuous, {copy} from \"./continuous.js\";\nimport {initRange} from \"./init.js\";\nimport tickFormat from \"./tickFormat.js\";\n\nexport function linearish(scale) {\n var domain = scale.domain;\n\n scale.ticks = function(count) {\n var d = domain();\n return ticks(d[0], d[d.length - 1], count == null ? 10 : count);\n };\n\n scale.tickFormat = function(count, specifier) {\n var d = domain();\n return tickFormat(d[0], d[d.length - 1], count == null ? 10 : count, specifier);\n };\n\n scale.nice = function(count) {\n if (count == null) count = 10;\n\n var d = domain();\n var i0 = 0;\n var i1 = d.length - 1;\n var start = d[i0];\n var stop = d[i1];\n var prestep;\n var step;\n var maxIter = 10;\n\n if (stop < start) {\n step = start, start = stop, stop = step;\n step = i0, i0 = i1, i1 = step;\n }\n \n while (maxIter-- > 0) {\n step = tickIncrement(start, stop, count);\n if (step === prestep) {\n d[i0] = start\n d[i1] = stop\n return domain(d);\n } else if (step > 0) {\n start = Math.floor(start / step) * step;\n stop = Math.ceil(stop / step) * step;\n } else if (step < 0) {\n start = Math.ceil(start * step) / step;\n stop = Math.floor(stop * step) / step;\n } else {\n break;\n }\n prestep = step;\n }\n\n return scale;\n };\n\n return scale;\n}\n\nexport default function linear() {\n var scale = continuous();\n\n scale.copy = function() {\n return copy(scale, linear());\n };\n\n initRange.apply(scale, arguments);\n\n return linearish(scale);\n}\n","import {linearish} from \"./linear.js\";\nimport {copy, transformer} from \"./continuous.js\";\nimport {initRange} from \"./init.js\";\n\nfunction transformSymlog(c) {\n return function(x) {\n return Math.sign(x) * Math.log1p(Math.abs(x / c));\n };\n}\n\nfunction transformSymexp(c) {\n return function(x) {\n return Math.sign(x) * Math.expm1(Math.abs(x)) * c;\n };\n}\n\nexport function symlogish(transform) {\n var c = 1, scale = transform(transformSymlog(c), transformSymexp(c));\n\n scale.constant = function(_) {\n return arguments.length ? transform(transformSymlog(c = +_), transformSymexp(c)) : c;\n };\n\n return linearish(scale);\n}\n\nexport default function symlog() {\n var scale = symlogish(transformer());\n\n scale.copy = function() {\n return copy(scale, symlog()).constant(scale.constant());\n };\n\n return initRange.apply(scale, arguments);\n}\n","export function Transform(k, x, y) {\n this.k = k;\n this.x = x;\n this.y = y;\n}\n\nTransform.prototype = {\n constructor: Transform,\n scale: function(k) {\n return k === 1 ? this : new Transform(this.k * k, this.x, this.y);\n },\n translate: function(x, y) {\n return x === 0 & y === 0 ? this : new Transform(this.k, this.x + this.k * x, this.y + this.k * y);\n },\n apply: function(point) {\n return [point[0] * this.k + this.x, point[1] * this.k + this.y];\n },\n applyX: function(x) {\n return x * this.k + this.x;\n },\n applyY: function(y) {\n return y * this.k + this.y;\n },\n invert: function(location) {\n return [(location[0] - this.x) / this.k, (location[1] - this.y) / this.k];\n },\n invertX: function(x) {\n return (x - this.x) / this.k;\n },\n invertY: function(y) {\n return (y - this.y) / this.k;\n },\n rescaleX: function(x) {\n return x.copy().domain(x.range().map(this.invertX, this).map(x.invert, x));\n },\n rescaleY: function(y) {\n return y.copy().domain(y.range().map(this.invertY, this).map(y.invert, y));\n },\n toString: function() {\n return \"translate(\" + this.x + \",\" + this.y + \") scale(\" + this.k + \")\";\n }\n};\n\nexport var identity = new Transform(1, 0, 0);\n\ntransform.prototype = Transform.prototype;\n\nexport default function transform(node) {\n while (!node.__zoom) if (!(node = node.parentNode)) return identity;\n return node.__zoom;\n}\n","import * as d3 from 'd3';\nimport type { ChartOptions } from './types';\n\nexport function createSvgContainer(el: HTMLElement, options: ChartOptions) {\n const { width, height, margin, compact } = options;\n\n el.replaceChildren();\n\n if (compact) {\n el.style.height = height + 'px';\n el.style.lineHeight = height + 'px';\n }\n\n const svg = d3\n .select(el) // Append the SVG element to the body\n .append('svg')\n .attr('width', width + margin.left + margin.right) // Set the total width\n .attr('height', height + margin.top + margin.bottom) // Set the total height\n .append('g') // Append a group to handle margins\n .attr('transform', `translate(${margin.left},${margin.top})`);\n\n return svg;\n}\n","import type { BinLike, ChartOptions, Scales, SVG } from './types';\nimport * as d3 from 'd3';\n\nexport function drawBins(\n svg: SVG,\n bins: BinLike[],\n dimension: ChartOptions,\n scales: Scales,\n) {\n const { height } = dimension;\n\n const { x, y } = scales;\n\n const tooltip = d3\n .select('body')\n .append('div')\n .attr('class', 'svg-tooltip')\n .style('position', 'absolute')\n .style('visibility', 'hidden');\n\n // Three function that change the tooltip when user hover / move / leave a cell\n const mouseover = function (_event: MouseEvent, d: BinLike) {\n tooltip\n .style('visibility', 'visible')\n .text(`count: ${d.length}\\nx0: ${d.x0}\\nx1: ${d.x1}`);\n };\n\n const mousemove = function (event: MouseEvent) {\n tooltip\n .style('top', event.pageY - 10 + 'px')\n .style('left', event.pageX + 10 + 'px');\n };\n\n const mouseout = function () {\n tooltip.style('visibility', 'hidden');\n };\n\n // Add rectangles for the histogram bars\n svg.selectAll('rect')\n .data(bins)\n .enter()\n .append('rect')\n .attr('x', (d) => x(d.x0!)) // Position the bar based on the bin start\n .attr('y', (d) => y(d.length)) // Height based on bin count\n .attr('width', (d) => x(d.x1!) - x(d.x0!)) // Bar width based on logarithmic intervals\n .attr('height', (d) => height - y(d.length)) // Invert height to fit SVG coordinate system\n .style('fill', '#929BAD')\n .attr('stroke', '#fff') // Border color\n .attr('stroke-opacity', 0.2)\n .attr('stroke-width', 0.5)\n .on('mouseover', mouseover)\n .on('mousemove', mousemove)\n .on('mouseout', mouseout)\n .append('title').text((d) => `[${d.x0}, ${d.x1}]\\n` + d.length + '\\n'); // Set bar color\n}\n","import * as d3 from 'd3';\nimport type { ChartOptions, Scales } from './types';\n\nexport function createGridlines(\n svg: d3.Selection<SVGGElement, unknown, null, undefined>,\n options: ChartOptions,\n scales: Scales,\n xTicks: (d: d3.Axis<d3.NumberValue>) => d3.Axis<d3.NumberValue>,\n) {\n const { width, height } = options;\n\n function makeYGridlines() {\n return d3.axisLeft(scales.y) // Use the y-scale for horizontal gridlines\n .ticks(6); // Adjust the number of gridlines\n }\n\n function makeXGridlines() {\n return xTicks(d3.axisBottom(scales.x));\n }\n // Append horizontal gridlines\n svg.append('g')\n .attr('class', 'grid') // Add a class for styling\n .attr('font-family', '\\'Manrope\\', sans-serif') // Doesn't work\n .call(makeYGridlines()\n .tickSize(-width) // Extend gridlines across the chart width\n .tickFormat(() => '')); // Remove tick labels\n\n // Append vertical gridlines\n svg.append('g')\n .attr('class', 'grid') // Add a class for styling\n .attr('font-family', '\\'Manrope\\', sans-serif')\n .attr('transform', `translate(0,${height})`) // Position at the bottom of the chart\n .call(makeXGridlines()\n .tickSize(-height) // Extend gridlines across the chart height\n .tickFormat(() => '')); // Remove tick labels\n\n // Style the gridlines using CSS (or inline styles)\n d3.selectAll('.grid line')\n .style('stroke', '#E1E3EB') // Light gray gridlines\n // .style('stroke-dasharray', '2,2') // Dashed gridlines\n .style('opacity', 0.7); // Slightly transparent\n}\n","export function logspace(startExp: number, stopExp: number, num = 50, base = 10) {\n if (num <= 0) return [];\n\n const step = (stopExp - startExp) / (num - 1);\n const result = [];\n\n for (let i = 0; i < num; i++) {\n const exponent = startExp + i * step;\n result.push(Math.pow(base, exponent));\n }\n\n return result;\n}\n","import type * as d3 from 'd3';\nimport type { ChartOptions } from './types';\n\nexport function createLabels(\n svg: d3.Selection<SVGGElement, unknown, null, undefined>,\n options: ChartOptions,\n) {\n const { height, width, margin, xAxisLabel, yAxisLabel, compact } = options;\n\n if (compact) {\n return;\n }\n\n // X-axis label\n svg.append('text')\n .attr('class', 'x-axis-label')\n .attr('font-weight', 500)\n .attr('text-anchor', 'middle') // Center the text\n .attr('x', width / 2) // Center horizontally\n .attr('y', height + margin.bottom - 5) // Position below the X-axis\n .text(xAxisLabel ?? 'Value Range'); // Set your custom label text\n\n // Y-axis label\n svg.append('text')\n .attr('class', 'y-axis-label')\n .attr('font-weight', 500)\n .attr('text-anchor', 'middle') // Center the text\n .attr('x', -height / 2) // Center vertically (rotated axis)\n .attr('y', -margin.left + 15) // Position to the left of the Y-axis\n .attr('transform', 'rotate(-90)') // Rotate text 90 degrees counter-clockwise\n .text(yAxisLabel ?? 'Frequency'); // Set your custom label text\n}\n","import type { ChartOptions, Scales, SVG } from './types';\n\nexport function drawThreshold(svg: SVG, scales: Scales, options: ChartOptions) {\n const { threshold } = options;\n\n if (!threshold) {\n return;\n }\n\n svg\n .append('line')\n .attr('x1', scales.x(threshold))\n .attr('x2', scales.x(threshold))\n .attr('y1', 0)\n .attr('y2', options.height)\n .style('stroke', '#F05670')\n .style('stroke-width', '1')\n .style('stroke-dasharray', '7.4 3.2');\n}\n","import type { AnyBin, BinLike } from './types';\n\nexport function normalizeBins(bins: (d3.Bin<number, number> | AnyBin)[]): BinLike[] {\n return bins.map((it) => {\n if ('from' in it) {\n return {\n x0: it.from,\n x1: it.to,\n length: it.weight,\n };\n }\n\n return {\n x0: it.x0!,\n x1: it.x1!,\n length: it.length,\n };\n });\n}\n","import * as d3 from 'd3';\nimport { createSvgContainer } from './createSvgContainer';\nimport { drawBins } from './drawBins';\nimport { createGridlines } from './createGridlines';\nimport { logspace } from './logspace';\nimport { createLabels } from './createLabels';\nimport type { AnyBin, BinLike, ChartOptions } from './types';\nimport { drawThreshold } from './drawThreshold';\nimport { normalizeBins } from './normalizeBins';\n\nconst gx = (svg: d3.Selection<SVGGElement, unknown, null, undefined>, height: number) => {\n return svg.append('g')\n .style('font-size', '14px')\n .style('font-weight', '500')\n .attr('transform', `translate(0,${height})`);\n};\n\nconst gy = (svg: d3.Selection<SVGGElement, unknown, null, undefined>) => {\n return svg.append('g')\n .style('font-size', '14px')\n .style('font-weight', '500');\n};\n\nconst createYScale = (bins: BinLike[], height: number) => {\n return d3.scaleLinear()\n .domain([0, d3.max(bins, (d) => d.length)!]) // Max bin count for the domain\n .range([height, 0]); // Map to chart height (invert to match SVG coordinates)\n};\n\nexport function createHistogramLinear(el: HTMLElement, options: ChartOptions, data: number[]) {\n const { width, height, nBins = 10 } = options;\n\n const svg = createSvgContainer(el, options);\n\n const min = d3.min(data) as number;\n const max = d3.max(data) as number;\n\n const x = d3.scaleLinear()\n .domain([min, max])\n .range([0, width]);\n\n const bins: BinLike[] = normalizeBins(d3.bin()\n .domain(x.domain() as [number, number]) // Set the input domain to match the x-scale\n .thresholds(x.ticks(nBins))(data)); // Apply the data to create bins\n\n const y = createYScale(bins, height);\n\n createGridlines(svg, options, { x, y }, (x) => x.ticks(6));\n\n drawBins(svg, bins, options, { x, y });\n\n drawThreshold(svg, { x, y }, options);\n\n gx(svg, height).call(d3.axisBottom(x).tickSize(0));\n\n gy(svg).call(d3.axisLeft(y).tickSize(0));\n\n createLabels(svg, options);\n}\n\nexport function createHistogramLog(el: HTMLElement, options: ChartOptions, data: number[]) {\n const { width, height, nBins = 10 } = options;\n\n const svg = createSvgContainer(el, options);\n\n const min = d3.min(data) as number;\n const max = d3.max(data) as number;\n\n const x = d3.scaleSymlog()\n .domain([min, max]) // Input range (min and max values of the data)\n .range([0, width])\n .nice() // Output range (width of the chart)\n ;\n\n const createThresholds = (n: number) => {\n const res = [];\n\n for (let i = 0; i <= n; i++) {\n res.push(Number(x.invert(width * (i / n)).toFixed(2)));\n }\n\n return res;\n };\n\n const bins = normalizeBins(d3.bin()\n .domain(x.domain() as [number, number]) // Set the input domain to match the x-scale\n .thresholds(createThresholds(nBins))(data)); // Apply the data to create bins\n\n const y = createYScale(bins, height);\n\n const tickValues = logspace(0, Math.ceil(Math.log10(max)), 6);\n\n createGridlines(svg, options, { x, y }, (x) => x.tickValues(tickValues));\n\n drawBins(svg, bins, options, { x, y });\n\n drawThreshold(svg, { x, y }, options);\n\n gx(svg, height).call(d3.axisBottom(x).tickValues(tickValues).tickSize(0));\n\n gy(svg).call(d3.axisLeft(y).tickSize(0));\n\n createLabels(svg, options);\n}\n\nexport function createHistogramFromBins(el: HTMLElement, options: ChartOptions, _bins: AnyBin[]) {\n const { width, height } = options;\n\n const svg = createSvgContainer(el, options);\n\n const bins = normalizeBins(_bins);\n\n const min = d3.min(bins, (b) => b.x0) as number;\n const max = d3.max(bins, (b) => b.x1) as number;\n\n const x = d3.scaleSymlog()\n .domain([min, max])\n .range([0, width])\n .nice();\n\n const y = createYScale(bins, height);\n\n const tickValues = logspace(0, Math.ceil(Math.log10(max)), 6);\n\n createGridlines(svg, options, { x, y }, (x) => x.tickValues(tickValues));\n\n drawBins(svg, bins, options, { x, y });\n\n drawThreshold(svg, { x, y }, options);\n\n gx(svg, height).call(d3.axisBottom(x).tickValues(tickValues).tickSize(0));\n\n gy(svg).call(d3.axisLeft(y).tickSize(0));\n\n createLabels(svg, options);\n}\n","<script lang=\"ts\" setup>\nimport { computed, onMounted, ref, watch } from 'vue';\nimport { createHistogramFromBins, createHistogramLinear, createHistogramLog } from './histogram';\nimport type { ChartOptions, PlChartHistogramSettings } from './types';\n\nconst props = defineProps<{\n settings: PlChartHistogramSettings;\n}>();\n\nconst chart = ref<HTMLElement>();\n\nconst options = computed<ChartOptions>(() => {\n const { xAxisLabel, yAxisLabel, threshold, compact, totalWidth = 674, totalHeight = 252 } = props.settings;\n\n const margin = compact ? { top: 0, right: 0, bottom: 0, left: 0 } : { top: 0, right: 30, bottom: 40, left: 85 };\n const width = totalWidth - margin.left - margin.right;\n const height = totalHeight - margin.top - margin.bottom;\n\n return {\n width,\n height,\n margin,\n compact,\n nBins: 'nBins' in props.settings ? props.settings.nBins : 10,\n xAxisLabel: xAxisLabel,\n yAxisLabel: yAxisLabel,\n threshold: threshold,\n };\n});\n\nconst createHistogram = () => {\n const settings = props.settings;\n\n if (settings.type === 'log-bins') {\n createHistogramFromBins(chart.value!, options.value, settings.bins);\n return;\n }\n\n if (settings.log) {\n createHistogramLog(chart.value!, options.value, settings.numbers);\n } else {\n createHistogramLinear(chart.value!, options.value, settings.numbers);\n }\n};\n\nwatch(props, createHistogram);\n\nonMounted(createHistogram);\n</script>\n\n<template>\n <div :class=\"$style.component\">\n <div v-if=\"settings.title && !settings.compact\" :class=\"$style.title\">{{ settings.title }}</div>\n <div ref=\"chart\" />\n </div>\n</template>\n\n<style module>\n.component {\n display: flex;\n flex-direction: column;\n gap: 24px;\n svg {\n font-family: var(--font-family-base);\n }\n}\n\n.title {\n font-size: 20px;\n font-weight: 500;\n line-height: 24px; /* 120% */\n letter-spacing: -0.2px;\n}\n\n:global(.svg-tooltip) {\n font-family: var(--font-family-base);\n background: rgba(69,77,93,.9);\n border-radius: .1rem;\n color: #fff;\n display: block;\n font-size: 14px;\n max-width: 320px;\n padding: .2rem .4rem;\n position: absolute;\n text-overflow: ellipsis;\n white-space: pre;\n z-index: 300;\n visibility: hidden;\n}\n</style>\n","import { type InjectionKey, type ModelRef } from 'vue';\n\nexport const radioGroupNameKey: InjectionKey<string | undefined> = Symbol();\nexport const radioGroupModelKey: InjectionKey<ModelRef<unknown>> = Symbol();\n","<script setup lang=\"ts\" generic=\"M\">\nimport { inject } from 'vue';\nimport { radioGroupModelKey, radioGroupNameKey } from './keys';\n// eslint-disable-next-line @typescript-eslint/no-unused-vars -- used by the props documentation\nimport type PlRadioGroup from './PlRadioGroup.vue';\n\nconst standaloneModel = defineModel<M>();\n\nconst { name: standaloneName, ...props } = defineProps<{\n /** Used to group multiple radio controls. Will be ignored if this component is a descendant of a {@link PlRadioGroup}. */\n name?: string;\n /** Value that goes into `v-model`. */\n value?: M;\n /** Whether the radio control is disabled. */\n disabled?: boolean;\n}>();\n\ndefineSlots<{\n /** Label of the radio control. */\n default?(): unknown;\n}>();\n\nconst name = inject(radioGroupNameKey, standaloneName);\nconst model = inject<typeof standaloneModel>(radioGroupModelKey, standaloneModel);\n</script>\n\n<template>\n <label :class=\"$style.container\">\n <input v-model=\"model\" :class=\"$style.input\" type=\"radio\" :name v-bind=\"props\" />\n <span :class=\"$style.label\"><slot /></span>\n </label>\n</template>\n\n<style module>\n .container {\n display: flex;\n align-items: center;\n gap: 4px;\n padding: 4px;\n border-radius: 6px;\n transition: all 200ms ease-in-out;\n color: var(--txt-01);\n user-select: none;\n &:hover:not(:has(:disabled)) {\n background: var(--btn-sec-hover-grey);\n }\n &:has(:disabled) {\n color: var(--dis-01);\n }\n }\n\n .input {\n appearance: none;\n position: relative;\n block-size: 24px;\n aspect-ratio: 1;\n margin: 0;\n border-radius: 50%;\n outline: 2px solid transparent;\n color: inherit;\n transition: inherit;\n &:focus {\n outline-color: var(--border-color-focus);\n }\n &::before {\n content: \"\";\n position: absolute;\n inset: 2px;\n border-radius: 50%;\n border: 2px solid;\n }\n &::after {\n content: \"\";\n position: absolute;\n inset: 7.5px;\n border-radius: 50%;\n background-color: currentColor;\n scale: 0;\n transition: inherit;\n }\n &:checked::after {\n scale: 1;\n }\n }\n\n .label {\n padding-inline: 4px;\n line-height: calc(20 / 14);\n font-weight: 500;\n text-box: trim-both cap alphabetic;\n }\n</style>\n","<script setup lang=\"ts\" generic=\"M\">\nimport { provide } from 'vue';\nimport { radioGroupModelKey, radioGroupNameKey } from './keys';\nimport PlRadio from './PlRadio.vue';\n\ntype RadioGroupOption = {\n label: string;\n value: M;\n disabled?: boolean;\n};\n\nconst model = defineModel<M>();\n\nconst props = defineProps<{\n /** Name of the radio group. */\n name?: string;\n /**\n * List of available options.\n * Renders a list of {@link PlRadio} components before the {@link slots.default | default} slot.\n */\n options?: Readonly<RadioGroupOption[]>;\n /** Function to get option's unique key. Use if default mechanism (key = index) is unstable. */\n keyExtractor?: (value: M, index: number) => PropertyKey;\n}>();\n\n// eslint-disable-next-line @typescript-eslint/no-unused-vars -- used by the props documentation\nconst slots = defineSlots<{\n /**\n * Can be anything, but usually an array of {@link PlRadio} components.\n * If {@link props.options|options} are provided, they will be rendered before this slot.\n */\n default?(): unknown;\n /** Label of the radio group. */\n label?(): unknown;\n}>();\n\nconst keyExtractor = props.keyExtractor ?? ((_, i) => i);\n\nprovide(radioGroupNameKey, props.name);\nprovide(radioGroupModelKey, model);\n</script>\n\n<template>\n <fieldset :class=\"$style.container\">\n <legend :class=\"$style.label\">\n <slot name=\"label\" />\n </legend>\n <PlRadio\n v-for=\"(option, i) in options\"\n :key=\"keyExtractor(option.value, i)\"\n :value=\"option.value\"\n :disabled=\"option.disabled\"\n >\n {{ option.label }}\n </PlRadio>\n <slot />\n </fieldset>\n</template>\n\n<style module>\n .container {\n margin: 0;\n padding: 0;\n border: none;\n }\n .label {\n margin-block-end: 12px;\n padding: 0;\n color: var(--txt-01);\n line-height: calc(20 / 14);\n font-weight: 500;\n text-box: trim-both cap alphabetic;\n }\n</style>\n","/**\n * good for age range // from newborn → to old\n */\nexport const viridis = [\n '#FFF680',\n '#E8F66C',\n '#C4F16B',\n '#9AEB71',\n '#70E084',\n '#43D18A',\n '#2DBD96',\n '#28A8A0',\n '#2793A3',\n '#337B9E',\n '#3B6399',\n '#424C8F',\n '#4A3584',\n '#481B70',\n '#4A005C',\n];\n\n/**\n * from light → to hard (errors)\n */\nexport const magma = [\n '#FFF680',\n '#FFE871',\n '#FDCD6F',\n '#FEAD66',\n '#FA935F',\n '#F57258',\n '#EB555E',\n '#D64470',\n '#B83778',\n '#982D82',\n '#7E2584',\n '#611B84',\n '#49187A',\n '#38116B',\n '#2B125C',\n];\n\n/**\n * From light to hard\n */\nconst density = [\n '#DFFADC',\n '#C9F5D3',\n '#B3F2CF',\n '#9AEBCD',\n '#80DCCC',\n '#6DC8D2',\n '#61B7DB',\n '#5C97DB',\n '#5A7CD6',\n '#6060C7',\n '#674BB3',\n '#693799',\n '#6A277B',\n '#671D60',\n '#611347',\n];\n\n/**\n * From light to hard\n */\nconst salinity = [\n '#FAFAB4',\n '#ECFBA1',\n '#D6F598',\n '#BEEB91',\n '#A2E082',\n '#82D67C',\n '#67C77E',\n '#4FB281',\n '#429E8C',\n '#36898F',\n '#2B668F',\n '#254B85',\n '#213475',\n '#1E1E6B',\n '#1C0F5C',\n];\n\n/**\n * temperature // recommended for 5+ points\n */\nconst sunset = [\n '#FFEA80',\n '#FFD971',\n '#FFC171',\n '#FFA76C',\n '#FB8B6F',\n '#EB7179',\n '#D75F7F',\n '#C2518D',\n '#A64392',\n '#8038A4',\n '#6135A4',\n '#4735A3',\n '#283A8F',\n '#013C70',\n '#003752',\n];\n\n/**\n * hight contrast range // recommended for 5+ points\n */\nconst rainbow = [\n '#FFF780',\n '#E7FA6F',\n '#C1FA6A',\n '#9BF56C',\n '#79F080',\n '#66E698',\n '#56D7AC',\n '#50C7C7',\n '#56B4D7',\n '#6898EB',\n '#7481FA',\n '#8769FA',\n '#9450EB',\n '#9634D6',\n '#942AAE',\n];\n\n/**\n * from good to bad\n */\nconst spectrum = [\n '#43317B',\n '#3B57A3',\n '#3390B3',\n '#5DC2B1',\n '#95DBA5',\n '#B9EBA0',\n '#DBF5A6',\n '#F5F5B7',\n '#FEEA9D',\n '#FFD285',\n '#FA9B78',\n '#E55C72',\n '#C23665',\n '#8F1150',\n '#5C1243',\n];\n\n/**\n * from good to bad\n */\nconst teal_red = [\n '#122B5C',\n '#1A496B',\n '#1D7C8F',\n '#21A3A3',\n '#5FC7AB',\n '#99E0B1',\n '#CEF0CE',\n '#F0F0F0',\n '#FAE6D2',\n '#FAC5AA',\n '#FA9282',\n '#E55C72',\n '#C23665',\n '#8F1150',\n '#5C1243',\n];\n\n/**\n * Temperature // From cold → to warm\n */\nconst blue_red = [\n '#0E0E8F',\n '#1D23B8',\n '#3748E5',\n '#647DFA',\n '#96A7FA',\n '#C3CCFA',\n '#E1E5FA',\n '#F0F0F0',\n '#F9DBDB',\n '#F9BDBD',\n '#F59393',\n '#E55C72',\n '#C23665',\n '#8F1150',\n '#5C1243',\n];\n\n/**\n * Neutral range // from A → to B\n */\nconst lime_rose = [\n '#2E5C00',\n '#49850D',\n '#3748E5',\n '#8FC758',\n '#ABDB7B',\n '#C5EBA0',\n '#DCF5C4',\n '#F0F0F0',\n '#FADCF5',\n '#F5C4ED',\n '#F0A3E3',\n '#E573D2',\n '#CC49B6',\n '#991884',\n '#701260',\n];\n\n/**\n * bars only big range 7+ points // cutting\n */\nconst viridis_magma = [\n '#4A005C',\n '#4A2F7F',\n '#3F5895',\n '#3181A0',\n '#28A8A0',\n '#3ECD8D',\n '#86E67B',\n '#CEF36C',\n '#FFF680',\n '#FED470',\n '#FDA163',\n '#F36C5A',\n '#D64470',\n '#A03080',\n '#702084',\n '#451777',\n '#2B125C',\n];\n\nexport const palettes = {\n viridis,\n magma,\n density,\n salinity,\n sunset,\n rainbow,\n spectrum,\n teal_red,\n blue_red,\n lime_rose,\n viridis_magma,\n};\n\nexport type Palette = keyof typeof palettes;\n\n/**\n * Just named colors\n */\nexport const categoricalColors = {\n green_light: '#99E099',\n green_bright: '#198020',\n green_dark: '#42B842',\n violet_light: '#C1ADFF',\n violet_bright: '#845CFF',\n violet_dark: '#5F31CC',\n orange_light: '#FFCB8F',\n orange_bright: '#FF9429',\n orange_dark: '#C26A27',\n teal_light: '#90E0E0',\n teal_bright: '#27C2C2',\n teal_dark: '#068A94',\n rose_light: '#FAAAFA',\n rose_bright: '#E553E5',\n rose_dark: '#A324B2',\n lime_light: '#CBEB67',\n lime_bright: '#95C700',\n lime_dark: '#659406',\n blue_light: '#99CCFF',\n blue_bright: '#2D93FA',\n blue_dark: '#105BCC',\n red_light: '#FFADBA',\n red_bright: '#F05670',\n red_dark: '#AD3757',\n grey_light: '#D3D7E0',\n grey_bright: '#929BAD',\n grey_dark: '#5E5E70',\n};\n\nexport type CategoricalColor = keyof typeof categoricalColors;\n","import { categoricalColors, type CategoricalColor } from './palette';\n\n/**\n * Represents a color with red, green, blue, and alpha channels.\n * Provides methods to convert to HEX and RGBA formats.\n *\n * @param {number} r - Red channel (0-255).\n * @param {number} g - Green channel (0-255).\n * @param {number} b - Blue channel (0-255).\n * @param {number} [a=1] - Alpha channel (0-1).\n */\nexport function Color(r: number, g: number, b: number, a: number = 1) {\n return new class {\n constructor(\n public readonly r: number,\n public readonly g: number,\n public readonly b: number,\n public readonly a: number = 1,\n ) {}\n\n get hex() {\n const hexR = r.toString(16).padStart(2, '0');\n const hexG = g.toString(16).padStart(2, '0');\n const hexB = b.toString(16).padStart(2, '0');\n const hexA = Math.round(a * 255).toString(16).padStart(2, '0'); // Alpha in 2-digit hex\n\n return `#${hexR}${hexG}${hexB}${hexA}`;\n }\n\n get rgba() {\n return `rgb(${r}, ${g}, ${b}, ${a})`;\n }\n\n toString() {\n return this.hex;\n }\n\n toJSON() {\n return this.hex;\n }\n }(r, g, b, a);\n}\n\nexport type Color = ReturnType<typeof Color>;\n\nColor.fromHex = (hex: string): Color => {\n hex = hex.replace('#', '');\n\n let r: number, g: number, b: number, a: number = 1;\n\n if (hex.length === 6) {\n r = parseInt(hex.slice(0, 2), 16);\n g = parseInt(hex.slice(2, 4), 16);\n b = parseInt(hex.slice(4, 6), 16);\n } else if (hex.length === 8) {\n r = parseInt(hex.slice(0, 2), 16);\n g = parseInt(hex.slice(2, 4), 16);\n b = parseInt(hex.slice(4, 6), 16);\n a = parseInt(hex.slice(6, 8), 16) / 255;\n } else {\n throw new Error('Invalid HEX color format.');\n }\n\n return Color(r, g, b, a);\n};\n\n/**\n * Parses a color string (attention: currently supports only HEX, @todo)\n */\nColor.fromString = (str: string) => {\n if (str.startsWith('#')) {\n return Color.fromHex(str);\n }\n\n throw Error('TODO: implement rgb(a), hsl');\n};\n\nColor.categorical = (name: CategoricalColor) => {\n return Color.fromHex(categoricalColors[name]);\n};\n","import type { Palette } from './palette';\nimport { palettes } from './palette';\nimport { Color } from './color';\n\nexport type GradientSource = (string | Color)[] | Palette;\n\nColor.fromHex = (hex: string): Color => {\n hex = hex.replace('#', '');\n\n let r: number, g: number, b: number, a: number = 1;\n\n if (hex.length === 6) {\n r = parseInt(hex.slice(0, 2), 16);\n g = parseInt(hex.slice(2, 4), 16);\n b = parseInt(hex.slice(4, 6), 16);\n } else if (hex.length === 8) {\n r = parseInt(hex.slice(0, 2), 16);\n g = parseInt(hex.slice(2, 4), 16);\n b = parseInt(hex.slice(4, 6), 16);\n a = parseInt(hex.slice(6, 8), 16) / 255;\n } else {\n throw new Error('Invalid HEX color format.');\n }\n\n return Color(r, g, b, a);\n};\n\n/**\n * Parses a color string (attention: currently supports only HEX, @todo)\n */\nColor.fromString = (str: string) => {\n if (str.startsWith('#')) {\n return Color.fromHex(str);\n }\n\n throw Error('TODO: implement rgb(a), hsl');\n};\n\nfunction lerp(a: number, b: number, t: number): number {\n return a + t * (b - a);\n}\n\n/**\n * Interpolates between two colors.\n *\n * @param {Color} color1 - Start color.\n * @param {Color} color2 - End color.\n * @param {number} t - Interpolation factor [0, 1].\n * @returns {Color} Interpolated color.\n */\nexport function interpolateColor(color1: Color, color2: Color, t: number): Color {\n const r = Math.round(lerp(color1.r, color2.r, t));\n const g = Math.round(lerp(color1.g, color2.g, t));\n const b = Math.round(lerp(color1.b, color2.b, t));\n return Color(r, g, b);\n}\n\n/**\n * Normalizes a gradient definition into an array of Color objects.\n *\n * @param {GradientSource} raw - A gradient defined as an array of strings, Colors, or a Palette.\n * @returns {Color[]} Array of normalized Color objects.\n */\nexport function normalizeGradient(raw: GradientSource): Color[] {\n if (typeof raw === 'string') {\n return palettes[raw].map((it) => Color.fromString(it));\n }\n\n return raw.map((it) => {\n if (typeof it === 'string') {\n return Color.fromString(it);\n }\n\n return it;\n });\n}\n\n/**\n * Creates a gradient with utilities to sample or split colors.\n */\nexport function Gradient(gradient: GradientSource) {\n return new class {\n constructor(public readonly colors: Color[]) {}\n\n /**\n * Samples a color at a specific point in the gradient.\n *\n * @param {number} t - A value in [0, 1] representing the position in the gradient.\n */\n fromInterval(t: number) {\n if (t < 0) throw new Error('t must be greater than or equal to 0');\n if (t > 1) throw new Error('t must be less than or equal to 1');\n\n const colors = this.colors;\n\n const segments = colors.length - 1;\n\n const segment = Math.floor(t * segments);\n\n const localT = (t * segments) % 1; // Local t within the current segment\n\n const color1 = colors[segment];\n const color2 = colors[Math.min(segment + 1, segments)];\n\n return interpolateColor(color1, color2, localT);\n }\n\n /**\n * Gets the nth color in a gradient divided into segments.\n *\n * @param {number} n - Index of the color (1-based).\n * @param {number} segments - Total number of segments.\n */\n getNthOf(n: number, segments: number) {\n if (n <= 0) throw new Error('n must be greater than 0');\n if (n > segments) throw Error('n must be lower or equal than count of segments');\n return this.fromInterval((n - 1) / (segments - 1));\n }\n\n /**\n * Splits the gradient into n evenly spaced colors.\n */\n split(n: number) {\n if (n <= 0) throw new Error('n must be greater than 0');\n\n const colors: Color[] = [];\n\n for (let i = 0; i < n; i++) {\n const t = i / (n - 1); // Normalize t to [0, 1]\n colors.push(this.fromInterval(t));\n }\n\n return colors;\n }\n }(normalizeGradient(gradient));\n}\n","<script lang=\"ts\" setup>\nimport { type InjectionKey, computed, provide } from 'vue';\n\nconst props = defineProps<{\n context: object;\n contextKey: InjectionKey<unknown>;\n}>();\n\nprovide<unknown>(\n props.contextKey,\n computed(() => props.context),\n);\n</script>\n\n<template>\n <slot />\n</template>\n","export function clamp(n: number, lo: number, up: number) {\n return lo > n ? lo : n > up ? up : n;\n}\n","import { clamp } from '@/helpers/math';\nimport type { ComputedRef } from 'vue';\nimport { computed } from 'vue';\nexport const useSliderBreakpoints = (props: ComputedRef<{ min: number; max: number; step: number }>) => {\n return computed(() => {\n const result: number[] = [100];\n const { min, max, step } = props.value;\n let start = min;\n while (start < max) {\n start += step;\n const posValue = (clamp(start, min, max) - min) / (max - min);\n const percent = (1 - posValue) * 100;\n result.push(percent);\n }\n return result;\n });\n};\n","<script lang=\"ts\" setup>\nimport { computed, reactive, ref, unref, useSlots, watch } from 'vue';\nimport { useMouseCapture } from '@/composition/useMouseCapture';\nimport { tapIf } from '@/helpers/functions';\nimport { clamp } from '@/helpers/math';\nimport { PlTooltip } from '@/components/PlTooltip';\nimport type { SliderMode } from '@/types';\nimport { useSliderBreakpoints } from '@/composition/useSliderBreakpoints';\n\nconst slots = useSlots();\n\nconst emit = defineEmits(['update:modelValue']);\n\nconst props = withDefaults(\n defineProps<{\n modelValue: number;\n min?: number;\n max: number;\n step?: number;\n label?: string;\n helper?: string;\n error?: string;\n mode?: SliderMode;\n measure?: string;\n breakpoints?: boolean;\n disabled?: boolean;\n }>(),\n {\n label: undefined,\n helper: undefined,\n error: undefined,\n min: 0,\n step: 1,\n mode: 'text',\n measure: '',\n breakpoints: false,\n disabled: false,\n },\n);\n\nconst data = reactive({\n deltaValue: 0,\n});\n\nconst range = computed(() => props.max - props.min);\n\nconst localValue = computed(() => {\n return clamp((props.modelValue ?? 0) + data.deltaValue, props.min, props.max);\n});\n\nconst realtimeVal = ref(props.modelValue);\n\nconst error = computed(() => {\n const v = props.modelValue;\n\n if (!Number.isFinite(v)) {\n return 'Not a number';\n }\n\n if (v < props.min) {\n return `Min value: ${props.min}`;\n }\n\n if (v > props.max) {\n return `Max value: ${props.max}`;\n }\n\n return props.error;\n});\n\nconst propsRef = computed(() => props);\n\nconst breakpointsRef = useSliderBreakpoints(propsRef);\n\nconst position = computed(() => {\n return (localValue.value - props.min) / range.value;\n});\n\nconst progressStyle = computed(() => ({\n right: Math.ceil((1 - position.value) * 100) + '%',\n}));\n\nconst thumbStyle = computed(() => {\n const value = Math.ceil((1 - position.value) * 100);\n return {\n right: `calc(${value}%) `,\n };\n});\n\nconst barRef = ref<HTMLElement>();\nconst thumbRef = ref<HTMLElement>();\n\nwatch(\n () => props.modelValue,\n (val) => {\n realtimeVal.value = val;\n },\n);\n\nfunction round(value: number) {\n const v = clamp(value, props.min, props.max);\n // This is the same as Math.round(v / props.step) * props.step but here we need this magic to avoid numbers like 3.00000000000000000004\n return Math.round((v + Number.EPSILON) * (1 / props.step)) / (1 / props.step);\n}\n\nuseMouseCapture(thumbRef, (ev) => {\n tapIf(unref(barRef)?.getBoundingClientRect(), (rect) => {\n const { dx } = ev;\n\n data.deltaValue = (dx / rect.width) * range.value;\n\n realtimeVal.value = round(clamp((props.modelValue ?? 0) + data.deltaValue, props.min, props.max));\n\n if (ev.stop) {\n emit('update:modelValue', round(localValue.value));\n data.deltaValue = 0;\n }\n });\n});\n\nfunction setModelValue(value: number) {\n emit('update:modelValue', round(value));\n}\n\nfunction updateModelValue(event: Event) {\n setModelValue(+(event.target as HTMLInputElement).value);\n}\n\nfunction handleKeyPress(e: { code: string; preventDefault(): void }) {\n if (['ArrowDown', 'ArrowUp', 'ArrowRight', 'ArrowLeft', 'Enter'].includes(e.code)) {\n e.preventDefault();\n }\n\n const nextStep\n = e.code === 'ArrowUp' || e.code === 'ArrowRight' ? props.step * 1 : e.code === 'ArrowDown' || e.code === 'ArrowLeft' ? props.step * -1 : 0;\n\n setModelValue(props.modelValue + nextStep);\n}\n</script>\n\n<template>\n <div :class=\"props.disabled ? 'ui-slider__disabled' : undefined\" class=\"ui-slider__envelope\">\n <div :class=\"`ui-slider__mode-${props.mode}`\" class=\"ui-slider\">\n <div class=\"ui-slider__wrapper\">\n <div class=\"ui-slider__label-section\">\n <label v-if=\"label\" class=\"text-s\">\n <span>{{ label }}</span>\n <PlTooltip v-if=\"slots.tooltip\" class=\"info\" position=\"top\">\n <template #tooltip>\n <slot name=\"tooltip\" />\n </template>\n </PlTooltip>\n </label>\n <div v-if=\"props.mode === 'text'\" class=\"ui-slider__value-static text-s\">{{ realtimeVal }}{{ measure }}</div>\n </div>\n <div class=\"ui-slider__base\">\n <div class=\"ui-slider__container\">\n <div ref=\"barRef\" class=\"ui-slider__bar\">\n <div class=\"ui-slider__progress\" :style=\"progressStyle\" />\n </div>\n </div>\n <div class=\"ui-slider__container ui-slider__container-thumb\">\n <template v-if=\"props.breakpoints\">\n <div v-for=\"(item, index) in breakpointsRef\" :key=\"index\" :style=\"{ right: `${item}%` }\" class=\"ui-slider__thumb-step\"/>\n </template>\n <div ref=\"thumbRef\" tabindex=\"0\" class=\"ui-slider__thumb ui-slider__thumb-active\" :style=\"thumbStyle\" @keydown=\"handleKeyPress\">\n <div class=\"ui-slider__thumb-focused-contour\" />\n </div>\n </div>\n </div>\n </div>\n\n <div class=\"ui-slider__input-wrapper d-flex\">\n <input v-if=\"props.mode === 'input'\" :value=\"realtimeVal\" class=\"ui-slider__value text-s\" @change=\"updateModelValue($event)\" />\n </div>\n </div>\n <!-- <div v-if=\"props.helper\" class=\"ui-slider__helper\">\n {{ props.helper }}\n </div> -->\n <div v-if=\"error\" class=\"ui-slider__error\">\n {{ error }}\n </div>\n </div>\n</template>\n","import { type Ref, onMounted } from 'vue';\nimport { useEventListener } from '@/composition/useEventListener';\nimport { requestTick } from '@/helpers/utils';\n\nexport function useScroll($el: Ref<HTMLElement | undefined>, fadeHeight: number | null = null, fadeWidth: number | null = null) {\n function getYMask(el: HTMLElement) {\n const { scrollTop, scrollHeight, clientHeight } = el;\n\n const hasScroll = scrollHeight > clientHeight;\n\n if (!hasScroll || !fadeHeight) {\n return null;\n }\n\n const scrollBottom = scrollHeight - scrollTop - clientHeight;\n const offsetTop = scrollTop > fadeHeight ? fadeHeight : 0;\n const offsetBottom = scrollBottom > fadeHeight ? clientHeight - fadeHeight - offsetTop : clientHeight;\n\n return `linear-gradient(\n to bottom,\n transparent,\n black ${offsetTop}px,\n black ${offsetBottom}px,\n transparent 100%\n )`;\n }\n\n function getXMask(el: HTMLElement) {\n const { scrollLeft, scrollWidth, clientWidth } = el;\n\n const hasScroll = scrollWidth > clientWidth;\n\n if (!hasScroll || !fadeWidth) {\n return null;\n }\n\n const scrollRight = scrollWidth - scrollLeft - clientWidth;\n const offsetLeft = scrollLeft > fadeWidth ? fadeWidth : 0;\n const offsetRight = scrollRight > fadeWidth ? clientWidth - fadeWidth - offsetLeft : clientWidth;\n\n return `linear-gradient(\n to right,\n transparent,\n black ${offsetLeft}px,\n black ${offsetRight}px,\n transparent 100%\n )`;\n }\n\n function update() {\n const el = $el.value;\n\n if (!el) {\n return;\n }\n\n const masks = [getYMask(el), getXMask(el)].filter((m) => m !== null);\n el.style.setProperty('-webkit-mask-image', masks.join(','));\n el.style.setProperty('mask-image', masks.join(','));\n if (masks.length > 1) {\n el.style.setProperty('-webkit-mask-composite', 'source-in');\n el.style.setProperty('mask-composite', 'source-in');\n }\n }\n\n const handle = requestTick(update);\n\n onMounted(update);\n useEventListener(window, 'scroll', handle, true);\n useEventListener(window, 'resize', handle, true);\n}\n","import { onUnmounted, unref } from 'vue';\nimport { tapIf } from '@/helpers/functions';\nimport { onChanged } from '@/composition/utils';\nimport { startResizeObserving, stopResizeObserving } from '@/global/resizeObserver';\nimport type { MaybeRef } from '@/types';\n\nexport function useResizeObserver<T extends HTMLElement>(target: MaybeRef<T | undefined>, cb: (el?: T | undefined) => void) {\n onChanged(() => {\n tapIf(unref(target), (el) => {\n startResizeObserving(el, () => cb(el));\n });\n });\n\n onUnmounted(() => {\n tapIf(unref(target), (el) => {\n stopResizeObserving(el);\n });\n });\n}\n","import type { Ref } from 'vue';\nimport { computed, watchEffect } from 'vue';\nimport { useEventListener } from './useEventListener';\n\ntype SortableItem = {\n el: HTMLElement;\n y: number;\n dy: number;\n orderChanged: boolean;\n};\n\nexport type SortableSettings = {\n onChange: (indices: number[]) => void;\n handle?: string;\n shakeBuffer?: number;\n reorderDelay?: number;\n transitionDelay?: string;\n};\n\nconst classes = {\n item: 'sortable__item',\n animate: 'sortable__animate',\n};\n\nconst getOffset = (el: HTMLElement) => {\n return el.getBoundingClientRect().y;\n};\n\nconst getMiddle = (el: HTMLElement) => {\n const { y, height } = el.getBoundingClientRect();\n return y + Math.ceil(height / 2);\n};\n\nconst getBottom = (el: HTMLElement) => {\n const { y, height } = el.getBoundingClientRect();\n return y + height;\n};\n\nexport function useSortable(listRef: Ref<HTMLElement | undefined>, settings: SortableSettings) {\n const state = {\n item: undefined as SortableItem | undefined,\n options() {\n return [...(listRef.value?.children ?? [])] as HTMLElement[];\n },\n };\n\n const optionsRef = computed(() => {\n return state.options();\n });\n\n const shakeBuffer = settings.shakeBuffer ?? 10;\n\n const reorderDelay = settings.reorderDelay ?? 100;\n\n function mouseDown(this: HTMLElement, e: { y: number; target: EventTarget | null }) {\n const handle = settings.handle ? this.querySelector(settings.handle) : null;\n\n if (!handle) {\n return;\n }\n\n if (handle && !handle.contains(e.target as HTMLElement)) {\n return;\n }\n\n this.classList.remove(classes.animate);\n this.classList.add(classes.item);\n\n state.item = {\n el: this,\n y: e.y,\n dy: 0,\n orderChanged: false,\n };\n }\n\n function elementsBefore(el: HTMLElement) {\n const options = state.options();\n return options.slice(0, options.indexOf(el));\n }\n\n function elementsAfter(el: HTMLElement) {\n const children = state.options();\n return children.slice(children.indexOf(el) + 1);\n }\n\n function insertBefore(before: HTMLElement, el: HTMLElement) {\n const children = state.options().filter((e) => e !== el);\n const index = children.indexOf(before);\n children.splice(index, 0, el);\n return children;\n }\n\n function insertAfter(after: HTMLElement, el: HTMLElement) {\n const children = state.options().filter((e) => e !== el);\n const index = children.indexOf(after);\n children.splice(index + 1, 0, el);\n return children;\n }\n\n function updatePosition(item: SortableItem, y: number) {\n item.dy = y - item.y;\n item.el.style.setProperty('transform', `translateY(${item.dy}px)`);\n }\n\n function changeOrder(reordered: HTMLElement[]) {\n if (!state.item) {\n return;\n }\n\n const { el } = state.item;\n\n if (!el.isConnected) {\n state.item = undefined;\n return;\n }\n\n const oldPositions = reordered.map((e) => getOffset(e));\n\n const y1 = getOffset(el);\n listRef.value?.replaceChildren(...reordered);\n const y2 = getOffset(el);\n\n const newPositions = reordered.map((e) => getOffset(e));\n\n const toAnimate: HTMLElement[] = [];\n\n for (let i = 0; i < newPositions.length; i++) {\n const option = reordered[i];\n\n if (option === state.item.el) {\n continue;\n }\n\n const newY = newPositions[i];\n\n const oldY = oldPositions[i];\n\n const invert = oldY - newY;\n\n option.style.transform = `translateY(${invert}px)`;\n\n toAnimate.push(option);\n }\n\n const dy = y2 - y1;\n\n state.item.y = state.item.y + dy;\n state.item.dy = state.item.dy - dy;\n state.item.orderChanged = true;\n state.item.el.style.setProperty('transform', `translateY(${state.item.dy}px)`);\n\n toAnimate.forEach((o) => o.classList.remove(classes.animate));\n\n requestAnimationFrame(function () {\n toAnimate.forEach((option) => {\n option.classList.add(classes.animate);\n option.style.transform = '';\n option.addEventListener('transitionend', () => {\n option.classList.remove(classes.animate);\n });\n });\n });\n }\n\n useEventListener(window, 'mousemove', (e: { y: number }) => {\n if (!state.item) {\n return;\n }\n\n const { el } = state.item;\n\n updatePosition(state.item, e.y);\n\n const upper = getOffset(state.item.el);\n const bottom = getBottom(state.item.el);\n\n const before = elementsBefore(el);\n const after = elementsAfter(el);\n\n before.forEach((e) => {\n const y = getMiddle(e);\n\n if (upper + shakeBuffer < y) {\n changeOrder(insertBefore(e, el));\n }\n });\n\n after.forEach((e) => {\n const y = getMiddle(e);\n\n if (bottom - shakeBuffer > y) {\n changeOrder(insertAfter(e, el));\n }\n });\n });\n\n useEventListener(window, 'mouseup', () => {\n if (!state.item) {\n return;\n }\n\n const { el, orderChanged } = state.item;\n\n el.classList.add(classes.animate);\n el.style.removeProperty('transform');\n\n el.addEventListener('transitionend', () => {\n el.classList.remove(classes.animate, classes.item);\n });\n\n setTimeout(() => {\n if (!orderChanged) {\n return;\n }\n\n const newIndices = state.options().map((o) => Number(o.getAttribute('data-index')));\n\n const list = listRef.value;\n\n if (list) {\n for (const child of state.options()) {\n list.removeChild(child);\n }\n\n optionsRef.value.forEach((child) => {\n list.appendChild(child);\n });\n }\n\n settings.onChange(newIndices);\n }, reorderDelay);\n\n state.item = undefined;\n });\n\n watchEffect(() => {\n optionsRef.value.forEach((child, i) => {\n child.removeEventListener('mousedown', mouseDown);\n child.addEventListener('mousedown', mouseDown);\n child.setAttribute('data-index', String(i));\n });\n });\n}\n","import type { Ref } from 'vue';\nimport { computed, watch, watchEffect } from 'vue';\nimport { useEventListener } from './useEventListener';\n\ntype SortableItem = {\n el: HTMLElement;\n y: number;\n dy: number;\n orderChanged: boolean;\n initialScrollTop: number;\n};\n\nexport type SortableSettings = {\n onChange: (indices: number[]) => void;\n handle?: string;\n shakeBuffer?: number;\n reorderDelay?: number;\n transitionDelay?: string;\n};\n\nconst classes = {\n item: 'sortable__item',\n animate: 'sortable__animate',\n};\n\nconst getOffset = (el: HTMLElement) => {\n return el.getBoundingClientRect().y;\n};\n\nconst getMiddle = (el: HTMLElement) => {\n const { y, height } = el.getBoundingClientRect();\n return y + Math.ceil(height / 2);\n};\n\nconst getBottom = (el: HTMLElement) => {\n const { y, height } = el.getBoundingClientRect();\n return y + height;\n};\n\n/**\n * Description: Scroll support has been added to the container where sorting takes place.\n * Some functionality duplicates the behavior of useScrollable.\n *\n * Purpose: To enable automatic scrolling when dragging items beyond the visible area of the container.\n * Future Plan:\n * - Verify the behavior of the new scrolling functionality within blocks and text elements.\n * - Merge the current implementation with useScrollable to eliminate code duplication and create a unified scrolling solution.\n */\nexport function useSortable2(listRef: Ref<HTMLElement | undefined>, settings: SortableSettings) {\n const state = {\n item: undefined as SortableItem | undefined,\n options() {\n return [...(listRef.value?.children ?? [])] as HTMLElement[];\n },\n };\n let oldScrollTop = 0;\n\n watch(() => listRef.value, () => {\n setTimeout(() => {\n if (listRef.value) {\n listRef.value.scrollTop = oldScrollTop;\n }\n }, 0);\n });\n\n const optionsRef = computed(() => {\n return state.options();\n });\n\n const shakeBuffer = settings.shakeBuffer ?? 10;\n\n const reorderDelay = settings.reorderDelay ?? 100;\n\n function mouseDown(this: HTMLElement, e: { y: number; target: EventTarget | null }) {\n const handle = settings.handle ? this.querySelector(settings.handle) : null;\n\n if (!handle) {\n return;\n }\n\n if (handle && !handle.contains(e.target as HTMLElement)) {\n return;\n }\n\n this.classList.remove(classes.animate);\n this.classList.add(classes.item);\n\n state.item = {\n el: this,\n y: e.y,\n dy: 0,\n initialScrollTop: listRef.value?.scrollTop || 0,\n orderChanged: false,\n };\n }\n\n function elementsBefore(el: HTMLElement) {\n const options = state.options();\n return options.slice(0, options.indexOf(el));\n }\n\n function elementsAfter(el: HTMLElement) {\n const children = state.options();\n return children.slice(children.indexOf(el) + 1);\n }\n\n function insertBefore(before: HTMLElement, el: HTMLElement) {\n const children = state.options().filter((e) => e !== el);\n const index = children.indexOf(before);\n children.splice(index, 0, el);\n return children;\n }\n\n function insertAfter(after: HTMLElement, el: HTMLElement) {\n const children = state.options().filter((e) => e !== el);\n const index = children.indexOf(after);\n children.splice(index + 1, 0, el);\n return children;\n }\n\n function updatePosition(item: SortableItem, y: number) {\n const currentScrollTop = listRef.value?.scrollTop || 0;\n const scrollDiff = currentScrollTop - (item.initialScrollTop || 0);\n item.dy = y - item.y + scrollDiff;\n item.el.style.setProperty('transform', `translateY(${item.dy}px)`);\n }\n\n function changeOrder(reordered: HTMLElement[]) {\n if (!state.item) {\n return;\n }\n\n const { el } = state.item;\n\n if (!el.isConnected) {\n state.item = undefined;\n return;\n }\n\n const oldPositions = reordered.map((e) => getOffset(e));\n\n const y1 = getOffset(el);\n listRef.value?.replaceChildren(...reordered);\n const y2 = getOffset(el);\n\n const newPositions = reordered.map((e) => getOffset(e));\n\n const toAnimate: HTMLElement[] = [];\n\n for (let i = 0; i < newPositions.length; i++) {\n const option = reordered[i];\n\n if (option === state.item.el) {\n continue;\n }\n\n const newY = newPositions[i];\n\n const oldY = oldPositions[i];\n\n const invert = oldY - newY;\n\n option.style.transform = `translateY(${invert}px)`;\n\n toAnimate.push(option);\n }\n\n const dy = y2 - y1;\n\n state.item.y = state.item.y + dy;\n state.item.dy = state.item.dy - dy;\n state.item.orderChanged = true;\n state.item.el.style.setProperty('transform', `translateY(${state.item.dy}px)`);\n\n toAnimate.forEach((o) => o.classList.remove(classes.animate));\n\n requestAnimationFrame(function () {\n toAnimate.forEach((option) => {\n option.classList.add(classes.animate);\n option.style.transform = '';\n option.addEventListener('transitionend', () => {\n option.classList.remove(classes.animate);\n });\n });\n });\n }\n\n useEventListener(window, 'mousemove', (e: { y: number }) => {\n if (!state.item) {\n return;\n }\n\n const { el } = state.item;\n\n updatePosition(state.item, e.y);\n\n const upper = getOffset(state.item.el);\n const bottom = getBottom(state.item.el);\n\n const before = elementsBefore(el);\n const after = elementsAfter(el);\n\n before.forEach((e) => {\n const y = getMiddle(e);\n\n if (upper + shakeBuffer < y) {\n changeOrder(insertBefore(e, el));\n }\n });\n\n after.forEach((e) => {\n const y = getMiddle(e);\n\n if (bottom - shakeBuffer > y) {\n changeOrder(insertAfter(e, el));\n }\n });\n\n if (listRef.value) {\n const rect = listRef.value.getBoundingClientRect();\n\n const deltaUp = rect.top + el.getBoundingClientRect().height / 2;\n if ((e as MouseEvent).clientY < deltaUp) {\n listRef.value.scrollTop += (e as MouseEvent).clientY - deltaUp;\n }\n\n const deltaDown = rect.bottom - el.getBoundingClientRect().height / 2;\n if ((e as MouseEvent).clientY > deltaDown) {\n listRef.value.scrollTop += (e as MouseEvent).clientY - deltaDown;\n }\n }\n });\n\n useEventListener(window, 'mouseup', () => {\n if (!state.item) {\n return;\n }\n\n oldScrollTop = listRef.value?.scrollTop || 0;\n\n const { el, orderChanged } = state.item;\n\n el.classList.add(classes.animate);\n el.style.removeProperty('transform');\n\n el.addEventListener('transitionend', () => {\n el.classList.remove(classes.animate, classes.item);\n });\n\n setTimeout(() => {\n if (!orderChanged) {\n return;\n }\n\n const newIndices = state.options().map((o) => Number(o.getAttribute('data-index')));\n\n const list = listRef.value;\n\n if (list) {\n for (const child of state.options()) {\n list.removeChild(child);\n }\n\n optionsRef.value.forEach((child) => {\n list.appendChild(child);\n });\n }\n\n settings.onChange(newIndices);\n }, reorderDelay);\n\n state.item = undefined;\n });\n\n watchEffect(() => {\n optionsRef.value.forEach((child, i) => {\n child.removeEventListener('mousedown', mouseDown);\n child.addEventListener('mousedown', mouseDown);\n child.setAttribute('data-index', String(i));\n });\n });\n}\n","import { onMounted, onUnmounted } from 'vue';\n\nexport function useInterval(update: () => void, ms: number) {\n let interval: ReturnType<typeof setInterval>;\n onMounted(() => {\n interval = setInterval(update, ms);\n });\n onUnmounted(() => clearInterval(interval));\n}\n","import type { Ref, UnwrapRef } from 'vue';\nimport { reactive, watch } from 'vue';\nimport { objects } from '@milaboratories/helpers';\n\nexport function useFormState<Source, D extends Record<string, unknown>>(\n source: Ref<Source>,\n fromSource: (source: Source) => D,\n update: (data: UnwrapRef<D>) => void,\n) {\n const state: {\n data: UnwrapRef<D>;\n changed: boolean;\n } = reactive({\n data: objects.deepClone(fromSource(source.value)) as D,\n changed: false,\n });\n\n watch(\n () => state.data,\n (data) => {\n if (state.changed) {\n update(objects.deepClone(data));\n } else {\n state.changed = true;\n }\n },\n { deep: true },\n );\n\n watch(\n source,\n (s) => {\n Object.assign(state, {\n data: objects.deepClone(fromSource(s)),\n changed: false,\n });\n },\n { deep: true, immediate: true },\n );\n\n return state;\n}\n","import { reactive } from 'vue';\nimport { debounce } from '@milaboratories/helpers';\n\nexport function useQuery<P extends unknown[], R>(fn: (...args: P) => Promise<R>) {\n const self = reactive({\n isLoading: false,\n result: undefined as R | undefined,\n error: undefined as unknown,\n async run(...args: P) {\n this.isLoading = true;\n this.error = undefined;\n try {\n this.result = await fn(...args);\n } catch (err: unknown) {\n this.error = err;\n } finally {\n this.isLoading = false;\n }\n },\n debounce(cb: () => P, dt = 1000) {\n return debounce(() => {\n const args = cb();\n this.run(...args).catch(console.error);\n }, dt);\n },\n });\n\n self.run = self.run.bind(self);\n\n return self;\n}\n","import type { MaybeRef } from '@/types';\nimport { onMounted, onUnmounted, unref } from 'vue';\n\ntype Position = {\n x: number;\n y: number;\n};\n\nexport function useDraggable<T extends HTMLElement>(elRef: MaybeRef<T | undefined>, cb: (ev: MouseEvent) => void) {\n function onMove(down: Position, ev: MouseEvent) {\n const el = unref(elRef);\n if (!el) {\n return;\n }\n const translate = `translate(${ev.x - down.x}px, ${ev.y - down.y}px)`;\n el.style.setProperty('transform', translate);\n cb(ev);\n }\n\n function onDown(down: Position) {\n const listener = (e: MouseEvent) => onMove(down, e);\n\n document.addEventListener('mousemove', listener);\n\n document.addEventListener(\n 'mouseup',\n () => {\n const el = unref(elRef);\n\n document.removeEventListener('mousemove', listener);\n\n if (!el) {\n return;\n }\n\n el.style.setProperty('transition', 'all .3s ease-in-out');\n\n el.style.removeProperty('transform');\n\n el.addEventListener('transitionend', () => {\n el.style.removeProperty('transition');\n });\n },\n { once: true },\n );\n }\n\n function init() {\n unref(elRef)?.addEventListener('mousedown', onDown);\n }\n\n function clear() {\n unref(elRef)?.removeEventListener('mousedown', onDown);\n }\n\n onMounted(init);\n onUnmounted(clear);\n}\n","import type { InferComponentProps } from '@/types';\nimport { computed, type Component, type ComputedRef } from 'vue';\n\n/**\n * A utility function that creates a reactive computed property\n * based on a specific prop of a Vue component.\n *\n *\n * @template C - The Vue component type.\n * @template P - The prop name.\n *\n * @param cb - A factory function that returns the value of the prop from the inferred component props.\n *\n * @returns A `ComputedRef` of the specified prop\n *\n * @example\n * ```ts\n * import { ref, defineComponent } from 'vue';\n * import { useComponentProp } from '@platforma-sdk/ui-vue';\n *\n * const MyComponent = defineComponent({\n * props: {\n * myProp: {\n * type: String,\n * required: true\n * }\n * }\n * });\n *\n * const propValue = useComponentProp<typeof MyComponent, 'myProp'>(() => 'example');\n * console.log(propValue.value); // Outputs: 'example'\n * ```\n */\nexport function useComponentProp<C extends Component, P extends keyof InferComponentProps<C>>(cb: () => InferComponentProps<C>[P]): ComputedRef<InferComponentProps<C>[P]> {\n return computed(cb);\n}\n","<script lang=\"ts\" setup>\nimport { computed, onMounted, reactive, ref, unref, useSlots } from 'vue';\nimport { useMouseCapture } from '@/composition/useMouseCapture';\nimport { tapIf } from '@/helpers/functions';\nimport { clamp } from '@/helpers/math';\nimport { PlTooltip } from '@/components/PlTooltip';\nimport type { SliderMode } from '@/types';\nimport { useSliderBreakpoints } from '@/composition/useSliderBreakpoints';\n\ntype ModelType = [number, number, number];\nconst slots = useSlots();\n\nconst emit = defineEmits(['update:modelValue']);\n\nconst props = withDefaults(\n defineProps<{\n modelValue: ModelType;\n min?: number;\n max: number;\n step?: number;\n label?: string;\n helper?: string;\n error?: string;\n mode?: SliderMode;\n measure?: string;\n breakpoints?: boolean;\n disabled?: boolean;\n }>(),\n {\n label: undefined,\n helper: undefined,\n error: undefined,\n min: 0,\n step: 1,\n mode: 'text',\n measure: '%',\n breakpoints: false,\n disabled: false,\n },\n);\n\nconst data = reactive({\n deltaValue1: 0,\n deltaValue2: 0,\n deltaValue3: 0,\n});\n\nconst barRef = ref<HTMLElement>();\nconst thumbRef1 = ref<HTMLElement>();\nconst thumbRef2 = ref<HTMLElement>();\nconst thumbRef3 = ref<HTMLElement>();\n\nconst range = computed(() => props.max - props.min);\n\nconst propsRef = computed(() => props);\n\nconst breakpointsRef = useSliderBreakpoints(propsRef);\n\nconst localValue1 = computed(() => clamp((props.modelValue[0] ?? 0) + data.deltaValue1, props.min, props.max));\nconst localValue2 = computed(() => clamp((props.modelValue[1] ?? 0) + data.deltaValue2, props.min, props.max));\nconst localValue3 = computed(() => clamp((props.modelValue[2] ?? 0) + data.deltaValue3, props.min, props.max));\n\nconst error = computed(() => {\n const v = props.modelValue as unknown;\n\n const isValidModel = Array.isArray(v) && v.length === 3 && v.every((it) => Number.isFinite(it));\n\n if (!isValidModel) {\n return 'Expected model [number, number, number]';\n }\n\n const errors: string[] = [];\n\n [...props.modelValue].forEach((v) => {\n if (v > props.max) {\n errors.push(`Max model value must be lower than max props ${props.max}.`);\n }\n if (v < props.min) {\n errors.push('Min model value must be greater than max props.');\n }\n });\n\n if (errors.length > 0) {\n return errors.join(' ');\n }\n\n return props.error;\n});\n\nconst position1 = computed(() => {\n return (localValue1.value - props.min) / range.value;\n});\n\nconst position2 = computed(() => {\n return (localValue2.value - props.min) / range.value;\n});\n\nconst position3 = computed(() => {\n return (localValue3.value - props.min) / range.value;\n});\n\nconst leftRight = computed(() => getLeftAndRight());\n\nconst progressStyle = computed(() => ({\n right: leftRight.value[0] + '%',\n left: 100 - leftRight.value[2] + '%',\n}));\n\nconst thumbStyle1 = computed(() => ({\n right: Math.ceil((1 - position1.value) * 100) + '%',\n}));\n\nconst thumbStyle2 = computed(() => ({\n right: Math.ceil((1 - position2.value) * 100) + '%',\n}));\n\nconst thumbStyle3 = computed(() => ({\n right: Math.ceil((1 - position3.value) * 100) + '%',\n}));\n\nuseMouseCapture(thumbRef1, (ev) => {\n tapIf(unref(barRef)?.getBoundingClientRect(), (rect) => {\n const { dx } = ev;\n data.deltaValue1 = (dx / rect.width) * range.value;\n\n if (thumbRef1.value) {\n updateDatasetForThumb(thumbRef1.value, props.modelValue[0], data.deltaValue1);\n }\n\n if (ev.stop) {\n setModelValue([round(localValue1.value), round(localValue2.value), round(localValue3.value)]);\n data.deltaValue1 = 0;\n }\n });\n});\n\nuseMouseCapture(thumbRef2, (ev) => {\n tapIf(unref(barRef)?.getBoundingClientRect(), (rect) => {\n const { dx } = ev;\n data.deltaValue2 = (dx / rect.width) * range.value;\n\n if (thumbRef2.value) {\n updateDatasetForThumb(thumbRef2.value, props.modelValue[1], data.deltaValue2);\n }\n\n if (ev.stop) {\n setModelValue([round(localValue1.value), round(localValue2.value), round(localValue3.value)]);\n data.deltaValue2 = 0;\n }\n });\n});\n\nuseMouseCapture(thumbRef3, (ev) => {\n tapIf(unref(barRef)?.getBoundingClientRect(), (rect) => {\n const { dx } = ev;\n data.deltaValue3 = (dx / rect.width) * range.value;\n\n if (thumbRef3.value) {\n updateDatasetForThumb(thumbRef3.value, props.modelValue[2], data.deltaValue3);\n }\n\n if (ev.stop) {\n setModelValue([round(localValue1.value), round(localValue2.value), round(localValue3.value)]);\n data.deltaValue3 = 0;\n }\n });\n});\n\nfunction updateDatasetForThumb(thumb: HTMLElement, modelVal: number, delta: number) {\n const value = round(clamp((modelVal ?? 0) + delta, props.min, props.max));\n thumb.dataset.percent = `${value}${props.measure}`;\n getHint();\n}\n\nfunction getLeftAndRight() {\n const point1 = Math.ceil((1 - position1.value) * 100);\n const point2 = Math.ceil((1 - position2.value) * 100);\n const point3 = Math.ceil((1 - position3.value) * 100);\n return [point1, point2, point3].sort((a, b) => a - b);\n}\n\nfunction round(value: number) {\n const v = clamp(value, props.min, props.max);\n // This is the same as Math.round(v / props.step) * props.step but here we need this magic to avoid numbers like 3.00000000000000000004\n return Math.round((v + Number.EPSILON) * (1 / props.step)) / (1 / props.step);\n}\n\nfunction setModelValue(value: ModelType) {\n emit('update:modelValue', value);\n}\n\nfunction getHint() {\n const right1 = Number(thumbStyle1.value.right.substring(0, thumbStyle1.value.right.length - 1));\n const right2 = Number(thumbStyle2.value.right.substring(0, thumbStyle2.value.right.length - 1));\n const right3 = Number(thumbStyle3.value.right.substring(0, thumbStyle3.value.right.length - 1));\n\n const arr = [\n { r: right1, th: thumbRef1 },\n { r: right2, th: thumbRef2 },\n { r: right3, th: thumbRef3 },\n ].sort((a, b) => a.r - b.r);\n\n if (arr[0].th.value) {\n arr[0].th.value.dataset.hint = 'high';\n }\n if (arr[1].th.value) {\n arr[1].th.value.dataset.hint = 'mid';\n }\n\n if (arr[2].th.value) {\n arr[2].th.value.dataset.hint = 'low';\n }\n}\n\nfunction handleKeyPress(e: { code: string; preventDefault(): void }, index: number) {\n if (['ArrowDown', 'ArrowUp', 'ArrowRight', 'ArrowLeft', 'Enter'].includes(e.code)) {\n e.preventDefault();\n }\n\n const nextStep\n = e.code === 'ArrowUp' || e.code === 'ArrowRight' ? props.step * 1 : e.code === 'ArrowDown' || e.code === 'ArrowLeft' ? props.step * -1 : 0;\n\n const arr: ModelType = [...props.modelValue];\n arr[index] = clamp(arr[index] + nextStep, props.min, props.max);\n setModelValue(arr);\n getHint();\n}\n\nonMounted(() => {\n getHint();\n});\n</script>\n\n<template>\n <div :class=\"props.disabled ? 'ui-slider__disabled' : undefined\" class=\"ui-slider__envelope ui-slider__triple\">\n <div :class=\"`ui-slider__mode-${props.mode}`\" class=\"ui-slider\">\n <div class=\"ui-slider__wrapper\">\n <div class=\"ui-slider__label-section\">\n <label v-if=\"label\" class=\"text-s\">\n <span>{{ label }}</span>\n <PlTooltip v-if=\"slots.tooltip\" class=\"info\" position=\"top\">\n <template #tooltip>\n <slot name=\"tooltip\" />\n </template>\n </PlTooltip>\n </label>\n </div>\n <div class=\"ui-slider__base\">\n <div class=\"ui-slider__container\">\n <div ref=\"barRef\" class=\"ui-slider__bar\">\n <div class=\"ui-slider__progress\" :style=\"progressStyle\" />\n </div>\n </div>\n <div class=\"ui-slider__container ui-slider__container-thumb\">\n <template v-if=\"props.breakpoints\">\n <div v-for=\"(item, index) in breakpointsRef\" :key=\"index\" :style=\"{ right: `${item}%` }\" class=\"ui-slider__thumb-step\"/>\n </template>\n <div\n ref=\"thumbRef1\"\n :style=\"thumbStyle1\"\n :data-percent=\"props.modelValue[0] + '%'\"\n class=\"ui-slider__thumb ui-slider__triple-thumb\"\n r1\n tabindex=\"0\"\n @keydown=\"handleKeyPress($event, 0)\"\n >\n <div class=\"ui-slider__thumb-focused-contour\" />\n </div>\n <div\n ref=\"thumbRef2\"\n :style=\"thumbStyle2\"\n :data-percent=\"props.modelValue[1] + '%'\"\n class=\"ui-slider__thumb ui-slider__triple-thumb\"\n r2\n tabindex=\"0\"\n @keydown=\"handleKeyPress($event, 1)\"\n >\n <div class=\"ui-slider__thumb-focused-contour\" />\n </div>\n <div\n ref=\"thumbRef3\"\n :style=\"thumbStyle3\"\n :data-percent=\"props.modelValue[2] + '%'\"\n class=\"ui-slider__thumb ui-slider__triple-thumb\"\n r3\n tabindex=\"0\"\n @keydown=\"handleKeyPress($event, 2)\"\n >\n <div class=\"ui-slider__thumb-focused-contour\" />\n </div>\n </div>\n </div>\n </div>\n\n <div class=\"ui-slider__input-wrapper d-flex\">\n <!-- {{ props.modelValue }} -->\n <!-- <InputRange v-if=\"props.mode === 'input'\" v-model=\"inputRange\" class=\"ui-focused-border\" /> -->\n </div>\n </div>\n <!-- <div v-if=\"helper\" class=\"ui-slider__helper\">\n {{ helper }}\n </div> -->\n <div v-if=\"error\" class=\"ui-slider__error\">\n {{ error }}\n </div>\n </div>\n</template>\n\n<style></style>\n","<script setup lang=\"ts\">\nimport { computed, reactive, ref, watch } from 'vue';\n\nconst props = withDefaults(\n defineProps<{\n modelValue: [number, number];\n separator?: string;\n }>(),\n {\n separator: '-',\n },\n);\n\nconst emit = defineEmits<{\n (e: 'update:modelValue', val: [number, number]): void;\n (e: 'change', val: [number, number]): void;\n}>();\n\nconst data = reactive({\n left: props.modelValue[0],\n right: props.modelValue[1],\n});\n\nconst isFocused = ref(false);\n\nconst classes = computed(() => (isFocused.value ? 'ui-input-range-focused' : 'ui-input-range-focused'));\n\nconst valuesModel = computed({\n get() {\n return {\n left: Math.min(...props.modelValue), // dangerous....\n right: Math.max(...props.modelValue),\n };\n },\n set() {},\n});\n\nwatch(\n () => valuesModel.value,\n (value) => (data.left = value.left) && (data.right = value.right),\n);\n\n// watch(\n// () => props.modelValue,\n// (value: [number, number]) => {\n// console.log('model value updated');\n// (data.left = value[0]), (data.right = value[1]);\n// },\n// );\n\nfunction updateModel() {\n emit('update:modelValue', [+data.left, +data.right]);\n emit('change', [+data.left, +data.right]);\n}\n\nfunction validateInput(isLeft: boolean, event: Event) {\n const value: string = (event.target as HTMLInputElement).value;\n const result = /^[0-9]{0,2}$/.test(value);\n // if there is more than 3 digits we cut last one\n if (!result) {\n if (isLeft) {\n data.left = +value.slice(0, value.length - 1);\n } else {\n data.right = +value.slice(0, value.length - 1);\n }\n } else {\n if (isLeft) {\n data.left = +value;\n } else {\n data.right = +value;\n }\n }\n}\n</script>\n\n<template>\n <!-- {{ data }} -->\n <div :class=\"classes\" class=\"ui-input-range\" v-bind=\"$attrs\">\n <input\n v-model=\"valuesModel.left\"\n class=\"text-s\"\n type=\"text\"\n @change=\"updateModel\"\n @focus=\"isFocused = true\"\n @focusout=\"isFocused = false\"\n @input=\"validateInput(true, $event)\"\n />\n <div class=\"ui-input-range__separator\">{{ props.separator }}</div>\n <input\n v-model=\"valuesModel.right\"\n class=\"text-s\"\n type=\"text\"\n @change=\"updateModel\"\n @focus=\"isFocused = true\"\n @focusout=\"isFocused = false\"\n @input=\"validateInput(false, $event)\"\n />\n </div>\n</template>\n","<script lang=\"ts\" setup>\nimport { computed, reactive, ref, unref, useSlots, watch } from 'vue';\nimport { useMouseCapture } from '@/composition/useMouseCapture';\nimport { tapIf } from '@/helpers/functions';\nimport { clamp } from '@/helpers/math';\nimport { PlTooltip } from '@/components/PlTooltip';\nimport type { SliderMode } from '@/types';\nimport InputRange from '@/components/InputRange.vue';\nimport { useSliderBreakpoints } from '@/composition/useSliderBreakpoints';\n\nconst slots = useSlots();\n\nconst emit = defineEmits(['update:modelValue']);\n\nconst props = withDefaults(\n defineProps<{\n modelValue: [number, number];\n min?: number;\n max: number;\n step?: number;\n label?: string;\n helper?: string;\n error?: string;\n mode?: SliderMode;\n measure?: string;\n breakpoints?: boolean;\n disabled?: boolean;\n }>(),\n {\n label: undefined,\n helper: undefined,\n error: undefined,\n min: 0,\n step: 1,\n mode: 'text',\n measure: '',\n breakpoints: false,\n disabled: false,\n },\n);\n\nconst data = reactive({\n deltaValue1: 0,\n deltaValue2: 0,\n});\n\nconst barRef = ref<HTMLElement>();\nconst thumbRef1 = ref<HTMLElement>();\nconst thumbRef2 = ref<HTMLElement>();\nconst inputRange = ref<[number, number]>(props.modelValue);\nconst leftDelta = ref(props.modelValue[0]);\nconst rightDelta = ref(props.modelValue[1]);\n\nconst propsRef = computed(() => props);\n\nconst breakpointsRef = useSliderBreakpoints(propsRef);\n\nconst textModelValue = computed(() => [leftDelta.value, rightDelta.value].sort((a, b) => a - b).join('-'));\n\nconst range = computed(() => props.max - props.min);\n\nconst localValue1 = computed(() => {\n return clamp((props.modelValue[0] ?? 0) + data.deltaValue1, props.min, props.max);\n});\n\nconst localValue2 = computed(() => clamp((props.modelValue[1] ?? 0) + data.deltaValue2, props.min, props.max));\n\nconst error = computed(() => {\n const v = props.modelValue as unknown;\n\n const isValidModel = Array.isArray(v) && v.length === 2 && v.every((it) => Number.isFinite(it));\n\n if (!isValidModel) {\n return 'Expected model [number, number]';\n }\n\n return props.error;\n});\n\nconst position1 = computed(() => {\n return (localValue1.value - props.min) / range.value;\n});\n\nconst position2 = computed(() => {\n return (localValue2.value - props.min) / range.value;\n});\n\nconst leftRight = computed(() => getLeftAndRight());\n\nconst progressStyle = computed(() => ({\n right: leftRight.value[0] + '%',\n left: 100 - leftRight.value[1] + '%',\n}));\n\nconst thumbStyle1 = computed(() => ({\n right: Math.ceil((1 - position1.value) * 100) + '%',\n}));\n\nconst thumbStyle2 = computed(() => ({\n right: Math.ceil((1 - position2.value) * 100) + '%',\n}));\n\nwatch(\n () => props.modelValue,\n (value: [number, number]) => {\n inputRange.value = value;\n leftDelta.value = +value[0];\n rightDelta.value = +value[1];\n },\n { immediate: true },\n);\n\nuseMouseCapture(thumbRef1, (ev) => {\n tapIf(unref(barRef)?.getBoundingClientRect(), (rect) => {\n const { dx } = ev;\n\n data.deltaValue1 = (dx / rect.width) * range.value;\n\n leftDelta.value = round(clamp((props.modelValue[0] ?? 0) + data.deltaValue1, props.min, props.max));\n\n inputRange.value = ([leftDelta.value, rightDelta.value] as [number, number]).sort((a, b) => a - b);\n\n if (ev.stop) {\n setModelValue([round(localValue1.value), round(localValue2.value)]);\n data.deltaValue1 = 0;\n }\n });\n});\n\nuseMouseCapture(thumbRef2, (ev) => {\n tapIf(unref(barRef)?.getBoundingClientRect(), (rect) => {\n const { dx } = ev;\n\n data.deltaValue2 = (dx / rect.width) * range.value;\n\n rightDelta.value = round(clamp((props.modelValue[1] ?? 0) + data.deltaValue2, props.min, props.max));\n\n inputRange.value = ([leftDelta.value, rightDelta.value] as [number, number]).sort((a, b) => a - b);\n\n if (ev.stop) {\n setModelValue([round(localValue1.value), round(localValue2.value)]);\n data.deltaValue2 = 0;\n }\n });\n});\n\nfunction getLeftAndRight() {\n const point1 = Math.ceil((1 - position1.value) * 100);\n const point2 = Math.ceil((1 - position2.value) * 100);\n return [point1, point2].sort((a, b) => a - b);\n}\n\nfunction round(value: number) {\n const v = clamp(value, props.min, props.max);\n // This is the same as Math.round(v / props.step) * props.step but here we need this magic to avoid numbers like 3.00000000000000000004\n return Math.round((v + Number.EPSILON) * (1 / props.step)) / (1 / props.step);\n}\n\nfunction setModelValue(value: [number, number]) {\n emit('update:modelValue', value);\n}\n\nfunction handleKeyPress(e: { code: string; preventDefault(): void }, index: number) {\n if (['ArrowDown', 'ArrowUp', 'ArrowRight', 'ArrowLeft', 'Enter'].includes(e.code)) {\n e.preventDefault();\n }\n\n const nextStep\n = e.code === 'ArrowUp' || e.code === 'ArrowRight' ? props.step * 1 : e.code === 'ArrowDown' || e.code === 'ArrowLeft' ? props.step * -1 : 0;\n\n const arr: [number, number] = [...props.modelValue];\n arr[index] = clamp(arr[index] + nextStep, props.min, props.max);\n setModelValue(arr);\n}\n</script>\n\n<template>\n <!-- {{ leftDelta }} {{ rightDelta }} -->\n <div :class=\"props.disabled ? 'ui-slider__disabled' : undefined\" class=\"ui-slider__envelope\">\n <div :class=\"`ui-slider__mode-${props.mode}`\" class=\"ui-slider\">\n <div class=\"ui-slider__wrapper\">\n <div class=\"ui-slider__label-section\">\n <label v-if=\"label\" class=\"text-s\">\n <span>{{ label }}</span>\n <PlTooltip v-if=\"slots.tooltip\" class=\"info\" position=\"top\">\n <template #tooltip>\n <slot name=\"tooltip\" />\n </template>\n </PlTooltip>\n </label>\n <div v-if=\"props.mode === 'text'\" class=\"ui-slider__value-static text-s\">{{ textModelValue }}</div>\n </div>\n <div class=\"ui-slider__base\">\n <div class=\"ui-slider__container\">\n <div ref=\"barRef\" class=\"ui-slider__bar\">\n <div class=\"ui-slider__progress\" :style=\"progressStyle\" />\n </div>\n </div>\n <div class=\"ui-slider__container ui-slider__container-thumb\">\n <template v-if=\"props.breakpoints\">\n <div v-for=\"(item, index) in breakpointsRef\" :key=\"index\" :style=\"{ right: `${item}%` }\" class=\"ui-slider__thumb-step\"/>\n </template>\n <div ref=\"thumbRef1\" :style=\"thumbStyle1\" class=\"ui-slider__thumb\" tabindex=\"0\" @keydown=\"handleKeyPress($event, 0)\">\n <div class=\"ui-slider__thumb-focused-contour\" />\n </div>\n <div ref=\"thumbRef2\" :style=\"thumbStyle2\" class=\"ui-slider__thumb\" tabindex=\"0\" @keydown=\"handleKeyPress($event, 1)\">\n <div class=\"ui-slider__thumb-focused-contour\" />\n </div>\n </div>\n </div>\n </div>\n\n <div class=\"ui-slider__input-wrapper d-flex\">\n <InputRange v-if=\"props.mode === 'input'\" v-model=\"inputRange\" class=\"ui-focused-border\" @change=\"setModelValue\" />\n </div>\n </div>\n <!-- <div v-if=\"helper\" class=\"ui-slider__helper\">\n {{ helper }}\n </div> -->\n <div v-if=\"error\" class=\"ui-slider__error\">\n {{ error }}\n </div>\n </div>\n</template>\n","<script lang=\"ts\" setup>\nimport { computed, ref, unref } from 'vue';\nimport { useEventListener } from '@/composition/useEventListener';\nimport { eventListener } from '@/helpers/dom';\n\nconst emit = defineEmits(['update:scrollTop']);\n\nconst props = defineProps<{\n scrollTop: number;\n clientHeight: number;\n scrollHeight: number;\n}>();\n\nconst scrollRef = ref<EventTarget>();\n\nconst ratioRef = computed(() => props.clientHeight / (props.scrollHeight || 1));\n\nconst visibleRef = computed(() => {\n return ratioRef.value < 1;\n});\n\nconst scrollbarStyle = computed(() => {\n const ratio = unref(ratioRef);\n return {\n top: props.scrollTop * ratio + 'px',\n height: Math.floor(props.clientHeight * ratio) + 'px',\n };\n});\n\nuseEventListener(scrollRef, 'pointerdown', (down: PointerEvent) => {\n const s = {\n clientY: down.clientY,\n };\n\n const update = (e: MouseEvent) => {\n const dy = (e.clientY - s.clientY) / ratioRef.value;\n emit('update:scrollTop', props.scrollTop + dy);\n s.clientY = e.clientY;\n };\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const removePointerMove = eventListener(document as any, 'mousemove', update);\n\n ['mouseup', 'pointercancel'].forEach((eventType) => {\n document.addEventListener(eventType, removePointerMove, { once: true });\n });\n});\n</script>\n\n<template>\n <div v-if=\"visibleRef\" ref=\"scrollRef\" class=\"v-scroll\">\n <div class=\"v-scroll__scrollbar\" :style=\"scrollbarStyle\" />\n </div>\n</template>\n","<script lang=\"ts\" setup>\nimport { computed, ref, unref } from 'vue';\nimport { useEventListener } from '@/composition/useEventListener';\nimport { eventListener } from '@/helpers/dom';\n\nconst emit = defineEmits(['update:scrollLeft']);\n\nconst props = defineProps<{\n scrollLeft: number;\n clientWidth: number;\n scrollWidth: number;\n}>();\n\nconst scrollRef = ref<EventTarget>();\n\nconst ratioRef = computed(() => props.clientWidth / (props.scrollWidth || 1));\n\nconst visibleRef = computed(() => {\n return ratioRef.value < 1;\n});\n\nconst scrollbarStyle = computed(() => {\n const ratio = unref(ratioRef);\n return {\n left: props.scrollLeft * ratio + 'px',\n width: Math.floor(props.clientWidth * ratio) + 'px',\n };\n});\n\nuseEventListener(scrollRef, 'pointerdown', (down: PointerEvent) => {\n const s = {\n clientX: down.clientX,\n };\n\n const update = (e: MouseEvent) => {\n const dy = (e.clientX - s.clientX) / ratioRef.value;\n emit('update:scrollLeft', props.scrollLeft + dy);\n s.clientX = e.clientX;\n };\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const removePointerMove = eventListener(document as any, 'mousemove', update);\n\n ['mouseup', 'pointercancel'].forEach((eventType) => {\n document.addEventListener(eventType, removePointerMove, { once: true });\n });\n});\n</script>\n\n<template>\n <div v-if=\"visibleRef\" ref=\"scrollRef\" class=\"h-scroll\">\n <div class=\"h-scroll__scrollbar\" :style=\"scrollbarStyle\" />\n </div>\n</template>\n","<script lang=\"ts\" setup>\nimport VScroll from '@/components/VScroll.vue';\nimport HScroll from '@/components/HScroll.vue';\nimport { onMounted, onUnmounted, reactive, ref, unref } from 'vue';\nimport { tapIf, copyProps } from '@/helpers/functions';\nimport { useResizeObserver } from '@/composition/useResizeObserver';\n\nconst containerRef = ref<HTMLElement>();\n\nconst data = reactive({\n scrollTop: 0,\n scrollLeft: 0,\n clientHeight: 0,\n clientWidth: 0,\n scrollHeight: 0,\n scrollWidth: 0,\n});\n\nfunction updateState(container: HTMLElement) {\n copyProps(data, container, 'scrollTop', 'scrollLeft', 'clientHeight', 'clientWidth', 'scrollHeight', 'scrollWidth');\n}\n\nconst onWheel = (e: WheelEvent) => {\n e.preventDefault();\n const root = e.currentTarget as HTMLElement;\n root.scrollTop += e.deltaY;\n root.scrollLeft += e.deltaX;\n updateState(root);\n};\n\nfunction updateTop(v: number) {\n tapIf(unref(containerRef), (el) => {\n el.scrollTop = v;\n updateState(el);\n });\n}\n\nfunction updateLeft(v: number) {\n tapIf(unref(containerRef), (el) => {\n el.scrollLeft = v;\n updateState(el);\n });\n}\n\nuseResizeObserver(containerRef, (el) => {\n tapIf(el, (el) => updateState(el));\n});\n\nonMounted(() => {\n tapIf(unref(containerRef), (root) => {\n updateState(root);\n root.addEventListener('wheel', onWheel);\n });\n});\n\nonUnmounted(() => {\n tapIf(unref(containerRef), (root) => root.removeEventListener('wheel', onWheel));\n});\n</script>\n\n<template>\n <div class=\"ui-scrollable\">\n <div ref=\"containerRef\" class=\"ui-scrollable__container\" @wheel=\"onWheel\">\n <slot />\n </div>\n <VScroll\n :scroll-top=\"data.scrollTop\"\n :client-height=\"data.clientHeight\"\n :scroll-height=\"data.scrollHeight\"\n @wheel.stop\n @update:scroll-top=\"updateTop\"\n />\n <HScroll\n :scroll-left=\"data.scrollLeft\"\n :client-width=\"data.clientWidth\"\n :scroll-width=\"data.scrollWidth\"\n @wheel.stop\n @update:scroll-left=\"updateLeft\"\n />\n </div>\n</template>\n","export function allCssVariables(): Record<\n string,\n {\n title: string;\n data: Record<\n string,\n {\n light: [boolean, boolean];\n value: [string, string];\n description: string;\n }\n >;\n }\n> {\n return {\n txtSec: {\n title: 'Text',\n data: {\n '--txt-00': {\n light: [false, false],\n value: ['#FFFFFF', '#FFFFFF'],\n description: 'Text on the colored elements',\n },\n '--txt-01': {\n light: [true, false],\n value: ['#110529', '#FFFFFF'],\n description: 'Primary text layer',\n },\n '--txt-02': {\n light: [true, false],\n value: ['#231842', '#ADAEB8'],\n description: 'Secondary text layer - large arrays of text',\n },\n '--txt-03': {\n light: [true, true],\n value: ['#9D9EAE', '#60616B'],\n description: 'Tetritary text layer - hints and descriptions',\n },\n '--txt-mask': {\n light: [false, true],\n value: ['#CFD1DB', '#3D3D42'],\n description: 'Text mask in inputs, icons, etc.',\n },\n '--txt-focus': {\n light: [true, true],\n value: ['#07AD3E', '#87E087'],\n description: 'Colored text in active/focus elements',\n },\n '--txt-error': {\n light: [true, true],\n value: ['#F1222F', '#FF5C5C'],\n description: 'Colored text in error elements',\n },\n '--txt-link': {\n light: [true, true],\n value: ['#5F31CC', '#9470FF'],\n description: 'Colored text in links',\n },\n },\n },\n iconSec: {\n title: 'Icon',\n data: {\n '--ic-00': {\n light: [false, false],\n value: ['#FFFFFF', '#FFFFFF'],\n description: 'Icons on colored elements',\n },\n '--ic-01': {\n light: [true, false],\n value: ['#110529', '#FFFFFF'],\n description: 'Primary elements',\n },\n '--ic-02': {\n light: [false, true],\n value: ['#CFD1DB', '#60616B'],\n description: 'Secondary & tetritary elements',\n },\n '--ic-accent': {\n light: [true, false],\n value: ['#07AD3E', '#87E087'],\n description: 'Focus/active elements',\n },\n },\n },\n borderSec: {\n title: 'Border',\n data: {\n '--border-color-default': {\n light: [true, true],\n value: ['#110529', '#60616B'],\n description: 'Main border for components',\n },\n '--border-color-hover': {\n light: [true, true],\n value: ['#231842', '#ADAEB8'],\n description: 'Hover on main border',\n },\n '--border-color-focus': {\n light: [false, false],\n value: ['#49CC49', '#49CC49'],\n description: 'Active border for components',\n },\n '--border-color-error': {\n light: [false, false],\n value: ['#FF5C5C', '#FF5C5C'],\n description: 'Error border for components',\n },\n '--border-color-div-grey': {\n light: [false, true],\n value: ['#E1E3EB', '#232329'],\n description: 'Divider lines low contrast',\n },\n '--border-color-div-bw': {\n light: [false, true],\n value: ['#FFFFFF', '#000000'],\n description: 'Divider lines hight contrast',\n },\n },\n },\n btnSec: {\n title: 'Button',\n data: {\n '--btn-accent-default': {\n light: [true, true],\n value: ['#845CFF', ' #5F31CC'],\n description: 'Accent coloured button',\n },\n '--btn-accent-hover': {\n light: [true, true],\n value: ['#9470FF', ' #5F31CC'],\n description: 'Hover on accent coloured button',\n },\n '--btn-accent-press': {\n light: [true, true],\n value: ['#6F4DD6', '#5F31CC'],\n description: 'Pressed on accent coloured button',\n },\n '--btn-primary-default': {\n light: [true, true],\n value: ['#110529', '#5F31CC'],\n description: 'Primary button',\n },\n '--btn-primary-hover': {\n light: [true, true],\n value: ['#231842', '#6D3DDB'],\n description: 'Hover on primary button',\n },\n '--btn-primary-press': {\n light: [true, true],\n value: ['#080214', '#5328B8'],\n description: 'Hover on primary button',\n },\n '--btn-sec-hover-white': {\n light: [false, true],\n value: ['rgba(255, 255, 255, 0.50)', 'rgba(131, 131, 163, 0.16)'],\n description: 'Hover background on transparent button',\n },\n '--btn-sec-hover-grey': {\n light: [false, true],\n value: ['rgba(155, 171, 204, 0.16)', 'rgba(131, 131, 163, 0.16)'],\n description: 'Hover background on ghost button & icons',\n },\n '--btn-sec-press-grey': {\n light: [false, true],\n value: ['rgba(155, 171, 204, 0.24)', 'rgba(131, 131, 163, 0.24)'],\n description: 'Hover background on ghost button & icons',\n },\n '--btn-active-select': {\n light: [false, true],\n value: ['rgba(99, 224, 36, 0.24)', 'rgba(99, 224, 36, 0.24)'],\n description: 'Fill on selected elements',\n },\n '--btn-switcher': {\n light: [false, true],\n value: ['linear-gradient(180deg, #A1E59C 0%, #D0F5B0 100%)', '#5E5E70'],\n description: 'Gradient on active controll/switcher element',\n },\n },\n },\n disSec: {\n title: 'Disable',\n data: {\n '--dis-00': {\n light: [false, true],\n value: ['#FFFFFF', '#65656B'],\n description: 'Elements on dis-01, labels, texts, icons',\n },\n '--dis-01': {\n light: [false, true],\n value: ['#CFD1DB', '#3D3D42'],\n description: 'Buttons, borders, labels, texts, icons',\n },\n },\n },\n bgSec: {\n title: 'Background',\n data: {\n '--bg-base-dark': {\n light: [true, true],\n value: ['#110529', '#0D0D0F'],\n description: 'Default dark block background',\n },\n '--bg-base-light': {\n light: [false, true],\n value: ['#F7F8FA', '#0D0D0F'],\n description: 'Default light block background',\n },\n '--bg-elevated-01': {\n light: [false, true],\n value: ['#FFFFFF', '#1B1B1F'],\n description: 'Default block background',\n },\n '--bg-elevated-02': {\n light: [false, true],\n value: ['#E1E3EB', '#2D2D33'],\n description: 'Secondary block background',\n },\n },\n },\n filledSec: {\n title: 'Filled',\n data: {\n '--filled-V-BG': {\n light: [false, true],\n value: ['#D0F0C0', 'rgba(66, 184, 66, 0.40)'],\n description: 'Text background selection on V-read',\n },\n '--filled-D-BG': {\n light: [false, true],\n value: ['#FFCECC', 'rgba(229, 83, 229, 0.40)'],\n description: 'Text background selection on D-read',\n },\n '--filled-N-BG': {\n light: [false, true],\n value: ['#FAF5AA', 'rgba(83, 82, 102, 0.40)'],\n description: 'Text background selection on C/N-read',\n },\n '--filled-J-BG': {\n light: [false, true],\n value: ['#DEDBFF', 'rgba(132, 92, 255, 0.40)'],\n description: 'Text background selection on J-read',\n },\n },\n },\n notificationSec: {\n title: 'Notification',\n data: {\n '--notification-neutral': {\n light: [false, true],\n value: ['linear-gradient(90deg, #D6D9FF 0%, #FFF 100%)', 'linear-gradient(90deg, #4D4D8F 0%, #292933 100%)'],\n description: 'Background on neutral blocks',\n },\n '--notification-success': {\n light: [false, true],\n value: ['linear-gradient(90deg, #C9F0B6 0%, #FFF 100%)', 'linear-gradient(90deg, #305C3E 0%, #292933 100%)'],\n description: 'Background on success blocks',\n },\n '--notification-warning': {\n light: [false, true],\n value: ['linear-gradient(90deg, #FEE0A3 0%, #FFF 100%)', 'linear-gradient(90deg, #754F2D 0%, #292933 100%)'],\n description: 'Background on warning blocks',\n },\n '--notification-error': {\n light: [false, true],\n value: ['linear-gradient(90deg, #FFB8B8 0%, #FFF 100%)', 'linear-gradient(90deg, #8F3343 0%, #292933 100%)'],\n description: 'Background on error blocks',\n },\n },\n },\n gradientSec: {\n title: 'Gradient',\n data: {\n '--gradient-blue-green': {\n light: [true, true],\n value: [\n 'linear-gradient(0deg, #478063 0%, #2E4652 45.93%, #24223D 91.63%)',\n 'linear-gradient(0deg, #478063 0%, #2E4652 45.93%, #24223D 91.63%)',\n ],\n description: 'Main brand dark gradient',\n },\n '--gradient-green-lime': {\n light: [false, true],\n value: ['linear-gradient(180deg, #A1E59C 0%, #D0F5B0 100%)', 'linear-gradient(0deg, #478063 0%, #2E4652 45.93%, #24223D 91.63%)'],\n description: 'Main brand light gradient',\n },\n '--gradient-blue-violet': {\n light: [false, true],\n value: ['linear-gradient(180deg, #ADB8FF 0%, #D6E9FF 100%)', 'linear-gradient(0deg, #478063 0%, #2E4652 45.93%, #24223D 91.63%)'],\n description: 'Main brand light gradient',\n },\n '--gradient-blue-clear': {\n light: [false, true],\n value: ['linear-gradient(180deg, #85BEFF 0%, #CEF 100%)', 'linear-gradient(0deg, #478063 0%, #2E4652 45.93%, #24223D 91.63%)'],\n description: 'Additional brand gradient',\n },\n '--gradient-orange': {\n light: [false, true],\n value: ['linear-gradient(180deg, #FFB766 0%, #FFEAA3 100%)', 'linear-gradient(0deg, #478063 0%, #2E4652 45.93%, #24223D 91.63%)'],\n description: 'Additional brand gradient',\n },\n '--gradient-mint': {\n light: [false, true],\n value: ['linear-gradient(180deg, #7DD1D1 0%, #C8FAE9 100%)', 'linear-gradient(0deg, #478063 0%, #2E4652 45.93%, #24223D 91.63%)'],\n description: 'Additional brand gradient',\n },\n '--gradient-lime': {\n light: [false, true],\n value: ['linear-gradient(180deg, #BFE062 0%, #E4FFAD 100%)', 'linear-gradient(0deg, #478063 0%, #2E4652 45.93%, #24223D 91.63%)'],\n description: 'Additional brand gradient',\n },\n '--gradient-rose': {\n light: [false, true],\n value: ['linear-gradient(0deg, #FFDDD6 0%, #FF99C9 100%)', 'linear-gradient(0deg, #478063 0%, #2E4652 45.93%, #24223D 91.63%)'],\n description: 'Additional brand gradient',\n },\n '--gradient-red': {\n light: [false, true],\n value: ['linear-gradient(0deg, #FFD5CC 0%, #FF9494 100%)', 'linear-gradient(0deg, #478063 0%, #2E4652 45.93%, #24223D 91.63%)'],\n description: 'Additional brand gradient',\n },\n '--gradient-violet': {\n light: [false, true],\n value: ['linear-gradient(180deg, #BCA3FF 0%, #E5E5FF 100%)', 'linear-gradient(0deg, #478063 0%, #2E4652 45.93%, #24223D 91.63%)'],\n description: 'Additional brand gradient',\n },\n },\n },\n };\n}\n","export const maskIcons16 = [\n 'add',\n 'arrow-down',\n 'arrow-left',\n 'arrow-link',\n 'arrow-right',\n 'arrow-up',\n 'box',\n 'calendar',\n 'caret-down',\n 'caret-left',\n 'caret-right',\n 'caret-up',\n 'cell-type-num',\n 'cell-type-subset',\n 'cell-type-txt',\n 'checkmark',\n 'chevron-down',\n 'chevron-first',\n 'chevron-last',\n 'chevron-left',\n 'chevron-right',\n 'chevron-up',\n 'clipboard-copied',\n 'clipboard',\n 'close',\n 'copy',\n 'data-dimentions',\n 'delete-bin',\n 'delete-circle',\n 'delete-clear',\n 'download',\n 'drag-dots',\n 'duplicate',\n 'edit',\n 'error',\n 'export',\n 'filter-on',\n 'filter',\n 'help-outline',\n 'help',\n 'info-outline',\n 'info',\n 'jump-link',\n 'link',\n 'loading',\n 'lock',\n 'maximize',\n 'minimize',\n 'minus',\n 'more',\n 'open',\n 'paper-clip',\n 'pause',\n 'play',\n 'progress',\n 'renew',\n 'restart',\n 'reverse',\n 'settings',\n 'sort',\n 'stop',\n 'success',\n 'time',\n 'tune',\n 'warning',\n 'x-axis',\n 'y-axis',\n 'zip',\n] as const;\n","export const maskIcons24 = [\n 'add-layer',\n 'add',\n 'align-center',\n 'align-left',\n 'align-right',\n 'annotate',\n 'annotation',\n 'area',\n 'arrow-down',\n 'arrow-left',\n 'arrow-link',\n 'arrow-right',\n 'arrow-up',\n 'axes',\n 'bar-cross',\n 'bar-error',\n 'bar-stacked',\n 'bar-trend',\n 'bar',\n 'bindot',\n 'box',\n 'boxplot-binned',\n 'boxplot-jitter',\n 'boxplot-notched',\n 'boxplot',\n 'bubble',\n 'calendar',\n 'canvas',\n 'cell-type-num',\n 'cell-type-subset',\n 'cell-type-txt',\n 'checkbox-checked',\n 'checkbox-intermediate',\n 'checkbox',\n 'checkmark',\n 'chevron-down',\n 'chevron-first',\n 'chevron-last',\n 'chevron-left',\n 'chevron-right',\n 'chevron-sort',\n 'chevron-up',\n 'clipboard-copied',\n 'clipboard',\n 'close',\n 'cloud-download',\n 'cloud-offline',\n 'cloud-online',\n 'cloud-upload',\n 'cluster',\n 'code',\n 'color-fill',\n 'color-none',\n 'color-stroke',\n 'color',\n 'columns',\n 'connected-points',\n 'container',\n 'cookie',\n 'copy',\n 'cpu',\n 'data-dimentions',\n 'debug',\n 'delete-bin',\n 'delete-circle',\n 'delete-clear',\n 'dendrogram-X-line',\n 'dendrogram-X',\n 'dendrogram-Y-line',\n 'dendrogram-Y',\n 'dna-add',\n 'dna-import',\n 'dna',\n 'download',\n 'drag-dots',\n 'drag-horizontal',\n 'drag-vertical',\n 'duplicate',\n 'edit',\n 'error-bar',\n 'error',\n 'expand-left',\n 'expand-right',\n 'export',\n 'file-doc-add',\n 'file-doc-download',\n 'file-doc-import',\n 'file-doc',\n 'filter-on',\n 'filter',\n 'fire-tips',\n 'folder-parent',\n 'frame-type-all',\n 'frame-type-bottom',\n 'frame-type-left-bottom',\n 'frame-type-left',\n 'frame-type-none',\n 'generate',\n 'graph',\n 'heatmap',\n 'help-outline',\n 'help',\n 'info-outline',\n 'info',\n 'jitter',\n 'jump-link',\n 'lasso',\n 'layers',\n 'learn',\n 'legend-box-dot',\n 'legend-box',\n 'legend',\n 'line-binned',\n 'line-error',\n 'line-jitter',\n 'line',\n 'linetype-dashed',\n 'linetype-dotdash',\n 'linetype-dotted',\n 'linetype-longdash',\n 'linetype-solid',\n 'linetype-twodash',\n 'link-disabled',\n 'link',\n 'loading',\n 'lock',\n 'maximize',\n 'menu',\n 'minimize',\n 'minus',\n 'monetization-off',\n 'monetization-on',\n 'monetization',\n 'more',\n 'paper-clip',\n 'pause',\n 'pin',\n 'play',\n 'position-bottom-annotation',\n 'position-bottom',\n 'position-left-annotation',\n 'position-left',\n 'position-right-annotation',\n 'position-right',\n 'position-top-annotation',\n 'position-top',\n 'product',\n 'progress',\n 'publications',\n 'radio-button-checked',\n 'radio-button',\n 'renew',\n 'restart',\n 'reverse',\n 'rotation-0',\n 'rotation-45',\n 'rotation-90',\n 'search',\n 'server-on',\n 'server',\n 'settings',\n 'sina',\n 'skatterplot',\n 'slice',\n 'social-github',\n 'social-linkedin',\n 'social-twitter-X',\n 'social-twitter-bird',\n 'social-youtube',\n 'sort-list-down',\n 'sort-list-up',\n 'sort',\n 'statistics',\n 'stop',\n 'strip-plot',\n 'success',\n 'table-add',\n 'table-alias',\n 'table-import',\n 'table',\n 'template',\n 'terminal',\n 'text-align-center',\n 'text-align-left',\n 'text-align-right',\n 'theme-dark',\n 'theme-light',\n 'time',\n 'tune',\n 'venn',\n 'view-hide',\n 'view-show',\n 'violin-binned',\n 'violin-jitter',\n 'violin',\n 'warning',\n 'wetlab',\n 'windows-collapse',\n 'windows-expand',\n 'x-axis',\n 'y-axis',\n 'zip',\n 'zoom-in',\n 'zoom-out',\n] as const;\n","import './assets/ui.scss';\n\n// @TODO review\nimport * as DataTable from '@/components/DataTable';\nimport ThemeSwitcher from './components/ThemeSwitcher.vue';\n\n/**\n * Layout components\n */\n\nexport * from './layout/PlBlockPage';\nexport * from './layout/PlContainer';\nexport * from './layout/PlRow';\nexport * from './layout/PlSpacer';\nexport * from './layout/PlGrid';\n\n/**\n * Components\n */\nexport * from './components/PlAlert';\nexport * from './components/PlBtnSplit';\nexport * from './components/PlBtnPrimary';\nexport * from './components/PlBtnAccent';\nexport * from './components/PlBtnDanger';\nexport * from './components/PlBtnSecondary';\nexport * from './components/PlBtnGhost';\nexport * from './components/PlBtnLink';\nexport * from './components/PlBtnGroup';\nexport * from './components/PlEditableTitle';\nexport * from './components/PlTextField';\nexport * from './components/PlSearchField';\nexport * from './components/PlTextArea';\nexport * from './components/PlDropdown';\nexport * from './components/PlDropdownRef';\nexport * from './components/PlDropdownLine';\nexport * from './components/PlDropdownLegacy';\nexport * from './components/PlTooltip';\nexport * from './components/PlProgressBar';\nexport * from './components/PlNumberField';\nexport * from './components/PlDropdownMulti';\nexport * from './components/PlDropdownMultiRef';\nexport * from './components/PlCheckbox';\nexport * from './components/PlCheckboxGroup';\nexport * from './components/PlChip';\nexport * from './components/PlDialogModal';\nexport * from './components/PlSlideModal';\nexport * from './components/PlToggleSwitch';\nexport * from './components/PlLogView';\nexport * from './components/PlTabs';\nexport * from './components/PlSectionSeparator';\nexport * from './components/PlAccordion';\nexport * from './components/PlStatusTag';\nexport * from './components/PlLoaderCircular';\nexport * from './components/PlSplash';\nexport * from './components/PlProgressCell';\nexport * from './components/PlAutocomplete';\n\nexport * from './components/PlFileDialog';\nexport * from './components/PlFileInput';\nexport * from './components/PlNotificationAlert';\n\nexport * from './components/PlMaskIcon16';\nexport * from './components/PlMaskIcon24';\nexport * from './components/PlIcon16';\nexport * from './components/PlIcon24';\n\nexport * from './components/PlChartStackedBar';\nexport * from './components/PlChartHistogram';\n\nexport * from './components/PlRadio';\n\nexport * from './colors';\n\n// @TODO review (may be private)\nimport DropdownListItem from './components/DropdownListItem.vue';\n\n// @TODO review\nimport ContextProvider from './components/ContextProvider.vue';\nimport Slider from './components/Slider.vue';\nimport { showContextMenu } from './components/contextMenu/index.ts';\n\n/**\n * Usables\n */\nexport { useElementPosition as usePosition } from './composition/usePosition';\nexport { useClickOutside } from './composition/useClickOutside';\nexport { useEventListener } from './composition/useEventListener';\nexport { useScroll } from './composition/useScroll';\nexport { useResizeObserver } from './composition/useResizeObserver';\nexport { useTheme } from './composition/useTheme';\nexport { useLocalStorage } from './composition/useLocalStorage';\nexport { useMouseCapture } from './composition/useMouseCapture';\nexport { useHover } from './composition/useHover';\nexport { useMouse } from './composition/useMouse';\nexport { useSortable } from './composition/useSortable';\nexport { useSortable2 } from './composition/useSortable2';\nexport { useInterval } from './composition/useInterval';\nexport { useFormState } from './composition/useFormState';\nexport { useQuery } from './composition/useQuery.ts';\nexport { useDraggable } from './composition/useDraggable';\nexport { useComponentProp } from './composition/useComponentProp';\nexport * from './composition/useWatchFetch';\n\n/**\n * Utils/Partials\n */\n\nexport { default as PlCloseModalBtn } from './utils/PlCloseModalBtn.vue';\nexport * from './utils/DropdownOverlay';\n\n/**\n * Technical\n * @TODO move it from here maybe\n */\nexport { useLabelNotch } from './utils/useLabelNotch.ts';\n\n// for new version\nimport LongText from './components/LongText.vue';\nimport SliderRangeTriple from './components/SliderRangeTriple.vue';\nimport SliderRange from './components/SliderRange.vue';\nimport Scrollable from './components/Scrollable.vue';\n\nimport icons16 from './assets/icons/icons-16-generated.json';\nimport icons24 from './assets/icons/icons-24-generated.json';\n\nimport { allCssVariables } from './demo-site-data/all-css-variables.ts';\n\nexport type * from './types';\n\nexport { maskIcons16, maskIcons24 } from './types';\n\nexport * from './helpers/dom';\n\nexport * from './helpers/utils';\n\n/**\n * @TODO review\n */\nexport { ThemeSwitcher, DropdownListItem, DataTable, ContextProvider, Slider };\n\n// Helpers\nexport { showContextMenu };\n\n// move to new version pl-uikit\nexport { LongText, SliderRangeTriple, SliderRange, Scrollable };\n\n// @todo\nconst DemoData = { allCssVariables: allCssVariables(), icons16, icons24 };\nexport { DemoData };\n"],"names":["A","e","U","n","i","d","Y","R","Z","G","ee","ie","ue","ce","se","le","he","T","we","a","l","f","ve","r","g","h","Pe","p","_e","Me","Be","xe","Ae","Ie","qe","je","ke","y","o","at","Je","We","tt","nt","rt","it","ot","ut","m","dt","M","s","u","emit","__emit","onClickOption","opt","showContextMenu","ev","options","destroy","render","vNode","Menu","el","stateKey","injectState","inject","props","__props","data","reactive","valueTypeRef","computed","onInput","inputValue","_a","valueType","unref","value","call","baseRef","ref","onClick","_b","state","tapIf","row","dataRow","onContextMenu","settings","onSelectedRows","onSelectedColumns","isSelected","cellRef","CustomComponent","_hoisted_1","_sfc_render","_ctx","_cache","_openBlock","_createElementBlock","_createElementVNode","_createTextVNode","rotate","v","lst","next","sliceBy","arr","predicate","left","right","onSort","col","trRef","onScroll","nextTick","selected","useEventListener","target","type","callback","onMounted","onUnmounted","useMouseUp","update","requestTick","cb","tick","args","useColumn","clear","start","handle","GAP","RESIZE_GAP","MIN_COLUMN_WIDTH","WINDOW_DELTA","useMouse","pos","event","useHover","delayEnter","delayLeave","isHovered","timer","toggle","entering","delay","getColumnPositions","tableRef","ths","th","width","x","colId","identity","useResize","mousePos","resize","clamp","mouseDown","watchEffect","selectedRows","isVisible","ops","actions","op","selectedColumns","useMouseCapture","elRef","createCustom","handleRef","scrollSize","handleOffset","handleLength","handleStyle","newOffset","useTableColumns","bodyWidth","scrollLeft","columns","controlId","uniqueId","offset","tableColumns","frozen","useTableRows","classesRef","classes","primaryKey","height","cells","column","loadRows","dataWindow","dataSource","scrollTop","bodyHeight","resolveAwaited","createState","watch","newSettings","deepClone","dataHeight","err","columnsWidth","acc","maxScrollTop","tap","maxScrollLeft","dataDimensions","tableRows","newWidth","rightOffset","last","rowId","columnId","rect","_o","current","rows","deepEqual","provide","hasNoData","tableBodyStyle","updateDimensions","headRef","bodyRef","watchPostEffect","onWheel","rowsStore","RawData","datum","resolveHeight","resolvePrimaryKey","__publicField","offsets","dict","index","notEmpty","AsyncData","api","rowHeight","limit","tableSettings","factory","Component","rawDataSettings","rawSettings","useRawData","rowsRef","raw","useRawDataComponent","mapIterable","toList","res","$store","getValue","key","setValue","useLocalStorage","cm","init","browserTheme","savedTheme","useTheme","_cb","theme","toggleTheme","__default__","slots","useSlots","setTitleIfNeeded","vTextOverflownTitle","style","iconMap","CheckboxUncheckedSvg","CheckboxCheckedSvg","classItems","checkboxClasses","checkboxSvg","ms","timeout","randomInt","min","max","randomString","length","makeEaseOut","timing","timeFraction","makeEaseInOut","animate","duration","draw","stop","time","progress","animateInfinite","getFraction","throttle","trailing","t","listToOptions","list","normalizeListOptions","useElementPosition","scrollHeight","scrollWidth","clientHeight","clientWidth","className","emits","model","_useModel","root","menuActivator","buttonAction","__expose","optionsStyle","iconState","selectedIndex","items","isLoadingOptions","actionName","downTopOffset","selectOption","emitEnter","handleKeydown","open","activeIndex","filtered","localIndex","delta","newIndex","onFocusOut","relatedTarget","useRipple","createRipple","button","circle","diameter","radius","ripple","btn","small","large","btnRef","hover","useTooltipPosition","optionsRef","posRef","position","gap","offsetMiddleY","offsetMiddleX","flatValue","copyProps","source","keys","useClickOutside","tMap","tKey","closeTooltip","clearTimeout","dispatchAdjust","utils.throttle","showTooltip","k","onOver","utils.delay","onLeave","utils.timeout","hide","rootRef","tooltip","toRef","tooltipStyle","_sfc_main$Z","$props","$setup","$data","$options","emitModel","normalizedOptions","useTransformedModel","cached","error","parse","reset","newValue","local","computedStyle","save","inputRef","_sfc_main$W","$attrs","_normalizeProps","_guardReactiveProps","onChanged","hook","onUpdated","resizeObserver","entries","entry","startResizeObserving","stopResizeObserving","contourOffset","useLabelNotch","labelSelector","labels","label","onBeforeUnmount","validateFormValue","rules","errors","rule","useValidation","val","showPassword","valueRef","fieldType","passwordIcon","validationData","isEmpty","nonEmpty","displayErrors","hasErrors","canShowClearable","togglePasswordVisibility","setFocusOnInput","input","adjustHeight","isRecord","obj","b","deepIncludes","search","hasElementEllipsis","span","updateStatus","debounce","animationTime","isEllipsisEnabled","mouseoverHandler","mouseoutHandler","isElementVisible","parent","parentHeight","elOffsetTop","elHeight","getElementScrollPosition","scrollIntoView","offsetTop","scrollPosition","to","eventListener","listener","detectOutside","listRef","$list","bodyRect","top","overlayRef","useTemplateRef","findActiveIndex","filteredRef","updateActive","isDisabled","computedError","textValue","item","computedPlaceholder","hasValue","tabindex","toggleOpen","onInputFocus","_c","arrowIcon","useFilteredList","searchPhrase","element","text","styles","stl","handleInput","classList","container","classesResult","canShowClearBtn","modelText","getIndexForModelInItems","inputModel","placeholderVal","scrollIntoActive","updateSelected","resetSearchPhrase","toggleList","closePopupIfNeeded","selectItem","isItemSelected","activeOption","clearModel","readyMsg","modelValue","modelToString","isPartial","stringToModel","forParsing","innerTextValue","innerNumberValue","outerValue","NUMBER_REGEX","nextValue","parsedValue","applyChanges","focused","ers","isIncrementDisabled","isDecrementDisabled","increment","nV","decrement","handleKeyPress","onMousedown","chip","canShowTooltip","overlay","selectedValuesRef","placeholderRef","normalizedOptionsRef","selectedOptionsRef","filteredOptionsRef","selectedValues","updateActiveOption","values","unselectOption","toggleModel","filteredOptions","updateModel","modal","minHeight","maxHeight","size","onClickShadow","onAfterEnter","onAfterLeave","useAttrs","evt","tryOnScopeDispose","fn","getCurrentScope","onScopeDispose","isClient","noop","createFilterWrapper","filter","wrapper","resolve","reject","debounceFilter","maxTimer","lastRejector","_clearTimeout","timer2","invoke","toValue$1","maxDuration","useDebounceFn","refDebounced","debounced","updater","useTimeoutFn","interval","immediate","isPending","readonly","whenever","ov","onInvalidate","useTimeoutPoll","loop","isActive","resume","pause","util","assertIs","_arg","assertNever","_x","validKeys","object","checker","joinValues","array","separator","_","objectUtil","first","second","ZodParsedType","getParsedType","ZodIssueCode","quotelessJson","ZodError","issues","sub","subs","actualProto","_mapper","mapper","issue","fieldErrors","processError","curr","formErrors","errorMap","message","overrideErrorMap","setErrorMap","map","getErrorMap","makeIssue","params","path","errorMaps","issueData","fullPath","fullIssue","errorMessage","maps","EMPTY_PATH","addIssueToContext","ctx","overrideMap","ParseStatus","status","results","arrayValue","INVALID","pairs","syncPairs","pair","finalObject","DIRTY","OK","isAborted","isDirty","isValid","isAsync","__classPrivateFieldGet","receiver","kind","__classPrivateFieldSet","errorUtil","_ZodEnum_cache","_ZodNativeEnum_cache","ParseInputLazyPath","handleResult","result","processCreateParams","invalid_type_error","required_error","description","iss","ZodType","def","maybeAsyncResult","check","getIssueProperties","setError","refinementData","refinement","ZodEffects","ZodFirstPartyTypeKind","ZodOptional","ZodNullable","ZodArray","ZodPromise","option","ZodUnion","incoming","ZodIntersection","transform","defaultValueFunc","ZodDefault","ZodBranded","catchValueFunc","ZodCatch","This","ZodPipeline","ZodReadonly","cuidRegex","cuid2Regex","ulidRegex","uuidRegex","nanoidRegex","durationRegex","emailRegex","_emojiRegex","emojiRegex","ipv4Regex","ipv6Regex","base64Regex","dateRegexSource","dateRegex","timeRegexSource","regex","timeRegex","datetimeRegex","opts","isValidIP","ip","version","ZodString","tooBig","tooSmall","validation","minLength","maxLength","len","ch","floatSafeRemainder","step","valDecCount","stepDecCount","decCount","valInt","stepInt","ZodNumber","inclusive","ZodBigInt","ZodBoolean","ZodDate","minDate","maxDate","ZodSymbol","ZodUndefined","ZodNull","ZodAny","ZodUnknown","ZodNever","ZodVoid","schema","deepPartialify","ZodObject","newShape","fieldSchema","ZodTuple","shape","shapeKeys","extraKeys","keyValidator","unknownKeys","catchall","_d","defaultError","augmentation","merging","mask","newField","createZodEnum","handleResults","unionErrors","childCtx","dirty","types","getDiscriminator","ZodLazy","ZodLiteral","ZodEnum","ZodNativeEnum","ZodDiscriminatedUnion","discriminator","discriminatorValue","optionsMap","discriminatorValues","mergeValues","aType","bType","bKeys","sharedKeys","newObj","sharedValue","newArray","itemA","itemB","handleParsed","parsedLeft","parsedRight","merged","itemIndex","rest","schemas","ZodRecord","keyType","third","ZodMap","finalMap","ZodSet","finalizeSet","elements","parsedSet","minSize","maxSize","ZodFunction","makeArgsIssue","makeReturnsIssue","returns","me","parsedArgs","parsedReturns","returnType","func","getter","expectedValues","enumValues","newDef","nativeEnumValues","promisified","effect","checkCtx","arg","processed","executeRefinement","inner","base","preprocess","newCtx","ZodNaN","BRAND","inResult","freeze","custom","fatal","_fatal","p2","late","instanceOfType","cls","stringType","numberType","nanType","bigIntType","booleanType","dateType","symbolType","undefinedType","nullType","anyType","unknownType","neverType","voidType","arrayType","objectType","strictObjectType","unionType","discriminatedUnionType","intersectionType","tupleType","recordType","mapType","setType","functionType","lazyType","literalType","enumType","nativeEnumType","promiseType","effectsType","optionalType","nullableType","preprocessType","pipelineType","z","w","E","S","L","V","B","j","ln","exports","module","stringify","serializer","replacer","spaces","cycleReplacer","stack","thisPos","c","De","At","Yt","ProgressPrefixDefault","escapeRegExp","str","useLogHandle","logState","fetchLogs","currentLogState","platforma","getRawPlatformaInstance","progressPrefix","newLines","timeoutPoll","lh","getOutputError","isAnchored","contentRef","computedValue","okOptional","copyActive","iconName","onClickCopy","toCopy","optionallyScrollDown","onContentScroll","onStart","onAfter","$m","$p","id","isMulti","on","canShowWhiteBg","currentProgress","canShowInfinityLoader","useWatchFetch","watchSource","doFetch","watchOptions","loadingRef","exclusive","exclusiveRequest","renderedOptionsRef","loadedOptionsRef","modelOptionRef","isLoadingError","modelOption","searchDebounced","optionsRequest","modelOptionRequest","loading","defaultData","useVisibleItems","vTextOverflown","normalizeExtensions","extensions","trimCharsLeft","getFilePathBreadcrumbs","filePath","sep","isAbsolute","chunks","trimChars","isCtrlOrMeta","resetData","visibleItems","lookup","query","storageHandle","dirPath","ext","load","breadcrumbs","selectedFiles","isReady","getFilesToImport","setDirPath","selectFile","file","shiftKey","ctrlOrMetaKey","lastSelected","between","changeAll","selectAll","deselectAll","loadAvailableStorages","storageEntries","isOpen","onDrop","fileToImportHandle","files","openNativeDialog","filters","mode","defaultTitle","modeOptions","closeModal","remoteRef","submit","importFiles","importedFiles","tryValue","isErrorObject","fileName","getFileNameFromHandle","getFilePathFromHandle","isUploading","isUploaded","tryDo","uploadStats","done","prettyBytes","progressStyle","openFileDialog","onImport","closeAlert","parts","total","fraction","trackTransforms","splitBy","chunk","groups","showLegends","legends","ascending","descending","bisector","compare1","compare2","zero","lo","hi","mid","center","number","bisectRight","count","valueof","extent","slice","constant","e10","e5","e2","tickSpec","power","factor","i1","i2","inc","ticks","reverse","tickIncrement","tickStep","nice","prestep","thresholdSturges","bin","domain","threshold","sturges","histogram","xz","x0","x1","tz","tn","bins","bisect","identity$3","bottom","epsilon","translateX","translateY","scale","axis","orient","tickArguments","tickValues","tickFormat","tickSizeInner","tickSizeOuter","tickPadding","context","format","spacing","range","range0","range1","selection","tickExit","tickEnter","line","axisBottom","axisLeft","dispatch","Dispatch","parseTypenames","typenames","name","typename","get","set","copy","that","xhtml","namespaces","namespace","prefix","creatorInherit","document","uri","creatorFixed","fullname","creator","none","selector","selection_select","select","subgroups","group","subgroup","node","subnode","Selection","empty","selectorAll","arrayAll","selection_selectAll","parents","matcher","childMatcher","find","childFind","match","childFirst","selection_selectChild","children","childrenFilter","selection_selectChildren","selection_filter","sparse","selection_enter","EnterNode","child","constant$1","bindIndex","enter","exit","groupLength","dataLength","bindKey","nodeByKeyValue","keyValues","keyValue","selection_data","bind","arraylike","enterGroup","updateGroup","exitGroup","i0","previous","selection_exit","selection_join","onenter","onupdate","onexit","selection_merge","groups0","groups1","m0","m1","merges","group0","group1","merge","selection_order","selection_sort","compare","compareNode","sortgroups","sortgroup","selection_call","selection_nodes","selection_node","selection_size","selection_empty","selection_each","attrRemove","attrRemoveNS","attrConstant","attrConstantNS","attrFunction","attrFunctionNS","selection_attr","defaultView","styleRemove","styleConstant","priority","styleFunction","selection_style","styleValue","propertyRemove","propertyConstant","propertyFunction","selection_property","classArray","string","ClassList","classedAdd","names","classedRemove","classedTrue","classedFalse","classedFunction","selection_classed","textRemove","textConstant","textFunction","selection_text","htmlRemove","htmlConstant","htmlFunction","selection_html","raise","selection_raise","lower","selection_lower","selection_append","create","constantNull","selection_insert","before","remove","selection_remove","selection_cloneShallow","clone","selection_cloneDeep","selection_clone","deep","selection_datum","contextListener","onRemove","onAdd","selection_on","dispatchEvent","window","dispatchConstant","dispatchFunction","selection_dispatch","selection_iterator","selection_selection","define","constructor","prototype","extend","definition","Color","darker","brighter","reI","reN","reP","reHex","reRgbInteger","reRgbPercent","reRgbaInteger","reRgbaPercent","reHslPercent","reHslaPercent","named","color","channels","color_formatHex","color_formatHex8","color_formatHsl","color_formatRgb","hslConvert","rgbn","Rgb","rgba","hsla","rgbConvert","rgb","opacity","clampi","clampa","rgb_formatHex","rgb_formatHex8","rgb_formatRgb","hex","Hsl","hsl","m2","hsl2rgb","clamph","clampt","linear","exponential","gamma","nogamma","interpolateRgb","rgbGamma","end","colorRgb","numberArray","isNumberArray","genericArray","nb","na","date","interpolateNumber","reA","reB","one","interpolateString","bi","am","bm","bs","q","interpolate$1","interpolateRound","degrees","decompose","scaleX","scaleY","skewX","svgNode","parseCss","parseSvg","interpolateTransform","pxComma","pxParen","degParen","pop","translate","xa","ya","xb","yb","interpolateTransformCss","interpolateTransformSvg","frame","pokeDelay","taskHead","taskTail","clockLast","clockNow","clockSkew","clock","setFrame","now","clearNow","Timer","sleep","timerFlush","wake","nap","poke","t0","t1","t2","elapsed","emptyOn","emptyTween","CREATED","SCHEDULED","STARTING","STARTED","RUNNING","ENDING","ENDED","schedule","schedules","self","tween","interrupt","active","selection_interrupt","tweenRemove","tween0","tween1","tweenFunction","transition_tween","tweenValue","transition","interpolate","value1","string00","string1","interpolate0","string0","string10","transition_attr","attrInterpolate","attrInterpolateNS","attrTweenNS","attrTween","transition_attrTween","delayFunction","delayConstant","transition_delay","durationFunction","durationConstant","transition_duration","easeConstant","transition_ease","easeVarying","transition_easeVarying","transition_filter","Transition","transition_merge","onFunction","on0","on1","sit","transition_on","removeFunction","transition_remove","transition_select","transition_selectAll","inherit","transition_selection","styleNull","styleMaybeRemove","listener0","transition_style","styleInterpolate","styleTween","transition_styleTween","transition_text","textInterpolate","textTween","transition_textTween","transition_transition","id0","id1","newId","transition_end","cancel","selection_prototype","cubicInOut","defaultTiming","easeCubicInOut","selection_transition","formatDecimal","formatDecimalParts","coefficient","exponent","formatGroup","grouping","thousands","formatNumerals","numerals","re","formatSpecifier","specifier","FormatSpecifier","formatTrim","out","prefixExponent","formatPrefixAuto","formatRounded","formatTypes","identity$1","prefixes","formatLocale","locale","currencyPrefix","currencySuffix","decimal","percent","minus","nan","newFormat","fill","align","sign","symbol","comma","precision","trim","suffix","formatType","maybeSuffix","valuePrefix","valueSuffix","valueNegative","padding","formatPrefix","defaultLocale","precisionFixed","precisionPrefix","precisionRound","initRange","constants","unit","normalize","clamper","bimap","d0","d1","r0","r1","polymap","transformer","interpolateValue","untransform","unknown","piecewise","output","rescale","continuous","linearish","maxIter","transformSymlog","transformSymexp","symlogish","symlog","Transform","point","location","createSvgContainer","margin","compact","d3.select","drawBins","svg","dimension","scales","mouseover","_event","mousemove","mouseout","createGridlines","xTicks","makeYGridlines","d3.axisLeft","makeXGridlines","d3.axisBottom","d3.selectAll","logspace","startExp","stopExp","num","createLabels","xAxisLabel","yAxisLabel","drawThreshold","normalizeBins","gx","gy","createYScale","d3.scaleLinear","d3.max","createHistogramLinear","nBins","d3.min","d3.bin","createHistogramLog","d3.scaleSymlog","createThresholds","createHistogramFromBins","_bins","chart","totalWidth","totalHeight","createHistogram","radioGroupNameKey","radioGroupModelKey","standaloneModel","_createPropsRestProxy","_useSlots","keyExtractor","viridis","magma","palettes","categoricalColors","hexR","hexG","hexB","hexA","lerp","interpolateColor","color1","color2","normalizeGradient","Gradient","gradient","colors","segments","segment","localT","up","useSliderBreakpoints","localValue","realtimeVal","propsRef","breakpointsRef","thumbStyle","barRef","thumbRef","round","dx","setModelValue","updateModelValue","nextStep","useScroll","$el","fadeHeight","fadeWidth","getYMask","scrollBottom","offsetBottom","getXMask","scrollRight","offsetLeft","offsetRight","masks","useResizeObserver","getOffset","getMiddle","getBottom","useSortable","shakeBuffer","reorderDelay","elementsBefore","elementsAfter","insertBefore","insertAfter","after","updatePosition","changeOrder","reordered","oldPositions","y1","y2","newPositions","toAnimate","newY","invert","dy","upper","orderChanged","newIndices","useSortable2","oldScrollTop","scrollDiff","deltaUp","deltaDown","useInterval","useFormState","fromSource","objects","useQuery","useDraggable","onMove","down","onDown","useComponentProp","thumbRef1","thumbRef2","thumbRef3","localValue1","localValue2","localValue3","position1","position2","position3","leftRight","getLeftAndRight","thumbStyle1","thumbStyle2","thumbStyle3","updateDatasetForThumb","thumb","modelVal","getHint","point1","point2","point3","right1","right2","right3","isFocused","valuesModel","validateInput","isLeft","inputRange","leftDelta","rightDelta","textModelValue","scrollRef","ratioRef","visibleRef","scrollbarStyle","ratio","removePointerMove","eventType","containerRef","updateState","updateTop","updateLeft","allCssVariables","maskIcons16","maskIcons24","DemoData","icons16","icons24"],"mappings":"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AAF,GACA,MAAAC,GACA,QA/Lc,CACd,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,SACF,EAgLE,SA3Ke,CACf,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,SACF,EA4JE,OAvJa,CACb,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,SACF,EAwIE,QAnIc,CACd,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,SACF,EAoHE,SA/Ge,CACf,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,SACF,EAgGE,SA3Fe,CACf,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,SACF,EA4EE,SAvEe,CACf,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,SACF,EAwDE,UAnDgB,CAChB,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,SACF,EAoCE,cA/BoB,CACpB,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,SACF,CAcA,EAOaE,GAAoB,CAC/B,YAAa,UACb,aAAc,UACd,WAAY,UACZ,aAAc,UACd,cAAe,UACf,YAAa,UACb,aAAc,UACd,cAAe,UACf,YAAa,UACb,WAAY,UACZ,YAAa,UACb,UAAW,UACX,WAAY,UACZ,YAAa,UACb,UAAW,UACX,WAAY,UACZ,YAAa,UACb,UAAW,UACX,WAAY,UACZ,YAAa,UACb,UAAW,UACX,UAAW,UACX,WAAY,UACZ,SAAU,UACV,WAAY,UACZ,YAAa,UACb,UAAW,SACb,EC7QO,SAASjU,GAAMltC,EAAWC,EAAW6Z,EAAWla,EAAY,EAAG,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AC,GAAO,EAAI,EACnB,MAAO,CAAC,kDAAmD,mEAAmE,EAC9H,YAAa,2BACf,EACA,iBAAkB,CAChB,MAAO,CAAC,GAAO,EAAI,EACnB,MAAO,CAAC,kDAAmD,mEAAmE,EAC9H,YAAa,2BACf,EACA,oBAAqB,CACnB,MAAO,CAAC,GAAO,EAAI,EACnB,MAAO,CAAC,oDAAqD,mEAAmE,EAChI,YAAa,2BAAA,CACf,CACF,CAEJ,CACF,CCzUO,MAAMC,GAAc,CACzB,MACA,aACA,aACA,aACA,cACA,WACA,MACA,WACA,aACA,aACA,cACA,WACA,gBACA,mBACA,gBACA,YACA,eACA,gBACA,eACA,eACA,gBACA,aACA,mBACA,YACA,QACA,OACA,kBACA,aACA,gBACA,eACA,WACA,YACA,YACA,OACA,QACA,SACA,YACA,SACA,eACA,OACA,eACA,OACA,YACA,OACA,UACA,OACA,WACA,WACA,QACA,OACA,OACA,aACA,QACA,OACA,WACA,QACA,UACA,UACA,WACA,OACA,OACA,UACA,OACA,OACA,UACA,SACA,SACA,KACF,ECrEaC,GAAc,CACzB,YACA,MACA,eACA,aACA,cACA,WACA,aACA,OACA,aACA,aACA,aACA,cACA,WACA,OACA,YACA,YACA,cACA,YACA,MACA,SACA,MACA,iBACA,iBACA,kBACA,UACA,SACA,WACA,SACA,gBACA,mBACA,gBACA,mBACA,wBACA,WACA,YACA,eACA,gBACA,eACA,eACA,gBACA,eACA,aACA,mBACA,YACA,QACA,iBACA,gBACA,eACA,eACA,UACA,OACA,aACA,aACA,eACA,QACA,UACA,mBACA,YACA,SACA,OACA,MACA,kBACA,QACA,aACA,gBACA,eACA,oBACA,eACA,oBACA,eACA,UACA,aACA,MACA,WACA,YACA,kBACA,gBACA,YACA,OACA,YACA,QACA,cACA,eACA,SACA,eACA,oBACA,kBACA,WACA,YACA,SACA,YACA,gBACA,iBACA,oBACA,yBACA,kBACA,kBACA,WACA,QACA,UACA,eACA,OACA,eACA,OACA,SACA,YACA,QACA,SACA,QACA,iBACA,aACA,SACA,cACA,aACA,cACA,OACA,kBACA,mBACA,kBACA,oBACA,iBACA,mBACA,gBACA,OACA,UACA,OACA,WACA,OACA,WACA,QACA,mBACA,kBACA,eACA,OACA,aACA,QACA,MACA,OACA,6BACA,kBACA,2BACA,gBACA,4BACA,iBACA,0BACA,eACA,UACA,WACA,eACA,uBACA,eACA,QACA,UACA,UACA,aACA,cACA,cACA,SACA,YACA,SACA,WACA,OACA,cACA,QACA,gBACA,kBACA,mBACA,sBACA,iBACA,iBACA,eACA,OACA,aACA,OACA,aACA,UACA,YACA,cACA,eACA,QACA,WACA,WACA,oBACA,kBACA,mBACA,aACA,cACA,OACA,OACA,OACA,YACA,YACA,gBACA,gBACA,SACA,UACA,SACA,mBACA,iBACA,SACA,SACA,MACA,UACA,UACF,EC1DMC,GAAW,CAAE,gBAAiBH,GAAgB,EAAG,QAAAI,GAAS,QAAAC,EAAQ","x_google_ignoreList":[100,101,102,104,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,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,264]}