{"version":3,"file":"react.mjs","sources":["../src/type/grammar.ts","../src/type/navigation.ts","../src/service/navigation.ts","../src/type/event.ts","../src/util/constant.ts","../src/util/stack.ts","../node_modules/hotkeys-js/dist/hotkeys.esm.js","../src/model/context.ts","../src/util/color.ts","../src/util/svg.ts","../src/model/abstract.ts","../src/util/math.ts","../src/model/movable.ts","../src/model/bar.ts","../src/type/boxplotSection.ts","../src/model/box.ts","../src/model/candlestick.ts","../src/model/heatmap.ts","../src/model/histogram.ts","../src/model/line.ts","../src/model/scatter.ts","../src/model/segmented.ts","../src/model/smooth.ts","../src/model/smoothSvgXY.ts","../src/model/smoothtraceFactory.ts","../src/model/violin.ts","../src/model/violinBox.ts","../src/model/factory.ts","../src/model/plot.ts","../src/service/audioPalette.ts","../src/service/audio.ts","../src/service/autoplay.ts","../src/service/braille.ts","../src/type/api.ts","../src/util/api.ts","../src/service/prompts.ts","../src/service/chat.ts","../src/command/autoplay.ts","../src/command/describe.ts","../src/command/goTo.ts","../src/command/goToExtremaNavigation.ts","../src/command/gridCell.ts","../src/command/move.ts","../src/command/rotorNavigation.ts","../src/command/toggle.ts","../src/command/factory.ts","../src/util/platform.ts","../src/service/keybinding.ts","../src/service/commandExecutor.ts","../src/service/commandPalette.ts","../src/adapters/plotly/normalizer.ts","../src/service/display.ts","../src/util/format.ts","../src/service/formatter.ts","../src/service/goToExtrema.ts","../src/service/help.ts","../src/service/pattern.ts","../src/service/highContrast.ts","../src/service/highlight.ts","../src/service/notification.ts","../src/service/review.ts","../src/service/rotor.ts","../src/service/settings.ts","../src/service/storage.ts","../src/type/state.ts","../src/service/text.ts","../node_modules/redux/dist/redux.mjs","../node_modules/immer/dist/immer.mjs","../node_modules/redux-thunk/dist/redux-thunk.mjs","../node_modules/@reduxjs/toolkit/dist/redux-toolkit.modern.mjs","../src/state/viewModel/viewModel.ts","../src/state/viewModel/brailleViewModel.ts","../src/service/modelVersions.ts","../src/state/viewModel/chatViewModel.ts","../src/state/viewModel/commandPaletteViewModel.ts","../src/state/viewModel/displayViewModel.ts","../src/state/viewModel/goToExtremaViewModel.ts","../src/state/viewModel/helpViewModel.ts","../src/state/viewModel/registry.ts","../src/state/viewModel/reviewViewModel.ts","../src/state/viewModel/rotorNavigationViewModel.ts","../src/type/settings.ts","../src/state/viewModel/settingsViewModel.ts","../src/state/viewModel/textViewModel.ts","../src/util/subplotLayout.ts","../src/controller.ts","../src/state/hook/useMaidrController.ts","../src/state/store.ts","../src/state/context.ts","../node_modules/use-sync-external-store/cjs/use-sync-external-store-with-selector.production.js","../node_modules/use-sync-external-store/cjs/use-sync-external-store-with-selector.development.js","../node_modules/use-sync-external-store/with-selector.js","../node_modules/react-redux/dist/react-redux.mjs","../src/state/hook/useViewModel.ts","../src/ui/component/Braille.tsx","../node_modules/@mui/utils/esm/ClassNameGenerator/ClassNameGenerator.js","../node_modules/@mui/utils/esm/formatMuiErrorMessage/formatMuiErrorMessage.js","../node_modules/@mui/utils/esm/capitalize/capitalize.js","../node_modules/@mui/utils/esm/createChainedFunction/createChainedFunction.js","../node_modules/prop-types/node_modules/react-is/cjs/react-is.production.min.js","../node_modules/prop-types/node_modules/react-is/cjs/react-is.development.js","../node_modules/prop-types/node_modules/react-is/index.js","../node_modules/object-assign/index.js","../node_modules/prop-types/lib/ReactPropTypesSecret.js","../node_modules/prop-types/lib/has.js","../node_modules/prop-types/checkPropTypes.js","../node_modules/prop-types/factoryWithTypeCheckers.js","../node_modules/prop-types/factoryWithThrowingShims.js","../node_modules/prop-types/index.js","../node_modules/clsx/dist/clsx.mjs","../node_modules/@mui/utils/esm/composeClasses/composeClasses.js","../node_modules/react-is/cjs/react-is.production.js","../node_modules/react-is/cjs/react-is.development.js","../node_modules/react-is/index.js","../node_modules/@mui/utils/esm/deepmerge/deepmerge.js","../node_modules/@mui/system/esm/merge/merge.js","../node_modules/@mui/system/esm/responsivePropType/responsivePropType.js","../node_modules/@mui/system/esm/cssContainerQueries/cssContainerQueries.js","../node_modules/@mui/system/esm/breakpoints/breakpoints.js","../node_modules/@mui/system/esm/style/style.js","../node_modules/@mui/system/esm/memoize/memoize.js","../node_modules/@mui/system/esm/spacing/spacing.js","../node_modules/@mui/system/esm/compose/compose.js","../node_modules/@mui/system/esm/borders/borders.js","../node_modules/@mui/system/esm/cssGrid/cssGrid.js","../node_modules/@mui/system/esm/palette/palette.js","../node_modules/@mui/system/esm/sizing/sizing.js","../node_modules/@mui/system/esm/styleFunctionSx/defaultSxConfig.js","../node_modules/@mui/system/esm/styleFunctionSx/styleFunctionSx.js","../node_modules/@mui/system/esm/styleFunctionSx/extendSxProp.js","../node_modules/@babel/runtime/helpers/esm/extends.js","../node_modules/@emotion/sheet/dist/emotion-sheet.esm.js","../node_modules/stylis/src/Enum.js","../node_modules/stylis/src/Utility.js","../node_modules/stylis/src/Tokenizer.js","../node_modules/stylis/src/Parser.js","../node_modules/stylis/src/Serializer.js","../node_modules/stylis/src/Middleware.js","../node_modules/@emotion/memoize/dist/emotion-memoize.esm.js","../node_modules/@emotion/cache/dist/emotion-cache.browser.esm.js","../node_modules/hoist-non-react-statics/node_modules/react-is/cjs/react-is.production.min.js","../node_modules/hoist-non-react-statics/node_modules/react-is/cjs/react-is.development.js","../node_modules/hoist-non-react-statics/node_modules/react-is/index.js","../node_modules/hoist-non-react-statics/dist/hoist-non-react-statics.cjs.js","../node_modules/@emotion/utils/dist/emotion-utils.browser.esm.js","../node_modules/@emotion/hash/dist/emotion-hash.esm.js","../node_modules/@emotion/unitless/dist/emotion-unitless.esm.js","../node_modules/@emotion/serialize/dist/emotion-serialize.esm.js","../node_modules/@emotion/use-insertion-effect-with-fallbacks/dist/emotion-use-insertion-effect-with-fallbacks.browser.esm.js","../node_modules/@emotion/react/dist/emotion-element-f0de968e.browser.esm.js","../node_modules/@emotion/react/dist/emotion-react.browser.esm.js","../node_modules/@emotion/is-prop-valid/dist/emotion-is-prop-valid.esm.js","../node_modules/@emotion/styled/base/dist/emotion-styled-base.browser.esm.js","../node_modules/@emotion/styled/dist/emotion-styled.browser.esm.js","../node_modules/@mui/styled-engine/esm/GlobalStyles/GlobalStyles.js","../node_modules/@mui/styled-engine/esm/index.js","../node_modules/@mui/system/esm/createBreakpoints/createBreakpoints.js","../node_modules/@mui/system/esm/createTheme/shape.js","../node_modules/@mui/system/esm/createTheme/createSpacing.js","../node_modules/@mui/system/esm/createTheme/applyStyles.js","../node_modules/@mui/system/esm/createTheme/createTheme.js","../node_modules/@mui/system/esm/useThemeWithoutDefault/useThemeWithoutDefault.js","../node_modules/@mui/system/esm/useTheme/useTheme.js","../node_modules/@mui/system/esm/GlobalStyles/GlobalStyles.js","../node_modules/@mui/system/esm/createBox/createBox.js","../node_modules/@mui/utils/esm/generateUtilityClass/generateUtilityClass.js","../node_modules/@mui/utils/esm/generateUtilityClasses/generateUtilityClasses.js","../node_modules/@mui/utils/esm/getDisplayName/getDisplayName.js","../node_modules/@mui/system/esm/preprocessStyles.js","../node_modules/@mui/system/esm/createStyled/createStyled.js","../node_modules/@mui/system/esm/styled/styled.js","../node_modules/@mui/utils/esm/resolveProps/resolveProps.js","../node_modules/@mui/system/esm/useThemeProps/getThemeProps.js","../node_modules/@mui/system/esm/useThemeProps/useThemeProps.js","../node_modules/@mui/utils/esm/useEnhancedEffect/useEnhancedEffect.js","../node_modules/@mui/utils/esm/clamp/clamp.js","../node_modules/@mui/system/esm/colorManipulator/colorManipulator.js","../node_modules/@mui/utils/esm/exactProp/exactProp.js","../node_modules/@mui/system/esm/RtlProvider/index.js","../node_modules/@mui/system/esm/DefaultPropsProvider/DefaultPropsProvider.js","../node_modules/@mui/utils/esm/useId/useId.js","../node_modules/@mui/system/esm/memoTheme.js","../node_modules/@mui/system/esm/cssVars/createGetCssVar.js","../node_modules/@mui/system/esm/cssVars/cssVarsParser.js","../node_modules/@mui/system/esm/cssVars/prepareCssVars.js","../node_modules/@mui/system/esm/cssVars/getColorSchemeSelector.js","../node_modules/@mui/utils/esm/isMuiElement/isMuiElement.js","../node_modules/@mui/system/esm/Grid/traverseBreakpoints.js","../node_modules/@mui/system/esm/Grid/gridGenerator.js","../node_modules/@mui/system/esm/Grid/deleteLegacyGridProps.js","../node_modules/@mui/system/esm/Grid/createGrid.js","../node_modules/@mui/material/esm/colors/common.js","../node_modules/@mui/material/esm/colors/grey.js","../node_modules/@mui/material/esm/colors/purple.js","../node_modules/@mui/material/esm/colors/red.js","../node_modules/@mui/material/esm/colors/orange.js","../node_modules/@mui/material/esm/colors/blue.js","../node_modules/@mui/material/esm/colors/lightBlue.js","../node_modules/@mui/material/esm/colors/green.js","../node_modules/@mui/material/esm/styles/createPalette.js","../node_modules/@mui/system/esm/cssVars/prepareTypographyVars.js","../node_modules/@mui/material/esm/styles/createMixins.js","../node_modules/@mui/material/esm/styles/createTypography.js","../node_modules/@mui/material/esm/styles/shadows.js","../node_modules/@mui/material/esm/styles/createTransitions.js","../node_modules/@mui/material/esm/styles/zIndex.js","../node_modules/@mui/material/esm/styles/stringifyTheme.js","../node_modules/@mui/material/esm/styles/createThemeNoVars.js","../node_modules/@mui/material/esm/styles/getOverlayAlpha.js","../node_modules/@mui/material/esm/styles/createColorScheme.js","../node_modules/@mui/material/esm/styles/shouldSkipGeneratingVar.js","../node_modules/@mui/material/esm/styles/excludeVariablesFromRoot.js","../node_modules/@mui/material/esm/styles/createGetSelector.js","../node_modules/@mui/material/esm/styles/createThemeWithVars.js","../node_modules/@mui/material/esm/styles/createTheme.js","../node_modules/@mui/material/esm/styles/defaultTheme.js","../node_modules/@mui/material/esm/styles/identifier.js","../node_modules/@mui/material/esm/styles/useTheme.js","../node_modules/@mui/material/esm/GlobalStyles/GlobalStyles.js","../node_modules/@mui/material/esm/styles/slotShouldForwardProp.js","../node_modules/@mui/material/esm/styles/rootShouldForwardProp.js","../node_modules/@mui/material/esm/styles/styled.js","../node_modules/@mui/material/esm/zero-styled/index.js","../node_modules/@mui/material/esm/utils/memoTheme.js","../node_modules/@mui/material/esm/DefaultPropsProvider/DefaultPropsProvider.js","../node_modules/@mui/material/esm/SvgIcon/svgIconClasses.js","../node_modules/@mui/material/esm/SvgIcon/SvgIcon.js","../node_modules/@mui/material/esm/utils/createSvgIcon.js","../node_modules/@mui/utils/esm/debounce/debounce.js","../node_modules/@mui/utils/esm/ownerDocument/ownerDocument.js","../node_modules/@mui/utils/esm/ownerWindow/ownerWindow.js","../node_modules/@mui/utils/esm/requirePropFactory/requirePropFactory.js","../node_modules/@mui/utils/esm/setRef/setRef.js","../node_modules/@mui/utils/esm/unsupportedProp/unsupportedProp.js","../node_modules/@mui/utils/esm/useControlled/useControlled.js","../node_modules/@mui/utils/esm/useEventCallback/useEventCallback.js","../node_modules/@mui/utils/esm/useForkRef/useForkRef.js","../node_modules/@mui/material/esm/utils/mergeSlotProps.js","../node_modules/@mui/icons-material/esm/AccountCircle.js","../node_modules/@mui/icons-material/esm/Check.js","../node_modules/@mui/icons-material/esm/Close.js","../node_modules/@mui/icons-material/esm/Error.js","../node_modules/@mui/icons-material/esm/KeyboardArrowDown.js","../node_modules/@mui/icons-material/esm/Send.js","../node_modules/@mui/icons-material/esm/SmartToy.js","../node_modules/@mui/utils/esm/chainPropTypes/chainPropTypes.js","../node_modules/@babel/runtime/helpers/esm/objectWithoutPropertiesLoose.js","../node_modules/@babel/runtime/helpers/esm/setPrototypeOf.js","../node_modules/@babel/runtime/helpers/esm/inheritsLoose.js","../node_modules/react-transition-group/esm/config.js","../node_modules/react-transition-group/esm/utils/PropTypes.js","../node_modules/react-transition-group/esm/TransitionGroupContext.js","../node_modules/react-transition-group/esm/utils/reflow.js","../node_modules/react-transition-group/esm/Transition.js","../node_modules/@babel/runtime/helpers/esm/assertThisInitialized.js","../node_modules/react-transition-group/esm/utils/ChildMapping.js","../node_modules/react-transition-group/esm/TransitionGroup.js","../node_modules/@mui/utils/esm/useLazyRef/useLazyRef.js","../node_modules/@mui/utils/esm/useOnMount/useOnMount.js","../node_modules/@mui/utils/esm/useTimeout/useTimeout.js","../node_modules/@mui/utils/esm/elementTypeAcceptingRef/elementTypeAcceptingRef.js","../node_modules/@mui/material/esm/transitions/utils.js","../node_modules/@mui/utils/esm/isHostComponent/isHostComponent.js","../node_modules/@mui/utils/esm/appendOwnerState/appendOwnerState.js","../node_modules/@mui/utils/esm/resolveComponentProps/resolveComponentProps.js","../node_modules/@mui/utils/esm/extractEventHandlers/extractEventHandlers.js","../node_modules/@mui/utils/esm/omitEventHandlers/omitEventHandlers.js","../node_modules/@mui/utils/esm/mergeSlotProps/mergeSlotProps.js","../node_modules/@mui/material/esm/utils/useSlot.js","../node_modules/@mui/utils/esm/integerPropType/integerPropType.js","../node_modules/@mui/material/esm/Paper/paperClasses.js","../node_modules/@mui/material/esm/Paper/Paper.js","../node_modules/@mui/utils/esm/refType/refType.js","../node_modules/@mui/utils/esm/isFocusVisible/isFocusVisible.js","../node_modules/@mui/material/esm/useLazyRipple/useLazyRipple.js","../node_modules/@mui/material/esm/ButtonBase/Ripple.js","../node_modules/@mui/material/esm/ButtonBase/touchRippleClasses.js","../node_modules/@mui/material/esm/ButtonBase/TouchRipple.js","../node_modules/@mui/material/esm/ButtonBase/buttonBaseClasses.js","../node_modules/@mui/material/esm/ButtonBase/ButtonBase.js","../node_modules/@mui/material/esm/utils/createSimplePaletteValueFilter.js","../node_modules/@mui/material/esm/Alert/alertClasses.js","../node_modules/@mui/material/esm/CircularProgress/circularProgressClasses.js","../node_modules/@mui/material/esm/CircularProgress/CircularProgress.js","../node_modules/@mui/material/esm/IconButton/iconButtonClasses.js","../node_modules/@mui/material/esm/IconButton/IconButton.js","../node_modules/@mui/material/esm/internal/svg-icons/SuccessOutlined.js","../node_modules/@mui/material/esm/internal/svg-icons/ReportProblemOutlined.js","../node_modules/@mui/material/esm/internal/svg-icons/ErrorOutline.js","../node_modules/@mui/material/esm/internal/svg-icons/InfoOutlined.js","../node_modules/@mui/material/esm/internal/svg-icons/Close.js","../node_modules/@mui/material/esm/Alert/Alert.js","../node_modules/@mui/material/esm/Typography/typographyClasses.js","../node_modules/@mui/material/esm/Typography/Typography.js","../node_modules/@mui/utils/esm/HTMLElementType/HTMLElementType.js","../node_modules/@popperjs/core/lib/enums.js","../node_modules/@popperjs/core/lib/dom-utils/getNodeName.js","../node_modules/@popperjs/core/lib/dom-utils/getWindow.js","../node_modules/@popperjs/core/lib/dom-utils/instanceOf.js","../node_modules/@popperjs/core/lib/modifiers/applyStyles.js","../node_modules/@popperjs/core/lib/utils/getBasePlacement.js","../node_modules/@popperjs/core/lib/utils/math.js","../node_modules/@popperjs/core/lib/utils/userAgent.js","../node_modules/@popperjs/core/lib/dom-utils/isLayoutViewport.js","../node_modules/@popperjs/core/lib/dom-utils/getBoundingClientRect.js","../node_modules/@popperjs/core/lib/dom-utils/getLayoutRect.js","../node_modules/@popperjs/core/lib/dom-utils/contains.js","../node_modules/@popperjs/core/lib/dom-utils/getComputedStyle.js","../node_modules/@popperjs/core/lib/dom-utils/isTableElement.js","../node_modules/@popperjs/core/lib/dom-utils/getDocumentElement.js","../node_modules/@popperjs/core/lib/dom-utils/getParentNode.js","../node_modules/@popperjs/core/lib/dom-utils/getOffsetParent.js","../node_modules/@popperjs/core/lib/utils/getMainAxisFromPlacement.js","../node_modules/@popperjs/core/lib/utils/within.js","../node_modules/@popperjs/core/lib/utils/getFreshSideObject.js","../node_modules/@popperjs/core/lib/utils/mergePaddingObject.js","../node_modules/@popperjs/core/lib/utils/expandToHashMap.js","../node_modules/@popperjs/core/lib/modifiers/arrow.js","../node_modules/@popperjs/core/lib/utils/getVariation.js","../node_modules/@popperjs/core/lib/modifiers/computeStyles.js","../node_modules/@popperjs/core/lib/modifiers/eventListeners.js","../node_modules/@popperjs/core/lib/utils/getOppositePlacement.js","../node_modules/@popperjs/core/lib/utils/getOppositeVariationPlacement.js","../node_modules/@popperjs/core/lib/dom-utils/getWindowScroll.js","../node_modules/@popperjs/core/lib/dom-utils/getWindowScrollBarX.js","../node_modules/@popperjs/core/lib/dom-utils/getViewportRect.js","../node_modules/@popperjs/core/lib/dom-utils/getDocumentRect.js","../node_modules/@popperjs/core/lib/dom-utils/isScrollParent.js","../node_modules/@popperjs/core/lib/dom-utils/getScrollParent.js","../node_modules/@popperjs/core/lib/dom-utils/listScrollParents.js","../node_modules/@popperjs/core/lib/utils/rectToClientRect.js","../node_modules/@popperjs/core/lib/dom-utils/getClippingRect.js","../node_modules/@popperjs/core/lib/utils/computeOffsets.js","../node_modules/@popperjs/core/lib/utils/detectOverflow.js","../node_modules/@popperjs/core/lib/utils/computeAutoPlacement.js","../node_modules/@popperjs/core/lib/modifiers/flip.js","../node_modules/@popperjs/core/lib/modifiers/hide.js","../node_modules/@popperjs/core/lib/modifiers/offset.js","../node_modules/@popperjs/core/lib/modifiers/popperOffsets.js","../node_modules/@popperjs/core/lib/utils/getAltAxis.js","../node_modules/@popperjs/core/lib/modifiers/preventOverflow.js","../node_modules/@popperjs/core/lib/dom-utils/getHTMLElementScroll.js","../node_modules/@popperjs/core/lib/dom-utils/getNodeScroll.js","../node_modules/@popperjs/core/lib/dom-utils/getCompositeRect.js","../node_modules/@popperjs/core/lib/utils/orderModifiers.js","../node_modules/@popperjs/core/lib/utils/debounce.js","../node_modules/@popperjs/core/lib/utils/mergeByName.js","../node_modules/@popperjs/core/lib/createPopper.js","../node_modules/@popperjs/core/lib/popper.js","../node_modules/@mui/utils/esm/useSlotProps/useSlotProps.js","../node_modules/@mui/material/esm/utils/isLayoutSupported.js","../node_modules/@mui/utils/esm/getReactElementRef/getReactElementRef.js","../node_modules/@mui/material/esm/Portal/Portal.js","../node_modules/@mui/material/esm/Popper/popperClasses.js","../node_modules/@mui/material/esm/Popper/BasePopper.js","../node_modules/@mui/material/esm/Popper/Popper.js","../node_modules/@mui/material/esm/internal/svg-icons/Cancel.js","../node_modules/@mui/material/esm/Chip/chipClasses.js","../node_modules/@mui/material/esm/Chip/Chip.js","../node_modules/@mui/material/esm/TextareaAutosize/TextareaAutosize.js","../node_modules/@mui/material/esm/FormControl/formControlState.js","../node_modules/@mui/material/esm/FormControl/FormControlContext.js","../node_modules/@mui/material/esm/FormControl/useFormControl.js","../node_modules/@mui/material/esm/InputBase/utils.js","../node_modules/@mui/material/esm/InputBase/inputBaseClasses.js","../node_modules/@mui/material/esm/InputBase/InputBase.js","../node_modules/@mui/material/esm/Input/inputClasses.js","../node_modules/@mui/material/esm/OutlinedInput/outlinedInputClasses.js","../node_modules/@mui/material/esm/FilledInput/filledInputClasses.js","../node_modules/@mui/material/esm/internal/svg-icons/ArrowDropDown.js","../node_modules/@mui/material/esm/internal/svg-icons/Person.js","../node_modules/@mui/material/esm/Avatar/avatarClasses.js","../node_modules/@mui/material/esm/Avatar/Avatar.js","../node_modules/@mui/utils/esm/elementAcceptingRef/elementAcceptingRef.js","../node_modules/@mui/material/esm/Fade/Fade.js","../node_modules/@mui/material/esm/Backdrop/backdropClasses.js","../node_modules/@mui/material/esm/Backdrop/Backdrop.js","../node_modules/@mui/material/esm/Box/boxClasses.js","../node_modules/@mui/material/esm/Box/Box.js","../node_modules/@mui/material/esm/Button/buttonClasses.js","../node_modules/@mui/material/esm/ButtonGroup/ButtonGroupContext.js","../node_modules/@mui/material/esm/ButtonGroup/ButtonGroupButtonContext.js","../node_modules/@mui/material/esm/Button/Button.js","../node_modules/@mui/material/esm/internal/switchBaseClasses.js","../node_modules/@mui/material/esm/internal/SwitchBase.js","../node_modules/@mui/material/esm/internal/svg-icons/CheckBoxOutlineBlank.js","../node_modules/@mui/material/esm/internal/svg-icons/CheckBox.js","../node_modules/@mui/material/esm/internal/svg-icons/IndeterminateCheckBox.js","../node_modules/@mui/material/esm/Checkbox/checkboxClasses.js","../node_modules/@mui/material/esm/Checkbox/Checkbox.js","../node_modules/@mui/utils/esm/getScrollbarSize/getScrollbarSize.js","../node_modules/@mui/material/esm/Modal/ModalManager.js","../node_modules/@mui/utils/esm/getActiveElement/getActiveElement.js","../node_modules/@mui/material/esm/Unstable_TrapFocus/FocusTrap.js","../node_modules/@mui/material/esm/Modal/useModal.js","../node_modules/@mui/material/esm/Modal/modalClasses.js","../node_modules/@mui/material/esm/Modal/Modal.js","../node_modules/@mui/material/esm/Dialog/dialogClasses.js","../node_modules/@mui/material/esm/Dialog/DialogContext.js","../node_modules/@mui/material/esm/Dialog/Dialog.js","../node_modules/@mui/material/esm/DialogActions/dialogActionsClasses.js","../node_modules/@mui/material/esm/DialogActions/DialogActions.js","../node_modules/@mui/material/esm/DialogContent/dialogContentClasses.js","../node_modules/@mui/material/esm/DialogTitle/dialogTitleClasses.js","../node_modules/@mui/material/esm/DialogContent/DialogContent.js","../node_modules/@mui/material/esm/DialogTitle/DialogTitle.js","../node_modules/@mui/material/esm/Divider/dividerClasses.js","../node_modules/@mui/material/esm/Divider/Divider.js","../node_modules/@mui/material/esm/FilledInput/FilledInput.js","../node_modules/@mui/material/esm/FormControl/formControlClasses.js","../node_modules/@mui/material/esm/FormControl/FormControl.js","../node_modules/@mui/material/esm/FormControlLabel/formControlLabelClasses.js","../node_modules/@mui/material/esm/FormControlLabel/FormControlLabel.js","../node_modules/@mui/material/esm/FormGroup/formGroupClasses.js","../node_modules/@mui/material/esm/FormGroup/FormGroup.js","../node_modules/@mui/material/esm/FormHelperText/formHelperTextClasses.js","../node_modules/@mui/material/esm/FormHelperText/FormHelperText.js","../node_modules/@mui/material/esm/FormLabel/formLabelClasses.js","../node_modules/@mui/material/esm/FormLabel/FormLabel.js","../node_modules/@mui/material/esm/Grid/Grid.js","../node_modules/@mui/material/esm/Grow/Grow.js","../node_modules/@mui/material/esm/Input/Input.js","../node_modules/@mui/material/esm/InputAdornment/inputAdornmentClasses.js","../node_modules/@mui/material/esm/InputAdornment/InputAdornment.js","../node_modules/@mui/material/esm/InputLabel/inputLabelClasses.js","../node_modules/@mui/material/esm/InputLabel/InputLabel.js","../node_modules/@mui/material/esm/List/ListContext.js","../node_modules/@mui/material/esm/List/listClasses.js","../node_modules/@mui/material/esm/List/List.js","../node_modules/@mui/material/esm/ListItem/listItemClasses.js","../node_modules/@mui/material/esm/ListItemButton/listItemButtonClasses.js","../node_modules/@mui/material/esm/ListItemButton/ListItemButton.js","../node_modules/@mui/material/esm/ListItemSecondaryAction/listItemSecondaryActionClasses.js","../node_modules/@mui/material/esm/ListItemSecondaryAction/ListItemSecondaryAction.js","../node_modules/@mui/material/esm/ListItem/ListItem.js","../node_modules/@mui/material/esm/ListItemIcon/listItemIconClasses.js","../node_modules/@mui/material/esm/ListItemText/listItemTextClasses.js","../node_modules/@mui/material/esm/ListItemText/ListItemText.js","../node_modules/@mui/material/esm/MenuList/MenuList.js","../node_modules/@mui/material/esm/Popover/popoverClasses.js","../node_modules/@mui/material/esm/Popover/Popover.js","../node_modules/@mui/material/esm/Menu/menuClasses.js","../node_modules/@mui/material/esm/Menu/Menu.js","../node_modules/@mui/material/esm/MenuItem/menuItemClasses.js","../node_modules/@mui/material/esm/NativeSelect/nativeSelectClasses.js","../node_modules/@mui/material/esm/NativeSelect/NativeSelectInput.js","../node_modules/@mui/material/esm/Select/selectClasses.js","../node_modules/@mui/material/esm/Select/utils/getOpenInteractionType.js","../node_modules/@mui/material/esm/Select/utils/isEmpty.js","../node_modules/@mui/material/esm/Select/utils/areEqualValues.js","../node_modules/@mui/material/esm/Select/utils/SelectFocusSourceContext.js","../node_modules/@mui/material/esm/Select/SelectInput.js","../node_modules/@mui/material/esm/OutlinedInput/NotchedOutline.js","../node_modules/@mui/material/esm/OutlinedInput/OutlinedInput.js","../node_modules/@mui/material/esm/Select/Select.js","../node_modules/@mui/material/esm/MenuItem/MenuItem.js","../node_modules/@mui/material/esm/internal/svg-icons/RadioButtonUnchecked.js","../node_modules/@mui/material/esm/internal/svg-icons/RadioButtonChecked.js","../node_modules/@mui/material/esm/Radio/RadioButtonIcon.js","../node_modules/@mui/material/esm/RadioGroup/RadioGroupContext.js","../node_modules/@mui/material/esm/RadioGroup/useRadioGroup.js","../node_modules/@mui/material/esm/Radio/radioClasses.js","../node_modules/@mui/material/esm/Radio/Radio.js","../node_modules/@mui/material/esm/RadioGroup/radioGroupClasses.js","../node_modules/@mui/material/esm/RadioGroup/RadioGroup.js","../node_modules/@mui/utils/esm/visuallyHidden/visuallyHidden.js","../node_modules/@mui/material/esm/utils/areArraysEqual.js","../node_modules/@mui/material/esm/Slider/useSlider.js","../node_modules/@mui/material/esm/utils/shouldSpreadAdditionalProps.js","../node_modules/@mui/material/esm/Slider/sliderClasses.js","../node_modules/@mui/material/esm/Slider/SliderValueLabel.js","../node_modules/@mui/material/esm/Slider/Slider.js","../node_modules/@mui/material/esm/Tooltip/tooltipClasses.js","../node_modules/@mui/material/esm/Tooltip/Tooltip.js","../node_modules/@mui/material/esm/Switch/switchClasses.js","../node_modules/@mui/material/esm/Switch/Switch.js","../node_modules/@mui/material/esm/TextField/textFieldClasses.js","../node_modules/@mui/material/esm/TextField/TextField.js","../src/ui/components/ModelIcon.tsx","../src/ui/components/ModelSelection.tsx","../node_modules/comma-separated-tokens/index.js","../node_modules/estree-util-is-identifier-name/lib/index.js","../node_modules/hast-util-whitespace/lib/index.js","../node_modules/property-information/lib/util/schema.js","../node_modules/property-information/lib/util/merge.js","../node_modules/property-information/lib/normalize.js","../node_modules/property-information/lib/util/info.js","../node_modules/property-information/lib/util/types.js","../node_modules/property-information/lib/util/defined-info.js","../node_modules/property-information/lib/util/create.js","../node_modules/property-information/lib/aria.js","../node_modules/property-information/lib/util/case-sensitive-transform.js","../node_modules/property-information/lib/util/case-insensitive-transform.js","../node_modules/property-information/lib/html.js","../node_modules/property-information/lib/svg.js","../node_modules/property-information/lib/xlink.js","../node_modules/property-information/lib/xmlns.js","../node_modules/property-information/lib/xml.js","../node_modules/property-information/lib/hast-to-react.js","../node_modules/property-information/lib/find.js","../node_modules/property-information/index.js","../node_modules/space-separated-tokens/index.js","../node_modules/inline-style-parser/cjs/index.js","../node_modules/style-to-object/cjs/index.js","../node_modules/style-to-js/cjs/utilities.js","../node_modules/style-to-js/cjs/index.js","../node_modules/unist-util-position/lib/index.js","../node_modules/unist-util-stringify-position/lib/index.js","../node_modules/vfile-message/lib/index.js","../node_modules/hast-util-to-jsx-runtime/lib/index.js","../node_modules/html-url-attributes/lib/index.js","../node_modules/mdast-util-to-string/lib/index.js","../node_modules/decode-named-character-reference/index.dom.js","../node_modules/micromark-util-chunked/index.js","../node_modules/micromark-util-combine-extensions/index.js","../node_modules/micromark-util-decode-numeric-character-reference/index.js","../node_modules/micromark-util-normalize-identifier/index.js","../node_modules/micromark-util-character/index.js","../node_modules/micromark-util-sanitize-uri/index.js","../node_modules/micromark-factory-space/index.js","../node_modules/micromark/lib/initialize/content.js","../node_modules/micromark/lib/initialize/document.js","../node_modules/micromark-util-classify-character/index.js","../node_modules/micromark-util-resolve-all/index.js","../node_modules/micromark-core-commonmark/lib/attention.js","../node_modules/micromark-core-commonmark/lib/autolink.js","../node_modules/micromark-core-commonmark/lib/blank-line.js","../node_modules/micromark-core-commonmark/lib/block-quote.js","../node_modules/micromark-core-commonmark/lib/character-escape.js","../node_modules/micromark-core-commonmark/lib/character-reference.js","../node_modules/micromark-core-commonmark/lib/code-fenced.js","../node_modules/micromark-core-commonmark/lib/code-indented.js","../node_modules/micromark-core-commonmark/lib/code-text.js","../node_modules/micromark-util-subtokenize/lib/splice-buffer.js","../node_modules/micromark-util-subtokenize/index.js","../node_modules/micromark-core-commonmark/lib/content.js","../node_modules/micromark-factory-destination/index.js","../node_modules/micromark-factory-label/index.js","../node_modules/micromark-factory-title/index.js","../node_modules/micromark-factory-whitespace/index.js","../node_modules/micromark-core-commonmark/lib/definition.js","../node_modules/micromark-core-commonmark/lib/hard-break-escape.js","../node_modules/micromark-core-commonmark/lib/heading-atx.js","../node_modules/micromark-util-html-tag-name/index.js","../node_modules/micromark-core-commonmark/lib/html-flow.js","../node_modules/micromark-core-commonmark/lib/html-text.js","../node_modules/micromark-core-commonmark/lib/label-end.js","../node_modules/micromark-core-commonmark/lib/label-start-image.js","../node_modules/micromark-core-commonmark/lib/label-start-link.js","../node_modules/micromark-core-commonmark/lib/line-ending.js","../node_modules/micromark-core-commonmark/lib/thematic-break.js","../node_modules/micromark-core-commonmark/lib/list.js","../node_modules/micromark-core-commonmark/lib/setext-underline.js","../node_modules/micromark/lib/initialize/flow.js","../node_modules/micromark/lib/initialize/text.js","../node_modules/micromark/lib/constructs.js","../node_modules/micromark/lib/create-tokenizer.js","../node_modules/micromark/lib/parse.js","../node_modules/micromark/lib/postprocess.js","../node_modules/micromark/lib/preprocess.js","../node_modules/micromark-util-decode-string/index.js","../node_modules/mdast-util-from-markdown/lib/index.js","../node_modules/remark-parse/lib/index.js","../node_modules/mdast-util-to-hast/lib/handlers/blockquote.js","../node_modules/mdast-util-to-hast/lib/handlers/break.js","../node_modules/mdast-util-to-hast/lib/handlers/code.js","../node_modules/mdast-util-to-hast/lib/handlers/delete.js","../node_modules/mdast-util-to-hast/lib/handlers/emphasis.js","../node_modules/mdast-util-to-hast/lib/handlers/footnote-reference.js","../node_modules/mdast-util-to-hast/lib/handlers/heading.js","../node_modules/mdast-util-to-hast/lib/handlers/html.js","../node_modules/mdast-util-to-hast/lib/revert.js","../node_modules/mdast-util-to-hast/lib/handlers/image-reference.js","../node_modules/mdast-util-to-hast/lib/handlers/image.js","../node_modules/mdast-util-to-hast/lib/handlers/inline-code.js","../node_modules/mdast-util-to-hast/lib/handlers/link-reference.js","../node_modules/mdast-util-to-hast/lib/handlers/link.js","../node_modules/mdast-util-to-hast/lib/handlers/list-item.js","../node_modules/mdast-util-to-hast/lib/handlers/list.js","../node_modules/mdast-util-to-hast/lib/handlers/paragraph.js","../node_modules/mdast-util-to-hast/lib/handlers/root.js","../node_modules/mdast-util-to-hast/lib/handlers/strong.js","../node_modules/mdast-util-to-hast/lib/handlers/table.js","../node_modules/mdast-util-to-hast/lib/handlers/table-row.js","../node_modules/mdast-util-to-hast/lib/handlers/table-cell.js","../node_modules/trim-lines/index.js","../node_modules/mdast-util-to-hast/lib/handlers/text.js","../node_modules/mdast-util-to-hast/lib/handlers/thematic-break.js","../node_modules/mdast-util-to-hast/lib/handlers/index.js","../node_modules/@ungap/structured-clone/esm/types.js","../node_modules/@ungap/structured-clone/esm/deserialize.js","../node_modules/@ungap/structured-clone/esm/serialize.js","../node_modules/@ungap/structured-clone/esm/index.js","../node_modules/mdast-util-to-hast/lib/footer.js","../node_modules/unist-util-is/lib/index.js","../node_modules/unist-util-visit-parents/lib/index.js","../node_modules/unist-util-visit/lib/index.js","../node_modules/mdast-util-to-hast/lib/state.js","../node_modules/mdast-util-to-hast/lib/index.js","../node_modules/remark-rehype/lib/index.js","../node_modules/bail/index.js","../node_modules/extend/index.js","../node_modules/is-plain-obj/index.js","../node_modules/trough/lib/index.js","../node_modules/vfile/lib/minpath.browser.js","../node_modules/vfile/lib/minproc.browser.js","../node_modules/vfile/lib/minurl.shared.js","../node_modules/vfile/lib/minurl.browser.js","../node_modules/vfile/lib/index.js","../node_modules/unified/lib/callable-instance.js","../node_modules/unified/lib/index.js","../node_modules/react-markdown/lib/index.js","../node_modules/hast-util-parse-selector/lib/index.js","../node_modules/hastscript/lib/create-h.js","../node_modules/hastscript/lib/svg-case-sensitive-tag-names.js","../node_modules/hastscript/lib/index.js","../node_modules/web-namespaces/index.js","../node_modules/hast-util-from-dom/lib/index.js","../node_modules/hast-util-from-html-isomorphic/lib/browser.js","../node_modules/unist-util-find-after/lib/index.js","../node_modules/hast-util-is-element/lib/index.js","../node_modules/hast-util-to-text/lib/index.js","../node_modules/katex/dist/katex.mjs","../node_modules/rehype-katex/lib/index.js","../node_modules/hast-util-sanitize/lib/schema.js","../node_modules/hast-util-sanitize/lib/index.js","../node_modules/rehype-sanitize/lib/index.js","../node_modules/ccount/index.js","../node_modules/mdast-util-find-and-replace/node_modules/escape-string-regexp/index.js","../node_modules/mdast-util-find-and-replace/lib/index.js","../node_modules/mdast-util-gfm-autolink-literal/lib/index.js","../node_modules/mdast-util-gfm-footnote/lib/index.js","../node_modules/mdast-util-gfm-strikethrough/lib/index.js","../node_modules/markdown-table/index.js","../node_modules/mdast-util-to-markdown/lib/handle/blockquote.js","../node_modules/mdast-util-to-markdown/lib/util/pattern-in-scope.js","../node_modules/mdast-util-to-markdown/lib/handle/break.js","../node_modules/longest-streak/index.js","../node_modules/mdast-util-to-markdown/lib/util/format-code-as-indented.js","../node_modules/mdast-util-to-markdown/lib/util/check-fence.js","../node_modules/mdast-util-to-markdown/lib/handle/code.js","../node_modules/mdast-util-to-markdown/lib/util/check-quote.js","../node_modules/mdast-util-to-markdown/lib/handle/definition.js","../node_modules/mdast-util-to-markdown/lib/util/check-emphasis.js","../node_modules/mdast-util-to-markdown/lib/util/encode-character-reference.js","../node_modules/mdast-util-to-markdown/lib/util/encode-info.js","../node_modules/mdast-util-to-markdown/lib/handle/emphasis.js","../node_modules/mdast-util-to-markdown/lib/util/format-heading-as-setext.js","../node_modules/mdast-util-to-markdown/lib/handle/heading.js","../node_modules/mdast-util-to-markdown/lib/handle/html.js","../node_modules/mdast-util-to-markdown/lib/handle/image.js","../node_modules/mdast-util-to-markdown/lib/handle/image-reference.js","../node_modules/mdast-util-to-markdown/lib/handle/inline-code.js","../node_modules/mdast-util-to-markdown/lib/util/format-link-as-autolink.js","../node_modules/mdast-util-to-markdown/lib/handle/link.js","../node_modules/mdast-util-to-markdown/lib/handle/link-reference.js","../node_modules/mdast-util-to-markdown/lib/util/check-bullet.js","../node_modules/mdast-util-to-markdown/lib/util/check-bullet-other.js","../node_modules/mdast-util-to-markdown/lib/util/check-bullet-ordered.js","../node_modules/mdast-util-to-markdown/lib/util/check-rule.js","../node_modules/mdast-util-to-markdown/lib/handle/list.js","../node_modules/mdast-util-to-markdown/lib/util/check-list-item-indent.js","../node_modules/mdast-util-to-markdown/lib/handle/list-item.js","../node_modules/mdast-util-to-markdown/lib/handle/paragraph.js","../node_modules/mdast-util-phrasing/lib/index.js","../node_modules/mdast-util-to-markdown/lib/handle/root.js","../node_modules/mdast-util-to-markdown/lib/util/check-strong.js","../node_modules/mdast-util-to-markdown/lib/handle/strong.js","../node_modules/mdast-util-to-markdown/lib/handle/text.js","../node_modules/mdast-util-to-markdown/lib/util/check-rule-repetition.js","../node_modules/mdast-util-to-markdown/lib/handle/thematic-break.js","../node_modules/mdast-util-to-markdown/lib/handle/index.js","../node_modules/mdast-util-gfm-table/lib/index.js","../node_modules/mdast-util-gfm-task-list-item/lib/index.js","../node_modules/mdast-util-gfm/lib/index.js","../node_modules/micromark-extension-gfm-autolink-literal/lib/syntax.js","../node_modules/micromark-extension-gfm-footnote/lib/syntax.js","../node_modules/micromark-extension-gfm-strikethrough/lib/syntax.js","../node_modules/micromark-extension-gfm-table/lib/edit-map.js","../node_modules/micromark-extension-gfm-table/lib/infer.js","../node_modules/micromark-extension-gfm-table/lib/syntax.js","../node_modules/micromark-extension-gfm-task-list-item/lib/syntax.js","../node_modules/micromark-extension-gfm/index.js","../node_modules/remark-gfm/lib/index.js","../node_modules/mdast-util-math/lib/index.js","../node_modules/micromark-extension-math/lib/math-flow.js","../node_modules/micromark-extension-math/lib/math-text.js","../node_modules/micromark-extension-math/lib/syntax.js","../node_modules/remark-math/lib/index.js","../src/ui/components/TypingEffect.tsx","../src/ui/components/MessageBubble.tsx","../src/ui/components/Suggestions.tsx","../src/ui/component/Chat.tsx","../src/ui/component/CommandPalette.tsx","../src/ui/component/Help.tsx","../src/ui/component/Review.tsx","../src/service/llmValidation.ts","../src/ui/component/Settings.tsx","../src/ui/component/Text.tsx","../src/ui/component/Tooltip.tsx","../src/ui/components/GoToExtrema.tsx","../src/ui/App.tsx","../src/maidr-component.tsx"],"sourcesContent":["/**\n * Represents the trend direction for candlestick data points.\n * Used across the application for audio palette selection and data representation.\n */\nexport type CandlestickTrend = 'Bull' | 'Bear' | 'Neutral';\n\n/**\n * Format function signature for axis values.\n * Takes a value (number or string) and returns a formatted string.\n *\n * @example\n * // Currency formatting\n * const currencyFormat: FormatFunction = (v) => `$${Number(v).toFixed(2)}`;\n *\n * @example\n * // Date formatting\n * const dateFormat: FormatFunction = (v) => new Date(v).toLocaleDateString();\n */\nexport type FormatFunction = (value: number | string) => string;\n\n/**\n * Supported format type specifiers for JSON/HTML API.\n */\nexport type FormatType = 'currency' | 'percent' | 'fixed' | 'number' | 'date' | 'scientific';\n\n/**\n * Configuration for formatting values on an axis.\n *\n * Two ways to specify formatting:\n * 1. `function` - Function body string (for custom logic)\n * 2. `type` - Format type specifier (for common patterns)\n *\n * @example\n * // Using function string\n * { \"function\": \"return `$${Number(value).toFixed(2)}`\" }\n *\n * @example\n * // Using type specifier\n * { \"type\": \"currency\", \"decimals\": 2 }\n */\nexport interface AxisFormat {\n  /**\n   * Function body string for custom formatting.\n   * The function receives `value` as parameter and must return a string.\n   *\n   * @example\n   * // Currency formatting\n   * { \"function\": \"return `$${Number(value).toFixed(2)}`\" }\n   *\n   * @example\n   * // Date formatting\n   * { \"function\": \"return new Date(value).toLocaleDateString('en-US')\" }\n   */\n  function?: string;\n\n  /**\n   * Format type specifier for common formatting patterns.\n   * Use with `decimals`, `currency`, `locale`, `dateOptions` for customization.\n   *\n   * @example\n   * { \"type\": \"currency\", \"currency\": \"USD\", \"decimals\": 2 }\n   * { \"type\": \"percent\", \"decimals\": 1 }\n   * { \"type\": \"date\", \"dateOptions\": { \"month\": \"short\", \"day\": \"numeric\" } }\n   */\n  type?: FormatType;\n\n  /**\n   * Number of decimal places for numeric formatters.\n   * Used with: currency, percent, fixed, number, scientific\n   * @default varies by type\n   */\n  decimals?: number;\n\n  /**\n   * ISO 4217 currency code for currency formatter.\n   * @default 'USD'\n   */\n  currency?: string;\n\n  /**\n   * BCP 47 locale string for locale-aware formatters.\n   * Used with: currency, number, date\n   * @default 'en-US'\n   */\n  locale?: string;\n\n  /**\n   * Options for Intl.DateTimeFormat when using date type.\n   *\n   * @example\n   * { \"month\": \"short\", \"day\": \"numeric\" } // \"Jan 15\"\n   * { \"year\": \"numeric\", \"month\": \"long\" } // \"January 2024\"\n   */\n  dateOptions?: Intl.DateTimeFormatOptions;\n}\n\n/**\n * Configuration for formatting values across all axes in a layer.\n */\nexport interface FormatConfig {\n  x?: AxisFormat;\n  y?: AxisFormat;\n  z?: AxisFormat;\n}\n\n/**\n * Configuration options for violin plot display.\n * Controls which summary statistics are shown in the violin box overlay.\n * Sent from the Python backend alongside violin_kde and violin_box layers.\n */\nexport interface ViolinOptions {\n  /** Show median line marker. Default: true */\n  showMedian?: boolean;\n  /** Show mean value marker. Default: false */\n  showMean?: boolean;\n  /** Show extrema (min/max) markers. Default: true */\n  showExtrema?: boolean;\n}\n\n/**\n * Data point for violin KDE (kernel density estimation) curves.\n * Library-agnostic — no SVG coordinates embedded in data.\n * The density field falls back to width if absent.\n */\nexport interface ViolinKdePoint {\n  /** Categorical label for the violin (e.g., \"setosa\") */\n  x: string | number;\n  /** Position along the density axis */\n  y: number;\n  /** KDE density value at this point. Falls back to `width` if absent. */\n  density?: number;\n  /** Half-width of the violin at this Y level (used as density fallback) */\n  width?: number;\n  /** SVG viewport x-coordinate for highlight positioning (provided by backend) */\n  svg_x?: number;\n  /** SVG viewport y-coordinate for highlight positioning (provided by backend) */\n  svg_y?: number;\n}\n\n/**\n * Root MAIDR data structure containing figure metadata and subplot grid.\n * This is the type for the `data` prop passed to the `<Maidr>` React component.\n *\n * @example\n * ```typescript\n * const data: Maidr = {\n *   id: 'my-chart',\n *   title: 'Sales by Quarter',\n *   subplots: [[{\n *     layers: [{\n *       id: '0',\n *       type: 'bar',\n *       axes: { x: 'Quarter', y: 'Revenue' },\n *       data: [{ x: 'Q1', y: 120 }, { x: 'Q2', y: 200 }],\n *     }],\n *   }]],\n * };\n * ```\n */\nexport interface Maidr {\n  /** Unique identifier for the chart. Used for DOM element IDs. */\n  id: string;\n  /** Chart title displayed in text descriptions. */\n  title?: string;\n  /** Chart subtitle. */\n  subtitle?: string;\n  /** Chart caption. */\n  caption?: string;\n  /**\n   * 2D grid of subplots. Each row is an array of subplots.\n   * For a single chart, use `[[{ layers: [...] }]]`.\n   */\n  subplots: MaidrSubplot[][];\n}\n\n/**\n * Subplot data structure containing optional legend and trace layers.\n * A subplot groups one or more layers (traces) that share the same coordinate space.\n *\n * @example\n * ```typescript\n * const subplot: MaidrSubplot = {\n *   layers: [\n *     { id: '0', type: 'bar', axes: { x: 'X', y: 'Y' }, data: [...] },\n *     { id: '1', type: 'line', axes: { x: 'X', y: 'Y' }, data: [...] },\n *   ],\n * };\n * ```\n */\nexport interface MaidrSubplot {\n  /** Legend labels for multi-series plots. */\n  legend?: string[];\n  /** CSS selector for the subplot container element. */\n  selector?: string;\n  /** Array of trace layers in this subplot. */\n  layers: MaidrLayer[];\n}\n\n/**\n * Data point for bar charts with x and y coordinates.\n */\nexport interface BarPoint {\n  x: string | number;\n  y: number | string;\n}\n\n/**\n * Data point for boxplots containing quartiles, min/max, and outliers.\n */\nexport interface BoxPoint {\n  z: string;\n  lowerOutliers: number[];\n  min: number;\n  q1: number;\n  q2: number;\n  q3: number;\n  max: number;\n  upperOutliers: number[];\n  /** Mean value for violin plots when mean display is enabled. */\n  mean?: number;\n}\n\n/**\n * DOM selectors for boxplot visual elements.\n */\nexport interface BoxSelector {\n  lowerOutliers: string[];\n  min: string;\n  iq: string;\n  q2: string;\n  max: string;\n  upperOutliers: string[];\n  /** CSS selector for mean marker element in violin plots. */\n  mean?: string;\n  /** Optional direct CSS selector for Q1 element (bypasses iq edge derivation). */\n  q1?: string;\n  /** Optional direct CSS selector for Q3 element (bypasses iq edge derivation). */\n  q3?: string;\n}\n\n/**\n * Data point for candlestick charts with OHLC values, volume, and trend information.\n */\nexport interface CandlestickPoint {\n  value: string;\n  open: number;\n  high: number;\n  low: number;\n  close: number;\n  /** Optional volume data. May be undefined when source (e.g., Google Charts) doesn't provide it. */\n  volume?: number;\n  trend: CandlestickTrend;\n  volatility: number;\n}\n\n/**\n * Data structure for heatmap charts with x/y labels and 2D point values.\n */\nexport interface HeatmapData {\n  x: string[];\n  y: string[];\n  points: number[][];\n}\n\n/**\n * Data point for histograms extending bar points with bin ranges.\n */\nexport interface HistogramPoint extends BarPoint {\n  xMin: number;\n  xMax: number;\n  yMin: number;\n  yMax: number;\n}\n\n/**\n * Data point for line charts with optional fill color for multi-series plots.\n */\nexport interface LinePoint {\n  x: number | string;\n  y: number;\n  z?: string;\n}\n\n/**\n * Data point for scatter plots with x and y coordinates.\n */\nexport interface ScatterPoint {\n  x: number;\n  y: number;\n}\n\n/**\n * Data point for segmented/grouped bar charts with fill color identifier.\n */\nexport interface SegmentedPoint extends BarPoint {\n  z: string;\n}\n\n/**\n * Data point for smooth/regression plots with data and SVG coordinate pairs.\n */\nexport interface SmoothPoint {\n  x: number;\n  y: number;\n  svg_x: number;\n  svg_y: number;\n}\n\n/**\n * Extended axis configuration that includes an optional label and grid navigation properties.\n * Used when an axis needs both a label and grid config (min, max, tickStep).\n *\n * @example\n * // axes.x as an object with grid config\n * axes: { x: { label: \"Sepal Length\", min: 4.3, max: 7.9, tickStep: 0.7 } }\n */\nexport interface AxisConfig {\n  label?: string;\n  min?: number;\n  max?: number;\n  tickStep?: number;\n}\n\n/**\n * Alternate grid configuration shape where grid properties are grouped by property name.\n * Supports `axes.min.x`, `axes.max.x`, `axes.tickStep.x` etc.\n *\n * @example\n * axes: { x: \"Sepal Length\", min: { x: 4.3, y: 2 }, max: { x: 7.9, y: 4.4 }, tickStep: { x: 0.7, y: 0.5 } }\n */\nexport interface AxisGridProperty {\n  x?: number;\n  y?: number;\n}\n\n/**\n * Chart orientation for bar and box plots.\n */\nexport enum Orientation {\n  VERTICAL = 'vert',\n  HORIZONTAL = 'horz',\n}\n\n/**\n * DOM selectors for candlestick chart visual elements.\n */\nexport interface CandlestickSelector {\n  body: string | string[];\n  wickHigh?: string | string[];\n  wickLow?: string | string[];\n  wick?: string | string[]; // single combined wick (high-to-low) line\n  open?: string | string[];\n  close?: string | string[];\n}\n\n/**\n * Layer/trace definition containing plot type, data, and rendering configuration.\n */\nexport interface MaidrLayer {\n  id: string;\n  type: TraceType;\n  title?: string;\n  selectors?: string | string[] | BoxSelector[] | CandlestickSelector;\n  orientation?: Orientation;\n  /**\n   * Optional DOM mapping hints. When provided, individual traces can opt-in\n   * to use these hints to map DOM elements to the internal row-major data grid\n   * without changing default behavior when omitted.\n   */\n  domMapping?: {\n    /**\n     * Specify DOM flattening order for grid-like traces.\n     * 'row' => row-major, 'column' => column-major.\n     */\n    order?: 'row' | 'column';\n    /**\n     * For segmented/dodged bars, control the per-column group/level iteration.\n     * 'forward' => iterate groups top-to-bottom (as previously domOrder='forward').\n     * 'reverse' => iterate bottom-to-top (default).\n     */\n    groupDirection?: 'forward' | 'reverse';\n    /**\n     * For boxplots, control the Q1/Q3 edge mapping for IQR box.\n     * 'forward' => Q1=bottom, Q3=top (default for vertical)\n     * 'reverse' => Q1=top, Q3=bottom (for Base R vertical boxplots)\n     */\n    iqrDirection?: 'forward' | 'reverse';\n  };\n  /**\n   * Axis configuration including labels, optional formatting, and grid navigation properties.\n   *\n   * Supports two shapes for grid config (both can coexist):\n   *\n   * **Format A** – per-axis objects (`axes.x.min`):\n   * ```json\n   * { \"axes\": { \"x\": { \"label\": \"Sepal Length\", \"min\": 4.3, \"max\": 7.9, \"tickStep\": 0.7 } } }\n   * ```\n   *\n   * **Format B** – grouped by property (`axes.min.x`):\n   * ```json\n   * { \"axes\": { \"x\": \"Sepal Length\", \"min\": { \"x\": 4.3, \"y\": 2 }, \"tickStep\": { \"x\": 0.7, \"y\": 0.5 } } }\n   * ```\n   *\n   * @example\n   * // Basic axis labels (no grid)\n   * axes: { x: \"Date\", y: \"Price\" }\n   *\n   * @example\n   * // With formatting\n   * axes: { x: \"Date\", y: \"Price\", format: { y: { type: \"currency\", decimals: 2 } } }\n   */\n  axes?: {\n    /** Axis label (string) or axis config object with label + grid properties. */\n    x?: string | AxisConfig;\n    /** Axis label (string) or axis config object with label + grid properties. */\n    y?: string | AxisConfig;\n    /** Z-axis label (string) or axis config object. Used for grouping/fill in multi-series plots. */\n    z?: string | AxisConfig;\n    /** Grouped grid property: `min: { x: 4.3, y: 2 }` */\n    min?: AxisGridProperty;\n    /** Grouped grid property: `max: { x: 7.9, y: 4.4 }` */\n    max?: AxisGridProperty;\n    /** Grouped grid property: `tickStep: { x: 0.7, y: 0.5 }` */\n    tickStep?: AxisGridProperty;\n    /**\n     * Optional formatting configuration for axis values.\n     * When provided, values displayed in text descriptions will be formatted.\n     *\n     * @example\n     * format: {\n     *   x: { function: \"return new Date(value).toLocaleDateString()\" },\n     *   y: { type: \"currency\", decimals: 2 }\n     * }\n     */\n    format?: FormatConfig;\n  };\n  /**\n   * Optional display configuration for violin plot layers (VIOLIN_KDE and VIOLIN_BOX).\n   * Controls which summary statistics are shown in the violin box overlay.\n   */\n  violinOptions?: ViolinOptions;\n  data:\n    | BarPoint[]\n    | BoxPoint[]\n    | CandlestickPoint[]\n    | HeatmapData\n    | HistogramPoint[]\n    | LinePoint[][]\n    | ScatterPoint[]\n    | SegmentedPoint[][]\n    | SmoothPoint[][]\n    | ViolinKdePoint[][];\n}\n\n/**\n * Enumeration of supported plot trace types.\n * Use these values for the `type` field in {@link MaidrLayer}.\n *\n * @example\n * ```typescript\n * import { TraceType } from 'maidr/react';\n * const layer = { id: '0', type: TraceType.BAR, ... };\n * // Or use the string value directly:\n * const layer2 = { id: '0', type: 'bar', ... };\n * ```\n */\nexport enum TraceType {\n  BAR = 'bar',\n  BOX = 'box',\n  CANDLESTICK = 'candlestick',\n  DODGED = 'dodged_bar',\n  HEATMAP = 'heat',\n  HISTOGRAM = 'hist',\n  LINE = 'line',\n  NORMALIZED = 'stacked_normalized_bar',\n  SCATTER = 'point',\n  SMOOTH = 'smooth',\n  STACKED = 'stacked_bar',\n  VIOLIN_BOX = 'violin_box',\n  VIOLIN_KDE = 'violin_kde',\n}\n","import type { BarPoint, LinePoint, ScatterPoint, SegmentedPoint, SmoothPoint } from '@type/grammar';\n\n/**\n * Interface for traces that support grid-based navigation.\n * Implemented by trace types that can divide their plot area into\n * navigable cells (e.g., ScatterTrace with grid config).\n */\nexport interface GridNavigable {\n  setGridMode: (enabled: boolean) => void;\n  supportsGridMode: () => boolean;\n  moveGridUp: () => boolean;\n  moveGridDown: () => boolean;\n  moveGridLeft: () => boolean;\n  moveGridRight: () => boolean;\n  getGridDimensions: () => { rows: number; cols: number } | null;\n  getGridPosition: () => { row: number; col: number } | null;\n  // Grid cell point navigation\n  isInCellMode: () => boolean;\n  enterGridCell: () => boolean;\n  exitGridCell: () => void;\n  moveCellPointLeft: () => boolean;\n  moveCellPointRight: () => boolean;\n}\n\n/**\n * Type guard to check if a plot supports grid navigation.\n */\nexport function isGridNavigable(plot: unknown): plot is GridNavigable {\n  return (\n    plot !== null\n    && typeof plot === 'object'\n    && 'supportsGridMode' in plot\n    && typeof (plot as GridNavigable).supportsGridMode === 'function'\n  );\n}\n\n/**\n * Union type for all point types that have an 'x' property\n */\nexport type PointWithX = BarPoint | LinePoint | ScatterPoint | SegmentedPoint | SmoothPoint;\n\n/**\n * Type for X values that can be extracted from points\n */\nexport type XValue = string | number;\n\n/**\n * Type for points array that can be used in navigation\n */\nexport type PointsArray = PointWithX[][] | PointWithX[];\n\n/**\n * Type for values array that can be used in navigation\n */\nexport type ValuesArray = (XValue | { x: XValue })[][];\n\n/**\n * Type guard to check if a value has an 'x' property\n */\nexport function hasXProperty(value: unknown): value is { x: XValue } {\n  return value !== null && typeof value === 'object' && 'x' in value;\n}\n\n/**\n * Type guard to check if a value is a valid X value\n */\nexport function isXValue(value: unknown): value is XValue {\n  return typeof value === 'string' || typeof value === 'number';\n}\n\n/**\n * Type guard to check if a point has an 'x' property\n */\nexport function isPointWithX(point: unknown): point is PointWithX {\n  return point !== null && typeof point === 'object' && 'x' in point;\n}\n","import type { Subplot, Trace } from '@model/plot';\nimport type { Disposable } from '@type/disposable';\nimport type { MovableDirection } from '@type/movable';\nimport type { PointWithX, ValuesArray, XValue } from '@type/navigation';\nimport type { LayerSwitchTraceState } from '@type/state';\nimport { Orientation } from '@type/grammar';\nimport { hasXProperty, isPointWithX, isXValue } from '@type/navigation';\n\n/**\n * NavigationService handles orientation-specific coordinate transformations\n * and navigation logic that was previously mixed into Core Model classes.\n *\n * This service encapsulates the business logic for translating between\n * UI coordinates (row, col) and model coordinates (pointIndex, segmentType)\n * based on data orientation, as well as X-value navigation across trace types.\n */\nexport class NavigationService implements Disposable {\n  /**\n   * Handle layer switching within a subplot. Encapsulates business logic for\n   * preserving positions, invoking trace-specific switch handling, and\n   * notifying observers about layer switches.\n   *\n   * @returns The newly active trace (may be the same as the previous one) or null if unavailable.\n   */\n  public stepTraceInSubplot(subplot: Subplot, direction: MovableDirection): Trace | null {\n    const currentTrace = subplot.activeTrace;\n    if (!currentTrace) {\n      return null;\n    }\n\n    // Switch to next/previous trace\n    const currentXValue = currentTrace.getCurrentXValue();\n    subplot.moveOnce(direction);\n    const newTrace = subplot.activeTrace;\n\n    if (!newTrace) {\n      return null;\n    }\n\n    if (newTrace.getId() === currentTrace.getId()) {\n      newTrace.notifyOutOfBounds();\n      subplot.notifyOutOfBounds();\n      return newTrace;\n    }\n\n    // Attempt Y-preservation: if both traces support Y values, preserve both X and Y\n    let positioned = false;\n    if (\n      typeof currentTrace.getCurrentYValue === 'function'\n      && typeof newTrace.moveToXAndYValue === 'function'\n    ) {\n      const currentYValue = currentTrace.getCurrentYValue();\n      if (currentYValue !== null && currentXValue !== null) {\n        positioned = newTrace.moveToXAndYValue(currentXValue, currentYValue);\n      }\n    }\n\n    // Default: preserve X value when changing layers\n    if (!positioned) {\n      newTrace.moveToXValue(currentXValue);\n    }\n\n    // Notify after positioning is complete\n    this.notifyLayerSwitch(subplot, newTrace);\n    return newTrace;\n  }\n\n  /**\n   * Compute normalized point index and segment type based on orientation\n   * @param row The row coordinate from UI/ViewModel\n   * @param col The column coordinate from UI/ViewModel\n   * @param orientation The data orientation\n   * @param sections Array of available section names (e.g., ['open', 'high', 'low', 'close'])\n   * @returns Object containing pointIndex and segmentType\n   */\n  public computeIndexAndSegment<T extends string>(\n    row: number,\n    col: number,\n    orientation: Orientation,\n    sections: readonly T[],\n  ): {\n    pointIndex: number;\n    segmentType: T;\n  } {\n    if (orientation === Orientation.HORIZONTAL) {\n      return {\n        pointIndex: row,\n        segmentType: sections[col],\n      };\n    } else {\n      return {\n        pointIndex: col,\n        segmentType: sections[row],\n      };\n    }\n  }\n\n  /**\n   * Compute visual coordinates for highlighting based on orientation\n   * @param pointIndex The data point index\n   * @param segmentPosition The segment position (e.g., dynamic sorted position)\n   * @param orientation The data orientation\n   * @returns Object containing row and col for visual highlighting\n   */\n  public computeVisualCoordinates(\n    pointIndex: number,\n    segmentPosition: number,\n    orientation: Orientation,\n  ): {\n    row: number;\n    col: number;\n  } {\n    if (orientation === Orientation.HORIZONTAL) {\n      return {\n        row: pointIndex,\n        col: segmentPosition,\n      };\n    } else {\n      return {\n        row: segmentPosition,\n        col: pointIndex,\n      };\n    }\n  }\n\n  /**\n   * Extract X value from points array based on current position.\n   * @param points - Array of points (single or multi-row)\n   * @param row - The row index\n   * @param col - The column index\n   * @returns The extracted X value or null if not found\n   */\n  public extractXValueFromPoints(points: PointWithX[][] | PointWithX[], row: number, col: number): XValue | null {\n    // Single-row traces (like BarTrace)\n    if (Array.isArray(points) && points.length === 1 && Array.isArray(points[0])) {\n      const point = points[0][col];\n      return this.extractXFromPoint(point);\n    }\n\n    // Multi-row traces (like LineTrace)\n    if (Array.isArray(points) && Array.isArray(points[row]) && points[row][col]) {\n      const point = points[row][col];\n      return this.extractXFromPoint(point);\n    }\n\n    return null;\n  }\n\n  /**\n   * Extract X value from values array based on current position.\n   * @param values - 2D array of values\n   * @param row - The row index\n   * @param col - The column index\n   * @returns The extracted X value or null if not found\n   */\n  public extractXValueFromValues(values: ValuesArray, row: number, col: number): XValue | null {\n    if (this.isValidPosition(values, row, col)) {\n      const value = values[row][col];\n      return this.extractXFromValue(value);\n    }\n    return null;\n  }\n\n  /**\n   * Navigate to a specific X value within the points array and invoke callback with new position.\n   * @param points - Array of points (single or multi-row)\n   * @param xValue - The target X value to navigate to\n   * @param moveToIndex - Callback function to execute when position is found\n   * @returns True if navigation was successful, false otherwise\n   */\n  public moveToXValueInPoints(\n    points: PointWithX[][] | PointWithX[],\n    xValue: XValue,\n    moveToIndex: (row: number, col: number) => void,\n  ): boolean {\n    // Single-row traces (like BarTrace)\n    if (Array.isArray(points) && points.length === 1 && Array.isArray(points[0])) {\n      const targetIndex = this.findPointIndexByX(points[0], xValue);\n      if (targetIndex !== -1) {\n        moveToIndex(0, targetIndex);\n        return true;\n      } else {\n        // Fallback: find nearest or categorical X\n        const nearestIndex = this.findNearestPointIndexByX(points[0], xValue);\n        if (nearestIndex !== -1) {\n          const _actualX = extractXValue(points[0][nearestIndex]);\n          if (typeof xValue === 'number' && typeof _actualX === 'number') {\n            moveToIndex(0, nearestIndex);\n            return true;\n          } else if (typeof xValue === 'string' && typeof _actualX === 'string') {\n            moveToIndex(0, nearestIndex);\n            return true;\n          }\n        }\n      }\n    }\n\n    // Multi-row traces (like LineTrace)\n    let bestRow = -1;\n    let bestCol = -1;\n    let bestDist = Number.POSITIVE_INFINITY;\n    let fallbackType: 'numeric' | 'categorical' | 'generic' | null = null;\n\n    if (Array.isArray(points)) {\n      for (let row = 0; row < points.length; row++) {\n        const rowPoints = points[row];\n        if (Array.isArray(rowPoints)) {\n          const colIndex = this.findPointIndexByX(rowPoints, xValue);\n          if (colIndex !== -1) {\n            moveToIndex(row, colIndex);\n            return true;\n          }\n          // Fallback: find nearest/categorical in this row\n          const nearestCol = this.findNearestPointIndexByX(rowPoints, xValue);\n          if (nearestCol !== -1) {\n            const _actualX = extractXValue(rowPoints[nearestCol]);\n            let dist = Number.POSITIVE_INFINITY;\n            if (typeof xValue === 'number' && typeof _actualX === 'number') {\n              dist = Math.abs(_actualX - xValue);\n              if (dist < bestDist) {\n                bestDist = dist;\n                bestRow = row;\n                bestCol = nearestCol;\n                fallbackType = 'numeric';\n              }\n            } else if (typeof xValue === 'string' && typeof _actualX === 'string') {\n              if (bestRow === -1) {\n                bestRow = row;\n                bestCol = nearestCol;\n                fallbackType = 'categorical';\n              }\n            } else if (bestRow === -1) {\n              bestRow = row;\n              bestCol = nearestCol;\n              fallbackType = 'generic';\n            }\n          }\n        }\n      }\n    }\n\n    if (bestRow !== -1 && bestCol !== -1) {\n      const rowPoints = points[bestRow];\n      let _actualX;\n      if (Array.isArray(rowPoints)) {\n        _actualX = extractXValue(rowPoints[bestCol]);\n      }\n      if (fallbackType !== null) {\n        moveToIndex(bestRow, bestCol);\n        return true;\n      }\n    }\n\n    return false;\n  }\n\n  /**\n   * Navigate to a specific X value within the values array and invoke callback with new position.\n   * @param values - 2D array of values\n   * @param xValue - The target X value to navigate to\n   * @param moveToIndex - Callback function to execute when position is found\n   * @returns True if navigation was successful, false otherwise\n   */\n  public moveToXValueInValues(\n    values: ValuesArray,\n    xValue: XValue,\n    moveToIndex: (row: number, col: number) => void,\n  ): boolean {\n    let bestRow = -1;\n    let bestCol = -1;\n    let bestDist = Number.POSITIVE_INFINITY;\n    let fallbackType: 'numeric' | 'categorical' | 'generic' | null = null;\n    for (let row = 0; row < values.length; row++) {\n      for (let col = 0; col < values[row].length; col++) {\n        const value = values[row][col];\n        const valueToCompare = this.extractXFromValue(value);\n        if (valueToCompare === xValue) {\n          moveToIndex(row, col);\n          return true;\n        }\n        // Fallback: find nearest/categorical\n        if (typeof xValue === 'number' && typeof valueToCompare === 'number') {\n          const dist = Math.abs(valueToCompare - xValue);\n          if (dist < bestDist) {\n            bestDist = dist;\n            bestRow = row;\n            bestCol = col;\n            fallbackType = 'numeric';\n          }\n        } else if (typeof xValue === 'string' && typeof valueToCompare === 'string') {\n          if (bestRow === -1) {\n            bestRow = row;\n            bestCol = col;\n            fallbackType = 'categorical';\n          }\n        } else if (bestRow === -1) {\n          bestRow = row;\n          bestCol = col;\n          fallbackType = 'generic';\n        }\n      }\n    }\n    if (bestRow !== -1 && bestCol !== -1) {\n      const _actualX = this.extractXFromValue(values[bestRow][bestCol]);\n      if (fallbackType === 'numeric') {\n        moveToIndex(bestRow, bestCol);\n        return true;\n      } else if (fallbackType === 'categorical') {\n        moveToIndex(bestRow, bestCol);\n        return true;\n      } else {\n        moveToIndex(bestRow, bestCol);\n        return true;\n      }\n    }\n    return false;\n  }\n\n  /**\n   * Extract X value from a point object using type guards.\n   * @param point - The point object to extract from\n   * @returns The X value or null if not found\n   */\n  private extractXFromPoint(point: unknown): XValue | null {\n    if (isPointWithX(point)) {\n      return point.x;\n    }\n    return null;\n  }\n\n  /**\n   * Extract X value from a generic value using type guards.\n   * @param value - The value to extract from\n   * @returns The X value or null if not found\n   */\n  private extractXFromValue(value: unknown): XValue | null {\n    if (hasXProperty(value)) {\n      return value.x;\n    }\n    if (isXValue(value)) {\n      return value;\n    }\n    return null;\n  }\n\n  /**\n   * Find the index of a point with the specified X value.\n   * @param points - Array of points to search\n   * @param xValue - The X value to find\n   * @returns The index of the matching point or -1 if not found\n   */\n  private findPointIndexByX(points: PointWithX[], xValue: XValue): number {\n    return points.findIndex(point => point.x === xValue);\n  }\n\n  /**\n   * Validate that the specified position exists within the values array bounds.\n   * @param values - 2D array of values\n   * @param row - The row index to validate\n   * @param col - The column index to validate\n   * @returns True if position is valid, false otherwise\n   */\n  private isValidPosition(values: ValuesArray, row: number, col: number): boolean {\n    return row >= 0 && row < values.length\n      && col >= 0 && col < values[row].length;\n  }\n\n  /**\n   * Find the nearest point index by X value, handling both numeric and categorical data types.\n   * @param points - Array of points to search\n   * @param xValue - The target X value\n   * @returns The index of the nearest point or -1 if not found\n   */\n  private findNearestPointIndexByX(points: PointWithX[], xValue: XValue): number {\n    if (typeof xValue === 'number') {\n      let bestIdx = -1;\n      let bestDist = Number.POSITIVE_INFINITY;\n      for (let i = 0; i < points.length; i++) {\n        const px = extractXValue(points[i]);\n        if (typeof px === 'number') {\n          const dist = Math.abs(px - xValue);\n          if (dist < bestDist) {\n            bestDist = dist;\n            bestIdx = i;\n          }\n        } else if (typeof px === 'string') {\n          const pxNum = Number(px);\n          if (!Number.isNaN(pxNum)) {\n            const dist = Math.abs(pxNum - xValue);\n            if (dist < bestDist) {\n              bestDist = dist;\n              bestIdx = i;\n            }\n          }\n        }\n      }\n      if (bestIdx !== -1) {\n        const _actualX = extractXValue(points[bestIdx]);\n        return bestIdx;\n      }\n    } else if (typeof xValue === 'string') {\n      for (let i = 0; i < points.length; i++) {\n        const px = extractXValue(points[i]);\n        if (px === xValue) {\n          return i;\n        }\n      }\n      const xValueNum = Number(xValue);\n      if (!Number.isNaN(xValueNum)) {\n        let bestIdx = -1;\n        let bestDist = Number.POSITIVE_INFINITY;\n        for (let i = 0; i < points.length; i++) {\n          const px = extractXValue(points[i]);\n          if (typeof px === 'number') {\n            const dist = Math.abs(px - xValueNum);\n            if (dist < bestDist) {\n              bestDist = dist;\n              bestIdx = i;\n            }\n          } else if (typeof px === 'string') {\n            const pxNum = Number(px);\n            if (!Number.isNaN(pxNum)) {\n              const dist = Math.abs(pxNum - xValueNum);\n              if (dist < bestDist) {\n                bestDist = dist;\n                bestIdx = i;\n              }\n            }\n          }\n        }\n        if (bestIdx !== -1) {\n          const _actualX = extractXValue(points[bestIdx]);\n          return bestIdx;\n        }\n      }\n      for (let i = 0; i < points.length; i++) {\n        const px = extractXValue(points[i]);\n        if (typeof px === 'string') {\n          return i;\n        }\n      }\n    }\n    if (points.length > 0) {\n      const _actualX = extractXValue(points[0]);\n      return 0;\n    }\n    return -1;\n  }\n\n  /**\n   * Cleanup method to dispose of service resources.\n   */\n  public dispose(): void {\n    // Currently no resources to clean up\n    // This method is implemented for future extensibility\n  }\n\n  private notifyLayerSwitch(subplot: Subplot, trace: Trace): void {\n    if (!trace.state.empty) {\n      const index = subplot.getRow() + 1;\n      const size = subplot.getSize();\n      const state: LayerSwitchTraceState = {\n        ...trace.state,\n        isLayerSwitch: true,\n        index,\n        size,\n      };\n      trace.notifyObserversWithState(state);\n    } else {\n      trace.notifyStateUpdate();\n    }\n  }\n}\n\n/**\n * Type guard to check if a point is a bar chart point with x and y coordinates.\n * @param point - The point to check\n * @returns True if the point is a valid bar point\n */\nfunction isBarPoint(point: any): point is { x: string | number; y: string | number } {\n  return point && typeof point === 'object' && 'x' in point && 'y' in point;\n}\n\n/**\n * Type guard to check if a point is a line chart point with numeric x and y coordinates.\n * @param point - The point to check\n * @returns True if the point is a valid line point\n */\nfunction isLinePoint(point: any): point is { x: number; y: number; z?: string } {\n  return point && typeof point === 'object' && typeof point.x === 'number' && typeof point.y === 'number';\n}\n\n/**\n * Type guard to check if a point is a histogram point with x range (xMin, xMax).\n * @param point - The point to check\n * @returns True if the point is a valid histogram point\n */\nfunction isHistogramPoint(point: any): point is { x: number; y: number; xMin: number; xMax: number } {\n  return point && typeof point === 'object' && 'xMin' in point && 'xMax' in point;\n}\n\n/**\n * Type guard to check if a point is a segmented chart point with x, y, and optional z.\n * @param point - The point to check\n * @returns True if the point is a valid segmented point\n */\nfunction isSegmentedPoint(point: any): point is { x: string | number; y: number; z?: string } {\n  return point && typeof point === 'object' && 'x' in point && 'y' in point;\n}\n\n/**\n * Type guard to check if a point is a smooth plot point with numeric x and y coordinates.\n * @param point - The point to check\n * @returns True if the point is a valid smooth point\n */\nfunction isSmoothPoint(point: any): point is { x: number; y: number } {\n  return point && typeof point === 'object' && typeof point.x === 'number' && typeof point.y === 'number';\n}\n\n/**\n * Type guard to check if a point is a candlestick point with a value property.\n * @param point - The point to check\n * @returns True if the point is a valid candlestick point\n */\nfunction isCandlestickPoint(point: any): point is { value: number | string } {\n  return point && typeof point === 'object' && 'value' in point;\n}\n\n/**\n * Centralized X extraction for all known point types\n * @param point The point object\n * @returns The X value or null if not found\n */\nfunction extractXValue(point: any): XValue | null {\n  if (!point)\n    return null;\n  if (isBarPoint(point) || isLinePoint(point) || isSegmentedPoint(point) || isSmoothPoint(point)) {\n    return point.x;\n  }\n  if (isHistogramPoint(point)) {\n    return point.x;\n  }\n  if (isCandlestickPoint(point)) {\n    return point.value;\n  }\n  // Add more cases as needed\n  return null;\n}\n","import type { Keymap } from '@service/keybinding';\nimport type { Disposable } from './disposable';\n\n/**\n * Configuration for a single keyboard binding entry.\n */\nexport interface KeybindingEntry {\n  /** The hotkey string (e.g., 's', 'ctrl+up', 'shift+/') */\n  hotkey: string;\n  /** Human-readable description for the help menu */\n  description: string;\n  /** Override the key display in help menu (e.g., 'cmd + up' instead of 'cmd+up') */\n  helpKey?: string;\n  /** Whether to show this entry in the help menu (default: true) */\n  showInHelp?: boolean;\n}\n\n/**\n * Standard DOM event types used throughout the application.\n */\nexport enum DomEventType {\n  CLICK = 'click',\n  DOM_LOADED = 'DOMContentLoaded',\n  FOCUS_IN = 'focusin',\n  FOCUS_OUT = 'focusout',\n  MOUSE_ENTER = 'mouseenter',\n  MOUSE_LEAVE = 'mouseleave',\n  MOUSE_MOVE = 'mousemove',\n  SELECTION_CHANGE = 'selectionchange',\n  VISIBILITY_CHANGE = 'visibilitychange',\n}\n\n/**\n * Status of asynchronous operations like API requests.\n */\nexport type Status\n  = | 'PENDING'\n    | 'SUCCESS'\n    | 'FAILED';\n\n/**\n * Application scopes that define different keyboard navigation contexts and UI modes.\n */\nexport enum Scope {\n  BRAILLE = 'BRAILLE',\n  CHAT = 'CHAT',\n  COMMAND_PALETTE = 'COMMAND_PALETTE',\n  GO_TO_EXTREMA = 'GO_TO_EXTREMA',\n  GRID_CELL = 'GRID_CELL',\n  HELP = 'HELP',\n  FIGURE_LABEL = 'FIGURE_LABEL',\n  SUBPLOT = 'SUBPLOT',\n  TRACE = 'TRACE',\n  TRACE_LABEL = 'TRACE_LABEL',\n  REVIEW = 'REVIEW',\n  SETTINGS = 'SETTINGS',\n}\n\n/**\n * Focusable scopes excluding label-only scopes that cannot receive keyboard focus.\n */\nexport type Focus = Exclude<Scope, Scope.FIGURE_LABEL | Scope.TRACE_LABEL>;\n\n/**\n * Type representing valid keyboard shortcut keys for a given scope.\n */\nexport type Keys = keyof Keymap[Scope];\n\n/**\n * Event subscription function that returns a disposable for cleanup.\n */\nexport type Event<T> = (listener: (e: T) => any) => Disposable;\n\n/**\n * Generic event emitter that manages listeners and fires events to subscribers.\n */\nexport class Emitter<T> {\n  private readonly listeners: Set<(event: T) => void>;\n\n  public constructor() {\n    this.listeners = new Set();\n  }\n\n  public dispose(): void {\n    this.listeners.clear();\n  }\n\n  public event: Event<T> = (listener: (e: T) => any): Disposable => {\n    this.listeners.add(listener);\n    return {\n      dispose: () => this.listeners.delete(listener),\n    };\n  };\n\n  public fire(event: T): void {\n    for (const listener of this.listeners) {\n      listener(event);\n    }\n  }\n}\n","/**\n * Abstract utility class containing constant values used throughout the application.\n */\nexport abstract class Constant {\n  private constructor() { /* Prevent instantiation */ }\n\n  // HTML elements.\n  /** HTML article element tag name */\n  static readonly ARTICLE = 'article';\n  /** HTML div element tag name */\n  static readonly DIV = 'div';\n  /** HTML figure element tag name */\n  static readonly FIGURE = 'figure';\n  /** HTML img element tag name */\n  static readonly IMAGE = 'img';\n  /** HTML input element tag name */\n  static readonly INPUT = 'input';\n  static readonly STYLE = 'style';\n  /** HTML textarea element tag name */\n  static readonly TEXT_AREA = 'textarea';\n\n  // HTML IDs.\n  /** ID for the braille textarea element */\n  static readonly BRAILLE_TEXT_AREA = 'maidr-braille-textarea';\n  /** ID for the main MAIDR article container */\n  static readonly MAIDR_ARTICLE = 'maidr-article';\n  /** ID for the MAIDR figure container */\n  static readonly MAIDR_FIGURE = 'maidr-figure';\n  /** ID for the MAIDR highlight element */\n  static readonly MAIDR_HIGHLIGHT = 'maidr-highlight';\n  /** ID for the React component container */\n  static readonly REACT_CONTAINER = 'maidr-react-container';\n  /** ID for the review input element */\n  static readonly REVIEW_INPUT = 'maidr-review-input';\n  /** ID for the text content container */\n  static readonly TEXT_CONTAINER = 'maidr-text-container';\n  /** ID for the instruction text element */\n  static readonly MAIDR_INSTRUCTION = 'maidr-instruction';\n  /** ID for the rotor navigation area */\n  static readonly ROTOR_AREA = 'maidr-rotor-area';\n\n  // CSS classes.\n  /** CSS class for screen reader only content */\n  static readonly SR_ONLY_CLASS = 'maidr-sr-only';\n\n  // HTML attributes.\n  /** ARIA label attribute name */\n  static readonly ARIA_LABEL = 'aria-label';\n  /** SVG circle x-coordinate attribute */\n  static readonly CIRCLE_X = 'cx';\n  /** SVG circle y-coordinate attribute */\n  static readonly CIRCLE_Y = 'cy';\n  /** SVG path data attribute */\n  static readonly D = 'd';\n  /** SVG fill attribute */\n  static readonly FILL = 'fill';\n  static readonly MARGIN = 'margin';\n  /** SVG points attribute for polygons */\n  static readonly POINTS = 'points';\n  /** SVG circle radius attribute */\n  static readonly RADIUS = 'r';\n  /** ARIA role attribute */\n  static readonly ROLE = 'role';\n  /** SVG stroke color attribute */\n  static readonly STROKE = 'stroke';\n  /** SVG stroke width attribute */\n  static readonly STROKE_WIDTH = 'stroke-width';\n  /** HTML title attribute */\n  static readonly TITLE = 'title';\n  /** SVG visibility attribute */\n  static readonly VISIBILITY = 'visibility';\n  /** SVG line x1 coordinate attribute */\n  static readonly X1 = 'x1';\n  /** SVG line x2 coordinate attribute */\n  static readonly X2 = 'x2';\n  /** SVG line y1 coordinate attribute */\n  static readonly Y1 = 'y1';\n  /** SVG line y2 coordinate attribute */\n  static readonly Y2 = 'y2';\n\n  // MAIDR Terms\n  /** MAIDR subplot identifier */\n  static readonly MAIDR_SUBPLOT = 'subplot';\n  /** MAIDR attribute name */\n  static readonly MAIDR = 'maidr';\n  /** CSS selector for elements whose `maidr` attribute contains JSON (starts with '{') */\n  static readonly MAIDR_JSON_SELECTOR = '[maidr^=\"{\"]';\n  // Attribute values.\n  /** DOM insertion position after the element */\n  static readonly AFTER_END = 'afterend';\n  /** ARIA application role value */\n  static readonly APPLICATION = 'application';\n  /** Text string for 'are' with spaces */\n  static readonly ARE = ' are ';\n  /** SVG circle element tag name */\n  static readonly CIRCLE = 'circle';\n  /** Close bracket character */\n  static readonly CLOSE_BRACKET = ']';\n  /** Comma character */\n  static readonly COMMA = ',';\n  /** Comma followed by space */\n  static readonly COMMA_SPACE = ', ';\n  /** Empty string constant */\n  static readonly EMPTY = '';\n  /** CSS visibility hidden value */\n  static readonly HIDDEN = 'hidden';\n  /** Text string for 'is' with spaces */\n  static readonly IS = ' is ';\n  /** SVG line element tag name */\n  static readonly LINE = 'line';\n  /** MAIDR data attribute identifier */\n  static readonly MAIDR_DATA = 'maidr-data';\n  /** Default highlight color in hex format */\n  static readonly MAIDR_HIGHLIGHT_COLOR = '#BADA55';\n  /** Newline character */\n  static readonly NEW_LINE = '\\n';\n  /** Open bracket character */\n  static readonly OPEN_BRACKET = '[';\n  /** SVG polyline element tag name */\n  static readonly POLYLINE = 'polyline';\n  /** Space character */\n  static readonly SPACE = ' ';\n  /** Text string for 'through' with spaces */\n  static readonly THROUGH = ' through ';\n  /** CSS transparent color value */\n  static readonly TRANSPARENT = 'transparent';\n  /** CSS visibility visible value */\n  static readonly VISIBLE = 'visible';\n  /** X-axis coordinate identifier */\n  static readonly X = 'x';\n  /** Y-axis coordinate identifier */\n  static readonly Y = 'y';\n\n  // Highlight values\n  /** Base color for highlight contrast calculations (white) */\n  static readonly HIGHLIGHT_BASE_COLOR = { r: 255, g: 255, b: 255 };\n  /** Minimum contrast ratio for highlight visibility */\n  static readonly HIGHLIGHT_CONTRAST_RATIO = 3.0;\n  /** Color adjustment ratio for creating highlights */\n  static readonly HIGHLIGHT_COLOR_RATIO = 0.6;\n  /** Maximum RGB color value */\n  static readonly HIGHLIGHT_MAX_COLOR = 255;\n\n  // rotor mode values\n  /** Rotor mode for navigating to higher values */\n  static readonly HIGHER_VALUE_MODE = 'HIGHER VALUE NAVIGATION';\n  /** Rotor mode for navigating to lower values */\n  static readonly LOWER_VALUE_MODE = 'LOWER VALUE NAVIGATION';\n  /** Rotor mode for navigating data points */\n  static readonly DATA_MODE = 'DATA POINT NAVIGATION';\n  static readonly ROW_COL_MODE = 'ROW AND COLUMN NAVIGATION';\n  /** Rotor mode for navigating grid cells in scatter plots */\n  static readonly GRID_MODE = 'GRID NAVIGATION';\n}\n","/**\n * Generic stack data structure implementation with LIFO (Last In, First Out) behavior.\n * @template T - The type of elements stored in the stack\n */\nexport class Stack<T> {\n  private readonly items: T[];\n\n  /**\n   * Creates a new empty stack.\n   */\n  public constructor() {\n    this.items = new Array<T>();\n  }\n\n  /**\n   * Adds an item to the top of the stack.\n   * @param item - The item to push onto the stack\n   */\n  public push(item: T): void {\n    this.items.push(item);\n  }\n\n  /**\n   * Removes and returns the top item from the stack.\n   * @returns The removed item, or undefined if the stack is empty\n   */\n  public pop(): T | undefined {\n    return this.items.pop();\n  }\n\n  /**\n   * Returns the top item without removing it from the stack.\n   * @returns The top item, or undefined if the stack is empty\n   */\n  public peek(): T | undefined {\n    return this.items[this.items.length - 1];\n  }\n\n  /**\n   * Removes the last occurrence of a specific element from the stack.\n   * @param element - The element to remove\n   * @param deleteCount - Number of elements to delete (default: 1)\n   * @returns True if the element was found and removed, false otherwise\n   */\n  public removeLast(element: T, deleteCount = 1): boolean {\n    const index = this.items.lastIndexOf(element);\n    if (index !== -1) {\n      this.items.splice(index, deleteCount);\n      return true;\n    } else {\n      return false;\n    }\n  }\n\n  /**\n   * Checks if the stack is empty.\n   * @returns True if the stack contains no items, false otherwise\n   */\n  public isEmpty(): boolean {\n    return this.items.length === 0;\n  }\n\n  /**\n   * Returns the number of items in the stack.\n   * @returns The count of items currently in the stack\n   */\n  public size(): number {\n    return this.items.length;\n  }\n\n  /**\n   * Removes all items from the stack.\n   */\n  public clear(): void {\n    this.items.length = 0;\n  }\n}\n","/**! \n * hotkeys-js v3.13.10 \n * A simple micro-library for defining and dispatching keyboard shortcuts. It has no dependencies. \n * \n * Copyright (c) 2025 kenny wong <wowohoo@qq.com> \n * https://github.com/jaywcjlove/hotkeys-js.git \n * \n * @website: https://jaywcjlove.github.io/hotkeys-js\n \n * Licensed under the MIT license \n */\n\nconst isff = typeof navigator !== 'undefined' ? navigator.userAgent.toLowerCase().indexOf('firefox') > 0 : false;\n\n// 绑定事件\nfunction addEvent(object, event, method, useCapture) {\n  if (object.addEventListener) {\n    object.addEventListener(event, method, useCapture);\n  } else if (object.attachEvent) {\n    object.attachEvent(\"on\".concat(event), method);\n  }\n}\nfunction removeEvent(object, event, method, useCapture) {\n  if (object.removeEventListener) {\n    object.removeEventListener(event, method, useCapture);\n  } else if (object.detachEvent) {\n    object.detachEvent(\"on\".concat(event), method);\n  }\n}\n\n// 修饰键转换成对应的键码\nfunction getMods(modifier, key) {\n  const mods = key.slice(0, key.length - 1);\n  for (let i = 0; i < mods.length; i++) mods[i] = modifier[mods[i].toLowerCase()];\n  return mods;\n}\n\n// 处理传的key字符串转换成数组\nfunction getKeys(key) {\n  if (typeof key !== 'string') key = '';\n  key = key.replace(/\\s/g, ''); // 匹配任何空白字符,包括空格、制表符、换页符等等\n  const keys = key.split(','); // 同时设置多个快捷键，以','分割\n  let index = keys.lastIndexOf('');\n\n  // 快捷键可能包含','，需特殊处理\n  for (; index >= 0;) {\n    keys[index - 1] += ',';\n    keys.splice(index, 1);\n    index = keys.lastIndexOf('');\n  }\n  return keys;\n}\n\n// 比较修饰键的数组\nfunction compareArray(a1, a2) {\n  const arr1 = a1.length >= a2.length ? a1 : a2;\n  const arr2 = a1.length >= a2.length ? a2 : a1;\n  let isIndex = true;\n  for (let i = 0; i < arr1.length; i++) {\n    if (arr2.indexOf(arr1[i]) === -1) isIndex = false;\n  }\n  return isIndex;\n}\n\n// Special Keys\nconst _keyMap = {\n  backspace: 8,\n  '⌫': 8,\n  tab: 9,\n  clear: 12,\n  enter: 13,\n  '↩': 13,\n  return: 13,\n  esc: 27,\n  escape: 27,\n  space: 32,\n  left: 37,\n  up: 38,\n  right: 39,\n  down: 40,\n  del: 46,\n  delete: 46,\n  ins: 45,\n  insert: 45,\n  home: 36,\n  end: 35,\n  pageup: 33,\n  pagedown: 34,\n  capslock: 20,\n  num_0: 96,\n  num_1: 97,\n  num_2: 98,\n  num_3: 99,\n  num_4: 100,\n  num_5: 101,\n  num_6: 102,\n  num_7: 103,\n  num_8: 104,\n  num_9: 105,\n  num_multiply: 106,\n  num_add: 107,\n  num_enter: 108,\n  num_subtract: 109,\n  num_decimal: 110,\n  num_divide: 111,\n  '⇪': 20,\n  ',': 188,\n  '.': 190,\n  '/': 191,\n  '`': 192,\n  '-': isff ? 173 : 189,\n  '=': isff ? 61 : 187,\n  ';': isff ? 59 : 186,\n  '\\'': 222,\n  '[': 219,\n  ']': 221,\n  '\\\\': 220\n};\n\n// Modifier Keys\nconst _modifier = {\n  // shiftKey\n  '⇧': 16,\n  shift: 16,\n  // altKey\n  '⌥': 18,\n  alt: 18,\n  option: 18,\n  // ctrlKey\n  '⌃': 17,\n  ctrl: 17,\n  control: 17,\n  // metaKey\n  '⌘': 91,\n  cmd: 91,\n  command: 91\n};\nconst modifierMap = {\n  16: 'shiftKey',\n  18: 'altKey',\n  17: 'ctrlKey',\n  91: 'metaKey',\n  shiftKey: 16,\n  ctrlKey: 17,\n  altKey: 18,\n  metaKey: 91\n};\nconst _mods = {\n  16: false,\n  18: false,\n  17: false,\n  91: false\n};\nconst _handlers = {};\n\n// F1~F12 special key\nfor (let k = 1; k < 20; k++) {\n  _keyMap[\"f\".concat(k)] = 111 + k;\n}\n\nlet _downKeys = []; // 记录摁下的绑定键\nlet winListendFocus = null; // window是否已经监听了focus事件\nlet _scope = 'all'; // 默认热键范围\nconst elementEventMap = new Map(); // 已绑定事件的节点记录\n\n// 返回键码\nconst code = x => _keyMap[x.toLowerCase()] || _modifier[x.toLowerCase()] || x.toUpperCase().charCodeAt(0);\nconst getKey = x => Object.keys(_keyMap).find(k => _keyMap[k] === x);\nconst getModifier = x => Object.keys(_modifier).find(k => _modifier[k] === x);\n\n// 设置获取当前范围（默认为'所有'）\nfunction setScope(scope) {\n  _scope = scope || 'all';\n}\n// 获取当前范围\nfunction getScope() {\n  return _scope || 'all';\n}\n// 获取摁下绑定键的键值\nfunction getPressedKeyCodes() {\n  return _downKeys.slice(0);\n}\nfunction getPressedKeyString() {\n  return _downKeys.map(c => getKey(c) || getModifier(c) || String.fromCharCode(c));\n}\nfunction getAllKeyCodes() {\n  const result = [];\n  Object.keys(_handlers).forEach(k => {\n    _handlers[k].forEach(_ref => {\n      let {\n        key,\n        scope,\n        mods,\n        shortcut\n      } = _ref;\n      result.push({\n        scope,\n        shortcut,\n        mods,\n        keys: key.split('+').map(v => code(v))\n      });\n    });\n  });\n  return result;\n}\n\n// 表单控件控件判断 返回 Boolean\n// hotkey is effective only when filter return true\nfunction filter(event) {\n  const target = event.target || event.srcElement;\n  const {\n    tagName\n  } = target;\n  let flag = true;\n  const isInput = tagName === 'INPUT' && !['checkbox', 'radio', 'range', 'button', 'file', 'reset', 'submit', 'color'].includes(target.type);\n  // ignore: isContentEditable === 'true', <input> and <textarea> when readOnly state is false, <select>\n  if (target.isContentEditable || (isInput || tagName === 'TEXTAREA' || tagName === 'SELECT') && !target.readOnly) {\n    flag = false;\n  }\n  return flag;\n}\n\n// 判断摁下的键是否为某个键，返回true或者false\nfunction isPressed(keyCode) {\n  if (typeof keyCode === 'string') {\n    keyCode = code(keyCode); // 转换成键码\n  }\n  return _downKeys.indexOf(keyCode) !== -1;\n}\n\n// 循环删除handlers中的所有 scope(范围)\nfunction deleteScope(scope, newScope) {\n  let handlers;\n  let i;\n\n  // 没有指定scope，获取scope\n  if (!scope) scope = getScope();\n  for (const key in _handlers) {\n    if (Object.prototype.hasOwnProperty.call(_handlers, key)) {\n      handlers = _handlers[key];\n      for (i = 0; i < handlers.length;) {\n        if (handlers[i].scope === scope) {\n          const deleteItems = handlers.splice(i, 1);\n          deleteItems.forEach(_ref2 => {\n            let {\n              element\n            } = _ref2;\n            return removeKeyEvent(element);\n          });\n        } else {\n          i++;\n        }\n      }\n    }\n  }\n\n  // 如果scope被删除，将scope重置为all\n  if (getScope() === scope) setScope(newScope || 'all');\n}\n\n// 清除修饰键\nfunction clearModifier(event) {\n  let key = event.keyCode || event.which || event.charCode;\n  const i = _downKeys.indexOf(key);\n\n  // 从列表中清除按压过的键\n  if (i >= 0) {\n    _downKeys.splice(i, 1);\n  }\n  // 特殊处理 cmmand 键，在 cmmand 组合快捷键 keyup 只执行一次的问题\n  if (event.key && event.key.toLowerCase() === 'meta') {\n    _downKeys.splice(0, _downKeys.length);\n  }\n\n  // 修饰键 shiftKey altKey ctrlKey (command||metaKey) 清除\n  if (key === 93 || key === 224) key = 91;\n  if (key in _mods) {\n    _mods[key] = false;\n\n    // 将修饰键重置为false\n    for (const k in _modifier) if (_modifier[k] === key) hotkeys[k] = false;\n  }\n}\nfunction unbind(keysInfo) {\n  // unbind(), unbind all keys\n  if (typeof keysInfo === 'undefined') {\n    Object.keys(_handlers).forEach(key => {\n      Array.isArray(_handlers[key]) && _handlers[key].forEach(info => eachUnbind(info));\n      delete _handlers[key];\n    });\n    removeKeyEvent(null);\n  } else if (Array.isArray(keysInfo)) {\n    // support like : unbind([{key: 'ctrl+a', scope: 's1'}, {key: 'ctrl-a', scope: 's2', splitKey: '-'}])\n    keysInfo.forEach(info => {\n      if (info.key) eachUnbind(info);\n    });\n  } else if (typeof keysInfo === 'object') {\n    // support like unbind({key: 'ctrl+a, ctrl+b', scope:'abc'})\n    if (keysInfo.key) eachUnbind(keysInfo);\n  } else if (typeof keysInfo === 'string') {\n    for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n      args[_key - 1] = arguments[_key];\n    }\n    // support old method\n    // eslint-disable-line\n    let [scope, method] = args;\n    if (typeof scope === 'function') {\n      method = scope;\n      scope = '';\n    }\n    eachUnbind({\n      key: keysInfo,\n      scope,\n      method,\n      splitKey: '+'\n    });\n  }\n}\n\n// 解除绑定某个范围的快捷键\nconst eachUnbind = _ref3 => {\n  let {\n    key,\n    scope,\n    method,\n    splitKey = '+'\n  } = _ref3;\n  const multipleKeys = getKeys(key);\n  multipleKeys.forEach(originKey => {\n    const unbindKeys = originKey.split(splitKey);\n    const len = unbindKeys.length;\n    const lastKey = unbindKeys[len - 1];\n    const keyCode = lastKey === '*' ? '*' : code(lastKey);\n    if (!_handlers[keyCode]) return;\n    // 判断是否传入范围，没有就获取范围\n    if (!scope) scope = getScope();\n    const mods = len > 1 ? getMods(_modifier, unbindKeys) : [];\n    const unbindElements = [];\n    _handlers[keyCode] = _handlers[keyCode].filter(record => {\n      // 通过函数判断，是否解除绑定，函数相等直接返回\n      const isMatchingMethod = method ? record.method === method : true;\n      const isUnbind = isMatchingMethod && record.scope === scope && compareArray(record.mods, mods);\n      if (isUnbind) unbindElements.push(record.element);\n      return !isUnbind;\n    });\n    unbindElements.forEach(element => removeKeyEvent(element));\n  });\n};\n\n// 对监听对应快捷键的回调函数进行处理\nfunction eventHandler(event, handler, scope, element) {\n  if (handler.element !== element) {\n    return;\n  }\n  let modifiersMatch;\n\n  // 看它是否在当前范围\n  if (handler.scope === scope || handler.scope === 'all') {\n    // 检查是否匹配修饰符（如果有返回true）\n    modifiersMatch = handler.mods.length > 0;\n    for (const y in _mods) {\n      if (Object.prototype.hasOwnProperty.call(_mods, y)) {\n        if (!_mods[y] && handler.mods.indexOf(+y) > -1 || _mods[y] && handler.mods.indexOf(+y) === -1) {\n          modifiersMatch = false;\n        }\n      }\n    }\n\n    // 调用处理程序，如果是修饰键不做处理\n    if (handler.mods.length === 0 && !_mods[16] && !_mods[18] && !_mods[17] && !_mods[91] || modifiersMatch || handler.shortcut === '*') {\n      handler.keys = [];\n      handler.keys = handler.keys.concat(_downKeys);\n      if (handler.method(event, handler) === false) {\n        if (event.preventDefault) event.preventDefault();else event.returnValue = false;\n        if (event.stopPropagation) event.stopPropagation();\n        if (event.cancelBubble) event.cancelBubble = true;\n      }\n    }\n  }\n}\n\n// 处理keydown事件\nfunction dispatch(event, element) {\n  const asterisk = _handlers['*'];\n  let key = event.keyCode || event.which || event.charCode;\n\n  // 表单控件过滤 默认表单控件不触发快捷键\n  if (!hotkeys.filter.call(this, event)) return;\n\n  // Gecko(Firefox)的command键值224，在Webkit(Chrome)中保持一致\n  // Webkit左右 command 键值不一样\n  if (key === 93 || key === 224) key = 91;\n\n  /**\n   * Collect bound keys\n   * If an Input Method Editor is processing key input and the event is keydown, return 229.\n   * https://stackoverflow.com/questions/25043934/is-it-ok-to-ignore-keydown-events-with-keycode-229\n   * http://lists.w3.org/Archives/Public/www-dom/2010JulSep/att-0182/keyCode-spec.html\n   */\n  if (_downKeys.indexOf(key) === -1 && key !== 229) _downKeys.push(key);\n  /**\n   * Jest test cases are required.\n   * ===============================\n   */\n  ['metaKey', 'ctrlKey', 'altKey', 'shiftKey'].forEach(keyName => {\n    const keyNum = modifierMap[keyName];\n    if (event[keyName] && _downKeys.indexOf(keyNum) === -1) {\n      _downKeys.push(keyNum);\n    } else if (!event[keyName] && _downKeys.indexOf(keyNum) > -1) {\n      _downKeys.splice(_downKeys.indexOf(keyNum), 1);\n    } else if (keyName === 'metaKey' && event[keyName]) {\n      // 如果command被按下，那就清空所有除event按键外的非装饰键。\n      // 因为command被按下的情况下非装饰键的keyup永远都不会触发。这是已知的浏览器限制。\n      // If command key is pressed, clear all non-decorating keys except for key in event.\n      // This is because keyup for a non-decorating key will NEVER be triggered when command is pressed.\n      // This is a known browser limitation.\n      _downKeys = _downKeys.filter(k => k in modifierMap || k === key);\n    }\n  });\n  /**\n   * -------------------------------\n   */\n  if (key in _mods) {\n    _mods[key] = true;\n    // 将特殊字符的key注册到 hotkeys 上\n    for (const k in _modifier) {\n      if (Object.prototype.hasOwnProperty.call(_modifier, k)) {\n        const eventKey = modifierMap[_modifier[k]];\n        hotkeys[k] = event[eventKey];\n      }\n    }\n    if (!asterisk) return;\n  }\n\n  // 将 modifierMap 里面的修饰键绑定到 event 中\n  for (const e in _mods) {\n    if (Object.prototype.hasOwnProperty.call(_mods, e)) {\n      _mods[e] = event[modifierMap[e]];\n    }\n  }\n  /**\n   * https://github.com/jaywcjlove/hotkeys/pull/129\n   * This solves the issue in Firefox on Windows where hotkeys corresponding to special characters would not trigger.\n   * An example of this is ctrl+alt+m on a Swedish keyboard which is used to type μ.\n   * Browser support: https://caniuse.com/#feat=keyboardevent-getmodifierstate\n   */\n  if (event.getModifierState && !(event.altKey && !event.ctrlKey) && event.getModifierState('AltGraph')) {\n    if (_downKeys.indexOf(17) === -1) {\n      _downKeys.push(17);\n    }\n    if (_downKeys.indexOf(18) === -1) {\n      _downKeys.push(18);\n    }\n    _mods[17] = true;\n    _mods[18] = true;\n  }\n\n  // 获取范围 默认为 `all`\n  const scope = getScope();\n  // 对任何快捷键都需要做的处理\n  if (asterisk) {\n    for (let i = 0; i < asterisk.length; i++) {\n      if (asterisk[i].scope === scope && (event.type === 'keydown' && asterisk[i].keydown || event.type === 'keyup' && asterisk[i].keyup)) {\n        eventHandler(event, asterisk[i], scope, element);\n      }\n    }\n  }\n  // key 不在 _handlers 中返回\n  if (!(key in _handlers)) return;\n  const handlerKey = _handlers[key];\n  const keyLen = handlerKey.length;\n  for (let i = 0; i < keyLen; i++) {\n    if (event.type === 'keydown' && handlerKey[i].keydown || event.type === 'keyup' && handlerKey[i].keyup) {\n      if (handlerKey[i].key) {\n        const record = handlerKey[i];\n        const {\n          splitKey\n        } = record;\n        const keyShortcut = record.key.split(splitKey);\n        const _downKeysCurrent = []; // 记录当前按键键值\n        for (let a = 0; a < keyShortcut.length; a++) {\n          _downKeysCurrent.push(code(keyShortcut[a]));\n        }\n        if (_downKeysCurrent.sort().join('') === _downKeys.sort().join('')) {\n          // 找到处理内容\n          eventHandler(event, record, scope, element);\n        }\n      }\n    }\n  }\n}\nfunction hotkeys(key, option, method) {\n  _downKeys = [];\n  const keys = getKeys(key); // 需要处理的快捷键列表\n  let mods = [];\n  let scope = 'all'; // scope默认为all，所有范围都有效\n  let element = document; // 快捷键事件绑定节点\n  let i = 0;\n  let keyup = false;\n  let keydown = true;\n  let splitKey = '+';\n  let capture = false;\n  let single = false; // 单个callback\n\n  // 对为设定范围的判断\n  if (method === undefined && typeof option === 'function') {\n    method = option;\n  }\n  if (Object.prototype.toString.call(option) === '[object Object]') {\n    if (option.scope) scope = option.scope; // eslint-disable-line\n    if (option.element) element = option.element; // eslint-disable-line\n    if (option.keyup) keyup = option.keyup; // eslint-disable-line\n    if (option.keydown !== undefined) keydown = option.keydown; // eslint-disable-line\n    if (option.capture !== undefined) capture = option.capture; // eslint-disable-line\n    if (typeof option.splitKey === 'string') splitKey = option.splitKey; // eslint-disable-line\n    if (option.single === true) single = true; // eslint-disable-line\n  }\n  if (typeof option === 'string') scope = option;\n\n  // 如果只允许单个callback，先unbind\n  if (single) unbind(key, scope);\n\n  // 对于每个快捷键进行处理\n  for (; i < keys.length; i++) {\n    key = keys[i].split(splitKey); // 按键列表\n    mods = [];\n\n    // 如果是组合快捷键取得组合快捷键\n    if (key.length > 1) mods = getMods(_modifier, key);\n\n    // 将非修饰键转化为键码\n    key = key[key.length - 1];\n    key = key === '*' ? '*' : code(key); // *表示匹配所有快捷键\n\n    // 判断key是否在_handlers中，不在就赋一个空数组\n    if (!(key in _handlers)) _handlers[key] = [];\n    _handlers[key].push({\n      keyup,\n      keydown,\n      scope,\n      mods,\n      shortcut: keys[i],\n      method,\n      key: keys[i],\n      splitKey,\n      element\n    });\n  }\n  // 在全局document上设置快捷键\n  if (typeof element !== 'undefined' && window) {\n    if (!elementEventMap.has(element)) {\n      const keydownListener = function () {\n        let event = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : window.event;\n        return dispatch(event, element);\n      };\n      const keyupListenr = function () {\n        let event = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : window.event;\n        dispatch(event, element);\n        clearModifier(event);\n      };\n      elementEventMap.set(element, {\n        keydownListener,\n        keyupListenr,\n        capture\n      });\n      addEvent(element, 'keydown', keydownListener, capture);\n      addEvent(element, 'keyup', keyupListenr, capture);\n    }\n    if (!winListendFocus) {\n      const listener = () => {\n        _downKeys = [];\n      };\n      winListendFocus = {\n        listener,\n        capture\n      };\n      addEvent(window, 'focus', listener, capture);\n    }\n  }\n}\nfunction trigger(shortcut) {\n  let scope = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'all';\n  Object.keys(_handlers).forEach(key => {\n    const dataList = _handlers[key].filter(item => item.scope === scope && item.shortcut === shortcut);\n    dataList.forEach(data => {\n      if (data && data.method) {\n        data.method();\n      }\n    });\n  });\n}\n\n// 销毁事件,unbind之后判断element上是否还有键盘快捷键，如果没有移除监听\nfunction removeKeyEvent(element) {\n  const values = Object.values(_handlers).flat();\n  const findindex = values.findIndex(_ref4 => {\n    let {\n      element: el\n    } = _ref4;\n    return el === element;\n  });\n  if (findindex < 0) {\n    const {\n      keydownListener,\n      keyupListenr,\n      capture\n    } = elementEventMap.get(element) || {};\n    if (keydownListener && keyupListenr) {\n      removeEvent(element, 'keyup', keyupListenr, capture);\n      removeEvent(element, 'keydown', keydownListener, capture);\n      elementEventMap.delete(element);\n    }\n  }\n  if (values.length <= 0 || elementEventMap.size <= 0) {\n    // 移除所有的元素上的监听\n    const eventKeys = Object.keys(elementEventMap);\n    eventKeys.forEach(el => {\n      const {\n        keydownListener,\n        keyupListenr,\n        capture\n      } = elementEventMap.get(el) || {};\n      if (keydownListener && keyupListenr) {\n        removeEvent(el, 'keyup', keyupListenr, capture);\n        removeEvent(el, 'keydown', keydownListener, capture);\n        elementEventMap.delete(el);\n      }\n    });\n    // 清空 elementEventMap\n    elementEventMap.clear();\n    // 清空 _handlers\n    Object.keys(_handlers).forEach(key => delete _handlers[key]);\n    // 移除window上的focus监听\n    if (winListendFocus) {\n      const {\n        listener,\n        capture\n      } = winListendFocus;\n      removeEvent(window, 'focus', listener, capture);\n      winListendFocus = null;\n    }\n  }\n}\nconst _api = {\n  getPressedKeyString,\n  setScope,\n  getScope,\n  deleteScope,\n  getPressedKeyCodes,\n  getAllKeyCodes,\n  isPressed,\n  filter,\n  trigger,\n  unbind,\n  keyMap: _keyMap,\n  modifier: _modifier,\n  modifierMap\n};\nfor (const a in _api) {\n  if (Object.prototype.hasOwnProperty.call(_api, a)) {\n    hotkeys[a] = _api[a];\n  }\n}\nif (typeof window !== 'undefined') {\n  const _hotkeys = window.hotkeys;\n  hotkeys.noConflict = deep => {\n    if (deep && window.hotkeys === hotkeys) {\n      window.hotkeys = _hotkeys;\n    }\n    return hotkeys;\n  };\n  window.hotkeys = hotkeys;\n}\n\nexport { hotkeys as default };\n","import type { Disposable } from '@type/disposable';\nimport type { MovableDirection } from '@type/movable';\nimport type { PlotState } from '@type/state';\nimport type { Figure, Subplot, Trace } from './plot';\nimport { NavigationService } from '@service/navigation';\nimport { Scope } from '@type/event';\nimport { Orientation } from '@type/grammar';\nimport { isGridNavigable } from '@type/navigation';\nimport { Constant } from '@util/constant';\nimport { Stack } from '@util/stack';\nimport hotkeys from 'hotkeys-js';\n\n/**\n * Build a human-readable plot type string with optional orientation prefix.\n * Returns just the type when orientation is absent/empty (no extra whitespace).\n */\nfunction formatPlotType(plotType: string, orientation?: Orientation | string): string {\n  if (!orientation) {\n    return plotType;\n  }\n  if (orientation === Orientation.HORIZONTAL || orientation === 'horz') {\n    return `horizontal ${plotType}`;\n  }\n  if (orientation === Orientation.VERTICAL || orientation === 'vert') {\n    return `vertical ${plotType}`;\n  }\n  return plotType;\n}\n\ntype Plot = Figure | Subplot | Trace;\n\nexport class Context implements Disposable {\n  public readonly id: string;\n  public readonly instructionContext: Plot;\n  public readonly selectorList: string[] = [];\n\n  private readonly plotContext: Stack<Plot>;\n  private readonly scopeContext: Stack<Scope>;\n  private readonly navigationService: NavigationService;\n  private readonly figure: Figure;\n  private isRotorActive: boolean;\n\n  public constructor(figure: Figure) {\n    this.figure = figure;\n    this.id = figure.id;\n\n    this.plotContext = new Stack<Plot>();\n    this.scopeContext = new Stack<Scope>();\n    this.navigationService = new NavigationService();\n\n    this.isRotorActive = false;\n\n    // Set the context to figure level.\n    const figureState = figure.state;\n    if (figureState.empty || figureState.size !== 1) {\n      this.instructionContext = figure;\n      this.plotContext.push(figure);\n      this.scopeContext.push(Scope.SUBPLOT);\n      return;\n    }\n\n    // Set the context to subplot level.\n    this.scopeContext.push(Scope.TRACE);\n    const subplotState = figure.activeSubplot.state;\n    if (subplotState.empty || subplotState.size !== 1) {\n      this.instructionContext = figure.activeSubplot;\n      this.plotContext.push(figure.activeSubplot);\n      this.plotContext.push(figure.activeSubplot.activeTrace);\n      return;\n    }\n\n    // Set the context to trace level (single-layer plot)\n    this.instructionContext = figure.activeSubplot.activeTrace;\n    this.plotContext.push(figure.activeSubplot.activeTrace);\n  }\n\n  public dispose(): void {\n    this.plotContext.clear();\n    this.scopeContext.clear();\n  }\n\n  public get active(): Plot {\n    return this.plotContext.peek()!;\n  }\n\n  public get state(): PlotState {\n    return this.active.state;\n  }\n\n  /**\n   * Enable or disable rotor navigation for the current context.\n   *\n   * @param enable - true to enable rotor mode, false to disable\n   */\n  public setRotorEnabled(enable: boolean): void {\n    this.isRotorActive = enable;\n    // TODO: emit event / notify observers if needed\n  }\n\n  /**\n   * Return whether rotor navigation is currently enabled.\n   *\n   * @returns boolean\n   */\n  public isRotorEnabled(): boolean {\n    return this.isRotorActive;\n  }\n\n  /**\n   * Returns whether this figure has multiple subplots (facets/multi-panel).\n   */\n  public get isMultiPanel(): boolean {\n    const figureState = this.figure.state;\n    return !figureState.empty && figureState.size > 1;\n  }\n\n  /**\n   * Returns the figure-level title (the top-level plot title).\n   */\n  public get figureTitle(): string {\n    const figureState = this.figure.state;\n    if (!figureState.empty) {\n      return figureState.title;\n    }\n    return 'unavailable';\n  }\n\n  /**\n   * Returns the figure-level subtitle.\n   */\n  public get figureSubtitle(): string {\n    const figureState = this.figure.state;\n    if (!figureState.empty) {\n      return figureState.subtitle;\n    }\n    return 'unavailable';\n  }\n\n  /**\n   * Returns the figure-level caption.\n   */\n  public get figureCaption(): string {\n    const figureState = this.figure.state;\n    if (!figureState.empty) {\n      return figureState.caption;\n    }\n    return 'unavailable';\n  }\n\n  public toggleScope(scope: Scope): void {\n    this.scopeContext.clear();\n    this.scopeContext.push(scope);\n\n    hotkeys.setScope(scope);\n  }\n\n  public get scope(): Scope {\n    const currentScope = this.scopeContext.peek()!;\n    return currentScope;\n  }\n\n  public isMovable(direction: MovableDirection): boolean {\n    return this.active.isMovable(direction);\n  }\n\n  public moveOnce(direction: MovableDirection): void {\n    this.active.moveOnce(direction);\n  }\n\n  public moveToExtreme(direction: MovableDirection): void {\n    this.active.moveToExtreme(direction);\n  }\n\n  public moveToIndex(row: number, col: number): void {\n    this.active.moveToIndex(row, col);\n  }\n\n  /**\n   * Moves the active plot element to the specified (x, y) point.\n   *\n   * @param x - The x-coordinate to move to.\n   * @param y - The y-coordinate to move to.\n   * @remarks\n   * This method assumes that `this.active` is a valid object with a `moveToPoint` method.\n   * If `this.active` is `null` or does not implement `moveToPoint`, this method will do nothing.\n   *\n   * Limitations:\n   * - If `this.active` is `null` or `undefined`, the method will not perform any action.\n   * - If `this.active` does not implement `moveToPoint`, the method will not perform any action.\n   */\n  public moveToPoint(x: number, y: number): void {\n    this.active.moveToPoint(x, y);\n  }\n\n  public stepTrace(direction: MovableDirection): void {\n    if (this.plotContext.size() > 1) {\n      const previousTrace = this.active as Trace;\n      this.plotContext.pop(); // Remove current Trace.\n      const activeSubplot = this.active as Subplot;\n\n      const newTrace = this.navigationService.stepTraceInSubplot(activeSubplot, direction);\n\n      if (newTrace) {\n        this.plotContext.push(newTrace);\n      } else if (previousTrace) {\n        // Restore previous trace on failure to avoid corrupting the stack\n        this.plotContext.push(previousTrace);\n      }\n    } else {\n      const onlySubplot = this.figure.subplots[0][0];\n      const activeTrace = this.active as Trace;\n      activeTrace.notifyOutOfBounds();\n      onlySubplot.notifyOutOfBounds(); // For UI feedback\n    }\n  }\n\n  public enterSubplot(): void {\n    const activeState = this.active.state;\n    if (activeState.type === 'figure') {\n      const activeFigure = this.active as Figure;\n      this.plotContext.push(activeFigure.activeSubplot);\n      const trace = activeFigure.activeSubplot.activeTrace;\n      trace.resetToInitialEntry();\n      this.plotContext.push(trace);\n      this.toggleScope(Scope.TRACE);\n    }\n  }\n\n  public exitSubplot(): void {\n    if (this.plotContext.size() > 2) {\n      this.plotContext.pop(); // Remove current Trace.\n      this.plotContext.pop(); // Remove current Subplot.\n      this.active.notifyStateUpdate();\n      this.toggleScope(Scope.SUBPLOT);\n    }\n  }\n\n  /**\n   * Enters grid cell mode to navigate points within the current cell.\n   * Only works when the active trace supports grid navigation and is in grid mode.\n   * @returns true if successfully entered cell mode, false if no points in cell\n   */\n  public enterGridCell(): boolean {\n    const activeTrace = this.active;\n    if (isGridNavigable(activeTrace) && activeTrace.supportsGridMode()) {\n      if (activeTrace.enterGridCell()) {\n        this.toggleScope(Scope.GRID_CELL);\n        return true;\n      }\n    }\n    return false;\n  }\n\n  /**\n   * Exits grid cell mode and returns to grid navigation.\n   */\n  public exitGridCell(): void {\n    const activeTrace = this.active;\n    if (isGridNavigable(activeTrace) && activeTrace.isInCellMode()) {\n      activeTrace.exitGridCell();\n      this.toggleScope(Scope.TRACE);\n    }\n  }\n\n  /**\n   * Moves to the previous point within the current grid cell.\n   */\n  public moveCellPointLeft(): void {\n    const activeTrace = this.active;\n    if (isGridNavigable(activeTrace) && activeTrace.isInCellMode()) {\n      activeTrace.moveCellPointLeft();\n    }\n  }\n\n  /**\n   * Moves to the next point within the current grid cell.\n   */\n  public moveCellPointRight(): void {\n    const activeTrace = this.active;\n    if (isGridNavigable(activeTrace) && activeTrace.isInCellMode()) {\n      activeTrace.moveCellPointRight();\n    }\n  }\n\n  public getInstruction(includeClickPrompt: boolean): string {\n    const state = this.instructionContext.state;\n    if (state.empty) {\n      return `No ${state.type} info available`;\n    }\n\n    const clickPrompt = includeClickPrompt\n      ? 'Click to activate.'\n      : Constant.EMPTY;\n    switch (state.type) {\n      case 'figure':\n        return `This is a maidr figure containing ${state.size} subplots. ${clickPrompt}\n        Use arrow keys to navigate subplots and press 'ENTER'.`;\n\n      case 'subplot': {\n        const subplotTraceOrientation = !state.trace.empty ? state.trace.orientation : undefined;\n        const subplotPlotType = formatPlotType(state.trace.traceType, subplotTraceOrientation);\n        return `This is a maidr plot containing ${state.size} layers, and\n        this is layer 1 of ${state.size}: ${subplotPlotType} plot. ${clickPrompt}\n        Use Arrows to navigate data points. Toggle B for Braille, T for Text,\n        S for Sonification, and R for Review mode.`;\n      }\n\n      case 'trace': {\n        // Handle edge case: if plotType is 'multiline' but only 1 group, treat as single line\n        let effectivePlotType = state.plotType;\n\n        if (state.plotType === 'multiline' && state.groupCount === 1) {\n          effectivePlotType = 'single line';\n        }\n\n        const groupCountText\n          = effectivePlotType === 'multiline' && state.groupCount\n            ? ` with ${state.groupCount} groups`\n            : '';\n\n        const displayType = formatPlotType(effectivePlotType, state.orientation);\n\n        return `This is a maidr plot of type: ${displayType}${groupCountText}. ${clickPrompt} Use Arrows to navigate data points. Toggle B for Braille, T for Text, S for Sonification, and R for Review mode.`;\n      }\n    }\n  }\n}\n","import type { Rgb } from '@type/color';\n\n/**\n * Abstract utility class for color parsing, manipulation, and contrast calculations.\n */\nexport abstract class Color {\n  private constructor() { /* Prevent instantiation */ }\n\n  /**\n   * Parses a color string in hex or rgb(a) format and returns RGB values.\n   * @param color - Color string in hex (#fff, #ffffff) or rgb/rgba format\n   * @returns RGB object with r, g, b properties, or null if parsing fails\n   */\n  public static parse(color: string): Rgb | null {\n    // Remove whitespace and lowercase\n    const c = color.replace(/\\s/g, '').toLowerCase();\n\n    // Handle hex format\n    if (/^#(?:[a-f0-9]{3}){1,2}$/.test(c)) {\n      let hex = c.substring(1).split('');\n      if (hex.length === 3) {\n        hex = [hex[0], hex[0], hex[1], hex[1], hex[2], hex[2]];\n      }\n      return {\n        r: Number.parseInt(hex[0] + hex[1], 16),\n        g: Number.parseInt(hex[2] + hex[3], 16),\n        b: Number.parseInt(hex[4] + hex[5], 16),\n      };\n    }\n\n    // Handle rgb(a) format\n    const rgbMatch = c.match(/^rgba?\\((\\d+),(\\d+),(\\d+)(?:,\\d*(?:\\.\\d*)?)?\\)$/);\n    if (rgbMatch) {\n      return {\n        r: Number.parseInt(rgbMatch[1], 10),\n        g: Number.parseInt(rgbMatch[2], 10),\n        b: Number.parseInt(rgbMatch[3], 10),\n      };\n    }\n\n    return null;\n  }\n\n  /**\n   * Inverts an RGB color by subtracting each channel from 255.\n   * @param rgb - The RGB color to invert\n   * @returns The inverted RGB color\n   */\n  public static invert(rgb: Rgb): Rgb {\n    return {\n      r: 255 - rgb.r,\n      g: 255 - rgb.g,\n      b: 255 - rgb.b,\n    };\n  }\n\n  /**\n   * Calculates the WCAG contrast ratio between two RGB colors.\n   * @param rgb1 - The first RGB color\n   * @param rgb2 - The second RGB color\n   * @returns The contrast ratio between the two colors (1 to 21)\n   */\n  public static getContrastRatio(rgb1: Rgb, rgb2: Rgb): number {\n    const l1 = this.calculateLuminance(rgb1);\n    const l2 = this.calculateLuminance(rgb2);\n    return (Math.max(l1, l2) + 0.05) / (Math.min(l1, l2) + 0.05);\n  }\n\n  /**\n   * Calculates the relative luminance of an RGB color using the WCAG formula.\n   * @param rgb - The RGB color to calculate luminance for\n   * @returns The relative luminance value (0 to 1)\n   */\n  private static calculateLuminance(rgb: Rgb): number {\n    const [r, g, b] = [rgb.r, rgb.g, rgb.b].map((c) => {\n      const channel = c / 255;\n      return channel <= 0.03928\n        ? channel / 12.92\n        : ((channel + 0.055) / 1.055) ** 2.4;\n    });\n    return 0.2126 * r + 0.7152 * g + 0.0722 * b;\n  }\n\n  /**\n   * Converts an RGB object to a CSS rgb() string format.\n   * @param rgb - The RGB color to convert\n   * @returns CSS rgb() string representation\n   */\n  public static rgbToString(rgb: Rgb): string {\n    return `rgb(${rgb.r}, ${rgb.g}, ${rgb.b})`;\n  }\n\n  public static isEqual(color1: string, color2: string): boolean {\n    const rgb1 = this.parse(color1);\n    const rgb2 = this.parse(color2);\n    if (!rgb1 || !rgb2) {\n      return false;\n    }\n    return rgb1.r === rgb2.r && rgb1.g === rgb2.g && rgb1.b === rgb2.b;\n  }\n}\n","import { Color } from './color';\nimport { Constant } from './constant';\n\n/**\n * Edge positions for SVG bounding box calculations.\n */\ntype Edge = 'top' | 'bottom' | 'left' | 'right';\n\n/**\n * Abstract utility class for SVG element manipulation, conversion, and highlighting operations.\n */\nexport abstract class Svg {\n  private constructor() { /* Prevent instantiation */ }\n\n  /**\n   * SVG namespace URI for creating SVG elements.\n   */\n  private static SVG_NAMESPACE = 'http://www.w3.org/2000/svg';\n\n  /**\n   * Converts an SVG element to a Base64-encoded JPEG data URL.\n   * @param svg - The SVG element to convert\n   * @returns A promise resolving to the Base64 data URL, or empty string on error\n   */\n  public static async toBase64(svg: HTMLElement): Promise<string> {\n    try {\n      // Serialize and optimize SVG\n      const svgString = new XMLSerializer()\n        .serializeToString(svg)\n        .replace(/>\\s+</g, '> <') // Safer whitespace handling\n        .replace(/\\s{2,}/g, ' ') // Collapse multiple spaces\n        .trim();\n\n      // Create SVG data URL with proper encoding\n      const encodedSVG = encodeURIComponent(svgString)\n        .replace(/'/g, '%27')\n        .replace(/\"/g, '%22');\n      const svgDataUrl = `data:image/svg+xml;charset=utf-8,${encodedSVG}`;\n\n      // Create and load image\n      const img = await new Promise<HTMLImageElement>((resolve, reject) => {\n        const img = new Image();\n        img.onload = () => resolve(img);\n        img.onerror = () => reject(new Error('Failed to load SVG image'));\n        img.src = svgDataUrl;\n      });\n\n      // Create canvas with proper scaling\n      const canvas = document.createElement('canvas');\n      [canvas.width, canvas.height] = [img.naturalWidth, img.naturalHeight];\n\n      // Draw to canvas\n      const ctx = canvas.getContext('2d');\n      if (!ctx) {\n        console.error('Error converting SVG to Base 64: Canvas context unavailable');\n        return '';\n      }\n\n      // Convert to JPEG with quality setting\n      ctx.drawImage(img, 0, 0);\n      return canvas.toDataURL('image/jpeg', 0.92);\n    } catch (error) {\n      console.error('Error converting SVG to Base 64:', error instanceof Error ? error.message : error);\n      return '';\n    }\n  }\n\n  /**\n   * Selects all SVG elements matching a query and optionally clones them.\n   * @template T - The type of SVG element to select\n   * @param query - CSS selector string to query elements\n   * @param shouldClone - Whether to clone elements and insert them as hidden copies (default: true)\n   * @returns Array of selected (or cloned) SVG elements\n   */\n  public static selectAllElements<T extends SVGElement>(query: string, shouldClone: boolean = true): T[] {\n    return Array\n      .from(document.querySelectorAll<T>(query))\n      .map((element) => {\n        if (!shouldClone) {\n          return element;\n        }\n\n        const clone = element.cloneNode(true) as T;\n        clone.setAttribute(Constant.VISIBILITY, Constant.HIDDEN);\n        element.insertAdjacentElement(Constant.AFTER_END, clone);\n        return clone;\n      });\n  }\n\n  /**\n   * Selects a single SVG element matching a query and optionally clones it.\n   * @template T - The type of SVG element to select\n   * @param query - CSS selector string to query the element\n   * @param shouldClone - Whether to clone the element and insert it as a hidden copy (default: true)\n   * @returns The selected (or cloned) SVG element\n   */\n  public static selectElement<T extends SVGElement>(query: string, shouldClone: boolean = true): T {\n    const element = document.querySelector<T>(query);\n    if (!shouldClone) {\n      return element as T;\n    }\n\n    const clone = element?.cloneNode(true) as T;\n    clone?.setAttribute(Constant.VISIBILITY, Constant.HIDDEN);\n\n    element?.insertAdjacentElement(Constant.AFTER_END, clone);\n    return clone;\n  }\n\n  /**\n   * Creates an empty, hidden, transparent SVG element of the specified type.\n   * @param type - The SVG element type to create (default: 'rect')\n   * @returns The newly created SVG element\n   */\n  public static createEmptyElement(type: string = 'rect'): SVGElement {\n    const element = document.createElementNS(this.SVG_NAMESPACE, type) as SVGElement;\n    element.setAttribute(Constant.FILL, Constant.TRANSPARENT);\n    element.setAttribute(Constant.STROKE, Constant.TRANSPARENT);\n    element.setAttribute(Constant.VISIBILITY, Constant.HIDDEN);\n    return element;\n  }\n\n  /**\n   * Creates a circle element styled to match the parent element's stroke or fill.\n   * @param cx - The x-coordinate of the circle center\n   * @param cy - The y-coordinate of the circle center\n   * @param parent - The parent SVG element to inherit styling from\n   * @returns The newly created circle element\n   */\n  public static createCircleElement(cx: string | number, cy: string | number, parent: SVGElement): SVGElement {\n    const style = window.getComputedStyle(parent);\n    const color = style.stroke || style.fill;\n    const strokeWidth = style.strokeWidth || '2';\n    const radius = Number.parseFloat(strokeWidth) * 2;\n    const element = document.createElementNS(this.SVG_NAMESPACE, Constant.CIRCLE) as SVGElement;\n\n    element.setAttribute(Constant.CIRCLE_X, String(cx));\n    element.setAttribute(Constant.CIRCLE_Y, String(cy));\n    element.setAttribute(Constant.RADIUS, String(radius));\n    element.setAttribute(Constant.FILL, color);\n    element.setAttribute(Constant.STROKE, color);\n    element.setAttribute(Constant.STROKE_WIDTH, strokeWidth);\n    element.setAttribute(Constant.VISIBILITY, Constant.HIDDEN);\n\n    parent.parentElement?.appendChild(element);\n    return element;\n  }\n\n  /**\n   * Minimum span (in SVG user units) used when getBBox() returns a\n   * zero-width or zero-height bounding box — e.g. a vertical `<path>`\n   * line drawn for the IQ range inside a violin plot.\n   */\n  private static readonly MIN_LINE_SPAN = 10;\n\n  /**\n   * Creates a line element along a specified edge of an SVG element's bounding box.\n   *\n   * When the bounding box has zero width (vertical path) or zero height\n   * (horizontal path), a minimum span is used so the resulting line is visible.\n   *\n   * @param box - The SVG element to create a line along\n   * @param edge - The edge position ('top', 'bottom', 'left', or 'right')\n   * @returns The newly created line element\n   */\n  public static createLineElement(box: SVGElement, edge: Edge): SVGElement {\n    const svg = box as SVGGraphicsElement;\n    const bBox = svg.getBBox();\n\n    // Ensure non-zero dimensions so edge lines are always visible.\n    // A vertical <path> (width=0) needs a minimum width for top/bottom edges;\n    // a horizontal <path> (height=0) needs a minimum height for left/right edges.\n    const effectiveWidth = bBox.width || this.MIN_LINE_SPAN;\n    const effectiveHeight = bBox.height || this.MIN_LINE_SPAN;\n    const cx = bBox.x + bBox.width / 2;\n    const cy = bBox.y + bBox.height / 2;\n\n    let x1: number, y1: number, x2: number, y2: number;\n    switch (edge) {\n      case 'top':\n        if (bBox.width === 0) {\n          [x1, y1, x2, y2] = [cx - effectiveWidth / 2, bBox.y, cx + effectiveWidth / 2, bBox.y];\n        } else {\n          [x1, y1, x2, y2] = [bBox.x, bBox.y, bBox.x + bBox.width, bBox.y];\n        }\n        break;\n      case 'bottom':\n        if (bBox.width === 0) {\n          [x1, y1, x2, y2] = [cx - effectiveWidth / 2, bBox.y + bBox.height, cx + effectiveWidth / 2, bBox.y + bBox.height];\n        } else {\n          [x1, y1, x2, y2] = [bBox.x, bBox.y + bBox.height, bBox.x + bBox.width, bBox.y + bBox.height];\n        }\n        break;\n      case 'left':\n        if (bBox.height === 0) {\n          [x1, y1, x2, y2] = [bBox.x, cy - effectiveHeight / 2, bBox.x, cy + effectiveHeight / 2];\n        } else {\n          [x1, y1, x2, y2] = [bBox.x, bBox.y, bBox.x, bBox.y + bBox.height];\n        }\n        break;\n      case 'right':\n        if (bBox.height === 0) {\n          [x1, y1, x2, y2] = [bBox.x + bBox.width, cy - effectiveHeight / 2, bBox.x + bBox.width, cy + effectiveHeight / 2];\n        } else {\n          [x1, y1, x2, y2] = [bBox.x + bBox.width, bBox.y, bBox.x + bBox.width, bBox.y + bBox.height];\n        }\n        break;\n    }\n\n    const style = window.getComputedStyle(box);\n    const line = document.createElementNS(this.SVG_NAMESPACE, Constant.LINE) as SVGElement;\n    line.setAttribute(Constant.X1, String(x1));\n    line.setAttribute(Constant.Y1, String(y1));\n    line.setAttribute(Constant.X2, String(x2));\n    line.setAttribute(Constant.Y2, String(y2));\n    line.setAttribute(Constant.STROKE, style.stroke);\n    line.setAttribute(Constant.STROKE_WIDTH, style.strokeWidth || '2');\n    line.setAttribute(Constant.VISIBILITY, Constant.HIDDEN);\n\n    box.insertAdjacentElement(Constant.AFTER_END, line);\n    return line;\n  }\n\n  /**\n   * Minimum opacity value for fill to be considered visible.\n   */\n  private static readonly MIN_VISIBLE_FILL_OPACITY = 0.01;\n  /**\n   * Minimum opacity value for stroke to be considered visible.\n   */\n  private static readonly MIN_VISIBLE_STROKE_OPACITY = 0.01;\n  /**\n   * Amount to increase stroke width for highlighting line elements.\n   */\n  private static readonly STROKE_WIDTH_HIGHLIGHT_INCREASE = 2;\n\n  /**\n   * Adjusts opacity values to ensure visibility, returning '1' if below threshold.\n   * @param value - The opacity value string to adjust\n   * @param minThreshold - The minimum threshold for visibility\n   * @returns Adjusted opacity value as a string\n   */\n  private static getAdjustedOpacity(value: string | null, minThreshold: number): string {\n    const parsed = value ? Number.parseFloat(value) : Number.NaN;\n    if (!Number.isNaN(parsed) && parsed > minThreshold) {\n      return parsed.toString();\n    }\n    return '1';\n  }\n\n  /**\n   * Creates a highlighted clone of an SVG element with enhanced visibility.\n   *\n   * When the element has a zero-size bounding box (e.g. a single-point\n   * ``<path d=\"M x y\">`` used for median markers in violin plots), a\n   * visible ``<circle>`` is created at that position instead.\n   *\n   * @param element - The SVG element to highlight\n   * @param fallbackColor - Color to use if original color cannot be determined\n   * @returns The highlighted clone element\n   */\n  public static createHighlightElement(element: SVGElement, fallbackColor: string): SVGElement {\n    // Handle zero-size elements (e.g. single-point <path> for median markers\n    // in violin plots). Create a circle marker instead of cloning.\n    try {\n      const bbox = (element as SVGGraphicsElement).getBBox();\n      if (bbox.width === 0 && bbox.height === 0) {\n        const style = window.getComputedStyle(element);\n        const strokeWidth = Number.parseFloat(style.strokeWidth || '2');\n        const radius = Math.max(strokeWidth * 1.5, 4);\n        const circle = document.createElementNS(this.SVG_NAMESPACE, 'circle') as SVGElement;\n        circle.setAttribute('cx', String(bbox.x));\n        circle.setAttribute('cy', String(bbox.y));\n        circle.setAttribute('r', String(radius));\n        circle.setAttribute(Constant.FILL, fallbackColor);\n        circle.setAttribute(Constant.STROKE, fallbackColor);\n        circle.setAttribute(Constant.STROKE_WIDTH, '2');\n        circle.setAttribute(Constant.VISIBILITY, Constant.VISIBLE);\n        element.insertAdjacentElement(Constant.AFTER_END, circle);\n        return circle;\n      }\n    } catch {\n      // getBBox may fail for elements not in the DOM; fall through to normal path.\n    }\n\n    const clone = element.cloneNode(true) as SVGElement;\n    const tag = element.tagName.toLowerCase();\n    const isLineElement = tag === Constant.POLYLINE || tag === Constant.LINE;\n\n    const computed = window.getComputedStyle(element);\n    const originalColor = isLineElement\n      ? computed.getPropertyValue(Constant.STROKE)\n      : computed.getPropertyValue(Constant.FILL);\n    const color = this.getHighlightColor(originalColor, fallbackColor);\n\n    const fillOpacity = computed.getPropertyValue('fill-opacity');\n    const strokeOpacity = computed.getPropertyValue('stroke-opacity');\n    clone.style.fillOpacity = this.getAdjustedOpacity(fillOpacity, this.MIN_VISIBLE_FILL_OPACITY);\n    clone.style.strokeOpacity = this.getAdjustedOpacity(strokeOpacity, this.MIN_VISIBLE_STROKE_OPACITY);\n\n    clone.setAttribute(Constant.VISIBILITY, Constant.VISIBLE);\n    clone.setAttribute(Constant.STROKE, color);\n    clone.setAttribute(Constant.FILL, color);\n    clone.style.fill = color;\n    clone.style.stroke = color;\n\n    if (isLineElement) {\n      const strokeWidth = window.getComputedStyle(clone).getPropertyValue(Constant.STROKE_WIDTH);\n      const match = strokeWidth.match(/^([0-9.]+)([a-z%]*)$/i);\n      if (match) {\n        const value = Number.parseFloat(match[1]);\n        const unit = match[2] || '';\n        clone.setAttribute(Constant.STROKE_WIDTH, `${value + this.STROKE_WIDTH_HIGHLIGHT_INCREASE}${unit}`);\n      } else {\n        const parsed = Number.parseFloat(strokeWidth);\n        const value = Number.isNaN(parsed)\n          ? this.STROKE_WIDTH_HIGHLIGHT_INCREASE\n          : parsed + this.STROKE_WIDTH_HIGHLIGHT_INCREASE;\n        clone.setAttribute(Constant.STROKE_WIDTH, `${value}`);\n      }\n    }\n\n    element.insertAdjacentElement(Constant.AFTER_END, clone);\n    return clone;\n  }\n\n  /**\n   * Determines an appropriate highlight color based on the original color's luminance.\n   * @param originalColor - The original color to base the highlight on\n   * @param fallbackColor - Color to use if original cannot be parsed or is dark\n   * @returns The computed highlight color string\n   */\n  private static getHighlightColor(originalColor: string, fallbackColor: string): string {\n    const originalRgb = Color.parse(originalColor);\n    if (!originalRgb) {\n      return fallbackColor;\n    }\n\n    const contrastWithWhite = Color.getContrastRatio(originalRgb, Constant.HIGHLIGHT_BASE_COLOR);\n    const isLight = contrastWithWhite < Constant.HIGHLIGHT_CONTRAST_RATIO;\n\n    // For dark colors, just use the fallback color\n    if (!isLight) {\n      return fallbackColor;\n    }\n\n    const modifiedRgb = { ...originalRgb };\n\n    // Check if the color is grayscale (R=G=B)\n    if (originalRgb.r === originalRgb.g && originalRgb.g === originalRgb.b) {\n      // For grayscale, modify all channels uniformly\n      modifiedRgb.r = Math.min(Constant.HIGHLIGHT_MAX_COLOR, Math.floor(originalRgb.r * Constant.HIGHLIGHT_COLOR_RATIO));\n      modifiedRgb.g = Math.min(Constant.HIGHLIGHT_MAX_COLOR, Math.floor(originalRgb.g * Constant.HIGHLIGHT_COLOR_RATIO));\n      modifiedRgb.b = Math.min(Constant.HIGHLIGHT_MAX_COLOR, Math.floor(originalRgb.b * Constant.HIGHLIGHT_COLOR_RATIO));\n    } else {\n      // For non-grayscale colors, modify only the dominant channel\n      if (originalRgb.r >= originalRgb.g && originalRgb.r >= originalRgb.b) {\n        modifiedRgb.r = Math.min(Constant.HIGHLIGHT_MAX_COLOR, Math.floor(originalRgb.r * Constant.HIGHLIGHT_COLOR_RATIO));\n      } else if (originalRgb.g >= originalRgb.r && originalRgb.g >= originalRgb.b) {\n        modifiedRgb.g = Math.min(Constant.HIGHLIGHT_MAX_COLOR, Math.floor(originalRgb.g * Constant.HIGHLIGHT_COLOR_RATIO));\n      } else {\n        modifiedRgb.b = Math.min(Constant.HIGHLIGHT_MAX_COLOR, Math.floor(originalRgb.b * Constant.HIGHLIGHT_COLOR_RATIO));\n      }\n    }\n\n    return Color.rgbToString(modifiedRgb);\n  }\n\n  /**\n   * Calculates a contrasting color (black or white) based on the element's fill color.\n   * @param element - The SVG element to analyze\n   * @returns '#000' for light backgrounds, '#fff' for dark backgrounds\n   */\n  public static getContrastingColorForElement(element: SVGElement): string {\n    const fill = window.getComputedStyle(element).fill || 'rgb(255,255,255)';\n    const rgb = Color.parse(fill);\n    if (!rgb)\n      return '#000';\n    const luminance = (0.2126 * rgb.r + 0.7152 * rgb.g + 0.0722 * rgb.b) / 255;\n    return luminance > 0.5 ? '#000' : '#fff';\n  }\n\n  /**\n   * Applies CSS outline styling to highlight a subplot element.\n   * @param element - The SVG element to highlight\n   * @param color - The color for the outline\n   */\n  public static setSubplotHighlightCss(element: SVGElement, color: string): void {\n    element.style.outline = `4px solid ${color}`;\n    element.style.outlineOffset = '3px';\n    element.style.borderRadius = '3px';\n    element.style.overflow = 'visible';\n  }\n\n  /**\n   * Removes CSS outline highlighting from a subplot element.\n   * @param element - The SVG element to remove highlighting from\n   */\n  public static removeSubplotHighlightCss(element: SVGElement): void {\n    element.style.removeProperty('outline');\n    element.style.removeProperty('outline-offset');\n    element.style.removeProperty('border-radius');\n    element.style.removeProperty('overflow');\n  }\n\n  /**\n   * Applies SVG stroke highlighting to a subplot with adaptive color based on background.\n   * @param group - The SVG group element to highlight\n   * @param fallbackColor - Color to use if background color cannot be determined\n   * @param figureBgElement - Optional background element to inherit color from\n   */\n  public static setSubplotHighlightSvgWithAdaptiveColor(group: SVGElement, fallbackColor: string, figureBgElement?: SVGElement): void {\n    const bg = group.querySelector('rect, path') as SVGElement | null;\n    let originalColor = '';\n    if (bg) {\n      originalColor = window.getComputedStyle(bg).getPropertyValue('fill');\n      if (!originalColor || originalColor === 'none' || originalColor === 'transparent' || originalColor === 'rgba(0, 0, 0, 0)') {\n        if (figureBgElement) {\n          originalColor = window.getComputedStyle(figureBgElement).getPropertyValue('fill');\n        } else {\n          originalColor = fallbackColor;\n        }\n      }\n      const highlightColor = this.getHighlightColor(originalColor, fallbackColor);\n      bg.setAttribute('stroke', highlightColor);\n      bg.setAttribute('stroke-width', '4');\n    }\n  }\n\n  /**\n   * Removes SVG stroke highlighting from a subplot element.\n   * @param group - The SVG group element to remove highlighting from\n   */\n  public static removeSubplotHighlightSvg(group: SVGElement): void {\n    const bg = group.querySelector('rect, path') as SVGElement | null;\n    if (bg) {\n      bg.removeAttribute('stroke');\n      bg.removeAttribute('stroke-width');\n    }\n  }\n}\n","import type { Disposable } from '@type/disposable';\nimport type { ExtremaTarget } from '@type/extrema';\nimport type { MaidrLayer } from '@type/grammar';\nimport type { Movable, MovableDirection } from '@type/movable';\nimport type { XValue } from '@type/navigation';\nimport type { Observable, Observer } from '@type/observable';\nimport type {\n  AudioState,\n  AutoplayState,\n  BrailleState,\n  HighlightState,\n  TextState,\n  TraceState,\n} from '@type/state';\nimport type { Trace } from './plot';\nimport { NavigationService } from '@service/navigation';\nimport { TraceType } from '@type/grammar';\nimport { Constant } from '@util/constant';\n\nconst DEFAULT_SUBPLOT_TITLE = 'unavailable';\n\nconst DEFAULT_X_AXIS = 'X';\nconst DEFAULT_Y_AXIS = 'Y';\nconst DEFAULT_Z_AXIS = 'Level';\n\nexport interface Dimension {\n  rows: number;\n  cols: number;\n}\n\nexport interface NearestPoint {\n  element: SVGElement;\n  row: number;\n  col: number;\n}\n\nexport abstract class AbstractPlot<State> implements Movable, Observable<State>, Disposable {\n  protected readonly observers: Observer<State>[];\n  protected isWarning: boolean;\n\n  protected constructor() {\n    this.observers = new Array<Observer<State>>();\n    this.isWarning = false;\n  }\n  protected abstract get dimension(): Dimension;\n\n  public dispose(): void {\n    this.observers.length = 0;\n  }\n\n  public notifyRotorBounds(): void {\n    this.isWarning = true;\n    this.notifyStateUpdate();\n    this.isWarning = false;\n  }\n\n  public get isInitialEntry(): boolean {\n    return this.movable.isInitialEntry;\n  }\n\n  public set isInitialEntry(value: boolean) {\n    this.movable.isInitialEntry = value;\n  }\n\n  public get isOutOfBounds(): boolean {\n    return this.movable.isOutOfBounds;\n  }\n\n  public set isOutOfBounds(value: boolean) {\n    this.movable.isOutOfBounds = value;\n  }\n\n  public get row(): number {\n    return this.movable.row;\n  }\n\n  public get col(): number {\n    return this.movable.col;\n  }\n\n  public set row(value: number) {\n    this.movable.row = value;\n  }\n\n  public set col(value: number) {\n    this.movable.col = value;\n  }\n\n  /**\n   * Gets safe row and column indices to prevent accessing undefined values\n   * @returns Object with safe row and column indices\n   */\n  protected getSafeIndices(): { row: number; col: number } {\n    const safeRow = this.row >= 0 && this.row < this.dimension.rows ? this.row : 0;\n    const safeCol\n      = this.col >= 0 && this.col < this.dimension.cols ? this.col : 0;\n    return { row: safeRow, col: safeCol };\n  }\n\n  /**\n   * Registers an observer to receive state updates.\n   * @param observer - The observer to add\n   */\n  public addObserver(observer: Observer<State>): void {\n    this.observers.push(observer);\n  }\n\n  /**\n   * Removes an observer from receiving state updates.\n   * @param observer - The observer to remove\n   */\n  public removeObserver(observer: Observer<State>): void {\n    const index = this.observers.indexOf(observer);\n    if (index !== -1) {\n      this.observers.splice(index, 1);\n    }\n  }\n\n  /**\n   * Notifies all registered observers with the current state.\n   */\n  public notifyStateUpdate(): void {\n    const currentState = this.state;\n    this.observers.forEach(observer => observer.update(currentState));\n  }\n\n  /**\n   * Notifies observers that an out-of-bounds condition occurred.\n   */\n  public notifyOutOfBounds(): void {\n    const outOfBoundsState = this.outOfBoundsState;\n    this.observers.forEach(observer => observer.update(outOfBoundsState));\n  }\n\n  public moveOnce(direction: MovableDirection): boolean {\n    const isMoved = this.movable.moveOnce(direction);\n    if (isMoved) {\n      this.notifyStateUpdate();\n    } else {\n      this.notifyOutOfBounds();\n    }\n    return isMoved;\n  }\n\n  public moveToExtreme(direction: MovableDirection): boolean {\n    const isMoved = this.movable.moveToExtreme(direction);\n    if (isMoved) {\n      this.notifyStateUpdate();\n    } else {\n      this.notifyOutOfBounds();\n    }\n    return isMoved;\n  }\n\n  public moveToIndex(row: number, col: number): boolean {\n    const isMoved = this.movable.moveToIndex(row, col);\n    if (isMoved) {\n      this.notifyStateUpdate();\n    } else {\n      this.notifyOutOfBounds();\n    }\n    return isMoved;\n  }\n\n  public isMovable(target: [number, number] | MovableDirection): boolean {\n    return this.movable.isMovable(target);\n  }\n\n  public abstract get state(): State;\n\n  protected abstract get outOfBoundsState(): State;\n\n  protected abstract get movable(): Movable;\n\n  public notifyObserversWithState(state: State): void {\n    for (const observer of this.observers) {\n      observer.update(state);\n    }\n  }\n\n  /**\n   * Base implementation of navigation in HIGHER and LOWER modes of ROTOR, default is no-op\n   * Needs to be implemented in Line, Bar, Heatmap, Candlestick\n   */\n  public moveToNextCompareValue(\n    _direction: 'left' | 'right' | 'up' | 'down',\n    _type: 'lower' | 'higher',\n  ): boolean {\n    // no-op\n    this.notifyRotorBounds();\n    return false;\n  }\n\n  /**\n   *\n   * @param a Utility function to compare point values for rotor functionality\n   * @param b\n   * @param type\n   * @returns boolean value\n   */\n  public compare(a: number, b: number, type: 'lower' | 'higher'): boolean {\n    if (type === 'lower') {\n      return a < b;\n    }\n    if (type === 'higher') {\n      return a > b;\n    }\n    return false;\n  }\n\n  /**\n   * Override left, right, upward and downward navigation functionality in rotor\n   */\n  /**\n   * Moves up in rotor mode, optionally filtering by lower or higher values.\n   * @param _mode - Optional mode for filtering (lower or higher)\n   * @throws Error always - subclasses must override this method\n   */\n  public moveUpRotor(_mode?: 'lower' | 'higher'): boolean {\n    throw new Error('Move up function is not defined for this trace');\n  }\n\n  /**\n   * Moves down in rotor mode, optionally filtering by lower or higher values.\n   * @param _mode - Optional mode for filtering (lower or higher)\n   * @throws Error always - subclasses must override this method\n   */\n  public moveDownRotor(_mode?: 'lower' | 'higher'): boolean {\n    throw new Error('Move down function is not defined for this trace');\n  }\n\n  /**\n   * Moves left in rotor mode, optionally filtering by lower or higher values.\n   * @param _mode - Optional mode for filtering (lower or higher)\n   * @throws Error always - subclasses must override this method\n   */\n  public moveLeftRotor(_mode?: 'lower' | 'higher'): boolean {\n    throw new Error('Move left function is not defined for this trace');\n  }\n\n  /**\n   * Moves right in rotor mode, optionally filtering by lower or higher values.\n   * @param _mode - Optional mode for filtering (lower or higher)\n   * @throws Error always - subclasses must override this method\n   */\n  public moveRightRotor(_mode?: 'lower' | 'higher'): boolean {\n    throw new Error('Move right function is not defined for this trace');\n  }\n\n  /**\n   * Moves the element to the specified (x, y) point.\n   *\n   * This base implementation is intentionally left empty. Subclasses should override\n   * this method to provide specific logic for moving to a point, such as updating\n   * highlight values or managing selection boxes.\n   *\n   * @param _x - The x-coordinate to move to.\n   * @param _y - The y-coordinate to move to.\n   */\n  public moveToPoint(_x: number, _y: number): void {\n    // implement basic stuff, assuming something like highlightValues that holds the points and boxes\n  }\n\n  /**\n   * Returns true if this trace supports compare (lower/higher value) navigation.\n   * Override to false for trace types that don't use compare modes (e.g., scatter, which is all we\n   * currently have).\n   */\n  public supportsCompareMode(): boolean {\n    return true;\n  }\n\n  /**\n   * Returns the display name for the default data navigation mode.\n   * Override to provide a trace-specific name (e.g., \"ROW AND COLUMN NAVIGATION\" for scatter).\n   */\n  public dataModeName(): string {\n    return Constant.DATA_MODE;\n  }\n}\n\nexport abstract class AbstractTrace extends AbstractPlot<TraceState> implements Trace {\n  protected readonly id: string;\n  protected readonly type: TraceType;\n  protected readonly title: string;\n\n  protected readonly xAxis: string;\n  protected readonly yAxis: string;\n  protected readonly z: string;\n\n  protected readonly navigationService: NavigationService;\n\n  protected readonly layer: MaidrLayer;\n\n  protected constructor(layer: MaidrLayer) {\n    super();\n    this.layer = layer;\n    this.navigationService = new NavigationService();\n    this.id = layer.id;\n    this.type = layer.type;\n    this.title = layer.title ?? DEFAULT_SUBPLOT_TITLE;\n\n    const axisX = layer.axes?.x;\n    const axisY = layer.axes?.y;\n    const axisZ = layer.axes?.z;\n    this.xAxis = (typeof axisX === 'object' ? axisX.label : axisX) ?? DEFAULT_X_AXIS;\n    this.yAxis = (typeof axisY === 'object' ? axisY.label : axisY) ?? DEFAULT_Y_AXIS;\n    this.z = (typeof axisZ === 'object' ? axisZ.label : axisZ) ?? DEFAULT_Z_AXIS;\n  }\n\n  /**\n   * Cleans up trace resources including values and highlighted SVG elements.\n   */\n  public dispose(): void {\n    if (this.highlightValues) {\n      this.highlightValues.forEach(row =>\n        row.forEach((el) => {\n          const elements = Array.isArray(el) ? el : [el];\n          elements.forEach(element => element.remove());\n        }),\n      );\n      this.highlightValues.length = 0;\n    }\n\n    super.dispose();\n  }\n\n  /**\n   * Gets the current state of the trace including audio, braille, text, and highlight information.\n   * @returns The current TraceState\n   */\n  public get state(): TraceState {\n    if (this.isWarning) {\n      return {\n        empty: true,\n        type: 'trace',\n        traceType: this.type,\n        audio: {\n          y: this.row,\n          x: this.col,\n          rows: this.dimension.rows,\n          cols: this.dimension.cols,\n        },\n        warning: true,\n      };\n    }\n    return {\n      empty: false,\n      type: 'trace',\n      layerId: this.id,\n      traceType: this.type,\n      plotType: this.type, // Default to traceType for other plot types\n      title: this.title,\n      xAxis: this.xAxis,\n      yAxis: this.yAxis,\n      z: this.z,\n      hasMultiPoints: this.hasMultiPoints,\n      audio: this.audio,\n      braille: this.braille,\n      text: this.text,\n      autoplay: this.autoplay,\n      highlight: this.highlight,\n      orientation: this.layer.orientation,\n    };\n  }\n\n  protected get outOfBoundsState(): TraceState {\n    return {\n      empty: true,\n      type: 'trace',\n      traceType: this.type,\n      audio: {\n        y: this.row,\n        x: this.col,\n        rows: this.dimension.rows,\n        cols: this.dimension.cols,\n      },\n    };\n  }\n\n  protected get highlight(): HighlightState {\n    if (this.highlightValues === null || this.isInitialEntry) {\n      return this.outOfBoundsState as HighlightState;\n    }\n\n    return {\n      empty: false,\n      elements: this.highlightValues[this.row][this.col],\n    };\n  }\n\n  /**\n   * Get all highlight SVG elements for this trace\n   * Used by HighlightService for high contrast mode\n   * @returns Array of all SVG elements, or empty array if none\n   */\n  public getAllHighlightElements(): SVGElement[] {\n    if (this.highlightValues === null) {\n      return [];\n    }\n\n    const elements: SVGElement[] = [];\n    for (const row of this.highlightValues) {\n      for (const cell of row) {\n        if (Array.isArray(cell)) {\n          elements.push(...cell);\n        } else if (cell) {\n          elements.push(cell);\n        }\n      }\n    }\n    return elements;\n  }\n\n  /**\n   * Get all original (visible) SVG elements for this trace.\n   * These are the actual rendered elements, not the hidden clones used for highlighting.\n   * Used by HighlightService for high contrast mode color changes.\n   * @returns Array of all original SVG elements, or empty array if none\n   */\n  public getAllOriginalElements(): SVGElement[] {\n    if (this.highlightValues === null) {\n      return [];\n    }\n\n    const elements: SVGElement[] = [];\n    for (const row of this.highlightValues) {\n      for (const cell of row) {\n        const cellElements = Array.isArray(cell) ? cell : cell ? [cell] : [];\n        for (const clone of cellElements) {\n          // The original element is the previous sibling of the hidden clone\n          const original = clone.previousElementSibling as SVGElement | null;\n\n          // Verify this is actually the paired original element:\n          // - Must exist\n          // - Must be the same element type (e.g., both are <path>)\n          // - Must NOT be hidden (the clone is hidden, original is visible)\n          if (\n            original\n            && original.tagName === clone.tagName\n            && original.getAttribute('visibility') !== 'hidden'\n          ) {\n            elements.push(original);\n          }\n        }\n      }\n    }\n    return elements;\n  }\n\n  protected getAudioGroupIndex(): { groupIndex?: number } {\n    // Default implementation checks if there are multiple groups/lines\n    // Uses this.values.length > 1 as the condition and this.row as the groupIndex\n    // Subclasses can override this method if they need different logic\n    if (this.values && this.values.length > 1) {\n      return { groupIndex: this.row };\n    }\n    return {};\n  }\n\n  protected get autoplay(): AutoplayState {\n    return {\n      UPWARD: this.dimension.rows,\n      DOWNWARD: this.dimension.rows,\n      FORWARD: this.dimension.cols,\n      BACKWARD: this.dimension.cols,\n    };\n  }\n\n  public resetToInitialEntry(): void {\n    this.isInitialEntry = true;\n    this.row = 0;\n    this.col = 0;\n  }\n\n  protected get hasMultiPoints(): boolean {\n    return false;\n  }\n\n  protected abstract get audio(): AudioState;\n\n  protected abstract get braille(): BrailleState;\n\n  protected abstract get text(): TextState;\n\n  protected abstract get dimension(): Dimension;\n\n  protected abstract get highlightValues():\n    | (SVGElement[] | SVGElement)[][]\n    | null;\n\n  /**\n   * Get available extrema targets for the current navigation context\n   * @returns Array of extrema targets that can be navigated to\n   * Default implementation returns empty array (no extrema support)\n   */\n  public getExtremaTargets(): ExtremaTarget[] {\n    return []; // Default: no extrema support\n  }\n\n  /**\n   * Base implementation for navigateToExtrema\n   * Subclasses must override to provide actual implementation\n   * @param _target The extrema target to navigate to\n   */\n  public navigateToExtrema(_target: ExtremaTarget): void {\n    if (this.supportsExtrema) {\n      throw new Error('Extrema navigation not implemented by this plot type');\n    }\n    // No-op if extrema navigation is not supported\n  }\n\n  /**\n   * Common post-navigation cleanup that should be called by subclasses\n   * after they update their internal state\n   */\n  protected finalizeExtremaNavigation(): void {\n    // Ensure we're not in initial entry state after navigation\n    if (this.isInitialEntry) {\n      this.isInitialEntry = false;\n    }\n\n    // Update visual positioning\n    this.updateVisualPointPosition();\n\n    // Notify observers of state change\n    this.notifyStateUpdate();\n  }\n\n  /**\n   * Default implementation for updating visual point position\n   * Subclasses can override if they need custom positioning logic\n   */\n  protected updateVisualPointPosition(): void {\n    // Default implementation - subclasses should override if needed\n  }\n\n  /**\n   * Checks if this plot supports extrema navigation.\n   * @returns True if extrema navigation is supported\n   */\n  public supportsExtremaNavigation(): boolean {\n    return this.supportsExtrema;\n  }\n  protected abstract get values(): (Element | number | number[])[][];\n\n  /**\n   * Abstract property that subclasses must implement to indicate extrema support\n   */\n  protected abstract readonly supportsExtrema: boolean;\n\n  /**\n   * Base implementation for getting current X value\n   * Subclasses can override if they have different data structures\n   */\n  public getCurrentXValue(): XValue | null {\n    // Handle traces with points array (BarTrace, LineTrace)\n    if (this.hasPointsArray()) {\n      const points = this.getPointsArray();\n      if (this.isValidPointsArray(points)) {\n        return this.navigationService.extractXValueFromPoints(\n          points,\n          this.row,\n          this.col,\n        );\n      }\n    }\n\n    // Handle traces with values array (generic fallback)\n    if (this.hasValuesArray()) {\n      const values = this.values;\n      if (this.isValidValuesArray(values)) {\n        return this.navigationService.extractXValueFromValues(\n          values as any,\n          this.row,\n          this.col,\n        );\n      }\n    }\n\n    return null;\n  }\n\n  /**\n   * Moves to a specific X value in the trace.\n   * @param xValue - The X value to navigate to\n   * @returns True if the move was successful, false otherwise\n   */\n  public moveToXValue(xValue: XValue): boolean {\n    // Handle traces with points array (BarTrace, LineTrace)\n    if (this.hasPointsArray()) {\n      const points = this.getPointsArray();\n      if (this.isValidPointsArray(points)) {\n        return this.navigationService.moveToXValueInPoints(\n          points,\n          xValue,\n          this.moveToIndex.bind(this),\n        );\n      }\n    }\n\n    // Handle traces with values array (generic fallback)\n    if (this.hasValuesArray()) {\n      const values = this.values;\n      if (this.isValidValuesArray(values)) {\n        return this.navigationService.moveToXValueInValues(\n          values as any,\n          xValue,\n          this.moveToIndex.bind(this),\n        );\n      }\n    }\n\n    return false;\n  }\n\n  /**\n   * Type guard to check if trace has points array.\n   * @returns True if points array exists\n   */\n  private hasPointsArray(): boolean {\n    return 'points' in this && this.points !== undefined;\n  }\n\n  /**\n   * Type guard to check if trace has values array.\n   * @returns True if values array exists\n   */\n  private hasValuesArray(): boolean {\n    return 'values' in this && this.values !== undefined;\n  }\n\n  /**\n   * Safely gets the points array with proper typing.\n   * @returns The points array\n   */\n  private getPointsArray(): any[] {\n    return (this as any).points;\n  }\n\n  /**\n   * Validates points array structure.\n   * @param points - The points array to validate\n   * @returns True if valid, false otherwise\n   */\n  private isValidPointsArray(points: any[]): boolean {\n    return Array.isArray(points) && points.length > 0;\n  }\n\n  /**\n   * Validates values array structure.\n   * @param values - The values array to validate\n   * @returns True if valid, false otherwise\n   */\n  private isValidValuesArray(values: any[][]): boolean {\n    return Array.isArray(values) && values.length > 0;\n  }\n\n  /**\n   * Gets the unique identifier for this trace.\n   * @returns The trace ID\n   */\n  public getId(): string {\n    return this.id;\n  }\n\n  protected abstract findNearestPoint(\n    x: number,\n    y: number,\n  ): NearestPoint | null;\n\n  /**\n   * Moves to the nearest point at the specified coordinates (used for hover functionality).\n   * @param x - The x-coordinate\n   * @param y - The y-coordinate\n   */\n  public moveToPoint(x: number, y: number): void {\n    const nearest = this.findNearestPoint(x, y);\n    if (nearest) {\n      if (this.isPointInBounds(x, y, nearest)) {\n        // don't move if we're already there\n        if (this.row === nearest.row && this.col === nearest.col) {\n          return;\n        }\n        this.moveToIndex(nearest.row, nearest.col);\n      }\n    }\n  }\n\n  /**\n   * Checks if the specified coordinates are within bounds of the element.\n   * @param x - The x-coordinate\n   * @param y - The y-coordinate\n   * @param element - Object containing the SVG element and its position\n   * @param element.element - The SVG element to check bounds against\n   * @param element.row - The row position of the element\n   * @param element.col - The column position of the element\n   * @returns True if the point is in bounds, false otherwise\n   */\n  public isPointInBounds(\n    x: number,\n    y: number,\n    {\n      element,\n      row: _row,\n      col: _col,\n    }: NearestPoint,\n  ): boolean {\n    // check if x y is within r distance of the bounding box of the element\n    const bbox = element.getBoundingClientRect();\n    let r: number = 12;\n    // if plot type is heatmap bar stacked or histogram, use 0\n    if (\n      this.type === TraceType.HEATMAP\n      || this.type === TraceType.BAR\n      || this.type === TraceType.STACKED\n      || this.type === TraceType.HISTOGRAM\n    ) {\n      r = 0;\n    }\n    const isInbounds\n      = x >= bbox.x - r\n        && x <= bbox.x + bbox.width + r\n        && y >= bbox.y - r\n        && y <= bbox.y + bbox.height + r;\n    return isInbounds;\n  }\n}\n","/**\n * Mathematical utility functions for common operations across the codebase.\n * These utilities help reduce code duplication while maintaining type safety.\n */\nexport abstract class MathUtil {\n  private constructor() { /* Prevent instantiation */ }\n\n  /**\n   * Safely finds the minimum value from an array of numbers.\n   * Returns Infinity for empty arrays (mathematically correct: empty set has no minimum).\n   * This prevents subtle bugs where 0 might be confused with actual data.\n   * @param values - Array of numbers to find minimum from\n   * @returns The minimum value or Infinity if array is empty\n   */\n  static safeMin(values: number[]): number {\n    return values.length === 0 ? Infinity : Math.min(...values);\n  }\n\n  /**\n   * Safely finds the maximum value from an array of numbers.\n   * Returns -Infinity for empty arrays (mathematically correct: empty set has no maximum).\n   * This prevents subtle bugs where 0 might be confused with actual data.\n   * @param values - Array of numbers to find maximum from\n   * @returns The maximum value or -Infinity if array is empty\n   */\n  static safeMax(values: number[]): number {\n    return values.length === 0 ? -Infinity : Math.max(...values);\n  }\n\n  /**\n   * Finds the minimum value from a 2D array of numbers.\n   * @param values - 2D array of numbers\n   * @returns The minimum value across all nested arrays\n   */\n  static minFrom2D(values: number[][]): number {\n    const flattened = values.flat();\n    return this.safeMin(flattened);\n  }\n\n  /**\n   * Finds the maximum value from a 2D array of numbers.\n   * @param values - 2D array of numbers\n   * @returns The maximum value across all nested arrays\n   */\n  static maxFrom2D(values: number[][]): number {\n    const flattened = values.flat();\n    return this.safeMax(flattened);\n  }\n\n  /**\n   * Finds min and max from an array in a single pass.\n   * More efficient than separate min/max calls for large arrays.\n   * Returns { min: Infinity, max: -Infinity } for empty arrays.\n   * @param values - Array of numbers\n   * @returns Object with min and max properties\n   */\n  static minMax(values: number[]): { min: number; max: number } {\n    if (values.length === 0) {\n      return { min: Infinity, max: -Infinity };\n    }\n\n    let min = values[0];\n    let max = values[0];\n\n    for (let i = 1; i < values.length; i++) {\n      const value = values[i];\n      if (value < min) {\n        min = value;\n      }\n      if (value > max) {\n        max = value;\n      }\n    }\n\n    return { min, max };\n  }\n\n  /**\n   * Finds min and max from a 2D array in a single pass.\n   * @param values - 2D array of numbers\n   * @returns Object with min and max properties\n   */\n  static minMaxFrom2D(values: number[][]): { min: number; max: number } {\n    const flattened = values.flat();\n    return this.minMax(flattened);\n  }\n}\n","import type { Disposable } from '@type/disposable';\nimport type { Coordinate, Movable, MovableDirection, Node } from '@type/movable';\n\ninterface MovableOptions {\n  isInitialEntry?: boolean;\n  row?: number;\n  col?: number;\n}\n\nabstract class AbstractMovable implements Movable {\n  public isInitialEntry: boolean;\n  public isOutOfBounds: boolean;\n\n  public row: number;\n  public col: number;\n\n  protected constructor(options?: MovableOptions) {\n    this.isInitialEntry = options?.isInitialEntry ?? true;\n    this.isOutOfBounds = false;\n    this.row = options?.row ?? 0;\n    this.col = options?.col ?? 0;\n  }\n\n  public moveToIndex(row: number, col: number): boolean {\n    if (!this.isMovable([row, col])) {\n      return false;\n    }\n\n    this.row = row;\n    this.col = col;\n    this.isInitialEntry = false;\n    return true;\n  }\n\n  public abstract moveOnce(direction: MovableDirection): boolean;\n\n  public abstract moveToExtreme(direction: MovableDirection): boolean;\n\n  public abstract isMovable(target: [number, number] | MovableDirection): boolean;\n}\n\nexport class MovableGrid<Element> extends AbstractMovable {\n  private readonly elements: Element[][];\n\n  public constructor(elements: Element[][], options?: MovableOptions) {\n    super(options);\n    this.elements = elements;\n  }\n\n  public moveOnce(direction: MovableDirection): boolean {\n    if (this.isInitialEntry) {\n      this.handleInitialEntry();\n      return true;\n    }\n\n    if (!this.isMovable(direction)) {\n      return false;\n    }\n\n    switch (direction) {\n      case 'UPWARD':\n        this.row += 1;\n        break;\n      case 'DOWNWARD':\n        this.row -= 1;\n        break;\n      case 'FORWARD':\n        this.col += 1;\n        break;\n      case 'BACKWARD':\n        this.col -= 1;\n        break;\n    }\n    return true;\n  }\n\n  public moveToExtreme(direction: MovableDirection): boolean {\n    if (this.isInitialEntry) {\n      this.handleInitialEntry();\n    }\n\n    switch (direction) {\n      case 'UPWARD':\n        this.row = this.elements.length - 1;\n        break;\n\n      case 'DOWNWARD':\n        this.row = 0;\n        break;\n\n      case 'FORWARD':\n        this.col = this.elements[this.row].length - 1;\n        break;\n\n      case 'BACKWARD':\n        this.col = 0;\n        break;\n    }\n    return true;\n  }\n\n  public moveToIndex(row: number, col: number): boolean {\n    if (!this.isMovable([row, col])) {\n      return false;\n    }\n\n    this.row = row;\n    this.col = col;\n    this.isInitialEntry = false;\n    return true;\n  }\n\n  public isMovable(target: [number, number] | MovableDirection): boolean {\n    if (Array.isArray(target)) {\n      const [row, col] = target;\n      return row >= 0 && row < this.elements.length\n        && col >= 0 && col < this.elements[this.row].length;\n    }\n\n    switch (target) {\n      case 'UPWARD':\n        return this.row < this.elements.length - 1;\n      case 'DOWNWARD':\n        return this.row > 0;\n      case 'FORWARD':\n        return this.col < this.elements[this.row].length - 1;\n      case 'BACKWARD':\n        return this.col > 0;\n    }\n  }\n\n  public handleInitialEntry(): void {\n    this.isInitialEntry = false;\n    this.row = Math.max(0, Math.min(this.row, this.elements.length - 1));\n    this.col = Math.max(0, Math.min(this.col, this.elements[this.row].length - 1));\n  }\n}\n\nexport class MovableGraph extends AbstractMovable {\n  private readonly graph: (Node | null)[][];\n\n  public constructor(graph: (Node | null)[][], options?: MovableOptions) {\n    super(options);\n    this.graph = graph;\n  }\n\n  public moveOnce(direction: MovableDirection): boolean {\n    if (this.isInitialEntry) {\n      this.handleInitialEntry();\n      return true;\n    }\n\n    const node = this.graph[this.row]?.[this.col];\n    if (!node) {\n      return false;\n    }\n\n    let nextNode: Coordinate | null = null;\n    switch (direction) {\n      case 'UPWARD':\n        nextNode = node.up;\n        break;\n\n      case 'DOWNWARD':\n        nextNode = node.down;\n        break;\n\n      case 'FORWARD':\n        nextNode = node.right;\n        break;\n\n      case 'BACKWARD':\n        nextNode = node.left;\n        break;\n    }\n    if (!nextNode) {\n      return false;\n    }\n\n    this.row = nextNode.row;\n    this.col = nextNode.col;\n    return true;\n  }\n\n  public moveToExtreme(direction: MovableDirection): boolean {\n    if (this.isInitialEntry) {\n      this.handleInitialEntry();\n    }\n\n    const node = this.graph[this.row]?.[this.col];\n    if (!node) {\n      return false;\n    }\n\n    let extremeNode: Coordinate | null = null;\n    switch (direction) {\n      case 'UPWARD':\n        extremeNode = node.top;\n        break;\n\n      case 'DOWNWARD':\n        extremeNode = node.bottom;\n        break;\n\n      case 'FORWARD':\n        extremeNode = node.end;\n        break;\n\n      case 'BACKWARD':\n        extremeNode = node.start;\n        break;\n    }\n    if (!extremeNode) {\n      return false;\n    }\n\n    this.row = extremeNode.row;\n    this.col = extremeNode.col;\n    return true;\n  }\n\n  public isMovable(target: [number, number] | MovableDirection): boolean {\n    if (Array.isArray(target)) {\n      const [r, c] = target;\n      return this.graph[r]?.[c] !== null && this.graph[r]?.[c] !== undefined;\n    }\n\n    const node = this.graph[this.row]?.[this.col];\n    if (!node) {\n      return false;\n    }\n\n    switch (target) {\n      case 'UPWARD':\n        return node.up !== null;\n      case 'DOWNWARD':\n        return node.down !== null;\n      case 'FORWARD':\n        return node.right !== null;\n      case 'BACKWARD':\n        return node.left !== null;\n    }\n  }\n\n  public handleInitialEntry(): void {\n    this.isInitialEntry = false;\n\n    if (this.isMovable([0, 0])) {\n      this.row = 0;\n      this.col = 0;\n    } else {\n      this.row = -1;\n      this.col = -1;\n    }\n  }\n}\n\nexport class MovablePlane extends AbstractMovable implements Disposable {\n  public mode: 'row' | 'col';\n\n  private readonly xPoints: { x: number; y: number[] }[];\n  private readonly yPoints: { x: number[]; y: number }[];\n\n  private readonly xValues: number[];\n  private readonly yValues: number[];\n\n  public constructor(xPoints: { x: number; y: number[] }[], yPoints: { x: number[]; y: number }[]) {\n    super();\n\n    this.mode = 'col';\n\n    this.xPoints = xPoints;\n    this.yPoints = yPoints;\n\n    this.xValues = xPoints.map(point => point.x);\n    this.yValues = yPoints.map(point => point.y);\n  }\n\n  public dispose(): void {\n    this.xValues.length = 0;\n    this.yValues.length = 0;\n  }\n\n  public moveOnce(direction: MovableDirection): boolean {\n    if (this.isInitialEntry) {\n      this.handleInitialEntry();\n      return true;\n    }\n\n    if (!this.isMovable(direction)) {\n      return false;\n    }\n\n    if (this.mode === 'col') {\n      switch (direction) {\n        case 'FORWARD':\n          this.col++;\n          break;\n        case 'BACKWARD':\n          this.col--;\n          break;\n        case 'UPWARD':\n        case 'DOWNWARD': {\n          this.toggleNavigation();\n          break;\n        }\n      }\n    } else {\n      switch (direction) {\n        case 'UPWARD':\n          this.row++;\n          break;\n        case 'DOWNWARD':\n          this.row--;\n          break;\n        case 'FORWARD':\n        case 'BACKWARD': {\n          this.toggleNavigation();\n          break;\n        }\n      }\n    }\n    return true;\n  }\n\n  public moveToExtreme(direction: MovableDirection): boolean {\n    if (this.isInitialEntry) {\n      this.handleInitialEntry();\n    }\n\n    if (this.mode === 'col') {\n      switch (direction) {\n        case 'UPWARD':\n          this.toggleNavigation();\n          this.row = this.yPoints.length - 1;\n          break;\n        case 'DOWNWARD':\n          this.toggleNavigation();\n          this.row = 0;\n          break;\n        case 'FORWARD':\n          this.col = this.xPoints.length - 1;\n          break;\n        case 'BACKWARD':\n          this.col = 0;\n          break;\n      }\n    } else {\n      switch (direction) {\n        case 'UPWARD':\n          this.row = this.yPoints.length - 1;\n          break;\n        case 'DOWNWARD':\n          this.row = 0;\n          break;\n        case 'FORWARD':\n          this.toggleNavigation();\n          this.col = this.xPoints.length - 1;\n          break;\n        case 'BACKWARD':\n          this.toggleNavigation();\n          this.col = 0;\n          break;\n      }\n    }\n    return true;\n  }\n\n  public isMovable(target: [number, number] | MovableDirection): boolean {\n    if (Array.isArray(target)) {\n      return false;\n    }\n\n    if (this.mode === 'col') {\n      switch (target) {\n        case 'FORWARD':\n          return this.col < this.xPoints.length - 1;\n        case 'BACKWARD':\n          return this.col > 0;\n        case 'UPWARD':\n        case 'DOWNWARD':\n          return true;\n      }\n    } else {\n      switch (target) {\n        case 'UPWARD':\n          return this.row < this.yPoints.length - 1;\n        case 'DOWNWARD':\n          return this.row > 0;\n        case 'FORWARD':\n        case 'BACKWARD':\n          return true;\n      }\n    }\n  }\n\n  private toggleNavigation(): void {\n    if (this.mode === 'col') {\n      const currentX = this.xPoints[this.col];\n      const midY = currentX.y[Math.floor(currentX.y.length / 2)];\n      this.row = this.yValues.indexOf(midY);\n      this.mode = 'row';\n    } else {\n      const currentY = this.yPoints[this.row];\n      const midX = currentY.x[Math.floor(currentY.x.length / 2)];\n      this.col = this.xValues.indexOf(midX);\n      this.mode = 'col';\n    }\n  }\n\n  private handleInitialEntry(): void {\n    this.isInitialEntry = false;\n\n    if (this.mode === 'col') {\n      this.col = Math.max(0, Math.min(this.col, this.xPoints.length - 1));\n      this.row = Math.max(0, Math.min(this.row, this.xPoints[this.col].y.length - 1));\n    } else {\n      this.row = Math.max(0, Math.min(this.row, this.yPoints.length - 1));\n      this.col = Math.max(0, Math.min(this.col, this.yPoints[this.row].x.length - 1));\n    }\n  }\n}\n","import type { ExtremaTarget } from '@type/extrema';\nimport type { BarPoint, MaidrLayer } from '@type/grammar';\nimport type { Movable } from '@type/movable';\nimport type { AudioState, BrailleState, TextState } from '@type/state';\nimport type { Dimension } from './abstract';\nimport { Orientation } from '@type/grammar';\nimport { MathUtil } from '@util/math';\nimport { Svg } from '@util/svg';\nimport { AbstractTrace } from './abstract';\nimport { MovableGrid } from './movable';\n\nexport abstract class AbstractBarPlot<T extends BarPoint> extends AbstractTrace {\n  protected readonly movable: Movable;\n\n  protected readonly points: T[][];\n  protected readonly barValues: number[][];\n  protected readonly highlightValues: SVGElement[][] | null;\n  protected highlightCenters:\n    | { x: number; y: number; row: number; col: number; element: SVGElement }[]\n    | null;\n\n  protected readonly orientation: Orientation;\n  protected readonly min: number[];\n  protected readonly max: number[];\n  protected readonly supportsExtrema = true;\n\n  protected constructor(layer: MaidrLayer, points: T[][]) {\n    super(layer);\n\n    this.points = points;\n    this.orientation = layer.orientation ?? Orientation.VERTICAL;\n\n    this.barValues = points.map(row =>\n      row.map(point =>\n        this.orientation === Orientation.VERTICAL\n          ? Number(point.y)\n          : Number(point.x),\n      ),\n    );\n    this.min = this.barValues.map(row => MathUtil.safeMin(row));\n    this.max = this.barValues.map(row => MathUtil.safeMax(row));\n    this.highlightValues = this.mapToSvgElements(layer.selectors as string);\n    this.highlightCenters = this.mapSvgElementsToCenters();\n    this.movable = new MovableGrid<T>(this.points);\n  }\n\n  /**\n   * Cleans up bar plot resources including points and min/max arrays.\n   */\n  public dispose(): void {\n    this.points.length = 0;\n\n    this.min.length = 0;\n    this.max.length = 0;\n\n    super.dispose();\n  }\n\n  protected get audio(): AudioState {\n    const isVertical = this.orientation === Orientation.VERTICAL;\n\n    const value = isVertical\n      ? this.barValues[this.row][this.col]\n      : this.barValues[this.col][this.row];\n\n    return {\n      freq: {\n        min: MathUtil.safeMin(this.min),\n        max: MathUtil.safeMax(this.max),\n        raw: value,\n      },\n      panning: {\n        x: isVertical ? this.col : this.row,\n        y: isVertical ? this.row : this.col,\n        rows: isVertical ? this.barValues.length : this.barValues[this.col].length,\n        cols: isVertical ? this.barValues[this.row].length : this.barValues.length,\n      },\n      group: isVertical ? this.row : this.col,\n    };\n  }\n\n  protected get braille(): BrailleState {\n    return {\n      empty: false,\n      id: this.id,\n      values: this.barValues,\n      min: this.min,\n      max: this.max,\n      row: this.row,\n      col: this.col,\n    };\n  }\n\n  protected get text(): TextState {\n    const isVertical = this.orientation === Orientation.VERTICAL;\n    const point = this.points[this.row][this.col];\n\n    const mainLabel = isVertical ? this.xAxis : this.yAxis;\n    const mainValue = isVertical ? point.x : point.y;\n\n    const crossLabel = isVertical ? this.yAxis : this.xAxis;\n    const crossValue = isVertical ? point.y : point.x;\n\n    return {\n      main: { label: mainLabel, value: mainValue },\n      cross: { label: crossLabel, value: crossValue },\n      mainAxis: isVertical ? 'x' : 'y',\n      crossAxis: isVertical ? 'y' : 'x',\n    };\n  }\n\n  protected get dimension(): Dimension {\n    return {\n      rows: this.barValues.length,\n      cols: this.barValues[this.row].length,\n    };\n  }\n\n  protected get values(): number[][] {\n    return this.barValues;\n  }\n\n  protected mapToSvgElements(selector?: string): SVGElement[][] | null {\n    if (!selector) {\n      return null;\n    }\n\n    const queried = Svg.selectAllElements(selector);\n    const svgElements = [queried];\n\n    if (svgElements.length !== this.points.length) {\n      return null;\n    }\n\n    for (let row = 0; row < this.points.length; row++) {\n      if (svgElements[row].length === this.points[row].length) {\n        continue; // exact match — nothing to do\n      }\n\n      // SVG renderers (e.g. Plotly) may omit zero-height bars from the DOM.\n      // When fewer SVG elements than data points exist, align them by\n      // assigning each non-zero data point the next queried element and\n      // inserting an invisible placeholder for zero-value points.\n      if (svgElements[row].length < this.points[row].length) {\n        const aligned: SVGElement[] = [];\n        let svgIdx = 0;\n        for (let col = 0; col < this.points[row].length; col++) {\n          const value = this.orientation === Orientation.VERTICAL\n            ? Number(this.points[row][col].y)\n            : Number(this.points[row][col].x);\n          if (value !== 0 && svgIdx < svgElements[row].length) {\n            aligned.push(svgElements[row][svgIdx++]);\n          } else {\n            aligned.push(Svg.createEmptyElement());\n          }\n        }\n        svgElements[row] = aligned;\n      } else {\n        return null; // more SVG elements than data points — unexpected\n      }\n    }\n\n    return svgElements;\n  }\n\n  /**\n   * Maps SVG elements to their center coordinates for proximity detection.\n   * @returns Array of center points with element references or null if no elements exist\n   */\n  protected mapSvgElementsToCenters():\n    | { x: number; y: number; row: number; col: number; element: SVGElement }[]\n    | null {\n    const svgElements: (SVGElement | SVGElement[])[][] | null = this.highlightValues;\n\n    if (!svgElements) {\n      return null;\n    }\n\n    const centers: {\n      x: number;\n      y: number;\n      row: number;\n      col: number;\n      element: SVGElement;\n    }[] = [];\n    for (let row = 0; row < svgElements.length; row++) {\n      for (let col = 0; col < svgElements[row].length; col++) {\n        const element = svgElements[row][col];\n        const targetElement = Array.isArray(element) ? element[0] : element;\n        const bbox = targetElement.getBoundingClientRect();\n        if (targetElement) {\n          centers.push({\n            x: bbox.x + bbox.width / 2,\n            y: bbox.y + bbox.height / 2,\n            row,\n            col,\n            element: targetElement,\n          });\n        }\n      }\n    }\n\n    return centers;\n  }\n\n  /**\n   * Finds the nearest bar element at the specified coordinates.\n   * @param x - The x-coordinate\n   * @param y - The y-coordinate\n   * @returns Object containing the element and its position, or null if not found\n   */\n  public findNearestPoint(\n    x: number,\n    y: number,\n  ): { element: SVGElement; row: number; col: number } | null {\n    // we differ from the base implementation (which is to loop through centers and return one),\n    // as sometimes the closest center is not the bar we clicked on\n    // so instead, we just do the hard thing and loop through all highlightValues\n    if (!this.highlightValues || this.highlightValues.length === 0) {\n      return null;\n    }\n\n    // loop through all highlightValues, and check bounding boxes against x, y\n    for (let row = 0; row < this.highlightValues.length; row++) {\n      const rowElements = this.highlightValues[row];\n      // Skip undefined or empty rows\n      if (!rowElements || rowElements.length === 0) {\n        continue;\n      }\n      for (let col = 0; col < rowElements.length; col++) {\n        const element = rowElements[col];\n        // Skip undefined elements\n        if (!element) {\n          continue;\n        }\n        const targetElement = Array.isArray(element) ? element[0] : element;\n        // Skip if targetElement is invalid or an empty placeholder\n        if (!targetElement || !targetElement.getBoundingClientRect) {\n          continue;\n        }\n        const bbox = targetElement.getBoundingClientRect();\n        // Skip elements with no size (empty placeholders)\n        if (bbox.width === 0 && bbox.height === 0) {\n          continue;\n        }\n        if (\n          x >= bbox.x\n          && x <= bbox.x + bbox.width\n          && y >= bbox.y\n          && y <= bbox.y + bbox.height\n        ) {\n          return { element: targetElement, row, col };\n        }\n      }\n    }\n\n    return null;\n  }\n}\n\n/**\n * Concrete implementation of a bar trace for standard bar charts.\n * Supports extrema navigation and hover interactions.\n */\nexport class BarTrace extends AbstractBarPlot<BarPoint> {\n  /**\n   * Checks if coordinates are within the bounding box of the bar element.\n   * @param x - The x-coordinate\n   * @param y - The y-coordinate\n   * @param element - Object containing the SVG element and its position\n   * @param element.element - The SVG element to check bounds against\n   * @param element.row - The row position of the element\n   * @param element.col - The column position of the element\n   * @returns True if coordinates are within bounds, false otherwise\n   */\n  public isPointInBounds(\n    x: number,\n    y: number,\n    { element, row: _row, col: _col }: { element: SVGElement; row: number; col: number },\n  ): boolean {\n    // check if x y is within the bounding box of the element\n    const bbox = element.getBoundingClientRect();\n    return (\n      x >= bbox.x\n      && x <= bbox.x + bbox.width\n      && y >= bbox.y\n      && y <= bbox.y + bbox.height\n    );\n  }\n\n  /**\n   * Constructs a new BarTrace instance.\n   * @param layer - The MAIDR layer configuration\n   */\n  public constructor(layer: MaidrLayer) {\n    super(layer, [layer.data as BarPoint[]]);\n  }\n\n  /**\n   * Get extrema targets for the current bar plot trace\n   * Returns min and max values within the current group\n   * @returns Array of extrema targets for navigation\n   */\n  public override getExtremaTargets(): ExtremaTarget[] {\n    const targets: ExtremaTarget[] = [];\n    const currentGroup = this.row;\n\n    if (currentGroup < 0 || currentGroup >= this.barValues.length) {\n      return targets;\n    }\n\n    const groupValues = this.barValues[currentGroup];\n    if (!groupValues || groupValues.length === 0) {\n      return targets;\n    }\n\n    // Use pre-computed min/max values instead of recalculating\n    const groupMin = this.min[currentGroup];\n    const groupMax = this.max[currentGroup];\n\n    // Find indices of min/max values\n    const maxIndex = groupValues.indexOf(groupMax);\n    const minIndex = groupValues.indexOf(groupMin);\n\n    // Inline raw x-value lookup using currentGroup (avoids hidden this.row dependency)\n    const maxPoint = this.points[currentGroup]?.[maxIndex];\n    const minPoint = this.points[currentGroup]?.[minIndex];\n    const maxXValue = maxPoint\n      ? (this.orientation === Orientation.VERTICAL ? maxPoint.x : maxPoint.y)\n      : undefined;\n    const minXValue = minPoint\n      ? (this.orientation === Orientation.VERTICAL ? minPoint.x : minPoint.y)\n      : undefined;\n\n    // Add max target\n    targets.push({\n      label: `Max Bar at ${this.getPointLabel(maxIndex)}`,\n      value: groupMax,\n      pointIndex: maxIndex,\n      segment: 'bar',\n      type: 'max',\n      navigationType: 'point',\n      xValue: maxXValue,\n    });\n\n    // Add min target\n    targets.push({\n      label: `Min Bar at ${this.getPointLabel(minIndex)}`,\n      value: groupMin,\n      pointIndex: minIndex,\n      segment: 'bar',\n      type: 'min',\n      navigationType: 'point',\n      xValue: minXValue,\n    });\n\n    return targets;\n  }\n\n  /**\n   * Navigate to a specific extrema target\n   * @param target The extrema target to navigate to\n   */\n  public override navigateToExtrema(target: ExtremaTarget): void {\n    // Update the current point index (column)\n    this.col = target.pointIndex;\n\n    // Use common finalization method\n    this.finalizeExtremaNavigation();\n  }\n\n  /**\n   * Gets a clean label for a specific bar point.\n   * @param pointIndex - The index of the point\n   * @returns A clean label for the point\n   */\n  private getPointLabel(pointIndex: number): string {\n    if (this.points[this.row] && this.points[this.row][pointIndex]) {\n      const point = this.points[this.row][pointIndex];\n\n      if (this.orientation === Orientation.VERTICAL) {\n        return `${point.x}`;\n      } else {\n        return `${point.y}`;\n      }\n    }\n\n    return `Point ${pointIndex}`;\n  }\n\n  /**\n   * Updates the visual position of the current point ensuring it's within bounds.\n   */\n  protected updateVisualPointPosition(): void {\n    // Ensure we're within bounds\n    const { row: safeRow, col: safeCol } = this.getSafeIndices();\n    this.row = safeRow;\n    this.col = safeCol;\n  }\n\n  /**\n   * Moves to the next bar that matches the comparison criteria in rotor mode.\n   * @param direction - The direction to move (left or right)\n   * @param type - The comparison type (lower or higher)\n   * @returns True if a target was found, false otherwise\n   */\n  public override moveToNextCompareValue(direction: 'left' | 'right', type: 'lower' | 'higher'): boolean {\n    const currentGroup = this.row;\n    if (currentGroup < 0 || currentGroup >= this.barValues.length) {\n      return false;\n    }\n\n    const groupValues = this.barValues[currentGroup];\n    if (!groupValues || groupValues.length === 0) {\n      return false;\n    }\n\n    const currentIndex = this.col;\n    const step = direction === 'right' ? 1 : -1;\n    let i = currentIndex + step;\n\n    while (i >= 0 && i < groupValues.length) {\n      if (this.compare(groupValues[i], groupValues[currentIndex], type)) {\n        this.col = i;\n        this.updateVisualPointPosition();\n        this.notifyStateUpdate();\n        return true;\n      }\n      i += step;\n    }\n    this.notifyRotorBounds();\n    return false;\n  }\n}\n","/**\n * Constant object defining all boxplot sections with their human-readable labels.\n */\nexport const BoxplotSection = {\n  LOWER_OUTLIER: 'Lower outlier(s)',\n  MIN: 'Minimum',\n  Q1: '25%',\n  Q2: '50%',\n  Q3: '75%',\n  MAX: 'Maximum',\n  UPPER_OUTLIER: 'Upper outlier(s)',\n  MEAN: 'Mean',\n} as const;\n\n/**\n * Type representing any valid boxplot section label.\n */\nexport type BoxplotSectionType = typeof BoxplotSection[keyof typeof BoxplotSection];\n","import type { BoxPoint, BoxSelector, MaidrLayer } from '@type/grammar';\nimport type { Movable } from '@type/movable';\nimport type { AudioState, BrailleState, TextState } from '@type/state';\nimport type { Dimension } from './abstract';\nimport { BoxplotSection } from '@type/boxplotSection';\nimport { Orientation } from '@type/grammar';\nimport { Constant } from '@util/constant';\nimport { MathUtil } from '@util/math';\nimport { Svg } from '@util/svg';\nimport { AbstractTrace } from './abstract';\nimport { MovableGrid } from './movable';\n\n/**\n * Concrete implementation of a box plot trace supporting vertical and horizontal orientations.\n * Handles boxplot sections (min, Q1, Q2, Q3, max, outliers) and rotor-based navigation.\n *\n * This is a pure box plot — violin-specific behavior lives in ViolinBoxTrace.\n */\nexport class BoxTrace extends AbstractTrace {\n  protected readonly supportsExtrema = false;\n  protected readonly movable: Movable;\n\n  private readonly points: BoxPoint[];\n  private readonly boxValues: (number[] | number)[][];\n  protected readonly highlightValues: (SVGElement[] | SVGElement)[][] | null;\n  protected highlightCenters:\n    | { x: number; y: number; row: number; col: number; element: SVGElement }[]\n    | null;\n\n  private readonly orientation: Orientation;\n  private readonly sections: string[];\n\n  private readonly min: number;\n  private readonly max: number;\n\n  /**\n   * Compute box values array based on section accessors and orientation.\n   * Handles the transformation from section-based to position-based layout.\n   *\n   * @param sectionAccessors - Array of functions that extract section values from BoxPoint\n   * @returns 2D array where layout depends on orientation:\n   *         - Vertical: [sections][positions]\n   *         - Horizontal: [positions][sections]\n   */\n  private computeBoxValues(sectionAccessors: ((p: BoxPoint) => number | number[])[]): (number[] | number)[][] {\n    if (this.orientation === Orientation.HORIZONTAL) {\n      return this.points.map(point =>\n        sectionAccessors.map(accessor => accessor(point)),\n      );\n    } else {\n      return sectionAccessors.map(accessor =>\n        this.points.map(point => accessor(point)),\n      );\n    }\n  }\n\n  constructor(layer: MaidrLayer) {\n    super(layer);\n\n    this.orientation = layer.orientation ?? Orientation.VERTICAL;\n\n    // For horizontal orientation, reverse points to match visual order (lower-left start)\n    if (this.orientation === Orientation.HORIZONTAL) {\n      this.points = [...(layer.data as BoxPoint[])].reverse();\n    } else {\n      this.points = layer.data as BoxPoint[];\n    }\n\n    // Standard box plot sections: full Tukey structure\n    const { sections, accessors } = this.buildStandardBoxDataSections();\n    this.sections = sections;\n    this.boxValues = this.computeBoxValues(accessors);\n\n    const flatBoxValues = this.boxValues.map(row =>\n      row.flatMap(cell => (Array.isArray(cell) ? cell : [cell])),\n    );\n    const filteredValues = flatBoxValues.map(row =>\n      row.filter(value => !Number.isNaN(value)),\n    );\n    this.min = MathUtil.minFrom2D(filteredValues);\n    this.max = MathUtil.maxFrom2D(filteredValues);\n\n    this.highlightValues = this.mapToSvgElements(\n      layer.selectors as BoxSelector[],\n    );\n\n    if (this.orientation === Orientation.HORIZONTAL) {\n      this.highlightValues?.reverse();\n    }\n\n    this.highlightCenters = this.mapSvgElementsToCenters();\n    this.movable = new MovableGrid<number[] | number>(this.boxValues, { row: 0 });\n  }\n\n  /**\n   * Build data sections and accessors for standard box plots.\n   * Exposes full Tukey structure including all quartiles.\n   */\n  private buildStandardBoxDataSections(): {\n    sections: string[];\n    accessors: ((p: BoxPoint) => number | number[])[];\n  } {\n    return {\n      sections: [\n        BoxplotSection.LOWER_OUTLIER,\n        BoxplotSection.MIN,\n        BoxplotSection.Q1,\n        BoxplotSection.Q2,\n        BoxplotSection.Q3,\n        BoxplotSection.MAX,\n        BoxplotSection.UPPER_OUTLIER,\n      ],\n      accessors: [\n        (p: BoxPoint) => p.lowerOutliers,\n        (p: BoxPoint) => p.min,\n        (p: BoxPoint) => p.q1,\n        (p: BoxPoint) => p.q2,\n        (p: BoxPoint) => p.q3,\n        (p: BoxPoint) => p.max,\n        (p: BoxPoint) => p.upperOutliers,\n      ],\n    };\n  }\n\n  public dispose(): void {\n    this.points.length = 0;\n    this.sections.length = 0;\n    super.dispose();\n  }\n\n  public override moveToIndex(row: number, col: number): boolean {\n    return super.moveToIndex(row, col);\n  }\n\n  protected get values(): (number[] | number)[][] {\n    return this.boxValues;\n  }\n\n  protected get audio(): AudioState {\n    const isHorizontal = this.orientation === Orientation.HORIZONTAL;\n    const value = this.boxValues[this.row][this.col];\n    const index = isHorizontal ? this.col : this.row;\n\n    const panning = Array.isArray(value)\n      ? value.length === 0 ? index : value[value.length - 1] - this.min\n      : Number.isNaN(value) ? index : value - this.min;\n    return {\n      freq: {\n        min: this.min,\n        max: this.max,\n        raw: this.boxValues[this.row][this.col],\n      },\n      panning: {\n        x: isHorizontal ? panning : this.row,\n        y: isHorizontal ? this.row : panning,\n        rows: isHorizontal ? this.boxValues.length : this.max - this.min,\n        cols: isHorizontal ? this.max - this.min : this.boxValues.length,\n      },\n    };\n  }\n\n  protected get braille(): BrailleState {\n    const isHorizontal = this.orientation === Orientation.HORIZONTAL;\n    const row = isHorizontal ? this.row : this.col;\n    const col = isHorizontal ? this.col : this.row;\n\n    return {\n      empty: false,\n      id: this.id,\n      values: this.points,\n      min: this.min,\n      max: this.max,\n      row,\n      col,\n    };\n  }\n\n  protected get text(): TextState {\n    const isHorizontal = this.orientation === Orientation.HORIZONTAL;\n    const point = isHorizontal ? this.points[this.row] : this.points[this.col];\n\n    const mainLabel = isHorizontal ? this.yAxis : this.xAxis;\n    const section = isHorizontal\n      ? this.sections[this.col]\n      : this.sections[this.row];\n\n    const crossLabel = isHorizontal ? this.xAxis : this.yAxis;\n    const crossValue = this.boxValues[this.row][this.col];\n\n    return {\n      main: { label: mainLabel, value: point.z },\n      cross: { label: crossLabel, value: crossValue },\n      section,\n      mainAxis: isHorizontal ? 'y' : 'x',\n      crossAxis: isHorizontal ? 'x' : 'y',\n    };\n  }\n\n  protected get dimension(): Dimension {\n    const isHorizontal = this.orientation === Orientation.HORIZONTAL;\n    return {\n      rows: isHorizontal ? this.boxValues.length : this.boxValues[this.row].length,\n      cols: isHorizontal ? this.boxValues[this.row].length : this.boxValues.length,\n    };\n  }\n\n  private mapToSvgElements(\n    selectors: BoxSelector[] | undefined,\n  ): (SVGElement[] | SVGElement)[][] | null {\n    if (!selectors || selectors.length !== this.points.length) {\n      return null;\n    }\n\n    const isVertical = this.orientation === Orientation.VERTICAL;\n    const svgElements = new Array<Array<SVGElement[] | SVGElement>>();\n\n    if (isVertical) {\n      for (let i = 0; i < this.sections.length; i++) {\n        svgElements.push(Array.from({ length: selectors.length }));\n      }\n    }\n\n    // Phase 1: Collect all original elements without cloning (prevents nth-child() DOM shifts)\n    const originals: Array<{\n      lowerOutliers: SVGElement[];\n      upperOutliers: SVGElement[];\n      min: SVGElement | null;\n      max: SVGElement | null;\n      iq: SVGElement | null;\n      q2: SVGElement | null;\n      q1Direct: SVGElement | null;\n      q3Direct: SVGElement | null;\n    }> = [];\n\n    selectors.forEach((selector) => {\n      const lowerOutliersOriginals = selector.lowerOutliers?.flatMap(s =>\n        Svg.selectAllElements(s, false),\n      ) ?? [];\n      const upperOutliersOriginals = selector.upperOutliers?.flatMap(s =>\n        Svg.selectAllElements(s, false),\n      ) ?? [];\n\n      const minOriginal = Svg.selectElement(selector.min, false);\n      const maxOriginal = Svg.selectElement(selector.max, false);\n      const iqOriginal = Svg.selectElement(selector.iq, false);\n      const q2Original = Svg.selectElement(selector.q2, false);\n\n      // Direct Q1/Q3 selectors bypass iq edge derivation (used by Plotly)\n      const q1DirectOriginal = selector.q1 ? Svg.selectElement(selector.q1, false) : null;\n      const q3DirectOriginal = selector.q3 ? Svg.selectElement(selector.q3, false) : null;\n\n      originals.push({\n        lowerOutliers: lowerOutliersOriginals,\n        upperOutliers: upperOutliersOriginals,\n        min: minOriginal,\n        max: maxOriginal,\n        iq: iqOriginal,\n        q2: q2Original,\n        q1Direct: q1DirectOriginal,\n        q3Direct: q3DirectOriginal,\n      });\n    });\n\n    // Phase 2: Clone and create elements from originals (DOM queries complete)\n    originals.forEach((original, boxIdx) => {\n      const lowerOutliers = original.lowerOutliers.map((el) => {\n        const clone = el.cloneNode(true) as SVGElement;\n        clone.setAttribute(Constant.VISIBILITY, Constant.HIDDEN);\n        el.insertAdjacentElement(Constant.AFTER_END, clone);\n        return clone;\n      });\n      const upperOutliers = original.upperOutliers.map((el) => {\n        const clone = el.cloneNode(true) as SVGElement;\n        clone.setAttribute(Constant.VISIBILITY, Constant.HIDDEN);\n        el.insertAdjacentElement(Constant.AFTER_END, clone);\n        return clone;\n      });\n\n      const min = this.cloneElementOrEmpty(original.min);\n      const max = this.cloneElementOrEmpty(original.max);\n      const q2 = this.cloneElementOrEmpty(original.q2);\n\n      // Use direct Q1/Q3 selectors if provided (Plotly: highlight entire box).\n      // Otherwise, derive Q1/Q3 line elements from iq edges (matplotlib/seaborn).\n      let q1: SVGElement;\n      let q3: SVGElement;\n      if (original.q1Direct && original.q3Direct) {\n        q1 = this.cloneElementOrEmpty(original.q1Direct);\n        q3 = this.cloneElementOrEmpty(original.q3Direct);\n      } else {\n        const isIqrReversed = this.layer.domMapping?.iqrDirection === 'reverse';\n        [q1, q3] = original.iq\n          ? (isVertical\n              ? isIqrReversed\n                ? [\n                    Svg.createLineElement(original.iq, 'top'),\n                    Svg.createLineElement(original.iq, 'bottom'),\n                  ]\n                : [\n                    Svg.createLineElement(original.iq, 'bottom'),\n                    Svg.createLineElement(original.iq, 'top'),\n                  ]\n              : [\n                  Svg.createLineElement(original.iq, 'left'),\n                  Svg.createLineElement(original.iq, 'right'),\n                ])\n          : [\n              Svg.createEmptyElement('line'),\n              Svg.createEmptyElement('line'),\n            ];\n      }\n\n      const sections = [lowerOutliers, min, q1, q2, q3, max, upperOutliers];\n\n      if (isVertical) {\n        sections.forEach((section, sectionIdx) => {\n          svgElements[sectionIdx][boxIdx] = section;\n        });\n      } else {\n        svgElements.push(sections);\n      }\n    });\n\n    return svgElements;\n  }\n\n  /**\n   * Clones an SVG element with hidden visibility or returns an empty element.\n   */\n  private cloneElementOrEmpty(original: SVGElement | null): SVGElement {\n    if (!original) {\n      return Svg.createEmptyElement();\n    }\n    const clone = original.cloneNode(true) as SVGElement;\n    clone.setAttribute(Constant.VISIBILITY, Constant.HIDDEN);\n    original.insertAdjacentElement(Constant.AFTER_END, clone);\n    return clone;\n  }\n\n  /**\n   * Moves to the next boxplot section that matches the comparison criteria.\n   */\n  public moveToNextCompareValue(direction: 'left' | 'right' | 'up' | 'down', type: 'lower' | 'higher'): boolean {\n    const currentGroup = this.row;\n    if (currentGroup < 0 || currentGroup >= this.boxValues.length) {\n      return false;\n    }\n    let values: any[] = [];\n    let currentIndex = 0;\n\n    if (direction === 'left' || direction === 'right') {\n      values = this.boxValues[this.row];\n      currentIndex = this.col;\n    } else {\n      values = this.boxValues.map(box => box[this.col]);\n      currentIndex = this.row;\n    }\n    if (values.length <= 0) {\n      return false;\n    }\n\n    const step = direction === 'right' || direction === 'up' ? 1 : -1;\n    let i = currentIndex + step;\n\n    while (i >= 0 && i < values.length) {\n      const current_value = values[currentIndex];\n      const next_value = values[i];\n      if (Array.isArray(next_value) || Array.isArray(current_value)) {\n        return true;\n      }\n\n      if (this.compare(next_value, current_value, type)) {\n        this.set_point(direction, i);\n        this.updateVisualPointPosition();\n        this.notifyStateUpdate();\n        return true;\n      }\n      i += step;\n    }\n    this.notifyRotorBounds();\n    return false;\n  }\n\n  /**\n   * Sets the current point based on direction and index.\n   */\n  public set_point(direction: 'left' | 'right' | 'up' | 'down', pointIndex: number): void {\n    if (direction === 'left' || direction === 'right') {\n      this.col = pointIndex;\n    } else {\n      this.row = pointIndex;\n    }\n  }\n\n  public moveUpRotor(mode: 'lower' | 'higher'): boolean {\n    if (this.orientation === Orientation.VERTICAL) {\n      this.moveOnce('UPWARD');\n      return true;\n    }\n    return this.moveToNextCompareValue('up', mode);\n  }\n\n  public moveDownRotor(mode: 'lower' | 'higher'): boolean {\n    if (this.orientation === Orientation.VERTICAL) {\n      this.moveOnce('DOWNWARD');\n      return true;\n    }\n    return this.moveToNextCompareValue('down', mode);\n  }\n\n  public moveLeftRotor(mode: 'lower' | 'higher'): boolean {\n    if (this.orientation === Orientation.HORIZONTAL) {\n      this.moveOnce('BACKWARD');\n      return true;\n    }\n    return this.moveToNextCompareValue('left', mode);\n  }\n\n  public moveRightRotor(mode: 'lower' | 'higher'): boolean {\n    if (this.orientation === Orientation.HORIZONTAL) {\n      this.moveOnce('FORWARD');\n      return true;\n    }\n    return this.moveToNextCompareValue('right', mode);\n  }\n\n  protected mapSvgElementsToCenters():\n    | { x: number; y: number; row: number; col: number; element: SVGElement }[]\n    | null {\n    const svgElements: (SVGElement | SVGElement[])[][] | null = this.highlightValues;\n\n    if (!svgElements) {\n      return null;\n    }\n\n    const centers: {\n      x: number;\n      y: number;\n      row: number;\n      col: number;\n      element: SVGElement;\n    }[] = [];\n    for (let row = 0; row < svgElements.length; row++) {\n      for (let col = 0; col < svgElements[row].length; col++) {\n        const element = svgElements[row][col];\n        const targetElement = Array.isArray(element) ? element[0] : element;\n        if (targetElement) {\n          const bbox = targetElement.getBoundingClientRect();\n          centers.push({\n            x: bbox.x + bbox.width / 2,\n            y: bbox.y + bbox.height / 2,\n            row,\n            col,\n            element: targetElement,\n          });\n        }\n      }\n    }\n\n    return centers;\n  }\n\n  public findNearestPoint(\n    x: number,\n    y: number,\n  ): { element: SVGElement; row: number; col: number } | null {\n    if (!this.highlightCenters) {\n      return null;\n    }\n\n    let nearestDistance = Infinity;\n    let nearestIndex = -1;\n\n    for (let i = 0; i < this.highlightCenters.length; i++) {\n      const center = this.highlightCenters[i];\n      const distance = Math.hypot(center.x - x, center.y - y);\n      if (distance < nearestDistance) {\n        nearestDistance = distance;\n        nearestIndex = i;\n      }\n    }\n\n    if (nearestIndex === -1) {\n      return null;\n    }\n\n    return {\n      element: this.highlightCenters[nearestIndex].element,\n      row: this.highlightCenters[nearestIndex].row,\n      col: this.highlightCenters[nearestIndex].col,\n    };\n  }\n\n  /**\n   * Moves to the nearest point at the specified coordinates (disabled for boxplots).\n   */\n  public moveToPoint(_x: number, _y: number): void {\n    // Disabled for boxplots\n  }\n}\n","import type { Dimension } from '@model/abstract';\nimport type { ExtremaTarget } from '@type/extrema';\nimport type {\n  CandlestickPoint,\n  CandlestickSelector,\n  CandlestickTrend,\n  MaidrLayer,\n} from '@type/grammar';\nimport type { Movable, MovableDirection } from '@type/movable';\nimport type { XValue } from '@type/navigation';\nimport type { AudioState, BrailleState, TextState } from '@type/state';\nimport { AbstractTrace } from '@model/abstract';\nimport { NavigationService } from '@service/navigation';\nimport { Orientation } from '@type/grammar';\nimport { MathUtil } from '@util/math';\nimport { Svg } from '@util/svg';\nimport { MovableGrid } from './movable';\n\n/**\n * Type alias for highlight elements - can be single elements or arrays of elements\n */\ntype HighlightValue = SVGElement | SVGElement[];\n\nconst TREND = 'trend';\nconst VOLATILITY_PRECISION_MULTIPLIER = 100;\n\n/**\n * Segment types for candlestick data (open, high, low, close)\n */\ntype CandlestickSegmentType = 'open' | 'high' | 'low' | 'close';\nconst SECTIONS = ['volatility', 'open', 'high', 'low', 'close'] as const;\n\ntype CandlestickNavSegmentType = 'volatility' | CandlestickSegmentType;\n\nexport class Candlestick extends AbstractTrace {\n  protected readonly supportsExtrema = true;\n  protected readonly movable: Movable;\n\n  private readonly candles: CandlestickPoint[];\n  private readonly candleValues: number[][];\n\n  private readonly orientation: Orientation;\n  // Track navigation state separately from visual highlighting state\n  private currentSegmentType: CandlestickNavSegmentType | null = 'open';\n  private currentPointIndex: number = 0;\n\n  // Performance optimization: Pre-computed lookup tables\n  private readonly sortedSegmentsByPoint: CandlestickNavSegmentType[][];\n  private readonly segmentPositionMaps: Map<\n    CandlestickNavSegmentType,\n    number\n  >[];\n\n  private readonly sections: typeof SECTIONS;\n\n  private readonly min: number;\n  private readonly max: number;\n\n  protected readonly highlightValues: HighlightValue[][] | null;\n  protected highlightCenters:\n    | { x: number; y: number; row: number; col: number; element: SVGElement }[]\n    | null;\n\n  // Service dependency for navigation logic\n  protected readonly navigationService: NavigationService;\n\n  /**\n   * Creates a new Candlestick instance from a MAIDR layer\n   * @param layer - The MAIDR layer containing candlestick data\n   */\n  constructor(layer: MaidrLayer) {\n    super(layer);\n\n    // Initialize navigation service\n    this.navigationService = new NavigationService();\n\n    const data = layer.data as CandlestickPoint[];\n    this.candles = data.map(candle => ({\n      ...candle,\n      volatility:\n        Math.round(\n          (candle.high - candle.low) * VOLATILITY_PRECISION_MULTIPLIER,\n        ) / VOLATILITY_PRECISION_MULTIPLIER,\n      trend:\n        candle.close > candle.open\n          ? 'Bull'\n          : candle.close < candle.open\n            ? 'Bear'\n            : 'Neutral',\n    }));\n\n    this.orientation = layer.orientation ?? Orientation.VERTICAL;\n    this.sections = SECTIONS;\n\n    this.candleValues = this.sections.map(key =>\n      this.candles.map(c => c[key]),\n    );\n    const options = this.orientation === Orientation.HORIZONTAL\n      ? { col: this.sections.length - 1 }\n      : { row: this.sections.length - 1 };\n    this.movable = new MovableGrid<number>(this.candleValues, options);\n\n    this.min = MathUtil.minFrom2D(this.candleValues);\n    this.max = MathUtil.maxFrom2D(this.candleValues);\n\n    // Pre-compute sorted segments and position maps for performance\n    this.sortedSegmentsByPoint = this.precomputeSortedSegments();\n    this.segmentPositionMaps = this.precomputePositionMaps();\n\n    // Initialize navigation state\n    this.currentPointIndex = 0;\n    this.currentSegmentType = 'close';\n\n    // Initialize visual positioning for highlighting (keep original structure)\n    if (this.orientation === Orientation.HORIZONTAL) {\n      this.col = 0; // Points to 'open' segment index in sections array\n    } else {\n      this.row = 0; // Points to 'open' segment index in sections array\n    }\n\n    this.highlightValues = this.mapToSvgElements(\n      layer.selectors as string | string[] | CandlestickSelector | undefined,\n    );\n    this.highlightCenters = this.mapSvgElementsToCenters();\n  }\n\n  /**\n   * Pre-computes sorted segments for all candlestick points for O(1) lookup\n   * @returns Array of sorted segment types for each candlestick point\n   */\n  private precomputeSortedSegments(): CandlestickNavSegmentType[][] {\n    return this.candles.map((candle) => {\n      // Always put 'volatility' first, then sort OHLC by value ascending\n      const ohlcSegments: CandlestickSegmentType[] = [\n        'low',\n        'open',\n        'close',\n        'high',\n      ];\n      const sortedOhlc = ohlcSegments\n        .map(seg => [seg, candle[seg]] as [CandlestickSegmentType, number])\n        .sort((a, b) => a[1] - b[1])\n        .map(pair => pair[0]);\n      return ['volatility', ...sortedOhlc];\n    });\n  }\n\n  /**\n   * Pre-computes position maps for O(1) lookup of segment positions\n   * @returns Array of position maps for each candlestick point\n   */\n  private precomputePositionMaps(): Map<CandlestickNavSegmentType, number>[] {\n    return this.sortedSegmentsByPoint.map((sortedSegments) => {\n      const positionMap = new Map<CandlestickNavSegmentType, number>();\n      sortedSegments.forEach((segmentType, index) => {\n        positionMap.set(segmentType, index);\n      });\n      return positionMap;\n    });\n  }\n\n  /**\n   * Gets the position index of a segment type in the sorted segments for a point (O(1) lookup)\n   * @param pointIndex - Index of the candlestick point\n   * @param segmentType - Type of segment to find\n   * @returns Position index of the segment in sorted order\n   */\n  private getSegmentPositionInSortedOrder(\n    pointIndex: number,\n    segmentType: CandlestickNavSegmentType,\n  ): number {\n    return this.segmentPositionMaps[pointIndex].get(segmentType) ?? 0;\n  }\n\n  /**\n   * Gets the segment type at a specific position in the sorted order for a point (O(1) lookup)\n   * @param pointIndex - Index of the candlestick point\n   * @param position - Position in the sorted order\n   * @returns Segment type at the specified position\n   */\n  private getSegmentTypeAtSortedPosition(\n    pointIndex: number,\n    position: number,\n  ): CandlestickNavSegmentType {\n    const sortedSegments = this.sortedSegmentsByPoint[pointIndex];\n    return sortedSegments[position] ?? 'open';\n  }\n\n  /**\n   * Updates visual position for segment highlighting using dynamic value-sorted order\n   */\n  private updateVisualSegmentPosition(): void {\n    // Use the sorted navigation order (with volatility first)\n    const navOrder = this.sortedSegmentsByPoint[this.currentPointIndex];\n    const dynamicSegmentPosition = navOrder.indexOf(\n      this.currentSegmentType ?? 'open',\n    );\n    if (this.orientation === Orientation.HORIZONTAL) {\n      this.col = dynamicSegmentPosition;\n    } else {\n      this.row = dynamicSegmentPosition;\n    }\n  }\n\n  /**\n   * Updates visual position for point highlighting and segment position\n   */\n  protected updateVisualPointPosition(): void {\n    if (this.orientation === Orientation.HORIZONTAL) {\n      this.row = this.currentPointIndex;\n    } else {\n      this.col = this.currentPointIndex;\n    }\n\n    // Also update segment position since candlestick needs both\n    this.updateVisualSegmentPosition();\n  }\n\n  /**\n   * Handles initial entry into the candlestick chart, setting default position\n   */\n  protected handleInitialEntry(): void {\n    this.isInitialEntry = false;\n    this.currentPointIndex = Math.max(\n      0,\n      Math.min(this.currentPointIndex, this.candles.length - 1),\n    );\n    // Always start at 'close' on initial entry\n    this.currentSegmentType = 'close';\n    this.updateVisualSegmentPosition();\n  }\n\n  /**\n   * Moves navigation position one step in the specified direction\n   * @param direction - Direction to move (UPWARD, DOWNWARD, FORWARD, BACKWARD)\n   */\n  public moveOnce(direction: MovableDirection): boolean {\n    if (this.isInitialEntry) {\n      this.handleInitialEntry();\n      this.notifyStateUpdate();\n      return true;\n    }\n\n    if (!this.isMovable(direction)) {\n      this.notifyOutOfBounds();\n      return false;\n    }\n\n    switch (direction) {\n      case 'UPWARD':\n      case 'DOWNWARD': {\n        // Vertical movement: navigate between segments within the same candlestick (value-sorted)\n        const navOrder = this.sortedSegmentsByPoint[this.currentPointIndex];\n        const currentSegmentPosition = navOrder.indexOf(\n          this.currentSegmentType ?? 'open',\n        );\n        if (currentSegmentPosition === -1) {\n          this.notifyOutOfBounds();\n          return false;\n        }\n        const newSegmentPosition\n          = direction === 'UPWARD'\n            ? currentSegmentPosition + 1\n            : currentSegmentPosition - 1;\n        if (newSegmentPosition >= 0 && newSegmentPosition < navOrder.length) {\n          this.currentSegmentType = navOrder[newSegmentPosition];\n          this.updateVisualSegmentPosition();\n        } else {\n          this.notifyOutOfBounds();\n          return false;\n        }\n        break;\n      }\n\n      case 'FORWARD':\n      case 'BACKWARD': {\n        // Horizontal movement: navigate between candlesticks while preserving segment type\n        const newPointIndex\n          = direction === 'FORWARD'\n            ? this.currentPointIndex + 1\n            : this.currentPointIndex - 1;\n\n        if (newPointIndex >= 0 && newPointIndex < this.candles.length) {\n          this.currentPointIndex = newPointIndex;\n          this.updateVisualPointPosition();\n          this.updateVisualSegmentPosition();\n        } else {\n          this.notifyOutOfBounds();\n          return false;\n        }\n        break;\n      }\n    }\n\n    this.notifyStateUpdate();\n    return true;\n  }\n\n  public override moveToExtreme(direction: MovableDirection): boolean {\n    if (this.isInitialEntry) {\n      this.handleInitialEntry();\n    }\n\n    switch (direction) {\n      case 'UPWARD': {\n        // Move to the highest value segment in current candlestick\n        const currentSorted\n          = this.sortedSegmentsByPoint[this.currentPointIndex];\n        this.currentSegmentType = currentSorted[currentSorted.length - 1];\n        this.updateVisualSegmentPosition();\n        break;\n      }\n      case 'DOWNWARD': {\n        // Move to the lowest value segment in current candlestick\n        const currentSortedDown\n          = this.sortedSegmentsByPoint[this.currentPointIndex];\n        this.currentSegmentType = currentSortedDown[0];\n        this.updateVisualSegmentPosition();\n        break;\n      }\n      case 'FORWARD': {\n        // Move to the last candlestick (rightmost)\n        this.currentPointIndex = this.candles.length - 1;\n        this.updateVisualPointPosition();\n        this.updateVisualSegmentPosition();\n        break;\n      }\n      case 'BACKWARD': {\n        // Move to the first candlestick (leftmost)\n        this.currentPointIndex = 0;\n        this.updateVisualPointPosition();\n        this.updateVisualSegmentPosition();\n        break;\n      }\n    }\n\n    this.notifyStateUpdate();\n    return true;\n  }\n\n  public moveToIndex(row: number, col: number): boolean {\n    // Delegate navigation logic to service and only handle data state updates\n    if (this.isInitialEntry) {\n      this.handleInitialEntry();\n    }\n\n    // Use navigation service to compute the mapping\n    const { pointIndex, segmentType }\n      = this.navigationService.computeIndexAndSegment(\n        row,\n        col,\n        this.orientation,\n        this.sections,\n      );\n\n    // Update Core Model state\n    this.currentPointIndex = pointIndex;\n    this.currentSegmentType = segmentType;\n    this.row = row;\n    this.col = col;\n\n    this.updateVisualSegmentPosition();\n    this.updateVisualPointPosition();\n    this.notifyStateUpdate();\n    return true;\n  }\n\n  /**\n   * Checks if movement to the target position or direction is possible\n   * @param target - Target position array or movement direction\n   * @returns True if movement is possible, false otherwise\n   */\n  public isMovable(target: [number, number] | MovableDirection): boolean {\n    if (Array.isArray(target)) {\n      // For direct position targeting, use parent logic\n      return super.isMovable(target);\n    }\n\n    if (this.isInitialEntry) {\n      return true;\n    }\n\n    switch (target) {\n      case 'UPWARD':\n      case 'DOWNWARD': {\n        // Vertical movement: check if we can move between segments within the same candlestick\n        const navOrder = this.sortedSegmentsByPoint[this.currentPointIndex];\n        const currentSegmentPosition = navOrder.indexOf(\n          this.currentSegmentType ?? 'open',\n        );\n        const newSegmentPosition\n          = target === 'UPWARD'\n            ? currentSegmentPosition + 1\n            : currentSegmentPosition - 1;\n        return newSegmentPosition >= 0 && newSegmentPosition < navOrder.length;\n      }\n\n      case 'FORWARD':\n      case 'BACKWARD': {\n        // Horizontal movement: check if we can move between candlesticks\n        const newPointIndex\n          = target === 'FORWARD'\n            ? this.currentPointIndex + 1\n            : this.currentPointIndex - 1;\n        return newPointIndex >= 0 && newPointIndex < this.candles.length;\n      }\n    }\n  }\n\n  /**\n   * Cleans up resources and disposes of the candlestick instance\n   */\n  public dispose(): void {\n    this.navigationService.dispose();\n    this.candles.length = 0;\n    super.dispose();\n  }\n\n  /**\n   * Gets the 2D array of candlestick values\n   * @returns Array of candlestick values for all segments\n   */\n  protected get values(): number[][] {\n    return this.candleValues;\n  }\n\n  protected get audio(): AudioState {\n    let value: number;\n    const isHorizontal = this.orientation === Orientation.HORIZONTAL;\n    if (this.currentSegmentType === 'volatility') {\n      value = this.candles[this.currentPointIndex].volatility;\n    } else if (this.currentSegmentType) {\n      value = this.candles[this.currentPointIndex][this.currentSegmentType];\n    } else {\n      value = this.candles[this.currentPointIndex].open;\n    }\n\n    return {\n      freq: {\n        min: this.min,\n        max: this.max,\n        raw: value,\n      },\n      panning: {\n        x: isHorizontal ? this.row : this.col,\n        y: isHorizontal ? this.col : this.row,\n        rows: isHorizontal ? this.candleValues.length : this.candleValues[this.row].length,\n        cols: isHorizontal ? this.candleValues[this.row].length : this.candleValues.length,\n      },\n      trend: this.candles[this.currentPointIndex].trend,\n    };\n  }\n\n  protected get braille(): BrailleState {\n    // Return the braille state with the current candle values and segment type\n\n    // get an array for bear or bull\n    const bearOrBull = this.candles.map(candle => candle.trend);\n\n    // Set row to the position in navigation order (volatility first, then value-sorted OHLC) for the current segment of the current candle\n    const valueSortedRow = this.getSegmentPositionInSortedOrder(\n      this.currentPointIndex,\n      this.currentSegmentType ?? this.sections[0],\n    );\n    this.row = valueSortedRow;\n\n    // Compute per-row min/max for all segments (including volatility)\n    const perRowMin = this.candleValues.map(row => Math.min(...row));\n    const perRowMax = this.candleValues.map(row => Math.max(...row));\n\n    return {\n      empty: false,\n      id: this.id,\n      values: this.candleValues, // includes volatility and OHLC\n      min: perRowMin,\n      max: perRowMax,\n      row: this.row,\n      col: this.col,\n      custom: bearOrBull,\n    };\n  }\n\n  /**\n   * Collects SVG elements matching the provided selectors\n   * @param selector - CSS selector(s) to match elements\n   * @returns Array of matched SVG elements\n   */\n  private collectElements(selector?: string | string[]): SVGElement[] {\n    if (!selector)\n      return [];\n    const selectorArray = Array.isArray(selector) ? selector : [selector];\n    const elements: SVGElement[] = [];\n    for (const sel of selectorArray) {\n      elements.push(...Svg.selectAllElements(sel));\n    }\n    return elements;\n  }\n\n  /**\n   * Gets an element at the specified index from an array, or null if out of bounds\n   * @param array - Array of SVG elements\n   * @param index - Index to retrieve\n   * @returns SVG element at index or null\n   */\n  private getElementAt(array: SVGElement[], index: number): SVGElement | null {\n    return index < array.length ? array[index] : null;\n  }\n\n  /**\n   * Maps candlestick selectors to 2D array of SVG elements for highlighting\n   * @param selectors - CSS selectors or structured candlestick selectors\n   * @returns 2D array of SVG elements or null if no selectors provided\n   */\n  protected mapToSvgElements(\n    selectors: string | string[] | CandlestickSelector | undefined,\n  ): HighlightValue[][] | null {\n    if (!selectors) {\n      return null;\n    }\n\n    // Legacy: a single selector for all elements\n    if (typeof selectors === 'string' || Array.isArray(selectors)) {\n      const selectorString = Array.isArray(selectors)\n        ? selectors[0] || ''\n        : selectors;\n      const allElements = Svg.selectAllElements(selectorString);\n\n      const segmentElements: HighlightValue[][] = [];\n      for (let pos = 0; pos < this.sections.length; pos++) {\n        segmentElements[pos] = [];\n        for (\n          let pointIndex = 0;\n          pointIndex < this.candles.length;\n          pointIndex++\n        ) {\n          const elementIndex = pointIndex < allElements.length ? pointIndex : 0;\n          segmentElements[pos][pointIndex] = allElements[elementIndex];\n        }\n      }\n      return segmentElements;\n    }\n\n    // Structured selectors\n    const cs = selectors as CandlestickSelector;\n    const N = this.candles.length;\n\n    const bodies = this.collectElements(cs.body);\n    let highs = this.collectElements(cs.wickHigh);\n    let lows = this.collectElements(cs.wickLow);\n    // Fallback to a single combined wick if provided\n    if (highs.length === 0 || lows.length === 0) {\n      const combined = this.collectElements(cs.wick);\n      if (combined.length > 0) {\n        if (highs.length === 0)\n          highs = combined;\n        if (lows.length === 0)\n          lows = combined;\n      }\n    }\n    const opens = this.collectElements(cs.open);\n    const closes = this.collectElements(cs.close);\n    // Volatility will be composed from [wickHigh, body, wickLow]; no direct selectors used\n\n    const derivedOpen: SVGElement[] = Array.from({ length: N }, () =>\n      Svg.createEmptyElement());\n    const derivedClose: SVGElement[] = Array.from({ length: N }, () =>\n      Svg.createEmptyElement());\n    const derivedVolatility: SVGElement[] = Array.from({ length: N }, () =>\n      Svg.createEmptyElement());\n\n    for (let i = 0; i < N; i++) {\n      // Open (explicit otherwise derive from body using data)\n      let openEl = this.getElementAt(opens, i);\n      if (!openEl) {\n        const body = this.getElementAt(bodies, i);\n        if (body) {\n          const { open, close } = this.candles[i];\n          const edge: 'top' | 'bottom'\n            = close > open ? 'bottom' : close < open ? 'top' : 'bottom';\n          openEl = Svg.createLineElement(body, edge);\n        } else {\n          openEl = Svg.createEmptyElement();\n        }\n      }\n      derivedOpen[i] = openEl;\n\n      // Close (explicit otherwise derive from body using data)\n      let closeEl = this.getElementAt(closes, i);\n      if (!closeEl) {\n        const body = this.getElementAt(bodies, i);\n        if (body) {\n          const { open, close } = this.candles[i];\n          const edge: 'top' | 'bottom'\n            = close > open ? 'top' : close < open ? 'bottom' : 'top';\n          closeEl = Svg.createLineElement(body, edge);\n        } else {\n          closeEl = Svg.createEmptyElement();\n        }\n      }\n      derivedClose[i] = closeEl;\n\n      // Volatility: composed later as [high, body, low]; no single element here\n      derivedVolatility[i] = Svg.createEmptyElement();\n    }\n\n    // Build 2D array in value-sorted navigation order per point\n    const segmentElements: HighlightValue[][] = Array.from(\n      { length: this.sections.length },\n      () => Array.from({ length: N }, () => Svg.createEmptyElement()),\n    );\n\n    for (let pointIndex = 0; pointIndex < N; pointIndex++) {\n      const navOrder = this.sortedSegmentsByPoint[pointIndex]; // ['volatility', ...sorted OHLC]\n      for (let pos = 0; pos < navOrder.length; pos++) {\n        const seg = navOrder[pos];\n        let el: HighlightValue;\n        switch (seg) {\n          case 'volatility':\n            {\n              const parts: SVGElement[] = [];\n              const body = this.getElementAt(bodies, pointIndex);\n              const hi = this.getElementAt(highs, pointIndex) ?? body;\n              const lo = this.getElementAt(lows, pointIndex) ?? body;\n              if (hi)\n                parts.push(hi);\n              if (body)\n                parts.push(body);\n              if (lo)\n                parts.push(lo);\n              const unique = Array.from(new Set(parts));\n              el = unique.length > 0 ? unique : [Svg.createEmptyElement()];\n            }\n            break;\n          case 'open':\n            el = derivedOpen[pointIndex];\n            break;\n          case 'close':\n            el = derivedClose[pointIndex];\n            break;\n          case 'high':\n            el\n              = this.getElementAt(highs, pointIndex)\n                ?? this.getElementAt(bodies, pointIndex)\n                ?? Svg.createEmptyElement();\n            break;\n          case 'low':\n            el\n              = this.getElementAt(lows, pointIndex)\n                ?? this.getElementAt(bodies, pointIndex)\n                ?? Svg.createEmptyElement();\n            break;\n          default:\n            el = Svg.createEmptyElement();\n        }\n        segmentElements[pos][pointIndex] = el;\n      }\n    }\n\n    return segmentElements;\n  }\n\n  protected get text(): TextState {\n    const point = this.candles[this.currentPointIndex];\n    const isHorizontal = this.orientation === Orientation.HORIZONTAL;\n    let crossValue: number;\n    if (this.currentSegmentType === 'volatility') {\n      crossValue = point.volatility;\n    } else if (this.currentSegmentType) {\n      crossValue = point[this.currentSegmentType];\n    } else {\n      crossValue = point.open;\n    }\n\n    return {\n      main: {\n        label: isHorizontal ? this.yAxis : this.xAxis,\n        value: point.value,\n      },\n      cross: {\n        label: isHorizontal ? this.xAxis : this.yAxis,\n        value: crossValue,\n      },\n      section: this.currentSegmentType ?? 'open',\n      z: { label: TREND, value: point.trend },\n      mainAxis: isHorizontal ? 'y' : 'x',\n      crossAxis: isHorizontal ? 'x' : 'y',\n    };\n  }\n\n  /**\n   * Gets the current candlestick trend for audio palette selection\n   * @returns The trend of the current candlestick point\n   */\n  public getCurrentTrend(): CandlestickTrend {\n    return this.candles[this.currentPointIndex].trend;\n  }\n\n  /**\n   * Gets the current X value from the candlestick trace\n   * @returns The current X value or null if not available\n   */\n  public getCurrentXValue(): XValue | null {\n    if (\n      this.currentPointIndex >= 0\n      && this.currentPointIndex < this.candles.length\n    ) {\n      return this.candles[this.currentPointIndex].value;\n    }\n    return null;\n  }\n\n  /**\n   * Moves the candlestick to the position that matches the given X value\n   * @param xValue - The X value to move to\n   * @returns True if the position was found and set, false otherwise\n   */\n  public moveToXValue(xValue: XValue): boolean {\n    const targetIndex = this.candles.findIndex(\n      candle => candle.value === xValue,\n    );\n    if (targetIndex !== -1) {\n      this.currentPointIndex = targetIndex;\n      this.currentSegmentType = 'close'; // Default to close segment\n      this.updateVisualPointPosition();\n      this.updateVisualSegmentPosition();\n      this.notifyStateUpdate();\n      return true;\n    }\n    return false;\n  }\n\n  /**\n   * Gets available X values for navigation\n   * @returns Array of X values\n   */\n  public getAvailableXValues(): XValue[] {\n    return this.candles.map(candle => candle.value);\n  }\n\n  /**\n   * Gets extrema targets for the current candlestick trace with labels and descriptions\n   * @returns Array of extrema targets for navigation\n   */\n  public getExtremaTargets(): ExtremaTarget[] {\n    const targets: ExtremaTarget[] = [];\n    const currentSegment = this.currentSegmentType ?? 'open';\n\n    // Only add extrema for the current segment\n    if (currentSegment === 'volatility') {\n      // For volatility, find all max and min values (there could be multiple)\n      const volatilityValues = this.candles.map((c, index) => ({\n        value: c.volatility,\n        index,\n      }));\n      // Find all maximum values (there could be multiple candles with the same max volatility)\n      const maxVolatility = Math.max(...volatilityValues.map(v => v.value));\n      const maxVolatilityIndices = volatilityValues\n        .filter(v => v.value === maxVolatility)\n        .map(v => v.index);\n\n      // Find all minimum values\n      const minVolatility = Math.min(...volatilityValues.map(v => v.value));\n      const minVolatilityIndices = volatilityValues\n        .filter(v => v.value === minVolatility)\n        .map(v => v.index);\n\n      // Add all max volatility targets\n      maxVolatilityIndices.forEach((index, _count) => {\n        const candle = this.candles[index];\n        targets.push({\n          label: `Max Volatility at ${candle.value}`,\n          value: candle.volatility,\n          pointIndex: index,\n          segment: 'volatility',\n          type: 'max',\n          navigationType: 'point',\n          xValue: candle.value,\n        });\n      });\n\n      // Add all min volatility targets\n      minVolatilityIndices.forEach((index, _count) => {\n        const candle = this.candles[index];\n        targets.push({\n          label: `Min Volatility at ${candle.value}`,\n          value: candle.volatility,\n          pointIndex: index,\n          segment: 'volatility',\n          type: 'min',\n          navigationType: 'point',\n          xValue: candle.value,\n        });\n      });\n    } else {\n      // For OHLC segments, find all min and max values\n      const segmentValues = this.candles.map((c, index) => ({\n        value: c[currentSegment],\n        index,\n        xValue: c.value,\n      }));\n      // Find all maximum values\n      const maxValue = Math.max(...segmentValues.map(v => v.value));\n      const maxIndices = segmentValues\n        .filter(v => v.value === maxValue)\n        .map(v => v.index);\n\n      // Find all minimum values\n      const minValue = Math.min(...segmentValues.map(v => v.value));\n      const minIndices = segmentValues\n        .filter(v => v.value === minValue)\n        .map(v => v.index);\n\n      // Add all max targets\n      maxIndices.forEach((index, _count) => {\n        const candle = this.candles[index];\n        const segmentLabel\n          = currentSegment.charAt(0).toUpperCase() + currentSegment.slice(1);\n        targets.push({\n          label: `Max ${segmentLabel} at ${candle.value}`,\n          value: candle[currentSegment],\n          pointIndex: index,\n          segment: currentSegment,\n          type: 'max',\n          navigationType: 'point',\n          xValue: candle.value,\n        });\n      });\n\n      // Add all min targets\n      minIndices.forEach((index, _count) => {\n        const candle = this.candles[index];\n        const segmentLabel\n          = currentSegment.charAt(0).toUpperCase() + currentSegment.slice(1);\n        targets.push({\n          label: `Min ${segmentLabel} at ${candle.value}`,\n          value: candle[currentSegment],\n          pointIndex: index,\n          segment: currentSegment,\n          type: 'min',\n          navigationType: 'point',\n          xValue: candle.value,\n        });\n      });\n    }\n\n    return targets;\n  }\n\n  /**\n   * Navigates to a specific extrema target\n   * @param target - The extrema target to navigate to\n   */\n  public navigateToExtrema(target: ExtremaTarget): void {\n    // Update the current point index\n    this.currentPointIndex = target.pointIndex;\n\n    // Update the current segment type\n    this.currentSegmentType = target.segment as CandlestickNavSegmentType;\n\n    // Use common finalization method\n    this.finalizeExtremaNavigation();\n  }\n\n  /**\n   * Moves to the next value in the specified direction that matches the comparison type\n   * @param direction - Direction to search (left or right)\n   * @param type - Comparison type (lower or higher)\n   * @returns True if a matching value was found and moved to\n   */\n  public moveToNextCompareValue(direction: 'left' | 'right', type: 'lower' | 'higher'): boolean {\n    const currentGroup = this.row;\n    if (currentGroup < 0 || currentGroup >= this.candles.length) {\n      return false;\n    }\n    const currentSegment = this.currentSegmentType ?? 'open';\n\n    const segmentValues = this.candles.map((c, index) => ({\n      value: c[currentSegment],\n      index,\n      xValue: c.value,\n    }));\n\n    const currentIndex = this.col;\n    const step = direction === 'right' ? 1 : -1;\n    let i = currentIndex + step;\n    while (i >= 0 && i < segmentValues.length) {\n      if (this.compare(segmentValues[i].value, segmentValues[currentIndex].value, type)) {\n        this.col = i;\n        this.currentPointIndex = i;\n        this.updateVisualPointPosition();\n        this.notifyStateUpdate();\n        return true;\n      }\n      i += step;\n    }\n    this.notifyRotorBounds();\n    return false;\n  }\n\n  /**\n   * Moves upward between segments within a candle in rotor mode\n   * @returns True if the move was successful\n   */\n  public moveUpRotor(): boolean {\n    this.moveOnce('UPWARD');\n    return true;\n  }\n\n  /**\n   * Moves downward between segments within a candle in rotor mode\n   * @returns True if the move was successful\n   */\n  public moveDownRotor(): boolean {\n    this.moveOnce('DOWNWARD');\n    return true;\n  }\n\n  /**\n   * Maps SVG elements to their center coordinates for click navigation\n   * @returns Array of center coordinates with row/col indices or null\n   */\n  protected mapSvgElementsToCenters():\n    | { x: number; y: number; row: number; col: number; element: SVGElement }[]\n    | null {\n    const svgElements: (SVGElement | SVGElement[])[][] | null = this.highlightValues;\n\n    if (!svgElements) {\n      return null;\n    }\n\n    const centers: {\n      x: number;\n      y: number;\n      row: number;\n      col: number;\n      element: SVGElement;\n    }[] = [];\n    for (let row = 0; row < svgElements.length; row++) {\n      for (let col = 0; col < svgElements[row].length; col++) {\n        const element = svgElements[row][col];\n        const targetElement = Array.isArray(element) ? element[0] : element;\n        if (targetElement) {\n          const bbox = targetElement.getBoundingClientRect();\n          centers.push({\n            x: bbox.x + bbox.width / 2,\n            y: bbox.y + bbox.height / 2,\n            row,\n            col,\n            element: targetElement,\n          });\n        }\n      }\n    }\n\n    return centers;\n  }\n\n  /**\n   * Finds the nearest candlestick point to the given coordinates\n   * @param x - X coordinate\n   * @param y - Y coordinate\n   * @returns Nearest point information or null\n   */\n  public findNearestPoint(\n    x: number,\n    y: number,\n  ): { element: SVGElement; row: number; col: number } | null {\n    // loop through highlightCenters to find nearest point\n    if (!this.highlightCenters) {\n      return null;\n    }\n\n    let nearestDistance = Infinity;\n    let nearestIndex = -1;\n\n    for (let i = 0; i < this.highlightCenters.length; i++) {\n      const center = this.highlightCenters[i];\n      const distance = Math.hypot(center.x - x, center.y - y);\n      if (distance < nearestDistance) {\n        nearestDistance = distance;\n        nearestIndex = i;\n      }\n    }\n\n    if (nearestIndex === -1) {\n      return null;\n    }\n\n    return {\n      element: this.highlightCenters[nearestIndex].element,\n      row: this.highlightCenters[nearestIndex].row,\n      col: this.highlightCenters[nearestIndex].col,\n    };\n  }\n\n  protected get dimension(): Dimension {\n    const isHorizontal = this.orientation === Orientation.HORIZONTAL;\n    return {\n      rows: isHorizontal ? this.candleValues.length : this.candleValues[this.row].length,\n      cols: isHorizontal ? this.candleValues[this.row].length : this.candleValues.length,\n    };\n  }\n}\n","import type { ExtremaTarget } from '@type/extrema';\nimport type { HeatmapData, MaidrLayer } from '@type/grammar';\nimport type { Movable } from '@type/movable';\nimport type { AudioState, BrailleState, TextState } from '@type/state';\nimport type { Dimension } from './abstract';\nimport { MathUtil } from '@util/math';\nimport { Svg } from '@util/svg';\nimport { AbstractTrace } from './abstract';\nimport { MovableGrid } from './movable';\n\nexport class Heatmap extends AbstractTrace {\n  protected get values(): number[][] {\n    return this.heatmapValues;\n  }\n\n  protected readonly supportsExtrema = true;\n  protected readonly movable: Movable;\n  private readonly heatmapValues: number[][];\n  protected readonly highlightValues: SVGElement[][] | null;\n  protected highlightCenters:\n    | { x: number; y: number; row: number; col: number; element: SVGElement }[]\n    | null;\n\n  private readonly x: string[];\n  private readonly y: string[];\n\n  private readonly min: number;\n  private readonly max: number;\n\n  /**\n   * Creates a new Heatmap instance from a MAIDR layer\n   * @param layer - The MAIDR layer containing heatmap data\n   */\n  public constructor(layer: MaidrLayer) {\n    super(layer);\n\n    const data = layer.data as HeatmapData;\n    this.x = data.x;\n    this.y = [...data.y].reverse();\n    this.heatmapValues = [...data.points].reverse();\n\n    const { min, max } = MathUtil.minMaxFrom2D(this.heatmapValues);\n    this.min = min;\n    this.max = max;\n\n    this.highlightValues = this.mapToSvgElements(layer.selectors as string);\n    this.highlightCenters = this.mapSvgElementsToCenters();\n    this.movable = new MovableGrid<number>(this.heatmapValues);\n  }\n\n  /**\n   * Cleans up resources and disposes of the heatmap instance\n   */\n  public dispose(): void {\n    this.heatmapValues.length = 0;\n\n    this.x.length = 0;\n    this.y.length = 0;\n\n    super.dispose();\n  }\n\n  protected get audio(): AudioState {\n    return {\n      freq: {\n        min: this.min,\n        max: this.max,\n        raw: this.heatmapValues[this.row][this.col],\n      },\n      panning: {\n        x: this.col,\n        y: this.row,\n        rows: this.heatmapValues.length,\n        cols: this.heatmapValues[this.row].length,\n      },\n    };\n  }\n\n  protected get braille(): BrailleState {\n    return {\n      empty: false,\n      id: this.id,\n      values: this.heatmapValues,\n      min: this.min,\n      max: this.max,\n      row: this.row,\n      col: this.col,\n    };\n  }\n\n  protected get text(): TextState {\n    return {\n      main: { label: this.xAxis, value: this.x[this.col] },\n      cross: { label: this.yAxis, value: this.y[this.row] },\n      z: {\n        label: this.z,\n        value: this.heatmapValues[this.row][this.col],\n      },\n    };\n  }\n\n  protected get dimension(): Dimension {\n    return {\n      rows: this.heatmapValues.length,\n      cols: this.heatmapValues[this.row].length,\n    };\n  }\n\n  private mapToSvgElements(selector?: string): SVGElement[][] | null {\n    if (!selector) {\n      return null;\n    }\n\n    const numRows = this.heatmapValues.length;\n    const numCols = this.heatmapValues[0].length;\n    const domElements = Svg.selectAllElements(selector, false);\n\n    // Plotly renders heatmaps as a single <image> element (canvas PNG).\n    // Create transparent overlay rects so the highlight service can work.\n    if (\n      domElements.length === 1\n      && domElements[0] instanceof SVGImageElement\n    ) {\n      return this.createOverlayRects(domElements[0], numRows, numCols);\n    }\n\n    if (domElements.length === 0 || domElements.length !== numRows * numCols) {\n      return null;\n    }\n\n    const svgElements = new Array<Array<SVGElement>>();\n    if (domElements[0] instanceof SVGPathElement) {\n      for (let r = 0; r < numRows; r++) {\n        const rowIndex = numRows - 1 - r;\n        const row = new Array<SVGElement>();\n        for (let c = 0; c < numCols; c++) {\n          const flatIndex = rowIndex * numCols + c;\n          row.push(domElements[flatIndex]);\n        }\n        svgElements.push(row);\n      }\n    } else if (domElements[0] instanceof SVGRectElement) {\n      // If layer.domMapping?.order === 'row', use row-major mapping for rects.\n      // Otherwise, preserve current default: column-major mapping.\n      if (this.layer.domMapping?.order === 'row') {\n        for (let r = 0; r < numRows; r++) {\n          const row = new Array<SVGElement>();\n          for (let c = 0; c < numCols; c++) {\n            const flatIndex = r * numCols + c;\n            row.push(domElements[flatIndex]);\n          }\n          svgElements.push(row);\n        }\n      } else {\n        for (let r = 0; r < numRows; r++) {\n          const row = new Array<SVGElement>();\n          for (let c = 0; c < numCols; c++) {\n            const flatIndex = c * numRows + r;\n            row.push(domElements[flatIndex]);\n          }\n          svgElements.push(row);\n        }\n      }\n    }\n\n    return svgElements;\n  }\n\n  /**\n   * Create transparent overlay <rect> elements on top of a Plotly heatmap\n   * <image> element so the highlight service can target individual cells.\n   */\n  private createOverlayRects(\n    imageEl: SVGImageElement,\n    numRows: number,\n    numCols: number,\n  ): SVGElement[][] | null {\n    const imgX = Number.parseFloat(imageEl.getAttribute('x') ?? '0');\n    const imgY = Number.parseFloat(imageEl.getAttribute('y') ?? '0');\n    const imgW = Number.parseFloat(imageEl.getAttribute('width') ?? '0');\n    const imgH = Number.parseFloat(imageEl.getAttribute('height') ?? '0');\n\n    if (imgW === 0 || imgH === 0) {\n      return null;\n    }\n\n    const cellW = imgW / numCols;\n    const cellH = imgH / numRows;\n    const parent = imageEl.parentElement;\n    if (!parent) {\n      return null;\n    }\n\n    const svgNS = 'http://www.w3.org/2000/svg';\n    const svgElements = new Array<Array<SVGElement>>();\n\n    for (let r = 0; r < numRows; r++) {\n      const row = new Array<SVGElement>();\n      for (let c = 0; c < numCols; c++) {\n        const rect = document.createElementNS(svgNS, 'rect') as SVGRectElement;\n        rect.setAttribute('x', String(imgX + c * cellW));\n        rect.setAttribute('y', String(imgY + r * cellH));\n        rect.setAttribute('width', String(cellW));\n        rect.setAttribute('height', String(cellH));\n        rect.setAttribute('fill', 'transparent');\n        rect.setAttribute('stroke', 'none');\n        rect.setAttribute('pointer-events', 'none');\n        parent.appendChild(rect);\n        row.push(rect);\n      }\n      svgElements.push(row);\n    }\n\n    return svgElements;\n  }\n\n  /**\n   * Updates the visual position of the current point to safe bounds\n   */\n  protected updateVisualPointPosition(): void {\n    // Ensure we're within bounds\n    const { row: safeRow, col: safeCol } = this.getSafeIndices();\n    this.row = safeRow;\n    this.col = safeCol;\n  }\n\n  /**\n   * Moves to the next cell matching the comparison criteria in the specified direction\n   * @param direction - Direction to search (left, right, up, or down)\n   * @param type - Comparison type (lower or higher than current value)\n   * @returns True if a matching cell was found and moved to\n   */\n  public override moveToNextCompareValue(direction: 'left' | 'right' | 'up' | 'down', type: 'lower' | 'higher'): boolean {\n    switch (direction) {\n      case 'left':\n      case 'right':\n        return this.search_in_row(direction, type);\n      case 'up':\n      case 'down':\n        return this.search_in_col(direction, type);\n      default:\n        this.notifyRotorBounds();\n        return false;\n    }\n  }\n\n  /**\n   * Searches for a matching value in the current row\n   * @param direction - Search direction (left or right)\n   * @param type - Comparison type (lower or higher)\n   * @returns True if a matching value was found\n   */\n  public search_in_row(direction: 'left' | 'right', type: 'lower' | 'higher'): boolean {\n    const cols = this.y.length;\n    const current_col = this.col;\n\n    const step = direction === 'left' ? -1 : 1;\n    let i = current_col + step;\n    while (i >= 0 && i < cols) {\n      if (this.compare(this.heatmapValues[this.row][i], this.heatmapValues[this.row][current_col], type)) {\n        this.col = i;\n        this.updateVisualPointPosition();\n        this.notifyStateUpdate();\n        return true;\n      }\n      i += step;\n    }\n    this.notifyRotorBounds();\n    return false;\n  }\n\n  /**\n   * Searches for a matching value in the current column\n   * @param direction - Search direction (up or down)\n   * @param type - Comparison type (lower or higher)\n   * @returns True if a matching value was found\n   */\n  public search_in_col(direction: 'up' | 'down', type: 'lower' | 'higher'): boolean {\n    const rows = this.x.length;\n    const current_row = this.row;\n\n    const step = direction === 'up' ? 1 : -1;\n    let i = current_row + step;\n    while (i >= 0 && i < rows) {\n      if (this.compare(this.heatmapValues[i][this.col], this.heatmapValues[current_row][this.col], type)) {\n        this.row = i;\n        this.updateVisualPointPosition();\n        this.notifyStateUpdate();\n        return true;\n      }\n      i += step;\n    }\n    return false;\n  }\n\n  /**\n   * Moves upward in rotor mode to find lower or higher values\n   * @param mode - Comparison mode (lower or higher)\n   * @returns True if movement was successful\n   */\n  public override moveUpRotor(mode: 'lower' | 'higher'): boolean {\n    return this.moveToNextCompareValue('up', mode);\n  }\n\n  /**\n   * Moves downward in rotor mode to find lower or higher values\n   * @param mode - Comparison mode (lower or higher)\n   * @returns True if movement was successful\n   */\n  public override moveDownRotor(mode: 'lower' | 'higher'): boolean {\n    return this.moveToNextCompareValue('down', mode);\n  }\n\n  /**\n   * Maps SVG elements to their center coordinates for click navigation\n   * @returns Array of center coordinates with row/col indices or null\n   */\n  protected mapSvgElementsToCenters():\n    | { x: number; y: number; row: number; col: number; element: SVGElement }[]\n    | null {\n    const svgElements: (SVGElement | SVGElement[])[][] | null = this.highlightValues;\n\n    if (!svgElements) {\n      return null;\n    }\n\n    const centers: {\n      x: number;\n      y: number;\n      row: number;\n      col: number;\n      element: SVGElement;\n    }[] = [];\n    for (let row = 0; row < svgElements.length; row++) {\n      for (let col = 0; col < svgElements[row].length; col++) {\n        const element = svgElements[row][col];\n        const targetElement = Array.isArray(element) ? element[0] : element;\n        if (targetElement) {\n          const bbox = targetElement.getBoundingClientRect();\n          centers.push({\n            x: bbox.x + bbox.width / 2,\n            y: bbox.y + bbox.height / 2,\n            row,\n            col,\n            element: targetElement,\n          });\n        }\n      }\n    }\n\n    return centers;\n  }\n\n  /**\n   * Finds the nearest heatmap cell to the given coordinates\n   * @param x - X coordinate\n   * @param y - Y coordinate\n   * @returns Nearest cell information or null\n   */\n  public findNearestPoint(\n    x: number,\n    y: number,\n  ): { element: SVGElement; row: number; col: number } | null {\n    // loop through highlightCenters to find nearest point\n    if (!this.highlightCenters) {\n      return null;\n    }\n\n    let nearestDistance = Infinity;\n    let nearestIndex = -1;\n\n    for (let i = 0; i < this.highlightCenters.length; i++) {\n      const center = this.highlightCenters[i];\n      const distance = Math.hypot(center.x - x, center.y - y);\n      if (distance < nearestDistance) {\n        nearestDistance = distance;\n        nearestIndex = i;\n      }\n    }\n\n    if (nearestIndex === -1) {\n      return null;\n    }\n\n    return {\n      element: this.highlightCenters[nearestIndex].element,\n      row: this.highlightCenters[nearestIndex].row,\n      col: this.highlightCenters[nearestIndex].col,\n    };\n  }\n\n  /**\n   * Gets extrema targets for the heatmap trace\n   * @returns Array of extrema targets for navigation\n   */\n  public override getExtremaTargets(): ExtremaTarget[] {\n    const targets: ExtremaTarget[] = [];\n    const currentRow = this.row;\n    const currentCol = this.col;\n\n    // 1. Global Maximum\n    const globalMax = this.findGlobalExtrema('max');\n    if (globalMax) {\n      targets.push({\n        label: `Global Maximum: ${globalMax.value} at ${this.x[globalMax.col]}, ${this.y[globalMax.row]}`,\n        value: globalMax.value,\n        pointIndex: globalMax.row * this.heatmapValues[0].length + globalMax.col,\n        segment: 'global',\n        type: 'max',\n        navigationType: 'group',\n        groupIndex: globalMax.row,\n        categoryIndex: globalMax.col,\n        xValue: this.x[globalMax.col],\n      });\n    }\n\n    // 2. Global Minimum\n    const globalMin = this.findGlobalExtrema('min');\n    if (globalMin) {\n      targets.push({\n        label: `Global Minimum: ${globalMin.value} at ${this.x[globalMin.col]}, ${this.y[globalMin.row]}`,\n        value: globalMin.value,\n        pointIndex: globalMin.row * this.heatmapValues[0].length + globalMin.col,\n        segment: 'global',\n        type: 'min',\n        navigationType: 'group',\n        groupIndex: globalMin.row,\n        categoryIndex: globalMin.col,\n        xValue: this.x[globalMin.col],\n      });\n    }\n\n    // 3. Maximum on current row\n    const rowMax = this.findRowExtrema(currentRow, 'max');\n    if (rowMax) {\n      targets.push({\n        label: `Row Maximum: ${rowMax.value} at ${this.x[rowMax.col]}, ${this.y[currentRow]}`,\n        value: rowMax.value,\n        pointIndex: currentRow * this.heatmapValues[0].length + rowMax.col,\n        segment: `row-${currentRow}`,\n        type: 'max',\n        navigationType: 'group',\n        groupIndex: currentRow,\n        categoryIndex: rowMax.col,\n        xValue: this.x[rowMax.col],\n      });\n    }\n\n    // 4. Minimum on current row\n    const rowMin = this.findRowExtrema(currentRow, 'min');\n    if (rowMin) {\n      targets.push({\n        label: `Row Minimum: ${rowMin.value} at ${this.x[rowMin.col]}, ${this.y[currentRow]}`,\n        value: rowMin.value,\n        pointIndex: currentRow * this.heatmapValues[0].length + rowMin.col,\n        segment: `row-${currentRow}`,\n        type: 'min',\n        navigationType: 'group',\n        groupIndex: currentRow,\n        categoryIndex: rowMin.col,\n        xValue: this.x[rowMin.col],\n      });\n    }\n\n    // 5. Maximum on current column\n    const colMax = this.findColExtrema(currentCol, 'max');\n    if (colMax) {\n      targets.push({\n        label: `Column Maximum: ${colMax.value} at ${this.x[currentCol]}, ${this.y[colMax.row]}`,\n        value: colMax.value,\n        pointIndex: colMax.row * this.heatmapValues[0].length + currentCol,\n        segment: `col-${currentCol}`,\n        type: 'max',\n        navigationType: 'group',\n        groupIndex: colMax.row,\n        categoryIndex: currentCol,\n        xValue: this.x[currentCol],\n      });\n    }\n\n    // 6. Minimum on current column\n    const colMin = this.findColExtrema(currentCol, 'min');\n    if (colMin) {\n      targets.push({\n        label: `Column Minimum: ${colMin.value} at ${this.x[currentCol]}, ${this.y[colMin.row]}`,\n        value: colMin.value,\n        pointIndex: colMin.row * this.heatmapValues[0].length + currentCol,\n        segment: `col-${currentCol}`,\n        type: 'min',\n        navigationType: 'group',\n        groupIndex: colMin.row,\n        categoryIndex: currentCol,\n        xValue: this.x[currentCol],\n      });\n    }\n\n    return targets;\n  }\n\n  /**\n   * Finds the global maximum or minimum in the heatmap\n   * @param type - Whether to find 'max' or 'min'\n   * @returns Object with row, col, and value of the extrema\n   */\n  private findGlobalExtrema(type: 'max' | 'min'): { row: number; col: number; value: number } | null {\n    if (this.heatmapValues.length === 0) {\n      return null;\n    }\n\n    let extremaRow = 0;\n    let extremaCol = 0;\n    let extremaValue = this.heatmapValues[0][0];\n\n    for (let r = 0; r < this.heatmapValues.length; r++) {\n      for (let c = 0; c < this.heatmapValues[r].length; c++) {\n        const value = this.heatmapValues[r][c];\n        if (type === 'max' ? value > extremaValue : value < extremaValue) {\n          extremaValue = value;\n          extremaRow = r;\n          extremaCol = c;\n        }\n      }\n    }\n\n    return { row: extremaRow, col: extremaCol, value: extremaValue };\n  }\n\n  /**\n   * Finds the maximum or minimum in a specific row\n   * @param rowIndex - The row index to search\n   * @param type - Whether to find 'max' or 'min'\n   * @returns Object with col and value of the extrema\n   */\n  private findRowExtrema(rowIndex: number, type: 'max' | 'min'): { col: number; value: number } | null {\n    if (rowIndex < 0 || rowIndex >= this.heatmapValues.length) {\n      return null;\n    }\n\n    const row = this.heatmapValues[rowIndex];\n    if (row.length === 0) {\n      return null;\n    }\n\n    let extremaCol = 0;\n    let extremaValue = row[0];\n\n    for (let c = 1; c < row.length; c++) {\n      const value = row[c];\n      if (type === 'max' ? value > extremaValue : value < extremaValue) {\n        extremaValue = value;\n        extremaCol = c;\n      }\n    }\n\n    return { col: extremaCol, value: extremaValue };\n  }\n\n  /**\n   * Finds the maximum or minimum in a specific column\n   * @param colIndex - The column index to search\n   * @param type - Whether to find 'max' or 'min'\n   * @returns Object with row and value of the extrema\n   */\n  private findColExtrema(colIndex: number, type: 'max' | 'min'): { row: number; value: number } | null {\n    if (this.heatmapValues.length === 0 || colIndex < 0 || colIndex >= this.heatmapValues[0].length) {\n      return null;\n    }\n\n    let extremaRow = 0;\n    let extremaValue = this.heatmapValues[0][colIndex];\n\n    for (let r = 1; r < this.heatmapValues.length; r++) {\n      const value = this.heatmapValues[r][colIndex];\n      if (type === 'max' ? value > extremaValue : value < extremaValue) {\n        extremaValue = value;\n        extremaRow = r;\n      }\n    }\n\n    return { row: extremaRow, value: extremaValue };\n  }\n\n  /**\n   * Navigates to a specific extrema target in the heatmap\n   * @param target - The extrema target to navigate to\n   */\n  public override navigateToExtrema(target: ExtremaTarget): void {\n    if (target.groupIndex !== undefined && target.categoryIndex !== undefined) {\n      // Navigate to the specified row and column\n      this.row = target.groupIndex;\n      this.col = target.categoryIndex;\n\n      // Use common finalization method\n      this.finalizeExtremaNavigation();\n    }\n  }\n}\n","import type { HistogramPoint, MaidrLayer } from '@type/grammar';\nimport type { TextState } from '@type/state';\nimport { Orientation } from '@type/grammar';\nimport { AbstractBarPlot } from './bar';\n\nexport class Histogram extends AbstractBarPlot<HistogramPoint> {\n  public constructor(layer: MaidrLayer) {\n    super(layer, [layer.data as HistogramPoint[]]);\n  }\n\n  protected get text(): TextState {\n    const isVertical = this.orientation === Orientation.VERTICAL;\n    const point = this.points[this.row][this.col];\n\n    const min = isVertical ? point.xMin : point.yMin;\n    const max = isVertical ? point.xMax : point.yMax;\n\n    return {\n      ...super.text,\n      range: { min, max },\n    };\n  }\n\n  /**\n   * Histogram specific implementation of moving to the next higher/lower value\n   * @param direction indicates the direction of search- left (before the current value) and right (after)\n   * @param type indicates the value to look for\n   * @returns boolean (true: if target was found, false: else)\n   */\n  public override moveToNextCompareValue(direction: 'left' | 'right', type: 'lower' | 'higher'): boolean {\n    const currentGroup = this.row;\n    if (currentGroup < 0 || currentGroup >= this.barValues.length) {\n      return false;\n    }\n\n    const groupValues = this.barValues[currentGroup];\n    if (!groupValues || groupValues.length === 0) {\n      return false;\n    }\n\n    const currentIndex = this.col;\n    const step = direction === 'right' ? 1 : -1;\n    let i = currentIndex + step;\n\n    while (i >= 0 && i < groupValues.length) {\n      if (this.compare(groupValues[i], groupValues[currentIndex], type)) {\n        this.col = i;\n        this.updateVisualPointPosition();\n        this.notifyStateUpdate();\n        return true;\n      }\n      i += step;\n    }\n    this.notifyRotorBounds();\n    return false;\n  }\n}\n","import type { ExtremaTarget } from '@type/extrema';\nimport type { LinePoint, MaidrLayer } from '@type/grammar';\nimport type { MovableDirection, Node } from '@type/movable';\nimport type { XValue } from '@type/navigation';\nimport type { AudioState, BrailleState, TextState, TraceState } from '@type/state';\nimport type { Dimension } from './abstract';\nimport { Constant } from '@util/constant';\nimport { MathUtil } from '@util/math';\nimport { Svg } from '@util/svg';\nimport { AbstractTrace } from './abstract';\nimport { MovableGraph } from './movable';\n\nconst TYPE = 'Group';\n/**\n * Regex for extracting data point coordinates from SVG path `d` attribute.\n *\n * Matches M/L commands (direct endpoints) with comma or whitespace separators,\n * and C (cubic bezier) commands — extracting the endpoint (last coordinate pair).\n *\n * M/L: `M65,231.42` or `L 100 200` → captures (65, 231.42) or (100, 200)\n * C:   `C81,215,97,199,113,182`    → captures endpoint (113, 182)\n */\nconst SVG_PATH_ML_REGEX\n  = /[ML]\\s*(-?\\d+(?:\\.\\d+)?)[,\\s]+(-?\\d+(?:\\.\\d+)?)/g;\nconst SVG_PATH_C_REGEX\n  = /C\\s*(?:-?\\d+(?:\\.\\d+)?[,\\s]+-?\\d+(?:\\.\\d+)?[,\\s]+){2}(-?\\d+(?:\\.\\d+)?)[,\\s]+(-?\\d+(?:\\.\\d+)?)/g;\n\n/**\n * Represents a line trace plot with support for single and multi-line navigation\n */\nexport class LineTrace extends AbstractTrace {\n  protected get values(): number[][] {\n    return this.lineValues;\n  }\n\n  protected readonly supportsExtrema = true;\n  protected readonly rotorSupport = true;\n  protected readonly movable;\n\n  protected readonly points: LinePoint[][];\n  protected readonly lineValues: number[][];\n  protected readonly highlightValues: SVGElement[][] | null;\n  protected highlightCenters:\n    | { x: number; y: number; row: number; col: number; element: SVGElement }[]\n    | null;\n\n  protected readonly min: number[];\n  protected readonly max: number[];\n\n  // Track previous row for intersection label ordering\n  private previousRow: number | null = null;\n\n  // Cache for intersection results, keyed by row index\n  // Invalidated when active row changes\n  private intersectionCache: Map<number, Array<{\n    pointIndex: number;\n    x: number;\n    y: number;\n    intersectingLines: number[];\n    intersectionKind: 'point' | 'slope';\n  }>> = new Map();\n\n  public constructor(layer: MaidrLayer) {\n    super(layer);\n\n    this.points = layer.data as LinePoint[][];\n\n    this.lineValues = this.points.map(row =>\n      row.map(point => Number(point.y)),\n    );\n    this.min = this.lineValues.map(row => MathUtil.safeMin(row));\n    this.max = this.lineValues.map(row => MathUtil.safeMax(row));\n\n    this.highlightValues = this.mapToSvgElements(layer.selectors as string[]);\n    this.highlightCenters = this.mapSvgElementsToCenters();\n    this.movable = new MovableGraph(this.buildGraph());\n  }\n\n  public dispose(): void {\n    this.points.length = 0;\n\n    this.min.length = 0;\n    this.max.length = 0;\n\n    super.dispose();\n  }\n\n  private buildGraph(): (Node | null)[][] {\n    const rowCount = this.points.length;\n    if (rowCount === 0) {\n      return new Array<Array<Node | null>>();\n    }\n\n    const maxCols = Math.max(0, ...this.points.map(row => row.length));\n    const graph: (Node | null)[][] = this.points.map(row =>\n      row.map(() => ({ up: null, down: null, left: null, right: null, top: null, bottom: null, start: null, end: null })),\n    );\n\n    for (let c = 0; c < maxCols; c++) {\n      const pointsAtCol = this.points\n        .map((row, idx) => ({ y: row[c]?.y, row: idx }))\n        .filter(p => p.y !== undefined);\n      if (pointsAtCol.length === 0) {\n        continue;\n      }\n\n      const sortedPoints = [...pointsAtCol].sort((a, b) => a.y - b.y);\n      const bottom = { row: sortedPoints[0].row, col: c };\n      const top = { row: sortedPoints[sortedPoints.length - 1].row, col: c };\n      for (let i = 0; i < sortedPoints.length; i++) {\n        const { row } = sortedPoints[i];\n        const node = graph[row][c];\n        if (!node) {\n          continue;\n        }\n\n        i > 0 && (node.down = { row: sortedPoints[i - 1].row, col: c });\n        i < sortedPoints.length - 1 && (node.up = { row: sortedPoints[i + 1].row, col: c });\n        node.bottom = bottom;\n        node.top = top;\n      }\n    }\n\n    for (let r = 0; r < rowCount; r++) {\n      const start = this.points[r].length > 0 ? { row: r, col: 0 } : null;\n      const end = this.points[r].length > 0\n        ? { row: r, col: this.points[r].length - 1 }\n        : null;\n\n      for (let c = 0; c < this.points[r].length; c++) {\n        const node = graph[r][c];\n        if (!node) {\n          continue;\n        }\n\n        c > 0 && (node.left = { row: r, col: c - 1 });\n        c < this.points[r].length - 1 && (node.right = { row: r, col: c + 1 });\n        node.start = start;\n        node.end = end;\n      }\n    }\n\n    return graph;\n  }\n\n  protected get audio(): AudioState {\n    return {\n      freq: {\n        min: this.min[this.row],\n        max: this.max[this.row],\n        raw: this.lineValues[this.row][this.col],\n      },\n      panning: {\n        x: this.col,\n        y: this.row,\n        rows: this.lineValues.length,\n        cols: this.lineValues[this.row].length,\n      },\n      group: this.row,\n    };\n  }\n\n  protected get braille(): BrailleState {\n    return {\n      empty: false,\n      id: this.id,\n      values: this.lineValues,\n      min: this.min,\n      max: this.max,\n      row: this.row,\n      col: this.col,\n    };\n  }\n\n  protected get text(): TextState {\n    const point = this.points[this.row][this.col];\n\n    // Check for intersections at current point\n    const intersections = this.findIntersections();\n    let zData:\n      | { z: { label: string; value: string } }\n      | Record<string, never> = {};\n\n    if (intersections.length > 1) {\n      // Multiple lines intersect - create intersection text\n      let lineTypes = intersections.map((intersection) => {\n        const lineIndex = intersection.group!;\n        return this.points[lineIndex][0]?.z || `l${lineIndex + 1}`;\n      });\n\n      // If previousRow is in the intersection, put its label first\n      if (this.previousRow !== null) {\n        const prevZ\n          = this.points[this.previousRow][0]?.z || `l${this.previousRow + 1}`;\n        if (lineTypes.includes(prevZ)) {\n          lineTypes = [prevZ, ...lineTypes.filter(l => l !== prevZ)];\n        }\n      }\n\n      zData = {\n        z: {\n          label: TYPE,\n          value: `intersection at (${lineTypes.join(', ')})`,\n        },\n      };\n    } else {\n      // Single line or no intersection - use normal z data\n      zData = point.z ? { z: { label: TYPE, value: point.z } } : {};\n    }\n\n    return {\n      main: { label: this.xAxis, value: this.points[this.row][this.col].x },\n      cross: { label: this.yAxis, value: this.points[this.row][this.col].y },\n      ...zData,\n    };\n  }\n\n  protected get dimension(): Dimension {\n    return {\n      rows: this.lineValues.length,\n      cols: this.lineValues[this.row].length,\n    };\n  }\n\n  public moveOnce(direction: MovableDirection): boolean {\n    if (this.isInitialEntry) {\n      this.movable.handleInitialEntry();\n      this.previousRow = null;\n      this.notifyStateUpdate();\n      return true;\n    }\n\n    if (!this.isMovable(direction)) {\n      this.notifyOutOfBounds();\n      return false;\n    }\n\n    // Store previous row before moving\n    this.previousRow = this.row;\n\n    // Enhanced navigation for UPWARD/DOWNWARD - consider y values at current x position\n    if (direction === 'UPWARD' || direction === 'DOWNWARD') {\n      const targetRow = this.findLineByXAndYDirection(direction);\n      const currentX = this.points[this.row][this.col].x;\n\n      if (targetRow !== null && targetRow !== this.row) {\n        // Find the column in the target line that has the same X value\n        const targetCol = this.findColumnByXValue(targetRow, currentX);\n\n        if (targetCol !== -1) {\n          this.row = targetRow;\n          this.col = targetCol;\n\n          // Check for intersections and emit appropriate state\n          const intersections = this.findIntersections();\n          if (intersections.length > 1) {\n            const baseState = super.state;\n            const stateWithIntersections = {\n              ...baseState,\n              intersections,\n            } as TraceState;\n            for (const observer of this.observers) {\n              observer.update(stateWithIntersections);\n            }\n          } else {\n            this.notifyStateUpdate();\n          }\n          return true;\n        } else {\n          // No matching X value found in target line\n          this.notifyOutOfBounds();\n          return false;\n        }\n      } else {\n        // No valid line found based on y values - hit boundary\n        this.notifyOutOfBounds();\n        return false;\n      }\n    }\n\n    // Default navigation for FORWARD/BACKWARD only\n    switch (direction) {\n      case 'FORWARD':\n        this.col += 1;\n        break;\n      case 'BACKWARD':\n        this.col -= 1;\n        break;\n    }\n\n    // Check for intersections and emit appropriate state\n    const intersections = this.findIntersections();\n    if (intersections.length > 1) {\n      const baseState = super.state;\n      const stateWithIntersections = {\n        ...baseState,\n        intersections,\n      } as TraceState;\n      for (const observer of this.observers) {\n        observer.update(stateWithIntersections);\n      }\n    } else {\n      this.notifyStateUpdate();\n    }\n    return true;\n  }\n\n  /**\n   * Helper function to find all lines that intersect at the current (x, y) position\n   * @returns Array of AudioState for all intersecting lines\n   */\n  private findIntersections(): AudioState[] {\n    const currentX = this.points[this.row][this.col].x;\n    const currentY = this.points[this.row][this.col].y;\n    const intersections: AudioState[] = [];\n\n    for (let r = 0; r < this.points.length; r++) {\n      const c = this.points[r].findIndex(\n        p => p.x === currentX && p.y === currentY,\n      );\n      if (c !== -1) {\n        intersections.push(\n          {\n            freq: {\n              min: this.min[r],\n              max: this.max[r],\n              raw: currentY,\n            },\n            panning: {\n              x: this.col,\n              y: this.row,\n              rows: this.lineValues.length,\n              cols: this.lineValues[this.row].length,\n            },\n            group: r,\n          },\n        );\n      }\n    }\n\n    return intersections;\n  }\n\n  public isMovable(target: [number, number] | MovableDirection): boolean {\n    if (Array.isArray(target)) {\n      const [row, col] = target;\n      return (\n        row >= 0\n        && row < this.values.length\n        && col >= 0\n        && col < this.values[row].length // Fixed: use target row instead of current row\n      );\n    }\n\n    switch (target) {\n      case 'UPWARD':\n      case 'DOWNWARD': {\n        // For y-value-based navigation, check if there's a valid target line with same X value\n        const targetRow = this.findLineByXAndYDirection(target);\n        if (targetRow === null) {\n          return false;\n        }\n        // Also check if the target line has a point with the same X value\n        const currentX = this.points[this.row][this.col].x;\n        return this.findColumnByXValue(targetRow, currentX) !== -1;\n      }\n      case 'FORWARD':\n        return this.col < this.values[this.row].length - 1;\n      case 'BACKWARD':\n        return this.col > 0;\n    }\n  }\n\n  /**\n   * Finds a line with the same X value but Y value in the desired direction\n   * Uses strict equality (===) for X value matching\n   * @param direction The direction to search (UPWARD for higher Y values, DOWNWARD for lower Y values)\n   * @returns The row index of the target line, or null if no suitable line is found\n   */\n  private findLineByXAndYDirection(\n    direction: 'UPWARD' | 'DOWNWARD',\n  ): number | null {\n    const currentX = this.points[this.row][this.col].x;\n\n    let bestRow: number | null = null;\n    let bestDistance = Number.POSITIVE_INFINITY;\n\n    // Check all lines for points with the same X value\n    for (let row = 0; row < this.points.length; row++) {\n      // Skip current row\n      if (row === this.row) {\n        continue;\n      }\n\n      // Find the point in this line with the EXACT same X value (strict equality)\n      const matchingPointIndex = this.points[row].findIndex((point) => {\n        const matches = point.x === currentX;\n        return matches;\n      });\n\n      if (matchingPointIndex === -1) {\n        // No point with this exact X value in this line - skip navigation to this line\n        continue;\n      }\n\n      const lineY = this.points[row][matchingPointIndex].y;\n\n      // Check if this line's y value is in the desired direction\n      const isValidDirection\n        = direction === 'UPWARD'\n          ? lineY > this.points[this.row][this.col].y\n          : lineY < this.points[this.row][this.col].y;\n      const distance = Math.abs(lineY - this.points[this.row][this.col].y);\n\n      if (!isValidDirection) {\n        continue;\n      }\n\n      // Update best candidate if this is closer\n      if (distance < bestDistance) {\n        bestDistance = distance;\n        bestRow = row;\n      }\n    }\n\n    return bestRow;\n  }\n\n  /**\n   * Finds the column index for a given X value in a specific line\n   * Uses strict equality (===) for X value matching\n   * @param row The line index\n   * @param xValue The X value to find\n   * @returns The column index, or -1 if not found\n   */\n  private findColumnByXValue(row: number, xValue: number | string): number {\n    return this.points[row].findIndex(point => point.x === xValue);\n  }\n\n  protected mapToSvgElements(selectors?: string[]): SVGElement[][] | null {\n    if (!selectors || selectors.length !== this.lineValues.length) {\n      return null;\n    }\n\n    // Try element-based approach first (e.g. Recharts individual dot circles).\n    // If the selector matches multiple DOM elements whose count equals the\n    // expected data points, use them directly — no path parsing needed.\n    const elementBased = this.mapViaDomElements(selectors);\n    if (elementBased) {\n      return elementBased;\n    }\n\n    // Fall back to path-based approach: parse coordinates from a single\n    // <path> or <polyline> element per series and create synthetic circles.\n    return this.mapViaPathParsing(selectors);\n  }\n\n  /**\n   * Element-based SVG mapping: select all matching elements per selector\n   * and use them directly for highlighting (like BarTrace does).\n   * Works when the charting library renders individual dot/circle elements.\n   */\n  private mapViaDomElements(selectors: string[]): SVGElement[][] | null {\n    const svgElements: SVGElement[][] = [];\n    let allFailed = true;\n\n    for (let r = 0; r < selectors.length; r++) {\n      const elements = Svg.selectAllElements(selectors[r]);\n      if (elements.length === 0 || elements.length !== this.lineValues[r].length) {\n        svgElements.push([]);\n        continue;\n      }\n      allFailed = false;\n      svgElements.push(elements);\n    }\n\n    return allFailed ? null : svgElements;\n  }\n\n  /**\n   * Path-based SVG mapping: find a single <path> or <polyline> per selector,\n   * parse data point coordinates from its attributes, and create synthetic\n   * circle elements for highlighting.\n   *\n   * Supports M/L commands (linear paths) and C commands (cubic bezier curves).\n   */\n  private mapViaPathParsing(selectors: string[]): SVGElement[][] | null {\n    const svgElements: SVGElement[][] = [];\n    let allFailed = true;\n\n    for (let r = 0; r < selectors.length; r++) {\n      const lineElement = Svg.selectElement(selectors[r], false);\n      if (!lineElement) {\n        svgElements.push([]);\n        continue;\n      }\n\n      const coordinates: LinePoint[] = [];\n      if (lineElement instanceof SVGPathElement) {\n        const pathD = lineElement.getAttribute(Constant.D) || Constant.EMPTY;\n        this.extractPathCoordinates(pathD, coordinates);\n      } else if (lineElement instanceof SVGPolylineElement) {\n        const pointsAttr\n          = lineElement.getAttribute(Constant.POINTS) || Constant.EMPTY;\n        const strCoords = pointsAttr.split(/\\s+/).filter(Boolean);\n        for (const coordinate of strCoords) {\n          const [x, y] = coordinate.split(Constant.COMMA);\n          coordinates.push({\n            x: Number.parseFloat(x),\n            y: Number.parseFloat(y),\n          });\n        }\n      }\n      // Handle coordinate count mismatch.\n      // SVG renderers (e.g. Plotly) may simplify paths by removing collinear\n      // points.  When fewer coordinates than data points are found, interpolate\n      // the missing positions along the simplified path segments so every data\n      // point gets a highlight circle at the correct visual position.\n      const expected = this.lineValues[r].length;\n      if (coordinates.length !== expected) {\n        if (coordinates.length >= 2 && coordinates.length < expected) {\n          const pathXMin = Number(coordinates[0].x);\n          const pathXMax = Number(coordinates[coordinates.length - 1].x);\n          const dataPoints = this.points[r];\n          const dataXMin = Number(dataPoints[0].x);\n          const dataXMax = Number(dataPoints[dataPoints.length - 1].x);\n          const dataXRange = dataXMax - dataXMin;\n\n          const full: LinePoint[] = [];\n          for (let i = 0; i < expected; i++) {\n            const dataX = Number(dataPoints[i].x);\n            const svgX = dataXRange > 0\n              ? pathXMin + ((dataX - dataXMin) / dataXRange) * (pathXMax - pathXMin)\n              : pathXMin;\n\n            // Find y by interpolating along the simplified path segments\n            let svgY = Number(coordinates[0].y);\n            for (let j = 0; j < coordinates.length - 1; j++) {\n              const cjx = Number(coordinates[j].x);\n              const cj1x = Number(coordinates[j + 1].x);\n              if (svgX >= cjx - 0.01 && svgX <= cj1x + 0.01) {\n                const segLen = cj1x - cjx;\n                const t = segLen > 0 ? (svgX - cjx) / segLen : 0;\n                svgY = Number(coordinates[j].y) + t * (Number(coordinates[j + 1].y) - Number(coordinates[j].y));\n                break;\n              }\n            }\n            full.push({ x: svgX, y: svgY });\n          }\n          coordinates.length = 0;\n          coordinates.push(...full);\n        } else if (coordinates.length < expected) {\n          while (coordinates.length < expected) {\n            coordinates.push({ x: Number.NaN, y: Number.NaN });\n          }\n        } else {\n          coordinates.length = expected;\n        }\n      }\n\n      const linePointElements: SVGElement[] = [];\n      let lineFailed = false;\n      for (const coordinate of coordinates) {\n        if (Number.isNaN(Number(coordinate.x)) || Number.isNaN(coordinate.y)) {\n          lineFailed = true;\n          break;\n        }\n        linePointElements.push(\n          Svg.createCircleElement(coordinate.x, coordinate.y, lineElement),\n        );\n      }\n      if (lineFailed) {\n        svgElements.push([]);\n        continue;\n      }\n      if (linePointElements.length > 0) {\n        allFailed = false;\n      }\n      svgElements.push(linePointElements);\n    }\n\n    if (allFailed) {\n      return null;\n    }\n    return svgElements;\n  }\n\n  /**\n   * Extracts data point coordinates from an SVG path `d` attribute.\n   * Handles M/L (move/line) and C (cubic bezier) commands.\n   * For C commands, the endpoint (3rd coordinate pair) is extracted.\n   */\n  private extractPathCoordinates(pathD: string, coordinates: LinePoint[]): void {\n    // Extract M/L endpoints\n    SVG_PATH_ML_REGEX.lastIndex = 0;\n    let match: RegExpExecArray | null = SVG_PATH_ML_REGEX.exec(pathD);\n    const indexed: { index: number; x: number; y: number }[] = [];\n    while (match !== null) {\n      indexed.push({\n        index: match.index,\n        x: Number.parseFloat(match[1]),\n        y: Number.parseFloat(match[2]),\n      });\n      match = SVG_PATH_ML_REGEX.exec(pathD);\n    }\n\n    // Extract C cubic bezier endpoints (3rd pair of each C command)\n    SVG_PATH_C_REGEX.lastIndex = 0;\n    match = SVG_PATH_C_REGEX.exec(pathD);\n    while (match !== null) {\n      indexed.push({\n        index: match.index,\n        x: Number.parseFloat(match[1]),\n        y: Number.parseFloat(match[2]),\n      });\n      match = SVG_PATH_C_REGEX.exec(pathD);\n    }\n\n    // Sort by position in path string to preserve point order\n    indexed.sort((a, b) => a.index - b.index);\n    for (const point of indexed) {\n      coordinates.push({ x: point.x, y: point.y });\n    }\n  }\n\n  public get state(): TraceState {\n    const baseState = super.state;\n    if (baseState.empty)\n      return baseState;\n\n    const isMultiline = this.points.length > 1;\n    // Add the plotType field for non-empty states\n    const stateWithPlotType = {\n      ...baseState,\n      plotType: isMultiline ? 'multiline' : 'single line',\n      ...(isMultiline && { groupCount: this.points.length }),\n    };\n\n    // Check for intersection at current (x, y)\n    const intersections = this.findIntersections();\n    if (intersections.length > 1) {\n      return { ...stateWithPlotType, intersections };\n    }\n    return stateWithPlotType;\n  }\n\n  protected mapSvgElementsToCenters():\n    | { x: number; y: number; row: number; col: number; element: SVGElement }[]\n    | null {\n    const svgElements: (SVGElement | SVGElement[])[][] | null = this.highlightValues;\n\n    if (!svgElements) {\n      return null;\n    }\n\n    const centers: {\n      x: number;\n      y: number;\n      row: number;\n      col: number;\n      element: SVGElement;\n    }[] = [];\n    for (let row = 0; row < svgElements.length; row++) {\n      for (let col = 0; col < svgElements[row].length; col++) {\n        const element = svgElements[row][col];\n        const targetElement = Array.isArray(element) ? element[0] : element;\n        if (targetElement) {\n          const bbox = targetElement.getBoundingClientRect();\n          centers.push({\n            x: bbox.x + bbox.width / 2,\n            y: bbox.y + bbox.height / 2,\n            row,\n            col,\n            element: targetElement,\n          });\n        }\n      }\n    }\n\n    return centers;\n  }\n\n  public findNearestPoint(\n    x: number,\n    y: number,\n  ): { element: SVGElement; row: number; col: number } | null {\n    // loop through highlightCenters to find nearest point\n    if (!this.highlightCenters) {\n      return null;\n    }\n\n    let nearestDistance = Infinity;\n    let nearestIndex = -1;\n\n    for (let i = 0; i < this.highlightCenters.length; i++) {\n      const center = this.highlightCenters[i];\n      const distance = Math.hypot(center.x - x, center.y - y);\n      if (distance < nearestDistance) {\n        nearestDistance = distance;\n        nearestIndex = i;\n      }\n    }\n\n    if (nearestIndex === -1) {\n      return null;\n    }\n\n    return {\n      element: this.highlightCenters[nearestIndex].element,\n      row: this.highlightCenters[nearestIndex].row,\n      col: this.highlightCenters[nearestIndex].col,\n    };\n  }\n\n  /**\n   * Check if two line segments intersect and return the intersection point\n   * Uses parametric line intersection formula\n   * @param p1 Start point of first segment\n   * @param p1.x X coordinate of start point of first segment\n   * @param p1.y Y coordinate of start point of first segment\n   * @param p2 End point of first segment\n   * @param p2.x X coordinate of end point of first segment\n   * @param p2.y Y coordinate of end point of first segment\n   * @param p3 Start point of second segment\n   * @param p3.x X coordinate of start point of second segment\n   * @param p3.y Y coordinate of start point of second segment\n   * @param p4 End point of second segment\n   * @param p4.x X coordinate of end point of second segment\n   * @param p4.y Y coordinate of end point of second segment\n   * @returns Intersection point {x, y} if segments intersect, null otherwise\n   */\n  private getSegmentIntersection(\n    p1: { x: number; y: number },\n    p2: { x: number; y: number },\n    p3: { x: number; y: number },\n    p4: { x: number; y: number },\n  ): { x: number; y: number } | null {\n    const x1 = p1.x;\n    const y1 = p1.y;\n    const x2 = p2.x;\n    const y2 = p2.y;\n    const x3 = p3.x;\n    const y3 = p3.y;\n    const x4 = p4.x;\n    const y4 = p4.y;\n\n    const denom = (x1 - x2) * (y3 - y4) - (y1 - y2) * (x3 - x4);\n\n    // Lines are parallel (no intersection or infinite intersections)\n    if (Math.abs(denom) < 1e-10) {\n      return null;\n    }\n\n    const t = ((x1 - x3) * (y3 - y4) - (y1 - y3) * (x3 - x4)) / denom;\n    const u = -((x1 - x2) * (y1 - y3) - (y1 - y2) * (x1 - x3)) / denom;\n\n    // Check if intersection is within both segments (t and u must be in [0, 1])\n    if (t >= 0 && t <= 1 && u >= 0 && u <= 1) {\n      const intersectX = x1 + t * (x2 - x1);\n      const intersectY = y1 + t * (y2 - y1);\n      return { x: intersectX, y: intersectY };\n    }\n\n    return null;\n  }\n\n  /** Tolerance for comparing intersection coordinates (for deduplication) */\n  private static readonly INTERSECTION_EPSILON = 1e-6;\n\n  /**\n   * Find all points where the current line intersects with other lines\n   * Uses line segment intersection algorithm to find crossings between data points\n   * Results are cached per row and invalidated when the active row changes\n   * @returns Array of intersection info containing nearest point index and intersecting line indices\n   */\n  private findAllIntersectionsForCurrentLine(): Array<{\n    pointIndex: number;\n    x: number;\n    y: number;\n    intersectingLines: number[];\n    intersectionKind: 'point' | 'slope';\n  }> {\n    const currentGroup = this.row;\n\n    // Return cached results if available\n    if (this.intersectionCache.has(currentGroup)) {\n      return this.intersectionCache.get(currentGroup)!;\n    }\n\n    if (currentGroup < 0 || currentGroup >= this.points.length) {\n      return [];\n    }\n\n    // Only check for intersections if there are multiple lines\n    if (this.points.length <= 1) {\n      return [];\n    }\n\n    const currentLinePoints = this.points[currentGroup];\n    if (currentLinePoints.length < 2) {\n      return [];\n    }\n\n    // Collect all raw intersections first\n    const rawIntersections: Array<{\n      pointIndex: number;\n      x: number;\n      y: number;\n      otherLine: number;\n    }> = [];\n\n    // For each segment on the current line\n    for (let segIndex = 0; segIndex < currentLinePoints.length - 1; segIndex++) {\n      const p1 = currentLinePoints[segIndex];\n      const p2 = currentLinePoints[segIndex + 1];\n\n      // Convert to numeric for calculation\n      const seg1Start = { x: Number(p1.x), y: Number(p1.y) };\n      const seg1End = { x: Number(p2.x), y: Number(p2.y) };\n\n      // Check against all segments from other lines\n      for (let otherLine = 0; otherLine < this.points.length; otherLine++) {\n        if (otherLine === currentGroup) {\n          continue;\n        }\n\n        const otherLinePoints = this.points[otherLine];\n        if (otherLinePoints.length < 2) {\n          continue;\n        }\n\n        for (let otherSegIndex = 0; otherSegIndex < otherLinePoints.length - 1; otherSegIndex++) {\n          const p3 = otherLinePoints[otherSegIndex];\n          const p4 = otherLinePoints[otherSegIndex + 1];\n\n          const seg2Start = { x: Number(p3.x), y: Number(p3.y) };\n          const seg2End = { x: Number(p4.x), y: Number(p4.y) };\n\n          const intersection = this.getSegmentIntersection(seg1Start, seg1End, seg2Start, seg2End);\n\n          if (intersection) {\n            // Find the nearest point on the current line to navigate to\n            // Use Euclidean distance for accuracy with nearly vertical segments\n            const distToStart = Math.hypot(intersection.x - seg1Start.x, intersection.y - seg1Start.y);\n            const distToEnd = Math.hypot(intersection.x - seg1End.x, intersection.y - seg1End.y);\n            const nearestPointIndex = distToStart <= distToEnd ? segIndex : segIndex + 1;\n\n            rawIntersections.push({\n              pointIndex: nearestPointIndex,\n              x: intersection.x,\n              y: intersection.y,\n              otherLine,\n            });\n          }\n        }\n      }\n    }\n\n    // Group intersections using tolerance-based deduplication\n    const groupedIntersections: Array<{\n      pointIndex: number;\n      x: number;\n      y: number;\n      intersectingLines: Set<number>;\n    }> = [];\n\n    for (const raw of rawIntersections) {\n      // Find existing group within tolerance\n      const existingGroup = groupedIntersections.find(\n        g => Math.abs(g.x - raw.x) < LineTrace.INTERSECTION_EPSILON\n          && Math.abs(g.y - raw.y) < LineTrace.INTERSECTION_EPSILON,\n      );\n\n      if (existingGroup) {\n        existingGroup.intersectingLines.add(raw.otherLine);\n      } else {\n        const intersectingLines = new Set<number>();\n        intersectingLines.add(raw.otherLine);\n        groupedIntersections.push({\n          pointIndex: raw.pointIndex,\n          x: raw.x,\n          y: raw.y,\n          intersectingLines,\n        });\n      }\n    }\n\n    // Convert to final format and sort by x coordinate\n    // Note: intersectingLines excludes currentGroup (only other lines)\n    const result = groupedIntersections\n      .map(entry => ({\n        pointIndex: entry.pointIndex,\n        x: entry.x,\n        y: entry.y,\n        intersectingLines: Array.from(entry.intersectingLines).sort((a, b) => a - b),\n        // Classify once during target generation so UI can announce the right type.\n        intersectionKind: this.classifyIntersectionKind(\n          currentGroup,\n          Array.from(entry.intersectingLines),\n          entry.x,\n          entry.y,\n        ),\n      }))\n      .sort((a, b) => a.x - b.x);\n\n    // Cache the result\n    this.intersectionCache.set(currentGroup, result);\n\n    return result;\n  }\n\n  /**\n   * Get a formatted label for intersecting lines\n   * Note: intersectingLines should only contain OTHER lines (not the current line)\n   * since the user is already on the current line.\n   * @param intersectingLines Array of line indices that intersect (excluding current line)\n   * @returns Formatted string of line names (e.g., \"Line A, Line B\")\n   */\n  private getIntersectionLabel(intersectingLines: number[]): string {\n    return intersectingLines.map((lineIndex) => {\n      // Access first point to get the line's z/name\n      // Falls back to \"Line N\" if z is not defined\n      const firstPoint = this.points[lineIndex][0];\n      return firstPoint?.z || `Line ${lineIndex + 1}`;\n    }).join(', ');\n  }\n\n  /**\n   * Check whether a line contains a sampled point at the given coordinate.\n   * @param lineIndex The line index to inspect\n   * @param x X coordinate\n   * @param y Y coordinate\n   * @returns True if the coordinate exists in the line's sampled points\n   */\n  private hasPointAtCoordinate(lineIndex: number, x: number, y: number): boolean {\n    if (lineIndex < 0 || lineIndex >= this.points.length) {\n      return false;\n    }\n\n    return this.points[lineIndex].some(point =>\n      Math.abs(Number(point.x) - x) < LineTrace.INTERSECTION_EPSILON\n      && Math.abs(Number(point.y) - y) < LineTrace.INTERSECTION_EPSILON,\n    );\n  }\n\n  /**\n   * Classify an intersection as either point-based (sampled in SVG data) or\n   * slope-based (created by segment crossing between sampled points).\n   * @param currentLine The current active line index\n   * @param intersectingLines Other lines participating in this intersection\n   * @param x Intersection x coordinate\n   * @param y Intersection y coordinate\n   * @returns Intersection kind\n   */\n  private classifyIntersectionKind(\n    currentLine: number,\n    intersectingLines: number[],\n    x: number,\n    y: number,\n  ): 'point' | 'slope' {\n    // Point intersection requires both lines to contain the sampled coordinate.\n    const currentHasPoint = this.hasPointAtCoordinate(currentLine, x, y);\n    if (!currentHasPoint) {\n      return 'slope';\n    }\n\n    const otherHasPoint = intersectingLines.some(lineIndex =>\n      this.hasPointAtCoordinate(lineIndex, x, y),\n    );\n\n    return otherHasPoint ? 'point' : 'slope';\n  }\n\n  /**\n   * Get extrema targets for the current line plot\n   * Returns min, max values, and intersection points within the current group\n   * @returns Array of extrema targets for navigation\n   */\n  public override getExtremaTargets(): ExtremaTarget[] {\n    const targets: ExtremaTarget[] = [];\n    const currentGroup = this.row;\n    if (currentGroup < 0 || currentGroup >= this.lineValues.length) {\n      return targets;\n    }\n\n    const groupValues = this.lineValues[currentGroup];\n    if (!groupValues || groupValues.length === 0) {\n      return targets;\n    }\n    // Use pre-computed min/max values instead of recalculating\n    const groupMin = this.min[currentGroup];\n    const groupMax = this.max[currentGroup];\n    // Find indices of min/max values\n    const maxIndices: number[] = [];\n    const minIndices: number[] = [];\n    for (let index = 0; index < groupValues.length; index++) {\n      const value = groupValues[index];\n      if (value === groupMax) {\n        maxIndices.push(index);\n      }\n      if (value === groupMin) {\n        minIndices.push(index);\n      }\n    }\n\n    // Add max targets\n    for (const maxIndex of maxIndices) {\n      targets.push({\n        label: `Max point at ${this.getPointLabel(maxIndex)}`,\n        value: groupMax,\n        pointIndex: maxIndex,\n        segment: 'line',\n        type: 'max',\n        navigationType: 'point',\n        xValue: this.points[this.row]?.[maxIndex]?.x,\n      });\n    }\n\n    // Add min target\n    for (const minIndex of minIndices) {\n      targets.push({\n        label: `Min point at ${this.getPointLabel(minIndex)}`,\n        value: groupMin,\n        pointIndex: minIndex,\n        segment: 'line',\n        type: 'min',\n        navigationType: 'point',\n        xValue: this.points[this.row]?.[minIndex]?.x,\n      });\n    }\n\n    // Add intersection targets for multiline plots\n    const intersections = this.findAllIntersectionsForCurrentLine();\n    for (const intersection of intersections) {\n      // intersectingLines only contains OTHER lines (not current line)\n      const otherLineNames = this.getIntersectionLabel(intersection.intersectingLines);\n      // Format the intersection coordinates for display\n      const coordsDisplay = `x=${intersection.x.toFixed(2)}, y=${intersection.y.toFixed(2)}`;\n      const intersectionLabel = intersection.intersectionKind === 'point'\n        ? 'Point intersection'\n        : 'Slope intersection';\n\n      targets.push({\n        label: `${intersectionLabel} at ${coordsDisplay}`,\n        value: intersection.y,\n        pointIndex: intersection.pointIndex,\n        segment: 'intersection',\n        type: 'intersection',\n        intersectionKind: intersection.intersectionKind,\n        navigationType: 'point',\n        intersectingLines: intersection.intersectingLines,\n        display: {\n          coords: coordsDisplay,\n          otherLines: otherLineNames,\n        },\n      });\n    }\n\n    return targets;\n  }\n\n  /**\n   * Navigate to a specific extrema target\n   * @param target The extrema target to navigate to\n   */\n  public override navigateToExtrema(target: ExtremaTarget): void {\n    // Update the current point index (column)\n    this.col = target.pointIndex;\n\n    // Use common finalization method\n    this.finalizeExtremaNavigation();\n  }\n\n  /**\n   * Get a clean label for a specific point\n   * @param pointIndex The index of the point\n   * @returns A clean label for the point\n   */\n  private getPointLabel(pointIndex: number): string {\n    if (this.points[this.row] && this.points[this.row][pointIndex]) {\n      const point = this.points[this.row][pointIndex];\n      return `${point.x}`;\n    }\n    return `Point ${pointIndex}`;\n  }\n\n  /**\n   * Update the visual position of the current point\n   * This method should be called when navigation changes\n   */\n  protected updateVisualPointPosition(): void {\n    // Ensure we're within bounds\n    const { row: safeRow, col: safeCol } = this.getSafeIndices();\n    this.row = safeRow;\n    this.col = safeCol;\n  }\n\n  /**\n   * Get available X values for navigation\n   * @returns Array of X values\n   */\n  public getAvailableXValues(): XValue[] {\n    return this.points[this.row].map(val => val.x);\n  }\n\n  /**\n   * Move the line plot to the position that matches the given X value\n   * @param xValue The X value to move to\n   * @returns true if the position was found and set, false otherwise\n   */\n  public moveToXValue(xValue: XValue): boolean {\n    // Handle initial entry properly\n    if (this.isInitialEntry) {\n      this.movable.handleInitialEntry();\n    }\n    return super.moveToXValue(xValue);\n  }\n\n  public moveToNextCompareValue(direction: string, type: 'lower' | 'higher'): boolean {\n    const currentGroup = this.row;\n    if (currentGroup < 0 || currentGroup >= this.lineValues.length) {\n      return false;\n    }\n\n    const groupValues = this.lineValues[currentGroup];\n    if (!groupValues || groupValues.length === 0) {\n      return false;\n    }\n\n    const currentIndex = this.col;\n    const step = direction === 'right' ? 1 : -1;\n    let i = currentIndex + step;\n\n    while (i >= 0 && i < groupValues.length) {\n      if (this.compare(groupValues[i], groupValues[currentIndex], type)) {\n        this.col = i;\n        this.updateVisualPointPosition();\n        this.notifyStateUpdate();\n        return true;\n      }\n      i += step;\n    }\n    this.notifyRotorBounds();\n    return false;\n  }\n\n  public compare(a: number, b: number, type: 'lower' | 'higher'): boolean {\n    if (type === 'lower') {\n      return a < b;\n    }\n    if (type === 'higher') {\n      return a > b;\n    }\n    return false;\n  }\n\n  public moveUpRotor(_mode?: 'lower' | 'higher'): boolean {\n    this.moveOnce('UPWARD');\n    return true;\n  }\n\n  public moveDownRotor(_mode?: 'lower' | 'higher'): boolean {\n    this.moveOnce('DOWNWARD');\n    return true;\n  }\n}\n","import type { AxisConfig, MaidrLayer, ScatterPoint } from '@type/grammar';\nimport type { MovableDirection } from '@type/movable';\nimport type { GridNavigable } from '@type/navigation';\nimport type { AudioState, BrailleState, HighlightState, TextState, TraceState } from '@type/state';\nimport type { Dimension } from './abstract';\nimport { Constant } from '@util/constant';\nimport { MathUtil } from '@util/math';\nimport { Svg } from '@util/svg';\nimport { AbstractTrace } from './abstract';\nimport { MovablePlane } from './movable';\n\n/**\n * Represents scatter points grouped by X coordinate.\n */\ninterface ScatterXPoint {\n  x: number;\n  y: number[];\n}\n\n/**\n * Represents scatter points grouped by Y coordinate.\n */\ninterface ScatterYPoint {\n  x: number[];\n  y: number;\n}\n\n/**\n * Represents a single cell in the grid navigation overlay.\n */\ninterface GridCell {\n  points: ScatterPoint[];\n  yValues: number[];\n  xValues: number[];\n  svgElements: SVGElement[];\n  xRange: { min: number; max: number };\n  yRange: { min: number; max: number };\n}\n\nenum NavMode {\n  COL = 'col',\n  ROW = 'row',\n}\n\nexport class ScatterTrace extends AbstractTrace implements GridNavigable {\n  private mode: NavMode;\n  protected readonly movable: MovablePlane;\n  protected readonly supportsExtrema = false;\n\n  private readonly xPoints: ScatterXPoint[];\n  private readonly yPoints: ScatterYPoint[];\n\n  private readonly xValues: number[];\n  private readonly yValues: number[];\n\n  private readonly highlightXValues: SVGElement[][] | null;\n  private readonly highlightYValues: SVGElement[][] | null;\n  protected highlightCenters:\n    | { x: number; y: number; row: number; col: number; element: SVGElement }[]\n    | null;\n\n  private readonly minX: number;\n  private readonly maxX: number;\n  private readonly minY: number;\n  private readonly maxY: number;\n\n  // Grid navigation state\n  private readonly gridCells: GridCell[][] | null;\n  private readonly numGridRows: number;\n  private readonly numGridCols: number;\n  private gridRow: number;\n  private gridCol: number;\n  private isInGridMode: boolean;\n\n  // Grid cell point navigation state\n  private isInGridCellMode: boolean;\n  private cellPointIndex: number;\n  private cellXPoints: ScatterXPoint[]; // Grouped cell points by X (like xPoints)\n  private cellSvgGroups: SVGElement[][]; // SVG elements grouped by X\n\n  /**\n   * Creates a new scatter trace instance and organizes data by X and Y coordinates.\n   * @param layer - The MAIDR layer containing scatter plot data\n   */\n  public constructor(layer: MaidrLayer) {\n    super(layer);\n    this.mode = NavMode.COL;\n\n    const data = layer.data as ScatterPoint[];\n\n    const sortedByX = [...data].sort((a, b) => a.x - b.x || a.y - b.y);\n    this.xPoints = new Array<ScatterXPoint>();\n    let currentX: ScatterXPoint | null = null;\n    for (const point of sortedByX) {\n      if (!currentX || currentX.x !== point.x) {\n        currentX = { x: point.x, y: [] };\n        this.xPoints.push(currentX);\n      }\n      currentX.y.push(point.y);\n    }\n\n    const sortedByY = [...data].sort((a, b) => a.y - b.y || a.x - b.x);\n    this.yPoints = new Array<ScatterYPoint>();\n    let currentY: ScatterYPoint | null = null;\n    for (const point of sortedByY) {\n      if (!currentY || currentY.y !== point.y) {\n        currentY = { y: point.y, x: [] };\n        this.yPoints.push(currentY);\n      }\n      currentY.x.push(point.x);\n    }\n\n    this.xValues = this.xPoints.map(p => p.x);\n    this.yValues = this.yPoints.map(p => p.y);\n\n    this.minX = MathUtil.safeMin(this.xValues);\n    this.maxX = MathUtil.safeMax(this.xValues);\n    this.minY = MathUtil.safeMin(this.yValues);\n    this.maxY = MathUtil.safeMax(this.yValues);\n\n    // Select SVG elements once, then share for COL/ROW grouping and grid cell mapping\n    const selector = layer.selectors as string;\n    const allSvgClones = selector ? Svg.selectAllElements(selector) : [];\n\n    [this.highlightXValues, this.highlightYValues] = this.groupSvgElements(allSvgClones);\n    this.highlightCenters = this.mapSvgElementsToCenters();\n    this.movable = new MovablePlane(this.xPoints, this.yPoints);\n\n    // Build grid if config is provided (supports both axes.x.min and axes.min.x formats)\n    this.isInGridMode = false;\n    this.gridRow = 0;\n    this.gridCol = 0;\n    this.isInGridCellMode = false;\n    this.cellPointIndex = 0;\n    this.cellXPoints = [];\n    this.cellSvgGroups = [];\n    const gridConfig = this.resolveGridConfig(layer);\n    if (gridConfig) {\n      const xSteps = this.computeGridSteps(gridConfig.xMin, gridConfig.xMax, gridConfig.xTickStep);\n      const ySteps = this.computeGridSteps(gridConfig.yMin, gridConfig.yMax, gridConfig.yTickStep);\n      this.numGridCols = xSteps.length;\n      this.numGridRows = ySteps.length;\n      this.gridCells = this.buildGridCells(data, xSteps, ySteps, allSvgClones);\n    } else {\n      this.gridCells = null;\n      this.numGridRows = 0;\n      this.numGridCols = 0;\n    }\n  }\n\n  /**\n   * Cleans up resources and removes all highlight elements from the DOM.\n   */\n  public dispose(): void {\n    this.movable.dispose();\n\n    this.xPoints.length = 0;\n    this.yPoints.length = 0;\n\n    if (this.highlightXValues) {\n      this.highlightXValues.forEach(row => row.forEach(el => el.remove()));\n      this.highlightXValues.length = 0;\n    }\n    if (this.highlightYValues) {\n      this.highlightYValues.forEach(row => row.forEach(el => el.remove()));\n      this.highlightYValues.length = 0;\n    }\n\n    super.dispose();\n  }\n\n  /**\n   * Returns the appropriate highlight elements based on current navigation mode.\n   * @returns SVG elements for X-based or Y-based highlighting depending on mode\n   */\n  protected get highlightValues(): SVGElement[][] | null {\n    return this.mode === NavMode.COL\n      ? this.highlightXValues\n      : this.highlightYValues;\n  }\n\n  /**\n   * Returns an empty object to avoid grouping scatter points by audio tone.\n   * @returns Empty object without groupIndex to maintain consistent audio feedback\n   */\n  protected getAudioGroupIndex(): { groupIndex?: number } {\n    // Rationale for returning empty object instead of groupIndex:\n    //\n    // Scatterplots fundamentally differ from other plot types in their grouping semantics:\n    // - Bar/Line plots: groupIndex represents different series/categories with distinct audio tones\n    // - Heatmaps: groupIndex can represent different data dimensions\n    // - Scatterplots: Each point represents an individual observation, not a group\n    //\n    // Using groupIndex for scatterplots would cause different audio tones for what should be\n    // conceptually similar data points, potentially confusing users who expect consistent\n    // audio feedback when exploring point-by-point data.\n    //\n    // Future enhancement: When scatterplots support explicit multi-series data (e.g., different\n    // colors/shapes for distinct categories), this method should be updated to return the\n    // appropriate groupIndex for true categorical distinctions.\n    return {};\n  }\n\n  protected get values(): number[][] {\n    // Always return a 2D array with both X and Y values\n    // This ensures this.values[this.row] always exists\n    // The navigation logic in moveOnce and isMovable handles the mode-specific behavior\n    const result = [this.xValues, this.yValues];\n\n    // Safety check: ensure row is within bounds for the current mode\n    if (this.mode === NavMode.COL) {\n      // In COL mode, row should be 0 since we navigate through xValues\n      if (this.row !== 0) {\n        this.row = 0;\n      }\n    } else {\n      // In ROW mode, row should be within yPoints bounds\n      if (this.row < 0 || this.row >= this.yPoints.length) {\n        this.row = 0;\n      }\n    }\n\n    return result;\n  }\n\n  protected get braille(): BrailleState {\n    // Grid mode: return 2D grid of point counts for braille display\n    if (this.isInGridMode && this.gridCells) {\n      const gridValues: number[][] = [];\n      let maxCount = 0;\n      for (let r = 0; r < this.numGridRows; r++) {\n        gridValues[r] = [];\n        for (let c = 0; c < this.numGridCols; c++) {\n          const count = this.gridCells[r][c].points.length;\n          gridValues[r][c] = count;\n          if (count > maxCount) {\n            maxCount = count;\n          }\n        }\n      }\n      return {\n        empty: false,\n        id: this.id,\n        values: gridValues,\n        min: 0,\n        max: maxCount,\n        row: this.gridRow,\n        col: this.gridCol,\n      };\n    }\n\n    // Normal row/col mode: braille not supported (return empty state)\n    return this.outOfBoundsState as BrailleState;\n  }\n\n  protected get audio(): AudioState {\n    if (this.isInGridMode && this.gridCells) {\n      // Grid cell point navigation mode - play Y values at current X\n      if (this.isInGridCellMode && this.cellXPoints.length > 0) {\n        const currentPoint = this.cellXPoints[this.cellPointIndex];\n        return {\n          freq: {\n            raw: currentPoint.y,\n            min: this.minY,\n            max: this.maxY,\n          },\n          panning: {\n            y: 0,\n            x: this.cellPointIndex,\n            rows: 1,\n            cols: this.cellXPoints.length,\n          },\n        };\n      }\n\n      // Grid cell overview mode - play all Y values in cell\n      const cell = this.gridCells[this.gridRow][this.gridCol];\n      return {\n        freq: {\n          raw: cell.yValues,\n          min: this.minY,\n          max: this.maxY,\n        },\n        panning: {\n          y: this.gridRow,\n          x: this.gridCol,\n          rows: this.numGridRows,\n          cols: this.numGridCols,\n        },\n      };\n    }\n\n    if (this.mode === NavMode.COL) {\n      const current = this.xPoints[this.col];\n      return {\n        freq: {\n          raw: current.y,\n          min: this.minY,\n          max: this.maxY,\n        },\n        panning: {\n          y: this.row,\n          x: this.col,\n          rows: current.y.length,\n          cols: this.xPoints.length,\n        },\n      };\n    } else {\n      const current = this.yPoints[this.row];\n      return {\n        freq: {\n          raw: current.x,\n          min: this.minX,\n          max: this.maxX,\n        },\n        panning: {\n          y: this.row,\n          x: this.col,\n          rows: this.yPoints.length,\n          cols: current.x.length,\n        },\n      };\n    }\n  }\n\n  protected get text(): TextState {\n    if (this.isInGridMode && this.gridCells) {\n      const cell = this.gridCells[this.gridRow][this.gridCol];\n\n      // Grid cell point navigation mode - use COL mode format (X value + array of Y values)\n      if (this.isInGridCellMode && this.cellXPoints.length > 0) {\n        const currentPoint = this.cellXPoints[this.cellPointIndex];\n        return {\n          main: { label: this.xAxis, value: currentPoint.x },\n          cross: { label: this.yAxis, value: currentPoint.y },\n          gridPosition: { row: this.gridRow + 1, col: this.gridCol + 1 },\n        };\n      }\n\n      // Grid cell navigation mode (cell overview)\n      return {\n        main: { label: this.xAxis, value: '' },\n        cross: { label: this.yAxis, value: '' },\n        range: { min: cell.xRange.min, max: cell.xRange.max },\n        crossRange: { min: cell.yRange.min, max: cell.yRange.max },\n        gridPoints: cell.points,\n        gridPosition: { row: this.gridRow + 1, col: this.gridCol + 1 },\n      };\n    }\n\n    if (this.mode === NavMode.COL) {\n      const current = this.xPoints[this.col];\n      return {\n        main: { label: this.xAxis, value: current.x },\n        cross: { label: this.yAxis, value: current.y },\n      };\n    } else {\n      const current = this.yPoints[this.row];\n      return {\n        main: { label: this.yAxis, value: current.y },\n        cross: { label: this.xAxis, value: current.x },\n      };\n    }\n  }\n\n  protected get dimension(): Dimension {\n    if (this.isInGridMode) {\n      return {\n        rows: this.numGridRows,\n        cols: this.numGridCols,\n      };\n    }\n    return {\n      rows: this.yPoints.length,\n      cols: this.xPoints.length,\n    };\n  }\n\n  protected get highlight(): HighlightState {\n    if (this.isInGridMode && this.gridCells) {\n      const cell = this.gridCells[this.gridRow][this.gridCol];\n\n      // Grid cell point navigation - highlight all points at current X\n      if (this.isInGridCellMode && this.cellSvgGroups.length > 0) {\n        const elements = this.cellSvgGroups[this.cellPointIndex];\n        if (!elements || elements.length === 0) {\n          return this.outOfBoundsState as HighlightState;\n        }\n        return {\n          empty: false,\n          elements,\n        };\n      }\n\n      // Grid cell overview - highlight all points in cell\n      if (cell.svgElements.length === 0) {\n        return this.outOfBoundsState as HighlightState;\n      }\n      return {\n        empty: false,\n        elements: cell.svgElements,\n      };\n    }\n\n    if (this.highlightValues === null) {\n      return this.outOfBoundsState as HighlightState;\n    }\n\n    const elements = this.mode === NavMode.COL\n      ? this.col < this.highlightValues.length ? this.highlightValues![this.col] : null\n      : this.row < this.highlightValues.length ? this.highlightValues![this.row] : null;\n    if (!elements) {\n      return this.outOfBoundsState as HighlightState;\n    }\n\n    return {\n      empty: false,\n      elements,\n    };\n  }\n\n  protected get hasMultiPoints(): boolean {\n    return true;\n  }\n\n  /**\n   * Returns out-of-bounds state with correct position for grid mode panning.\n   * In grid mode, uses gridCol/gridRow for correct left/right audio panning.\n   */\n  protected get outOfBoundsState(): TraceState {\n    // Use grid position when in grid mode for correct panning\n    if (this.isInGridMode && this.gridCells) {\n      return {\n        empty: true,\n        type: 'trace',\n        traceType: this.type,\n        audio: {\n          y: this.gridRow,\n          x: this.gridCol,\n          rows: this.numGridRows,\n          cols: this.numGridCols,\n        },\n      };\n    }\n    // Fall back to parent implementation for non-grid mode\n    return super.outOfBoundsState;\n  }\n\n  /**\n   * Initializes scatter plot navigation at the origin in column mode.\n   */\n  protected handleInitialEntry(): void {\n    this.isInitialEntry = false;\n    // For scatter plots, start in COL mode with row=0, col=0\n    this.row = 0;\n    this.col = 0;\n    this.mode = NavMode.COL;\n  }\n\n  /**\n   * Toggles between COL and ROW navigation modes while maintaining logical position mapping.\n   */\n  private toggleNavigation(): void {\n    if (this.mode === NavMode.COL) {\n      // Switch from COL to ROW mode\n      const currentXPoint = this.xPoints[this.col];\n      const middleYValue\n        = currentXPoint.y[Math.floor(currentXPoint.y.length / 2)];\n      const targetRow = this.yValues.indexOf(middleYValue);\n\n      // Safety check: ensure the calculated row is valid\n      if (targetRow === -1 || targetRow >= this.yPoints.length) {\n        this.row = 0; // Use 0 as fallback\n      } else {\n        this.row = targetRow; // Use the calculated row to maintain logical connection\n      }\n\n      this.mode = NavMode.ROW;\n    } else {\n      // Switch from ROW to COL mode\n      const currentYPoint = this.yPoints[this.row];\n      const middleXValue\n        = currentYPoint.x[Math.floor(currentYPoint.x.length / 2)];\n      const targetCol = this.xValues.indexOf(middleXValue);\n\n      // Safety check: ensure the calculated col is valid\n      if (targetCol === -1 || targetCol >= this.xPoints.length) {\n        this.col = 0;\n      } else {\n        this.col = targetCol;\n      }\n\n      this.mode = NavMode.COL;\n      this.row = 0; // Set to 0 for COL mode since values[0] = xValues\n    }\n  }\n\n  public moveOnce(direction: MovableDirection): boolean {\n    if (this.isInitialEntry) {\n      this.handleInitialEntry();\n      this.notifyStateUpdate();\n      return true;\n    }\n\n    // Handle grid mode navigation (used by autoplay and direct calls)\n    if (this.isInGridMode && this.gridCells) {\n      return this.moveOnceInGridMode(direction);\n    }\n\n    if (!this.isMovable(direction)) {\n      this.notifyOutOfBounds();\n      return false;\n    }\n\n    if (this.mode === NavMode.COL) {\n      switch (direction) {\n        case 'FORWARD':\n          this.col++;\n          break;\n        case 'BACKWARD':\n          this.col--;\n          break;\n        case 'UPWARD':\n        case 'DOWNWARD': {\n          this.toggleNavigation();\n          break;\n        }\n      }\n    } else {\n      switch (direction) {\n        case 'UPWARD':\n          this.row++;\n          break;\n        case 'DOWNWARD':\n          this.row--;\n          break;\n        case 'FORWARD':\n        case 'BACKWARD': {\n          this.toggleNavigation();\n          break;\n        }\n      }\n    }\n\n    this.notifyStateUpdate();\n    return true;\n  }\n\n  /**\n   * Handles movement in grid mode, mapping directions to grid cell navigation.\n   * @param direction - The movement direction\n   * @returns True if movement was successful, false if at boundary\n   */\n  private moveOnceInGridMode(direction: MovableDirection): boolean {\n    let moved = false;\n    switch (direction) {\n      case 'FORWARD':\n        moved = this.moveGridRight();\n        break;\n      case 'BACKWARD':\n        moved = this.moveGridLeft();\n        break;\n      case 'UPWARD':\n        moved = this.moveGridUp();\n        break;\n      case 'DOWNWARD':\n        moved = this.moveGridDown();\n        break;\n    }\n    // Grid movement methods already call notifyStateUpdate() or notifyOutOfBounds()\n    return moved;\n  }\n\n  public moveToExtreme(direction: MovableDirection): boolean {\n    if (this.isInitialEntry) {\n      this.handleInitialEntry();\n    }\n\n    if (this.mode === NavMode.COL) {\n      switch (direction) {\n        case 'UPWARD':\n          this.toggleNavigation();\n          this.row = this.yPoints.length - 1; // Go to last Y coordinate\n          break;\n        case 'DOWNWARD':\n          this.toggleNavigation();\n          this.row = 0; // Go to first Y coordinate\n          break;\n        case 'FORWARD':\n          this.col = this.xPoints.length - 1;\n          break;\n        case 'BACKWARD':\n          this.col = 0;\n          break;\n      }\n    } else {\n      switch (direction) {\n        case 'UPWARD':\n          this.row = this.yPoints.length - 1; // Go to last Y coordinate\n          break;\n        case 'DOWNWARD':\n          this.row = 0; // Go to first Y coordinate\n          break;\n        case 'FORWARD':\n          this.toggleNavigation();\n          this.col = this.xPoints.length - 1;\n          break;\n        case 'BACKWARD':\n          this.toggleNavigation();\n          this.col = 0;\n          break;\n      }\n    }\n    this.notifyStateUpdate();\n    return true;\n  }\n\n  public moveToIndex(row: number, col: number): boolean {\n    if (this.mode === NavMode.COL) {\n      if (row >= 0 && row < this.xPoints.length) {\n        this.col = row;\n        this.row = 0;\n        this.notifyStateUpdate();\n        return true;\n      } else {\n        this.notifyOutOfBounds();\n        return false;\n      }\n    } else {\n      if (col >= 0 && col < this.yPoints.length) {\n        this.col = col;\n        this.row = 0;\n        this.notifyStateUpdate();\n        return true;\n      } else {\n        this.notifyOutOfBounds();\n        return false;\n      }\n    }\n  }\n\n  /**\n   * Checks if movement in the specified direction is possible from current position.\n   * @param target - Direction or coordinate to check\n   * @returns True if movement is possible, false otherwise\n   */\n  public isMovable(target: [number, number] | MovableDirection): boolean {\n    if (Array.isArray(target)) {\n      return false;\n    }\n\n    // Check grid mode boundaries\n    if (this.isInGridMode && this.gridCells) {\n      switch (target) {\n        case 'FORWARD':\n          return this.gridCol < this.numGridCols - 1;\n        case 'BACKWARD':\n          return this.gridCol > 0;\n        case 'UPWARD':\n          return this.gridRow < this.numGridRows - 1;\n        case 'DOWNWARD':\n          return this.gridRow > 0;\n        default:\n          return false;\n      }\n    }\n\n    if (this.mode === NavMode.COL) {\n      switch (target) {\n        case 'FORWARD':\n          return this.col < this.xPoints.length - 1;\n        case 'BACKWARD':\n          return this.col > 0;\n        case 'UPWARD':\n        case 'DOWNWARD':\n          return true;\n        default:\n          return false;\n      }\n    } else {\n      switch (target) {\n        case 'UPWARD':\n          return this.row < this.yPoints.length - 1;\n        case 'DOWNWARD':\n          return this.row > 0;\n        case 'FORWARD':\n        case 'BACKWARD':\n          return true;\n        default:\n          return false;\n      }\n    }\n  }\n\n  // ── Grid navigation methods ───────────────────────────────────────────\n\n  public setGridMode(enabled: boolean): void {\n    if (!this.gridCells) {\n      this.isInGridMode = false;\n      return;\n    }\n    this.isInGridMode = enabled;\n    if (enabled) {\n      this.gridRow = 0;\n      this.gridCol = 0;\n    }\n  }\n\n  public override supportsCompareMode(): boolean {\n    return false;\n  }\n\n  public override dataModeName(): string {\n    return Constant.ROW_COL_MODE;\n  }\n\n  public supportsGridMode(): boolean {\n    return this.gridCells !== null;\n  }\n\n  public getGridDimensions(): { rows: number; cols: number } | null {\n    if (!this.gridCells)\n      return null;\n    return { rows: this.numGridRows, cols: this.numGridCols };\n  }\n\n  public getGridPosition(): { row: number; col: number } | null {\n    if (!this.gridCells)\n      return null;\n    // Return 1-indexed position for user display\n    return { row: this.gridRow + 1, col: this.gridCol + 1 };\n  }\n\n  public moveGridUp(): boolean {\n    if (!this.gridCells)\n      return false;\n    if (this.gridRow >= this.numGridRows - 1) {\n      this.notifyOutOfBounds();\n      return false;\n    }\n    this.gridRow++;\n    this.notifyStateUpdate();\n    return true;\n  }\n\n  public moveGridDown(): boolean {\n    if (!this.gridCells)\n      return false;\n    if (this.gridRow <= 0) {\n      this.notifyOutOfBounds();\n      return false;\n    }\n    this.gridRow--;\n    this.notifyStateUpdate();\n    return true;\n  }\n\n  public moveGridLeft(): boolean {\n    if (!this.gridCells)\n      return false;\n    if (this.gridCol <= 0) {\n      this.notifyOutOfBounds();\n      return false;\n    }\n    this.gridCol--;\n    this.notifyStateUpdate();\n    return true;\n  }\n\n  public moveGridRight(): boolean {\n    if (!this.gridCells)\n      return false;\n    if (this.gridCol >= this.numGridCols - 1) {\n      this.notifyOutOfBounds();\n      return false;\n    }\n    this.gridCol++;\n    this.notifyStateUpdate();\n    return true;\n  }\n\n  // ── Grid cell point navigation ──────────────────────────────────────────\n\n  /**\n   * Checks if currently in grid cell mode (navigating points within a cell).\n   */\n  public isInCellMode(): boolean {\n    return this.isInGridCellMode;\n  }\n\n  /**\n   * Enters grid cell mode to navigate points within the current cell.\n   * Groups cell points by X coordinate (like COL mode) for navigation.\n   * @returns true if entered successfully, false if no points in cell\n   */\n  public enterGridCell(): boolean {\n    if (!this.gridCells || !this.isInGridMode)\n      return false;\n    const cell = this.gridCells[this.gridRow][this.gridCol];\n    if (cell.points.length === 0) {\n      this.notifyOutOfBounds();\n      return false;\n    }\n\n    // Build cellXPoints by grouping cell points by X (sorted by X, then Y)\n    const pointsWithSvg = cell.points.map((p, i) => ({ point: p, svg: cell.svgElements[i] }));\n    const sorted = [...pointsWithSvg].sort((a, b) => a.point.x - b.point.x || a.point.y - b.point.y);\n\n    this.cellXPoints = [];\n    this.cellSvgGroups = [];\n    let currentX: ScatterXPoint | null = null;\n    let currentSvgGroup: SVGElement[] = [];\n\n    for (const { point, svg } of sorted) {\n      if (!currentX || currentX.x !== point.x) {\n        if (currentX) {\n          this.cellXPoints.push(currentX);\n          this.cellSvgGroups.push(currentSvgGroup);\n        }\n        currentX = { x: point.x, y: [] };\n        currentSvgGroup = [];\n      }\n      currentX.y.push(point.y);\n      if (svg)\n        currentSvgGroup.push(svg);\n    }\n    if (currentX) {\n      this.cellXPoints.push(currentX);\n      this.cellSvgGroups.push(currentSvgGroup);\n    }\n\n    this.isInGridCellMode = true;\n    this.cellPointIndex = 0;\n    this.notifyStateUpdate();\n    return true;\n  }\n\n  /**\n   * Exits grid cell mode and returns to grid navigation.\n   */\n  public exitGridCell(): void {\n    this.isInGridCellMode = false;\n    this.cellPointIndex = 0;\n    this.notifyStateUpdate();\n  }\n\n  /**\n   * Moves to the previous point within the current grid cell.\n   * @returns true if moved, false if at boundary\n   */\n  public moveCellPointLeft(): boolean {\n    if (!this.gridCells || !this.isInGridCellMode)\n      return false;\n    if (this.cellPointIndex <= 0) {\n      this.notifyOutOfBounds();\n      return false;\n    }\n    this.cellPointIndex--;\n    this.notifyStateUpdate();\n    return true;\n  }\n\n  /**\n   * Moves to the next X-grouped point within the current grid cell.\n   * @returns true if moved, false if at boundary\n   */\n  public moveCellPointRight(): boolean {\n    if (!this.gridCells || !this.isInGridCellMode)\n      return false;\n    if (this.cellPointIndex >= this.cellXPoints.length - 1) {\n      this.notifyOutOfBounds();\n      return false;\n    }\n    this.cellPointIndex++;\n    this.notifyStateUpdate();\n    return true;\n  }\n\n  /**\n   * Gets the current point index within the cell (0-indexed).\n   */\n  public getCellPointIndex(): number {\n    return this.cellPointIndex;\n  }\n\n  /**\n   * Gets the total number of X-grouped points in the current grid cell.\n   */\n  public getCellPointCount(): number {\n    if (!this.isInGridCellMode)\n      return 0;\n    return this.cellXPoints.length;\n  }\n\n  /**\n   * Gets the current X-grouped point within the grid cell.\n   */\n  public getCurrentCellPoint(): ScatterXPoint | null {\n    if (!this.isInGridCellMode || this.cellXPoints.length === 0)\n      return null;\n    return this.cellXPoints[this.cellPointIndex] ?? null;\n  }\n\n  // ── Grid construction helpers ─────────────────────────────────────────\n\n  /**\n   * Resolves grid configuration from the layer's axes, supporting two formats:\n   * - Format A (per-axis): `axes.x = { min, max, tickStep }` and `axes.y = { min, max, tickStep }`\n   * - Format B (grouped):  `axes.min = { x, y }`, `axes.max = { x, y }`, `axes.tickStep = { x, y }`\n   * Both formats can coexist; per-axis values take precedence.\n   * Returns null if no grid config is found.\n   */\n  private resolveGridConfig(\n    layer: MaidrLayer,\n  ): { xMin: number; xMax: number; xTickStep: number; yMin: number; yMax: number; yTickStep: number } | null {\n    const axes = layer.axes;\n    if (!axes)\n      return null;\n\n    const axisX = typeof axes.x === 'object' ? axes.x as AxisConfig : null;\n    const axisY = typeof axes.y === 'object' ? axes.y as AxisConfig : null;\n\n    // Per-axis (Format A) takes precedence, then grouped (Format B)\n    const xMin = axisX?.min ?? axes.min?.x;\n    const xMax = axisX?.max ?? axes.max?.x;\n    const xTickStep = axisX?.tickStep ?? axes.tickStep?.x;\n    const yMin = axisY?.min ?? axes.min?.y;\n    const yMax = axisY?.max ?? axes.max?.y;\n    const yTickStep = axisY?.tickStep ?? axes.tickStep?.y;\n\n    // All six values must be present for a valid grid config\n    if (xMin == null || xMax == null || xTickStep == null || yMin == null || yMax == null || yTickStep == null) {\n      return null;\n    }\n\n    return { xMin, xMax, xTickStep, yMin, yMax, yTickStep };\n  }\n\n  /**\n   * Computes bin boundaries for one axis.\n   * @returns Array of { min, max } ranges. Last bin extends to axisMax.\n   */\n  private computeGridSteps(\n    axisMin: number,\n    axisMax: number,\n    tick: number,\n  ): { min: number; max: number }[] {\n    const steps: { min: number; max: number }[] = [];\n    const numBins = Math.round((axisMax - axisMin) / tick);\n    for (let i = 0; i < numBins; i++) {\n      const binMin = axisMin + i * tick;\n      const binMax = i === numBins - 1 ? axisMax : axisMin + (i + 1) * tick;\n      steps.push({ min: Math.round(binMin * 1000) / 1000, max: Math.round(binMax * 1000) / 1000 });\n    }\n    return steps;\n  }\n\n  /**\n   * Finds which bin index a value belongs to.\n   * Uses half-open intervals [min, max) except the last bin which is [min, max].\n   */\n  private findGridBin(\n    value: number,\n    bins: { min: number; max: number }[],\n  ): number {\n    for (let i = 0; i < bins.length; i++) {\n      if (i === bins.length - 1) {\n        if (value >= bins[i].min && value <= bins[i].max)\n          return i;\n      } else {\n        if (value >= bins[i].min && value < bins[i].max)\n          return i;\n      }\n    }\n    return -1;\n  }\n\n  /**\n   * Builds the 2D grid of cells and bins data points into them.\n   * Also maps SVG elements to grid cells by data point index correspondence.\n   * @param data - The original (unsorted) scatter point data array\n   * @param xSteps - X-axis bin boundaries\n   * @param ySteps - Y-axis bin boundaries\n   * @param svgClones - Pre-selected SVG element clones (index-matched to data array)\n   */\n  private buildGridCells(\n    data: ScatterPoint[],\n    xSteps: { min: number; max: number }[],\n    ySteps: { min: number; max: number }[],\n    svgClones: SVGElement[],\n  ): GridCell[][] {\n    // Initialize empty grid: gridCells[row][col]\n    // Row 0 = lowest Y range, row N = highest Y range\n    const grid: GridCell[][] = [];\n    for (let r = 0; r < ySteps.length; r++) {\n      grid[r] = [];\n      for (let c = 0; c < xSteps.length; c++) {\n        grid[r][c] = {\n          points: [],\n          yValues: [],\n          xValues: [],\n          svgElements: [],\n          xRange: xSteps[c],\n          yRange: ySteps[r],\n        };\n      }\n    }\n\n    const hasElements = svgClones.length === data.length;\n\n    // Bin each data point into the appropriate cell\n    for (let i = 0; i < data.length; i++) {\n      const point = data[i];\n      const colIdx = this.findGridBin(point.x, xSteps);\n      const rowIdx = this.findGridBin(point.y, ySteps);\n      if (rowIdx !== -1 && colIdx !== -1) {\n        grid[rowIdx][colIdx].points.push(point);\n        grid[rowIdx][colIdx].yValues.push(point.y);\n        grid[rowIdx][colIdx].xValues.push(point.x);\n        if (hasElements) {\n          grid[rowIdx][colIdx].svgElements.push(svgClones[i]);\n        }\n      }\n    }\n\n    return grid;\n  }\n\n  // ── Existing private methods ──────────────────────────────────────────\n\n  /**\n   * Groups pre-selected SVG elements by their X and Y coordinates.\n   * @param elements - Array of SVG element clones (already selected from the DOM)\n   * @returns Tuple of SVG element arrays grouped by X and Y, or null arrays if empty\n   */\n  private groupSvgElements(\n    elements: SVGElement[],\n  ): [SVGElement[][], SVGElement[][]] | [null, null] {\n    if (elements.length === 0) {\n      return [null, null];\n    }\n\n    const xGroups = new Map<number, SVGElement[]>();\n    const yGroups = new Map<number, SVGElement[]>();\n    elements.forEach((element) => {\n      let x = Number.parseFloat(element.getAttribute('x') || '');\n      let y = Number.parseFloat(element.getAttribute('y') || '');\n\n      // SVG circles use cx/cy instead of x/y (Google Charts uses circles)\n      if (Number.isNaN(x) || Number.isNaN(y)) {\n        const cx = element.getAttribute('cx');\n        const cy = element.getAttribute('cy');\n        if (cx && cy) {\n          x = Number.parseFloat(cx);\n          y = Number.parseFloat(cy);\n        }\n      }\n\n      // Plotly uses transform=\"translate(x, y)\" instead of x/y attributes\n      if (Number.isNaN(x) || Number.isNaN(y)) {\n        const transform = element.getAttribute('transform');\n        if (transform) {\n          const match = transform.match(\n            /translate\\s*\\(\\s*([\\d.eE+-]+)[\\s,]+([\\d.eE+-]+)/,\n          );\n          if (match) {\n            x = Number.parseFloat(match[1]);\n            y = Number.parseFloat(match[2]);\n          }\n        }\n      }\n\n      if (!Number.isNaN(x)) {\n        if (!xGroups.has(x))\n          xGroups.set(x, []);\n        xGroups.get(x)!.push(element);\n      }\n\n      if (!Number.isNaN(y)) {\n        if (!yGroups.has(y))\n          yGroups.set(y, []);\n        yGroups.get(y)!.push(element);\n      }\n    });\n\n    const sortedXElements = Array.from(xGroups.entries())\n      .sort(([x1], [x2]) => x1 - x2)\n      .map(([_, elements]) => elements);\n    const sortedYElements = Array.from(yGroups.entries())\n      .sort(([y1], [y2]) => y2 - y1)\n      .map(([_, elements]) => elements);\n\n    return [sortedXElements, sortedYElements];\n  }\n\n  /**\n   * Converts SVG elements to center coordinates for proximity-based navigation.\n   * @returns Array of center points with coordinates and indices, or null if unavailable\n   */\n  protected mapSvgElementsToCenters():\n    | { x: number; y: number; row: number; col: number; element: SVGElement }[]\n    | null {\n    const svgElements: (SVGElement | SVGElement[])[][] | null = this.highlightXValues;\n\n    if (!svgElements) {\n      return null;\n    }\n\n    const centers: {\n      x: number;\n      y: number;\n      row: number;\n      col: number;\n      element: SVGElement;\n    }[] = [];\n    for (let row = 0; row < svgElements.length; row++) {\n      for (let col = 0; col < svgElements[row].length; col++) {\n        const element = svgElements[row][col];\n        const targetElement = Array.isArray(element) ? element[0] : element;\n        if (targetElement) {\n          const bbox = targetElement.getBoundingClientRect();\n          centers.push({\n            x: bbox.x + bbox.width / 2,\n            y: bbox.y + bbox.height / 2,\n            row,\n            col,\n            element: targetElement,\n          });\n        }\n      }\n    }\n\n    return centers;\n  }\n\n  /**\n   * Finds the nearest scatter point to the given screen coordinates.\n   * @param _x - The x-coordinate in screen space\n   * @param _y - The y-coordinate in screen space\n   * @returns The nearest point with its element and indices, or null if unavailable\n   */\n  public findNearestPoint(\n    _x: number,\n    _y: number,\n  ): { element: SVGElement; row: number; col: number } | null {\n    // loop through highlightCenters to find nearest point\n    if (!this.highlightCenters) {\n      return null;\n    }\n\n    let nearestDistance = Infinity;\n    let nearestIndex = -1;\n\n    for (let i = 0; i < this.highlightCenters.length; i++) {\n      const center = this.highlightCenters[i];\n      const distance = Math.hypot(center.x - _x, center.y - _y);\n      if (distance < nearestDistance) {\n        nearestDistance = distance;\n        nearestIndex = i;\n      }\n    }\n\n    if (nearestIndex === -1) {\n      return null;\n    }\n\n    return {\n      element: this.highlightCenters[nearestIndex].element,\n      row: this.highlightCenters[nearestIndex].row,\n      col: this.highlightCenters[nearestIndex].col,\n    };\n  }\n\n  /**\n   * Moves to the nearest scatter point at the specified screen coordinates.\n   * @param x - The x-coordinate in screen space\n   * @param y - The y-coordinate in screen space\n   */\n  public moveToPoint(x: number, y: number): void {\n    // set to vertical mode\n    this.mode = NavMode.COL;\n\n    const nearest = this.findNearestPoint(x, y);\n    if (nearest) {\n      if (this.isPointInBounds(x, y, nearest)) {\n        // don't move if we're already there\n        if (this.row === nearest.row && this.col === nearest.col) {\n          return;\n        }\n        this.moveToIndex(nearest.row, nearest.col);\n      }\n    }\n  }\n}\n","import type { ExtremaTarget } from '@type/extrema';\nimport type { MaidrLayer, SegmentedPoint } from '@type/grammar';\nimport type { HighlightState, TextState } from '@type/state';\nimport { Orientation } from '@type/grammar';\nimport { MathUtil } from '@util/math';\nimport { Svg } from '@util/svg';\nimport { AbstractBarPlot } from './bar';\n\nconst SUM = 'Sum';\nconst UNDEFINED = 'undefined';\n\nexport class SegmentedTrace extends AbstractBarPlot<SegmentedPoint> {\n  public constructor(layer: MaidrLayer) {\n    super(layer, layer.data as SegmentedPoint[][]);\n    this.createSummaryLevel();\n  }\n\n  private createSummaryLevel(): void {\n    const summaryValues = new Array<number>();\n    const summaryPoints = new Array<SegmentedPoint>();\n    for (let i = 0; i < this.barValues[0].length; i++) {\n      const sum = this.barValues.reduce((sum, row) => sum + row[i], 0);\n      summaryValues.push(sum);\n\n      const point = this.orientation === Orientation.VERTICAL\n        ? {\n            x: this.points[0][i].x,\n            y: sum,\n            z: SUM,\n          }\n        : {\n            x: sum,\n            y: this.points[0][i].y,\n            z: SUM,\n          };\n      summaryPoints.push(point);\n    }\n    this.points.push(summaryPoints);\n    this.barValues.push(summaryValues);\n\n    const { min: summaryMin, max: summaryMax } = MathUtil.minMax(summaryValues);\n    this.min.push(summaryMin);\n    this.max.push(summaryMax);\n  }\n\n  /**\n   * Get extrema targets for the current segmented bar plot trace\n   * Returns min and max values within the current group the user is navigating\n   * @returns Array of extrema targets for navigation\n   */\n  public override getExtremaTargets(): ExtremaTarget[] {\n    const targets: ExtremaTarget[] = [];\n    const currentGroup = this.row;\n\n    if (currentGroup < 0 || currentGroup >= this.barValues.length) {\n      return targets;\n    }\n\n    // Use pre-computed min/max values instead of recalculating\n    const groupMin = this.min[currentGroup];\n    const groupMax = this.max[currentGroup];\n    const groupValues = this.barValues[currentGroup];\n\n    if (!groupValues || groupValues.length === 0) {\n      return targets;\n    }\n\n    // Find indices of min/max values\n    const maxIndex = groupValues.indexOf(groupMax);\n    const minIndex = groupValues.indexOf(groupMin);\n\n    // Get group label and category labels\n    const groupLabel = this.getGroupLabel(currentGroup);\n    const maxCategoryLabel = this.getCategoryLabel(maxIndex);\n    const minCategoryLabel = this.getCategoryLabel(minIndex);\n\n    // Inline raw x-value lookup using currentGroup (avoids hidden this.row dependency)\n    const maxPoint = this.points[currentGroup]?.[maxIndex];\n    const minPoint = this.points[currentGroup]?.[minIndex];\n    const maxXValue = maxPoint\n      ? (this.orientation === Orientation.VERTICAL ? maxPoint.x : maxPoint.y)\n      : undefined;\n    const minXValue = minPoint\n      ? (this.orientation === Orientation.VERTICAL ? minPoint.x : minPoint.y)\n      : undefined;\n\n    // Add max target\n    targets.push({\n      label: `Max ${groupLabel} at ${maxCategoryLabel}`,\n      value: groupMax,\n      pointIndex: maxIndex,\n      segment: groupLabel,\n      type: 'max',\n      groupIndex: currentGroup,\n      categoryIndex: maxIndex,\n      navigationType: 'group',\n      xValue: maxXValue,\n    });\n\n    // Add min target\n    targets.push({\n      label: `Min ${groupLabel} at ${minCategoryLabel}`,\n      value: groupMin,\n      pointIndex: minIndex,\n      segment: groupLabel,\n      type: 'min',\n      groupIndex: currentGroup,\n      categoryIndex: minIndex,\n      navigationType: 'group',\n      xValue: minXValue,\n    });\n\n    return targets;\n  }\n\n  /**\n   * Navigate to a specific extrema target\n   * @param target The extrema target to navigate to\n   */\n  public override navigateToExtrema(target: ExtremaTarget): void {\n    // For group-based navigation, stay in same group but move to different category\n    if (target.groupIndex !== undefined && target.categoryIndex !== undefined) {\n      this.row = target.groupIndex;\n      this.col = target.categoryIndex;\n    } else {\n      // Fallback to point-based navigation\n      this.col = target.pointIndex;\n    }\n\n    // Use common finalization method\n    this.finalizeExtremaNavigation();\n  }\n\n  /**\n   * Get a human-readable label for the current group\n   * @param groupIndex The index of the group\n   * @returns A label for the group\n   */\n  private getGroupLabel(groupIndex: number): string {\n    if (this.points[groupIndex] && this.points[groupIndex].length > 0) {\n      const firstPoint = this.points[groupIndex][0];\n\n      // Check if this is the summary level\n      if (groupIndex === this.barValues.length - 1) {\n        return 'Total';\n      }\n\n      // For dodged/stacked plots, use the z value as group identifier\n      if (firstPoint.z) {\n        return `${this.getZAxisLabel()}: '${firstPoint.z}'`;\n      }\n    }\n\n    return `Group ${groupIndex}`;\n  }\n\n  /**\n   * Get a human-readable label for a specific category\n   * @param categoryIndex The index of the category\n   * @returns A label for the category\n   */\n  private getCategoryLabel(categoryIndex: number): string {\n    if (this.points[0] && this.points[0][categoryIndex]) {\n      const point = this.points[0][categoryIndex];\n      if (this.orientation === Orientation.VERTICAL) {\n        return `${point.x}`;\n      } else {\n        return `${point.y}`;\n      }\n    }\n    return `Category ${categoryIndex}`;\n  }\n\n  /**\n   * Get the label for the z axis (e.g., \"Drive\", \"Survival Status\")\n   * @returns The z axis label\n   */\n  private getZAxisLabel(): string {\n    // Use the z-axis label from the layer configuration\n    return this.z;\n  }\n\n  /**\n   * Update the visual position of the current point\n   * This method should be called when navigation changes\n   */\n  protected updateVisualPointPosition(): void {\n    // Ensure we're within bounds\n    const { row: safeRow, col: safeCol } = this.getSafeIndices();\n    this.row = safeRow;\n    this.col = safeCol;\n  }\n\n  protected get text(): TextState {\n    return {\n      ...super.text,\n      z: {\n        label: this.z,\n        value: this.points[this.row][this.col].z ?? UNDEFINED,\n      },\n    };\n  }\n\n  protected get highlight(): HighlightState {\n    if (this.highlightValues === null || this.row === this.barValues.length - 1) {\n      return this.outOfBoundsState as HighlightState;\n    }\n\n    // Defensive check: ensure row and col exist in highlightValues\n    const rowElements = this.highlightValues[this.row];\n    if (!rowElements || !rowElements[this.col]) {\n      return this.outOfBoundsState as HighlightState;\n    }\n\n    return {\n      empty: false,\n      elements: rowElements[this.col],\n    };\n  }\n\n  protected mapToSvgElements(selector?: string): SVGElement[][] | null {\n    if (!selector) {\n      return null;\n    }\n\n    const domElements = Svg.selectAllElements(selector);\n    if (domElements.length === 0) {\n      return null;\n    }\n\n    // Count total expected data points (excluding summary row added later).\n    const totalExpected = this.barValues.reduce((sum, row) => sum + row.length, 0);\n    // Only skip zeros when DOM has fewer elements than data points\n    // (e.g. Plotly histograms omit zero-height bins). When counts match\n    // (e.g. Plotly stacked bars render zero-height segments), map 1:1.\n    const skipZeros = domElements.length < totalExpected;\n\n    const svgElements = new Array<Array<SVGElement>>();\n    if (domElements[0] instanceof SVGPathElement) {\n      for (let r = 0, domIndex = 0; r < this.barValues.length; r++) {\n        const row = new Array<SVGElement>();\n        for (let c = 0; c < this.barValues[r].length; c++) {\n          if (skipZeros && this.barValues[r][c] === 0) {\n            row.push(Svg.createEmptyElement());\n          } else if (domIndex >= domElements.length) {\n            return new Array<Array<SVGElement>>();\n          } else {\n            row.push(domElements[domIndex++]);\n          }\n        }\n        svgElements.push(row);\n      }\n    } else if (domElements[0] instanceof SVGRectElement) {\n      // Safety check: ensure barValues is valid\n      if (!this.barValues || this.barValues.length === 0) {\n        return null;\n      }\n\n      for (let r = 0; r < this.barValues.length; r++) {\n        svgElements.push(new Array<SVGElement>());\n      }\n\n      const isRowMajor = this.layer.domMapping?.order === 'row';\n      const isForward = this.layer.domMapping?.groupDirection === 'forward';\n\n      if (isRowMajor) {\n        // Row-major DOM order: DOM elements are [series0-all-cats, series1-all-cats, ...]\n        // This matches Google Charts rendering order.\n        for (let r = 0, domIndex = 0; r < this.barValues.length; r++) {\n          if (!this.barValues[r]) {\n            continue;\n          }\n          for (let c = 0; c < this.barValues[r].length; c++) {\n            if (skipZeros && this.barValues[r][c] === 0) {\n              svgElements[r].push(Svg.createEmptyElement());\n            } else if (domIndex >= domElements.length) {\n              // Fill with empty element instead of returning empty array\n              svgElements[r].push(Svg.createEmptyElement());\n            } else {\n              svgElements[r].push(domElements[domIndex++]);\n            }\n          }\n        }\n      } else {\n        // Column-major DOM order (default): DOM elements are [cat0-all-series, cat1-all-series, ...]\n        if (!this.barValues[0]) {\n          return null;\n        }\n        for (let c = 0, domIndex = 0; c < this.barValues[0].length; c++) {\n          if (isForward) {\n            for (let r = 0; r < this.barValues.length; r++) {\n              if (skipZeros && this.barValues[r][c] === 0) {\n                svgElements[r].push(Svg.createEmptyElement());\n              } else if (domIndex >= domElements.length) {\n                // Fill with empty element instead of returning empty array\n                svgElements[r].push(Svg.createEmptyElement());\n              } else {\n                svgElements[r].push(domElements[domIndex++]);\n              }\n            }\n          } else {\n            for (let r = this.barValues.length - 1; r >= 0; r--) {\n              if (skipZeros && this.barValues[r][c] === 0) {\n                svgElements[r].push(Svg.createEmptyElement());\n              } else if (domIndex >= domElements.length) {\n                // Fill with empty element instead of returning empty array\n                svgElements[r].push(Svg.createEmptyElement());\n              } else {\n                svgElements[r].push(domElements[domIndex++]);\n              }\n            }\n          }\n        }\n      }\n    }\n    return svgElements;\n  }\n}\n","import type { MaidrLayer } from '@type/grammar';\nimport type { AudioState, TraceState } from '@type/state';\nimport { LineTrace } from './line';\n\n/**\n * Trace implementation for smooth plots with continuous audio feedback.\n */\nexport class SmoothTrace extends LineTrace {\n  /**\n   * Creates a new smooth trace instance.\n   * @param layer - The MAIDR layer containing smooth plot data\n   */\n  public constructor(layer: MaidrLayer) {\n    super(layer);\n  }\n\n  /**\n   * Get the state for this smooth trace.\n   * Overrides the parent state to set plotType to 'smooth' for proper identification\n   * in instruction text and layer announcements.\n   * @returns The trace state with plotType set to 'smooth'\n   */\n  public get state(): TraceState {\n    const baseState = super.state;\n    if (baseState.empty)\n      return baseState;\n\n    return {\n      ...baseState,\n      plotType: 'smooth',\n    };\n  }\n\n  protected get audio(): AudioState {\n    const rowYValues = this.lineValues[this.row];\n    const getY = (i: number): number => {\n      return rowYValues[Math.max(0, Math.min(i, rowYValues.length - 1))];\n    };\n\n    const prev = getY(this.col - 1);\n    const curr = getY(this.col);\n    const next = getY(this.col + 1);\n\n    return {\n      freq: {\n        min: this.min[this.row],\n        max: this.max[this.row],\n        raw: [prev, curr, next],\n      },\n      panning: {\n        y: this.row,\n        x: this.col,\n        rows: this.lineValues.length,\n        cols: this.lineValues[this.row].length,\n      },\n      isContinuous: true,\n    };\n  }\n}\n","import type { MaidrLayer, SmoothPoint } from '@type/grammar';\nimport { Svg } from '@util/svg';\nimport { SmoothTrace } from './smooth';\n\n/**\n * Represents a smooth trace with SVG coordinates for rendering data points using svg_x and svg_y values.\n */\nexport class SmoothTraceSvgXY extends SmoothTrace {\n  /**\n   * Creates a new SmoothTraceSvgXY instance for a given layer.\n   * @param layer - The MAIDR layer containing smooth trace data with SVG coordinates\n   */\n  public constructor(layer: MaidrLayer) {\n    super(layer);\n  }\n\n  /**\n   * Maps data points to SVG circle elements using svg_x and svg_y coordinates from the data.\n   * @param selectors - Optional array of CSS selectors for line elements\n   * @returns Array of SVG element arrays for each line, or null if selectors are invalid or all mappings failed\n   */\n  protected mapToSvgElements(selectors?: string[]): SVGElement[][] | null {\n    if (!selectors || selectors.length !== this.lineValues.length) {\n      return null;\n    }\n\n    const svgElements: SVGElement[][] = [];\n    let allFailed = true;\n    for (let r = 0; r < selectors.length; r++) {\n      const lineElement = Svg.selectElement(selectors[r], false);\n      if (!lineElement) {\n        svgElements.push([]);\n        continue;\n      }\n\n      // Use svg_x/svg_y from data points\n      const dataPoints = this.points?.[r] as SmoothPoint[];\n      const linePointElements: SVGElement[] = [];\n      for (const pt of dataPoints) {\n        if (typeof pt.svg_x === 'number' && typeof pt.svg_y === 'number') {\n          linePointElements.push(Svg.createCircleElement(pt.svg_x, pt.svg_y, lineElement));\n        }\n      }\n\n      if (linePointElements.length > 0) {\n        allFailed = false;\n      }\n      svgElements.push(linePointElements);\n    }\n\n    if (allFailed) {\n      return null;\n    }\n    return svgElements;\n  }\n}\n","import type { MaidrLayer } from '@type/grammar';\nimport { SmoothTrace } from './smooth';\nimport { SmoothTraceSvgXY } from './smoothSvgXY';\n\n/**\n * Type guard to check if a point contains svg_x and svg_y numeric coordinates.\n * @param pt - The point object to check (unknown type for type safety)\n * @returns True if the point has valid svg_x and svg_y properties\n */\nfunction isSmoothPoint(pt: unknown): pt is { svg_x: number; svg_y: number } {\n  return (\n    typeof pt === 'object'\n    && pt !== null\n    && 'svg_x' in pt\n    && 'svg_y' in pt\n    && typeof (pt as { svg_x: unknown }).svg_x === 'number'\n    && typeof (pt as { svg_y: unknown }).svg_y === 'number'\n  );\n}\n\n/**\n * Factory function to create the appropriate SmoothTrace instance based on layer data.\n *\n * Violin KDE traces are no longer created here — they use TraceType.VIOLIN_KDE\n * and are handled directly by TraceFactory.\n *\n * @param layer - The MAIDR layer data for the smooth trace\n * @returns A SmoothTrace instance:\n *          - SmoothTraceSvgXY if the data contains svg_x/svg_y coordinates\n *          - SmoothTrace otherwise (standard smooth/regression line)\n */\nexport function createSmoothTrace(\n  layer: MaidrLayer,\n): SmoothTrace | SmoothTraceSvgXY {\n  // If the data has svg_x/svg_y, use the special class\n  const hasSvgXY = Array.isArray(layer.data)\n    && layer.data.length > 0\n    && Array.isArray(layer.data[0])\n    && isSmoothPoint(layer.data[0][0]);\n\n  if (hasSvgXY) {\n    return new SmoothTraceSvgXY(layer);\n  }\n  return new SmoothTrace(layer);\n}\n","import type { MaidrLayer, ViolinKdePoint } from '@type/grammar';\nimport type { Movable, MovableDirection } from '@type/movable';\nimport type { XValue } from '@type/navigation';\nimport type { AudioState, AutoplayState, BrailleState, TextState } from '@type/state';\nimport type { Dimension } from './abstract';\nimport { Orientation } from '@type/grammar';\nimport { MathUtil } from '@util/math';\nimport { Svg } from '@util/svg';\nimport { AbstractTrace } from './abstract';\nimport { MovableGrid } from './movable';\n\n/**\n * Small adjustment value used to create a safety range when min and max density values\n * are equal. This prevents division by zero errors in interpolation calculations.\n */\nconst MIN_DENSITY_RANGE = 0.001;\n\n/**\n * Concrete trace for violin KDE (kernel density estimation) layers.\n *\n * Data layout: points[violin][curvePosition] = ViolinKdePoint\n *   - Row index = which violin (categorical group)\n *   - Col index = position along the KDE curve\n *\n * Navigation (vertical):\n *   - Left/Right (FORWARD/BACKWARD) = switch between violins (change row)\n *   - Up/Down (UPWARD/DOWNWARD) = traverse along the curve (change col)\n *\n * Navigation (horizontal):\n *   - Up/Down (UPWARD/DOWNWARD) = switch between violins (change row)\n *   - Left/Right (FORWARD/BACKWARD) = traverse along the curve (change col)\n *\n * Audio:\n *   - Pitch: derived from density values of the reference violin (row 0)\n *     for consistent pitch scaling across all violins\n *   - Volume: derived from the current violin's density at current position,\n *     normalized to 0-1 via volumeScale\n *\n * Extends AbstractTrace directly (no SmoothTrace/LineTrace dependency).\n */\nexport class ViolinKdeTrace extends AbstractTrace {\n  protected readonly supportsExtrema = false;\n  protected readonly movable: Movable;\n\n  private readonly orientation: Orientation;\n  private readonly points: ViolinKdePoint[][];\n  private readonly densityValues: number[][];\n  private readonly yValues: number[][];\n  protected readonly highlightValues: SVGElement[][] | null;\n  protected highlightCenters:\n    | { x: number; y: number; row: number; col: number; element: SVGElement }[]\n    | null;\n\n  private readonly minDensity: number[];\n  private readonly maxDensity: number[];\n\n  /**\n   * Precomputed safe min/max for the reference violin (row 0) used in audio pitch scaling.\n   * Cached to avoid recomputing Math.min/max over ~200-element arrays on every autoplay tick.\n   */\n  private readonly refSafeMin: number;\n  private readonly refSafeMax: number;\n  private readonly refHasPositive: boolean;\n\n  constructor(layer: MaidrLayer) {\n    super(layer);\n\n    this.orientation = layer.orientation ?? Orientation.VERTICAL;\n\n    // For horizontal orientation, reverse points to match visual order\n    // (same convention as ViolinBoxTrace)\n    if (this.orientation === Orientation.HORIZONTAL) {\n      this.points = [...(layer.data as ViolinKdePoint[][])].reverse();\n    } else {\n      this.points = layer.data as ViolinKdePoint[][];\n    }\n\n    // Extract density and y values for each violin\n    // Falls back to `width` when `density` is absent (legacy format support)\n    this.densityValues = this.points.map(row =>\n      row.map(point => point.density ?? point.width ?? 0),\n    );\n    this.yValues = this.points.map(row =>\n      row.map(point => Number(point.y)),\n    );\n\n    this.minDensity = this.densityValues.map(row => MathUtil.safeMin(row.filter(d => d > 0)));\n    this.maxDensity = this.densityValues.map(row => MathUtil.safeMax(row));\n\n    // Cache reference violin (row 0) audio values once at construction\n    const refDensity = this.densityValues[0];\n    if (refDensity && refDensity.length > 0 && this.minDensity[0] > 0) {\n      this.refHasPositive = true;\n      const refMin = this.minDensity[0];\n      const refMax = this.maxDensity[0];\n      this.refSafeMin = refMin === refMax ? Math.max(0, refMin - MIN_DENSITY_RANGE) : refMin;\n      this.refSafeMax = refMin === refMax ? refMax + MIN_DENSITY_RANGE : refMax;\n    } else {\n      this.refHasPositive = false;\n      this.refSafeMin = 0;\n      this.refSafeMax = 1;\n    }\n\n    // For horizontal, selectors must be reversed to match the already-reversed\n    // points array. mapToSvgElements pairs selectors[i] with this.points[i],\n    // so both must be in the same order. No separate highlightValues.reverse()\n    // is needed since the selectors are pre-aligned.\n    const kdeSelectors = this.orientation === Orientation.HORIZONTAL\n      ? [...(layer.selectors as string[])].reverse()\n      : (layer.selectors as string[]);\n    this.highlightValues = this.mapToSvgElements(kdeSelectors);\n    this.highlightCenters = this.mapSvgElementsToCenters();\n    this.movable = new MovableGrid<ViolinKdePoint>(this.points, { row: 0 });\n  }\n\n  public dispose(): void {\n    this.points.length = 0;\n    this.densityValues.length = 0;\n    this.yValues.length = 0;\n    this.minDensity.length = 0;\n    this.maxDensity.length = 0;\n    super.dispose();\n  }\n\n  protected get values(): number[][] {\n    return this.densityValues;\n  }\n\n  protected get dimension(): Dimension {\n    return {\n      rows: this.points.length,\n      cols: this.points[this.row]?.length ?? 0,\n    };\n  }\n\n  // ── Navigation ──────────────────────────────────────────────────────\n\n  public override isMovable(target: [number, number] | MovableDirection): boolean {\n    if (Array.isArray(target)) {\n      const [row, col] = target;\n      return (\n        row >= 0\n        && row < this.points.length\n        && col >= 0\n        && col < (this.points[row]?.length ?? 0)\n      );\n    }\n\n    const isHorizontal = this.orientation === Orientation.HORIZONTAL;\n\n    if (isHorizontal) {\n      // Horizontal: UPWARD/DOWNWARD switch violins (row), FORWARD/BACKWARD traverse curve (col)\n      switch (target) {\n        case 'UPWARD':\n          return this.row < this.points.length - 1;\n        case 'DOWNWARD':\n          return this.row > 0;\n        case 'FORWARD':\n          return this.col < (this.points[this.row]?.length ?? 0) - 1;\n        case 'BACKWARD':\n          return this.col > 0;\n      }\n    }\n\n    // Vertical: FORWARD/BACKWARD switch violins (row), UPWARD/DOWNWARD traverse curve (col)\n    switch (target) {\n      case 'FORWARD':\n        return this.row < this.points.length - 1;\n      case 'BACKWARD':\n        return this.row > 0;\n      case 'UPWARD':\n        return this.col < (this.points[this.row]?.length ?? 0) - 1;\n      case 'DOWNWARD':\n        return this.col > 0;\n    }\n  }\n\n  protected handleInitialEntry(): void {\n    this.isInitialEntry = false;\n    this.row = 0;\n    this.col = 0;\n  }\n\n  public override moveOnce(direction: MovableDirection): boolean {\n    if (this.isInitialEntry) {\n      this.handleInitialEntry();\n      this.notifyStateUpdate();\n      return true;\n    }\n\n    if (!this.isMovable(direction)) {\n      this.notifyOutOfBounds();\n      return false;\n    }\n\n    const isHorizontal = this.orientation === Orientation.HORIZONTAL;\n\n    if (isHorizontal) {\n      // Horizontal: UPWARD/DOWNWARD switch violins, FORWARD/BACKWARD traverse curve\n      switch (direction) {\n        case 'UPWARD':\n          this.row += 1;\n          this.col = 0;\n          this.notifyStateUpdate();\n          return true;\n        case 'DOWNWARD':\n          this.row -= 1;\n          this.col = 0;\n          this.notifyStateUpdate();\n          return true;\n        case 'FORWARD':\n          this.col += 1;\n          this.notifyStateUpdate();\n          return true;\n        case 'BACKWARD':\n          this.col -= 1;\n          this.notifyStateUpdate();\n          return true;\n      }\n    }\n\n    // Vertical: FORWARD/BACKWARD switch violins, UPWARD/DOWNWARD traverse curve\n    switch (direction) {\n      case 'FORWARD':\n        this.row += 1;\n        this.col = 0;\n        this.notifyStateUpdate();\n        return true;\n\n      case 'BACKWARD':\n        this.row -= 1;\n        this.col = 0;\n        this.notifyStateUpdate();\n        return true;\n\n      case 'UPWARD':\n        this.col += 1;\n        this.notifyStateUpdate();\n        return true;\n\n      case 'DOWNWARD':\n        this.col -= 1;\n        this.notifyStateUpdate();\n        return true;\n    }\n  }\n\n  /**\n   * Override moveToExtreme for violin navigation.\n   * Orientation-aware: swaps violin-switch and curve-traverse directions.\n   */\n  public override moveToExtreme(direction: MovableDirection): boolean {\n    if (this.isInitialEntry) {\n      this.handleInitialEntry();\n      this.notifyStateUpdate();\n      return true;\n    }\n\n    const isHorizontal = this.orientation === Orientation.HORIZONTAL;\n\n    if (isHorizontal) {\n      // Horizontal: UPWARD/DOWNWARD switch violins, FORWARD/BACKWARD traverse curve\n      switch (direction) {\n        case 'UPWARD':\n          this.row = this.points.length - 1;\n          this.col = 0;\n          break;\n        case 'DOWNWARD':\n          this.row = 0;\n          this.col = 0;\n          break;\n        case 'FORWARD':\n          this.col = (this.points[this.row]?.length ?? 1) - 1;\n          break;\n        case 'BACKWARD':\n          this.col = 0;\n          break;\n      }\n    } else {\n      // Vertical: FORWARD/BACKWARD switch violins, UPWARD/DOWNWARD traverse curve\n      switch (direction) {\n        case 'FORWARD':\n          this.row = this.points.length - 1;\n          this.col = 0;\n          break;\n        case 'BACKWARD':\n          this.row = 0;\n          this.col = 0;\n          break;\n        case 'UPWARD':\n          this.col = (this.points[this.row]?.length ?? 1) - 1;\n          break;\n        case 'DOWNWARD':\n          this.col = 0;\n          break;\n      }\n    }\n\n    this.notifyStateUpdate();\n    return true;\n  }\n\n  // ── Audio ───────────────────────────────────────────────────────────\n\n  protected get audio(): AudioState {\n    const isHorizontal = this.orientation === Orientation.HORIZONTAL;\n    const colCount = this.points[this.row]?.length ?? 0;\n    const panning = isHorizontal\n      ? { x: this.col, y: this.row, rows: this.points.length, cols: colCount }\n      : { y: this.row, x: this.col, rows: this.points.length, cols: colCount };\n\n    // Use precomputed reference violin values (cached in constructor)\n    if (!this.refHasPositive) {\n      return { freq: { min: 0, max: 1, raw: 0 }, panning };\n    }\n\n    // Pitch from reference violin (row 0) density — use cached safe min/max\n    const refDensity = this.densityValues[0];\n    const safeCol = Math.min(this.col, refDensity.length - 1);\n    const clamp = (i: number): number => refDensity[Math.max(0, Math.min(i, refDensity.length - 1))];\n\n    const prevDensity = safeCol > 0 ? clamp(safeCol - 1) : clamp(safeCol);\n    const currDensity = clamp(safeCol);\n    const nextDensity = safeCol < refDensity.length - 1 ? clamp(safeCol + 1) : clamp(safeCol);\n\n    // Volume from current violin's density — use cached min/max per row\n    let volumeScale = 1.0;\n    const currentRowDensity = this.densityValues[this.row];\n    if (currentRowDensity && currentRowDensity.length > 0) {\n      const currentCol = Math.min(this.col, currentRowDensity.length - 1);\n      const currentDensity = currentRowDensity[currentCol];\n      const currentMax = this.maxDensity[this.row];\n\n      if (currentMax > 0 && currentDensity > 0) {\n        const currentMin = this.minDensity[this.row];\n        const safeCurrentMax = currentMin === currentMax\n          ? currentMax + MIN_DENSITY_RANGE\n          : currentMax;\n        volumeScale = currentDensity / safeCurrentMax;\n      }\n    }\n\n    return {\n      freq: {\n        min: this.refSafeMin,\n        max: this.refSafeMax,\n        raw: [prevDensity, currDensity, nextDensity],\n      },\n      panning,\n      isContinuous: true,\n      volumeScale,\n    };\n  }\n\n  // ── Autoplay ──────────────────────────────────────────────────────\n\n  /**\n   * Override autoplay state for orientation-aware violin navigation.\n   * Maps directions to the number of steps in each direction.\n   */\n  protected override get autoplay(): AutoplayState {\n    const isHorizontal = this.orientation === Orientation.HORIZONTAL;\n\n    if (isHorizontal) {\n      // Horizontal: UPWARD/DOWNWARD switch violins (rows), FORWARD/BACKWARD traverse curve (cols)\n      return {\n        UPWARD: this.dimension.rows,\n        DOWNWARD: this.dimension.rows,\n        FORWARD: this.dimension.cols,\n        BACKWARD: this.dimension.cols,\n      };\n    }\n\n    // Vertical: FORWARD/BACKWARD switch violins (rows), UPWARD/DOWNWARD traverse curve (cols)\n    return {\n      UPWARD: this.dimension.cols,\n      DOWNWARD: this.dimension.cols,\n      FORWARD: this.dimension.rows,\n      BACKWARD: this.dimension.rows,\n    };\n  }\n\n  // ── Text ────────────────────────────────────────────────────────────\n\n  protected get text(): TextState {\n    const currentPoint = this.points[this.row][this.col];\n    const roundTo4 = (num: number): number => Math.round(num * 10000) / 10000;\n    const isHorizontal = this.orientation === Orientation.HORIZONTAL;\n\n    // Categorical label for the violin (shared across all points in a row)\n    let categoricalValue: number | string;\n    if (typeof currentPoint.x === 'string') {\n      categoricalValue = currentPoint.x;\n    } else {\n      const firstInRow = this.points[this.row][0];\n      categoricalValue = typeof firstInRow?.x === 'string'\n        ? firstInRow.x\n        : `Violin ${this.row + 1}`;\n    }\n\n    const roundedY = roundTo4(Number(currentPoint.y));\n\n    // For horizontal: main = yAxis (categorical), cross = xAxis (continuous)\n    // For vertical:   main = xAxis (categorical), cross = yAxis (continuous)\n    const textState: TextState = {\n      main: { label: isHorizontal ? this.yAxis : this.xAxis, value: categoricalValue },\n      cross: { label: isHorizontal ? this.xAxis : this.yAxis, value: roundedY },\n      mainAxis: isHorizontal ? 'y' : 'x',\n      crossAxis: isHorizontal ? 'x' : 'y',\n    };\n\n    // Volume (width) in z field if available\n    const roundedWidth = currentPoint.width !== undefined && currentPoint.width > 0\n      ? roundTo4(currentPoint.width)\n      : undefined;\n    if (roundedWidth !== undefined) {\n      textState.z = { label: 'volume', value: String(roundedWidth) };\n    }\n\n    return textState;\n  }\n\n  // ── Braille ─────────────────────────────────────────────────────────\n\n  protected get braille(): BrailleState {\n    return {\n      empty: false,\n      id: this.id,\n      values: this.densityValues,\n      min: this.minDensity,\n      max: this.maxDensity,\n      row: this.row,\n      col: this.col,\n    };\n  }\n\n  // ── Layer switching ─────────────────────────────────────────────────\n\n  /**\n   * Returns the violin index (row) for layer switching.\n   */\n  public getCurrentXValue(): XValue | null {\n    return this.row >= 0 && this.row < this.points.length ? this.row : null;\n  }\n\n  /**\n   * Moves to the specified violin, resetting to bottom of curve.\n   */\n  public moveToXValue(xValue: XValue): boolean {\n    if (this.isInitialEntry) {\n      this.handleInitialEntry();\n    }\n\n    if (typeof xValue !== 'number') {\n      return false;\n    }\n\n    const violinIndex = Math.floor(xValue);\n    if (violinIndex < 0 || violinIndex >= this.points.length) {\n      return false;\n    }\n\n    const currentViolin = this.row;\n    this.row = violinIndex;\n\n    if (violinIndex !== currentViolin) {\n      this.col = 0;\n    } else {\n      const maxCol = this.points[violinIndex]?.length ? this.points[violinIndex].length - 1 : 0;\n      this.col = Math.min(this.col, maxCol);\n    }\n\n    this.updateVisualPointPosition();\n    this.notifyStateUpdate();\n    return true;\n  }\n\n  /**\n   * Returns the current Y value for cross-layer Y preservation.\n   */\n  public getCurrentYValue(): number | null {\n    const rowYValues = this.yValues[this.row];\n    if (!rowYValues || rowYValues.length === 0) {\n      return null;\n    }\n    if (this.col >= 0 && this.col < rowYValues.length) {\n      return rowYValues[this.col];\n    }\n    return null;\n  }\n\n  /**\n   * Moves to a specific violin (X) and closest Y position on the KDE curve.\n   */\n  public moveToXAndYValue(xValue: XValue, yValue: number): boolean {\n    if (this.isInitialEntry) {\n      this.isInitialEntry = false;\n    }\n\n    if (typeof xValue !== 'number') {\n      return false;\n    }\n\n    const violinIndex = Math.floor(xValue);\n    if (violinIndex < 0 || violinIndex >= this.yValues.length) {\n      return false;\n    }\n\n    this.row = violinIndex;\n    const rowYValues = this.yValues[this.row];\n\n    if (!rowYValues || rowYValues.length === 0) {\n      this.col = 0;\n      this.updateVisualPointPosition();\n      this.notifyStateUpdate();\n      return true;\n    }\n\n    // Find closest Y value\n    let closestIndex = 0;\n    let minDistance = Math.abs(rowYValues[0] - yValue);\n    for (let i = 1; i < rowYValues.length; i++) {\n      const distance = Math.abs(rowYValues[i] - yValue);\n      if (distance < minDistance) {\n        minDistance = distance;\n        closestIndex = i;\n      }\n    }\n\n    this.col = closestIndex;\n    this.updateVisualPointPosition();\n    this.notifyStateUpdate();\n    return true;\n  }\n\n  // ── SVG highlight ───────────────────────────────────────────────────\n\n  protected mapToSvgElements(selectors?: string[]): SVGElement[][] | null {\n    if (!selectors || selectors.length === 0) {\n      return null;\n    }\n\n    const elementsByViolin: SVGElement[][] = [];\n    let allFailed = true;\n\n    // Support: one selector per violin (selectors.length === points.length)\n    // or single pattern selector (selectors.length === 1)\n    const isOnePerViolin = selectors.length === this.points.length;\n\n    for (let r = 0; r < this.points.length; r++) {\n      const violinElements: SVGElement[] = [];\n      const dataPoints = this.points[r];\n\n      const selector = isOnePerViolin ? selectors[r] : selectors[0];\n      if (!selector) {\n        elementsByViolin.push([]);\n        continue;\n      }\n\n      const matchedElements = Svg.selectAllElements(selector, false);\n      // Resolve primary element: prefer <use> reference elements, fall back to\n      // <path> geometry, then <polygon> (gridSVG/R renders violins as polygons).\n      const useElements = matchedElements.filter(el => el instanceof SVGUseElement);\n      const pathElements = matchedElements.filter(el => el instanceof SVGPathElement);\n      const polygonElements = matchedElements.filter(el => el instanceof SVGPolygonElement);\n      const candidates = useElements.length > 0\n        ? useElements\n        : pathElements.length > 0\n          ? pathElements\n          : polygonElements;\n      const primaryElement = candidates.length > 0\n        ? candidates[isOnePerViolin ? 0 : (r < candidates.length ? r : 0)]\n        : null;\n\n      if (primaryElement && dataPoints) {\n        for (const point of dataPoints) {\n          // Use SVG viewport coordinates when available (from backend)\n          const x = point.svg_x;\n          const y = point.svg_y;\n          if (x !== undefined && y !== undefined && !Number.isNaN(x) && !Number.isNaN(y)) {\n            violinElements.push(Svg.createCircleElement(x, y, primaryElement));\n          }\n        }\n        if (violinElements.length > 0) {\n          allFailed = false;\n        }\n      }\n\n      elementsByViolin.push(violinElements);\n    }\n\n    return allFailed ? null : elementsByViolin;\n  }\n\n  protected mapSvgElementsToCenters():\n    | { x: number; y: number; row: number; col: number; element: SVGElement }[]\n    | null {\n    if (!this.highlightValues) {\n      return null;\n    }\n\n    const centers: { x: number; y: number; row: number; col: number; element: SVGElement }[] = [];\n    for (let row = 0; row < this.highlightValues.length; row++) {\n      for (let col = 0; col < this.highlightValues[row].length; col++) {\n        const element = this.highlightValues[row][col];\n        if (element) {\n          const bbox = element.getBoundingClientRect();\n          centers.push({\n            x: bbox.x + bbox.width / 2,\n            y: bbox.y + bbox.height / 2,\n            row,\n            col,\n            element,\n          });\n        }\n      }\n    }\n\n    return centers;\n  }\n\n  public findNearestPoint(\n    x: number,\n    y: number,\n  ): { element: SVGElement; row: number; col: number } | null {\n    if (!this.highlightCenters) {\n      return null;\n    }\n\n    let nearestDistance = Infinity;\n    let nearestIndex = -1;\n\n    for (let i = 0; i < this.highlightCenters.length; i++) {\n      const center = this.highlightCenters[i];\n      const distance = Math.hypot(center.x - x, center.y - y);\n      if (distance < nearestDistance) {\n        nearestDistance = distance;\n        nearestIndex = i;\n      }\n    }\n\n    if (nearestIndex === -1) {\n      return null;\n    }\n\n    return {\n      element: this.highlightCenters[nearestIndex].element,\n      row: this.highlightCenters[nearestIndex].row,\n      col: this.highlightCenters[nearestIndex].col,\n    };\n  }\n\n  protected updateVisualPointPosition(): void {\n    const { row: safeRow, col: safeCol } = this.getSafeIndices();\n    this.row = safeRow;\n    this.col = safeCol;\n  }\n}\n","import type { BoxPoint, BoxSelector, MaidrLayer, ViolinOptions } from '@type/grammar';\nimport type { Movable, MovableDirection } from '@type/movable';\nimport type { XValue } from '@type/navigation';\nimport type { AudioState, BrailleState, TextState } from '@type/state';\nimport type { Dimension } from './abstract';\nimport { BoxplotSection } from '@type/boxplotSection';\nimport { Orientation } from '@type/grammar';\nimport { Constant } from '@util/constant';\nimport { MathUtil } from '@util/math';\nimport { Svg } from '@util/svg';\nimport { AbstractTrace } from './abstract';\nimport { MovableGrid } from './movable';\n\n/**\n * Concrete trace for violin box (summary statistics) layers.\n *\n * This is the box-plot overlay that sits inside a violin plot, showing\n * configurable summary statistics (median, mean, extrema)\n * controlled by ViolinOptions from the backend.\n * Outliers are excluded — violin plots do not produce outliers.\n *\n * Data layout depends on orientation:\n *   - Vertical: boxValues[section][violinIndex] — row=section, col=violin\n *   - Horizontal: boxValues[violinIndex][section] — row=violin, col=section\n *\n * Navigation:\n *   - FORWARD/BACKWARD = switch between violins (resets to MIN section)\n *   - UPWARD/DOWNWARD = traverse between sections within a violin\n *\n * Extends AbstractTrace directly (no BoxTrace dependency).\n */\nexport class ViolinBoxTrace extends AbstractTrace {\n  protected readonly supportsExtrema = false;\n  protected readonly movable: Movable;\n\n  private readonly points: BoxPoint[];\n  private readonly boxValues: (number[] | number)[][];\n  protected readonly highlightValues: (SVGElement[] | SVGElement)[][] | null;\n  protected highlightCenters:\n    | { x: number; y: number; row: number; col: number; element: SVGElement }[]\n    | null;\n\n  private readonly orientation: Orientation;\n  private readonly sections: string[];\n  private readonly violinOptions: ViolinOptions;\n\n  private readonly min: number;\n  private readonly max: number;\n\n  /** Cached index of MIN section for quick access during navigation. */\n  private readonly minSectionIndex: number;\n\n  constructor(layer: MaidrLayer) {\n    super(layer);\n\n    this.violinOptions = layer.violinOptions ?? {};\n    this.orientation = layer.orientation ?? Orientation.VERTICAL;\n\n    // For horizontal orientation, reverse points to match visual order\n    if (this.orientation === Orientation.HORIZONTAL) {\n      this.points = [...(layer.data as BoxPoint[])].reverse();\n    } else {\n      this.points = layer.data as BoxPoint[];\n    }\n\n    // Build sections based on violin options\n    const { sections, accessors } = this.buildViolinSections();\n    this.sections = sections;\n    this.boxValues = this.computeBoxValues(accessors);\n\n    // Compute min/max, filtering NaN values\n    const flatValues = this.boxValues.map(row =>\n      row.flatMap(cell => (Array.isArray(cell) ? cell : [cell])),\n    ).map(row => row.filter(v => !Number.isNaN(v)));\n    this.min = MathUtil.minFrom2D(flatValues);\n    this.max = MathUtil.maxFrom2D(flatValues);\n\n    this.highlightValues = this.mapToSvgElements(layer.selectors as BoxSelector[]);\n    if (this.orientation === Orientation.HORIZONTAL) {\n      this.highlightValues?.reverse();\n    }\n    this.highlightCenters = this.mapSvgElementsToCenters();\n\n    this.movable = new MovableGrid<number[] | number>(this.boxValues, { row: 0 });\n\n    // Cache MIN section index (always 0 since outliers are excluded)\n    const minIdx = this.sections.indexOf(BoxplotSection.MIN);\n    this.minSectionIndex = minIdx >= 0 ? minIdx : 0;\n  }\n\n  /**\n   * Build sections and accessors based on ViolinOptions.\n   * Always includes: MIN, Q1, Q3.\n   * Conditionally adds: Q2 (median), MEAN, MAX based on options.\n   * Outliers are excluded — violin plots do not produce outliers.\n   */\n  private buildViolinSections(): {\n    sections: string[];\n    accessors: ((p: BoxPoint) => number | number[])[];\n  } {\n    const sections: string[] = [BoxplotSection.MIN];\n    const accessors: ((p: BoxPoint) => number | number[])[] = [\n      (p: BoxPoint) => p.min,\n    ];\n\n    // Q1 (25%) — always included as core box plot statistic\n    sections.push(BoxplotSection.Q1);\n    accessors.push((p: BoxPoint) => p.q1);\n\n    // showMedian defaults to true if not specified\n    if (this.violinOptions.showMedian !== false) {\n      sections.push(BoxplotSection.Q2);\n      accessors.push((p: BoxPoint) => p.q2);\n    }\n\n    // showMean defaults to false if not specified\n    if (this.violinOptions.showMean === true) {\n      sections.push(BoxplotSection.MEAN);\n      accessors.push((p: BoxPoint) => p.mean ?? Number.NaN);\n    }\n\n    // Q3 (75%) — always included as core box plot statistic\n    sections.push(BoxplotSection.Q3);\n    accessors.push((p: BoxPoint) => p.q3);\n\n    // showExtrema defaults to true\n    if (this.violinOptions.showExtrema !== false) {\n      sections.push(BoxplotSection.MAX);\n      accessors.push((p: BoxPoint) => p.max);\n    }\n\n    return { sections, accessors };\n  }\n\n  /**\n   * Compute box values array based on section accessors and orientation.\n   */\n  private computeBoxValues(\n    sectionAccessors: ((p: BoxPoint) => number | number[])[],\n  ): (number[] | number)[][] {\n    if (this.orientation === Orientation.HORIZONTAL) {\n      return this.points.map(point =>\n        sectionAccessors.map(accessor => accessor(point)),\n      );\n    }\n    // Vertical: [sections][positions]\n    return sectionAccessors.map(accessor =>\n      this.points.map(point => accessor(point)),\n    );\n  }\n\n  public dispose(): void {\n    this.points.length = 0;\n    this.sections.length = 0;\n    super.dispose();\n  }\n\n  protected get values(): (number[] | number)[][] {\n    return this.boxValues;\n  }\n\n  protected get dimension(): Dimension {\n    const isHorizontal = this.orientation === Orientation.HORIZONTAL;\n    return {\n      rows: isHorizontal ? this.boxValues.length : this.boxValues[this.row]?.length ?? 0,\n      cols: isHorizontal ? this.boxValues[this.row]?.length ?? 0 : this.boxValues.length,\n    };\n  }\n\n  // ── Navigation ──────────────────────────────────────────────────────\n\n  protected handleInitialEntry(): void {\n    this.isInitialEntry = false;\n    const minSectionIndex = this.minSectionIndex;\n    if (this.orientation === Orientation.VERTICAL) {\n      this.row = Math.min(minSectionIndex, this.boxValues.length - 1);\n      this.col = 0;\n    } else {\n      this.row = 0;\n      this.col = Math.min(minSectionIndex, this.boxValues[0]?.length ?? 1);\n    }\n  }\n\n  public override moveOnce(direction: MovableDirection): boolean {\n    if (this.isInitialEntry) {\n      this.handleInitialEntry();\n      this.notifyStateUpdate();\n      return true;\n    }\n\n    if (!this.isMovable(direction)) {\n      this.notifyOutOfBounds();\n      return false;\n    }\n\n    const minSectionIndex = this.minSectionIndex;\n\n    if (this.orientation === Orientation.VERTICAL) {\n      // col = violin index, row = section index\n      if (direction === 'FORWARD') {\n        this.col += 1;\n        this.row = minSectionIndex;\n      } else if (direction === 'BACKWARD') {\n        this.col -= 1;\n        this.row = minSectionIndex;\n      } else {\n        // UPWARD/DOWNWARD navigate between sections\n        return super.moveOnce(direction);\n      }\n    } else {\n      // row = violin index, col = section index\n      if (direction === 'UPWARD') {\n        this.row += 1;\n        this.col = minSectionIndex;\n      } else if (direction === 'DOWNWARD') {\n        this.row -= 1;\n        this.col = minSectionIndex;\n      } else {\n        // FORWARD/BACKWARD navigate between sections\n        return super.moveOnce(direction);\n      }\n    }\n\n    this.updateVisualPointPosition();\n    this.notifyStateUpdate();\n    return true;\n  }\n\n  // ── Audio ───────────────────────────────────────────────────────────\n\n  protected get audio(): AudioState {\n    const isHorizontal = this.orientation === Orientation.HORIZONTAL;\n    const value = this.boxValues[this.row][this.col];\n    const index = isHorizontal ? this.col : this.row;\n\n    const panning = Array.isArray(value)\n      ? value.length === 0 ? index : value[value.length - 1] - this.min\n      : Number.isNaN(value) ? index : value - this.min;\n\n    return {\n      freq: {\n        min: this.min,\n        max: this.max,\n        raw: this.boxValues[this.row][this.col],\n      },\n      panning: {\n        x: isHorizontal ? panning : this.row,\n        y: isHorizontal ? this.row : panning,\n        rows: isHorizontal ? this.boxValues.length : this.max - this.min,\n        cols: isHorizontal ? this.max - this.min : this.boxValues.length,\n      },\n    };\n  }\n\n  // ── Text ────────────────────────────────────────────────────────────\n\n  protected get text(): TextState {\n    const isHorizontal = this.orientation === Orientation.HORIZONTAL;\n    const point = isHorizontal ? this.points[this.row] : this.points[this.col];\n\n    const mainLabel = isHorizontal ? this.yAxis : this.xAxis;\n    const section = isHorizontal\n      ? this.sections[this.col]\n      : this.sections[this.row];\n\n    const crossLabel = isHorizontal ? this.xAxis : this.yAxis;\n    const crossValue = this.boxValues[this.row][this.col];\n\n    return {\n      main: { label: mainLabel, value: point.z },\n      cross: { label: crossLabel, value: crossValue },\n      section,\n      mainAxis: isHorizontal ? 'y' : 'x',\n      crossAxis: isHorizontal ? 'x' : 'y',\n    };\n  }\n\n  // ── Braille ─────────────────────────────────────────────────────────\n\n  protected get braille(): BrailleState {\n    const isHorizontal = this.orientation === Orientation.HORIZONTAL;\n    const row = isHorizontal ? this.row : this.col;\n    const col = isHorizontal ? this.col : this.row;\n\n    return {\n      empty: false,\n      id: this.id,\n      values: this.points,\n      min: this.min,\n      max: this.max,\n      row,\n      col,\n    };\n  }\n\n  // ── Layer switching ─────────────────────────────────────────────────\n\n  /**\n   * Returns the violin index for layer switching.\n   */\n  public getCurrentXValue(): XValue | null {\n    if (this.orientation === Orientation.VERTICAL) {\n      return this.col >= 0 ? this.col : null;\n    }\n    return this.row >= 0 ? this.row : null;\n  }\n\n  /**\n   * Moves to a violin index, resetting to MIN section.\n   */\n  public moveToXValue(xValue: XValue): boolean {\n    if (this.isInitialEntry) {\n      this.handleInitialEntry();\n    }\n\n    if (typeof xValue !== 'number') {\n      return false;\n    }\n\n    const violinIndex = Math.floor(xValue);\n    const values = this.values;\n    const minSectionIndex = this.minSectionIndex;\n\n    if (this.orientation === Orientation.VERTICAL) {\n      const numViolins = values.length > 0 ? values[0].length : 0;\n      if (violinIndex < 0 || violinIndex >= numViolins) {\n        return false;\n      }\n      const currentViolin = this.col;\n      this.col = violinIndex;\n      if (violinIndex !== currentViolin) {\n        this.row = minSectionIndex;\n      }\n    } else {\n      if (violinIndex < 0 || violinIndex >= values.length) {\n        return false;\n      }\n      const currentViolin = this.row;\n      this.row = violinIndex;\n      if (violinIndex !== currentViolin) {\n        this.col = minSectionIndex;\n      }\n    }\n\n    this.updateVisualPointPosition();\n    this.notifyStateUpdate();\n    return true;\n  }\n\n  /**\n   * Returns the current Y value from the box plot section.\n   */\n  public getCurrentYValue(): number | null {\n    const values = this.values;\n    if (this.orientation === Orientation.VERTICAL) {\n      if (this.row >= 0 && this.row < values.length && this.col >= 0) {\n        const rowValues = values[this.row];\n        if (Array.isArray(rowValues) && this.col < rowValues.length) {\n          const value = rowValues[this.col];\n          if (Array.isArray(value)) {\n            return value.length > 0 ? value[0] : null;\n          }\n          return typeof value === 'number' ? value : null;\n        }\n      }\n    } else {\n      if (this.row >= 0 && this.row < values.length && this.col >= 0) {\n        const rowValues = values[this.row];\n        if (Array.isArray(rowValues) && this.col < rowValues.length) {\n          const value = rowValues[this.col];\n          if (Array.isArray(value)) {\n            return value.length > 0 ? value[0] : null;\n          }\n          return typeof value === 'number' ? value : null;\n        }\n      }\n    }\n    return null;\n  }\n\n  /**\n   * Moves to a specific violin (X) and finds the closest section matching Y value.\n   */\n  public moveToXAndYValue(xValue: XValue, yValue: number): boolean {\n    if (this.isInitialEntry) {\n      this.isInitialEntry = false;\n    }\n\n    if (typeof xValue !== 'number') {\n      return false;\n    }\n\n    const violinIndex = Math.floor(xValue);\n    const values = this.values;\n    const minSectionIndex = this.minSectionIndex;\n\n    if (this.orientation === Orientation.VERTICAL) {\n      const numViolins = values.length > 0 ? values[0].length : 0;\n      if (violinIndex < 0 || violinIndex >= numViolins) {\n        return false;\n      }\n      this.col = violinIndex;\n\n      // Find section (row) closest to yValue\n      let closestRow = minSectionIndex;\n      let minDistance = Infinity;\n      for (let row = 0; row < values.length; row++) {\n        const rowValues = values[row];\n        if (Array.isArray(rowValues) && violinIndex < rowValues.length) {\n          const value = rowValues[violinIndex];\n          if (Array.isArray(value)) {\n            for (const v of value) {\n              if (typeof v === 'number') {\n                const distance = Math.abs(v - yValue);\n                if (distance < minDistance) {\n                  minDistance = distance;\n                  closestRow = row;\n                }\n              }\n            }\n          } else if (typeof value === 'number') {\n            const distance = Math.abs(value - yValue);\n            if (distance < minDistance) {\n              minDistance = distance;\n              closestRow = row;\n            }\n          }\n        }\n      }\n      this.row = closestRow;\n    } else {\n      if (violinIndex < 0 || violinIndex >= values.length) {\n        return false;\n      }\n      this.row = violinIndex;\n\n      // Find section (col) closest to yValue\n      let closestCol = minSectionIndex;\n      let minDistance = Infinity;\n      const rowValues = values[violinIndex];\n      if (Array.isArray(rowValues)) {\n        for (let col = 0; col < rowValues.length; col++) {\n          const value = rowValues[col];\n          if (Array.isArray(value)) {\n            for (const v of value) {\n              if (typeof v === 'number') {\n                const distance = Math.abs(v - yValue);\n                if (distance < minDistance) {\n                  minDistance = distance;\n                  closestCol = col;\n                }\n              }\n            }\n          } else if (typeof value === 'number') {\n            const distance = Math.abs(value - yValue);\n            if (distance < minDistance) {\n              minDistance = distance;\n              closestCol = col;\n            }\n          }\n        }\n      }\n      this.col = closestCol;\n    }\n\n    this.updateVisualPointPosition();\n    this.notifyStateUpdate();\n    return true;\n  }\n\n  // ── SVG highlight ───────────────────────────────────────────────────\n\n  private mapToSvgElements(\n    selectors: BoxSelector[] | undefined,\n  ): (SVGElement[] | SVGElement)[][] | null {\n    if (!selectors || selectors.length !== this.points.length) {\n      return null;\n    }\n\n    const isVertical = this.orientation === Orientation.VERTICAL;\n    const svgElements = new Array<Array<SVGElement[] | SVGElement>>();\n\n    if (isVertical) {\n      for (let i = 0; i < this.sections.length; i++) {\n        svgElements.push(Array.from({ length: selectors.length }));\n      }\n    }\n\n    // Phase 1: Collect all original elements without cloning\n    const originals: Array<{\n      min: SVGElement | null;\n      max: SVGElement | null;\n      iq: SVGElement | null;\n      q2: SVGElement | null;\n      mean: SVGElement | null;\n    }> = [];\n\n    selectors.forEach((selector) => {\n      const minOriginal = Svg.selectElement(selector.min, false);\n      const maxOriginal = Svg.selectElement(selector.max, false);\n      const iqOriginal = Svg.selectElement(selector.iq, false);\n      const q2Original = Svg.selectElement(selector.q2, false);\n      const meanOriginal = selector.mean ? Svg.selectElement(selector.mean, false) : null;\n\n      originals.push({\n        min: minOriginal,\n        max: maxOriginal,\n        iq: iqOriginal,\n        q2: q2Original,\n        mean: meanOriginal,\n      });\n    });\n\n    // Phase 2: Clone elements\n    originals.forEach((original, boxIdx) => {\n      const min = this.cloneElementOrEmpty(original.min);\n      const max = this.cloneElementOrEmpty(original.max);\n      const q2 = this.cloneElementOrEmpty(original.q2);\n      const mean = this.cloneElementOrEmpty(original.mean);\n\n      // Create Q1/Q3 line elements from IQ box (same approach as BoxTrace).\n      // Check if IQR direction should be reversed (for gridSVG vertical plots\n      // where scale(1,-1) Y-flip inverts getBBox top/bottom edges).\n      const isIqrReversed = this.layer.domMapping?.iqrDirection === 'reverse';\n      const [q1, q3] = original.iq\n        ? (isVertical\n            ? isIqrReversed\n              ? [\n                  Svg.createLineElement(original.iq, 'top'),\n                  Svg.createLineElement(original.iq, 'bottom'),\n                ]\n              : [\n                  Svg.createLineElement(original.iq, 'bottom'),\n                  Svg.createLineElement(original.iq, 'top'),\n                ]\n            : [\n                Svg.createLineElement(original.iq, 'left'),\n                Svg.createLineElement(original.iq, 'right'),\n              ])\n        : [\n            Svg.createEmptyElement('line'),\n            Svg.createEmptyElement('line'),\n          ];\n\n      // Build sections array matching this.sections (no outlier sections)\n      const sectionElements: (SVGElement[] | SVGElement)[] = [];\n\n      // MIN\n      sectionElements.push(min);\n\n      // Q1 (25%) — always included\n      sectionElements.push(q1);\n\n      // Q2 (median) - only if showMedian !== false\n      if (this.violinOptions.showMedian !== false) {\n        sectionElements.push(q2);\n      }\n\n      // MEAN - only if showMean === true\n      if (this.violinOptions.showMean === true) {\n        sectionElements.push(mean);\n      }\n\n      // Q3 (75%) — always included\n      sectionElements.push(q3);\n\n      // MAX - only if showExtrema !== false\n      if (this.violinOptions.showExtrema !== false) {\n        sectionElements.push(max);\n      }\n\n      if (isVertical) {\n        sectionElements.forEach((section, sectionIdx) => {\n          svgElements[sectionIdx][boxIdx] = section;\n        });\n      } else {\n        svgElements.push(sectionElements);\n      }\n    });\n\n    return svgElements;\n  }\n\n  private cloneElementOrEmpty(original: SVGElement | null): SVGElement {\n    if (!original) {\n      return Svg.createEmptyElement();\n    }\n    const clone = original.cloneNode(true) as SVGElement;\n    clone.setAttribute(Constant.VISIBILITY, Constant.HIDDEN);\n    original.insertAdjacentElement(Constant.AFTER_END, clone);\n    return clone;\n  }\n\n  protected mapSvgElementsToCenters():\n    | { x: number; y: number; row: number; col: number; element: SVGElement }[]\n    | null {\n    if (!this.highlightValues) {\n      return null;\n    }\n\n    const centers: { x: number; y: number; row: number; col: number; element: SVGElement }[] = [];\n    for (let row = 0; row < this.highlightValues.length; row++) {\n      for (let col = 0; col < this.highlightValues[row].length; col++) {\n        const element = this.highlightValues[row][col];\n        const targetElement = Array.isArray(element) ? element[0] : element;\n        if (targetElement) {\n          const bbox = targetElement.getBoundingClientRect();\n          centers.push({\n            x: bbox.x + bbox.width / 2,\n            y: bbox.y + bbox.height / 2,\n            row,\n            col,\n            element: targetElement,\n          });\n        }\n      }\n    }\n\n    return centers;\n  }\n\n  public findNearestPoint(\n    x: number,\n    y: number,\n  ): { element: SVGElement; row: number; col: number } | null {\n    if (!this.highlightCenters) {\n      return null;\n    }\n\n    let nearestDistance = Infinity;\n    let nearestIndex = -1;\n\n    for (let i = 0; i < this.highlightCenters.length; i++) {\n      const center = this.highlightCenters[i];\n      const distance = Math.hypot(center.x - x, center.y - y);\n      if (distance < nearestDistance) {\n        nearestDistance = distance;\n        nearestIndex = i;\n      }\n    }\n\n    if (nearestIndex === -1) {\n      return null;\n    }\n\n    return {\n      element: this.highlightCenters[nearestIndex].element,\n      row: this.highlightCenters[nearestIndex].row,\n      col: this.highlightCenters[nearestIndex].col,\n    };\n  }\n\n  /**\n   * Disabled for violin box plots.\n   */\n  public moveToPoint(_x: number, _y: number): void {\n    // Disabled for violin box plots\n  }\n\n  protected updateVisualPointPosition(): void {\n    const { row: safeRow, col: safeCol } = this.getSafeIndices();\n    this.row = safeRow;\n    this.col = safeCol;\n  }\n}\n","import type { MaidrLayer } from '@type/grammar';\nimport type { Trace } from './plot';\nimport { TraceType } from '@type/grammar';\nimport { BarTrace } from './bar';\nimport { BoxTrace } from './box';\nimport { Candlestick } from './candlestick';\nimport { Heatmap } from './heatmap';\nimport { Histogram } from './histogram';\nimport { LineTrace } from './line';\nimport { ScatterTrace } from './scatter';\nimport { SegmentedTrace } from './segmented';\nimport { createSmoothTrace } from './smoothtraceFactory';\nimport { ViolinKdeTrace } from './violin';\nimport { ViolinBoxTrace } from './violinBox';\n\n/**\n * Abstract factory class for creating appropriate trace instances based on layer type.\n */\nexport abstract class TraceFactory {\n  /**\n   * Factory method for creating trace instances.\n   *\n   * Each layer's type maps directly to a trace class. No heuristic detection needed.\n   */\n  public static create(layer: MaidrLayer): Trace {\n    switch (layer.type) {\n      case TraceType.BAR:\n        return new BarTrace(layer);\n\n      case TraceType.BOX:\n        return new BoxTrace(layer);\n\n      case TraceType.CANDLESTICK:\n        return new Candlestick(layer);\n\n      case TraceType.HEATMAP:\n        return new Heatmap(layer);\n\n      case TraceType.HISTOGRAM:\n        return new Histogram(layer);\n\n      case TraceType.LINE:\n        return new LineTrace(layer);\n\n      case TraceType.SCATTER:\n        return new ScatterTrace(layer);\n\n      case TraceType.SMOOTH:\n        return createSmoothTrace(layer);\n\n      case TraceType.DODGED:\n      case TraceType.NORMALIZED:\n      case TraceType.STACKED:\n        return new SegmentedTrace(layer);\n\n      case TraceType.VIOLIN_KDE:\n        return new ViolinKdeTrace(layer);\n\n      case TraceType.VIOLIN_BOX:\n        return new ViolinBoxTrace(layer);\n\n      default:\n        throw new Error(`Invalid trace type: ${layer.type}`);\n    }\n  }\n}\n","import type { Disposable } from '@type/disposable';\nimport type { ExtremaTarget } from '@type/extrema';\nimport type { Maidr, MaidrSubplot } from '@type/grammar';\nimport type { Movable, MovableDirection } from '@type/movable';\nimport type { Observable } from '@type/observable';\nimport type { FigureState, HighlightState, SubplotState, TraceState } from '@type/state';\nimport type { SubplotLayout } from '@util/subplotLayout';\nimport type { Dimension } from './abstract';\nimport { TraceType } from '@type/grammar';\nimport { Constant } from '@util/constant';\nimport { Svg } from '@util/svg';\nimport { AbstractPlot } from './abstract';\nimport { TraceFactory } from './factory';\nimport { MovableGrid } from './movable';\n\nconst DEFAULT_FIGURE_TITLE = 'MAIDR Plot';\nconst DEFAULT_SUBTITLE = 'unavailable';\nconst DEFAULT_CAPTION = 'unavailable';\n\n/**\n * Represents a figure containing one or more subplots\n */\nexport class Figure extends AbstractPlot<FigureState> implements Movable, Observable<FigureState>, Disposable {\n  protected get dimension(): Dimension {\n    return {\n      rows: this.subplots.length,\n      cols: this.subplots[this.row].length,\n    };\n  }\n\n  public readonly id: string;\n  protected movable: Movable;\n\n  private readonly title: string;\n  private readonly subtitle: string;\n  private readonly caption: string;\n\n  public readonly subplots: Subplot[][];\n  private readonly size: number;\n\n  /**\n   * Maps each data (row, col) to its 1-based visual position (top-left = 1).\n   * Populated by {@link applyLayout}; defaults to data-array order.\n   */\n  private visualOrderMap: Map<string, number>;\n\n  /**\n   * Whether pressing Up arrow should decrease the data row index\n   * (true when data row 0 is visually at the top).\n   * Set by {@link applyLayout}; defaults to `false`.\n   */\n  private invertVertical: boolean;\n\n  /**\n   * Total number of axes groups in the SVG.\n   * Set by {@link applyLayout}; used by the highlight getter.\n   */\n  private totalAxesCount: number;\n\n  /**\n   * Creates a new Figure instance from MAIDR data.\n   *\n   * After construction, call {@link applyLayout} with the result of\n   * `resolveSubplotLayout()` to set visual ordering and axes references.\n   * @param maidr - The MAIDR data containing figure information and subplots\n   */\n  public constructor(maidr: Maidr) {\n    super();\n\n    this.id = maidr.id;\n\n    this.title = maidr.title ?? DEFAULT_FIGURE_TITLE;\n    this.subtitle = maidr.subtitle ?? DEFAULT_SUBTITLE;\n    this.caption = maidr.caption ?? DEFAULT_CAPTION;\n\n    const subplots = maidr.subplots as MaidrSubplot[][];\n    this.subplots = subplots.map(row =>\n      row.map(subplot => new Subplot(subplot)),\n    );\n    this.size = this.subplots.reduce((sum, row) => sum + row.length, 0);\n\n    // Defaults until applyLayout() is called.\n    this.visualOrderMap = new Map<string, number>();\n    this.invertVertical = false;\n    this.totalAxesCount = 0;\n    this.movable = new MovableGrid<Subplot>(this.subplots);\n  }\n\n  /**\n   * Applies pre-computed visual layout data to this figure and its subplots.\n   *\n   * Must be called once after construction (and before the figure is used)\n   * with the result of `resolveSubplotLayout()`.\n   *\n   * @param layout - The pre-computed layout from the utility function.\n   */\n  public applyLayout(layout: SubplotLayout): void {\n    this.visualOrderMap = layout.visualOrderMap;\n    this.invertVertical = layout.invertVertical;\n    this.totalAxesCount = layout.totalAxesCount;\n\n    // Propagate axes element references to each subplot.\n    for (let r = 0; r < this.subplots.length; r++) {\n      for (let c = 0; c < this.subplots[r].length; c++) {\n        const axesEl = layout.axesElements.get(`${r},${c}`) ?? null;\n        this.subplots[r][c].setAxesElement(axesEl);\n      }\n    }\n\n    // Re-create movable starting at the visually top-left subplot.\n    this.movable = new MovableGrid<Subplot>(this.subplots, { row: layout.topLeftRow });\n  }\n\n  /**\n   * Overrides navigation to conditionally invert vertical direction.\n   * When data row 0 is at the visual top, we invert UPWARD/DOWNWARD so that\n   * pressing Up arrow moves toward lower row indices (visual top).\n   */\n  public override moveOnce(direction: MovableDirection): boolean {\n    return super.moveOnce(this.adjustDirection(direction));\n  }\n\n  /**\n   * Overrides extreme navigation with the same directional adjustment.\n   */\n  public override moveToExtreme(direction: MovableDirection): boolean {\n    return super.moveToExtreme(this.adjustDirection(direction));\n  }\n\n  /**\n   * Adjusts the navigation direction based on the data-to-visual mapping.\n   * Inverts UPWARD/DOWNWARD when the data array is ordered top-to-bottom\n   * (since MovableGrid maps UPWARD to row+1, but we need it to go to a lower row).\n   */\n  private adjustDirection(direction: MovableDirection): MovableDirection {\n    if (!this.invertVertical) {\n      return direction;\n    }\n    switch (direction) {\n      case 'UPWARD':\n        return 'DOWNWARD';\n      case 'DOWNWARD':\n        return 'UPWARD';\n      default:\n        return direction;\n    }\n  }\n\n  /**\n   * Cleans up all subplots and releases resources\n   */\n  public dispose(): void {\n    this.subplots.forEach(row => row.forEach(subplot => subplot.dispose()));\n    this.subplots.length = 0;\n    super.dispose();\n  }\n\n  /**\n   * Gets the 2D array of subplots\n   * @returns The subplots array\n   */\n  protected get values(): Subplot[][] {\n    return this.subplots;\n  }\n\n  /**\n   * Gets the currently active subplot based on row and column position\n   * @returns The active subplot\n   */\n  public get activeSubplot(): Subplot {\n    return this.subplots[this.row][this.col];\n  }\n\n  /**\n   * Gets the current state of the figure including active subplot\n   * @returns The complete figure state\n   */\n  public get state(): FigureState {\n    if (this.isOutOfBounds) {\n      return {\n        empty: true,\n        type: 'figure',\n      };\n    }\n\n    // Use the visual order map to determine the correct display index.\n    // This is data-ordering-agnostic: always shows top-left as \"Subplot 1\".\n    const key = `${this.row},${this.col}`;\n    const currentIndex = this.visualOrderMap.get(key);\n    if (currentIndex === undefined) {\n      console.warn(`[Figure] Visual order map missing key \"${key}\". Was applyLayout() called?`);\n    }\n\n    const activeSubplot = this.activeSubplot;\n\n    return {\n      empty: false,\n      type: 'figure',\n      title: this.title,\n      subtitle: this.subtitle,\n      caption: this.caption,\n      size: this.size,\n      index: currentIndex ?? 1,\n      subplot: activeSubplot.getStateWithFigurePosition(this.row, this.col),\n      traceTypes: activeSubplot.traceTypes,\n      highlight: this.highlight,\n    };\n  }\n\n  protected get highlight(): HighlightState {\n    if (this.totalAxesCount <= 1) {\n      return {\n        empty: true,\n        type: 'trace',\n        audio: {\n          y: this.row,\n          x: this.col,\n          rows: this.subplots.length,\n          cols: this.subplots[this.row].length,\n        },\n      };\n    }\n\n    // Use the pre-resolved axes element (set by applyLayout).\n    const axesElement = this.activeSubplot.axesElement;\n    if (axesElement) {\n      return {\n        empty: false,\n        elements: axesElement,\n      };\n    }\n\n    return {\n      empty: true,\n      type: 'trace',\n      audio: {\n        y: this.row,\n        x: this.col,\n        rows: this.subplots.length,\n        cols: this.subplots[this.row].length,\n      },\n    };\n  }\n\n  /**\n   * Moves to a specific point in the figure (implementation in subclasses)\n   * @param _x - The x coordinate\n   * @param _y - The y coordinate\n   */\n  public moveToPoint(_x: number, _y: number): void {\n    // implement in plot classes\n    this.notifyStateUpdate();\n  }\n\n  protected get outOfBoundsState(): FigureState {\n    return {\n      empty: true,\n      type: 'figure',\n    };\n  }\n}\n\nexport class Subplot extends AbstractPlot<SubplotState> implements Movable, Observable<SubplotState>, Disposable {\n  protected get dimension(): Dimension {\n    return {\n      rows: this.values.length,\n      cols: this.values[this.row].length,\n    };\n  }\n\n  protected readonly movable: Movable;\n\n  public readonly traces: Trace[][];\n  public readonly traceTypes: string[];\n\n  private readonly size: number;\n  private readonly highlightValue: SVGElement | null;\n  private readonly isViolinPlot: boolean;\n  private readonly layerSelector: string | null;\n\n  /**\n   * The pre-resolved parent `<g id=\"axes_*\">` SVG element for this subplot.\n   * Set by {@link Figure.applyLayout} after construction; `null` until then.\n   */\n  private _axesElement: SVGElement | null = null;\n\n  /**\n   * Creates a new Subplot instance from MAIDR subplot data\n   * @param subplot - The MAIDR subplot data containing layers\n   */\n  public constructor(subplot: MaidrSubplot) {\n    super();\n\n    const layers = subplot.layers;\n    this.size = layers.length;\n\n    // Store the first layer's selector string for DOM-based axes lookup.\n    const firstLayerSelectors = layers[0]?.selectors;\n    this.layerSelector = typeof firstLayerSelectors === 'string'\n      ? firstLayerSelectors\n      : Array.isArray(firstLayerSelectors) && typeof firstLayerSelectors[0] === 'string'\n        ? firstLayerSelectors[0]\n        : null;\n\n    // Violin detection: explicit layer types (VIOLIN_KDE / VIOLIN_BOX)\n    const layerTypes = layers.map(layer => layer.type);\n    this.isViolinPlot\n      = layerTypes.includes(TraceType.VIOLIN_KDE)\n        || layerTypes.includes(TraceType.VIOLIN_BOX);\n\n    // Each layer's type maps directly to a trace — no heuristic needed.\n    this.traces = layers.map(layer => [\n      TraceFactory.create(layer),\n    ]);\n    this.traceTypes = this.traces.flat().map((trace) => {\n      const state = trace.state;\n      return state.empty ? Constant.EMPTY : state.traceType;\n    });\n\n    this.highlightValue = this.mapToSvgElement(subplot.selector);\n    this.movable = new MovableGrid<Trace>(this.traces);\n  }\n\n  public dispose(): void {\n    this.traces.forEach(row => row.forEach(trace => trace.dispose()));\n    this.traces.length = 0;\n    super.dispose();\n  }\n\n  public getRow(): number {\n    return this.row;\n  }\n\n  /**\n   * Gets the number of traces in the subplot\n   * @returns The size (number of traces)\n   */\n  public getSize(): number {\n    return this.size;\n  }\n\n  /**\n   * Gets the 2D array of traces\n   * @returns The traces array\n   */\n  protected get values(): Trace[][] {\n    return this.traces;\n  }\n\n  /**\n   * Gets the currently active trace based on row and column position\n   * @returns The active trace\n   */\n  public get activeTrace(): Trace {\n    return this.traces[this.row][this.col];\n  }\n\n  /**\n   * Override moveOnce to avoid \"initial entry\" no-op behavior for layer navigation.\n   *\n   * For multi-layer subplots, the MovableGrid is used to step between layers\n   * (traces). We don't want the first PageUp/PageDown to be eaten by\n   * handleInitialEntry; instead, it should actually switch layers.\n   */\n  public override moveOnce(direction: MovableDirection): boolean {\n    // For multi-layer subplots, clear initial-entry state on first move so the\n    // first PageUp/PageDown actually switches layers.\n    if (this.size > 1 && this.isInitialEntry) {\n      this.isInitialEntry = false;\n    }\n    return super.moveOnce(direction);\n  }\n\n  public get state(): SubplotState {\n    return {\n      empty: false,\n      type: 'subplot',\n      size: this.size,\n      index: this.row + 1,\n      trace: this.activeTrace.state,\n      highlight: this.highlight,\n    };\n  }\n\n  protected get outOfBoundsState(): SubplotState {\n    return {\n      empty: true,\n      type: 'subplot',\n    };\n  }\n\n  private get highlight(): HighlightState {\n    if (this.highlightValue === null) {\n      return {\n        empty: true,\n        type: 'trace',\n        audio: {\n          y: this.row,\n          x: this.col,\n          rows: this.values.length,\n          cols: this.values[this.row].length,\n        },\n      };\n    }\n\n    return {\n      empty: false,\n      elements: this.highlightValue,\n    };\n  }\n\n  public moveToPoint(_x: number, _y: number): void {\n    // implement in plot classes\n    this.notifyStateUpdate();\n  }\n\n  /**\n   * Gets the subplot state with figure position context\n   * @param _figureRow - The row position in the figure\n   * @param _figureCol - The column position in the figure\n   * @returns The subplot state\n   */\n  public getStateWithFigurePosition(\n    _figureRow: number,\n    _figureCol: number,\n  ): SubplotState {\n    return this.state;\n  }\n\n  /**\n   * Returns the subplot's own SVG highlight element (resolved from `subplot.selector`).\n   * Used by the layout utility to locate the parent axes group.\n   * @returns The SVG element, or `null` if the subplot has no selector.\n   */\n  public getHighlightElement(): SVGElement | null {\n    return this.highlightValue;\n  }\n\n  /**\n   * Returns the CSS selector string from the first layer of this subplot.\n   * Used as a fallback by the layout utility when `getHighlightElement()` is `null`.\n   * @returns The selector string, or `null` if unavailable.\n   */\n  public getLayerSelector(): string | null {\n    return this.layerSelector;\n  }\n\n  /**\n   * Returns the pre-resolved parent `<g id=\"axes_*\">` element for this subplot.\n   * This is set externally via {@link setAxesElement} during layout resolution\n   * and does not perform any DOM queries.\n   * @returns The axes SVGElement, or `null` if not resolved.\n   */\n  public get axesElement(): SVGElement | null {\n    return this._axesElement;\n  }\n\n  /**\n   * Sets the pre-resolved axes element for this subplot.\n   * Called by {@link Figure.applyLayout} during initialization.\n   * @param element - The axes SVGElement to store.\n   */\n  public setAxesElement(element: SVGElement | null): void {\n    this._axesElement = element;\n  }\n\n  private mapToSvgElement(selector?: string): SVGElement | null {\n    return selector ? Svg.selectElement(selector) ?? null : null;\n  }\n}\n\n/**\n * Interface representing a trace with navigation and observation capabilities\n */\nexport interface Trace extends Movable, Observable<TraceState>, Disposable {\n  /**\n   * Gets the unique identifier for the trace\n   * @returns The trace ID\n   */\n  getId: () => string;\n\n  /**\n   * Gets the current X value from the trace\n   * @returns The current X value or null if not available\n   */\n  getCurrentXValue: () => any;\n\n  /**\n   * Moves the trace to the position that matches the given X value\n   * @param xValue - The X value to move to\n   * @returns True if the position was found and set, false otherwise\n   */\n  moveToXValue: (xValue: any) => boolean;\n\n  /**\n   * Get the current Y value from the trace.\n   * Optional method implemented by traces that support Y value preservation during layer switching.\n   * @returns The current Y value or null if not available\n   */\n  getCurrentYValue?: () => number | null;\n\n  /**\n   * Move to a specific X value and find the closest position with the given Y value.\n   * Optional method implemented by traces that support preserving both X and Y values during layer switching.\n   * @param xValue The X value to move to\n   * @param yValue The Y value to find the closest matching position for\n   * @returns true if the move was successful, false otherwise\n   */\n  moveToXAndYValue?: (xValue: any, yValue: number) => boolean;\n\n  /**\n   * Notify observers that the trace is out of bounds\n   */\n  notifyOutOfBounds: () => void;\n\n  /**\n   * Resets the trace to initial entry state\n   */\n  resetToInitialEntry: () => void;\n\n  /**\n   * Notifies all observers with a specific state\n   * @param state - The trace state to send to observers\n   */\n  notifyObserversWithState: (state: TraceState) => void;\n\n  /**\n   * Get all highlight SVG elements for this trace\n   * Used by HighlightService for high contrast mode\n   * @returns Array of all SVG elements, or empty array if none\n   */\n  getAllHighlightElements: () => SVGElement[];\n  getAllOriginalElements: () => SVGElement[];\n\n  /**\n   * Move the active point within this trace to the given (x, y) viewport\n   * coordinates. Implemented by all concrete traces via AbstractPlot /\n   * AbstractTrace, and used by Context for hover / click navigation.\n   *\n   * @param x - The x-coordinate in viewport pixels to move to.\n   * @param y - The y-coordinate in viewport pixels to move to.\n   *\n   * Behavior:\n   * - Finds the nearest data point to the given coordinates\n   * - If no valid nearest point exists or coordinates are out of bounds, no action is taken\n   * - If coordinates are within bounds and position is different, triggers state update via moveToIndex\n   * - If already at the target position, returns without triggering state update\n   *\n   * Violin Plot Specific Behavior:\n   * - For ViolinKdeTrace: Coordinates map to (violin index, y-value within KDE curve)\n   * - For ViolinBoxTrace: Coordinates map to (section index, violin index) for vertical\n   *   orientation, or (violin index, section index) for horizontal orientation\n   */\n  moveToPoint: (x: number, y: number) => void;\n\n  /**\n   * Gets extrema targets for navigation.\n   * Optional method implemented by traces that support extrema navigation.\n   * @returns Array of extrema targets\n   */\n  getExtremaTargets?: () => ExtremaTarget[];\n\n  /**\n   * Navigate to a specific extrema target.\n   * Optional method implemented by traces that support extrema navigation.\n   * @param target - The extrema target to navigate to\n   */\n  navigateToExtrema?: (target: ExtremaTarget) => void;\n}\n","import type { Disposable } from '@type/disposable';\nimport type { CandlestickTrend } from '@type/grammar';\n\n/**\n * Audio palette types for distinguishing groups in multiclass plots\n */\nexport type WaveType = 'sine' | 'square' | 'sawtooth' | 'triangle';\n\n/**\n * Predefined palette indices for base audio signatures.\n * These constants provide semantic meaning to palette positions\n * and make the code more maintainable than magic numbers.\n */\nexport const AudioPaletteIndex = {\n  // Basic wave types (0-3)\n  SINE_BASIC: 0,\n  SQUARE_BASIC: 1,\n  SAWTOOTH_BASIC: 2,\n  TRIANGLE_BASIC: 3,\n\n  // Harmonic variations (4+)\n  SAWTOOTH_DARK: 4,\n  SINE_HARMONIC: 5,\n  TRIANGLE_HARMONIC: 6,\n  SQUARE_HARMONIC: 7,\n  TRIANGLE_MELLOW: 8,\n  SINE_SUBTLE: 9,\n  SAWTOOTH_SOFT: 10,\n} as const;\n\n/**\n * Defines a single audio palette entry with wave type and optional modulation.\n */\nexport interface AudioPaletteEntry {\n  index: number;\n  waveType: WaveType;\n  harmonicMix?: {\n    fundamental: number;\n    harmonics: Array<{ frequency: number; amplitude: number }>;\n  };\n  timbreModulation?: {\n    attack: number;\n    decay: number;\n    sustain: number;\n    release: number;\n  };\n}\n\n/**\n * Service responsible for providing distinct audio signatures for different groups\n * in multiclass plots. Uses different wave types and sound mixes to create\n * distinguishable audio per group level.\n */\nexport class AudioPaletteService implements Disposable {\n  // Harmonic generation constants\n  private static readonly MIN_HARMONICS = 2;\n  private static readonly HARMONIC_VARIATION = 3;\n\n  private readonly basePalette: AudioPaletteEntry[];\n  private readonly extendedPalette: Map<number, AudioPaletteEntry>;\n\n  /**\n   * Creates an instance of AudioPaletteService and initializes palette entries.\n   */\n  public constructor() {\n    // IMPORTANT: Base palette index consistency requirement\n    // When modifying this basePalette array:\n    // 1. Each entry's `index` property MUST match its array position (0-based)\n    // 2. Use AudioPaletteIndex constants for semantic clarity\n    // 3. Update AudioPaletteIndex constants if adding/removing entries\n    // 4. The validateBasePalette() method will enforce this at runtime\n    //\n    // Example: basePalette[0] must have index: AudioPaletteIndex.SINE_BASIC (0)\n    //          basePalette[1] must have index: AudioPaletteIndex.SQUARE_BASIC (1)\n    //\n    // This consistency is critical for proper audio palette group mapping.\n\n    // Base palette with fundamental wave types\n    this.basePalette = [\n      {\n        index: AudioPaletteIndex.SINE_BASIC,\n        waveType: 'sine',\n        timbreModulation: {\n          attack: 0.01,\n          decay: 0.1,\n          sustain: 0.8,\n          release: 0.2,\n        },\n      },\n      {\n        index: AudioPaletteIndex.SQUARE_BASIC,\n        waveType: 'square',\n        timbreModulation: {\n          attack: 0.005,\n          decay: 0.05,\n          sustain: 0.7,\n          release: 0.15,\n        },\n      },\n      {\n        index: AudioPaletteIndex.SAWTOOTH_BASIC,\n        waveType: 'sawtooth',\n        timbreModulation: {\n          attack: 0.02,\n          decay: 0.08,\n          sustain: 0.6,\n          release: 0.25,\n        },\n      },\n      {\n        index: AudioPaletteIndex.TRIANGLE_BASIC,\n        waveType: 'triangle',\n        timbreModulation: {\n          attack: 0.015,\n          decay: 0.12,\n          sustain: 0.9,\n          release: 0.18,\n        },\n      },\n      {\n        index: AudioPaletteIndex.SAWTOOTH_DARK,\n        waveType: 'sawtooth',\n        harmonicMix: {\n          fundamental: 1,\n          harmonics: [\n            { frequency: 2, amplitude: 0.2 }, // subtle overtones\n            { frequency: 3, amplitude: 0.1 },\n            { frequency: 5, amplitude: 0.05 },\n          ],\n        },\n        timbreModulation: {\n          attack: 0.005, // sharp entry for tension\n          decay: 0.3, // slow fade to create unease\n          sustain: 0.4, // keep it low and brooding\n          release: 0.5, // longer tail for emotional weight\n        },\n      },\n      {\n        index: AudioPaletteIndex.SINE_HARMONIC,\n        waveType: 'sine',\n        harmonicMix: {\n          fundamental: 1,\n          harmonics: [\n            { frequency: 2, amplitude: 0.15 },\n            { frequency: 4, amplitude: 0.05 },\n          ],\n        },\n        timbreModulation: {\n          attack: 0.02,\n          decay: 0.2,\n          sustain: 0.6,\n          release: 0.3,\n        },\n      },\n      {\n        index: AudioPaletteIndex.TRIANGLE_HARMONIC,\n        waveType: 'triangle',\n        harmonicMix: {\n          fundamental: 1,\n          harmonics: [\n            { frequency: 3, amplitude: 0.2 },\n            { frequency: 6, amplitude: 0.1 },\n          ],\n        },\n        timbreModulation: {\n          attack: 0.01,\n          decay: 0.1,\n          sustain: 0.8,\n          release: 0.2,\n        },\n      },\n      {\n        index: AudioPaletteIndex.SQUARE_HARMONIC,\n        waveType: 'square',\n        harmonicMix: {\n          fundamental: 1,\n          harmonics: [\n            { frequency: 3, amplitude: 0.1 },\n            { frequency: 7, amplitude: 0.05 },\n          ],\n        },\n        timbreModulation: {\n          attack: 0.005,\n          decay: 0.05,\n          sustain: 0.5,\n          release: 0.1,\n        },\n      },\n      {\n        index: AudioPaletteIndex.TRIANGLE_MELLOW,\n        waveType: 'triangle',\n        harmonicMix: {\n          fundamental: 1,\n          harmonics: [\n            { frequency: 2.5, amplitude: 0.15 },\n            { frequency: 4.5, amplitude: 0.08 },\n          ],\n        },\n        timbreModulation: {\n          attack: 0.01,\n          decay: 0.4,\n          sustain: 0.3,\n          release: 0.5,\n        },\n      },\n      {\n        index: AudioPaletteIndex.SINE_SUBTLE,\n        waveType: 'sine',\n        harmonicMix: {\n          fundamental: 1,\n          harmonics: [\n            { frequency: 2, amplitude: 0.1 },\n            { frequency: 3, amplitude: 0.05 },\n          ],\n        },\n        timbreModulation: {\n          attack: 0.02,\n          decay: 0.1,\n          sustain: 0.9,\n          release: 0.15,\n        },\n      },\n      {\n        index: AudioPaletteIndex.SAWTOOTH_SOFT,\n        waveType: 'sawtooth',\n        harmonicMix: {\n          fundamental: 1,\n          harmonics: [\n            { frequency: 2, amplitude: 0.05 },\n            { frequency: 6, amplitude: 0.02 },\n          ],\n        },\n        timbreModulation: {\n          attack: 0.005,\n          decay: 0.4,\n          sustain: 0.2,\n          release: 0.6,\n        },\n      },\n    ];\n\n    // Validate that array indices match the index properties\n    this.validateBasePalette();\n\n    this.extendedPalette = new Map();\n    this.generateExtendedPalette();\n  }\n\n  /**\n   * Cleans up resources by clearing the extended palette cache.\n   */\n  public dispose(): void {\n    this.extendedPalette.clear();\n  }\n\n  /**\n   * Gets the audio palette entry for a specific group index\n   * @param groupIndex The index of the group (0-based)\n   * @returns AudioPaletteEntry for the specified group\n   */\n  public getPaletteEntry(groupIndex: number): AudioPaletteEntry {\n    if (groupIndex < this.basePalette.length) {\n      return this.basePalette[groupIndex];\n    }\n\n    const cachedEntry = this.extendedPalette.get(groupIndex);\n    if (cachedEntry) {\n      return cachedEntry;\n    }\n\n    // Generate new entry for this group index\n    const newEntry = this.generateExtendedEntry(groupIndex);\n    this.extendedPalette.set(groupIndex, newEntry);\n    return newEntry;\n  }\n\n  /**\n   * Gets the total number of predefined palette entries.\n   * @returns Number of base palette entries\n   */\n  public get basePaletteSize(): number {\n    return this.basePalette.length;\n  }\n\n  /**\n   * Determines the appropriate audio palette index for candlestick trends.\n   * This encapsulates the business logic for mapping market conditions\n   * to distinct audio signatures.\n   *\n   * @param trend The candlestick trend (Bull, Bear, or Neutral)\n   * @returns The palette index for the specified trend\n   */\n  public getCandlestickGroupIndex(trend: CandlestickTrend): number {\n    switch (trend) {\n      case 'Bull':\n        return AudioPaletteIndex.SINE_BASIC; // Basic sine for positive market trends\n      case 'Bear':\n        return AudioPaletteIndex.SAWTOOTH_SOFT; // Soft sawtooth for negative market trends\n      case 'Neutral':\n        return AudioPaletteIndex.TRIANGLE_BASIC; // Triangle for neutral market trends\n      default:\n        // Defensive fallback for unexpected trend values\n        return AudioPaletteIndex.SINE_BASIC;\n    }\n  }\n\n  /**\n   * Generates extended palette entries beyond the base palette for additional groups.\n   */\n  private generateExtendedPalette(): void {\n    // Pre-generate some common extended entries for better performance\n    const extendedDefinitions: AudioPaletteEntry[] = [\n      // Harmonic variations of sine wave\n      {\n        index: this.basePalette.length,\n        waveType: 'sine',\n        harmonicMix: {\n          fundamental: 1.0,\n          harmonics: [\n            { frequency: 2.0, amplitude: 0.3 },\n            { frequency: 3.0, amplitude: 0.15 },\n          ],\n        },\n        timbreModulation: {\n          attack: 0.02,\n          decay: 0.15,\n          sustain: 0.7,\n          release: 0.3,\n        },\n      },\n      // Harmonic variations of square wave\n      {\n        index: this.basePalette.length + 1,\n        waveType: 'square',\n        harmonicMix: {\n          fundamental: 1.0,\n          harmonics: [\n            { frequency: 1.5, amplitude: 0.4 },\n            { frequency: 2.5, amplitude: 0.2 },\n          ],\n        },\n        timbreModulation: {\n          attack: 0.01,\n          decay: 0.08,\n          sustain: 0.6,\n          release: 0.4,\n        },\n      },\n      // Complex harmonic mix with sawtooth\n      {\n        index: this.basePalette.length + 2,\n        waveType: 'sawtooth',\n        harmonicMix: {\n          fundamental: 1.0,\n          harmonics: [\n            { frequency: 1.25, amplitude: 0.35 },\n            { frequency: 2.0, amplitude: 0.25 },\n            { frequency: 3.0, amplitude: 0.1 },\n          ],\n        },\n        timbreModulation: {\n          attack: 0.03,\n          decay: 0.2,\n          sustain: 0.5,\n          release: 0.35,\n        },\n      },\n      // Triangle with unique modulation\n      {\n        index: this.basePalette.length + 3,\n        waveType: 'triangle',\n        harmonicMix: {\n          fundamental: 1.0,\n          harmonics: [\n            { frequency: 0.5, amplitude: 0.2 },\n            { frequency: 4.0, amplitude: 0.15 },\n          ],\n        },\n        timbreModulation: {\n          attack: 0.025,\n          decay: 0.18,\n          sustain: 0.8,\n          release: 0.25,\n        },\n      },\n    ];\n\n    // Store pre-generated entries starting from index 4\n    extendedDefinitions.forEach((entry, index) => {\n      this.extendedPalette.set(this.basePalette.length + index, entry);\n    });\n  }\n\n  /**\n   * Generates a unique audio palette entry for a given group index beyond the base palette.\n   * @param groupIndex - Index of the group to generate an entry for\n   * @returns Generated audio palette entry\n   */\n  private generateExtendedEntry(groupIndex: number): AudioPaletteEntry {\n    const baseIndex = groupIndex % this.basePalette.length;\n    const baseEntry = this.basePalette[baseIndex];\n\n    // Use the group index to create variations\n    const variation = Math.floor(\n      (groupIndex - this.basePalette.length) / this.basePalette.length,\n    );\n\n    // Generate harmonic mix based on variation\n    const harmonics = this.generateHarmonics(variation);\n\n    // Generate unique timbre modulation\n    const timbreModulation = this.generateTimbreModulation(\n      variation,\n      baseEntry.timbreModulation!,\n    );\n\n    return {\n      index: groupIndex,\n      waveType: baseEntry.waveType,\n      harmonicMix: {\n        fundamental: 1.0,\n        harmonics,\n      },\n      timbreModulation,\n    };\n  }\n\n  /**\n   * Generates harmonic series for extended palette entries based on variation.\n   * @param variation - Variation index to determine harmonic characteristics\n   * @returns Array of harmonic frequency and amplitude pairs\n   */\n  private generateHarmonics(\n    variation: number,\n  ): Array<{ frequency: number; amplitude: number }> {\n    const harmonics: Array<{ frequency: number; amplitude: number }> = [];\n\n    // Generate harmonics based on variation\n    const numHarmonics\n      = AudioPaletteService.MIN_HARMONICS\n        + (variation % AudioPaletteService.HARMONIC_VARIATION);\n\n    for (let i = 0; i < numHarmonics; i++) {\n      const frequency = 1.0 + (i + 1) * (0.5 + ((variation * 0.3) % 1.0));\n      const amplitude = (0.4 / (i + 1)) * (1.0 - ((variation * 0.1) % 0.3));\n\n      harmonics.push({ frequency, amplitude });\n    }\n\n    return harmonics;\n  }\n\n  /**\n   * Generates unique ADSR timbre modulation for extended palette entries.\n   * @param variation - Variation index to determine modulation characteristics\n   * @param base - Base timbre modulation values to modify\n   * @param base.attack - Base attack time in seconds\n   * @param base.decay - Base decay time in seconds\n   * @param base.sustain - Base sustain level (0-1)\n   * @param base.release - Base release time in seconds\n   * @returns Generated timbre modulation settings\n   */\n  private generateTimbreModulation(\n    variation: number,\n    base: { attack: number; decay: number; sustain: number; release: number },\n  ): { attack: number; decay: number; sustain: number; release: number } {\n    const factor = 1.0 + ((variation * 0.2) % 0.5);\n\n    return {\n      attack: Math.max(0.005, Math.min(0.05, base.attack * factor)),\n      decay: Math.max(0.05, Math.min(0.3, base.decay * factor)),\n      sustain: Math.max(\n        0.4,\n        Math.min(0.9, base.sustain + ((variation * 0.1) % 0.2)),\n      ),\n      release: Math.max(0.1, Math.min(0.5, base.release * factor)),\n    };\n  }\n\n  /**\n   * Validates that all base palette entries have correct indices matching their array positions.\n   * @throws Error if any entry's index doesn't match its array position\n   */\n  private validateBasePalette(): void {\n    this.basePalette.forEach((entry, arrayIndex) => {\n      if (entry.index !== arrayIndex) {\n        throw new Error(\n          `AudioPalette validation error: Entry at array position ${arrayIndex} has index ${entry.index}. `\n          + `Array position must match the index property to prevent audio palette mismatches.`,\n        );\n      }\n    });\n  }\n}\n","import type { Disposable } from '@type/disposable';\nimport type { Observer } from '@type/observable';\nimport type { AudioState, PlotState } from '@type/state';\nimport type { AudioPaletteEntry } from './audioPalette';\nimport type { NotificationService } from './notification';\nimport type { SettingsService } from './settings';\nimport { AudioPaletteIndex, AudioPaletteService } from './audioPalette';\n\ninterface Range {\n  min: number;\n  max: number;\n}\n\ninterface SpatialPosition {\n  x: number;\n  y: number;\n}\n\ninterface Frequency {\n  raw: number | number[];\n  min: number;\n  max: number;\n}\n\ninterface Panning {\n  x: number;\n  y: number;\n  rows: number;\n  cols: number;\n}\n\ntype AudioId = ReturnType<typeof setTimeout>;\n\nconst NULL_FREQUENCY = 100;\nconst WAITING_FREQUENCY = 440;\nconst COMPLETE_FREQUENCY = 880;\n\n// Warning\nconst WARNING_FREQUENCY = 180;\nconst WARNING_DURATION = 0.2;\nconst WARNING_SPACE = 0.1;\n\nconst DEFAULT_DURATION = 0.3;\nconst DEFAULT_PALETTE_INDEX = AudioPaletteIndex.SINE_BASIC;\n\nenum AudioMode {\n  OFF = 'off',\n  SEPARATE = 'on',\n  COMBINED = 'combined',\n}\n\nenum AudioSettings {\n  VOLUME = 'general.volume',\n  MIN_FREQUENCY = 'general.minFrequency',\n  MAX_FREQUENCY = 'general.maxFrequency',\n}\n\n/**\n * Service responsible for audio sonification of plot data.\n * Implements the Observer pattern to receive state updates from plot models\n * and converts data values to audio frequencies with spatial panning.\n *\n * Features:\n * - Frequency mapping based on data value ranges\n * - Stereo panning based on x-position in plot\n * - Distinct timbres for multiclass/multiline plots via AudioPaletteService\n * - ADSR envelope shaping for natural tone attack/decay\n * - Simultaneous tone playback for intersection points\n * - Warning and notification tones for boundaries and completion\n */\nexport class AudioService implements Observer<PlotState>, Disposable {\n  private readonly notification: NotificationService;\n  private readonly audioPalette: AudioPaletteService;\n\n  private isCombinedAudio: boolean;\n  private mode: AudioMode;\n  private readonly activeAudioIds: Map<AudioId, OscillatorNode | OscillatorNode[]>;\n\n  private volume: number;\n  private minFrequency: number;\n  private maxFrequency: number;\n  private readonly audioContext: AudioContext;\n  private readonly compressor: DynamicsCompressorNode;\n\n  /**\n   * Creates an instance of AudioService.\n   * Initializes the Web Audio API context, compressor, and audio palette.\n   * Subscribes to settings changes for volume and frequency range updates.\n   *\n   * @param notification - Service for displaying audio mode notifications to users\n   * @param settings - Service providing user preferences for volume and frequency range\n   * @param state - Initial plot state used to configure audio mode\n   */\n  public constructor(notification: NotificationService, settings: SettingsService, state: PlotState) {\n    this.notification = notification;\n    this.audioPalette = new AudioPaletteService();\n\n    this.isCombinedAudio = false;\n    this.mode = AudioMode.SEPARATE;\n    this.updateMode(state);\n    this.activeAudioIds = new Map();\n\n    this.volume = this.normalizeVolume(settings.get<number>(AudioSettings.VOLUME));\n    this.minFrequency = settings.get<number>(AudioSettings.MIN_FREQUENCY);\n    this.maxFrequency = settings.get<number>(AudioSettings.MAX_FREQUENCY);\n    settings.onChange((event) => {\n      if (event.affectsSetting(AudioSettings.VOLUME)) {\n        this.volume = this.normalizeVolume(event.get<number>(AudioSettings.VOLUME));\n      }\n      if (event.affectsSetting(AudioSettings.MIN_FREQUENCY)) {\n        this.minFrequency = event.get<number>(AudioSettings.MIN_FREQUENCY);\n      }\n      if (event.affectsSetting(AudioSettings.MAX_FREQUENCY)) {\n        this.maxFrequency = event.get<number>(AudioSettings.MAX_FREQUENCY);\n      }\n    });\n\n    this.audioContext = new AudioContext();\n    this.compressor = this.initCompressor();\n  }\n\n  /**\n   * Disposes of all audio resources and cleans up the service.\n   * Stops all active audio, disposes the audio palette, disconnects\n   * the compressor, and closes the AudioContext.\n   */\n  public dispose(): void {\n    this.stopAll();\n    this.audioPalette.dispose();\n\n    if (this.audioContext.state !== 'closed') {\n      this.compressor.disconnect();\n      void this.audioContext.close();\n    }\n  }\n\n  private initCompressor(): DynamicsCompressorNode {\n    const compressor = this.audioContext.createDynamicsCompressor();\n    compressor.threshold.value = -50;\n    compressor.knee.value = 40;\n    compressor.ratio.value = 12;\n    compressor.attack.value = 0;\n    compressor.release.value = 0.25;\n\n    const smoothGain = this.audioContext.createGain();\n    smoothGain.gain.value = 0.5;\n\n    compressor.connect(smoothGain);\n    smoothGain.connect(this.audioContext.destination);\n\n    return compressor;\n  }\n\n  private updateMode(state: PlotState): void {\n    if (state.empty || state.type === 'figure') {\n      return;\n    }\n\n    const traceState = state.type === 'subplot' ? state.trace : state;\n    if (\n      traceState.empty\n      || traceState.hasMultiPoints === this.isCombinedAudio\n    ) {\n      return;\n    }\n\n    this.isCombinedAudio = traceState.hasMultiPoints;\n    if (this.mode === AudioMode.OFF) {\n      return;\n    }\n\n    if (this.isCombinedAudio) {\n      this.mode = AudioMode.COMBINED;\n    } else {\n      this.mode = AudioMode.SEPARATE;\n    }\n  }\n\n  /**\n   * Observer callback invoked when plot state changes.\n   * Plays appropriate audio based on the current data point, including:\n   * - Empty/warning tones for out-of-bounds navigation\n   * - Simultaneous tones for multiline intersection points\n   * - Single tones with frequency mapped to data value\n   * - Continuous smooth tones for violin/density plots\n   *\n   * @param state - The updated plot state containing audio parameters\n   */\n  public update(state: PlotState): void {\n    this.updateMode(state);\n    // TODO: Clean up previous audio state once syncing with Autoplay interval.\n\n    // Play audio only if turned on.\n    if (this.mode === AudioMode.OFF) {\n      return;\n    }\n\n    if (state.empty) {\n      if (state.warning) {\n        this.playWarningTone();\n      } else if (state.type === 'trace' && state.audio) {\n        // Use the panning from state.audio which contains the boundary position\n        this.playEmptyTone({\n          x: state.audio.x,\n          y: state.audio.y,\n          rows: state.audio.rows,\n          cols: state.audio.cols,\n        });\n      } else {\n        // Subplot/Figure empty state - no spatial audio info available\n        this.playEmptyTone({ x: 0, y: 0, rows: 1, cols: 1 });\n      }\n      return;\n    }\n    if (state.type !== 'trace') {\n      return;\n    }\n\n    // Handle intersection logic for multiline plots\n    if (\n      state.traceType === 'line'\n      && !state.empty\n      && Array.isArray(state.intersections)\n      && state.intersections.length > 1\n    ) {\n      this.stopAll();\n      this.playSimultaneousTones(state.intersections);\n      return;\n    }\n\n    const audio = state.audio;\n\n    // Resolve palette entry from group index or candlestick trend\n    let groupIndex = audio.group;\n    if (audio.trend && groupIndex === undefined) {\n      groupIndex = this.audioPalette.getCandlestickGroupIndex(audio.trend);\n    }\n    const paletteEntry = groupIndex !== undefined\n      ? this.audioPalette.getPaletteEntry(groupIndex)\n      : undefined;\n\n    if (audio.isContinuous) {\n      this.playSmooth(\n        audio.freq,\n        audio.panning,\n        paletteEntry,\n        audio.volumeMultiplier,\n        audio.volumeScale,\n      );\n    } else if (Array.isArray(audio.freq.raw)) {\n      const values = audio.freq.raw as number[];\n      if (values.length === 0) {\n        this.playZeroTone(audio.panning);\n        return;\n      }\n\n      let currentIndex = 0;\n      const playRate = this.mode === AudioMode.SEPARATE ? 50 : 0;\n      const activeIds = new Array<AudioId>();\n      const playNext = (): void => {\n        if (currentIndex < values.length) {\n          this.playTone(\n            {\n              min: audio.freq.min,\n              max: audio.freq.max,\n              raw: values[currentIndex++],\n            },\n            {\n              x: audio.panning.x,\n              y: audio.panning.y,\n              rows: audio.panning.rows,\n              cols: audio.panning.cols,\n            },\n            paletteEntry,\n          );\n          activeIds.push(setTimeout(playNext, playRate));\n        } else {\n          this.stop(activeIds);\n        }\n      };\n\n      playNext();\n    } else {\n      const value = audio.freq.raw as number;\n      if (value === 0) {\n        this.playZeroTone(audio.panning);\n      } else {\n        this.playTone(audio.freq, audio.panning, paletteEntry);\n      }\n    }\n  }\n\n  private playTone(freq: Frequency, panning: Panning, paletteEntry?: AudioPaletteEntry): AudioId {\n    const fromFreq = { min: freq.min, max: freq.max };\n    const toFreq = { min: this.minFrequency, max: this.maxFrequency };\n    const frequency = this.interpolate(freq.raw as number, fromFreq, toFreq);\n\n    const x = this.clamp(this.interpolate(panning.x, { min: 0, max: panning.cols - 1 }, { min: -1, max: 1 }), -1, 1);\n    // Y-axis not used for stereo panning\n    return this.playOscillator(frequency, { x, y: 0 }, paletteEntry);\n  }\n\n  /**\n   * Creates an ADSR gain envelope for a palette entry, or returns a default curve.\n   * When timbreModulation is present, uses precise Web Audio scheduling and returns null.\n   * Otherwise, returns a value curve array for setValueCurveAtTime.\n   */\n  private createAdsrEnvelope(\n    gainNode: GainNode,\n    paletteEntry: AudioPaletteEntry | undefined,\n    volume: number,\n    startTime: number,\n    duration: number,\n  ): number[] | null {\n    if (paletteEntry?.timbreModulation) {\n      const { attack, decay, sustain, release } = paletteEntry.timbreModulation;\n      const attackTime = duration * attack;\n      const decayTime = duration * decay;\n      const releaseTime = duration * release;\n      const sustainTime = duration - attackTime - decayTime - releaseTime;\n\n      gainNode.gain.setValueAtTime(1e-4 * volume, startTime);\n      gainNode.gain.linearRampToValueAtTime(volume, startTime + attackTime);\n      gainNode.gain.linearRampToValueAtTime(\n        sustain * volume,\n        startTime + attackTime + decayTime,\n      );\n      if (sustainTime > 0) {\n        gainNode.gain.setValueAtTime(\n          sustain * volume,\n          startTime + attackTime + decayTime + sustainTime,\n        );\n      }\n      gainNode.gain.linearRampToValueAtTime(1e-4 * volume, startTime + duration);\n\n      return null;\n    } else {\n      return [\n        0.5 * volume,\n        volume,\n        0.5 * volume,\n        0.5 * volume,\n        0.5 * volume,\n        0.1 * volume,\n        1e-4 * volume,\n      ];\n    }\n  }\n\n  private playOscillator(\n    frequency: number,\n    position: SpatialPosition = { x: 0, y: 0 },\n    paletteEntry?: AudioPaletteEntry,\n  ): AudioId {\n    const duration = DEFAULT_DURATION;\n    const startTime = this.audioContext.currentTime;\n\n    // Fall back to default palette entry (sine) if none provided\n    if (!paletteEntry) {\n      paletteEntry = this.audioPalette.getPaletteEntry(DEFAULT_PALETTE_INDEX);\n    }\n\n    // Create oscillators from palette entry\n    const oscillators: OscillatorNode[] = [];\n    const gainNodes: GainNode[] = [];\n\n    // Primary oscillator\n    const primaryOsc = this.audioContext.createOscillator();\n    primaryOsc.type = paletteEntry.waveType;\n    primaryOsc.frequency.value = frequency;\n    oscillators.push(primaryOsc);\n\n    // Harmonic oscillators\n    if (paletteEntry.harmonicMix) {\n      for (const harmonic of paletteEntry.harmonicMix.harmonics) {\n        const harmonicOsc = this.audioContext.createOscillator();\n        harmonicOsc.type = paletteEntry.waveType;\n        harmonicOsc.frequency.value = harmonic.frequency * frequency;\n        oscillators.push(harmonicOsc);\n      }\n    }\n\n    // Create gain nodes with ADSR envelope for each oscillator\n    for (let i = 0; i < oscillators.length; i++) {\n      const gainNode = this.audioContext.createGain();\n      let oscillatorVolume = this.volume;\n\n      if (i === 0) {\n        // Primary oscillator uses fundamental amplitude\n        if (paletteEntry.harmonicMix) {\n          oscillatorVolume *= paletteEntry.harmonicMix.fundamental;\n        }\n      } else {\n        // Harmonic oscillator uses its amplitude\n        const harmonic = paletteEntry.harmonicMix!.harmonics[i - 1];\n        oscillatorVolume *= harmonic.amplitude;\n      }\n\n      const envelope = this.createAdsrEnvelope(\n        gainNode,\n        paletteEntry,\n        oscillatorVolume,\n        startTime,\n        duration,\n      );\n\n      if (envelope !== null) {\n        gainNode.gain.setValueCurveAtTime(envelope, startTime, duration);\n      }\n\n      gainNodes.push(gainNode);\n    }\n\n    // Use StereoPannerNode for smooth left-right stereo panning\n    // This is simpler and more direct than PannerNode for stereo-only panning\n    const stereoPanner = this.audioContext.createStereoPanner();\n    stereoPanner.pan.value = position.x; // position.x is already -1 (left) to 1 (right)\n\n    // Connect audio graph: oscillators → gain nodes → stereo panner → compressor\n    for (let i = 0; i < oscillators.length; i++) {\n      oscillators[i].connect(gainNodes[i]);\n      gainNodes[i].connect(stereoPanner);\n    }\n    stereoPanner.connect(this.compressor);\n\n    // Start all oscillators\n    oscillators.forEach(osc => osc.start(startTime));\n\n    const cleanUp = (audioId: AudioId): void => {\n      stereoPanner.disconnect();\n      for (let i = 0; i < oscillators.length; i++) {\n        oscillators[i].stop();\n        oscillators[i].disconnect();\n        gainNodes[i].disconnect();\n      }\n      this.activeAudioIds.delete(audioId);\n    };\n\n    const audioId = setTimeout(() => cleanUp(audioId), duration * 1e3 * 2);\n    this.activeAudioIds.set(audioId, oscillators);\n    return audioId;\n  }\n\n  private playSmooth(\n    freq: Frequency,\n    panning: Panning,\n    paletteEntry?: AudioPaletteEntry,\n    volumeMultiplier?: number,\n    volumeScale?: number,\n  ): void {\n    const ctx = this.audioContext;\n    const startTime = ctx.currentTime;\n    const duration = DEFAULT_DURATION;\n    const freqs = (freq.raw as number[]).map(v =>\n      this.interpolate(\n        v,\n        { min: freq.min, max: freq.max },\n        { min: this.minFrequency, max: this.maxFrequency },\n      ),\n    );\n\n    // Base volume from user settings (0–1, quadratic scaling)\n    const baseVolume = this.volume;\n\n    // Use volumeScale if provided (normalized 0-1 range), otherwise use volumeMultiplier.\n    // volumeScale takes precedence as the preferred approach; volumeMultiplier is kept for backward compatibility.\n    let currentVolume: number;\n    if (volumeScale !== undefined) {\n      currentVolume = baseVolume * Math.max(0, volumeScale);\n    } else {\n      // Fall back to volumeMultiplier for backward compatibility\n      currentVolume = baseVolume * (volumeMultiplier ?? 1.0);\n    }\n\n    if (freqs.length < 2) {\n      freqs.push(freqs[0]);\n    }\n\n    const xPos = this.clamp(this.interpolate(panning.x, { min: 0, max: panning.cols - 1 }, { min: -1, max: 1 }), -1, 1);\n\n    // Use palette wave type if available, otherwise default sine\n    const waveType = paletteEntry?.waveType || 'sine';\n\n    const oscillator = ctx.createOscillator();\n    oscillator.type = waveType;\n    oscillator.frequency.setValueCurveAtTime(freqs, startTime, duration);\n\n    // Apply ADSR envelope from palette entry or use default curve\n    const gainNode = ctx.createGain();\n    const envelope = this.createAdsrEnvelope(\n      gainNode,\n      paletteEntry,\n      currentVolume,\n      startTime,\n      duration,\n    );\n\n    if (envelope !== null) {\n      gainNode.gain.setValueCurveAtTime(envelope, startTime, duration);\n    }\n\n    // Use StereoPannerNode for smooth left-right stereo panning\n    const stereoPanner = ctx.createStereoPanner();\n    stereoPanner.pan.value = xPos; // xPos is already -1 to 1\n\n    oscillator.connect(gainNode);\n    gainNode.connect(stereoPanner);\n    stereoPanner.connect(this.compressor);\n\n    oscillator.start(startTime);\n    oscillator.stop(startTime + duration);\n\n    const audioId = setTimeout(() => {\n      oscillator.disconnect();\n      gainNode.disconnect();\n      stereoPanner.disconnect();\n      this.activeAudioIds.delete(audioId);\n    }, duration * 1000 * 2);\n\n    this.activeAudioIds.set(audioId, oscillator);\n  }\n\n  /**\n   * Plays a spatialized tone indicating an \"empty\" or out-of-bounds state.\n   * Uses multiple harmonic frequencies to create a distinct \"null\" sound.\n   *\n   * The panning position from the Panning object provides directional spatial cues,\n   * helping users infer where the empty state occurs within the overall layout.\n   *\n   * @param panning - Position information for spatial audio placement\n   * @returns AudioId for the played tone\n   */\n  private playEmptyTone(panning: Panning): AudioId {\n    const xPos = this.interpolate(panning.x, { min: 0, max: panning.cols - 1 }, { min: -1, max: 1 });\n\n    const ctx = this.audioContext;\n    const now = ctx.currentTime;\n    const duration = 0.2;\n\n    // Use StereoPannerNode for smooth left-right stereo panning\n    const stereoPanner = ctx.createStereoPanner();\n    stereoPanner.pan.value = xPos; // xPos is already -1 to 1\n\n    const frequencies = [500, 1000, 1500, 2100, 2700];\n    const gains = [1, 0.6, 0.4, 0.2, 0.1];\n\n    const masterGain = ctx.createGain();\n    masterGain.gain.setValueAtTime(0.3 * this.volume, now);\n    masterGain.gain.exponentialRampToValueAtTime(0.01 * this.volume, now + duration);\n\n    masterGain.connect(stereoPanner);\n    stereoPanner.connect(this.compressor);\n\n    const oscillators: OscillatorNode[] = [];\n    for (let i = 0; i < frequencies.length; i++) {\n      const osc = ctx.createOscillator();\n      const gain = ctx.createGain();\n\n      osc.frequency.value = frequencies[i];\n      osc.type = 'sine';\n\n      gain.gain.setValueAtTime(gains[i] * this.volume, now);\n      gain.gain.exponentialRampToValueAtTime(0.001 * this.volume, now + duration);\n\n      osc.connect(gain);\n      gain.connect(masterGain);\n\n      osc.start(now);\n      osc.stop(now + duration);\n\n      oscillators.push(osc);\n    }\n\n    const cleanUp = (audioId: AudioId): void => {\n      stereoPanner.disconnect();\n      masterGain.disconnect();\n      oscillators.forEach((osc) => {\n        osc.disconnect();\n      });\n      this.activeAudioIds.delete(audioId);\n    };\n\n    const audioId = setTimeout(() => cleanUp(audioId), duration * 1e3 * 2);\n    this.activeAudioIds.set(audioId, oscillators);\n    return audioId;\n  }\n\n  private playOneWarningBeep(freq: number, startTime: number): void {\n    const osc = this.audioContext.createOscillator();\n    const gain = this.audioContext.createGain();\n\n    osc.type = 'sine';\n    osc.frequency.value = freq;\n    let vol = 1;\n    if (osc.type !== 'sine')\n      vol = 0.5;\n\n    gain.gain.setValueAtTime(vol, startTime);\n    gain.gain.exponentialRampToValueAtTime(0.001, startTime + WARNING_DURATION);\n\n    osc.connect(gain);\n    gain.connect(this.audioContext.destination);\n\n    osc.start(startTime);\n    osc.stop(startTime + WARNING_DURATION);\n  }\n\n  /**\n   * Plays a warning tone to indicate navigation boundary or invalid state.\n   * Consists of two descending beeps (half-step down) to clearly signal a warning.\n   */\n  public playWarningTone(): void {\n    const now = this.audioContext.currentTime;\n    this.playOneWarningBeep(WARNING_FREQUENCY, now);\n    this.playOneWarningBeep(WARNING_FREQUENCY / 2 ** (1 / 12), now + WARNING_SPACE); // half step down\n    // setTimeout(() => this.audioContext.close(), (WARNING_SPACE + WARNING_DURATION + 0.1) * 1000);\n  }\n\n  /**\n   * Plays a warning tone only if audio mode is enabled.\n   * Use this for conditional warnings that should respect user's audio preferences.\n   */\n  public playWarningToneIfEnabled(): void {\n    if (this.mode === AudioMode.OFF) {\n      return;\n    }\n    this.playWarningTone();\n  }\n\n  private playZeroTone(panning: Panning): AudioId {\n    const xPos = this.clamp(this.interpolate(panning.x, { min: 0, max: panning.cols - 1 }, { min: -1, max: 1 }), -1, 1);\n    // Y-axis not used for stereo panning\n    return this.playOscillator(NULL_FREQUENCY, { x: xPos, y: 0 }, { index: DEFAULT_PALETTE_INDEX, waveType: 'triangle' });\n  }\n\n  /**\n   * Plays a repeating waiting tone to indicate an ongoing async operation.\n   * The tone repeats every second until stopped.\n   *\n   * @returns AudioId that can be passed to stop() to cancel the waiting tone\n   */\n  public playWaitingTone(): AudioId {\n    const paletteEntry = this.audioPalette.getPaletteEntry(DEFAULT_PALETTE_INDEX);\n    return setInterval(\n      () => this.playOscillator(WAITING_FREQUENCY, { x: 0, y: 0 }, paletteEntry),\n      1000,\n    );\n  }\n\n  /**\n   * Plays a completion tone to indicate an async operation has finished.\n   * Uses a higher frequency than the waiting tone for clear distinction.\n   *\n   * @returns AudioId for the played tone\n   */\n  public playCompleteTone(): AudioId {\n    const paletteEntry = this.audioPalette.getPaletteEntry(DEFAULT_PALETTE_INDEX);\n    return this.playOscillator(COMPLETE_FREQUENCY, { x: 0, y: 0 }, paletteEntry);\n  }\n\n  /**\n   * Plays multiple tones simultaneously for intersection points in multiline plots.\n   * Each intersecting line gets a distinct timbre from the audio palette.\n   */\n  private playSimultaneousTones(tones: AudioState[]): void {\n    const duration = DEFAULT_DURATION;\n    const ctx = this.audioContext;\n    const now = ctx.currentTime;\n\n    // Use the value from the first tone as the shared value (all intersecting lines share the same point)\n    const sharedValue = Array.isArray(tones[0].freq.raw)\n      ? (tones[0].freq.raw[1] ?? tones[0].freq.raw[0])\n      : (tones[0].freq.raw as number);\n    const sharedFrequency = this.interpolate(\n      sharedValue,\n      { min: tones[0].freq.min, max: tones[0].freq.max },\n      { min: this.minFrequency, max: this.maxFrequency },\n    );\n\n    tones.forEach((tone, idx) => {\n      const paletteEntry = this.audioPalette.getPaletteEntry(tone.group ?? idx);\n      const waveType = paletteEntry.waveType;\n\n      const oscillator = ctx.createOscillator();\n      oscillator.type = waveType;\n      oscillator.frequency.value = sharedFrequency;\n\n      const gainNode = ctx.createGain();\n      gainNode.gain.setValueAtTime(this.volume, now);\n      gainNode.gain.exponentialRampToValueAtTime(0.01 * this.volume, now + duration);\n\n      oscillator.connect(gainNode);\n      gainNode.connect(this.compressor);\n\n      oscillator.start(now);\n      oscillator.stop(now + duration);\n\n      const audioId = setTimeout(() => {\n        oscillator.disconnect();\n        gainNode.disconnect();\n        this.activeAudioIds.delete(audioId);\n      }, duration * 1000 * 2);\n\n      this.activeAudioIds.set(audioId, [oscillator]);\n    });\n  }\n\n  private interpolate(value: number, from: Range, to: Range): number {\n    if (from.min === from.max) {\n      return to.min;\n    }\n\n    return (\n      ((value - from.min) / (from.max - from.min)) * (to.max - to.min) + to.min\n    );\n  }\n\n  private clamp(value: number, from: number, to: number): number {\n    return Math.max(from, Math.min(value, to));\n  }\n\n  /**\n   * Toggles the audio mode between off, separate, and combined states.\n   * Cycles through modes and notifies the user of the current state.\n   * - OFF: No audio playback\n   * - SEPARATE: Sequential playback for multi-point data\n   * - COMBINED: Simultaneous playback for multi-point data\n   */\n  public toggle(): void {\n    switch (this.mode) {\n      case AudioMode.OFF:\n        this.mode = this.isCombinedAudio\n          ? AudioMode.COMBINED\n          : AudioMode.SEPARATE;\n        break;\n\n      case AudioMode.SEPARATE:\n        this.mode = AudioMode.OFF;\n        break;\n\n      case AudioMode.COMBINED:\n        this.mode = AudioMode.SEPARATE;\n        break;\n    }\n\n    const mode\n      = this.isCombinedAudio && this.mode === AudioMode.SEPARATE\n        ? 'separate'\n        : this.mode;\n    const message = `Sound is ${mode}`;\n    this.notification.notify(message);\n  }\n\n  /**\n   * Stops one or more active audio tones by their IDs.\n   * Disconnects oscillators and clears associated timeouts/intervals.\n   *\n   * @param audioId - Single AudioId or array of AudioIds to stop\n   */\n  public stop(audioId: AudioId | AudioId[]): void {\n    const audioIds = Array.isArray(audioId) ? audioId : [audioId];\n    audioIds.forEach((audioId) => {\n      const activeNode = this.activeAudioIds.get(audioId);\n      if (!activeNode) {\n        clearInterval(audioId);\n        return;\n      }\n      const activeNodes = Array.isArray(activeNode) ? activeNode : [activeNode];\n      activeNodes.forEach((node) => {\n        node?.disconnect();\n        node?.stop();\n      });\n\n      clearTimeout(audioId);\n      this.activeAudioIds.delete(audioId);\n    });\n  }\n\n  private stopAll(): void {\n    this.activeAudioIds.forEach((node, audioId) => {\n      clearTimeout(audioId);\n      const nodes = Array.isArray(node) ? node : [node];\n      nodes.forEach((node) => {\n        node.disconnect();\n        node.stop();\n      });\n    });\n    this.activeAudioIds.clear();\n  }\n\n  private normalizeVolume(volume: number): number {\n    return (volume / 100) * (volume / 100);\n  }\n}\n","import type { Context } from '@model/context';\nimport type { Disposable } from '@type/disposable';\nimport type { Event } from '@type/event';\nimport type { MovableDirection } from '@type/movable';\nimport type { TraceState } from '@type/state';\nimport type { NotificationService } from './notification';\nimport type { SettingsService } from './settings';\nimport { Emitter } from '@type/event';\n\n/** Default autoplay speed in milliseconds between movements. */\nconst DEFAULT_SPEED = 250;\n/** Minimum speed (fastest playback) in milliseconds between movements. */\nconst MIN_SPEED = 10;\n/** Maximum speed (slowest playback) in milliseconds between movements. */\nconst MAX_SPEED = 500;\n\n/** Default interval step for speed adjustments in milliseconds. */\nconst DEFAULT_INTERVAL = 20;\n\n/**\n * Event emitted when autoplay state changes.\n */\ninterface AutoplayChangeEvent {\n  /** The type of autoplay state change. */\n  type: 'start' | 'stop';\n}\n\n/**\n * Settings keys used by the autoplay service.\n */\nenum AutoplaySettings {\n  /** Setting key for autoplay duration configuration. */\n  DURATION = 'general.autoplayDuration',\n}\n\n/** Type alias for the interval ID returned by setInterval. */\ntype AutoplayId = ReturnType<typeof setInterval>;\n\n/**\n * Service responsible for managing automatic navigation through data points at configurable speeds.\n */\nexport class AutoplayService implements Disposable {\n  private readonly context: Context;\n  private readonly notification: NotificationService;\n  private readonly settings: SettingsService;\n\n  private autoplayId: AutoplayId | null;\n  private currentDirection: MovableDirection | null;\n\n  private userSpeed: number | null;\n  private defaultSpeed: number;\n  private minSpeed: number;\n  private readonly maxSpeed: number;\n\n  private autoplayRate: number;\n  private readonly interval: number;\n  private totalDuration: number;\n\n  private readonly onChangeEmitter: Emitter<AutoplayChangeEvent>;\n  public readonly onChange: Event<AutoplayChangeEvent>;\n\n  /**\n   * Creates an instance of AutoplayService.\n   * @param context - Navigation context for moving through data\n   * @param notification - Service for user notifications\n   * @param settings - Service for managing settings\n   */\n  public constructor(context: Context, notification: NotificationService, settings: SettingsService) {\n    this.notification = notification;\n    this.context = context;\n    this.settings = settings;\n\n    this.autoplayId = null;\n    this.currentDirection = null;\n\n    this.userSpeed = null;\n    this.defaultSpeed = DEFAULT_SPEED;\n    this.minSpeed = MIN_SPEED;\n    this.maxSpeed = MAX_SPEED;\n\n    this.interval = DEFAULT_INTERVAL;\n    this.autoplayRate = this.defaultSpeed;\n    this.interval = DEFAULT_INTERVAL;\n    this.totalDuration = settings.get<number>(AutoplaySettings.DURATION);\n    settings.onChange((event) => {\n      if (event.affectsSetting(AutoplaySettings.DURATION)) {\n        this.totalDuration = event.get<number>(AutoplaySettings.DURATION);\n        this.restart();\n      }\n    });\n\n    this.onChangeEmitter = new Emitter<AutoplayChangeEvent>();\n    this.onChange = this.onChangeEmitter.event;\n  }\n\n  /**\n   * Cleans up autoplay resources and stops any active autoplay.\n   */\n  public dispose(): void {\n    this.stop();\n    this.onChangeEmitter.dispose();\n  }\n\n  /**\n   * Starts autoplay in the specified direction at the calculated rate.\n   * @param direction - Direction to move during autoplay\n   * @param state - Optional trace state for calculating autoplay rate\n   */\n  public start(direction: MovableDirection, state?: TraceState): void {\n    this.stop();\n    this.onChangeEmitter.fire({ type: 'start' });\n\n    this.autoplayRate = this.getAutoplayRate(direction, state);\n    this.currentDirection = direction;\n\n    this.autoplayId = setInterval(() => {\n      if (this.context.isMovable(direction)) {\n        this.context.moveOnce(direction);\n      } else {\n        this.stop();\n      }\n    }, this.autoplayRate);\n  }\n\n  /**\n   * Stops any active autoplay and clears the interval.\n   */\n  public stop(): void {\n    if (this.autoplayId) {\n      clearInterval(this.autoplayId);\n    }\n\n    this.autoplayId = null;\n    this.currentDirection = null;\n    this.onChangeEmitter.fire({ type: 'stop' });\n  }\n\n  /**\n   * Restarts autoplay in the current direction with updated settings.\n   */\n  private restart(): void {\n    if (this.autoplayId) {\n      clearInterval(this.autoplayId);\n    }\n\n    if (this.currentDirection) {\n      this.start(this.currentDirection);\n    }\n  }\n\n  /**\n   * Increases autoplay speed by decreasing the interval between movements.\n   */\n  public speedUp(): void {\n    const newSpeed = this.userSpeed ?? this.autoplayRate;\n    if (newSpeed - this.interval >= this.minSpeed) {\n      this.userSpeed = newSpeed - this.interval;\n      this.autoplayRate = this.userSpeed;\n      this.restart();\n      this.notification.notify('Speed up');\n    } else {\n      this.notification.notify('Max speed');\n    }\n  }\n\n  /**\n   * Decreases autoplay speed by increasing the interval between movements.\n   */\n  public speedDown(): void {\n    const newSpeed = this.userSpeed ?? this.autoplayRate;\n    if (newSpeed + this.interval <= this.maxSpeed) {\n      this.userSpeed = newSpeed + this.interval;\n      this.autoplayRate = this.userSpeed;\n      this.restart();\n      this.notification.notify('Speed down');\n    } else {\n      this.notification.notify('Min speed');\n    }\n  }\n\n  /**\n   * Resets autoplay speed to the default calculated rate.\n   */\n  public resetSpeed(): void {\n    this.userSpeed = null;\n    this.autoplayRate = this.defaultSpeed;\n    this.restart();\n    this.notification.notify('Reset speed');\n  }\n\n  /**\n   * Calculates the autoplay rate based on user settings or trace state.\n   * @param direction - Direction of autoplay movement\n   * @param state - Optional trace state for rate calculation\n   * @returns Autoplay rate in milliseconds\n   */\n  private getAutoplayRate(direction: MovableDirection, state?: TraceState): number {\n    if (this.userSpeed !== null) {\n      return this.userSpeed;\n    }\n\n    if (state && !state.empty) {\n      const calculatedRate = Math.ceil(\n        this.totalDuration / state.autoplay[direction],\n      );\n      this.defaultSpeed = calculatedRate;\n      this.minSpeed = Math.min(this.minSpeed, calculatedRate);\n      return calculatedRate;\n    }\n\n    return this.defaultSpeed;\n  }\n}\n","import type { Context } from '@model/context';\nimport type { Disposable } from '@type/disposable';\nimport type { Event } from '@type/event';\nimport type { Observer } from '@type/observable';\nimport type {\n  BarBrailleState,\n  BoxBrailleState,\n  CandlestickBrailleState,\n  HeatmapBrailleState,\n  LineBrailleState,\n  SubplotState,\n  TraceState,\n} from '@type/state';\nimport type { DisplayService } from './display';\nimport type { NotificationService } from './notification';\nimport type { SettingsService } from './settings';\nimport { Emitter, Scope } from '@type/event';\nimport { TraceType } from '@type/grammar';\nimport { Constant } from '@util/constant';\n\nexport const DEFAULT_BRAILLE_SIZE = 32;\n\n/**\n * Normalizes configured braille display size to a safe positive integer.\n * Falls back to default when the value is missing or invalid.\n * @param size - Raw display size value from settings or caller\n * @returns Normalized display size\n */\nfunction normalizeDisplaySize(size: number | undefined): number {\n  if (size === undefined || !Number.isFinite(size)) {\n    return DEFAULT_BRAILLE_SIZE;\n  }\n\n  return Math.max(1, Math.floor(size));\n}\n\nconst BRAILLE_DISPLAY_SIZE_SETTING = 'general.brailleDisplaySize';\n\n/**\n * Represents a cell position in a 2D grid.\n */\ninterface Cell {\n  row: number;\n  col: number;\n}\n\n/**\n * Event emitted when braille display changes.\n */\ninterface BrailleChangedEvent {\n  value: string;\n  index: number;\n  displaySize: number;\n}\n\n/**\n * Represents encoded braille with bidirectional cell-to-index mapping.\n */\ninterface EncodedBraille {\n  value: string;\n  cellToIndex: number[][];\n  indexToCell: Cell[];\n}\n\n/**\n * Encodes a 2D grid of characters into a braille string with display-size wrapping\n * and bidirectional index mapping. This is the shared wrapping logic used by all\n * encoders that operate on row/col grids.\n *\n * @param rowCount - Number of rows in the data\n * @param colCount - Function returning the number of columns for a given row\n * @param getChar - Function returning the braille character for a given (row, col)\n * @param displaySize - Maximum columns per display line before wrapping\n * @returns Encoded braille with cell mappings\n */\nfunction encodeWithWrapping(\n  rowCount: number,\n  colCount: (row: number) => number,\n  getChar: (row: number, col: number) => string,\n  displaySize: number,\n): EncodedBraille {\n  const values = new Array<string>();\n  const cellToIndex = new Array<Array<number>>();\n  const indexToCell = new Array<Cell>();\n\n  for (let row = 0; row < rowCount; row++) {\n    cellToIndex.push(new Array<number>());\n    const cols = colCount(row);\n\n    for (let col = 0; col < cols; col++) {\n      values.push(getChar(row, col));\n\n      cellToIndex[row].push(indexToCell.length);\n      indexToCell.push({ row, col });\n\n      // Insert a mid-row display-line wrap. The newline's indexToCell entry\n      // maps back to the last data cell so that clicking the newline position\n      // navigates to the preceding data point rather than an invalid location.\n      if ((col + 1) % displaySize === 0) {\n        values.push(Constant.NEW_LINE);\n        indexToCell.push({ row, col });\n      }\n    }\n\n    // End-of-row sentinel: append a newline (unless a mid-row wrap already\n    // emitted one at the exact end) and record a sentinel entry so that\n    // cellToIndex[row] has one more element than data columns.\n    const sentinelIdx = indexToCell.length;\n    indexToCell.push({ row, col: cols });\n    if (cols === 0 || cols % displaySize !== 0) {\n      values.push(Constant.NEW_LINE);\n    }\n    cellToIndex[row].push(sentinelIdx);\n  }\n\n  return { value: values.join(Constant.EMPTY), cellToIndex, indexToCell };\n}\n\n/**\n * Represents time series data with multiple rows of values.\n */\ninterface TimeSeries {\n  values: number[][];\n}\n\n/**\n * Interface for encoding plot states into braille representations.\n */\ninterface BrailleEncoder<BrailleState> {\n  encode: (state: BrailleState, size?: number) => EncodedBraille;\n}\n\n/**\n * Encoder for converting bar chart data into braille patterns.\n */\nclass BarBrailleEncoder implements BrailleEncoder<BarBrailleState> {\n  /**\n   * Encodes bar chart state into braille representation.\n   * @param state - Bar chart braille state\n   * @returns Encoded braille with cell mappings\n   */\n  public encode(\n    state: BarBrailleState,\n    size: number = DEFAULT_BRAILLE_SIZE,\n  ): EncodedBraille {\n    const displaySize = normalizeDisplaySize(size);\n\n    return encodeWithWrapping(\n      state.values.length,\n      row => state.values[row].length,\n      (row, col) => {\n        const range = (state.max[row] - state.min[row]) / 4;\n        const low = state.min[row] + range;\n        const medium = low + range;\n        const high = medium + range;\n        const value = state.values[row][col];\n\n        if (value === 0)\n          return ' ';\n        if (value <= low)\n          return '⠤';\n        if (value <= medium)\n          return '⠤';\n        if (value <= high)\n          return '⠒';\n        return '⠉';\n      },\n      displaySize,\n    );\n  }\n}\n\n/**\n * Encoder for converting box plot data into braille patterns.\n */\nclass BoxBrailleEncoder implements BrailleEncoder<BoxBrailleState> {\n  private readonly GLOBAL_MIN = 'globalMin';\n  private readonly GLOBAL_MAX = 'globalMax';\n  private readonly BLANK = 'blank';\n\n  private readonly LOWER_OUTLIER = 'lowerOutlier';\n  private readonly UPPER_OUTLIER = 'upperOutlier';\n\n  private readonly MIN = 'min';\n  private readonly MAX = 'max';\n\n  private readonly Q1 = 'q1';\n  private readonly Q2 = 'q2';\n  private readonly Q3 = 'q3';\n\n  /**\n   * Encodes box plot state into braille representation with quartiles and outliers.\n   * @param state - Box plot braille state\n   * @param size - Target size for braille output\n   * @returns Encoded braille with cell mappings\n   */\n  public encode(\n    state: BoxBrailleState,\n    size: number = DEFAULT_BRAILLE_SIZE,\n  ): EncodedBraille {\n    const values = new Array<string>();\n    const indexToCell = new Array<Cell>();\n    const cellToIndex = new Array<Array<number>>();\n\n    for (let row = 0; row < state.values.length; row++) {\n      const box = state.values[row];\n      const boxValData = [\n        { type: this.GLOBAL_MIN, value: state.min },\n        ...box.lowerOutliers.map(v => ({\n          type: this.LOWER_OUTLIER,\n          value: v,\n        })),\n        { type: this.MIN, value: box.min },\n        { type: this.Q1, value: box.q1 },\n        { type: this.Q2, value: box.q2 },\n        { type: this.Q3, value: box.q3 },\n        { type: this.MAX, value: box.max },\n        ...box.upperOutliers.map(v => ({\n          type: this.UPPER_OUTLIER,\n          value: v,\n        })),\n        { type: this.GLOBAL_MAX, value: state.max },\n      ];\n\n      const lenData = new Array<{\n        type: string;\n        length: number;\n        numChars: number;\n      }>();\n      let isBeforeMid = true;\n      for (let i = 0; i < boxValData.length - 1; i++) {\n        const curr = boxValData[i];\n        const next = boxValData[i + 1];\n        const diff = isBeforeMid\n          ? Math.abs(next.value - curr.value)\n          : Math.abs(curr.value - boxValData[i - 1].value);\n\n        if (\n          curr.type === this.LOWER_OUTLIER\n          || curr.type === this.UPPER_OUTLIER\n        ) {\n          lenData.push({ type: curr.type, length: 0, numChars: 1 });\n          lenData.push({ type: this.BLANK, length: diff, numChars: 0 });\n        } else if (curr.type === this.Q2) {\n          isBeforeMid = false;\n          lenData.push({ type: this.Q2, length: 0, numChars: 2 });\n        } else if (\n          curr.type === this.GLOBAL_MIN\n          || curr.type === this.GLOBAL_MAX\n        ) {\n          lenData.push({ type: this.BLANK, length: diff, numChars: 0 });\n        } else {\n          lenData.push({ type: curr.type, length: diff, numChars: 1 });\n        }\n      }\n\n      let preAllocated = lenData.reduce(\n        (sum, l) => sum + (l.numChars > 0 ? l.numChars : 0),\n        0,\n      );\n      let [locMin, locMax, locQ1, locQ3] = [-1, -1, -1, -1];\n      for (let i = 0; i < lenData.length; i++) {\n        if (lenData[i].type === this.MIN && lenData[i].length > 0)\n          locMin = i;\n        if (lenData[i].type === this.MAX && lenData[i].length > 0)\n          locMax = i;\n        if (lenData[i].type === this.Q1)\n          locQ1 = i;\n        if (lenData[i].type === this.Q3)\n          locQ3 = i;\n      }\n      if (\n        locMin !== -1\n        && locMax !== -1\n        && lenData[locMin].length !== lenData[locMax].length\n      ) {\n        if (lenData[locMin].length > lenData[locMax].length) {\n          lenData[locMin].numChars++;\n          preAllocated++;\n        } else {\n          lenData[locMax].numChars++;\n          preAllocated++;\n        }\n      }\n      if (\n        locQ1 !== -1\n        && locQ3 !== -1\n        && lenData[locQ1].length !== lenData[locQ3].length\n      ) {\n        if (lenData[locQ1].length > lenData[locQ3].length) {\n          lenData[locQ1].numChars++;\n          preAllocated++;\n        } else {\n          lenData[locQ3].numChars++;\n          preAllocated++;\n        }\n      }\n\n      const available = Math.max(0, size - preAllocated);\n      const totalLength = lenData.reduce(\n        (sum, l) => sum + (l.type !== this.Q2 && l.length > 0 ? l.length : 0),\n        0,\n      );\n      for (const section of lenData) {\n        if (section.type !== this.Q2 && section.length > 0) {\n          const allocated = Math.round(\n            (section.length / totalLength) * available,\n          );\n          section.numChars += allocated;\n        }\n      }\n\n      const totalChars = lenData.reduce((sum, l) => sum + l.numChars, 0);\n      let diff = size - totalChars;\n      let adjustIndex = 0;\n      while (diff !== 0) {\n        const section = lenData[adjustIndex % lenData.length];\n        if (\n          section.type !== this.BLANK\n          && section.type !== this.Q2\n          && section.length > 0\n        ) {\n          section.numChars += diff > 0 ? 1 : -1;\n          diff += diff > 0 ? -1 : 1;\n        }\n        adjustIndex++;\n      }\n\n      let col = -1;\n      const sections = [\n        this.LOWER_OUTLIER,\n        this.MIN,\n        this.Q1,\n        this.Q2,\n        this.Q3,\n        this.MAX,\n        this.UPPER_OUTLIER,\n      ];\n      cellToIndex.push(\n        Array.from({ length: sections.length }).fill(-1) as number[],\n      );\n      for (const section of lenData) {\n        if (\n          section.type !== this.BLANK\n          && section.type !== this.GLOBAL_MIN\n          && section.type !== this.GLOBAL_MAX\n        ) {\n          col = sections.indexOf(section.type);\n          cellToIndex[row][col] = values.length;\n        }\n\n        for (let j = 0; j < section.numChars; j++) {\n          let brailleChar = '⠀';\n\n          if (section.type === this.MIN || section.type === this.MAX) {\n            brailleChar = '⠒';\n          } else if (section.type === this.Q1 || section.type === this.Q3) {\n            brailleChar = '⠿';\n          } else if (section.type === this.Q2) {\n            brailleChar = j === 0 ? '⠸' : '⠇';\n          } else if (\n            section.type === this.LOWER_OUTLIER\n            || section.type === this.UPPER_OUTLIER\n          ) {\n            brailleChar = '⠂';\n          } else if (section.type === this.BLANK) {\n            brailleChar = '⠀';\n          }\n\n          values.push(brailleChar);\n          indexToCell.push({ row, col });\n        }\n      }\n      for (let s = 0; s < 3; s++) {\n        if (cellToIndex[row][s] === -1) {\n          for (let t = s + 1; t <= 3; t++) {\n            if (cellToIndex[row][t] !== -1) {\n              cellToIndex[row][s] = cellToIndex[row][t];\n              break;\n            }\n          }\n        }\n      }\n      for (let s = 6; s > 3; s--) {\n        if (cellToIndex[row][s] === -1) {\n          for (let t = s - 1; t >= 3; t--) {\n            if (cellToIndex[row][t] !== -1) {\n              cellToIndex[row][s] = cellToIndex[row][t];\n              break;\n            }\n          }\n        }\n      }\n\n      values.push(Constant.NEW_LINE);\n      indexToCell.push({ row, col });\n    }\n\n    return { value: values.join(Constant.EMPTY), cellToIndex, indexToCell };\n  }\n}\n\n/**\n * Encoder for converting heatmap data into braille patterns.\n */\nclass HeatmapBrailleEncoder implements BrailleEncoder<HeatmapBrailleState> {\n  /**\n   * Encodes heatmap state into braille representation.\n   * @param state - Heatmap braille state\n   * @returns Encoded braille with cell mappings\n   */\n  public encode(\n    state: HeatmapBrailleState,\n    size: number = DEFAULT_BRAILLE_SIZE,\n  ): EncodedBraille {\n    const displaySize = normalizeDisplaySize(size);\n    const range = (state.max - state.min) / 3;\n    const low = state.min + range;\n    const medium = low + range;\n\n    return encodeWithWrapping(\n      state.values.length,\n      row => state.values[row].length,\n      (row, col) => {\n        const value = state.values[row][col];\n\n        if (value === 0)\n          return ' ';\n        if (value <= low)\n          return '⠤';\n        if (value <= medium)\n          return '⠒';\n        return '⠉';\n      },\n      displaySize,\n    );\n  }\n}\n\n/**\n * Abstract base encoder for time series data with trend-based braille patterns.\n */\nabstract class AbstractTimeSeriesEncoder<T extends TimeSeries>\nimplements BrailleEncoder<T> {\n  /**\n   * Encodes a single data point to a braille character.\n   * @param state - Time series state\n   * @param row - Row index\n   * @param col - Column index\n   * @returns Encoded braille character for the given point\n   */\n  protected encodeCell(state: T, row: number, col: number): string {\n    const { low, medium, mediumHigh, high } = this.getThresholds(row, state);\n    const currentValue = state.values[row][col];\n    const prevValue = col > 0 ? state.values[row][col - 1] : null;\n\n    return this.getBrailleChar(\n      currentValue,\n      prevValue,\n      low,\n      medium,\n      high,\n      mediumHigh,\n    );\n  }\n\n  /**\n   * Encodes time series state into braille representation with trend indicators.\n   * @param state - Time series braille state\n   * @returns Encoded braille with cell mappings\n   */\n  public encode(\n    state: T,\n    size: number = DEFAULT_BRAILLE_SIZE,\n  ): EncodedBraille {\n    const displaySize = normalizeDisplaySize(size);\n\n    return encodeWithWrapping(\n      state.values.length,\n      row => state.values[row].length,\n      (row, col) => this.encodeCell(state, row, col),\n      displaySize,\n    );\n  }\n\n  /**\n   * Gets threshold values for categorizing data into braille levels.\n   * @param row - Row index\n   * @param state - Time series state\n   * @returns Threshold values for low, medium, mediumHigh, and high levels\n   */\n  protected abstract getThresholds(\n    row: number,\n    state: T,\n  ): {\n    low: number;\n    medium: number;\n    mediumHigh?: number;\n    high: number;\n  };\n\n  /**\n   * Gets the appropriate 8-dot braille character based on value and trend.\n   * @param current - Current value\n   * @param prev - Previous value for trend calculation\n   * @param low - Low threshold\n   * @param medium - Medium threshold\n   * @param high - High threshold\n   * @param mediumHigh - Optional medium-high threshold\n   * @returns Braille character representing the value and trend\n   */\n  public getBrailleChar(\n    current: number,\n    prev: number | null,\n    low: number,\n    medium: number,\n    high: number,\n    mediumHigh?: number,\n  ): string {\n    if (mediumHigh === undefined) {\n      mediumHigh = high;\n    }\n    if (current <= low && prev !== null && prev > low) {\n      if (prev <= medium)\n        return '⢄';\n      else if (prev <= mediumHigh)\n        return '⢆';\n      else return '⢇';\n    } else if (current <= low) {\n      return '⣀';\n    } else if (prev !== null && prev <= low) {\n      if (current <= medium)\n        return '⡠';\n      else if (current <= mediumHigh)\n        return '⡰';\n      else return '⡸';\n    } else if (current <= medium && prev !== null && prev > medium) {\n      if (prev <= mediumHigh)\n        return '⠢';\n      else return '⠣';\n    } else if (current <= medium) {\n      return '⠤';\n    } else if (prev !== null && prev <= medium) {\n      if (current <= mediumHigh)\n        return '⠔';\n      else return '⠜';\n    } else if (current <= mediumHigh && prev !== null && prev > mediumHigh) {\n      return '⠑';\n    } else if (current <= mediumHigh) {\n      return '⠒';\n    } else if (prev !== null && prev <= mediumHigh) {\n      return '⠊';\n    } else if (current <= high) {\n      return '⠉';\n    }\n    return '';\n  }\n\n  /**\n   * Gets the appropriate 6-dot braille character based on value and trend.\n   * @param current - Current value\n   * @param prev - Previous value for trend calculation\n   * @param low - Low threshold\n   * @param medium - Medium threshold\n   * @param high - High threshold\n   * @returns Braille character representing the value and trend\n   */\n  public getBraille6Char(\n    current: number,\n    prev: number | null,\n    low: number,\n    medium: number,\n    high: number,\n  ): string {\n    const level = (val: number): 'low' | 'medium' | 'high' => {\n      if (val <= low)\n        return 'low';\n      if (val <= medium)\n        return 'medium';\n      if (val <= high)\n        return 'high';\n      return 'high';\n    };\n\n    const currLevel = level(current);\n    const prevLevel = prev !== null ? level(prev) : null;\n\n    const brailleMap: Record<string, string> = {\n      'low,medium': '⠢', // down from med\n      'low,high': '⠣', // down from high\n      'low,null': '⠤', // steady low\n      'low,low': '⠤', // steady low (same level)\n      'medium,low': '⠔', // up from low\n      'medium,high': '⠑', // down from high\n      'medium,null': '⠒', // steady medium\n      'medium,medium': '⠒', // steady medium (same level)\n      'high,low': '⠜', // up from low\n      'high,medium': '⠊', // up from med\n      'high,null': '⠉', // steady high\n      'high,high': '⠉', // steady high (same level)\n    };\n\n    const key = `${currLevel},${prevLevel}`;\n    return brailleMap[key] || '';\n  }\n\n  /**\n   * Adds dot 8 to a braille character for additional information encoding.\n   * @param char - Base braille character\n   * @returns Braille character with dot 8 added\n   */\n  public addDot8(char: string): string {\n    if (!char || char.length === 0) {\n      // If no base character, return just dot 8 (⣀)\n      return String.fromCharCode(0x2800 + 0x80);\n    }\n    const code = char.charCodeAt(0);\n    const dotPattern = code - 0x2800;\n    const withDot8 = dotPattern | 0x80;\n    return String.fromCharCode(0x2800 + withDot8);\n  }\n}\n\n/**\n * Encoder for converting candlestick chart data into braille patterns.\n */\nclass CandlestickBrailleEncoder extends AbstractTimeSeriesEncoder<CandlestickBrailleState> {\n  /**\n   * Gets threshold values for candlestick data categorization.\n   * @param row - Row index\n   * @param state - Candlestick braille state\n   * @returns Threshold values for low, medium, and high levels\n   */\n  protected getThresholds(\n    row: number,\n    state: CandlestickBrailleState,\n  ): {\n    low: number;\n    medium: number;\n    high: number;\n  } {\n    // Defensive: support both array and single value for min/max\n    const min = Array.isArray(state.min) ? state.min[row] : state.min;\n    const max = Array.isArray(state.max) ? state.max[row] : state.max;\n    const range = (max - min) / 3;\n    const low = min + range;\n    const medium = low + range;\n    const high = max;\n    return { low, medium, high };\n  }\n\n  /**\n   * Encodes a single candlestick point using 6-dot braille and optional bear indicator.\n   * @param state - Candlestick braille state\n   * @param row - Row index\n   * @param col - Column index\n   * @returns Encoded braille character for the given point\n   */\n  protected override encodeCell(\n    state: CandlestickBrailleState,\n    row: number,\n    col: number,\n  ): string {\n    const { low, medium, high } = this.getThresholds(row, state);\n    const currentValue = state.values[row][col];\n    const prevValue = col > 0 ? state.values[row][col - 1] : null;\n\n    let brailleChar = this.getBraille6Char(\n      currentValue,\n      prevValue,\n      low,\n      medium,\n      high,\n    );\n\n    if (state.custom?.[col] === 'Bear') {\n      brailleChar = this.addDot8(brailleChar);\n    }\n\n    return brailleChar;\n  }\n}\n\n/**\n * Encoder for converting line chart data into braille patterns.\n */\nclass LineBrailleEncoder extends AbstractTimeSeriesEncoder<LineBrailleState> {\n  /**\n   * Gets threshold values for line chart data categorization.\n   * @param row - Row index\n   * @param state - Line chart braille state\n   * @returns Threshold values for low, medium, mediumHigh, and high levels\n   */\n  protected getThresholds(\n    row: number,\n    state: LineBrailleState,\n  ): {\n    low: number;\n    medium: number;\n    mediumHigh: number;\n    high: number;\n  } {\n    const range = (state.max[row] - state.min[row]) / 4;\n    const low = state.min[row] + range;\n    const medium = low + range;\n    const mediumHigh = medium + range;\n    const high = state.max[row];\n    return { low, medium, mediumHigh, high };\n  }\n}\n\n/**\n * Service responsible for managing braille display generation and navigation.\n */\nexport class BrailleService\nimplements Observer<SubplotState | TraceState>, Disposable {\n  private readonly context: Context;\n  private readonly notification: NotificationService;\n  private readonly display: DisplayService;\n\n  private enabled: boolean;\n  private displaySize: number;\n  private cacheId: string;\n  private cache: EncodedBraille | null;\n  private readonly disposables: Disposable[];\n\n  private readonly encoders: Map<TraceType, BrailleEncoder<any>>;\n  private readonly onChangeEmitter: Emitter<BrailleChangedEvent>;\n  public readonly onChange: Event<BrailleChangedEvent>;\n\n  /**\n   * Creates an instance of BrailleService.\n   * @param context - Navigation context\n   * @param notification - Service for user notifications\n   * @param display - Service for managing display focus\n   */\n  public constructor(\n    context: Context,\n    notification: NotificationService,\n    display: DisplayService,\n    settings: SettingsService,\n  ) {\n    this.context = context;\n    this.notification = notification;\n    this.display = display;\n\n    this.enabled = false;\n    this.displaySize = normalizeDisplaySize(\n      settings.get<number>(BRAILLE_DISPLAY_SIZE_SETTING),\n    );\n    this.cacheId = Constant.EMPTY;\n    this.cache = null;\n    this.disposables = [];\n\n    this.encoders = new Map<TraceType, BrailleEncoder<any>>([\n      [TraceType.BAR, new BarBrailleEncoder()],\n      [TraceType.BOX, new BoxBrailleEncoder()],\n      [TraceType.CANDLESTICK, new CandlestickBrailleEncoder()],\n      [TraceType.DODGED, new BarBrailleEncoder()],\n      [TraceType.HEATMAP, new HeatmapBrailleEncoder()],\n      [TraceType.HISTOGRAM, new BarBrailleEncoder()],\n      [TraceType.LINE, new LineBrailleEncoder()],\n      [TraceType.NORMALIZED, new BarBrailleEncoder()],\n      [TraceType.SCATTER, new HeatmapBrailleEncoder()],\n      [TraceType.SMOOTH, new LineBrailleEncoder()],\n      [TraceType.STACKED, new BarBrailleEncoder()],\n      [TraceType.VIOLIN_KDE, new LineBrailleEncoder()],\n      [TraceType.VIOLIN_BOX, new BoxBrailleEncoder()],\n    ]);\n\n    this.onChangeEmitter = new Emitter<BrailleChangedEvent>();\n    this.onChange = this.onChangeEmitter.event;\n\n    this.disposables.push(settings.onChange((event) => {\n      if (!event.affectsSetting(BRAILLE_DISPLAY_SIZE_SETTING)) {\n        return;\n      }\n\n      this.displaySize = normalizeDisplaySize(\n        event.get<number>(BRAILLE_DISPLAY_SIZE_SETTING),\n      );\n      this.cache = null;\n      this.cacheId = Constant.EMPTY;\n\n      if (!this.enabled) {\n        return;\n      }\n\n      const state = this.context.state;\n      if (state != null && (state.type === 'trace' || state.type === 'subplot')) {\n        this.update(state);\n      }\n    }));\n  }\n\n  /**\n   * Cleans up braille service resources and clears caches.\n   */\n  public dispose(): void {\n    this.onChangeEmitter.dispose();\n    this.disposables.forEach(disposable => disposable.dispose());\n    this.disposables.length = 0;\n\n    this.cache = null;\n    this.encoders.clear();\n  }\n\n  /**\n   * Returns whether braille mode is currently enabled.\n   */\n  public get isEnabled(): boolean {\n    return this.enabled;\n  }\n\n  /**\n   * Refreshes the braille display with the given trace state. Called\n   * explicitly when entering a new subplot with braille enabled, because\n   * the model's {@link notifyStateUpdate} is not invoked on entry (doing\n   * so would fan out to all observers, including AudioService, causing\n   * an unwanted tone).\n   * @param state - The trace state to display\n   */\n  public refreshDisplay(state: TraceState): void {\n    this.update(state);\n  }\n\n  /**\n   * Updates the braille display based on plot state changes.\n   * @param state - Updated subplot or trace state\n   */\n  public update(state: SubplotState | TraceState): void {\n    if (!this.enabled || state.empty) {\n      return;\n    }\n\n    const trace = state.type === 'subplot' ? state.trace : state;\n    if (\n      trace.empty\n      || trace.braille.empty\n      || !this.encoders.has(trace.traceType)\n    ) {\n      return;\n    }\n\n    const braille = trace.braille;\n    if (this.cache === null || this.cacheId !== braille.id) {\n      const encoder = this.encoders.get(trace.traceType)!;\n      this.cache = encoder.encode(braille as any, this.displaySize);\n      this.cacheId = braille.id;\n    }\n\n    this.onChangeEmitter.fire({\n      value: this.cache.value,\n      index: this.cache.cellToIndex[braille.row][braille.col],\n      displaySize: this.displaySize,\n    });\n  }\n\n  /**\n   * Moves the navigation cursor to a specific braille index position.\n   * @param index - Target index in the braille display\n   */\n  public moveToIndex(index: number): void {\n    if (\n      !this.enabled\n      || this.cache === null\n      || index < 0\n      || index >= this.cache.indexToCell.length\n    ) {\n      return;\n    }\n\n    const { row, col } = this.cache.indexToCell[index];\n    this.context.moveToIndex(row, col);\n  }\n\n  /**\n   * Toggles braille mode on or off for the current trace.\n   * @param state - Current trace state\n   */\n  public toggle(state: TraceState): void {\n    if (state.empty) {\n      const noInfo = 'No info for braille';\n      this.notification.notify(noInfo);\n      return;\n    }\n\n    if (state.braille.empty) {\n      const notSupported = `Braille is not supported for plot type: ${state.braille.traceType}`;\n      this.notification.notify(notSupported);\n      return;\n    }\n\n    this.enabled = !this.enabled;\n    this.update(state);\n    this.display.toggleFocus(Scope.BRAILLE);\n\n    const message = `Braille is ${this.enabled ? 'on' : 'off'}`;\n    this.notification.notify(message);\n  }\n}\n","/**\n * Generic API response wrapper containing success status, optional data, and error information.\n */\nexport interface ApiResponse<T> {\n  success: boolean;\n  data?: T;\n  error?: ApiError;\n}\n\n/**\n * API error information including message and HTTP status code.\n */\nexport interface ApiError {\n  message: string;\n  statusCode: HttpStatus;\n}\n\n/**\n * Standard HTTP status codes used in API responses.\n */\nexport enum HttpStatus {\n  OK = 200,\n  BAD_REQUEST = 400,\n  NOT_FOUND = 404,\n  SERVER_ERROR = 500,\n}\n","import type { ApiResponse } from '@type/api';\nimport { HttpStatus } from '@type/api';\n\n/**\n * HTTP method types for API requests.\n */\ntype HttpMethod = 'GET' | 'POST';\n\n/**\n * Abstract utility class for making HTTP API requests with standardized error handling.\n */\nexport abstract class Api {\n  private constructor() { /* Prevent instantiation */ }\n\n  /**\n   * Default headers applied to all API requests.\n   */\n  private static readonly DEFAULT_HEADERS: Record<string, string> = {\n    'Content-Type': 'application/json',\n  };\n\n  /**\n   * Makes a POST request to the specified URL.\n   * @param url - The endpoint URL to send the request to\n   * @param body - The request body to send\n   * @param additionalHeaders - Optional headers to merge with default headers\n   * @returns A promise resolving to the API response with typed data\n   */\n  public static async post<T>(\n    url: string,\n    body: BodyInit,\n    additionalHeaders?: Record<string, string>,\n  ): Promise<ApiResponse<T>> {\n    const headers = { ...this.DEFAULT_HEADERS, ...additionalHeaders };\n    return this.request<T>(url, 'POST', headers, body);\n  }\n\n  /**\n   * Internal method to execute HTTP requests with error handling.\n   * @param url - The endpoint URL to send the request to\n   * @param method - The HTTP method to use\n   * @param headers - Headers to include in the request\n   * @param body - Optional request body\n   * @returns A promise resolving to the API response with typed data\n   */\n  private static async request<T>(\n    url: string,\n    method: HttpMethod,\n    headers: Record<string, string>,\n    body?: BodyInit,\n  ): Promise<ApiResponse<T>> {\n    try {\n      const response = await fetch(url, {\n        method,\n        headers,\n        body,\n      });\n\n      if (!response.ok) {\n        return {\n          success: false,\n          error: {\n            statusCode: response.status as HttpStatus,\n            message: `API Error: ${response.status} - ${response.statusText}`,\n          },\n        };\n      }\n\n      const data = await response.json() as T;\n      return { success: true, data };\n    } catch (error) {\n      console.error(`Error in API ${method} request to ${url}:`, error);\n      return {\n        success: false,\n        error: {\n          statusCode: HttpStatus.SERVER_ERROR,\n          message: error instanceof Error ? error.message : 'Unknown error occurred',\n        },\n      };\n    }\n  }\n}\n","/**\n * Prompt templates and constants for LLM interactions\n */\n\nconst BASIC_SYSTEM_PROMPT = `You are a helpful assistant that answers questions about statistical visualizations. Your role is to:\n1. Answer the user's specific question directly and clearly\n2. Use simple, everyday language with minimal statistical terms\n3. Provide relevant information from the data when needed\n4. Focus on what the user is asking, not describing the entire chart\n5. Give brief context only when it helps answer the question\n6. Keep responses concise and to the point`;\n\nconst INTERMEDIATE_SYSTEM_PROMPT = `You are an expert assistant that answers questions about statistical visualizations. Your role is to:\n1. Answer the user's specific question directly and accurately\n2. Use accessible language that assumes basic statistical knowledge\n3. Provide relevant insights and analysis when needed\n4. Focus on what the user is asking, not describing the entire chart\n5. Highlight key trends, outliers, and relationships when relevant to the question\n6. Provide context and interpretation only when it helps answer the specific question`;\n\nconst ADVANCED_SYSTEM_PROMPT = `You are a highly specialized assistant that answers questions about statistical visualizations for users with strong statistical background. Your role is to:\n1. Answer the user's specific question with technical depth and precision\n2. Use precise statistical terminology and advanced concepts when appropriate\n3. Provide detailed analysis of complex patterns and statistical significance when relevant\n4. Focus on what the user is asking, not describing the entire chart\n5. Analyze trends, outliers, relationships, and statistical properties when they relate to the question\n6. Provide comprehensive context and sophisticated interpretations only when they help answer the specific question`;\n\nexport const USER_PROMPT_TEMPLATE = `I have a statistical visualization with the following data:\n\n1. Raw data in JSON format: \\n{maidrJson}\\n\n2. Current selected point: {currentPositionText}\n\nQuestion: {message}\n\nPlease answer my specific question directly. If you need to reference the visualization data, do so briefly and focus on answering what I asked.`;\n\n/**\n * Context data required for generating prompts for LLM interactions.\n */\nexport interface PromptContext {\n  customInstruction: string;\n  maidrJson: string;\n  currentPositionText: string;\n  message: string;\n  expertiseLevel: 'basic' | 'intermediate' | 'advanced' | 'custom';\n}\n\nconst SYSTEM_PROMPTS: Record<Exclude<PromptContext['expertiseLevel'], 'custom'>, string> = {\n  basic: BASIC_SYSTEM_PROMPT,\n  intermediate: INTERMEDIATE_SYSTEM_PROMPT,\n  advanced: ADVANCED_SYSTEM_PROMPT,\n};\n\n/**\n * Selects the appropriate system prompt based on the user's expertise level.\n * @param expertiseLevel - The expertise level of the user\n * @returns The corresponding system prompt string, or empty string for custom level\n */\nfunction selectPromptByLevel(expertiseLevel: PromptContext['expertiseLevel']): string {\n  if (expertiseLevel === 'custom') {\n    return '';\n  }\n  return SYSTEM_PROMPTS[expertiseLevel];\n}\n\n/**\n * Formats the system prompt by combining base prompt with custom instructions.\n * @param customInstruction - Additional custom instructions to append\n * @param expertiseLevel - The expertise level to determine base prompt\n * @returns The formatted system prompt string\n */\nexport function formatSystemPrompt(customInstruction: string, expertiseLevel: PromptContext['expertiseLevel']): string {\n  if (expertiseLevel === 'custom') {\n    return customInstruction;\n  }\n  const basePrompt = selectPromptByLevel(expertiseLevel);\n  return `${basePrompt}\\n\\n${customInstruction}`;\n}\n\n/**\n * Formats the user prompt by replacing template placeholders with context values.\n * @param context - The prompt context containing data and message\n * @returns The formatted user prompt string\n */\nexport function formatUserPrompt(context: PromptContext): string {\n  return USER_PROMPT_TEMPLATE\n    .replace('{maidrJson}', context.maidrJson)\n    .replace('{currentPositionText}', context.currentPositionText)\n    .replace('{message}', context.message);\n}\n","import type { DisplayService } from '@service/display';\nimport type { Maidr } from '@type/grammar';\nimport type { ClaudeVersion, GeminiVersion, GptVersion, Llm, LlmRequest, LlmResponse } from '@type/llm';\nimport type { PromptContext } from './prompts';\nimport type { TextService } from './text';\nimport { Scope } from '@type/event';\nimport { Api } from '@util/api';\nimport { Svg } from '@util/svg';\nimport { formatSystemPrompt, formatUserPrompt } from './prompts';\n\n// Token limits for different LLM providers\nconst GPT_MAX_TOKENS = 1000;\nconst CLAUDE_MAX_TOKENS = 256;\nconst GEMINI_MAX_TOKENS = 1000;\n\n/**\n * Service for managing chat interactions with different LLM providers.\n */\nexport class ChatService {\n  private readonly display: DisplayService;\n  private readonly textService: TextService;\n  private readonly models: Record<Llm, LlmModel>;\n\n  /**\n   * Creates a new ChatService instance with configured LLM models.\n   * @param {DisplayService} display - The display service for managing UI focus\n   * @param {TextService} textService - The text service for retrieving coordinate text\n   * @param {Maidr} maidr - The MAIDR data structure\n   */\n  public constructor(display: DisplayService, textService: TextService, maidr: Maidr) {\n    this.display = display;\n    this.textService = textService;\n\n    this.models = {\n      OPENAI: new Gpt(display.plot, maidr, textService, 'gpt-4o'),\n      ANTHROPIC_CLAUDE: new Claude(display.plot, maidr, textService, 'claude-3-7-sonnet-latest'),\n      GOOGLE_GEMINI: new Gemini(display.plot, maidr, textService, 'gemini-2.0-flash'),\n    };\n  }\n\n  /**\n   * Sends a message to the specified LLM model and returns the response.\n   * @param {Llm} model - The LLM provider to use\n   * @param {LlmRequest} request - The request containing the message and configuration\n   * @returns {Promise<LlmResponse>} The response from the LLM\n   */\n  public async sendMessage(model: Llm, request: LlmRequest): Promise<LlmResponse> {\n    return this.models[model].getLlmResponse(request);\n  }\n\n  /**\n   * Toggles the focus to the chat scope.\n   */\n  public toggle(): void {\n    this.display.toggleFocus(Scope.CHAT);\n  }\n}\n\n/**\n * Interface for LLM model implementations.\n */\ninterface LlmModel {\n  getLlmResponse: (request: LlmRequest) => Promise<LlmResponse>;\n}\n\n/**\n * Response structure from OpenAI GPT API.\n */\ninterface GptResponse {\n  choices: {\n    message: {\n      content: string;\n    };\n  }[];\n}\n\n/**\n * Response structure from Anthropic Claude API.\n */\ninterface ClaudeResponse {\n  content: {\n    text: string;\n  }[];\n}\n\n/**\n * Response structure from Google Gemini API.\n */\ninterface GeminiResponse {\n  candidates: {\n    content: {\n      parts: {\n        text: string;\n      }[];\n    };\n  }[];\n}\n\n/**\n * Abstract base class for LLM model implementations providing common functionality.\n * @template T - The response type specific to the LLM provider\n */\nabstract class AbstractLlmModel<T> implements LlmModel {\n  protected readonly svg: HTMLElement;\n  protected readonly json: string;\n  protected readonly textService: TextService;\n\n  private readonly maidrBaseUrl: string;\n  private readonly codeQueryParam: string;\n\n  /**\n   * Creates a new AbstractLlmModel instance.\n   * @param {HTMLElement} svg - The SVG element representing the plot\n   * @param {Maidr} maidr - The MAIDR data structure\n   * @param {TextService} textService - The text service for retrieving coordinate text\n   */\n  protected constructor(svg: HTMLElement, maidr: Maidr, textService: TextService) {\n    this.svg = svg;\n    this.json = JSON.stringify(maidr);\n    this.textService = textService;\n\n    this.maidrBaseUrl = 'https://maidr-service.azurewebsites.net/api';\n    this.codeQueryParam = 'I8Aa2PlPspjQ8Hks0QzGyszP8_i2-XJ3bq7Xh8-ykEe4AzFuYn_QWA%3D%3D';\n  }\n\n  /**\n   * Sends a request to the LLM and returns the formatted response.\n   * @param {LlmRequest} request - The request containing the message and configuration\n   * @returns {Promise<LlmResponse>} The formatted response from the LLM\n   */\n  public async getLlmResponse(request: LlmRequest): Promise<LlmResponse> {\n    try {\n      const image = await Svg.toBase64(this.svg);\n      // When expertise is 'custom', use 'advanced' as the base level since custom instructions will override\n      const expertiseLevel = request.expertise === 'custom' ? 'advanced' : request.expertise;\n\n      const currentPositionText = this.textService.getCoordinateText() || '';\n\n      const payload = this.getPayload(\n        request.customInstruction,\n        this.json,\n        image,\n        currentPositionText,\n        request.message,\n        expertiseLevel,\n      );\n\n      const url = request.clientToken\n        ? this.getMaidrUrl()\n        : this.getApiUrl(request.apiKey);\n\n      const headers = this.getHeaders(request);\n      const response = await Api.post<T>(url, payload, headers);\n      if (!response.success) {\n        return {\n          success: false,\n          error: response.error?.message,\n        };\n      } else if (!response.data) {\n        return {\n          success: false,\n          error: 'Response unavailable',\n        };\n      } else {\n        return this.formatResponse(response.data);\n      }\n    } catch (error) {\n      return {\n        success: false,\n        error: error instanceof Error ? error.message : 'Unknown error occurred',\n      };\n    }\n  }\n\n  /**\n   * Constructs the MAIDR service URL for LLM requests.\n   * @returns {string} The complete MAIDR service URL\n   */\n  private getMaidrUrl(): string {\n    return `${this.maidrBaseUrl}/${this.getEndPoint()}?code=${this.codeQueryParam}`;\n  }\n\n  /**\n   * Builds HTTP headers for the LLM request with authentication.\n   * @param {LlmRequest} request - The request containing authentication details\n   * @returns {Record<string, string>} The HTTP headers\n   */\n  protected getHeaders(request: LlmRequest): Record<string, string> {\n    const headers: Record<string, string> = {\n      'Content-Type': 'application/json',\n    };\n\n    if (request.clientToken) {\n      headers.Authentication = `${request.email} ${request.clientToken}`;\n    } else {\n      headers.Authorization = `Bearer ${request.apiKey}`;\n    }\n\n    return headers;\n  }\n\n  /**\n   * Gets the API URL for the specific LLM provider.\n   * @param {string} [apiKey] - The API key for authentication\n   * @returns {string} The API URL\n   */\n  protected abstract getApiUrl(apiKey?: string): string;\n\n  /**\n   * Gets the endpoint name for MAIDR service routing.\n   * @returns {string} The endpoint name\n   */\n  protected abstract getEndPoint(): string;\n\n  /**\n   * Constructs the request payload for the specific LLM provider.\n   * @param {string} customInstruction - Custom instructions from the user\n   * @param {string} maidrJson - The MAIDR data as JSON string\n   * @param {string} image - The base64-encoded plot image\n   * @param {string} currentText - The current position text\n   * @param {string} message - The user's message\n   * @param {'basic' | 'intermediate' | 'advanced'} expertise - The expertise level\n   * @returns {string} The JSON payload\n   */\n  protected abstract getPayload(\n    customInstruction: string,\n    maidrJson: string,\n    image: string,\n    currentText: string,\n    message: string,\n    expertise: 'basic' | 'intermediate' | 'advanced',\n  ): string;\n\n  /**\n   * Formats the provider-specific response into a standard LlmResponse.\n   * @param {T} response - The raw response from the LLM provider\n   * @returns {LlmResponse} The formatted response\n   */\n  protected abstract formatResponse(response: T): LlmResponse;\n}\n\n/**\n * OpenAI GPT model implementation.\n */\nclass Gpt extends AbstractLlmModel<GptResponse> {\n  private readonly version: GptVersion;\n\n  /**\n   * Creates a new GPT model instance.\n   * @param {HTMLElement} svg - The SVG element representing the plot\n   * @param {Maidr} maidr - The MAIDR data structure\n   * @param {TextService} textService - The text service for retrieving coordinate text\n   * @param {GptVersion} version - The GPT model version to use\n   */\n  public constructor(svg: HTMLElement, maidr: Maidr, textService: TextService, version: GptVersion) {\n    super(svg, maidr, textService);\n    this.version = version;\n  }\n\n  /**\n   * Gets the OpenAI API URL.\n   * @returns {string} The OpenAI API URL\n   */\n  protected getApiUrl(): string {\n    return 'https://api.openai.com/v1/chat/completions';\n  }\n\n  /**\n   * Gets the endpoint name for MAIDR service routing.\n   * @returns {string} The endpoint name 'openai'\n   */\n  protected getEndPoint(): string {\n    return 'openai';\n  }\n\n  /**\n   * Constructs the GPT-specific request payload.\n   * @param {string} customInstruction - Custom instructions from the user\n   * @param {string} maidrJson - The MAIDR data as JSON string\n   * @param {string} image - The base64-encoded plot image\n   * @param {string} currentPositionText - The current position text\n   * @param {string} message - The user's message\n   * @param {'basic' | 'intermediate' | 'advanced'} expertise - The expertise level\n   * @returns {string} The JSON payload for GPT API\n   */\n  protected getPayload(\n    customInstruction: string,\n    maidrJson: string,\n    image: string,\n    currentPositionText: string,\n    message: string,\n    expertise: 'basic' | 'intermediate' | 'advanced',\n  ): string {\n    const context: PromptContext = {\n      customInstruction,\n      maidrJson,\n      currentPositionText,\n      message,\n      expertiseLevel: expertise,\n    };\n\n    return JSON.stringify({\n      model: this.version,\n      max_tokens: GPT_MAX_TOKENS,\n      messages: [\n        {\n          role: 'system',\n          content: formatSystemPrompt(customInstruction, context.expertiseLevel),\n        },\n        {\n          role: 'user',\n          content: [\n            {\n              type: 'text',\n              text: formatUserPrompt(context),\n            },\n            {\n              type: 'image_url',\n              image_url: {\n                url: image,\n              },\n            },\n          ],\n        },\n      ],\n    });\n  }\n\n  /**\n   * Formats the GPT response into a standard LlmResponse.\n   * @param {GptResponse} response - The raw response from GPT API\n   * @returns {LlmResponse} The formatted response\n   */\n  protected formatResponse(response: GptResponse): LlmResponse {\n    if (response.choices.length === 0) {\n      return {\n        success: false,\n        error: 'Invalid response format',\n      };\n    }\n\n    return {\n      success: true,\n      data: response.choices[0].message.content,\n    };\n  }\n\n  /**\n   * Builds HTTP headers for GPT requests.\n   * @param {LlmRequest} request - The request containing authentication details\n   * @returns {Record<string, string>} The HTTP headers\n   */\n  protected getHeaders(request: LlmRequest): Record<string, string> {\n    const headers = super.getHeaders(request);\n    return headers;\n  }\n}\n\n/**\n * Anthropic Claude model implementation.\n */\nclass Claude extends AbstractLlmModel<ClaudeResponse> {\n  private readonly version: ClaudeVersion;\n\n  /**\n   * Creates a new Claude model instance.\n   * @param {HTMLElement} svg - The SVG element representing the plot\n   * @param {Maidr} maidr - The MAIDR data structure\n   * @param {TextService} textService - The text service for retrieving coordinate text\n   * @param {ClaudeVersion} version - The Claude model version to use\n   */\n  public constructor(svg: HTMLElement, maidr: Maidr, textService: TextService, version: ClaudeVersion) {\n    super(svg, maidr, textService);\n    this.version = version;\n  }\n\n  /**\n   * Gets the Anthropic API URL.\n   * @returns {string} The Anthropic API URL\n   */\n  protected getApiUrl(): string {\n    return 'https://api.anthropic.com';\n  }\n\n  /**\n   * Gets the endpoint name for MAIDR service routing.\n   * @returns {string} The endpoint name 'claude'\n   */\n  protected getEndPoint(): string {\n    return 'claude';\n  }\n\n  /**\n   * Constructs the Claude-specific request payload.\n   * @param {string} customInstruction - Custom instructions from the user\n   * @param {string} maidrJson - The MAIDR data as JSON string\n   * @param {string} image - The base64-encoded plot image\n   * @param {string} currentPositionText - The current position text\n   * @param {string} message - The user's message\n   * @param {'basic' | 'intermediate' | 'advanced'} expertise - The expertise level\n   * @returns {string} The JSON payload for Claude API\n   */\n  protected getPayload(\n    customInstruction: string,\n    maidrJson: string,\n    image: string,\n    currentPositionText: string,\n    message: string,\n    expertise: 'basic' | 'intermediate' | 'advanced',\n  ): string {\n    const context: PromptContext = {\n      customInstruction,\n      maidrJson,\n      currentPositionText,\n      message,\n      expertiseLevel: expertise,\n    };\n\n    return JSON.stringify({\n      anthropic_version: this.version,\n      max_tokens: CLAUDE_MAX_TOKENS,\n      messages: [\n        {\n          role: 'user',\n          content: [\n            {\n              type: 'image',\n              source: {\n                type: 'base64',\n                media_type: 'image/jpeg',\n                data: image,\n              },\n            },\n            {\n              type: 'text',\n              text: `${formatSystemPrompt(customInstruction, context.expertiseLevel)}\\n\\n${formatUserPrompt(context)}`,\n            },\n          ],\n        },\n      ],\n    });\n  }\n\n  /**\n   * Formats the Claude response into a standard LlmResponse.\n   * @param {ClaudeResponse} response - The raw response from Claude API\n   * @returns {LlmResponse} The formatted response\n   */\n  protected formatResponse(response: ClaudeResponse): LlmResponse {\n    if (response.content.length === 0) {\n      return {\n        success: false,\n        error: 'Invalid response format',\n      };\n    }\n\n    return {\n      success: true,\n      data: response.content[0].text,\n    };\n  }\n\n  /**\n   * Builds HTTP headers for Claude requests including version header.\n   * @param {LlmRequest} request - The request containing authentication details\n   * @returns {Record<string, string>} The HTTP headers\n   */\n  protected getHeaders(request: LlmRequest): Record<string, string> {\n    const headers = super.getHeaders(request);\n    headers['anthropic-version'] = this.version;\n    return headers;\n  }\n}\n\n/**\n * Google Gemini model implementation.\n */\nclass Gemini extends AbstractLlmModel<GeminiResponse> {\n  private readonly version: GeminiVersion;\n\n  /**\n   * Creates a new Gemini model instance.\n   * @param {HTMLElement} svg - The SVG element representing the plot\n   * @param {Maidr} maidr - The MAIDR data structure\n   * @param {TextService} textService - The text service for retrieving coordinate text\n   * @param {GeminiVersion} version - The Gemini model version to use\n   */\n  public constructor(svg: HTMLElement, maidr: Maidr, textService: TextService, version: GeminiVersion) {\n    super(svg, maidr, textService);\n    this.version = version;\n  }\n\n  /**\n   * Gets the Google Gemini API URL with embedded API key.\n   * @param {string} apiKey - The API key for authentication\n   * @returns {string} The Gemini API URL\n   * @throws {Error} If API key is not provided\n   */\n  protected getApiUrl(apiKey: string): string {\n    if (!apiKey) {\n      throw new Error('API key is required for Gemini API');\n    }\n    return `https://generativelanguage.googleapis.com/v1beta/models/${this.version}:generateContent?key=${apiKey}`;\n  }\n\n  /**\n   * Gets the endpoint name for MAIDR service routing.\n   * @returns {string} The endpoint name 'gemini'\n   */\n  protected getEndPoint(): string {\n    return 'gemini';\n  }\n\n  /**\n   * Constructs the Gemini-specific request payload.\n   * @param {string} customInstruction - Custom instructions from the user\n   * @param {string} maidrJson - The MAIDR data as JSON string\n   * @param {string} image - The base64-encoded plot image\n   * @param {string} currentPositionText - The current position text\n   * @param {string} message - The user's message\n   * @param {'basic' | 'intermediate' | 'advanced'} expertise - The expertise level\n   * @returns {string} The JSON payload for Gemini API\n   */\n  protected getPayload(\n    customInstruction: string,\n    maidrJson: string,\n    image: string,\n    currentPositionText: string,\n    message: string,\n    expertise: 'basic' | 'intermediate' | 'advanced',\n  ): string {\n    const context: PromptContext = {\n      customInstruction,\n      maidrJson,\n      currentPositionText,\n      message,\n      expertiseLevel: expertise,\n    };\n\n    const systemPrompt = formatSystemPrompt(customInstruction, context.expertiseLevel);\n    const userPrompt = formatUserPrompt(context);\n    const combinedPrompt = `${systemPrompt}\\n\\n${userPrompt}`;\n\n    const payload = JSON.stringify({\n      generationConfig: {\n        maxOutputTokens: GEMINI_MAX_TOKENS,\n      },\n      safetySettings: [],\n      contents: [\n        {\n          role: 'user',\n          parts: [\n            {\n              text: combinedPrompt,\n            },\n            {\n              inlineData: {\n                data: image.split(',')[1],\n                mimeType: 'image/svg+xml',\n              },\n            },\n          ],\n        },\n      ],\n    });\n\n    return payload;\n  }\n\n  /**\n   * Formats the Gemini response into a standard LlmResponse.\n   * @param {GeminiResponse} response - The raw response from Gemini API\n   * @returns {LlmResponse} The formatted response\n   */\n  protected formatResponse(response: GeminiResponse): LlmResponse {\n    if (response.candidates.length === 0) {\n      return {\n        success: false,\n        error: 'Invalid response format',\n      };\n    }\n\n    return {\n      success: true,\n      data: response.candidates[0].content.parts[0].text,\n    };\n  }\n\n  /**\n   * Builds HTTP headers for Gemini requests, removing Authorization header as API key is in URL.\n   * @param {LlmRequest} request - The request containing authentication details\n   * @returns {Record<string, string>} The HTTP headers\n   */\n  protected getHeaders(request: LlmRequest): Record<string, string> {\n    const headers = super.getHeaders(request);\n    // Gemini uses API key in URL, so we don't need to add it to headers\n    delete headers.Authorization;\n    return headers;\n  }\n}\n","import type { Context } from '@model/context';\nimport type { AutoplayService } from '@service/autoplay';\nimport type { Command } from './command';\n\n/**\n * Command to start autoplay in the upward direction.\n */\nexport class AutoplayUpwardCommand implements Command {\n  private readonly context: Context;\n  private readonly autoplay: AutoplayService;\n\n  /**\n   * Creates an instance of AutoplayUpwardCommand.\n   * @param {Context} context - The application context.\n   * @param {AutoplayService} autoplay - The autoplay service.\n   */\n  public constructor(context: Context, autoplay: AutoplayService) {\n    this.context = context;\n    this.autoplay = autoplay;\n  }\n\n  /**\n   * Executes the command to start upward autoplay if in trace state.\n   */\n  public execute(): void {\n    const state = this.context.state;\n    if (state.type === 'trace' && !state.empty) {\n      this.autoplay.start('UPWARD', state);\n    }\n  }\n}\n\n/**\n * Command to start autoplay in the downward direction.\n */\nexport class AutoplayDownwardCommand implements Command {\n  private readonly context: Context;\n  private readonly autoplay: AutoplayService;\n\n  /**\n   * Creates an instance of AutoplayDownwardCommand.\n   * @param {Context} context - The application context.\n   * @param {AutoplayService} autoplay - The autoplay service.\n   */\n  public constructor(context: Context, autoplay: AutoplayService) {\n    this.autoplay = autoplay;\n    this.context = context;\n  }\n\n  /**\n   * Executes the command to start downward autoplay if in trace state.\n   */\n  public execute(): void {\n    const state = this.context.state;\n    if (state.type === 'trace' && !state.empty) {\n      this.autoplay.start('DOWNWARD', state);\n    }\n  }\n}\n\n/**\n * Command to start autoplay in the forward direction.\n */\nexport class AutoplayForwardCommand implements Command {\n  private readonly context: Context;\n  private readonly autoplay: AutoplayService;\n\n  /**\n   * Creates an instance of AutoplayForwardCommand.\n   * @param {Context} context - The application context.\n   * @param {AutoplayService} autoplay - The autoplay service.\n   */\n  public constructor(context: Context, autoplay: AutoplayService) {\n    this.autoplay = autoplay;\n    this.context = context;\n  }\n\n  /**\n   * Executes the command to start forward autoplay if in trace state.\n   */\n  public execute(): void {\n    const state = this.context.state;\n    if (state.type === 'trace' && !state.empty) {\n      this.autoplay.start('FORWARD', state);\n    }\n  }\n}\n\n/**\n * Command to start autoplay in the backward direction.\n */\nexport class AutoplayBackwardCommand implements Command {\n  private readonly context: Context;\n  private readonly autoplay: AutoplayService;\n\n  /**\n   * Creates an instance of AutoplayBackwardCommand.\n   * @param {Context} context - The application context.\n   * @param {AutoplayService} autoplay - The autoplay service.\n   */\n  public constructor(context: Context, autoplay: AutoplayService) {\n    this.autoplay = autoplay;\n    this.context = context;\n  }\n\n  /**\n   * Executes the command to start backward autoplay if in trace state.\n   */\n  public execute(): void {\n    const state = this.context.state;\n    if (state.type === 'trace' && !state.empty) {\n      this.autoplay.start('BACKWARD', state);\n    }\n  }\n}\n\n/**\n * Command to stop the current autoplay.\n */\nexport class StopAutoplayCommand implements Command {\n  private readonly autoplay: AutoplayService;\n\n  /**\n   * Creates an instance of StopAutoplayCommand.\n   * @param {AutoplayService} autoplay - The autoplay service.\n   */\n  public constructor(autoplay: AutoplayService) {\n    this.autoplay = autoplay;\n  }\n\n  /**\n   * Executes the command to stop autoplay.\n   */\n  public execute(): void {\n    this.autoplay.stop();\n  }\n}\n\n/**\n * Command to increase the autoplay speed.\n */\nexport class SpeedUpAutoplayCommand implements Command {\n  private readonly autoplay: AutoplayService;\n\n  /**\n   * Creates an instance of SpeedUpAutoplayCommand.\n   * @param {AutoplayService} autoplay - The autoplay service.\n   */\n  public constructor(autoplay: AutoplayService) {\n    this.autoplay = autoplay;\n  }\n\n  /**\n   * Executes the command to speed up autoplay.\n   */\n  public execute(): void {\n    this.autoplay.speedUp();\n  }\n}\n\n/**\n * Command to decrease the autoplay speed.\n */\nexport class SpeedDownAutoplayCommand implements Command {\n  private readonly autoplay: AutoplayService;\n\n  /**\n   * Creates an instance of SpeedDownAutoplayCommand.\n   * @param {AutoplayService} autoplay - The autoplay service.\n   */\n  public constructor(autoplay: AutoplayService) {\n    this.autoplay = autoplay;\n  }\n\n  /**\n   * Executes the command to slow down autoplay.\n   */\n  public execute(): void {\n    this.autoplay.speedDown();\n  }\n}\n\n/**\n * Command to reset the autoplay speed to default.\n */\nexport class ResetAutoplaySpeedCommand implements Command {\n  private readonly autoplay: AutoplayService;\n\n  /**\n   * Creates an instance of ResetAutoplaySpeedCommand.\n   * @param {AutoplayService} autoplay - The autoplay service.\n   */\n  public constructor(autoplay: AutoplayService) {\n    this.autoplay = autoplay;\n  }\n\n  /**\n   * Executes the command to reset autoplay speed.\n   */\n  public execute(): void {\n    this.autoplay.resetSpeed();\n  }\n}\n","import type { Context } from '@model/context';\nimport type { AudioService } from '@service/audio';\nimport type { DisplayService } from '@service/display';\nimport type { HighlightService } from '@service/highlight';\nimport type { TextService } from '@service/text';\nimport type { BrailleViewModel } from '@state/viewModel/brailleViewModel';\nimport type { TextViewModel } from '@state/viewModel/textViewModel';\nimport type { BoxBrailleState, LineBrailleState, NonEmptyTraceState } from '@type/state';\nimport type { Command } from './command';\nimport { TraceType } from '@type/grammar';\n\n/**\n * Abstract base class for describe commands.\n */\nabstract class AnnounceCommand implements Command {\n  protected readonly context: Context;\n  protected readonly textViewModel: TextViewModel;\n  protected readonly audioService: AudioService;\n  protected readonly textService: TextService;\n  protected readonly displayService: DisplayService;\n\n  /**\n   * Creates an instance of AnnounceCommand.\n   * @param {Context} context - The application context.\n   * @param {TextViewModel} textViewModel - The text view model.\n   * @param {AudioService} audioService - The audio service.\n   * @param {TextService} textService - The text service for mode-aware formatting.\n   * @param {DisplayService} displayService - The display service for scope management.\n   */\n  protected constructor(\n    context: Context,\n    textViewModel: TextViewModel,\n    audioService: AudioService,\n    textService: TextService,\n    displayService: DisplayService,\n  ) {\n    this.context = context;\n    this.textViewModel = textViewModel;\n    this.audioService = audioService;\n    this.textService = textService;\n    this.displayService = displayService;\n  }\n\n  /**\n   * Executes the describe command.\n   * @param {Event} [event] - Optional event that triggered the command.\n   */\n  public abstract execute(event?: Event): void;\n\n  /**\n   * Restores the scope to the previous scope before entering label mode.\n   * Uses DisplayService to properly manage the focus stack and restore\n   * the correct scope (TRACE, BRAILLE, etc.) regardless of which scope\n   * was active before entering label mode.\n   */\n  protected restoreScope(): void {\n    this.displayService.exitLabelScope();\n  }\n}\n\n/**\n * Command to describe the X-axis label.\n */\nexport class AnnounceXCommand extends AnnounceCommand {\n  /**\n   * Creates an instance of AnnounceXCommand.\n   * @param {Context} context - The application context.\n   * @param {TextViewModel} textViewModel - The text view model.\n   * @param {AudioService} audioService - The audio service.\n   * @param {TextService} textService - The text service for mode-aware formatting.\n   * @param {DisplayService} displayService - The display service for scope management.\n   */\n  public constructor(\n    context: Context,\n    textViewModel: TextViewModel,\n    audioService: AudioService,\n    textService: TextService,\n    displayService: DisplayService,\n  ) {\n    super(context, textViewModel, audioService, textService, displayService);\n  }\n\n  /**\n   * Executes the command to display the X-axis label.\n   */\n  public execute(): void {\n    const state = this.context.state;\n    if (state.type === 'trace' && !state.empty) {\n      const text = this.textService.isTerse()\n        ? state.xAxis\n        : `X label is ${state.xAxis}`;\n      this.textViewModel.update(text);\n    } else {\n      const text = this.textService.isTerse()\n        ? 'unavailable'\n        : 'X label is not available';\n      this.textViewModel.update(text);\n      this.audioService.playWarningToneIfEnabled();\n    }\n    this.restoreScope();\n  }\n}\n\n/**\n * Command to describe the Y-axis label.\n */\nexport class AnnounceYCommand extends AnnounceCommand {\n  /**\n   * Creates an instance of AnnounceYCommand.\n   * @param {Context} context - The application context.\n   * @param {TextViewModel} textViewModel - The text view model.\n   * @param {AudioService} audioService - The audio service.\n   * @param {TextService} textService - The text service for mode-aware formatting.\n   * @param {DisplayService} displayService - The display service for scope management.\n   */\n  public constructor(\n    context: Context,\n    textViewModel: TextViewModel,\n    audioService: AudioService,\n    textService: TextService,\n    displayService: DisplayService,\n  ) {\n    super(context, textViewModel, audioService, textService, displayService);\n  }\n\n  /**\n   * Executes the command to display the Y-axis label.\n   */\n  public execute(): void {\n    const state = this.context.state;\n    if (state.type === 'trace' && !state.empty) {\n      const text = this.textService.isTerse()\n        ? state.yAxis\n        : `Y label is ${state.yAxis}`;\n      this.textViewModel.update(text);\n    } else {\n      const text = this.textService.isTerse()\n        ? 'unavailable'\n        : 'Y label is not available';\n      this.textViewModel.update(text);\n      this.audioService.playWarningToneIfEnabled();\n    }\n    this.restoreScope();\n  }\n}\n\n/**\n * Command to describe the z (level) property.\n * Works with candlestick (trend), heatmap (z value), segmented bars (level),\n * and multi-series line charts (group).\n */\nexport class AnnounceZCommand extends AnnounceCommand {\n  /**\n   * Creates an instance of AnnounceZCommand.\n   * @param {Context} context - The application context.\n   * @param {TextViewModel} textViewModel - The text view model.\n   * @param {AudioService} audioService - The audio service.\n   * @param {TextService} textService - The text service for mode-aware formatting.\n   * @param {DisplayService} displayService - The display service for scope management.\n   */\n  public constructor(\n    context: Context,\n    textViewModel: TextViewModel,\n    audioService: AudioService,\n    textService: TextService,\n    displayService: DisplayService,\n  ) {\n    super(context, textViewModel, audioService, textService, displayService);\n  }\n\n  /**\n   * Executes the command to display the z (level) information.\n   * Checks for valid z-axis data which is in state.text.z with label and value properties.\n   * Supports: candlestick (trend), heatmap (z), segmented bars (level), multi-line (group).\n   */\n  public execute(): void {\n    const state = this.context.state;\n\n    // Check if we have valid z-axis data\n    // state.text.z is optional and may be undefined for some chart types (e.g., box, single-line)\n    const zData = state.type === 'trace' && !state.empty ? state.text.z : undefined;\n    const hasValidZ = zData !== undefined\n      && zData.value !== undefined\n      && zData.value !== null\n      && zData.value !== 'undefined';\n\n    if (hasValidZ) {\n      const zLabel = zData!.label;\n      this.textViewModel.update(`${zLabel}`);\n    } else {\n      const text = this.textService.isTerse()\n        ? 'unavailable'\n        : 'Z-axis is not available';\n      this.textViewModel.update(text);\n      this.audioService.playWarningToneIfEnabled();\n    }\n    this.restoreScope();\n  }\n}\n\n/**\n * Command to describe the title of the figure or subplot.\n */\nexport class AnnounceTitleCommand extends AnnounceCommand {\n  /**\n   * Creates an instance of AnnounceTitleCommand.\n   * @param {Context} context - The application context.\n   * @param {TextViewModel} textViewModel - The text view model.\n   * @param {AudioService} audioService - The audio service.\n   * @param {TextService} textService - The text service for mode-aware formatting.\n   * @param {DisplayService} displayService - The display service for scope management.\n   */\n  public constructor(\n    context: Context,\n    textViewModel: TextViewModel,\n    audioService: AudioService,\n    textService: TextService,\n    displayService: DisplayService,\n  ) {\n    super(context, textViewModel, audioService, textService, displayService);\n  }\n\n  /**\n   * Executes the command to display the title based on state type.\n   *\n   * - Single-panel plots: announces the figure title as \"Title is ...\".\n   * - Multi-panel at figure level: announces \"Figure title is ...\".\n   * - Multi-panel at trace level: announces \"Subplot title is ...\".\n   */\n  public execute(): void {\n    const state = this.context.state;\n\n    if (state.empty) {\n      this.announceUnavailable();\n      this.restoreScope();\n      return;\n    }\n\n    if (state.type === 'figure') {\n      this.announce(state.title, 'Figure title');\n      this.restoreScope();\n      return;\n    }\n\n    if (state.type === 'trace') {\n      this.announceTraceTitle(state.title);\n      this.restoreScope();\n      return;\n    }\n\n    // Fallback for unexpected state types (e.g. 'subplot').\n    this.announceUnavailable();\n    this.restoreScope();\n  }\n\n  /**\n   * Announces a title value with the given label prefix.\n   */\n  private announce(title: string, label: string): void {\n    const text = this.textService.isTerse()\n      ? title\n      : `${label} is ${title}`;\n    this.textViewModel.update(text);\n  }\n\n  /**\n   * Announces the appropriate title when in trace context:\n   * subplot title for multi-panel, figure title for single-panel.\n   */\n  private announceTraceTitle(traceTitle: string): void {\n    // Multi-panel: show the subplot-level title if available.\n    if (this.context.isMultiPanel && traceTitle !== 'unavailable') {\n      this.announce(traceTitle, 'Subplot title');\n      return;\n    }\n\n    // Single-panel (or multi-panel without subplot title): show figure title.\n    const figureTitle = this.context.figureTitle;\n    if (figureTitle !== 'unavailable') {\n      this.announce(figureTitle, 'Title');\n      return;\n    }\n\n    this.announceUnavailable();\n  }\n\n  /**\n   * Announces that the title is not available and plays a warning tone.\n   */\n  private announceUnavailable(): void {\n    const text = this.textService.isTerse()\n      ? 'unavailable'\n      : 'Title is not available';\n    this.textViewModel.update(text);\n    this.audioService.playWarningToneIfEnabled();\n  }\n}\n\n/**\n * Command to describe the subtitle of the figure.\n */\nexport class AnnounceSubtitleCommand extends AnnounceCommand {\n  /**\n   * Creates an instance of AnnounceSubtitleCommand.\n   * @param {Context} context - The application context.\n   * @param {TextViewModel} textViewModel - The text view model.\n   * @param {AudioService} audioService - The audio service.\n   * @param {TextService} textService - The text service for mode-aware formatting.\n   * @param {DisplayService} displayService - The display service for scope management.\n   */\n  public constructor(\n    context: Context,\n    textViewModel: TextViewModel,\n    audioService: AudioService,\n    textService: TextService,\n    displayService: DisplayService,\n  ) {\n    super(context, textViewModel, audioService, textService, displayService);\n  }\n\n  /**\n   * Executes the command to display the subtitle.\n   * Accesses subtitle from the figure level via Context, since subtitle\n   * is a figure-level property not available on trace state.\n   */\n  public execute(): void {\n    const subtitle = this.context.figureSubtitle;\n    if (subtitle !== 'unavailable') {\n      const text = this.textService.isTerse()\n        ? subtitle\n        : `Subtitle is ${subtitle}`;\n      this.textViewModel.update(text);\n    } else {\n      const text = this.textService.isTerse()\n        ? 'unavailable'\n        : 'Subtitle is not available';\n      this.textViewModel.update(text);\n      this.audioService.playWarningToneIfEnabled();\n    }\n    this.restoreScope();\n  }\n}\n\n/**\n * Command to describe the caption of the figure.\n */\nexport class AnnounceCaptionCommand extends AnnounceCommand {\n  /**\n   * Creates an instance of AnnounceCaptionCommand.\n   * @param {Context} context - The application context.\n   * @param {TextViewModel} textViewModel - The text view model.\n   * @param {AudioService} audioService - The audio service.\n   * @param {TextService} textService - The text service for mode-aware formatting.\n   * @param {DisplayService} displayService - The display service for scope management.\n   */\n  public constructor(\n    context: Context,\n    textViewModel: TextViewModel,\n    audioService: AudioService,\n    textService: TextService,\n    displayService: DisplayService,\n  ) {\n    super(context, textViewModel, audioService, textService, displayService);\n  }\n\n  /**\n   * Executes the command to display the caption.\n   * Accesses caption from the figure level via Context, since caption\n   * is a figure-level property not available on trace state.\n   */\n  public execute(): void {\n    const caption = this.context.figureCaption;\n    if (caption !== 'unavailable') {\n      const text = this.textService.isTerse()\n        ? caption\n        : `Caption is ${caption}`;\n      this.textViewModel.update(text);\n    } else {\n      const text = this.textService.isTerse()\n        ? 'unavailable'\n        : 'Caption is not available';\n      this.textViewModel.update(text);\n      this.audioService.playWarningToneIfEnabled();\n    }\n    this.restoreScope();\n  }\n}\n\n/**\n * Command to describe the current point with audio, braille, and highlight.\n */\nexport class AnnouncePointCommand extends AnnounceCommand {\n  private readonly audio: AudioService;\n  private readonly brailleViewModel: BrailleViewModel;\n  private readonly highlight: HighlightService;\n\n  /**\n   * Creates an instance of AnnouncePointCommand.\n   * @param {Context} context - The application context.\n   * @param {AudioService} audioService - The audio service.\n   * @param {HighlightService} highlightService - The highlight service.\n   * @param {BrailleViewModel} brailleViewModel - The braille view model.\n   * @param {TextViewModel} textViewModel - The text view model.\n   * @param {TextService} textService - The text service for mode-aware formatting.\n   * @param {DisplayService} displayService - The display service for scope management.\n   */\n  public constructor(\n    context: Context,\n    audioService: AudioService,\n    highlightService: HighlightService,\n    brailleViewModel: BrailleViewModel,\n    textViewModel: TextViewModel,\n    textService: TextService,\n    displayService: DisplayService,\n  ) {\n    super(context, textViewModel, audioService, textService, displayService);\n    this.audio = audioService;\n    this.highlight = highlightService;\n    this.brailleViewModel = brailleViewModel;\n  }\n\n  /**\n   * Executes the command to describe the current point with multiple modalities.\n   */\n  public execute(): void {\n    const state = this.context.state;\n    switch (state.type) {\n      case 'figure':\n      case 'subplot':\n        this.textViewModel.update(state);\n        break;\n\n      case 'trace':\n        this.textViewModel.update(state);\n        this.audio.update(state);\n        this.brailleViewModel.update(state);\n        this.highlight.update(state);\n        break;\n    }\n  }\n}\n\n/**\n * Command to announce the current position in the chart.\n * Formats output based on text mode (terse/verbose) and chart type.\n */\nexport class AnnouncePositionCommand extends AnnounceCommand {\n  /**\n   * Creates an instance of AnnouncePositionCommand.\n   * @param {Context} context - The application context.\n   * @param {TextService} textService - The text service for mode checking.\n   * @param {TextViewModel} textViewModel - The text view model.\n   * @param {AudioService} audioService - The audio service.\n   * @param {DisplayService} displayService - The display service for scope management.\n   */\n  public constructor(\n    context: Context,\n    textService: TextService,\n    textViewModel: TextViewModel,\n    audioService: AudioService,\n    displayService: DisplayService,\n  ) {\n    super(context, textViewModel, audioService, textService, displayService);\n  }\n\n  /**\n   * Executes the command to announce the current position.\n   */\n  public execute(): void {\n    // Get current state\n    const state = this.context.state;\n\n    // Handle no data case\n    if (state.empty || state.type !== 'trace') {\n      this.textViewModel.update('Not in a chart, unable to show position.');\n      return;\n    }\n\n    // Warn if text mode is off instead of announcing position\n    if (this.textViewModel.warnIfTextOff()) {\n      return;\n    }\n\n    // Grid mode: announce axis ranges without points\n    if (state.text.gridPoints !== undefined && state.text.range && state.text.crossRange) {\n      this.announceGridPosition(state);\n      return;\n    }\n\n    // Get position from audio.panning (contains x, y, rows, cols)\n    const { panning } = state.audio;\n    const { x, y, rows, cols } = panning;\n\n    // Check for special chart types\n    const traceType = state.traceType;\n\n    if (traceType === TraceType.BOX) {\n      this.announceBoxplotPosition(state);\n    } else if (traceType === TraceType.CANDLESTICK) {\n      this.announceCandlestickPosition(state);\n    } else if (\n      traceType === TraceType.STACKED\n      || traceType === TraceType.NORMALIZED\n      || traceType === TraceType.DODGED\n    ) {\n      this.announceSegmentedBarPosition(state, x, cols);\n    } else if (traceType === TraceType.SMOOTH) {\n      if (rows > 1) {\n        // Multi-violin plots: y=violin index, x=position within violin\n        this.announceMultiViolinPosition(y, rows, x, cols);\n      } else {\n        // Single smooth/violin plot: 1D position within the curve\n        this.announceSmoothPosition(x, cols);\n      }\n    } else if (traceType === TraceType.LINE && state.groupCount && state.groupCount > 1) {\n      // Check for multi plots (multiline, panel, layer, facet)\n      // Multi-line plots: x=position in the line, y=line index\n      this.announceMultiLinePosition(x, cols, y, rows);\n    } else if (traceType === TraceType.SCATTER) {\n      // Scatter plot: use x/y for column/row position, but don't include 'Position' as it sounds weird\n      this.announceScatter(x, y, rows, cols);\n    } else if (this.is2DPlot(rows, cols)) {\n      // Default position announcement\n      this.announce2DPosition(x, y, rows, cols);\n    } else {\n      this.announce1DPosition(x, cols);\n    }\n  }\n\n  /**\n   * Determines if the chart is a 2D plot based on rows and columns.\n   */\n  private is2DPlot(rows: number, cols: number): boolean {\n    return rows > 1 && cols > 1;\n  }\n\n  /**\n   * Announces position for 1D plots.\n   */\n  private announce1DPosition(x: number, cols: number): void {\n    const position = x + 1;\n    const total = cols;\n\n    if (this.textService.isTerse() || this.textService.isOff()) {\n      const percent = cols > 1 ? Math.round((x / (cols - 1)) * 100) : 0;\n      this.textViewModel.update(`${percent}%`);\n    } else {\n      this.textViewModel.update(`Position is ${position} of ${total}`);\n    }\n  }\n\n  /**\n   * Announces position for 2D plots (e.g., heatmaps).\n   */\n  private announce2DPosition(x: number, y: number, rows: number, cols: number): void {\n    const colPos = x + 1;\n    const rowPos = y + 1;\n\n    if (this.textService.isTerse() || this.textService.isOff()) {\n      const colPercent = cols > 1 ? Math.round((x / (cols - 1)) * 100) : 0;\n      const rowPercent = rows > 1 ? Math.round((y / (rows - 1)) * 100) : 0;\n      this.textViewModel.update(`${colPercent}%, ${rowPercent}%`);\n    } else {\n      this.textViewModel.update(\n        `Position is column ${colPos} of ${cols}, row ${rowPos} of ${rows}`,\n      );\n    }\n  }\n\n  /**\n   * Announces position for grid navigation mode.\n   * Shows axis ranges without the points list.\n   */\n  private announceGridPosition(state: NonEmptyTraceState): void {\n    const { text } = state;\n    const xRange = text.range!;\n    const yRange = text.crossRange!;\n\n    if (this.textService.isTerse()) {\n      this.textViewModel.update(\n        `${xRange.min} through ${xRange.max}, ${yRange.min} through ${yRange.max}`,\n      );\n    } else {\n      const xLabel = text.main.label || 'x';\n      const yLabel = text.cross.label || 'y';\n      this.textViewModel.update(\n        `${xLabel} is ${xRange.min} through ${xRange.max}, ${yLabel} is ${yRange.min} through ${yRange.max}`,\n      );\n    }\n  }\n\n  /**\n   * Announces position for boxplots with section information.\n   * Uses braille state which normalizes box position regardless of orientation.\n   */\n  private announceBoxplotPosition(state: NonEmptyTraceState): void {\n    const section = state.text.section || '';\n    const braille = state.braille as BoxBrailleState;\n\n    // braille.row is always the box index (normalized for orientation)\n    // braille.values is BoxPoint[] with length = number of boxes\n    const boxIndex = braille.row;\n    const totalBoxes = braille.values.length;\n    const position = boxIndex + 1;\n\n    if (this.textService.isTerse() || this.textService.isOff()) {\n      const percent = totalBoxes > 1 ? Math.round((boxIndex / (totalBoxes - 1)) * 100) : 0;\n      this.textViewModel.update(`${percent}%, ${section.toLowerCase()}`);\n    } else {\n      this.textViewModel.update(`Position is ${position} of ${totalBoxes} in ${section.toLowerCase()}`);\n    }\n  }\n\n  /**\n   * Announces position for candlestick charts with component information.\n   * Uses braille state to get correct candle position.\n   */\n  private announceCandlestickPosition(state: NonEmptyTraceState): void {\n    const section = state.text.section || '';\n    const braille = state.braille as LineBrailleState;\n\n    // braille.col is the candle index\n    // braille.values is candleValues[segment][candle], so values[0].length = total candles\n    const candleIndex = braille.col;\n    const totalCandles = braille.values[0].length;\n    const position = candleIndex + 1;\n\n    if (this.textService.isTerse() || this.textService.isOff()) {\n      const percent = totalCandles > 1 ? Math.round((candleIndex / (totalCandles - 1)) * 100) : 0;\n      this.textViewModel.update(`${percent}%, ${section.toLowerCase()}`);\n    } else {\n      this.textViewModel.update(`Position is ${position} of ${totalCandles}, ${section.toLowerCase()}`);\n    }\n  }\n\n  /**\n   * Announces position for segmented bar charts (stacked, normalized, dodged).\n   * Shows column position and level information.\n   */\n  private announceSegmentedBarPosition(state: NonEmptyTraceState, x: number, cols: number): void {\n    const level = state.text.z?.value ?? '';\n    const position = x + 1;\n    const total = cols;\n\n    if (this.textService.isTerse() || this.textService.isOff()) {\n      const percent = cols > 1 ? Math.round((x / (cols - 1)) * 100) : 0;\n      this.textViewModel.update(`${percent}%, ${level}`);\n    } else {\n      this.textViewModel.update(`Position is ${position} of ${total}, Level is ${level}`);\n    }\n  }\n\n  /**\n   * Announces position for smooth/violin plots.\n   * Treats as 1D plot - only announces position within the curve.\n   */\n  private announceSmoothPosition(\n    posIndex: number,\n    totalPos: number,\n  ): void {\n    // Smooth plots are 1D - just use position within the curve\n    this.announce1DPosition(posIndex, totalPos);\n  }\n\n  /**\n   * Announces position for multi-violin plots.\n   * Shows which violin and position within that violin.\n   */\n  private announceMultiViolinPosition(\n    violinIndex: number,\n    totalViolins: number,\n    posIndex: number,\n    totalPos: number,\n  ): void {\n    const violinPos = violinIndex + 1;\n    const pos = posIndex + 1;\n    const violinPrefix = `Violin ${violinPos} of ${totalViolins}`;\n\n    if (this.textService.isTerse() || this.textService.isOff()) {\n      const posPercent = totalPos > 1 ? Math.round((posIndex / (totalPos - 1)) * 100) : 0;\n      this.textViewModel.update(`${violinPrefix}, ${posPercent}%`);\n    } else {\n      this.textViewModel.update(`${violinPrefix}, Position is ${pos} of ${totalPos}`);\n    }\n  }\n\n  /**\n   * Announces position for multi-line plots.\n   * Always shows \"Plot X of Y\" prefix, followed by position within the line.\n   */\n  private announceMultiLinePosition(\n    posIndex: number,\n    totalPos: number,\n    lineIndex: number,\n    totalLines: number,\n  ): void {\n    const linePos = lineIndex + 1;\n    const pos = posIndex + 1;\n    const plotPrefix = `Plot ${linePos} of ${totalLines}`;\n\n    if (this.textService.isTerse() || this.textService.isOff()) {\n      const posPercent = totalPos > 1 ? Math.round((posIndex / (totalPos - 1)) * 100) : 0;\n      this.textViewModel.update(`${plotPrefix}, ${posPercent}%`);\n    } else {\n      this.textViewModel.update(`${plotPrefix}, Position is ${pos} of ${totalPos}`);\n    }\n  }\n\n  /**\n   * Announces position for 2D plots (e.g., heatmaps).\n   */\n  private announceScatter(x: number, y: number, rows: number, cols: number): void {\n    const colPos = x + 1;\n    const rowPos = y + 1;\n\n    if (this.textService.isTerse() || this.textService.isOff()) {\n      const colPercent = cols > 1 ? Math.round((x / (cols - 1)) * 100) : 0;\n      const rowPercent = rows > 1 ? Math.round((y / (rows - 1)) * 100) : 0;\n      this.textViewModel.update(`${colPercent}%, ${rowPercent}%`);\n    } else {\n      this.textViewModel.update(\n        `Column ${colPos} of ${cols}, row ${rowPos} of ${rows}`,\n      );\n    }\n  }\n}\n","import type { Context } from '@model/context';\nimport type { GoToExtremaViewModel } from '@state/viewModel/goToExtremaViewModel';\nimport type { Command } from './command';\n\n/**\n * Command to toggle the go-to-extrema navigation interface.\n */\nexport class GoToExtremaToggleCommand implements Command {\n  private readonly context: Context;\n  private readonly goToExtremaViewModel: GoToExtremaViewModel;\n\n  /**\n   * Creates an instance of GoToExtremaToggleCommand.\n   * @param {Context} context - The application context.\n   * @param {GoToExtremaViewModel} goToExtremaViewModel - The go-to-extrema view model.\n   */\n  public constructor(context: Context, goToExtremaViewModel: GoToExtremaViewModel) {\n    this.context = context;\n    this.goToExtremaViewModel = goToExtremaViewModel;\n  }\n\n  /**\n   * Executes the command to show or hide the go-to-extrema interface.\n   */\n  public execute(): void {\n    const state = this.context.state;\n    if (state.type === 'trace') {\n      if (this.goToExtremaViewModel.state.visible) {\n        this.goToExtremaViewModel.hide();\n      } else {\n        const activeTrace = this.context.active;\n        if (activeTrace && this.goToExtremaViewModel.isExtremaNavigable(activeTrace)) {\n          this.goToExtremaViewModel.toggle(state);\n        }\n      }\n    }\n  }\n}\n","import type { GoToExtremaViewModel } from '@state/viewModel/goToExtremaViewModel';\nimport type { Command } from './command';\n\n/**\n * Command to move selection up in the go-to-extrema list.\n */\nexport class GoToExtremaMoveUpCommand implements Command {\n  private readonly goToExtremaViewModel: GoToExtremaViewModel;\n\n  /**\n   * Creates an instance of GoToExtremaMoveUpCommand.\n   * @param {GoToExtremaViewModel} goToExtremaViewModel - The go-to-extrema view model.\n   */\n  public constructor(goToExtremaViewModel: GoToExtremaViewModel) {\n    this.goToExtremaViewModel = goToExtremaViewModel;\n  }\n\n  /**\n   * Executes the command to move selection upward.\n   */\n  public execute(): void {\n    this.goToExtremaViewModel.moveUp();\n  }\n}\n\n/**\n * Command to move selection down in the go-to-extrema list.\n */\nexport class GoToExtremaMoveDownCommand implements Command {\n  private readonly goToExtremaViewModel: GoToExtremaViewModel;\n\n  /**\n   * Creates an instance of GoToExtremaMoveDownCommand.\n   * @param {GoToExtremaViewModel} goToExtremaViewModel - The go-to-extrema view model.\n   */\n  public constructor(goToExtremaViewModel: GoToExtremaViewModel) {\n    this.goToExtremaViewModel = goToExtremaViewModel;\n  }\n\n  /**\n   * Executes the command to move selection downward.\n   */\n  public execute(): void {\n    this.goToExtremaViewModel.moveDown();\n  }\n}\n\n/**\n * Command to select the current extrema in the list.\n */\nexport class GoToExtremaSelectCommand implements Command {\n  private readonly goToExtremaViewModel: GoToExtremaViewModel;\n\n  /**\n   * Creates an instance of GoToExtremaSelectCommand.\n   * @param {GoToExtremaViewModel} goToExtremaViewModel - The go-to-extrema view model.\n   */\n  public constructor(goToExtremaViewModel: GoToExtremaViewModel) {\n    this.goToExtremaViewModel = goToExtremaViewModel;\n  }\n\n  /**\n   * Executes the command to select the current extrema.\n   */\n  public execute(): void {\n    this.goToExtremaViewModel.selectCurrent();\n  }\n}\n\n/**\n * Command to close the go-to-extrema interface.\n */\nexport class GoToExtremaCloseCommand implements Command {\n  private readonly goToExtremaViewModel: GoToExtremaViewModel;\n\n  /**\n   * Creates an instance of GoToExtremaCloseCommand.\n   * @param {GoToExtremaViewModel} goToExtremaViewModel - The go-to-extrema view model.\n   */\n  public constructor(goToExtremaViewModel: GoToExtremaViewModel) {\n    this.goToExtremaViewModel = goToExtremaViewModel;\n  }\n\n  /**\n   * Executes the command to close the interface.\n   */\n  public execute(): void {\n    this.goToExtremaViewModel.hide();\n  }\n}\n","import type { Context } from '@model/context';\nimport type { NotificationService } from '@service/notification';\nimport type { Command } from './command';\n\n/**\n * Command to enter grid cell mode for navigating points within a cell.\n */\nexport class EnterGridCellCommand implements Command {\n  private readonly context: Context;\n  private readonly notification: NotificationService;\n\n  public constructor(context: Context, notification: NotificationService) {\n    this.context = context;\n    this.notification = notification;\n  }\n\n  public execute(): void {\n    const success = this.context.enterGridCell();\n    if (!success) {\n      this.notification.notify('No points in this cell');\n    }\n  }\n}\n\n/**\n * Command to exit grid cell mode and return to grid navigation.\n */\nexport class ExitGridCellCommand implements Command {\n  private readonly context: Context;\n\n  public constructor(context: Context) {\n    this.context = context;\n  }\n\n  public execute(): void {\n    this.context.exitGridCell();\n  }\n}\n\n/**\n * Command to move to the previous point within the current grid cell.\n */\nexport class GridCellMoveLeftCommand implements Command {\n  private readonly context: Context;\n\n  public constructor(context: Context) {\n    this.context = context;\n  }\n\n  public execute(): void {\n    this.context.moveCellPointLeft();\n  }\n}\n\n/**\n * Command to move to the next point within the current grid cell.\n */\nexport class GridCellMoveRightCommand implements Command {\n  private readonly context: Context;\n\n  public constructor(context: Context) {\n    this.context = context;\n  }\n\n  public execute(): void {\n    this.context.moveCellPointRight();\n  }\n}\n","import type { Context } from '@model/context';\nimport type { BrailleService } from '@service/braille';\nimport type { DisplayService } from '@service/display';\nimport type { Command } from './command';\nimport { Scope } from '@type/event';\n\n/**\n * Command to move the current position one step upward.\n */\nexport class MoveUpCommand implements Command {\n  private readonly context: Context;\n\n  /**\n   * Creates an instance of MoveUpCommand.\n   * @param {Context} context - The context in which the move operation is performed.\n   */\n  public constructor(context: Context) {\n    this.context = context;\n  }\n\n  /**\n   * Executes the move up operation by moving the position one step upward.\n   */\n  public execute(): void {\n    this.context.moveOnce('UPWARD');\n  }\n}\n\n/**\n * Command to move the current position one step downward.\n */\nexport class MoveDownCommand implements Command {\n  private readonly context: Context;\n\n  /**\n   * Creates an instance of MoveDownCommand.\n   * @param {Context} context - The context in which the move operation is performed.\n   */\n  public constructor(context: Context) {\n    this.context = context;\n  }\n\n  /**\n   * Executes the move down operation by moving the position one step downward.\n   */\n  public execute(): void {\n    this.context.moveOnce('DOWNWARD');\n  }\n}\n\n/**\n * Command to move the current position one step to the left.\n */\nexport class MoveLeftCommand implements Command {\n  private readonly context: Context;\n\n  /**\n   * Creates an instance of MoveLeftCommand.\n   * @param {Context} context - The context in which the move operation is performed.\n   */\n  public constructor(context: Context) {\n    this.context = context;\n  }\n\n  /**\n   * Executes the move left operation by moving the position one step backward.\n   */\n  public execute(): void {\n    this.context.moveOnce('BACKWARD');\n  }\n}\n\n/**\n * Command to move the current position one step to the right.\n */\nexport class MoveRightCommand implements Command {\n  private readonly context: Context;\n\n  /**\n   * Creates an instance of MoveRightCommand.\n   * @param {Context} context - The context in which the move operation is performed.\n   */\n  public constructor(context: Context) {\n    this.context = context;\n  }\n\n  /**\n   * Executes the move right operation by moving the position one step forward.\n   */\n  public execute(): void {\n    this.context.moveOnce('FORWARD');\n  }\n}\n\n/**\n * Command to move the current position to the topmost extreme.\n */\nexport class MoveToTopExtremeCommand implements Command {\n  private readonly context: Context;\n\n  /**\n   * Creates an instance of MoveToTopExtremeCommand.\n   * @param {Context} context - The context in which the move operation is performed.\n   */\n  public constructor(context: Context) {\n    this.context = context;\n  }\n\n  /**\n   * Executes the move operation to jump to the topmost extreme position.\n   */\n  public execute(): void {\n    this.context.moveToExtreme('UPWARD');\n  }\n}\n\n/**\n * Command to move the current position to the bottommost extreme.\n */\nexport class MoveToBottomExtremeCommand implements Command {\n  private readonly context: Context;\n\n  /**\n   * Creates an instance of MoveToBottomExtremeCommand.\n   * @param {Context} context - The context in which the move operation is performed.\n   */\n  public constructor(context: Context) {\n    this.context = context;\n  }\n\n  /**\n   * Executes the move operation to jump to the bottommost extreme position.\n   */\n  public execute(): void {\n    this.context.moveToExtreme('DOWNWARD');\n  }\n}\n\n/**\n * Command to move the current position to the leftmost extreme.\n */\nexport class MoveToLeftExtremeCommand implements Command {\n  private readonly context: Context;\n\n  /**\n   * Creates an instance of MoveToLeftExtremeCommand.\n   * @param {Context} context - The context in which the move operation is performed.\n   */\n  public constructor(context: Context) {\n    this.context = context;\n  }\n\n  /**\n   * Executes the move operation to jump to the leftmost extreme position.\n   */\n  public execute(): void {\n    this.context.moveToExtreme('BACKWARD');\n  }\n}\n\n/**\n * Command to move the current position to the rightmost extreme.\n */\nexport class MoveToRightExtremeCommand implements Command {\n  private readonly context: Context;\n\n  /**\n   * Creates an instance of MoveToRightExtremeCommand.\n   * @param {Context} context - The context in which the move operation is performed.\n   */\n  public constructor(context: Context) {\n    this.context = context;\n  }\n\n  /**\n   * Executes the move operation to jump to the rightmost extreme position.\n   */\n  public execute(): void {\n    this.context.moveToExtreme('FORWARD');\n  }\n}\n\n/**\n * Command to move into the trace context from the current subplot.\n *\n * Architectural note: this command holds references to BrailleService and\n * DisplayService (not just Context) as a deliberate exception to the usual\n * pattern where commands only interact with the model layer. This is needed\n * because the model's notifyStateUpdate() cannot be used here without\n * triggering unwanted side effects (e.g. audio on entry). Do not copy this\n * pattern without similar justification.\n */\nexport class MoveToTraceContextCommand implements Command {\n  private readonly context: Context;\n  private readonly brailleService: BrailleService;\n  private readonly displayService: DisplayService;\n\n  /**\n   * Creates an instance of MoveToTraceContextCommand.\n   * @param {Context} context - The context in which the move operation is performed.\n   * @param {BrailleService} brailleService - The braille service to check enabled state.\n   * @param {DisplayService} displayService - The display service for managing focus.\n   */\n  public constructor(context: Context, brailleService: BrailleService, displayService: DisplayService) {\n    this.context = context;\n    this.brailleService = brailleService;\n    this.displayService = displayService;\n  }\n\n  /**\n   * Executes the move operation to enter the subplot trace context.\n   * If braille was previously enabled, directly updates the braille service\n   * with the new trace's data, then restores braille display focus.\n   *\n   * Note: we update the braille service directly rather than calling\n   * notifyStateUpdate() on the trace, because notifying all observers\n   * would also trigger AudioService (playing a tone on entry) and other\n   * services. Only the braille display needs to be refreshed here.\n   */\n  public execute(): void {\n    this.context.enterSubplot();\n    if (this.brailleService.isEnabled) {\n      const state = this.context.state;\n      // After enterSubplot(), context.state should always be a trace.\n      // The guard is defensive; if it fails, braille simply shows stale data.\n      if (state.type === 'trace') {\n        this.brailleService.refreshDisplay(state);\n      }\n      this.displayService.toggleFocus(Scope.BRAILLE);\n    } else {\n      // Sync focusStack to TRACE so label commands (l x, l y, etc.)\n      // restore to the correct scope after exiting label mode.\n      this.displayService.syncFocusStack(Scope.TRACE);\n    }\n  }\n}\n\n/**\n * Command to move back to the subplot context from the trace context.\n */\nexport class MoveToSubplotContextCommand implements Command {\n  private readonly context: Context;\n\n  /**\n   * Creates an instance of MoveToSubplotContextCommand.\n   * @param {Context} context - The context in which the move operation is performed.\n   */\n  public constructor(context: Context) {\n    this.context = context;\n  }\n\n  /**\n   * Executes the move operation to exit the trace context and return to subplot.\n   */\n  public execute(): void {\n    this.context.exitSubplot();\n  }\n}\n\n/**\n * Command to dismiss braille focus and exit the subplot context in a single\n * action. Used when Escape is pressed while braille mode is active.\n *\n * The ordering is important for screen reader compatibility:\n * 1. dismissModalScope moves focus to the plot and clears the focus stack,\n * 2. exitSubplot transitions the navigation context to the subplot level,\n * 3. notifyFocusChange defers the UI update (textarea removal) so NVDA/JAWS\n *    process the focus change before the braille textarea unmounts.\n */\nexport class ExitBrailleAndSubplotCommand implements Command {\n  private readonly context: Context;\n  private readonly displayService: DisplayService;\n\n  /**\n   * Creates an instance of ExitBrailleAndSubplotCommand.\n   * @param {Context} context - The navigation context.\n   * @param {DisplayService} displayService - The display service for focus management.\n   */\n  public constructor(context: Context, displayService: DisplayService) {\n    this.context = context;\n    this.displayService = displayService;\n  }\n\n  /**\n   * Dismisses braille focus and exits the subplot in a screen-reader-safe sequence.\n   */\n  public execute(): void {\n    this.displayService.dismissModalScope(Scope.SUBPLOT);\n    this.context.exitSubplot();\n    this.displayService.notifyFocusChange(Scope.SUBPLOT);\n  }\n}\n\n/**\n * Command to move to the next trace in the sequence.\n */\nexport class MoveToNextTraceCommand implements Command {\n  private readonly context: Context;\n\n  /**\n   * Creates an instance of MoveToNextTraceCommand.\n   * @param {Context} context - The context in which the move operation is performed.\n   */\n  public constructor(context: Context) {\n    this.context = context;\n  }\n\n  /**\n   * Executes the move operation to step to the next trace upward.\n   */\n  public execute(): void {\n    this.context.stepTrace('UPWARD');\n  }\n}\n\n/**\n * Command to move to the previous trace in the sequence.\n */\nexport class MoveToPrevTraceCommand implements Command {\n  private readonly context: Context;\n\n  /**\n   * Creates an instance of MoveToPrevTraceCommand.\n   * @param {Context} context - The context in which the move operation is performed.\n   */\n  public constructor(context: Context) {\n    this.context = context;\n  }\n\n  /**\n   * Executes the move operation to step to the previous trace downward.\n   */\n  public execute(): void {\n    this.context.stepTrace('DOWNWARD');\n  }\n}\n","import type { Context } from '@model/context';\nimport type { RotorNavigationViewModel } from '@state/viewModel/rotorNavigationViewModel';\nimport type { Command } from './command';\n\n/**\n * Command to navigate to the next navigation unit in rotor navigation.\n */\nexport class RotorNavigationNextNavUnitCommand implements Command {\n  private readonly rotorNavigationViewModel: RotorNavigationViewModel;\n  /**\n   * Creates an instance of RotorNavigationNextNavUnitCommand.\n   * @param {Context} _context - The application context.\n   * @param {RotorNavigationViewModel} rotorNavigationViewModel - The rotor navigation view model.\n   */\n  public constructor(_context: Context, rotorNavigationViewModel: RotorNavigationViewModel) {\n    this.rotorNavigationViewModel = rotorNavigationViewModel;\n  }\n\n  /**\n   * Executes the command to move to the next navigation unit and toggle if state type is trace.\n   */\n  public execute(): void {\n    this.rotorNavigationViewModel.moveToNextNavUnit();\n  }\n}\n\n/**\n * Command to navigate to the previous navigation unit in rotor navigation.\n */\nexport class RotorNavigationPrevNavUnitCommand implements Command {\n  private readonly rotorNavigationViewModel: RotorNavigationViewModel;\n  /**\n   * Creates an instance of RotorNavigationPrevNavUnitCommand.\n   * @param {Context} _context - The application context.\n   * @param {RotorNavigationViewModel} rotorNavigationViewModel - The rotor navigation view model.\n   */\n  public constructor(_context: Context, rotorNavigationViewModel: RotorNavigationViewModel) {\n    this.rotorNavigationViewModel = rotorNavigationViewModel;\n  }\n\n  /**\n   * Executes the command to move to the previous navigation unit and toggle if state type is trace.\n   */\n  public execute(): void {\n    this.rotorNavigationViewModel.moveToPrevNavUnit();\n  }\n}\n\n/**\n * Command to move up in rotor navigation.\n */\nexport class RotorNavigationMoveUpCommand implements Command {\n  private readonly rotorNavigationViewModel: RotorNavigationViewModel;\n\n  /**\n   * Creates an instance of RotorNavigationMoveUpCommand.\n   * @param {RotorNavigationViewModel} rotorNavigationViewModel - The rotor navigation view model.\n   */\n  public constructor(rotorNavigationViewModel: RotorNavigationViewModel) {\n    this.rotorNavigationViewModel = rotorNavigationViewModel;\n  }\n\n  /**\n   * Executes the command to move up in the navigation hierarchy.\n   */\n  public execute(): void {\n    this.rotorNavigationViewModel.moveUp();\n  }\n}\n\n/**\n * Command to move left in rotor navigation.\n */\nexport class RotorNavigationMoveLeftCommand implements Command {\n  private readonly rotorNavigationViewModel: RotorNavigationViewModel;\n\n  /**\n   * Creates an instance of RotorNavigationMoveLeftCommand.\n   * @param {RotorNavigationViewModel} rotorNavigationViewModel - The rotor navigation view model.\n   */\n  public constructor(rotorNavigationViewModel: RotorNavigationViewModel) {\n    this.rotorNavigationViewModel = rotorNavigationViewModel;\n  }\n\n  /**\n   * Executes the command to move left in the navigation hierarchy.\n   */\n  public execute(): void {\n    this.rotorNavigationViewModel.moveLeft();\n  }\n}\n\n/**\n * Command to move down in rotor navigation.\n */\nexport class RotorNavigationMoveDownCommand implements Command {\n  private readonly rotorNavigationViewModel: RotorNavigationViewModel;\n\n  /**\n   * Creates an instance of RotorNavigationMoveDownCommand.\n   * @param {RotorNavigationViewModel} rotorNavigationViewModel - The rotor navigation view model.\n   */\n  public constructor(rotorNavigationViewModel: RotorNavigationViewModel) {\n    this.rotorNavigationViewModel = rotorNavigationViewModel;\n  }\n\n  /**\n   * Executes the command to move down in the navigation hierarchy.\n   */\n  public execute(): void {\n    this.rotorNavigationViewModel.moveDown();\n  }\n}\n\n/**\n * Command to move right in rotor navigation.\n */\nexport class RotorNavigationMoveRightCommand implements Command {\n  private readonly rotorNavigationViewModel: RotorNavigationViewModel;\n\n  /**\n   * Creates an instance of RotorNavigationMoveRightCommand.\n   * @param {RotorNavigationViewModel} rotorNavigationViewModel - The rotor navigation view model.\n   */\n  public constructor(rotorNavigationViewModel: RotorNavigationViewModel) {\n    this.rotorNavigationViewModel = rotorNavigationViewModel;\n  }\n\n  /**\n   * Executes the command to move right in the navigation hierarchy.\n   */\n  public execute(): void {\n    this.rotorNavigationViewModel.moveRight();\n  }\n}\n","import type { Context } from '@model/context';\nimport type { AudioService } from '@service/audio';\nimport type { DisplayService } from '@service/display';\nimport type { HighContrastService } from '@service/highContrast';\nimport type { BrailleViewModel } from '@state/viewModel/brailleViewModel';\nimport type { ChatViewModel } from '@state/viewModel/chatViewModel';\nimport type { CommandPaletteViewModel } from '@state/viewModel/commandPaletteViewModel';\nimport type { HelpViewModel } from '@state/viewModel/helpViewModel';\nimport type { ReviewViewModel } from '@state/viewModel/reviewViewModel';\nimport type { SettingsViewModel } from '@state/viewModel/settingsViewModel';\nimport type { TextViewModel } from '@state/viewModel/textViewModel';\nimport type { Command } from './command';\nimport { Scope } from '@type/event';\n\n/**\n * Command to toggle the braille display on or off.\n */\nexport class ToggleBrailleCommand implements Command {\n  private readonly context: Context;\n  private readonly brailleViewModel: BrailleViewModel;\n\n  /**\n   * Creates an instance of ToggleBrailleCommand.\n   * @param {Context} context - The application context.\n   * @param {BrailleViewModel} brailleViewModel - The braille view model.\n   */\n  public constructor(context: Context, brailleViewModel: BrailleViewModel) {\n    this.context = context;\n    this.brailleViewModel = brailleViewModel;\n  }\n\n  /**\n   * Toggles the braille display if the current state is a trace state.\n   */\n  public execute(): void {\n    const state = this.context.state;\n    if (state.type === 'trace') {\n      this.brailleViewModel.toggle(state);\n    }\n  }\n}\n\n/**\n * Command to toggle the text display on or off.\n */\nexport class ToggleTextCommand implements Command {\n  private readonly textViewModel: TextViewModel;\n\n  /**\n   * Creates an instance of ToggleTextCommand.\n   * @param {TextViewModel} textViewModel - The text view model.\n   */\n  public constructor(textViewModel: TextViewModel) {\n    this.textViewModel = textViewModel;\n  }\n\n  /**\n   * Toggles the text display.\n   */\n  public execute(): void {\n    this.textViewModel.toggle();\n  }\n}\n\n/**\n * Command to toggle the audio output on or off.\n */\nexport class ToggleAudioCommand implements Command {\n  private readonly audio: AudioService;\n\n  /**\n   * Creates an instance of ToggleAudioCommand.\n   * @param {AudioService} audio - The audio service.\n   */\n  public constructor(audio: AudioService) {\n    this.audio = audio;\n  }\n\n  /**\n   * Toggles the audio output.\n   */\n  public execute(): void {\n    this.audio.toggle();\n  }\n}\n\n/**\n * Command to toggle the review mode on or off.\n */\nexport class ToggleReviewCommand implements Command {\n  private readonly context: Context;\n  private readonly reviewViewModel: ReviewViewModel;\n\n  /**\n   * Creates an instance of ToggleReviewCommand.\n   * @param {Context} context - The application context.\n   * @param {ReviewViewModel} reviewViewModel - The review view model.\n   */\n  public constructor(context: Context, reviewViewModel: ReviewViewModel) {\n    this.context = context;\n    this.reviewViewModel = reviewViewModel;\n  }\n\n  /**\n   * Toggles the review mode if the current state is a trace state.\n   */\n  public execute(): void {\n    const state = this.context.state;\n    if (state.type === 'trace') {\n      this.reviewViewModel.toggle(state);\n    }\n  }\n}\n\n/**\n * Command to toggle the help panel on or off.\n */\nexport class ToggleHelpCommand implements Command {\n  private readonly helpViewModel: HelpViewModel;\n\n  /**\n   * Creates an instance of ToggleHelpCommand.\n   * @param {HelpViewModel} helpViewModel - The help view model.\n   */\n  public constructor(helpViewModel: HelpViewModel) {\n    this.helpViewModel = helpViewModel;\n  }\n\n  /**\n   * Toggles the help panel.\n   */\n  public execute(): void {\n    this.helpViewModel.toggle();\n  }\n}\n\n/**\n * Command to toggle the chat interface on or off.\n */\nexport class ToggleChatCommand implements Command {\n  private readonly chatViewModel: ChatViewModel;\n\n  /**\n   * Creates an instance of ToggleChatCommand.\n   * @param {ChatViewModel} chatViewModel - The chat view model.\n   */\n  public constructor(chatViewModel: ChatViewModel) {\n    this.chatViewModel = chatViewModel;\n  }\n\n  /**\n   * Toggles the chat interface.\n   */\n  public execute(): void {\n    this.chatViewModel.toggle();\n  }\n}\n\n/**\n * Command to toggle the settings panel on or off.\n */\nexport class ToggleSettingsCommand implements Command {\n  private readonly settingsViewModel: SettingsViewModel;\n\n  /**\n   * Creates an instance of ToggleSettingsCommand.\n   * @param {SettingsViewModel} settingsViewModel - The settings view model.\n   */\n  public constructor(settingsViewModel: SettingsViewModel) {\n    this.settingsViewModel = settingsViewModel;\n  }\n\n  /**\n   * Toggles the settings panel.\n   */\n  public execute(): void {\n    this.settingsViewModel.toggle();\n  }\n}\n\n/**\n * Command to toggle the command palette on or off.\n */\nexport class ToggleCommandPaletteCommand implements Command {\n  private readonly commandPaletteViewModel: CommandPaletteViewModel;\n\n  /**\n   * Creates an instance of ToggleCommandPaletteCommand.\n   * @param {CommandPaletteViewModel} commandPaletteViewModel - The command palette view model.\n   */\n  public constructor(commandPaletteViewModel: CommandPaletteViewModel) {\n    this.commandPaletteViewModel = commandPaletteViewModel;\n  }\n\n  /**\n   * Toggles the command palette.\n   */\n  public execute(): void {\n    this.commandPaletteViewModel.toggle();\n  }\n}\n\n/**\n * Command to close the command palette.\n */\nexport class CommandPaletteCloseCommand implements Command {\n  private readonly commandPaletteViewModel: CommandPaletteViewModel;\n\n  /**\n   * Creates an instance of CommandPaletteCloseCommand.\n   * @param {CommandPaletteViewModel} commandPaletteViewModel - The command palette view model.\n   */\n  public constructor(commandPaletteViewModel: CommandPaletteViewModel) {\n    this.commandPaletteViewModel = commandPaletteViewModel;\n  }\n\n  /**\n   * Hides the command palette.\n   */\n  public execute(): void {\n    this.commandPaletteViewModel.hide();\n  }\n}\n\n/**\n * Command to move the selection up in the command palette.\n */\nexport class CommandPaletteMoveUpCommand implements Command {\n  private readonly commandPaletteViewModel: CommandPaletteViewModel;\n\n  /**\n   * Creates an instance of CommandPaletteMoveUpCommand.\n   * @param {CommandPaletteViewModel} commandPaletteViewModel - The command palette view model.\n   */\n  public constructor(commandPaletteViewModel: CommandPaletteViewModel) {\n    this.commandPaletteViewModel = commandPaletteViewModel;\n  }\n\n  /**\n   * Moves the selection up in the command palette.\n   */\n  public execute(): void {\n    this.commandPaletteViewModel.moveUp();\n  }\n}\n\n/**\n * Command to move the selection down in the command palette.\n */\nexport class CommandPaletteMoveDownCommand implements Command {\n  private readonly commandPaletteViewModel: CommandPaletteViewModel;\n\n  /**\n   * Creates an instance of CommandPaletteMoveDownCommand.\n   * @param {CommandPaletteViewModel} commandPaletteViewModel - The command palette view model.\n   */\n  public constructor(commandPaletteViewModel: CommandPaletteViewModel) {\n    this.commandPaletteViewModel = commandPaletteViewModel;\n  }\n\n  /**\n   * Moves the selection down in the command palette.\n   */\n  public execute(): void {\n    this.commandPaletteViewModel.moveDown();\n  }\n}\n\n/**\n * Command to select the current item in the command palette.\n */\nexport class CommandPaletteSelectCommand implements Command {\n  private readonly commandPaletteViewModel: CommandPaletteViewModel;\n\n  /**\n   * Creates an instance of CommandPaletteSelectCommand.\n   * @param {CommandPaletteViewModel} commandPaletteViewModel - The command palette view model.\n   */\n  public constructor(commandPaletteViewModel: CommandPaletteViewModel) {\n    this.commandPaletteViewModel = commandPaletteViewModel;\n  }\n\n  /**\n   * Selects the currently highlighted item in the command palette.\n   */\n  public execute(): void {\n    this.commandPaletteViewModel.selectCurrent();\n  }\n}\n\n/**\n * Command to toggle a specific scope in the application context.\n * For label scopes (TRACE_LABEL, FIGURE_LABEL), uses DisplayService to\n * properly manage the focus stack and preserve the previous scope.\n */\nexport class ToggleScopeCommand implements Command {\n  private readonly context: Context;\n  private readonly scope: Scope;\n  private readonly textViewModel?: TextViewModel;\n  private readonly displayService?: DisplayService;\n\n  /**\n   * Creates an instance of ToggleScopeCommand.\n   * @param {Context} context - The application context.\n   * @param {Scope} scope - The scope to toggle.\n   * @param {TextViewModel} [textViewModel] - Optional text view model for text-off warnings.\n   * @param {DisplayService} [displayService] - Optional display service for label scope management.\n   */\n  public constructor(\n    context: Context,\n    scope: Scope,\n    textViewModel?: TextViewModel,\n    displayService?: DisplayService,\n  ) {\n    this.context = context;\n    this.scope = scope;\n    this.textViewModel = textViewModel;\n    this.displayService = displayService;\n  }\n\n  /**\n   * Toggles the specified scope in the context.\n   * For label scopes, uses DisplayService to preserve the previous scope on the stack.\n   */\n  public execute(): void {\n    this.textViewModel?.warnIfTextOff();\n\n    // For label scopes, use DisplayService to preserve the previous scope\n    if (\n      (this.scope === Scope.TRACE_LABEL || this.scope === Scope.FIGURE_LABEL)\n      && this.displayService\n    ) {\n      this.displayService.enterLabelScope(this.scope);\n    } else {\n      this.context.toggleScope(this.scope);\n    }\n  }\n}\nexport class ToggleHighContrast implements Command {\n  private readonly highContrastService: HighContrastService;\n\n  public constructor(highContrastService: HighContrastService) {\n    this.highContrastService = highContrastService;\n  }\n\n  public execute(): void {\n    this.highContrastService.toggleHighContrast();\n  }\n}\n","import type { Context } from '@model/context';\nimport type { AudioService } from '@service/audio';\nimport type { AutoplayService } from '@service/autoplay';\nimport type { BrailleService } from '@service/braille';\nimport type { DisplayService } from '@service/display';\nimport type { HighContrastService } from '@service/highContrast';\nimport type { HighlightService } from '@service/highlight';\nimport type { NotificationService } from '@service/notification';\nimport type { RotorNavigationService } from '@service/rotor';\nimport type { TextService } from '@service/text';\nimport type { BrailleViewModel } from '@state/viewModel/brailleViewModel';\nimport type { ChatViewModel } from '@state/viewModel/chatViewModel';\nimport type { CommandPaletteViewModel } from '@state/viewModel/commandPaletteViewModel';\nimport type { GoToExtremaViewModel } from '@state/viewModel/goToExtremaViewModel';\nimport type { HelpViewModel } from '@state/viewModel/helpViewModel';\nimport type { ReviewViewModel } from '@state/viewModel/reviewViewModel';\nimport type { RotorNavigationViewModel } from '@state/viewModel/rotorNavigationViewModel';\nimport type { SettingsViewModel } from '@state/viewModel/settingsViewModel';\nimport type { TextViewModel } from '@state/viewModel/textViewModel';\nimport type { Keys } from '@type/event';\nimport type { Command, CommandContext } from './command';\nimport { Scope } from '@type/event';\nimport {\n  AutoplayBackwardCommand,\n  AutoplayDownwardCommand,\n  AutoplayForwardCommand,\n  AutoplayUpwardCommand,\n  ResetAutoplaySpeedCommand,\n  SpeedDownAutoplayCommand,\n  SpeedUpAutoplayCommand,\n  StopAutoplayCommand,\n} from './autoplay';\nimport {\n  AnnounceCaptionCommand,\n  AnnouncePointCommand,\n  AnnouncePositionCommand,\n  AnnounceSubtitleCommand,\n  AnnounceTitleCommand,\n  AnnounceXCommand,\n  AnnounceYCommand,\n  AnnounceZCommand,\n} from './describe';\nimport { GoToExtremaToggleCommand } from './goTo';\nimport {\n  GoToExtremaCloseCommand,\n  GoToExtremaMoveDownCommand,\n  GoToExtremaMoveUpCommand,\n  GoToExtremaSelectCommand,\n} from './goToExtremaNavigation';\nimport {\n  EnterGridCellCommand,\n  ExitGridCellCommand,\n  GridCellMoveLeftCommand,\n  GridCellMoveRightCommand,\n} from './gridCell';\nimport {\n  ExitBrailleAndSubplotCommand,\n  MoveDownCommand,\n  MoveLeftCommand,\n  MoveRightCommand,\n  MoveToBottomExtremeCommand,\n  MoveToLeftExtremeCommand,\n  MoveToNextTraceCommand,\n  MoveToPrevTraceCommand,\n  MoveToRightExtremeCommand,\n  MoveToSubplotContextCommand,\n  MoveToTopExtremeCommand,\n  MoveToTraceContextCommand,\n  MoveUpCommand,\n} from './move';\nimport {\n  RotorNavigationMoveDownCommand,\n  RotorNavigationMoveLeftCommand,\n  RotorNavigationMoveRightCommand,\n  RotorNavigationMoveUpCommand,\n  RotorNavigationNextNavUnitCommand,\n  RotorNavigationPrevNavUnitCommand,\n} from './rotorNavigation';\nimport {\n  CommandPaletteCloseCommand,\n  CommandPaletteMoveDownCommand,\n  CommandPaletteMoveUpCommand,\n  CommandPaletteSelectCommand,\n  ToggleAudioCommand,\n  ToggleBrailleCommand,\n  ToggleChatCommand,\n  ToggleCommandPaletteCommand,\n  ToggleHelpCommand,\n  ToggleHighContrast,\n  ToggleReviewCommand,\n  ToggleScopeCommand,\n  ToggleSettingsCommand,\n  ToggleTextCommand,\n} from './toggle';\n\n/**\n * Factory for creating command instances based on key input.\n */\nexport class CommandFactory {\n  private readonly context: Context;\n\n  private readonly audioService: AudioService;\n  private readonly autoplayService: AutoplayService;\n  private readonly brailleService: BrailleService;\n  private readonly displayService: DisplayService;\n  private readonly highContrastService: HighContrastService;\n  private readonly highlightService: HighlightService;\n  private readonly notificationService: NotificationService;\n  private readonly rotorService: RotorNavigationService;\n  private readonly textService: TextService;\n\n  private readonly brailleViewModel: BrailleViewModel;\n  private readonly chatViewModel: ChatViewModel;\n  private readonly commandPaletteViewModel: CommandPaletteViewModel;\n  private readonly goToExtremaViewModel: GoToExtremaViewModel;\n  private readonly helpViewModel: HelpViewModel;\n  private readonly reviewViewModel: ReviewViewModel;\n  private readonly settingsViewModel: SettingsViewModel;\n  private readonly textViewModel: TextViewModel;\n  private readonly rotorNavigationViewModel: RotorNavigationViewModel;\n\n  /**\n   * Creates an instance of CommandFactory.\n   * @param {CommandContext} commandContext - The command context containing services and view models.\n   */\n  public constructor(commandContext: CommandContext) {\n    this.context = commandContext.context;\n\n    this.audioService = commandContext.audioService;\n    this.autoplayService = commandContext.autoplayService;\n    this.brailleService = commandContext.brailleService;\n    this.displayService = commandContext.displayService;\n    this.highContrastService = commandContext.highContrastService;\n    this.highlightService = commandContext.highlightService;\n    this.notificationService = commandContext.notificationService;\n    this.rotorService = commandContext.rotorNavigationService;\n    this.textService = commandContext.textService;\n\n    this.brailleViewModel = commandContext.brailleViewModel;\n    this.chatViewModel = commandContext.chatViewModel;\n    this.commandPaletteViewModel = commandContext.commandPaletteViewModel;\n    this.goToExtremaViewModel = commandContext.goToExtremaViewModel;\n    this.helpViewModel = commandContext.helpViewModel;\n    this.reviewViewModel = commandContext.reviewViewModel;\n    this.settingsViewModel = commandContext.settingsViewModel;\n    this.textViewModel = commandContext.textViewModel;\n    this.rotorNavigationViewModel = commandContext.rotorNavigationViewModel;\n  }\n\n  /**\n   * Creates a command instance based on the provided key input.\n   * @param {Keys} command - The key command to create a Command instance for.\n   * @returns {Command} The corresponding command instance for the given key.\n   */\n  public create(command: Keys): Command {\n    switch (command) {\n      case 'MOVE_UP':\n        if (this.context.isRotorEnabled()) {\n          return new RotorNavigationMoveUpCommand(\n            this.rotorNavigationViewModel,\n          );\n        }\n        return new MoveUpCommand(this.context);\n      case 'MOVE_DOWN':\n        if (this.context.isRotorEnabled()) {\n          return new RotorNavigationMoveDownCommand(\n            this.rotorNavigationViewModel,\n          );\n        }\n        return new MoveDownCommand(this.context);\n      case 'MOVE_LEFT':\n        if (this.context.isRotorEnabled()) {\n          return new RotorNavigationMoveLeftCommand(\n            this.rotorNavigationViewModel,\n          );\n        }\n        return new MoveLeftCommand(this.context);\n      case 'MOVE_RIGHT':\n        if (this.context.isRotorEnabled()) {\n          return new RotorNavigationMoveRightCommand(\n            this.rotorNavigationViewModel,\n          );\n        }\n        return new MoveRightCommand(this.context);\n      case 'MOVE_TO_TOP_EXTREME':\n        return new MoveToTopExtremeCommand(this.context);\n      case 'MOVE_TO_BOTTOM_EXTREME':\n        return new MoveToBottomExtremeCommand(this.context);\n      case 'MOVE_TO_LEFT_EXTREME':\n        return new MoveToLeftExtremeCommand(this.context);\n      case 'MOVE_TO_RIGHT_EXTREME':\n        return new MoveToRightExtremeCommand(this.context);\n\n      case 'MOVE_TO_TRACE_CONTEXT':\n        return new MoveToTraceContextCommand(this.context, this.brailleService, this.displayService);\n      case 'MOVE_TO_SUBPLOT_CONTEXT':\n        return new MoveToSubplotContextCommand(this.context);\n      case 'EXIT_BRAILLE_AND_SUBPLOT':\n        return new ExitBrailleAndSubplotCommand(this.context, this.displayService);\n      case 'MOVE_TO_NEXT_TRACE':\n        return new MoveToNextTraceCommand(this.context);\n      case 'MOVE_TO_PREV_TRACE':\n        return new MoveToPrevTraceCommand(this.context);\n\n      case 'TOGGLE_AUDIO':\n        return new ToggleAudioCommand(this.audioService);\n      case 'TOGGLE_BRAILLE':\n        return new ToggleBrailleCommand(this.context, this.brailleViewModel);\n      case 'TOGGLE_TEXT':\n        return new ToggleTextCommand(this.textViewModel);\n      case 'TOGGLE_REVIEW':\n        return new ToggleReviewCommand(this.context, this.reviewViewModel);\n      case 'TOGGLE_HIGH_CONTRAST':\n        return new ToggleHighContrast(this.highContrastService);\n\n      case 'TOGGLE_HELP':\n        return new ToggleHelpCommand(this.helpViewModel);\n      case 'TOGGLE_CHAT':\n        return new ToggleChatCommand(this.chatViewModel);\n      case 'TOGGLE_COMMAND_PALETTE':\n        return new ToggleCommandPaletteCommand(this.commandPaletteViewModel);\n      case 'TOGGLE_SETTINGS':\n        return new ToggleSettingsCommand(this.settingsViewModel);\n\n      case 'GO_TO_EXTREMA_MOVE_UP':\n        return new GoToExtremaMoveUpCommand(this.goToExtremaViewModel);\n      case 'GO_TO_EXTREMA_MOVE_DOWN':\n        return new GoToExtremaMoveDownCommand(this.goToExtremaViewModel);\n      case 'GO_TO_EXTREMA_SELECT':\n        return new GoToExtremaSelectCommand(this.goToExtremaViewModel);\n      case 'GO_TO_EXTREMA_CLOSE':\n        return new GoToExtremaCloseCommand(this.goToExtremaViewModel);\n      case 'GO_TO_EXTREMA_TOGGLE':\n        return new GoToExtremaToggleCommand(\n          this.context,\n          this.goToExtremaViewModel,\n        );\n      case 'COMMAND_PALETTE_MOVE_UP':\n        return new CommandPaletteMoveUpCommand(this.commandPaletteViewModel);\n      case 'COMMAND_PALETTE_MOVE_DOWN':\n        return new CommandPaletteMoveDownCommand(this.commandPaletteViewModel);\n      case 'COMMAND_PALETTE_SELECT':\n        return new CommandPaletteSelectCommand(this.commandPaletteViewModel);\n      case 'COMMAND_PALETTE_CLOSE':\n        return new CommandPaletteCloseCommand(this.commandPaletteViewModel);\n      case 'ANNOUNCE_X':\n        return new AnnounceXCommand(this.context, this.textViewModel, this.audioService, this.textService, this.displayService);\n      case 'ANNOUNCE_Y':\n        return new AnnounceYCommand(this.context, this.textViewModel, this.audioService, this.textService, this.displayService);\n      case 'ANNOUNCE_Z':\n        return new AnnounceZCommand(this.context, this.textViewModel, this.audioService, this.textService, this.displayService);\n      case 'ANNOUNCE_POINT':\n        return new AnnouncePointCommand(\n          this.context,\n          this.audioService,\n          this.highlightService,\n          this.brailleViewModel,\n          this.textViewModel,\n          this.textService,\n          this.displayService,\n        );\n      case 'ANNOUNCE_TITLE':\n        return new AnnounceTitleCommand(this.context, this.textViewModel, this.audioService, this.textService, this.displayService);\n      case 'ANNOUNCE_SUBTITLE':\n        return new AnnounceSubtitleCommand(this.context, this.textViewModel, this.audioService, this.textService, this.displayService);\n      case 'ANNOUNCE_CAPTION':\n        return new AnnounceCaptionCommand(this.context, this.textViewModel, this.audioService, this.textService, this.displayService);\n      case 'ANNOUNCE_POSITION':\n        return new AnnouncePositionCommand(\n          this.context,\n          this.textService,\n          this.textViewModel,\n          this.audioService,\n          this.displayService,\n        );\n\n      case 'ACTIVATE_FIGURE_LABEL_SCOPE':\n        return new ToggleScopeCommand(this.context, Scope.FIGURE_LABEL, this.textViewModel, this.displayService);\n      case 'DEACTIVATE_FIGURE_LABEL_SCOPE':\n        return new ToggleScopeCommand(this.context, Scope.FIGURE_LABEL);\n      case 'ACTIVATE_TRACE_LABEL_SCOPE':\n        return new ToggleScopeCommand(this.context, Scope.TRACE_LABEL, this.textViewModel, this.displayService);\n      case 'DEACTIVATE_TRACE_LABEL_SCOPE':\n        return new ToggleScopeCommand(this.context, Scope.TRACE);\n      case 'AUTOPLAY_UPWARD':\n        return new AutoplayUpwardCommand(this.context, this.autoplayService);\n      case 'AUTOPLAY_DOWNWARD':\n        return new AutoplayDownwardCommand(this.context, this.autoplayService);\n      case 'AUTOPLAY_FORWARD':\n        return new AutoplayForwardCommand(this.context, this.autoplayService);\n      case 'AUTOPLAY_BACKWARD':\n        return new AutoplayBackwardCommand(this.context, this.autoplayService);\n      case 'STOP_AUTOPLAY':\n        return new StopAutoplayCommand(this.autoplayService);\n      case 'SPEED_UP_AUTOPLAY':\n        return new SpeedUpAutoplayCommand(this.autoplayService);\n      case 'SPEED_DOWN_AUTOPLAY':\n        return new SpeedDownAutoplayCommand(this.autoplayService);\n      case 'RESET_AUTOPLAY_SPEED':\n        return new ResetAutoplaySpeedCommand(this.autoplayService);\n      case 'ROTOR_NEXT_NAV':\n        return new RotorNavigationNextNavUnitCommand(\n          this.context,\n          this.rotorNavigationViewModel,\n        );\n      case 'ROTOR_PREV_NAV':\n        return new RotorNavigationPrevNavUnitCommand(\n          this.context,\n          this.rotorNavigationViewModel,\n        );\n\n      // Grid cell navigation\n      case 'ENTER_GRID_CELL':\n        return new EnterGridCellCommand(this.context, this.notificationService);\n      case 'EXIT_GRID_CELL':\n        return new ExitGridCellCommand(this.context);\n      case 'GRID_CELL_MOVE_LEFT':\n        return new GridCellMoveLeftCommand(this.context);\n      case 'GRID_CELL_MOVE_RIGHT':\n        return new GridCellMoveRightCommand(this.context);\n\n      default:\n        throw new Error(`Invalid command name: ${command}`);\n    }\n  }\n}\n","/**\n * Abstract utility class for platform-specific keyboard key name mappings.\n */\nexport abstract class Platform {\n  private constructor() { /* Prevent instantiation */ }\n\n  /**\n   * Detects whether the current platform is macOS.\n   */\n  private static readonly IS_MAC = ((): boolean => {\n    const userAgent = ((navigator as any).userAgentData?.platform ?? navigator.platform).toLowerCase();\n    return userAgent.includes('mac');\n  })();\n\n  /**\n   * Returns the platform-specific name for the control/command key.\n   * @returns 'command' on macOS, 'ctrl' on other platforms\n   */\n  public static get ctrl(): string {\n    return Platform.IS_MAC ? 'command' : 'ctrl';\n  }\n\n  /**\n   * Returns the platform-specific name for the alt/option key.\n   * @returns 'option' on macOS, 'alt' on other platforms\n   */\n  public static get alt(): string {\n    return Platform.IS_MAC ? 'option' : 'alt';\n  }\n\n  /**\n   * Returns the platform-specific name for the enter/return key.\n   * @returns 'return' on macOS, 'enter' on other platforms\n   */\n  public static get enter(): string {\n    return Platform.IS_MAC ? 'return' : 'enter';\n  }\n}\n","import type { CommandContext } from '@command/command';\nimport type { DisplayService } from '@service/display';\nimport type { SettingsService } from '@service/settings';\nimport type { Disposable } from '@type/disposable';\nimport type { KeybindingEntry, Keys } from '@type/event';\nimport type { Observer } from '@type/observable';\nimport type { Settings } from '@type/settings';\nimport { CommandFactory } from '@command/factory';\nimport { Scope } from '@type/event';\nimport { Constant } from '@util/constant';\nimport { Platform } from '@util/platform';\nimport hotkeys from 'hotkeys-js';\n\n/**\n * Helper to create a keybinding entry with required fields.\n */\nfunction key(hotkey: string, description: string, options?: Partial<KeybindingEntry>): KeybindingEntry {\n  return {\n    hotkey,\n    description,\n    ...options,\n  };\n}\n\n/**\n * Keymap configuration for braille mode interactions.\n */\nconst BRAILLE_KEYMAP = {\n  ACTIVATE_TRACE_LABEL_SCOPE: key(`l`, 'Access Labels', { showInHelp: false }),\n  EXIT_BRAILLE_AND_SUBPLOT: key(`esc`, 'Exit Braille Mode', { showInHelp: false }),\n\n  // Autoplay\n  AUTOPLAY_UPWARD: key(`${Platform.ctrl}+shift+up`, 'Autoplay Upward', { helpKey: `${Platform.ctrl} + shift + up` }),\n  AUTOPLAY_DOWNWARD: key(`${Platform.ctrl}+shift+down`, 'Autoplay Downward', { helpKey: `${Platform.ctrl} + shift + down` }),\n  AUTOPLAY_FORWARD: key(`${Platform.ctrl}+shift+right`, 'Autoplay Forward', { helpKey: `${Platform.ctrl} + shift + right` }),\n  AUTOPLAY_BACKWARD: key(`${Platform.ctrl}+shift+left`, 'Autoplay Backward', { helpKey: `${Platform.ctrl} + shift + left` }),\n\n  STOP_AUTOPLAY: key(`${Platform.ctrl}, up, down, left, right`, 'Stop Autoplay', { helpKey: `${Platform.ctrl}` }),\n  SPEED_UP_AUTOPLAY: key(`.`, 'Speed Up Autoplay', { helpKey: '. (period)' }),\n  SPEED_DOWN_AUTOPLAY: key(`,`, 'Speed Down Autoplay', { helpKey: ', (comma)' }),\n  RESET_AUTOPLAY_SPEED: key(`/`, 'Reset Autoplay Speed', { helpKey: '/ (slash)' }),\n\n  // Navigation\n  MOVE_UP: key(`up`, 'Navigate Up'),\n  MOVE_DOWN: key(`down`, 'Navigate Down'),\n  MOVE_RIGHT: key(`right`, 'Navigate Right'),\n  MOVE_LEFT: key(`left`, 'Navigate Left'),\n\n  MOVE_TO_TOP_EXTREME: key(`${Platform.ctrl}+up`, 'Go to Top Extreme', { helpKey: `${Platform.ctrl} + up` }),\n  MOVE_TO_BOTTOM_EXTREME: key(`${Platform.ctrl}+down`, 'Go to Bottom Extreme', { helpKey: `${Platform.ctrl} + down` }),\n  MOVE_TO_LEFT_EXTREME: key(`${Platform.ctrl}+left`, 'Go to Left Extreme', { helpKey: `${Platform.ctrl} + left` }),\n  MOVE_TO_RIGHT_EXTREME: key(`${Platform.ctrl}+right`, 'Go to Right Extreme', { helpKey: `${Platform.ctrl} + right` }),\n\n  MOVE_TO_NEXT_TRACE: key(`pageup`, 'Move to Next Layer'),\n  MOVE_TO_PREV_TRACE: key(`pagedown`, 'Move to Previous Layer'),\n\n  // Modes\n  TOGGLE_BRAILLE: key(`b`, 'Toggle Braille Mode'),\n  TOGGLE_TEXT: key(`t`, 'Toggle Text Mode'),\n  TOGGLE_AUDIO: key(`s`, 'Toggle Sonification Mode'),\n  TOGGLE_REVIEW: key(`r`, 'Toggle Review Mode'),\n  TOGGLE_HIGH_CONTRAST: key(`c`, 'Toggle High Contrast Mode'),\n\n  // Misc\n  TOGGLE_HELP: key(`${Platform.ctrl}+/`, 'Open/Close Help', { helpKey: `${Platform.ctrl} + /` }),\n  TOGGLE_CHAT: key(`shift+/`, 'Open Chat', { helpKey: '?' }),\n  TOGGLE_SETTINGS: key(`${Platform.ctrl}+,`, 'Open Settings', { helpKey: `${Platform.ctrl} + ,` }),\n\n  // Description\n  ANNOUNCE_POINT: key(`space`, 'Replay Current Point'),\n  ANNOUNCE_POSITION: key(`p`, 'Announce Position'),\n\n  // rotor functionality\n  ROTOR_NEXT_NAV: key(`${Platform.alt}+shift+up`, 'Next Navigation Mode (Rotor)', { helpKey: `${Platform.alt} + shift + up` }),\n  ROTOR_PREV_NAV: key(`${Platform.alt}+shift+down`, 'Previous Navigation Mode (Rotor)', { helpKey: `${Platform.alt} + shift + down` }),\n} as const;\n\n/**\n * Keymap configuration for chat interface interactions.\n */\nconst CHAT_KEYMAP = {\n  // Misc\n  TOGGLE_CHAT: key(`esc`, 'Close Chat', { showInHelp: false }),\n} as const;\n\n/**\n * Keymap configuration for figure label scope interactions.\n */\nconst FIGURE_LABEL_KEYMAP = {\n  DEACTIVATE_FIGURE_LABEL_SCOPE: key(`escape`, 'Exit Label Mode', { showInHelp: false }),\n\n  // Description\n  ANNOUNCE_TITLE: key(`t`, 'Announce Plot Title'),\n  ANNOUNCE_SUBTITLE: key(`s`, 'Announce Subtitle'),\n  ANNOUNCE_CAPTION: key(`c`, 'Announce Caption'),\n\n  // Misc\n  TOGGLE_HELP: key(`${Platform.ctrl}+/`, 'Open/Close Help', { helpKey: `${Platform.ctrl} + /` }),\n} as const;\n\n/**\n * Keymap configuration for help menu interactions.\n */\nconst HELP_KEYMAP = {\n  // Misc\n  TOGGLE_HELP: key(`esc`, 'Close Help', { showInHelp: false }),\n} as const;\n\n/**\n * Keymap configuration for subplot scope interactions.\n */\nconst SUBPLOT_KEYMAP = {\n  ACTIVATE_FIGURE_LABEL_SCOPE: key(`l`, 'Access Labels', { showInHelp: false }),\n\n  // Description\n  ANNOUNCE_TITLE: key(`t`, 'Announce Title'),\n  ANNOUNCE_POINT: key(`space`, 'Announce Current Subplot'),\n  ANNOUNCE_POSITION: key(`p`, 'Announce Position'),\n\n  // Navigation\n  MOVE_UP: key(`up`, 'Move Up'),\n  MOVE_DOWN: key(`down`, 'Move Down'),\n  MOVE_RIGHT: key(`right`, 'Move Right'),\n  MOVE_LEFT: key(`left`, 'Move Left'),\n\n  MOVE_TO_TOP_EXTREME: key(`${Platform.ctrl}+up`, 'Go to Top Extreme', { helpKey: `${Platform.ctrl} + up` }),\n  MOVE_TO_BOTTOM_EXTREME: key(`${Platform.ctrl}+down`, 'Go to Bottom Extreme', { helpKey: `${Platform.ctrl} + down` }),\n  MOVE_TO_LEFT_EXTREME: key(`${Platform.ctrl}+left`, 'Go to Left Extreme', { helpKey: `${Platform.ctrl} + left` }),\n  MOVE_TO_RIGHT_EXTREME: key(`${Platform.ctrl}+right`, 'Go to Right Extreme', { helpKey: `${Platform.ctrl} + right` }),\n\n  MOVE_TO_TRACE_CONTEXT: key(`${Platform.enter}`, 'Activate Current Subplot', { helpKey: `${Platform.enter}` }),\n\n  TOGGLE_HIGH_CONTRAST: key(`c`, 'Toggle High Contrast Mode'),\n\n  // Misc\n  TOGGLE_HELP: key(`${Platform.ctrl}+/`, 'Open/Close Help', { helpKey: `${Platform.ctrl} + /` }),\n  TOGGLE_CHAT: key(`shift+/`, 'Open Chat', { helpKey: '?' }),\n  TOGGLE_SETTINGS: key(`${Platform.ctrl}+,`, 'Open Settings', { helpKey: `${Platform.ctrl} + ,` }),\n} as const;\n\n/**\n * Keymap configuration for trace label scope interactions.\n */\nconst TRACE_LABEL_KEYMAP = {\n  DEACTIVATE_TRACE_LABEL_SCOPE: key(`escape`, 'Exit Label Mode', { showInHelp: false }),\n\n  // Description\n  ANNOUNCE_X: key(`x`, 'Announce X Label'),\n  ANNOUNCE_Y: key(`y`, 'Announce Y Label'),\n  ANNOUNCE_Z: key(`z`, 'Announce Z Label'),\n  ANNOUNCE_TITLE: key(`t`, 'Announce Plot Title'),\n  ANNOUNCE_SUBTITLE: key(`s`, 'Announce Subtitle'),\n  ANNOUNCE_CAPTION: key(`c`, 'Announce Caption'),\n\n  // Misc\n  TOGGLE_HELP: key(`${Platform.ctrl}+/`, 'Open/Close Help', { helpKey: `${Platform.ctrl} + /` }),\n} as const;\n\n/**\n * Keymap configuration for review mode interactions.\n */\nconst REVIEW_KEYMAP = {\n  // Modes\n  TOGGLE_BRAILLE: key(`b`, 'Toggle Braille Mode'),\n  TOGGLE_REVIEW: key(`r`, 'Exit Review Mode'),\n\n  // Allowed actions\n  ALLOW_DEFAULT: key(`up, down, left, right,\n    ${Platform.ctrl}+up, ${Platform.ctrl}+down,\n    ${Platform.ctrl}+left, ${Platform.ctrl}+right,\n    pageup, pagedown, home, end,\n    tab, ${Platform.ctrl}+a, ${Platform.ctrl}+c`, 'Standard Text Selection', { showInHelp: false }),\n} as const;\n\n/**\n * Keymap configuration for settings interface interactions.\n */\nconst SETTINGS_KEYMAP = {\n  // Misc\n  TOGGLE_SETTINGS: key(`esc`, 'Close Settings', { showInHelp: false }),\n} as const;\n\n/**\n * Keymap configuration for trace scope interactions and navigation.\n */\nconst TRACE_KEYMAP = {\n  ACTIVATE_TRACE_LABEL_SCOPE: key(`l`, 'Access Labels', { showInHelp: false }),\n\n  // Autoplay\n  AUTOPLAY_UPWARD: key(`${Platform.ctrl}+shift+up`, 'Autoplay Upward', { helpKey: `${Platform.ctrl} + shift + up` }),\n  AUTOPLAY_DOWNWARD: key(`${Platform.ctrl}+shift+down`, 'Autoplay Downward', { helpKey: `${Platform.ctrl} + shift + down` }),\n  AUTOPLAY_FORWARD: key(`${Platform.ctrl}+shift+right`, 'Autoplay Forward', { helpKey: `${Platform.ctrl} + shift + right` }),\n  AUTOPLAY_BACKWARD: key(`${Platform.ctrl}+shift+left`, 'Autoplay Backward', { helpKey: `${Platform.ctrl} + shift + left` }),\n\n  STOP_AUTOPLAY: key(`${Platform.ctrl}, up, down, left, right`, 'Stop Autoplay', { helpKey: `${Platform.ctrl}` }),\n  SPEED_UP_AUTOPLAY: key(`.`, 'Speed Up Autoplay', { helpKey: '. (period)' }),\n  SPEED_DOWN_AUTOPLAY: key(`,`, 'Speed Down Autoplay', { helpKey: ', (comma)' }),\n  RESET_AUTOPLAY_SPEED: key(`/`, 'Reset Autoplay Speed', { helpKey: '/ (slash)' }),\n\n  // Navigation\n  MOVE_UP: key(`up`, 'Navigate Up'),\n  MOVE_DOWN: key(`down`, 'Navigate Down'),\n  MOVE_RIGHT: key(`right`, 'Navigate Right'),\n  MOVE_LEFT: key(`left`, 'Navigate Left'),\n\n  MOVE_TO_TOP_EXTREME: key(`${Platform.ctrl}+up`, 'Go to Top Extreme', { helpKey: `${Platform.ctrl} + up` }),\n  MOVE_TO_BOTTOM_EXTREME: key(`${Platform.ctrl}+down`, 'Go to Bottom Extreme', { helpKey: `${Platform.ctrl} + down` }),\n  MOVE_TO_LEFT_EXTREME: key(`${Platform.ctrl}+left`, 'Go to Left Extreme', { helpKey: `${Platform.ctrl} + left` }),\n  MOVE_TO_RIGHT_EXTREME: key(`${Platform.ctrl}+right`, 'Go to Right Extreme', { helpKey: `${Platform.ctrl} + right` }),\n\n  MOVE_TO_SUBPLOT_CONTEXT: key(`esc`, 'Return to Subplot', { showInHelp: false }),\n  MOVE_TO_NEXT_TRACE: key(`pageup`, 'Move to Next Layer'),\n  MOVE_TO_PREV_TRACE: key(`pagedown`, 'Move to Previous Layer'),\n\n  // Modes\n  TOGGLE_BRAILLE: key(`b`, 'Toggle Braille Mode'),\n  TOGGLE_TEXT: key(`t`, 'Toggle Text Mode'),\n  TOGGLE_AUDIO: key(`s`, 'Toggle Sonification Mode'),\n  TOGGLE_REVIEW: key(`r`, 'Toggle Review Mode'),\n  TOGGLE_HIGH_CONTRAST: key(`c`, 'Toggle High Contrast Mode'),\n\n  // Misc\n  TOGGLE_HELP: key(`${Platform.ctrl}+/`, 'Open/Close Help', { helpKey: `${Platform.ctrl} + /` }),\n  TOGGLE_CHAT: key(`shift+/`, 'Open Chat', { helpKey: '?' }),\n  TOGGLE_COMMAND_PALETTE: key(`${Platform.ctrl}+shift+p`, 'Open Command Palette', { helpKey: `${Platform.ctrl} + shift + p` }),\n  TOGGLE_SETTINGS: key(`${Platform.ctrl}+,`, 'Open Settings', { helpKey: `${Platform.ctrl} + ,` }),\n\n  // Description\n  ANNOUNCE_POINT: key(`space`, 'Replay Current Point'),\n  ANNOUNCE_POSITION: key(`p`, 'Announce Position'),\n\n  // Go To functionality\n  GO_TO_EXTREMA_TOGGLE: key(`g`, 'Go To Extrema'),\n\n  // rotor functionality\n  ROTOR_NEXT_NAV: key(`${Platform.alt}+shift+up`, 'Next Navigation Mode (Rotor)', { helpKey: `${Platform.alt} + shift + up` }),\n  ROTOR_PREV_NAV: key(`${Platform.alt}+shift+down`, 'Previous Navigation Mode (Rotor)', { helpKey: `${Platform.alt} + shift + down` }),\n\n  // Grid cell navigation (enter grid cell when in GRID_MODE)\n  ENTER_GRID_CELL: key(`${Platform.enter}`, 'Enter Grid Cell', { showInHelp: false }),\n} as const;\n\n/**\n * Keymap configuration for extrema navigation modal interactions.\n */\nconst GO_TO_EXTREMA_KEYMAP = {\n  // Navigation within the modal (standard UI, not shown in help)\n  GO_TO_EXTREMA_MOVE_UP: key('up', 'Navigate Up', { showInHelp: false }),\n  GO_TO_EXTREMA_MOVE_DOWN: key('down', 'Navigate Down', { showInHelp: false }),\n  GO_TO_EXTREMA_SELECT: key('enter', 'Select', { showInHelp: false }),\n  GO_TO_EXTREMA_CLOSE: key('esc', 'Close', { showInHelp: false }),\n  GO_TO_EXTREMA_TOGGLE: key('g', 'Go To Extrema', { showInHelp: false }),\n} as const;\n\n/**\n * Keymap configuration for command palette modal interactions.\n */\nconst COMMAND_PALETTE_KEYMAP = {\n  // Navigation within the modal (standard UI, not shown in help)\n  COMMAND_PALETTE_MOVE_UP: key('up', 'Navigate Up', { showInHelp: false }),\n  COMMAND_PALETTE_MOVE_DOWN: key('down', 'Navigate Down', { showInHelp: false }),\n  COMMAND_PALETTE_SELECT: key('enter', 'Select', { showInHelp: false }),\n  COMMAND_PALETTE_CLOSE: key('esc', 'Close', { showInHelp: false }),\n} as const;\n\n/**\n * Keymap configuration for grid cell point navigation.\n */\nconst GRID_CELL_KEYMAP = {\n  // Navigation within grid cell points\n  GRID_CELL_MOVE_LEFT: key('left', 'Navigate Left in Cell', { showInHelp: false }),\n  GRID_CELL_MOVE_RIGHT: key('right', 'Navigate Right in Cell', { showInHelp: false }),\n  EXIT_GRID_CELL: key('esc', 'Exit Grid Cell', { showInHelp: false }),\n} as const;\n\n/**\n * Maps each application scope to its corresponding keymap configuration.\n */\nexport const SCOPED_KEYMAP = {\n  [Scope.BRAILLE]: BRAILLE_KEYMAP,\n  [Scope.CHAT]: CHAT_KEYMAP,\n  [Scope.COMMAND_PALETTE]: COMMAND_PALETTE_KEYMAP,\n  [Scope.FIGURE_LABEL]: FIGURE_LABEL_KEYMAP,\n  [Scope.GO_TO_EXTREMA]: GO_TO_EXTREMA_KEYMAP,\n  [Scope.GRID_CELL]: GRID_CELL_KEYMAP,\n  [Scope.HELP]: HELP_KEYMAP,\n  [Scope.REVIEW]: REVIEW_KEYMAP,\n  [Scope.SETTINGS]: SETTINGS_KEYMAP,\n  [Scope.SUBPLOT]: SUBPLOT_KEYMAP,\n  [Scope.TRACE]: TRACE_KEYMAP,\n  [Scope.TRACE_LABEL]: TRACE_LABEL_KEYMAP,\n} as const;\n\n/**\n * Type representing a scope's keymap (command key to keybinding entry mapping).\n */\nexport type ScopeKeymap = Record<string, KeybindingEntry>;\n\n/**\n * Type representing the complete keymap structure for all scopes.\n */\nexport type Keymap = {\n  [K in Scope]: (typeof SCOPED_KEYMAP)[K];\n};\n\n/**\n * Gets the keymap for a specific scope with proper typing.\n * @param scope - The scope to get the keymap for.\n * @returns The keymap for the scope.\n */\nexport function getKeymapForScope(scope: Scope): ScopeKeymap {\n  return SCOPED_KEYMAP[scope] as ScopeKeymap;\n}\n\n/**\n * Service for registering and managing keyboard bindings across application scopes.\n */\nexport class KeybindingService {\n  private readonly commandFactory: CommandFactory;\n\n  /**\n   * Creates a new KeybindingService instance with command factory.\n   * @param commandContext - The context for creating and executing commands\n   */\n  public constructor(commandContext: CommandContext) {\n    this.commandFactory = new CommandFactory(commandContext);\n  }\n\n  /**\n   * Registers all keyboard bindings and sets the initial scope.\n   * @param initialScope - The initial application scope to activate\n   */\n  public register(initialScope: Scope): void {\n    hotkeys.filter = (event: KeyboardEvent) => {\n      const target = event.target as HTMLElement;\n      if (target.tagName.toLowerCase() === Constant.INPUT) {\n        // Allow keybindings for MAIDR review input.\n        return target.id.startsWith(Constant.REVIEW_INPUT);\n      } else if (target.tagName.toLowerCase() === Constant.TEXT_AREA) {\n        // Allow keybindings only for MAIDR braille text area.\n        return target.id.startsWith(Constant.BRAILLE_TEXT_AREA);\n      } else {\n        // Allow keybindings for all other non-editable elements.\n        return true;\n      }\n    };\n\n    // Register all bindings.\n    for (const [scope, keymap] of Object.entries(SCOPED_KEYMAP) as [\n      Scope,\n      Keymap[Scope],\n    ][]) {\n      for (const [commandName, entry] of Object.entries(keymap as Record<string, KeybindingEntry>) as [\n        Keys,\n        KeybindingEntry,\n      ][]) {\n        const hotkey = entry.hotkey;\n\n        // https://github.com/jaywcjlove/hotkeys-js/issues/172\n        // Need to remove once the issue is resolved.\n        if (commandName === 'STOP_AUTOPLAY') {\n          hotkeys('*', Scope.TRACE, (event: KeyboardEvent): void => {\n            if (hotkeys.command || hotkeys.ctrl) {\n              const command = this.commandFactory.create(commandName);\n              command.execute(event);\n            }\n          });\n        }\n\n        hotkeys(hotkey, { scope }, (event: KeyboardEvent): void => {\n          if (commandName !== 'ALLOW_DEFAULT') {\n            event.preventDefault();\n            const command = this.commandFactory.create(commandName);\n            command.execute(event);\n          }\n        });\n      }\n    }\n\n    hotkeys.setScope(initialScope);\n  }\n\n  /**\n   * Unregisters all keyboard bindings.\n   */\n  public unregister(): void {\n    hotkeys.unbind();\n  }\n}\n\n/**\n * Service for managing mouse interactions with plot elements based on hover settings.\n */\nexport class Mousebindingservice implements Observer<Settings>, Disposable {\n  private mouseListener!: (event: MouseEvent) => void;\n\n  private readonly commandContext: CommandContext;\n  private hoverMode: string = 'none';\n  private readonly plot: HTMLElement;\n  private readonly settingsService: SettingsService;\n\n  /**\n   * Creates a new Mousebindingservice instance and registers as a settings observer.\n   * @param commandContext - The command context for executing navigation commands\n   * @param settingsService - The settings service to observe for hover mode changes\n   * @param displayService - The display service providing the plot element\n   */\n  public constructor(\n    commandContext: CommandContext,\n    settingsService: SettingsService,\n    displayService: DisplayService,\n  ) {\n    this.commandContext = commandContext;\n    this.settingsService = settingsService;\n    const initialSettings = settingsService.loadSettings();\n    this.hoverMode = initialSettings.general.hoverMode;\n    this.plot = displayService.plot;\n\n    // Register as observer to listen for settings changes\n    this.settingsService.addObserver(this);\n  }\n\n  /**\n   * Registers mouse event listeners based on the current hover mode setting.\n   */\n  public registerEvents(): void {\n    // Create the mouse listener if it doesn't exist\n    if (!this.mouseListener) {\n      this.mouseListener = (event: MouseEvent) => {\n        const x = event.clientX;\n        const y = event.clientY;\n\n        this.commandContext.context.moveToPoint(x, y);\n      };\n    }\n\n    // Remove any existing listeners first to avoid duplicates\n    this.removeEventListeners();\n\n    // Add appropriate listeners based on hover mode\n    if (this.hoverMode === 'pointermove') {\n      this.plot.addEventListener('pointermove', this.mouseListener);\n    } else if (this.hoverMode === 'click') {\n      this.plot.addEventListener('click', this.mouseListener);\n    }\n  }\n\n  /**\n   * Removes all mouse event listeners from the plot element.\n   */\n  private removeEventListeners(): void {\n    if (this.mouseListener) {\n      this.plot.removeEventListener('pointermove', this.mouseListener);\n      this.plot.removeEventListener('click', this.mouseListener);\n    }\n  }\n\n  /**\n   * Unregisters all mouse event listeners.\n   */\n  public unregister(): void {\n    this.removeEventListeners();\n  }\n\n  /**\n   * Updates mouse bindings when settings change, particularly hover mode.\n   * @param settings - The updated settings object\n   */\n  public update(settings: Settings): void {\n    const newHoverMode = settings.general.hoverMode;\n\n    // Only update if the hover mode has changed\n    if (this.hoverMode !== newHoverMode) {\n      this.hoverMode = newHoverMode;\n\n      // Re-register events with the new hover mode\n      this.registerEvents();\n    }\n  }\n\n  /**\n   * Cleans up event listeners and removes observer registration.\n   */\n  public dispose(): void {\n    this.unregister();\n    this.settingsService.removeObserver(this);\n  }\n}\n","import type { CommandContext } from '@command/command';\nimport type { Disposable } from '@type/disposable';\nimport type { Keys, Scope } from '@type/event';\nimport { CommandFactory } from '@command/factory';\nimport { Emitter } from '@type/event';\nimport { SCOPED_KEYMAP } from './keybinding';\n\n/**\n * Executes commands based on key bindings within the current scope.\n *\n * The current scope is always read live from the underlying Context,\n * so it stays in sync when Context.toggleScope() is called.\n * An Emitter is provided so React hooks can subscribe to scope changes.\n */\nexport class CommandExecutor implements Disposable {\n  private readonly commandFactory: CommandFactory;\n  private readonly commandContext: CommandContext;\n  private readonly onScopeChangeEmitter = new Emitter<Scope>();\n  private lastEmittedScope: Scope;\n\n  /**\n   * Event that fires when the current scope changes.\n   * Subscribers (e.g. React hooks) can use this to reactively update.\n   */\n  public readonly onScopeChange = this.onScopeChangeEmitter.event;\n\n  /**\n   * Creates a new CommandExecutor instance.\n   * @param {CommandContext} commandContext - The command execution context\n   * @param {Scope} initialScope - The initial scope for command execution\n   */\n  public constructor(commandContext: CommandContext, initialScope: Scope) {\n    this.commandFactory = new CommandFactory(commandContext);\n    this.commandContext = commandContext;\n    this.lastEmittedScope = initialScope;\n  }\n\n  /**\n   * Gets the command execution context.\n   * @returns {CommandContext} The command context\n   */\n  public getContext(): CommandContext {\n    return this.commandContext;\n  }\n\n  /**\n   * Executes a command based on the provided key if it's valid for the current scope.\n   * @param {Keys} commandKey - The key representing the command to execute\n   */\n  public executeCommand(commandKey: Keys): void {\n    const currentScope = this.getCurrentScope();\n    // Check if command is valid for current scope\n    const scopeKeymap = SCOPED_KEYMAP[currentScope];\n    if (!scopeKeymap || !(commandKey in scopeKeymap)) {\n      return;\n    }\n\n    try {\n      const command = this.commandFactory.create(commandKey);\n      command.execute();\n\n      // After command execution, scope may have changed (e.g. toggle commands).\n      // Check and notify subscribers if it did.\n      this.emitIfScopeChanged();\n    } catch (error) {\n      console.error(`Failed to execute command ${commandKey}:`, error);\n    }\n  }\n\n  /**\n   * Gets the current scope from the live Context.\n   * @returns {Scope} The current scope\n   */\n  public getCurrentScope(): Scope {\n    return this.commandContext.context.scope;\n  }\n\n  /**\n   * Checks whether the scope has changed since the last emission and fires\n   * the onScopeChange event if so. Called after command execution.\n   */\n  private emitIfScopeChanged(): void {\n    const currentScope = this.getCurrentScope();\n    if (currentScope !== this.lastEmittedScope) {\n      this.lastEmittedScope = currentScope;\n      this.onScopeChangeEmitter.fire(currentScope);\n    }\n  }\n\n  /**\n   * Disposes the emitter resources.\n   */\n  public dispose(): void {\n    this.onScopeChangeEmitter.dispose();\n  }\n}\n","import type { Context } from '@model/context';\nimport type { DisplayService } from '@service/display';\nimport { Scope } from '@type/event';\n\n/**\n * Service for managing the command palette modal interface.\n */\nexport class CommandPaletteService {\n  private readonly context: Context;\n  private readonly display: DisplayService;\n\n  /**\n   * Creates a new CommandPaletteService instance.\n   * @param {Context} context - The application context\n   * @param {DisplayService} display - The display service for managing UI focus\n   */\n  public constructor(context: Context, display: DisplayService) {\n    this.context = context;\n    this.display = display;\n  }\n\n  /**\n   * Toggles the command palette modal to show or hide it.\n   */\n  public toggle(): void {\n    // Change scope to COMMAND_PALETTE to show the modal\n    if (this.context.scope !== Scope.COMMAND_PALETTE) {\n      this.display.toggleFocus(Scope.COMMAND_PALETTE);\n    }\n  }\n\n  /**\n   * Returns focus to the TRACE scope to enable plot navigation.\n   */\n  public returnToTraceScope(): void {\n    // Return to TRACE scope so plot navigation works again\n    if (this.context.scope !== Scope.TRACE) {\n      this.display.toggleFocus(Scope.COMMAND_PALETTE);\n    }\n  }\n}\n","import type { Maidr } from '../../type/grammar';\n\n/**\n * Detects whether an SVG element lives inside a Plotly container.\n *\n * @param plot - The DOM element that carries the `maidr` attribute.\n * @returns `true` when the element is (or is inside) a Plotly-rendered chart.\n */\nexport function isPlotlyPlot(plot: HTMLElement): boolean {\n  return (\n    plot.classList.contains('main-svg')\n    || plot.closest('.js-plotly-plot') !== null\n  );\n}\n\n/**\n * Normalize a Plotly-rendered SVG so that maidr's core logic can treat it\n * the same as a matplotlib SVG.\n *\n * Responsibilities handled here (all Plotly-specific):\n *\n * 1. **Subplot background wrapping** – wrap bglayer `<rect>` elements in\n *    `<g id=\"axes_…\">` groups so maidr can highlight subplots.\n * 2. **Stroke mirroring** – maidr clones elements as hidden backups and\n *    applies stroke to clones; a MutationObserver mirrors those changes\n *    back onto the visible originals.\n * 3. **CSS layout fixes** – Plotly's SVG is `position:absolute` inside a\n *    `position:relative` container; inject overrides so maidr's\n *    `<article>/<figure>` wrapper doesn't collapse.\n * 4. **React-container positioning** – push maidr's react-container below\n *    the chart by observing when it appears and adding padding.\n * 5. **Modebar accessibility** – remove Plotly's toolbar from the tab\n *    order and accessibility tree.\n * 6. **Click-to-focus** – forward clicks on Plotly's overlay SVGs to\n *    maidr's focusable wrapper.\n *\n * @param svg   - The `<svg class=\"main-svg\">` element.\n * @param schema - The parsed MAIDR JSON schema.\n */\nexport function normalizePlotlySvg(\n  svg: SVGSVGElement,\n  schema: Maidr,\n): void {\n  // Resolve the plotly container for scoped queries.\n  const plotlyDiv = svg.closest('.js-plotly-plot') as HTMLElement | null;\n\n  wrapSubplotBackgrounds(svg, schema);\n  injectPlotlyStyles();\n  setupLayoutObserver(svg, plotlyDiv);\n  fixModebarTabOrder(plotlyDiv);\n  setupClickToFocus(plotlyDiv);\n}\n\n// ---------------------------------------------------------------------------\n// 1. Subplot background wrapping\n// ---------------------------------------------------------------------------\n\n/**\n * Wrap Plotly bglayer rects in `<g>` elements for subplot highlighting.\n *\n * maidr detects multi-subplot figures via `g[id^=\"axes_\"]` and highlights\n * the selected subplot by applying stroke to the first rect/path child.\n * We wrap the *original* Plotly rects (which have visible fill) so the\n * stroke border appears on the filled background.\n */\nfunction wrapSubplotBackgrounds(svg: SVGSVGElement, schema: Maidr): void {\n  const bglayer = svg.querySelector('.bglayer');\n  if (!bglayer || bglayer.hasAttribute('data-maidr')) {\n    return;\n  }\n  bglayer.setAttribute('data-maidr', '1');\n\n  // Deduplicate rects by position and sort row-major.\n  const bgRects = Array.from(bglayer.querySelectorAll<SVGRectElement>(':scope > rect'));\n  const seen = new Set<string>();\n  const unique: SVGRectElement[] = [];\n  for (const rect of bgRects) {\n    const key = `${rect.getAttribute('x')},${rect.getAttribute('y')}`;\n    if (!seen.has(key)) {\n      seen.add(key);\n      unique.push(rect);\n    }\n  }\n  unique.sort((a, b) => {\n    const ay = Number.parseFloat(a.getAttribute('y') ?? '0');\n    const by = Number.parseFloat(b.getAttribute('y') ?? '0');\n    if (Math.abs(ay - by) > 1)\n      return ay - by;\n    return (\n      Number.parseFloat(a.getAttribute('x') ?? '0')\n      - Number.parseFloat(b.getAttribute('x') ?? '0')\n    );\n  });\n\n  // Extract selector IDs from schema (row-major order).\n  const selectorIds: string[] = [];\n  const subplots = schema.subplots ?? [];\n  for (const row of subplots) {\n    for (const cell of row) {\n      const sel = cell.selector;\n      if (sel) {\n        const m = sel.match(/id=\"([^\"]+)\"/);\n        if (m)\n          selectorIds.push(m[1]);\n      }\n    }\n  }\n\n  // Wrap each unique rect in a <g> with the subplot ID.\n  const ns = 'http://www.w3.org/2000/svg';\n  const count = Math.min(unique.length, selectorIds.length);\n  for (let i = 0; i < count; i++) {\n    const rect = unique[i];\n    const g = document.createElementNS(ns, 'g');\n    g.setAttribute('id', selectorIds[i]);\n    rect.parentNode!.insertBefore(g, rect);\n    g.appendChild(rect);\n  }\n\n  // Mirror stroke changes from hidden clones to visible originals.\n  setupStrokeMirror(bglayer as SVGGElement);\n}\n\n/**\n * maidr clones each `<g id=\"axes_…\">` as a hidden backup and applies\n * stroke to the clone.  This observer mirrors stroke/stroke-width\n * changes from hidden clones back to the visible originals so the\n * user sees the highlight.\n */\nfunction setupStrokeMirror(bglayer: SVGGElement): void {\n  const observer = new MutationObserver((mutations) => {\n    for (const mut of mutations) {\n      if (mut.type !== 'attributes')\n        continue;\n      const target = mut.target as SVGElement;\n      const hiddenGroup = target.closest(\n        'g[id^=\"axes_\"][visibility=\"hidden\"]',\n      );\n      if (!hiddenGroup)\n        continue;\n\n      const visibleGroup = bglayer.querySelector(\n        `g[id=\"${hiddenGroup.id}\"]:not([visibility])`,\n      );\n      if (!visibleGroup)\n        continue;\n\n      const visibleRect = visibleGroup.querySelector('rect');\n      if (!visibleRect)\n        continue;\n\n      const stroke = target.getAttribute('stroke');\n      if (stroke) {\n        visibleRect.setAttribute('stroke', stroke);\n        visibleRect.setAttribute(\n          'stroke-width',\n          target.getAttribute('stroke-width') ?? '4',\n        );\n      } else {\n        visibleRect.removeAttribute('stroke');\n        visibleRect.removeAttribute('stroke-width');\n      }\n    }\n  });\n\n  observer.observe(bglayer, {\n    attributes: true,\n    attributeFilter: ['stroke', 'stroke-width'],\n    subtree: true,\n  });\n\n  // Store reference for disposal.\n  storeMutationObserver(bglayer, observer);\n}\n\n// ---------------------------------------------------------------------------\n// 2. CSS layout fixes\n// ---------------------------------------------------------------------------\n\n/**\n * Inject CSS overrides so maidr's `<article>/<figure>` wrapper doesn't\n * collapse inside Plotly's absolutely-positioned SVG container.\n *\n * Scoped to `[data-maidr-auto]` to avoid affecting non-MAIDR plotly charts.\n */\nfunction injectPlotlyStyles(): void {\n  if (document.querySelector('style[data-maidr-plotly]')) {\n    return;\n  }\n  const style = document.createElement('style');\n  style.setAttribute('data-maidr-plotly', '1');\n  style.textContent = `\n    .js-plotly-plot[data-maidr-auto] .svg-container { overflow: visible !important; }\n    .js-plotly-plot .svg-container article[id^=\"maidr-article\"] {\n      position: relative !important;\n      width: 100% !important;\n    }\n    .js-plotly-plot .svg-container article[id^=\"maidr-article\"] > figure {\n      position: relative !important;\n      width: 100% !important;\n    }\n    .js-plotly-plot[data-maidr-auto] { overflow: visible !important; }\n    .js-plotly-plot .svg-container:focus-within {\n      outline: 2px solid #4A90D9;\n      outline-offset: 2px;\n    }\n    figure[id^=\"maidr-figure\"] > div[tabindex=\"0\"]:focus {\n      outline: none !important;\n    }\n  `;\n  document.head.appendChild(style);\n}\n\n// ---------------------------------------------------------------------------\n// 3. React-container positioning\n// ---------------------------------------------------------------------------\n\n/**\n * After maidr wraps the SVG, it remains `position:absolute` (Plotly\n * default) so the react-container renders at y=0, hidden behind the\n * chart.  Watch for the react-container to appear and push it below\n * the chart with padding-top.\n *\n * @param svg        - The main-svg element.\n * @param plotlyDiv  - The `.js-plotly-plot` container (for scoped queries).\n */\nfunction setupLayoutObserver(svg: SVGSVGElement, plotlyDiv: HTMLElement | null): void {\n  const scope = plotlyDiv ?? document;\n\n  function fix(): void {\n    const rc = scope.querySelector<HTMLElement>(\n      'div[id^=\"react-container-\"]',\n    );\n    if (rc && svg) {\n      const h\n        = svg.getAttribute('height')\n          ?? String(svg.getBoundingClientRect().height);\n      if (h) {\n        rc.style.paddingTop = `${Number.parseFloat(h)}px`;\n        requestAnimationFrame(() => {\n          try {\n            window.dispatchEvent(new Event('resize'));\n          } catch {\n            // ignore\n          }\n        });\n      }\n    }\n  }\n\n  function observe(): void {\n    const article = scope.querySelector(\n      'article[id^=\"maidr-article\"]',\n    );\n    if (!article) {\n      requestAnimationFrame(observe);\n      return;\n    }\n    const observer = new MutationObserver(() => fix());\n    observer.observe(article, {\n      childList: true,\n      subtree: true,\n    });\n\n    // Store reference for disposal.\n    storeMutationObserver(article, observer);\n  }\n\n  // Defer until maidr has created its article wrapper.\n  requestAnimationFrame(observe);\n}\n\n// ---------------------------------------------------------------------------\n// 4. Modebar accessibility\n// ---------------------------------------------------------------------------\n\n/**\n * Remove Plotly's modebar (toolbar) from the tab order and accessibility\n * tree so Tab goes directly to maidr's focusable div.\n *\n * @param plotlyDiv - The `.js-plotly-plot` container (for scoped queries).\n */\nfunction fixModebarTabOrder(plotlyDiv: HTMLElement | null): void {\n  const scope = plotlyDiv ?? document;\n  const modebar = scope.querySelector('.modebar-container');\n  if (!modebar)\n    return;\n\n  modebar.setAttribute('aria-hidden', 'true');\n  modebar.setAttribute('tabindex', '-1');\n\n  const focusable = modebar.querySelectorAll<HTMLElement>(\n    'a, button, input, [tabindex]',\n  );\n  for (const el of focusable) {\n    el.setAttribute('tabindex', '-1');\n  }\n}\n\n// ---------------------------------------------------------------------------\n// 5. Click-to-focus delegation\n// ---------------------------------------------------------------------------\n\n/**\n * Plotly renders overlay SVGs that capture mouse events.  After maidr\n * wraps `svg.main-svg`, these overlays are siblings outside the wrapper.\n * Forward clicks to maidr's focusable div.\n *\n * @param plotlyDiv - The `.js-plotly-plot` container (for scoped queries).\n */\nfunction setupClickToFocus(plotlyDiv: HTMLElement | null): void {\n  const container = plotlyDiv\n    ?? document.querySelector('.js-plotly-plot')\n    ?? document.querySelector('.svg-container');\n  if (!container)\n    return;\n\n  container.addEventListener(\n    'click',\n    () => {\n      const wrapper = container.querySelector<HTMLElement>(\n        'figure[id^=\"maidr-figure\"] > div[tabindex=\"0\"]',\n      );\n      if (wrapper)\n        wrapper.focus();\n    },\n    true,\n  );\n}\n\n// ---------------------------------------------------------------------------\n// MutationObserver disposal tracking\n// ---------------------------------------------------------------------------\n\n/**\n * WeakMap to track MutationObservers attached to DOM elements.\n * Using WeakMap ensures observers are automatically cleaned up when\n * elements are garbage collected, and avoids the issue of storing\n * JS properties that can't be queried via CSS selectors.\n */\nconst observerRegistry = new WeakMap<Element, MutationObserver[]>();\n\n/**\n * Tracks all elements that have observers registered, so we can\n * iterate them during disposal. WeakSet would lose references.\n */\nconst trackedElements = new Set<Element>();\n\n/**\n * Stores a MutationObserver reference on a DOM element so it can be\n * disconnected later (e.g. when the Controller disposes).\n */\nfunction storeMutationObserver(el: Element, observer: MutationObserver): void {\n  const stored = observerRegistry.get(el) ?? [];\n  stored.push(observer);\n  observerRegistry.set(el, stored);\n  trackedElements.add(el);\n}\n\n/**\n * Disconnects all MAIDR MutationObservers associated with a DOM element\n * and its descendants. Call this during disposal to prevent memory leaks.\n */\nexport function disconnectPlotlyObservers(root: Element): void {\n  // Disconnect observers on root\n  const rootObservers = observerRegistry.get(root);\n  if (rootObservers) {\n    for (const observer of rootObservers) {\n      observer.disconnect();\n    }\n    observerRegistry.delete(root);\n    trackedElements.delete(root);\n  }\n\n  // Disconnect observers on any tracked descendants\n  for (const el of trackedElements) {\n    if (root.contains(el)) {\n      const observers = observerRegistry.get(el);\n      if (observers) {\n        for (const observer of observers) {\n          observer.disconnect();\n        }\n        observerRegistry.delete(el);\n      }\n      trackedElements.delete(el);\n    }\n  }\n}\n","import type { Context } from '@model/context';\nimport type { TextService } from '@service/text';\nimport type { Disposable } from '@type/disposable';\nimport type { Event, Focus } from '@type/event';\nimport { Emitter, Scope } from '@type/event';\nimport { Constant } from '@util/constant';\nimport { Stack } from '@util/stack';\nimport { disconnectPlotlyObservers, isPlotlyPlot } from '../adapters/plotly';\n\n/**\n * Type for traces that support ensureInitialized method.\n */\ninterface TraceWithEnsureInitialized {\n  ensureInitialized: () => void;\n}\n\n/**\n * Type guard to check if trace supports ensureInitialized.\n * @param {unknown} trace - The trace object to check\n * @returns {boolean} True if trace has ensureInitialized method\n */\nfunction hasEnsureInitialized(trace: unknown): trace is TraceWithEnsureInitialized {\n  return trace !== null\n    && typeof trace === 'object'\n    && 'ensureInitialized' in trace\n    && typeof (trace as any).ensureInitialized === 'function';\n}\n\n/**\n * Event emitted when focus changes.\n */\ninterface FocusChangedEvent {\n  value: Focus;\n}\n\n/**\n * Service for managing display focus, ARIA labels, and UI state transitions.\n */\nexport class DisplayService implements Disposable {\n  private readonly context: Context;\n  private readonly focusStack: Stack<Focus>;\n\n  public readonly plot: HTMLElement;\n\n  private readonly onChangeEmitter: Emitter<FocusChangedEvent>;\n  public readonly onChange: Event<FocusChangedEvent>;\n\n  private hasEnteredInteractive: boolean = false;\n  private readonly textService: TextService;\n  private isReturningFromModeToggle: boolean = false;\n  private textChangeDisposer: Disposable | null = null;\n  private hasClearedOnFirstNav: boolean = false;\n  private pendingFocusChangeTimer: ReturnType<typeof setTimeout> | null = null;\n\n  /**\n   * Creates a new DisplayService instance.\n   * @param {Context} context - The application context\n   * @param {HTMLElement} plot - The plot element to manage\n   * @param {TextService} textService - The text service for generating ARIA labels\n   */\n  public constructor(context: Context, plot: HTMLElement, textService: TextService) {\n    this.context = context;\n    this.focusStack = new Stack<Focus>();\n    this.focusStack.push(this.context.scope as Focus);\n\n    this.plot = plot;\n    this.textService = textService;\n\n    this.onChangeEmitter = new Emitter<FocusChangedEvent>();\n    this.onChange = this.onChangeEmitter.event;\n\n    this.removeInstruction();\n\n    // One-shot: clear aria-label on the first TextService-driven navigation update\n    this.textChangeDisposer = this.textService.onChange(() => {\n      if (!this.hasClearedOnFirstNav) {\n        this.plot.removeAttribute(Constant.ARIA_LABEL);\n        this.hasClearedOnFirstNav = true;\n      }\n    });\n  }\n\n  /**\n   * Cleans up resources and restores initial ARIA labels.\n   */\n  public dispose(): void {\n    this.addInstruction();\n\n    if (this.pendingFocusChangeTimer !== null) {\n      clearTimeout(this.pendingFocusChangeTimer);\n      this.pendingFocusChangeTimer = null;\n    }\n\n    this.textChangeDisposer?.dispose();\n    this.textChangeDisposer = null;\n\n    this.onChangeEmitter.dispose();\n\n    // Disconnect Plotly-specific MutationObservers to prevent memory leaks.\n    // Only affects Plotly charts; no-op for matplotlib or other chart types.\n    if (isPlotlyPlot(this.plot)) {\n      disconnectPlotlyObservers(this.plot);\n    }\n  }\n\n  /**\n   * Gets the instruction text for the plot.\n   * @param {boolean} [includeClickPrompt] - Whether to include the click prompt\n   * @returns {string} The instruction text\n   */\n  public getInstruction(includeClickPrompt: boolean = true): string {\n    return this.context.getInstruction(includeClickPrompt);\n  }\n\n  /**\n   * Adds instruction ARIA labels to the plot element.\n   */\n  private addInstruction(): void {\n    this.plot.setAttribute(Constant.ARIA_LABEL, this.getInstruction());\n    this.plot.setAttribute(Constant.TITLE, this.getInstruction());\n    this.plot.setAttribute(Constant.ROLE, Constant.IMAGE);\n    this.plot.tabIndex = 0;\n  }\n\n  /**\n   * Removes or updates instruction ARIA labels when entering interactive mode.\n   */\n  private removeInstruction(): void {\n    const instruction = this.hasEnteredInteractive ? '' : this.getInstruction(false);\n    if (instruction) {\n      this.plot.setAttribute(Constant.ARIA_LABEL, instruction);\n      this.plot.removeAttribute(Constant.TITLE);\n      this.plot.setAttribute(Constant.ROLE, Constant.APPLICATION);\n      this.plot.tabIndex = 0;\n    } else {\n      this.plot.removeAttribute(Constant.ARIA_LABEL);\n      this.plot.removeAttribute(Constant.TITLE);\n      this.plot.setAttribute(Constant.ROLE, Constant.APPLICATION);\n      this.plot.tabIndex = 0;\n    }\n  }\n\n  /**\n   * Gets the ARIA label text for the current trace position.\n   * @returns {string} The formatted trace position text or instruction\n   */\n  private getTraceAriaLabel(): string {\n    const formatted = this.textService.format(this.context.state);\n    if (formatted && formatted.trim().length > 0) {\n      return formatted;\n    }\n    return this.getInstruction(false);\n  }\n\n  /**\n   * Enters label scope (TRACE_LABEL or FIGURE_LABEL) while preserving\n   * the current scope on the stack. This allows proper restoration\n   * when exiting label scope.\n   *\n   * Note: Label scopes are not pushed to focusStack (which only holds Focus types).\n   * The previous scope is preserved in focusStack and used when exiting.\n   * @param {Scope} labelScope - The label scope to enter (TRACE_LABEL or FIGURE_LABEL)\n   */\n  public enterLabelScope(labelScope: Scope): void {\n    // Don't modify focusStack - label scopes aren't Focus types\n    // Just switch the hotkeys scope; focusStack retains the previous scope\n    this.context.toggleScope(labelScope);\n  }\n\n  /**\n   * Exits label scope and returns to the previous scope that was\n   * active before entering label mode.\n   *\n   * Uses the focusStack to determine the correct scope to return to,\n   * which preserves the scope that was active before entering label mode\n   * (e.g., TRACE, BRAILLE, etc.).\n   */\n  public exitLabelScope(): void {\n    // Get the previous scope from focusStack (or default to TRACE if empty)\n    const previousScope = this.focusStack.peek() ?? Scope.TRACE;\n    this.context.toggleScope(previousScope);\n  }\n\n  /**\n   * Syncs the focusStack to match the current scope without triggering\n   * a full focus change event. Use this when the scope has changed via\n   * Context (e.g., entering a subplot) but focusStack needs to stay in sync.\n   * @param {Focus} scope - The scope to set as the current focus\n   */\n  public syncFocusStack(scope: Focus): void {\n    this.focusStack.clear();\n    this.focusStack.push(scope);\n  }\n\n  /**\n   * Toggles focus between different scopes and manages the focus stack.\n   * @param {Focus} focus - The focus scope to toggle to\n   */\n  public toggleFocus(focus: Focus): void {\n    // Treat modal scopes as mode toggles so we suppress instruction re-announce on return\n    this.isReturningFromModeToggle\n      = focus === 'BRAILLE'\n        || focus === 'REVIEW'\n        || focus === 'GO_TO_EXTREMA'\n        || focus === 'COMMAND_PALETTE'\n        || focus === 'SETTINGS'\n        || focus === 'CHAT'\n        || focus === 'HELP';\n\n    // Clear any existing instruction label when entering a modal\n    if (this.isReturningFromModeToggle) {\n      this.plot.removeAttribute(Constant.ARIA_LABEL);\n    }\n\n    if (!this.focusStack.removeLast(focus)) {\n      this.focusStack.push(focus);\n    }\n\n    let newScope = this.focusStack.peek()!;\n\n    // When returning from a modal, the focusStack base may be stale.\n    // For example, the user may have entered a subplot (SUBPLOT → TRACE)\n    // before opening the modal, but the focusStack base was never updated.\n    // Derive the correct navigation scope from the context's active plot element.\n    if (this.isReturningFromModeToggle && (newScope === 'SUBPLOT' || newScope === 'TRACE')) {\n      const activeType = this.context.state.type;\n      const correctScope = (activeType === 'trace' ? Scope.TRACE : Scope.SUBPLOT) as Focus;\n      if (newScope !== correctScope) {\n        this.focusStack.clear();\n        this.focusStack.push(correctScope);\n        newScope = correctScope;\n      }\n    }\n\n    this.context.toggleScope(newScope);\n    this.updateFocus(newScope);\n  }\n\n  /**\n   * Resets the focus stack to the given scope and moves focus to the plot\n   * element. Does not fire a display change event — the caller must call\n   * {@link notifyFocusChange} after completing any follow-up scope\n   * transitions (e.g. exitSubplot) to avoid emitting a stale intermediate\n   * scope.\n   * @param {Focus} targetScope - The scope the focus stack should reflect\n   *   after the modal is dismissed. The stack is reset to this value so it\n   *   stays in sync with the hotkeys scope set by the caller.\n   *\n   * **Important:** The caller must ensure the hotkeys scope is set to\n   * `targetScope` (e.g. via `context.exitSubplot()`) before or immediately\n   * after this call. This method only updates the focus stack and DOM focus;\n   * it does not change the hotkeys scope.\n   */\n  public dismissModalScope(targetScope: Focus): void {\n    this.plot.focus();\n    this.focusStack.clear();\n    this.focusStack.push(targetScope);\n  }\n\n  /**\n   * Fires a deferred display change event with the given scope. The\n   * deferral (setTimeout 0) gives screen readers one event-loop cycle to\n   * process the preceding focus change before React unmounts the modal\n   * element (e.g. the braille textarea). Without this, NVDA/JAWS exit\n   * focus mode when the focused element disappears from the DOM.\n   *\n   * Cancels any previously pending notification to avoid stale events\n   * from rapid repeated calls.\n   * @param {Focus} scope - The scope to emit as the new display focus\n   */\n  public notifyFocusChange(scope: Focus): void {\n    if (this.pendingFocusChangeTimer !== null) {\n      clearTimeout(this.pendingFocusChangeTimer);\n    }\n    this.pendingFocusChangeTimer = setTimeout(() => {\n      this.pendingFocusChangeTimer = null;\n      this.onChangeEmitter.fire({ value: scope });\n    }, 0);\n  }\n\n  /**\n   * Updates the focus state and initializes the active trace if needed.\n   * @param {Focus} newScope - The new focus scope\n   */\n  private updateFocus(newScope: Focus): void {\n    if (newScope === 'TRACE' || newScope === 'SUBPLOT') {\n      this.plot.tabIndex = 0;\n      setTimeout((): void => {\n        // Only run first-entry init when NOT returning from a modal\n        if (!this.isReturningFromModeToggle) {\n          // Ensure the active trace is initialized exactly once\n          const active = this.context.active;\n          if (active && hasEnsureInitialized(active)) {\n            active.ensureInitialized();\n          }\n          // Clear initial instruction label on first entry into interactive\n          if (!this.hasEnteredInteractive) {\n            this.plot.removeAttribute(Constant.ARIA_LABEL);\n          }\n        } else {\n          // On return from modal, skip setting any aria-label and ensure it's cleared\n          this.isReturningFromModeToggle = false;\n          this.plot.removeAttribute(Constant.ARIA_LABEL);\n        }\n\n        this.plot.setAttribute(Constant.ROLE, Constant.APPLICATION);\n        this.plot.focus();\n        if (!this.hasEnteredInteractive) {\n          this.hasEnteredInteractive = true;\n        }\n        // Emit change after focus updates\n        this.onChangeEmitter.fire({ value: newScope });\n      }, 0);\n    } else {\n      this.onChangeEmitter.fire({ value: newScope });\n    }\n  }\n}\n","import type { AxisFormat, FormatFunction, FormatType } from '@type/grammar';\n\n/**\n * Value type that can be formatted - single value or array of values.\n */\nexport type FormattableValue = number | string | (number | string)[];\n\n/**\n * Default format function - converts value to string.\n * Strings pass through unchanged, numbers are stringified.\n *\n * @param value - The value to format\n * @returns String representation of the value\n */\nexport const defaultFormat: FormatFunction = (value: number | string): string => {\n  return `${value}`;\n};\n\n/**\n * Pre-built formatter factories for common formatting patterns.\n * Used internally by type specifiers.\n */\nexport const formatters = {\n  /**\n   * Creates a currency formatter.\n   *\n   * @param currency - ISO 4217 currency code (default: 'USD')\n   * @param decimals - Number of decimal places (default: 2)\n   * @param locale - BCP 47 locale string (default: 'en-US')\n   * @returns Format function that formats numbers as currency\n   *\n   * @example\n   * formatters.currency('USD', 2)(1234.5) // \"$1,234.50\"\n   * formatters.currency('EUR', 0, 'de-DE')(1234) // \"1.234 EUR\"\n   */\n  currency: (currency = 'USD', decimals = 2, locale = 'en-US'): FormatFunction =>\n    (value: number | string): string => {\n      const num = typeof value === 'number' ? value : Number.parseFloat(String(value));\n      return new Intl.NumberFormat(locale, {\n        style: 'currency',\n        currency,\n        minimumFractionDigits: decimals,\n        maximumFractionDigits: decimals,\n      }).format(num);\n    },\n\n  /**\n   * Creates a percentage formatter.\n   *\n   * @param decimals - Number of decimal places (default: 1)\n   * @returns Format function that formats numbers as percentages\n   *\n   * @example\n   * formatters.percent(1)(0.156) // \"15.6%\"\n   * formatters.percent(0)(0.75) // \"75%\"\n   */\n  percent: (decimals = 1): FormatFunction =>\n    (value: number | string): string => {\n      const num = typeof value === 'number' ? value : Number.parseFloat(String(value));\n      return `${(num * 100).toFixed(decimals)}%`;\n    },\n\n  /**\n   * Creates a date formatter using Intl.DateTimeFormat.\n   *\n   * @param options - Intl.DateTimeFormat options\n   * @param locale - BCP 47 locale string (default: 'en-US')\n   * @returns Format function that formats values as dates\n   *\n   * @example\n   * formatters.date({ month: 'short', day: 'numeric' })('2023-01-15') // \"Jan 15\"\n   * formatters.date({ year: 'numeric', month: 'long' })(1704067200000) // \"January 2024\"\n   */\n  date: (options?: Intl.DateTimeFormatOptions, locale = 'en-US'): FormatFunction =>\n    (value: number | string): string => {\n      const date = new Date(value);\n      return new Intl.DateTimeFormat(locale, options).format(date);\n    },\n\n  /**\n   * Creates a number formatter with optional decimal places and grouping.\n   *\n   * @param decimals - Number of decimal places (default: 0)\n   * @param locale - BCP 47 locale string (default: 'en-US')\n   * @returns Format function that formats numbers with grouping\n   *\n   * @example\n   * formatters.number(2)(1234567.89) // \"1,234,567.89\"\n   * formatters.number(0, 'de-DE')(1234567) // \"1.234.567\"\n   */\n  number: (decimals = 0, locale = 'en-US'): FormatFunction =>\n    (value: number | string): string => {\n      const num = typeof value === 'number' ? value : Number.parseFloat(String(value));\n      return new Intl.NumberFormat(locale, {\n        minimumFractionDigits: decimals,\n        maximumFractionDigits: decimals,\n      }).format(num);\n    },\n\n  /**\n   * Creates a scientific notation formatter.\n   *\n   * @param decimals - Number of decimal places in mantissa (default: 2)\n   * @returns Format function that formats numbers in scientific notation\n   *\n   * @example\n   * formatters.scientific(2)(1234567) // \"1.23e+6\"\n   * formatters.scientific(3)(0.000123) // \"1.230e-4\"\n   */\n  scientific: (decimals = 2): FormatFunction =>\n    (value: number | string): string => {\n      const num = typeof value === 'number' ? value : Number.parseFloat(String(value));\n      return num.toExponential(decimals);\n    },\n\n  /**\n   * Creates a fixed decimal places formatter.\n   *\n   * @param decimals - Number of decimal places (default: 2)\n   * @returns Format function that formats numbers with fixed decimals\n   *\n   * @example\n   * formatters.fixed(2)(3.14159) // \"3.14\"\n   * formatters.fixed(0)(3.7) // \"4\"\n   */\n  fixed: (decimals = 2): FormatFunction =>\n    (value: number | string): string => {\n      const num = typeof value === 'number' ? value : Number.parseFloat(String(value));\n      return num.toFixed(decimals);\n    },\n};\n\n/**\n * Formatting utility functions for MAIDR value display.\n * Provides format resolution, application, and pre-built formatter factories.\n */\nexport abstract class FormatUtil {\n  private constructor() { /* Prevent instantiation */ }\n\n  /**\n   * Resolves a format function from an AxisFormat configuration.\n   *\n   * Priority order:\n   * 1. `function` - Function body string (custom logic)\n   * 2. `type` - Format type specifier (common patterns)\n   * 3. Default (toString)\n   *\n   * @param axisFormat - Optional axis format configuration\n   * @returns Resolved format function\n   */\n  static resolveFormat(axisFormat?: AxisFormat): FormatFunction {\n    if (!axisFormat) {\n      return defaultFormat;\n    }\n\n    // Priority 1: Function body string\n    if (axisFormat.function) {\n      try {\n        // eslint-disable-next-line no-new-func\n        return new Function('value', axisFormat.function) as FormatFunction;\n      } catch {\n        console.warn('Invalid format function string:', axisFormat.function);\n        return defaultFormat;\n      }\n    }\n\n    // Priority 2: Type specifier\n    if (axisFormat.type) {\n      return this.resolveTypeSpecifier(axisFormat);\n    }\n\n    // Fallback: default format\n    return defaultFormat;\n  }\n\n  /**\n   * Resolves a format type specifier to a format function.\n   *\n   * @param axisFormat - Axis format configuration with type specifier\n   * @returns Format function for the specified type\n   */\n  private static resolveTypeSpecifier(axisFormat: AxisFormat): FormatFunction {\n    const { type, decimals, currency, locale, dateOptions } = axisFormat;\n\n    switch (type as FormatType) {\n      case 'currency':\n        return formatters.currency(currency ?? 'USD', decimals ?? 2, locale ?? 'en-US');\n      case 'percent':\n        return formatters.percent(decimals ?? 1);\n      case 'fixed':\n        return formatters.fixed(decimals ?? 2);\n      case 'number':\n        return formatters.number(decimals ?? 0, locale ?? 'en-US');\n      case 'date':\n        return formatters.date(dateOptions, locale ?? 'en-US');\n      case 'scientific':\n        return formatters.scientific(decimals ?? 2);\n      default:\n        return defaultFormat;\n    }\n  }\n\n  /**\n   * Wraps a format function with edge case handling.\n   * Handles null, undefined, and NaN values gracefully.\n   *\n   * @param format - The format function to wrap\n   * @param options - Options for handling edge cases\n   * @param options.missingText - Text to display for missing/invalid values (default: 'missing')\n   * @returns Wrapped format function with edge case handling\n   */\n  static wrapFormat(\n    format: FormatFunction,\n    options?: {\n      missingText?: string;\n    },\n  ): FormatFunction {\n    const { missingText = 'missing' } = options ?? {};\n\n    return (value: number | string): string => {\n      // Handle null/undefined (shouldn't happen with TypeScript, but defensive)\n      if (value === null || value === undefined) {\n        return missingText;\n      }\n\n      // Handle NaN for numbers\n      if (typeof value === 'number' && Number.isNaN(value)) {\n        return missingText;\n      }\n\n      // Normal case: apply the format function\n      return format(value);\n    };\n  }\n\n  /**\n   * Applies a format function to a single value or array of values.\n   * When given an array, formats each element individually.\n   *\n   * @param value - Single value or array of values to format\n   * @param formatter - Format function to apply\n   * @returns Formatted string or array of formatted strings\n   */\n  static applyFormat(\n    value: FormattableValue,\n    formatter: FormatFunction,\n  ): string | string[] {\n    if (Array.isArray(value)) {\n      return value.map(v => formatter(v));\n    }\n    return formatter(value);\n  }\n}\n","import type { Disposable } from '@type/disposable';\nimport type { FormatConfig, FormatFunction, Maidr } from '@type/grammar';\nimport type { AxisType } from '@type/state';\nimport type { FormattableValue } from '@util/format';\nimport { defaultFormat, FormatUtil } from '@util/format';\n\nexport type { AxisType };\n\n/**\n * Internal structure for storing resolved format functions per layer.\n */\ninterface LayerFormatters {\n  x: FormatFunction;\n  y: FormatFunction;\n  z: FormatFunction;\n}\n\n/**\n * Service for managing value formatting across all layers in a MAIDR figure.\n *\n * The FormatterService extracts format configurations from layer definitions\n * and provides methods to format values consistently throughout the application.\n *\n * @example\n * ```typescript\n * // In Controller\n * const formatterService = new FormatterService(maidrData);\n *\n * // Format a value\n * const formatted = formatterService.formatValue(128.47, 'layer-1', 'y');\n * // Returns \"$128.47\" if layer has currency formatter\n *\n * // Format an array (e.g., boxplot outliers)\n * const formattedArray = formatterService.formatValue(\n *   [-9.795, 6.057, 14.736],\n *   'layer-1',\n *   'y'\n * );\n * // Returns [\"-9.80\", \"6.06\", \"14.74\"] if layer has 2-decimal formatter\n * ```\n */\nexport class FormatterService implements Disposable {\n  /**\n   * Map of layer IDs to their resolved format functions.\n   */\n  private readonly formatters: Map<string, LayerFormatters>;\n\n  /**\n   * Creates a new FormatterService from MAIDR data.\n   * Extracts format configurations from all layers and resolves format functions.\n   *\n   * @param maidr - The MAIDR data containing layers with optional format configs\n   */\n  public constructor(maidr: Maidr) {\n    this.formatters = new Map();\n    this.initializeFormatters(maidr);\n  }\n\n  /**\n   * Extracts and resolves format configurations from all layers in the MAIDR data.\n   */\n  private initializeFormatters(maidr: Maidr): void {\n    // Iterate through all subplots and layers\n    for (const subplotRow of maidr.subplots) {\n      for (const subplot of subplotRow) {\n        for (const layer of subplot.layers) {\n          const layerId = layer.id;\n          // Format config is now nested inside axes\n          const formatConfig = layer.axes?.format;\n\n          // Resolve format functions with fallback to defaults\n          const layerFormatters: LayerFormatters = {\n            x: this.resolveAxisFormat(formatConfig?.x),\n            y: this.resolveAxisFormat(formatConfig?.y),\n            z: this.resolveAxisFormat(formatConfig?.z),\n          };\n\n          this.formatters.set(layerId, layerFormatters);\n        }\n      }\n    }\n  }\n\n  /**\n   * Resolves an axis format configuration to a format function.\n   * Wraps the resolved function with edge case handling.\n   */\n  private resolveAxisFormat(axisFormat?: FormatConfig[keyof FormatConfig]): FormatFunction {\n    const baseFormat = FormatUtil.resolveFormat(axisFormat);\n    return FormatUtil.wrapFormat(baseFormat);\n  }\n\n  /**\n   * Gets the format function for a specific layer and axis.\n   *\n   * @param layerId - The ID of the layer\n   * @param axis - The axis type ('x', 'y', or 'z')\n   * @returns The format function, or defaultFormat if not found\n   */\n  public getFormatter(layerId: string, axis: AxisType): FormatFunction {\n    const layerFormatters = this.formatters.get(layerId);\n    if (!layerFormatters) {\n      return defaultFormat;\n    }\n    return layerFormatters[axis];\n  }\n\n  /**\n   * Checks if a layer has a custom formatter for the specified axis.\n   *\n   * @param layerId - The ID of the layer\n   * @param axis - The axis type ('x', 'y', or 'z')\n   * @returns True if a custom formatter is configured\n   */\n  public hasCustomFormatter(layerId: string, axis: AxisType): boolean {\n    const layerFormatters = this.formatters.get(layerId);\n    if (!layerFormatters) {\n      return false;\n    }\n    // Check if the formatter is not the default\n    return layerFormatters[axis] !== defaultFormat;\n  }\n\n  /**\n   * Formats a value (single or array) using the formatter for the specified layer and axis.\n   *\n   * This is the primary method for formatting values in the application.\n   * It handles both single values and arrays (e.g., boxplot outliers).\n   *\n   * @param value - The value or array of values to format\n   * @param layerId - The ID of the layer\n   * @param axis - The axis type ('x', 'y', or 'z')\n   * @returns Formatted string or array of formatted strings\n   *\n   * @example\n   * // Single value\n   * formatValue(128.47, 'layer-1', 'y') // \"$128.47\"\n   *\n   * // Array of values (boxplot outliers)\n   * formatValue([-9.795, 6.057], 'layer-1', 'y') // [\"-9.80\", \"6.06\"]\n   */\n  public formatValue(\n    value: FormattableValue,\n    layerId: string,\n    axis: AxisType,\n  ): string | string[] {\n    const formatter = this.getFormatter(layerId, axis);\n    return FormatUtil.applyFormat(value, formatter);\n  }\n\n  /**\n   * Formats a single value (not an array) and always returns a string.\n   * Use this when you're certain the value is not an array.\n   *\n   * @param value - The single value to format\n   * @param layerId - The ID of the layer\n   * @param axis - The axis type ('x', 'y', or 'z')\n   * @returns Formatted string\n   */\n  public formatSingleValue(\n    value: number | string,\n    layerId: string,\n    axis: AxisType,\n  ): string {\n    const formatter = this.getFormatter(layerId, axis);\n    return formatter(value);\n  }\n\n  /**\n   * Formats an array of values and always returns a string array.\n   * Use this when you're certain the value is an array.\n   *\n   * @param values - The array of values to format\n   * @param layerId - The ID of the layer\n   * @param axis - The axis type ('x', 'y', or 'z')\n   * @returns Array of formatted strings\n   */\n  public formatArrayValue(\n    values: (number | string)[],\n    layerId: string,\n    axis: AxisType,\n  ): string[] {\n    const formatter = this.getFormatter(layerId, axis);\n    return values.map(v => formatter(v));\n  }\n\n  /**\n   * Releases resources held by the service.\n   */\n  public dispose(): void {\n    this.formatters.clear();\n  }\n}\n","import type { Context } from '@model/context';\nimport type { DisplayService } from '@service/display';\nimport type { TraceState } from '@type/state';\nimport { AbstractTrace } from '@model/abstract';\nimport { Scope } from '@type/event';\n\nexport class GoToExtremaService {\n  private readonly context: Context;\n  private readonly display: DisplayService;\n\n  public constructor(context: Context, display: DisplayService) {\n    this.context = context;\n    this.display = display;\n  }\n\n  public toggle(state: TraceState): void {\n    if (state.empty) {\n      return;\n    }\n\n    const activeTrace = this.context.active;\n    if (activeTrace && this.isExtremaNavigable(activeTrace)) {\n      // Ensure we're in GO_TO_EXTREMA scope\n      if (this.context.scope !== Scope.GO_TO_EXTREMA) {\n        this.display.toggleFocus(Scope.GO_TO_EXTREMA);\n      }\n    }\n  }\n\n  public isExtremaNavigable(trace: unknown): trace is AbstractTrace {\n    return trace instanceof AbstractTrace && trace.supportsExtremaNavigation();\n  }\n\n  public returnToTraceScope(): void {\n    // Ensure we return to TRACE scope\n    if (this.context.scope !== Scope.TRACE) {\n      this.display.toggleFocus(Scope.GO_TO_EXTREMA);\n    }\n  }\n}\n","import type { Context } from '@model/context';\nimport type { DisplayService } from '@service/display';\nimport type { KeybindingEntry } from '@type/event';\nimport type { HelpMenuItem } from '@type/help';\nimport { getKeymapForScope } from '@service/keybinding';\nimport { Scope } from '@type/event';\n\n/**\n * Configuration for nested scopes that are entered via a key from parent scope.\n */\ninterface NestedScopeConfig {\n  scope: Scope;\n  entryKey: string;\n}\n\n/**\n * Mapping of parent scopes to their nested scopes.\n */\nconst NESTED_SCOPE_CONFIG: Partial<Record<Scope, NestedScopeConfig[]>> = {\n  [Scope.TRACE]: [\n    { scope: Scope.TRACE_LABEL, entryKey: 'l' },\n  ],\n  [Scope.SUBPLOT]: [\n    { scope: Scope.FIGURE_LABEL, entryKey: 'l' },\n  ],\n};\n\n/**\n * Generates help menu items from a keymap configuration.\n * Each command gets its own entry (no grouping).\n * @param keymap - The keymap configuration object\n * @returns Array of help menu items\n */\nfunction generateHelpMenuFromKeymap(keymap: Record<string, KeybindingEntry>): HelpMenuItem[] {\n  const items: HelpMenuItem[] = [];\n\n  for (const entry of Object.values(keymap)) {\n    // Skip entries explicitly marked as hidden\n    if (entry.showInHelp === false) {\n      continue;\n    }\n\n    items.push({\n      description: entry.description,\n      key: entry.helpKey ?? entry.hotkey,\n    });\n  }\n\n  return items;\n}\n\n/**\n * Generates help menu items for a nested scope with entry key prefix.\n * Only includes commands that are unique to the nested scope (not in parent).\n * @param nestedKeymap - The nested scope keymap configuration\n * @param entryKey - The key used to enter the nested scope (e.g., 'l')\n * @param parentKeymap - The parent scope keymap to check for duplicates\n * @returns Array of help menu items with prefixed keys\n */\nfunction generateNestedScopeHelp(\n  nestedKeymap: Record<string, KeybindingEntry>,\n  entryKey: string,\n  parentKeymap: Record<string, KeybindingEntry>,\n): HelpMenuItem[] {\n  const items: HelpMenuItem[] = [];\n  const parentCommandKeys = new Set(Object.keys(parentKeymap));\n\n  for (const [commandKey, entry] of Object.entries(nestedKeymap)) {\n    // Skip commands that exist in parent scope (they're not nested-specific)\n    if (parentCommandKeys.has(commandKey)) {\n      continue;\n    }\n\n    // Skip entries explicitly marked as hidden\n    if (entry.showInHelp === false) {\n      continue;\n    }\n\n    // Skip the exit/deactivate commands (they use 'escape')\n    const hotkey = entry.helpKey ?? entry.hotkey;\n    if (hotkey === 'escape' || hotkey === 'esc') {\n      continue;\n    }\n\n    items.push({\n      description: entry.description,\n      key: `${entryKey} ${hotkey}`,\n    });\n  }\n\n  return items;\n}\n\n/**\n * Generates a complete help menu for a scope including nested scope entries.\n * @param scope - The parent scope\n * @returns Array of help menu items\n */\nfunction generateCompleteHelpMenu(scope: Scope): HelpMenuItem[] {\n  const keymap = getKeymapForScope(scope);\n  const items = generateHelpMenuFromKeymap(keymap);\n\n  // Add nested scope entries (only commands unique to nested scope)\n  const nestedConfigs = NESTED_SCOPE_CONFIG[scope];\n  if (nestedConfigs) {\n    for (const config of nestedConfigs) {\n      const nestedKeymap = getKeymapForScope(config.scope);\n      const nestedItems = generateNestedScopeHelp(nestedKeymap, config.entryKey, keymap);\n      items.push(...nestedItems);\n    }\n  }\n\n  return items;\n}\n\n/**\n * Service for managing context-sensitive help menus across different application scopes.\n */\nexport class HelpService {\n  private readonly context: Context;\n  private readonly display: DisplayService;\n\n  private readonly scopedMenuItems: Partial<Record<Scope, HelpMenuItem[]>>;\n\n  /**\n   * Creates a new HelpService instance with auto-generated scoped menu configurations.\n   * @param context - The application context for determining current scope\n   * @param display - The display service for toggling help UI\n   */\n  public constructor(context: Context, display: DisplayService) {\n    this.context = context;\n    this.display = display;\n\n    // Auto-generate help menus from keymaps including nested scopes\n    const traceHelpMenu = generateCompleteHelpMenu(Scope.TRACE);\n    const subplotHelpMenu = generateCompleteHelpMenu(Scope.SUBPLOT);\n\n    this.scopedMenuItems = {\n      [Scope.TRACE]: traceHelpMenu,\n      [Scope.TRACE_LABEL]: traceHelpMenu,\n      [Scope.BRAILLE]: traceHelpMenu,\n      [Scope.SUBPLOT]: subplotHelpMenu,\n      [Scope.FIGURE_LABEL]: subplotHelpMenu,\n    };\n  }\n\n  /**\n   * Retrieves help menu items for the current application scope.\n   * @returns Array of help menu items or empty array if no items for current scope\n   */\n  public getMenuItems(): HelpMenuItem[] {\n    return this.scopedMenuItems[this.context.scope] ?? [];\n  }\n\n  /**\n   * Toggles the visibility of the help menu interface.\n   */\n  public toggle(): void {\n    this.display.toggleFocus(Scope.HELP);\n  }\n}\n","/**\n * PatternService - Manages SVG pattern fills for accessibility\n *\n * Provides reusable patterns for low vision users to differentiate\n * chart elements beyond color alone. Patterns are injected into SVG\n * <defs> sections and referenced via fill=\"url(#pattern-id)\".\n */\n\nconst SVG_NS = 'http://www.w3.org/2000/svg';\n\n/**\n * Available pattern types for accessibility differentiation.\n * Each pattern is visually distinct to maximize differentiability.\n */\nexport type PatternType\n  = | 'diagonal-stripes'\n    | 'square-grid'\n    | 'dots'\n    | 'horizontal-lines'\n    | 'diamonds';\n\n/**\n * Configuration for creating a pattern instance\n */\nexport interface PatternConfig {\n  /** The pattern type to create */\n  type: PatternType;\n  /** Base/background color of the pattern */\n  baseColor: string;\n  /** Foreground/pattern element color */\n  patternColor: string;\n  /** Optional scale factor (default: 1) */\n  scale?: number;\n}\n\n/**\n * Pattern definition containing the SVG pattern element and its ID\n */\ninterface PatternDefinition {\n  id: string;\n  element: SVGPatternElement;\n}\n\n/**\n * Internal pattern template generator function type\n */\ntype PatternGenerator = (\n  baseColor: string,\n  patternColor: string,\n  scale: number,\n) => SVGPatternElement;\n\nexport class PatternService {\n  private static readonly PATTERN_PREFIX = 'maidr-pattern';\n\n  /** Cache of created patterns to avoid duplicates: patternKey -> patternId */\n  private readonly patternCache: Map<string, string> = new Map();\n\n  /** Reference to the SVG's defs element */\n  private defsElement: SVGDefsElement | null = null;\n\n  /** Reference to the target SVG */\n  private targetSvg: SVGSVGElement | null = null;\n\n  /** Pattern generators for each pattern type */\n  private readonly patternGenerators: Record<PatternType, PatternGenerator> = {\n    'diagonal-stripes': this.createDiagonalStripes.bind(this),\n    'square-grid': this.createSquareGrid.bind(this),\n    'dots': this.createDots.bind(this),\n    'horizontal-lines': this.createHorizontalLines.bind(this),\n    'diamonds': this.createDiamonds.bind(this),\n  };\n\n  /**\n   * Initialize the pattern service with a target SVG element.\n   * Ensures a <defs> element exists for pattern definitions.\n   * @param svg The SVG element to inject patterns into\n   */\n  public initialize(svg: SVGSVGElement): void {\n    this.targetSvg = svg;\n    this.ensureDefsElement();\n  }\n\n  /**\n   * Get or create a pattern with the specified configuration.\n   * Returns the pattern ID to use in fill=\"url(#id)\".\n   * @param config Pattern configuration\n   * @returns Pattern ID string for use in fill attribute\n   */\n  public getPattern(config: PatternConfig): string {\n    const { type, baseColor, patternColor, scale = 1 } = config;\n\n    // Generate cache key\n    const cacheKey = this.generateCacheKey(\n      type,\n      baseColor,\n      patternColor,\n      scale,\n    );\n\n    // Return cached pattern if exists\n    const cached = this.patternCache.get(cacheKey);\n    if (cached && this.patternExists(cached)) {\n      return cached;\n    }\n\n    // Create new pattern\n    const pattern = this.createPattern(config);\n    this.patternCache.set(cacheKey, pattern.id);\n\n    // Inject into defs\n    this.injectPattern(pattern);\n\n    return pattern.id;\n  }\n\n  /**\n   * Apply a pattern to an SVG element.\n   * Handles both style attribute and fill attribute cases.\n   * @param element The element to apply the pattern to\n   * @param config Pattern configuration\n   */\n  public applyPattern(element: SVGElement, config: PatternConfig): void {\n    const patternId = this.getPattern(config);\n    const patternUrl = `url(#${patternId})`;\n\n    // Check if fill is set via style attribute (higher specificity)\n    const style = element.getAttribute('style') || '';\n    if (style.match(/fill:[^;]+/i)) {\n      // Replace fill value in style attribute\n      const newStyle = style.replace(/fill:[^;]+/i, `fill:${patternUrl}`);\n      element.setAttribute('style', newStyle);\n    } else {\n      // Set fill attribute directly\n      element.setAttribute('fill', patternUrl);\n    }\n  }\n\n  /**\n   * Remove pattern from an element and restore original fill.\n   * @param element The element to remove the pattern from\n   * @param originalFill The original fill value to restore\n   */\n  public removePattern(element: SVGElement, originalFill: string): void {\n    element.setAttribute('fill', originalFill);\n  }\n\n  /**\n   * Get all available pattern types.\n   * Useful for cycling through patterns for different data series.\n   * Note: order determines assignment, eg the first series gets the first pattern and so on.\n   */\n  public getPatternTypes(): PatternType[] {\n    return [\n      'diagonal-stripes',\n      'dots',\n      'square-grid',\n      'horizontal-lines',\n      'diamonds',\n    ];\n  }\n\n  /**\n   * Get pattern type by index (wraps around if index > number of patterns).\n   * Useful for assigning patterns to data series.\n   * @param index Zero-based index\n   */\n  public getPatternTypeByIndex(index: number): PatternType {\n    const types = this.getPatternTypes();\n    return types[index % types.length];\n  }\n\n  /**\n   * Clean up all patterns created by this service.\n   */\n  public dispose(): void {\n    // Remove all cached patterns from the DOM\n    for (const patternId of this.patternCache.values()) {\n      const element = this.targetSvg?.querySelector(`#${patternId}`);\n      element?.remove();\n    }\n    this.patternCache.clear();\n    this.defsElement = null;\n    this.targetSvg = null;\n  }\n\n  /**\n   * Ensure a <defs> element exists in the target SVG.\n   */\n  private ensureDefsElement(): void {\n    if (!this.targetSvg) {\n      throw new Error('PatternService not initialized with target SVG');\n    }\n\n    let defs = this.targetSvg.querySelector('defs') as SVGDefsElement | null;\n    if (!defs) {\n      defs = document.createElementNS(SVG_NS, 'defs') as SVGDefsElement;\n      this.targetSvg.insertBefore(defs, this.targetSvg.firstChild);\n    }\n    this.defsElement = defs;\n  }\n\n  /**\n   * Check if a pattern with the given ID exists in the DOM.\n   */\n  private patternExists(patternId: string): boolean {\n    return !!this.targetSvg?.querySelector(`#${patternId}`);\n  }\n\n  /**\n   * Generate a unique cache key for a pattern configuration.\n   */\n  private generateCacheKey(\n    type: PatternType,\n    baseColor: string,\n    patternColor: string,\n    scale: number,\n  ): string {\n    // Normalize colors to lowercase hex\n    const normalizedBase = this.normalizeColor(baseColor);\n    const normalizedPattern = this.normalizeColor(patternColor);\n    return `${type}-${normalizedBase}-${normalizedPattern}-${scale}`;\n  }\n\n  /**\n   * Generate a unique pattern ID.\n   */\n  private generatePatternId(type: PatternType): string {\n    const timestamp = Date.now();\n    const random = Math.random().toString(36).substring(2, 8);\n    return `${PatternService.PATTERN_PREFIX}-${type}-${timestamp}-${random}`;\n  }\n\n  /**\n   * Normalize a color value to a consistent format.\n   */\n  private normalizeColor(color: string): string {\n    // Use canvas to normalize any CSS color to hex\n    const ctx = document.createElement('canvas').getContext('2d');\n    if (!ctx)\n      return color.toLowerCase().replace(/\\s/g, '');\n\n    ctx.fillStyle = '#000';\n    ctx.fillStyle = color;\n    return ctx.fillStyle.toLowerCase();\n  }\n\n  /**\n   * Create a pattern definition from configuration.\n   */\n  private createPattern(config: PatternConfig): PatternDefinition {\n    const { type, baseColor, patternColor, scale = 1 } = config;\n\n    const generator = this.patternGenerators[type];\n    if (!generator) {\n      throw new Error(`Unknown pattern type: ${type}`);\n    }\n\n    const element = generator(baseColor, patternColor, scale);\n    const id = this.generatePatternId(type);\n    element.setAttribute('id', id);\n\n    return { id, element };\n  }\n\n  /**\n   * Inject a pattern into the SVG defs element.\n   */\n  private injectPattern(pattern: PatternDefinition): void {\n    if (!this.defsElement) {\n      this.ensureDefsElement();\n    }\n    this.defsElement?.appendChild(pattern.element);\n  }\n\n  // ============================================================\n  // Pattern Generators\n  // ============================================================\n\n  /**\n   * Pattern 1: Diagonal Stripes (45°)\n   * Classic diagonal lines, high contrast, easily distinguishable.\n   */\n  private createDiagonalStripes(\n    baseColor: string,\n    patternColor: string,\n    scale: number,\n  ): SVGPatternElement {\n    const size = 12 * scale;\n    const strokeWidth = 5 * scale;\n\n    const pattern = document.createElementNS(\n      SVG_NS,\n      'pattern',\n    ) as SVGPatternElement;\n    pattern.setAttribute('patternUnits', 'userSpaceOnUse');\n    pattern.setAttribute('width', String(size));\n    pattern.setAttribute('height', String(size));\n    pattern.setAttribute('patternTransform', 'rotate(45)');\n\n    // Background rect\n    const rect = document.createElementNS(SVG_NS, 'rect');\n    rect.setAttribute('width', String(size));\n    rect.setAttribute('height', String(size));\n    rect.setAttribute('fill', baseColor);\n    pattern.appendChild(rect);\n\n    // Diagonal line (vertical line that appears diagonal due to rotation)\n    const line = document.createElementNS(SVG_NS, 'line');\n    line.setAttribute('x1', '0');\n    line.setAttribute('y1', '0');\n    line.setAttribute('x2', '0');\n    line.setAttribute('y2', String(size));\n    line.setAttribute('stroke', patternColor);\n    line.setAttribute('stroke-width', String(strokeWidth));\n    pattern.appendChild(line);\n\n    return pattern;\n  }\n\n  /**\n   * Pattern 2: Square Grid / Crosshatch\n   * Perpendicular lines forming a grid.\n   */\n  private createSquareGrid(\n    baseColor: string,\n    patternColor: string,\n    scale: number,\n  ): SVGPatternElement {\n    const size = 14 * scale;\n    const strokeWidth = 3 * scale;\n\n    const pattern = document.createElementNS(\n      SVG_NS,\n      'pattern',\n    ) as SVGPatternElement;\n    pattern.setAttribute('patternUnits', 'userSpaceOnUse');\n    pattern.setAttribute('width', String(size));\n    pattern.setAttribute('height', String(size));\n\n    // Background rect\n    const rect = document.createElementNS(SVG_NS, 'rect');\n    rect.setAttribute('width', String(size));\n    rect.setAttribute('height', String(size));\n    rect.setAttribute('fill', baseColor);\n    pattern.appendChild(rect);\n\n    // Grid lines (L-shape that tiles to form grid)\n    const path = document.createElementNS(SVG_NS, 'path');\n    path.setAttribute('d', `M ${size} 0 L 0 0 0 ${size}`);\n    path.setAttribute('fill', 'none');\n    path.setAttribute('stroke', patternColor);\n    path.setAttribute('stroke-width', String(strokeWidth));\n    pattern.appendChild(path);\n\n    return pattern;\n  }\n\n  /**\n   * Pattern 3: Polka Dots\n   * Evenly spaced circles, organic feel, highly recognizable.\n   */\n  private createDots(\n    baseColor: string,\n    patternColor: string,\n    scale: number,\n  ): SVGPatternElement {\n    const size = 16 * scale;\n    const radius = 4 * scale;\n\n    const pattern = document.createElementNS(\n      SVG_NS,\n      'pattern',\n    ) as SVGPatternElement;\n    pattern.setAttribute('patternUnits', 'userSpaceOnUse');\n    pattern.setAttribute('width', String(size));\n    pattern.setAttribute('height', String(size));\n\n    // Background rect\n    const rect = document.createElementNS(SVG_NS, 'rect');\n    rect.setAttribute('width', String(size));\n    rect.setAttribute('height', String(size));\n    rect.setAttribute('fill', baseColor);\n    pattern.appendChild(rect);\n\n    // Center dot\n    const circle = document.createElementNS(SVG_NS, 'circle');\n    circle.setAttribute('cx', String(size / 2));\n    circle.setAttribute('cy', String(size / 2));\n    circle.setAttribute('r', String(radius));\n    circle.setAttribute('fill', patternColor);\n    pattern.appendChild(circle);\n\n    return pattern;\n  }\n\n  /**\n   * Pattern 4: Horizontal Lines\n   * Clean horizontal stripes, simple and bold.\n   */\n  private createHorizontalLines(\n    baseColor: string,\n    patternColor: string,\n    scale: number,\n  ): SVGPatternElement {\n    const size = 10 * scale;\n    const strokeWidth = 4 * scale;\n\n    const pattern = document.createElementNS(\n      SVG_NS,\n      'pattern',\n    ) as SVGPatternElement;\n    pattern.setAttribute('patternUnits', 'userSpaceOnUse');\n    pattern.setAttribute('width', String(size));\n    pattern.setAttribute('height', String(size));\n\n    // Background rect\n    const rect = document.createElementNS(SVG_NS, 'rect');\n    rect.setAttribute('width', String(size));\n    rect.setAttribute('height', String(size));\n    rect.setAttribute('fill', baseColor);\n    pattern.appendChild(rect);\n\n    // Horizontal line\n    const line = document.createElementNS(SVG_NS, 'line');\n    line.setAttribute('x1', '0');\n    line.setAttribute('y1', String(size / 2));\n    line.setAttribute('x2', String(size));\n    line.setAttribute('y2', String(size / 2));\n    line.setAttribute('stroke', patternColor);\n    line.setAttribute('stroke-width', String(strokeWidth));\n    pattern.appendChild(line);\n\n    return pattern;\n  }\n\n  /**\n   * Pattern 5: Diamonds / Checkerboard\n   * Rotated squares creating a diamond checkerboard pattern.\n   */\n  private createDiamonds(\n    baseColor: string,\n    patternColor: string,\n    scale: number,\n  ): SVGPatternElement {\n    const size = 16 * scale;\n    const halfSize = size / 2;\n\n    const pattern = document.createElementNS(\n      SVG_NS,\n      'pattern',\n    ) as SVGPatternElement;\n    pattern.setAttribute('patternUnits', 'userSpaceOnUse');\n    pattern.setAttribute('width', String(size));\n    pattern.setAttribute('height', String(size));\n    pattern.setAttribute('patternTransform', 'rotate(45)');\n\n    // Background rect\n    const rect = document.createElementNS(SVG_NS, 'rect');\n    rect.setAttribute('width', String(size));\n    rect.setAttribute('height', String(size));\n    rect.setAttribute('fill', baseColor);\n    pattern.appendChild(rect);\n\n    // Two checkerboard squares\n    const square1 = document.createElementNS(SVG_NS, 'rect');\n    square1.setAttribute('width', String(halfSize));\n    square1.setAttribute('height', String(halfSize));\n    square1.setAttribute('fill', patternColor);\n    pattern.appendChild(square1);\n\n    const square2 = document.createElementNS(SVG_NS, 'rect');\n    square2.setAttribute('x', String(halfSize));\n    square2.setAttribute('y', String(halfSize));\n    square2.setAttribute('width', String(halfSize));\n    square2.setAttribute('height', String(halfSize));\n    square2.setAttribute('fill', patternColor);\n    pattern.appendChild(square2);\n\n    return pattern;\n  }\n}\n","import type { Context } from '@model/context';\nimport type { Figure } from '@model/plot';\nimport type { DisplayService } from '@service/display';\nimport type { NotificationService } from '@service/notification';\nimport type { SettingsService } from '@service/settings';\nimport type { Disposable } from '@type/disposable';\nimport { PatternService } from '@service/pattern';\n\n/**\n * Settings paths for high contrast configuration.\n */\nenum HighContrastSettings {\n  MODE = 'general.highContrastMode',\n  LEVELS = 'general.highContrastLevels',\n  LIGHT_COLOR = 'general.highContrastLightColor',\n  DARK_COLOR = 'general.highContrastDarkColor',\n}\n\n/**\n * Constants for high contrast color calculations and visual effects.\n */\nconst HighContrastConstants = {\n  // Luminance coefficients (ITU-R BT.709 standard for relative luminance)\n  LUMINANCE_RED_COEFF: 0.299,\n  LUMINANCE_GREEN_COEFF: 0.587,\n  LUMINANCE_BLUE_COEFF: 0.114,\n\n  // RGB channel values\n  RGB_MAX_VALUE: 255,\n\n  // Thresholds\n  NEAR_WHITE_LUMINANCE_SCALE: 0.1,\n  MIN_COMPLEX_PATH_LENGTH: 120,\n  MIN_COLOR_INTERPOLATION_COUNT: 2,\n  LIGHTNESS_MIDPOINT: 0.5,\n  DEFAULT_MIDRANGE_LUMINANCE: 0.5,\n\n  // Glow filter settings for line charts\n  GLOW_FILTER_OFFSET: '-50%',\n  GLOW_FILTER_SIZE: '200%',\n  GLOW_BLUR_OUTER: 20,\n  GLOW_BLUR_MIDDLE: 10,\n  GLOW_BLUR_INNER: 5,\n\n  // HSL conversion constants\n  HSL_HUE_DIVISOR: 6,\n  HSL_GREEN_HUE_OFFSET: 2,\n  HSL_BLUE_HUE_OFFSET: 4,\n  HSL_THRESHOLD_ONE_SIXTH: 1 / 6,\n  HSL_THRESHOLD_ONE_HALF: 1 / 2,\n  HSL_THRESHOLD_TWO_THIRDS: 2 / 3,\n  HSL_THRESHOLD_ONE_THIRD: 1 / 3,\n} as const;\n\ninterface ElementColorInfo {\n  element: SVGElement;\n  color: string;\n  isInSelectors: boolean;\n  cantBeBackground: boolean;\n  attr: string;\n  attrType?: 'style' | 'attribute';\n}\n\n/**\n * HighContrastService manages the high contrast accessibility mode.\n *\n * Key behaviors:\n * - Captures original colors in constructor (before any transformations)\n * - Applies high contrast on focus-in via initializeHighContrast()\n * - Restores original colors on blur via suspendHighContrast()\n * - Responds to settings changes (toggle via keyboard/UI)\n */\nexport class HighContrastService implements Disposable {\n  private readonly settingsService: SettingsService;\n  private readonly notificationService: NotificationService;\n  private readonly displayService: DisplayService;\n  private readonly figure: Figure;\n  private readonly context: Context;\n\n  // Disposable for settings change subscription\n  private settingsDisposable: Disposable | null = null;\n\n  // Cached original colors - captured once on first application\n  private defaultBackgroundColor: string = '';\n  private defaultForegroundColor: string = '';\n  private originalColorInfo: ElementColorInfo[] | null = null;\n\n  // Cache of all trace elements for high contrast mode\n  private traceElementsCache: Set<SVGElement> | null = null;\n\n  // Pattern service for high contrast mode patterns\n  private patternService: PatternService | null = null;\n\n  // Track previous high contrast mode state to detect changes\n  private previousHighContrastMode: boolean = false;\n\n  // Shared canvas context for color parsing (reused to avoid GC pressure)\n  private sharedCanvasCtx: CanvasRenderingContext2D | null = null;\n\n  /**\n   * Returns a shared canvas 2D context for color parsing operations.\n   * Creates the context on first use and reuses it to avoid GC pressure.\n   */\n  private getSharedCanvasContext(): CanvasRenderingContext2D | null {\n    if (!this.sharedCanvasCtx) {\n      this.sharedCanvasCtx = document.createElement('canvas').getContext('2d');\n    }\n    return this.sharedCanvasCtx;\n  }\n\n  // Computed getters that read from settings service (single source of truth)\n  private get highContrastMode(): boolean {\n    return this.settingsService.loadSettings().general.highContrastMode;\n  }\n\n  private get highContrastLightColor(): string {\n    return this.settingsService.loadSettings().general.highContrastLightColor;\n  }\n\n  private get highContrastDarkColor(): string {\n    return this.settingsService.loadSettings().general.highContrastDarkColor;\n  }\n\n  private get highContrastLevels(): number {\n    return this.settingsService.loadSettings().general.highContrastLevels;\n  }\n\n  /**\n   * Computed color equivalents based on current settings.\n   * Interpolates between light and dark colors based on contrast levels.\n   */\n  private get colorEquivalents(): string[] {\n    return this.interpolateColors(\n      this.highContrastLightColor,\n      this.highContrastDarkColor,\n      this.highContrastLevels,\n    );\n  }\n\n  public constructor(\n    settings: SettingsService,\n    notification: NotificationService,\n    displayService: DisplayService,\n    figure: Figure,\n    context: Context,\n  ) {\n    this.settingsService = settings;\n    this.notificationService = notification;\n    this.displayService = displayService;\n    this.figure = figure;\n    this.context = context;\n\n    // Initialize previous state from settings to track changes\n    this.previousHighContrastMode = this.highContrastMode;\n\n    // Subscribe to settings changes using the modern event pattern\n    this.settingsDisposable = this.settingsService.onChange((event) => {\n      if (event.affectsSetting(HighContrastSettings.MODE)) {\n        this.handleHighContrastModeChange(event.get<boolean>(HighContrastSettings.MODE));\n      }\n    });\n\n    // IMPORTANT: Always capture original colors first, before any high contrast is applied.\n    // The DOM has the true original colors at this point (page just loaded).\n    // This ensures we have the correct colors for restoration.\n    this.captureOriginalColors();\n\n    // NOTE: We do NOT apply high contrast here in the constructor.\n    // The first Controller created on page load is immediately disposed (see index.ts).\n    // If we applied high contrast here, it would persist in the DOM but the Controller\n    // (and its captured original colors) would be gone.\n    //\n    // High contrast will be applied when:\n    // 1. The real Controller is created on focus-in (via initializeHighContrast)\n    // 2. The user toggles high contrast mode via keyboard/settings\n  }\n\n  /**\n   * Initialize high contrast mode after the Controller is fully set up.\n   * Call this from the Controller after construction to apply high contrast if enabled.\n   */\n  public initializeHighContrast(): void {\n    if (this.highContrastMode) {\n      this.applyHighContrast();\n    }\n  }\n\n  /**\n   * Suspend high contrast mode visually (restore original colors).\n   * Called on blur to return the chart to its original appearance.\n   * The setting remains ON - this just hides the visual effect while unfocused.\n   */\n  public suspendHighContrast(): void {\n    if (this.highContrastMode && this.originalColorInfo) {\n      this.restoreOriginalColors();\n    }\n  }\n\n  /**\n   * Capture original colors from the DOM before any high contrast changes.\n   */\n  private captureOriginalColors(): void {\n    // Capture body styles\n    const bodyStyle = window.getComputedStyle(document.body);\n    this.defaultBackgroundColor = bodyStyle.backgroundColor;\n    this.defaultForegroundColor = bodyStyle.color;\n\n    // Capture SVG element colors\n    this.originalColorInfo = this.getOriginalColorInfo();\n  }\n\n  /**\n   * Validates that captured elements still exist in the DOM.\n   * Returns true if all elements are valid, false if any are stale/removed.\n   */\n  private validateCapturedElements(): boolean {\n    if (!this.originalColorInfo || this.originalColorInfo.length === 0) {\n      return false;\n    }\n\n    return this.originalColorInfo.every(\n      info => info.element && document.body.contains(info.element),\n    );\n  }\n\n  /**\n   * Re-captures original colors if DOM has changed since initial capture.\n   * Call this before applying high contrast to ensure color data is fresh.\n   */\n  private recaptureIfNeeded(): void {\n    if (!this.validateCapturedElements()) {\n      console.warn(\n        'HighContrastService: DOM changed since capture, re-capturing colors',\n      );\n      this.captureOriginalColors();\n    }\n  }\n\n  public dispose(): void {\n    // Unsubscribe from settings changes\n    if (this.settingsDisposable) {\n      this.settingsDisposable.dispose();\n      this.settingsDisposable = null;\n    }\n\n    // Clean up pattern service if exists\n    if (this.patternService) {\n      this.patternService.dispose();\n      this.patternService = null;\n    }\n\n    // Note: Colors are restored via suspendHighContrast() before dispose is called.\n    // See index.ts onFocusOut handler.\n  }\n\n  /**\n   * Handle high contrast mode setting change.\n   * Called when user toggles high contrast via keyboard or settings UI.\n   */\n  private handleHighContrastModeChange(newHighContrastMode: boolean): void {\n    // Only act if high contrast mode actually changed\n    if (newHighContrastMode !== this.previousHighContrastMode) {\n      this.previousHighContrastMode = newHighContrastMode;\n\n      if (newHighContrastMode) {\n        this.applyHighContrast();\n      } else {\n        this.restoreOriginalColors();\n      }\n    }\n  }\n\n  /**\n   * Toggle high contrast mode on/off.\n   * Called from keyboard shortcut (C key).\n   */\n  public toggleHighContrast(): void {\n    const currentSettings = this.settingsService.loadSettings();\n    const newHighContrastMode = !currentSettings.general.highContrastMode;\n\n    // Update settings through the settings service (persists and notifies observers)\n    this.settingsService.saveSettings({\n      ...currentSettings,\n      general: {\n        ...currentSettings.general,\n        highContrastMode: newHighContrastMode,\n      },\n    });\n\n    // The update() method will be called via observer pattern to apply/restore colors\n\n    const message = `High Contrast Mode ${newHighContrastMode ? 'on' : 'off'}`;\n    this.notificationService.notify(message);\n  }\n\n  /**\n   * Apply high contrast colors to all elements.\n   */\n  private applyHighContrast(): void {\n    // Validate and re-capture colors if DOM has changed\n    this.recaptureIfNeeded();\n\n    // Apply body styles\n    document.body.style.backgroundColor = this.highContrastDarkColor;\n    document.body.style.color = this.highContrastLightColor;\n\n    // Get high contrast colors for all elements\n    const highContrastElInfo = this.getHighContrastColors();\n\n    // Apply high contrast colors to elements\n    for (const item of highContrastElInfo) {\n      if (item.element && item.attrType === 'style') {\n        const style = item.element.getAttribute('style') || '';\n        const newStyle = style.replace(\n          new RegExp(`${item.attr}:\\\\s*[^;]+`, 'i'),\n          `${item.attr}:${item.color}`,\n        );\n        item.element.setAttribute('style', newStyle);\n      } else if (item.element && item.attrType === 'attribute') {\n        item.element.setAttribute(item.attr, item.color);\n      }\n    }\n\n    // Add text shadow filter\n    this.addGlowShadowFilter(this.displayService.plot);\n\n    // Apply shadow to text elements\n    this.originalColorInfo?.forEach((item) => {\n      if (this.hasParentWithStringInID(item.element, 'text')) {\n        item.element.setAttribute('filter', 'url(#glow-shadow)');\n      }\n    });\n\n    // Handle line chart exception\n    if ('type' in this.context.instructionContext) {\n      if (this.context.instructionContext.type === 'line') {\n        document.getElementById(this.context.id)?.classList.add('high-contrast');\n      }\n    }\n\n    // Apply plot fill style\n    this.displayService.plot.setAttribute(\n      'style',\n      `fill:${this.highContrastLightColor}`,\n    );\n\n    // Handle stacked/dodged bar exception: apply patterns\n    if ('type' in this.context.instructionContext) {\n      if (\n        this.context.instructionContext.type === 'stacked_bar'\n        || this.context.instructionContext.type === 'dodged_bar'\n      ) {\n        this.applyPatternsToElements(highContrastElInfo);\n      }\n    }\n  }\n\n  /**\n   * Restore original colors when turning off high contrast.\n   */\n  private restoreOriginalColors(): void {\n    if (!this.originalColorInfo) {\n      return;\n    }\n\n    // Restore body styles\n    document.body.style.backgroundColor = this.defaultBackgroundColor;\n    document.body.style.color = this.defaultForegroundColor;\n\n    // Restore SVG element colors\n    this.originalColorInfo.forEach((item) => {\n      if (item.element && item.attrType === 'style') {\n        const style = item.element.getAttribute('style') || '';\n        const newStyle = style.replace(\n          new RegExp(`${item.attr}:\\\\s*[^;]+`, 'i'),\n          `${item.attr}:${item.color}`,\n        );\n        item.element.setAttribute('style', newStyle);\n      } else if (item.element && item.attrType === 'attribute') {\n        item.element.setAttribute(item.attr, item.color);\n      }\n\n      // Remove text shadow filter\n      if (item.element.getAttribute('filter') === 'url(#glow-shadow)') {\n        item.element.removeAttribute('filter');\n      }\n    });\n\n    // Handle line chart exception\n    if ('type' in this.context.instructionContext) {\n      if (this.context.instructionContext.type === 'line') {\n        document\n          .getElementById(this.context.id)\n          ?.classList\n          .remove('high-contrast');\n      }\n    }\n\n    // Restore plot fill style\n    this.displayService.plot.setAttribute(\n      'style',\n      `fill:${this.defaultForegroundColor}`,\n    );\n\n    // Clean up pattern service\n    if (this.patternService) {\n      this.patternService.dispose();\n      this.patternService = null;\n    }\n  }\n\n  // ========== Helper Methods ==========\n\n  /**\n   * Get all SVG elements from all traces in the Figure hierarchy.\n   */\n  private getAllTraceElements(): Set<SVGElement> {\n    if (this.traceElementsCache !== null) {\n      return this.traceElementsCache;\n    }\n\n    const elements = new Set<SVGElement>();\n\n    for (const subplotRow of this.figure.subplots) {\n      for (const subplot of subplotRow) {\n        for (const traceRow of subplot.traces) {\n          for (const trace of traceRow) {\n            const traceElements = trace.getAllOriginalElements();\n            for (const el of traceElements) {\n              elements.add(el);\n            }\n          }\n        }\n      }\n    }\n\n    this.traceElementsCache = elements;\n    return elements;\n  }\n\n  private isTraceElement(\n    element: Element,\n    traceElements: Set<SVGElement>,\n  ): boolean {\n    return traceElements.has(element as SVGElement);\n  }\n\n  private getOriginalColorInfo(): ElementColorInfo[] | null {\n    const svg = this.displayService.plot;\n    if (!svg)\n      return null;\n    const svgElements = svg.querySelectorAll('*');\n\n    const traceElements = this.getAllTraceElements();\n    const originalColorInfo: ElementColorInfo[] = [];\n\n    for (let i = 0; i < svgElements.length; i++) {\n      const el = svgElements[i];\n\n      if (el.getAttribute('visibility') === 'hidden') {\n        continue;\n      }\n\n      const style = el.getAttribute('style') || '';\n      const styleFillMatch = style.match(/fill:\\s*([^;]+)/i);\n      const styleStrokeMatch = style.match(/stroke:\\s*([^;]+)/i);\n\n      const isInSelectors = this.isTraceElement(el, traceElements);\n\n      const complexPath = el.getAttribute('d');\n      let isComplexPath = false;\n      if (complexPath) {\n        isComplexPath\n          = complexPath.length > HighContrastConstants.MIN_COMPLEX_PATH_LENGTH;\n      }\n      const cantBeBackground = isComplexPath;\n\n      if (styleFillMatch) {\n        originalColorInfo.push({\n          element: el as SVGElement,\n          color: styleFillMatch[1].trim(),\n          isInSelectors,\n          cantBeBackground,\n          attr: 'fill',\n          attrType: 'style',\n        });\n      }\n      if (styleStrokeMatch) {\n        originalColorInfo.push({\n          element: el as SVGElement,\n          color: styleStrokeMatch[1].trim(),\n          isInSelectors,\n          cantBeBackground,\n          attr: 'stroke',\n          attrType: 'style',\n        });\n      }\n\n      const attrFill = el.getAttribute('fill');\n      if (attrFill) {\n        originalColorInfo.push({\n          element: el as SVGElement,\n          color: attrFill.trim(),\n          isInSelectors,\n          cantBeBackground,\n          attr: 'fill',\n          attrType: 'attribute',\n        });\n      }\n      const attrStroke = el.getAttribute('stroke');\n      if (attrStroke) {\n        originalColorInfo.push({\n          element: el as SVGElement,\n          color: attrStroke.trim(),\n          isInSelectors,\n          cantBeBackground,\n          attr: 'stroke',\n          attrType: 'attribute',\n        });\n      }\n    }\n\n    return originalColorInfo;\n  }\n\n  private getHighContrastColors(): ElementColorInfo[] {\n    const originalColorInfo = this.originalColorInfo;\n    if (!originalColorInfo)\n      return [];\n\n    const spreadColors\n      = this.spreadColorsAcrossLuminanceSpectrum(originalColorInfo);\n\n    const highContrastElInfo = spreadColors.map(item => ({\n      ...item,\n      color: this.toColorStep(item),\n    }));\n\n    return highContrastElInfo;\n  }\n\n  private hasParentWithStringInID(\n    el: Element,\n    searchString: string = '',\n    notString: string = '',\n  ): boolean {\n    let current = el.parentElement;\n\n    while (current) {\n      if (current.tagName === 'svg' || current.tagName === 'BODY') {\n        break;\n      }\n\n      if (notString.length > 0) {\n        if (current.id.startsWith(notString)) {\n          return false;\n        }\n      }\n\n      if (searchString.length > 0) {\n        if (current.id.startsWith(searchString)) {\n          return true;\n        }\n      }\n\n      current = current.parentElement;\n    }\n\n    return false;\n  }\n\n  private addGlowShadowFilter(svgHtml: HTMLElement): void {\n    const svg = svgHtml as unknown as SVGSVGElement;\n\n    if (svg.querySelector('#glow-shadow')) {\n      return;\n    }\n\n    let defs = svg.querySelector('defs');\n    if (!defs) {\n      defs = document.createElementNS('http://www.w3.org/2000/svg', 'defs');\n      svg.insertBefore(defs, svg.firstChild);\n    }\n\n    const filter = document.createElementNS(\n      'http://www.w3.org/2000/svg',\n      'filter',\n    );\n    filter.setAttribute('id', 'glow-shadow');\n    filter.setAttribute('x', HighContrastConstants.GLOW_FILTER_OFFSET);\n    filter.setAttribute('y', HighContrastConstants.GLOW_FILTER_OFFSET);\n    filter.setAttribute('width', HighContrastConstants.GLOW_FILTER_SIZE);\n    filter.setAttribute('height', HighContrastConstants.GLOW_FILTER_SIZE);\n\n    const filterHTML = `\n    <feGaussianBlur in=\"SourceAlpha\" stdDeviation=\"${HighContrastConstants.GLOW_BLUR_OUTER}\" result=\"blur1\"/>\n    <feOffset dx=\"0\" dy=\"0\" result=\"offsetblur1\" in=\"blur1\"/>\n    <feFlood flood-color=\"black\" result=\"color1\"/>\n    <feComposite in=\"color1\" in2=\"offsetblur1\" operator=\"in\" result=\"shadow1\"/>\n\n    <feGaussianBlur in=\"SourceAlpha\" stdDeviation=\"${HighContrastConstants.GLOW_BLUR_MIDDLE}\" result=\"blur2\"/>\n    <feOffset dx=\"0\" dy=\"0\" result=\"offsetblur2\" in=\"blur2\"/>\n    <feFlood flood-color=\"black\" result=\"color2\"/>\n    <feComposite in=\"color2\" in2=\"offsetblur2\" operator=\"in\" result=\"shadow2\"/>\n\n    <feGaussianBlur in=\"SourceAlpha\" stdDeviation=\"${HighContrastConstants.GLOW_BLUR_MIDDLE}\" result=\"blur3\"/>\n    <feOffset dx=\"0\" dy=\"0\" result=\"offsetblur3\" in=\"blur3\"/>\n    <feFlood flood-color=\"black\" result=\"color3\"/>\n    <feComposite in=\"color3\" in2=\"offsetblur3\" operator=\"in\" result=\"shadow3\"/>\n\n    <feGaussianBlur in=\"SourceAlpha\" stdDeviation=\"${HighContrastConstants.GLOW_BLUR_INNER}\" result=\"blur4\"/>\n    <feOffset dx=\"0\" dy=\"0\" result=\"offsetblur4\" in=\"blur4\"/>\n    <feFlood flood-color=\"black\" result=\"color4\"/>\n    <feComposite in=\"color4\" in2=\"offsetblur4\" operator=\"in\" result=\"shadow4\"/>\n\n    <feMerge>\n      <feMergeNode in=\"shadow1\"/>\n      <feMergeNode in=\"shadow2\"/>\n      <feMergeNode in=\"shadow3\"/>\n      <feMergeNode in=\"shadow4\"/>\n      <feMergeNode in=\"SourceGraphic\"/>\n    </feMerge>\n  `;\n\n    filter.innerHTML = filterHTML;\n    defs.appendChild(filter);\n  }\n\n  private toColorStep(colorInfo: ElementColorInfo): string {\n    const value = colorInfo.color;\n    if (value === 'none' || value === 'transparent') {\n      return value;\n    }\n\n    if (this.hasParentWithStringInID(colorInfo.element, 'text')) {\n      return this.highContrastLightColor;\n    }\n\n    const colorEquivalents = [...this.colorEquivalents];\n\n    const ctx = this.getSharedCanvasContext();\n    if (!ctx)\n      return value;\n    ctx.fillStyle = '#000';\n    ctx.fillStyle = value.trim();\n    let hex = ctx.fillStyle;\n\n    if (/^#[0-9a-f]{8}$/i.test(hex)) {\n      const r = Number.parseInt(hex.slice(1, 3), 16);\n      const g = Number.parseInt(hex.slice(3, 5), 16);\n      const b = Number.parseInt(hex.slice(5, 7), 16);\n      const a\n        = Number.parseInt(hex.slice(7, 9), 16)\n          / HighContrastConstants.RGB_MAX_VALUE;\n\n      const blendedR = Math.round(\n        r * a + HighContrastConstants.RGB_MAX_VALUE * (1 - a),\n      );\n      const blendedG = Math.round(\n        g * a + HighContrastConstants.RGB_MAX_VALUE * (1 - a),\n      );\n      const blendedB = Math.round(\n        b * a + HighContrastConstants.RGB_MAX_VALUE * (1 - a),\n      );\n\n      hex = `#${blendedR.toString(16).padStart(2, '0')}${blendedG.toString(16).padStart(2, '0')}${blendedB.toString(16).padStart(2, '0')}`;\n    } else if (!/^#[0-9a-f]{6}$/i.test(hex)) {\n      return value;\n    }\n\n    let useNearWhite = false;\n    const nearWhiteScale = HighContrastConstants.NEAR_WHITE_LUMINANCE_SCALE;\n\n    if ('type' in this.context.instructionContext) {\n      if (\n        this.context.instructionContext.type === 'bar'\n        || this.context.instructionContext.type === 'histogram'\n      ) {\n        if (colorInfo.isInSelectors) {\n          useNearWhite = true;\n        }\n      }\n    }\n\n    const outputColorHex = this.findClosestColor(\n      value,\n      colorEquivalents,\n      useNearWhite,\n      nearWhiteScale,\n      colorInfo.cantBeBackground,\n    );\n\n    return outputColorHex;\n  }\n\n  private findClosestColor(\n    inputColor: string,\n    colorArray: string[],\n    useNearWhite: boolean,\n    nearWhiteScale: number,\n    cantBeBackground: boolean,\n  ): string {\n    if (colorArray.length === 0) {\n      throw new Error('Color array cannot be empty');\n    }\n\n    const hexToRgb = (hex: string): { r: number; g: number; b: number } => {\n      const normalized = hex.replace('#', '');\n      return {\n        r: Number.parseInt(normalized.slice(0, 2), 16),\n        g: Number.parseInt(normalized.slice(2, 4), 16),\n        b: Number.parseInt(normalized.slice(4, 6), 16),\n      };\n    };\n\n    const getLuminance = (rgb: { r: number; g: number; b: number }): number => {\n      return (\n        HighContrastConstants.LUMINANCE_RED_COEFF * rgb.r\n        + HighContrastConstants.LUMINANCE_GREEN_COEFF * rgb.g\n        + HighContrastConstants.LUMINANCE_BLUE_COEFF * rgb.b\n      );\n    };\n\n    const colorDistance = (\n      c1: { r: number; g: number; b: number },\n      c2: { r: number; g: number; b: number },\n    ): number => {\n      return Math.sqrt(\n        (c1.r - c2.r) ** 2\n        + (c1.g - c2.g) ** 2\n        + (c1.b - c2.b) ** 2,\n      );\n    };\n\n    const inputRgb = hexToRgb(inputColor);\n\n    if (cantBeBackground) {\n      const backgroundIndex = colorArray.indexOf(this.highContrastDarkColor);\n      if (backgroundIndex !== -1) {\n        colorArray.splice(backgroundIndex, 1);\n      }\n    }\n\n    if (useNearWhite) {\n      const inputLuminance = getLuminance(inputRgb);\n      const nearWhiteThreshold\n        = HighContrastConstants.RGB_MAX_VALUE * (1 - nearWhiteScale);\n\n      if (inputLuminance >= nearWhiteThreshold) {\n        return colorArray[0];\n      }\n\n      if (colorArray.length === 1) {\n        return colorArray[0];\n      }\n\n      let closestColor = colorArray[0];\n      if (colorArray.length > 1) {\n        let minDistance = colorDistance(inputRgb, hexToRgb(colorArray[1]));\n\n        for (let i = 1; i < colorArray.length; i++) {\n          const distance = colorDistance(inputRgb, hexToRgb(colorArray[i]));\n          if (distance < minDistance) {\n            minDistance = distance;\n            closestColor = colorArray[i];\n          }\n        }\n      }\n\n      return closestColor;\n    } else {\n      let closestColor = colorArray[0];\n      let minDistance = colorDistance(inputRgb, hexToRgb(colorArray[0]));\n\n      for (let i = 1; i < colorArray.length; i++) {\n        const distance = colorDistance(inputRgb, hexToRgb(colorArray[i]));\n        if (distance < minDistance) {\n          minDistance = distance;\n          closestColor = colorArray[i];\n        }\n      }\n\n      const index = colorArray.indexOf(closestColor);\n      const reversedIndex = colorArray.length - 1 - index;\n      return colorArray[reversedIndex];\n    }\n  }\n\n  public interpolateColors(\n    startColor: string,\n    endColor: string,\n    count: number,\n  ): string[] {\n    const numColors = Math.max(2, Math.floor(count));\n\n    const startRgb = this.parseColorToRgb(startColor);\n    const endRgb = this.parseColorToRgb(endColor);\n\n    if (!startRgb || !endRgb) {\n      return [startColor, endColor];\n    }\n\n    if (numColors === 2) {\n      return [startColor, endColor];\n    }\n\n    const colors: string[] = [];\n\n    const interpolateAt = (t: number): string => {\n      const r = Math.round(startRgb.r + t * (endRgb.r - startRgb.r));\n      const g = Math.round(startRgb.g + t * (endRgb.g - startRgb.g));\n      const b = Math.round(startRgb.b + t * (endRgb.b - startRgb.b));\n      return this.rgbToHex({ r, g, b });\n    };\n\n    for (let i = 0; i < numColors; i++) {\n      const t = i / (numColors - 1);\n      colors.push(interpolateAt(t));\n    }\n\n    return colors;\n  }\n\n  private parseColorToRgb(\n    color: string,\n  ): { r: number; g: number; b: number } | null {\n    const trimmed = color.trim();\n\n    const ctx = this.getSharedCanvasContext();\n    if (!ctx)\n      return null;\n\n    ctx.fillStyle = '#000';\n    ctx.fillStyle = trimmed;\n    const hex = ctx.fillStyle;\n\n    if (/^#[0-9a-f]{6}$/i.test(hex)) {\n      return {\n        r: Number.parseInt(hex.slice(1, 3), 16),\n        g: Number.parseInt(hex.slice(3, 5), 16),\n        b: Number.parseInt(hex.slice(5, 7), 16),\n      };\n    }\n\n    return null;\n  }\n\n  private rgbToHex(rgb: { r: number; g: number; b: number }): string {\n    const toHex = (n: number): string => {\n      const clamped = Math.max(0, Math.min(HighContrastConstants.RGB_MAX_VALUE, n));\n      return clamped.toString(16).padStart(2, '0');\n    };\n    return `#${toHex(rgb.r)}${toHex(rgb.g)}${toHex(rgb.b)}`;\n  }\n\n  private normalizeColor(color: string): string {\n    const ctx = this.getSharedCanvasContext();\n    if (!ctx)\n      return color.toLowerCase().replace(/\\s/g, '');\n\n    ctx.fillStyle = '#000';\n    ctx.fillStyle = color;\n    return ctx.fillStyle.toLowerCase();\n  }\n\n  private spreadColorsAcrossLuminanceSpectrum(\n    colorInfos: ElementColorInfo[],\n  ): ElementColorInfo[] {\n    const rgbToHsl = (rgb: {\n      r: number;\n      g: number;\n      b: number;\n    }): { h: number; s: number; l: number } => {\n      const r = rgb.r / HighContrastConstants.RGB_MAX_VALUE;\n      const g = rgb.g / HighContrastConstants.RGB_MAX_VALUE;\n      const b = rgb.b / HighContrastConstants.RGB_MAX_VALUE;\n\n      const max = Math.max(r, g, b);\n      const min = Math.min(r, g, b);\n      const l = (max + min) / 2;\n\n      if (max === min) {\n        return { h: 0, s: 0, l };\n      }\n\n      const d = max - min;\n      const s\n        = l > HighContrastConstants.LIGHTNESS_MIDPOINT\n          ? d / (2 - max - min)\n          : d / (max + min);\n\n      let h = 0;\n      if (max === r) {\n        h\n          = ((g - b) / d\n            + (g < b ? HighContrastConstants.HSL_HUE_DIVISOR : 0))\n          / HighContrastConstants.HSL_HUE_DIVISOR;\n      } else if (max === g) {\n        h\n          = ((b - r) / d + HighContrastConstants.HSL_GREEN_HUE_OFFSET)\n            / HighContrastConstants.HSL_HUE_DIVISOR;\n      } else {\n        h\n          = ((r - g) / d + HighContrastConstants.HSL_BLUE_HUE_OFFSET)\n            / HighContrastConstants.HSL_HUE_DIVISOR;\n      }\n\n      return { h, s, l };\n    };\n\n    const hslToRgb = (hsl: {\n      h: number;\n      s: number;\n      l: number;\n    }): { r: number; g: number; b: number } => {\n      const { h, s, l } = hsl;\n\n      if (s === 0) {\n        const gray = Math.round(l * HighContrastConstants.RGB_MAX_VALUE);\n        return { r: gray, g: gray, b: gray };\n      }\n\n      const hue2rgb = (p: number, q: number, t: number): number => {\n        let tNorm = t;\n        if (tNorm < 0)\n          tNorm += 1;\n        if (tNorm > 1)\n          tNorm -= 1;\n        if (tNorm < HighContrastConstants.HSL_THRESHOLD_ONE_SIXTH)\n          return p + (q - p) * HighContrastConstants.HSL_HUE_DIVISOR * tNorm;\n        if (tNorm < HighContrastConstants.HSL_THRESHOLD_ONE_HALF)\n          return q;\n        if (tNorm < HighContrastConstants.HSL_THRESHOLD_TWO_THIRDS) {\n          return (\n            p\n            + (q - p)\n            * (HighContrastConstants.HSL_THRESHOLD_TWO_THIRDS - tNorm)\n            * HighContrastConstants.HSL_HUE_DIVISOR\n          );\n        }\n        return p;\n      };\n\n      const q\n        = l < HighContrastConstants.LIGHTNESS_MIDPOINT\n          ? l * (1 + s)\n          : l + s - l * s;\n      const p = 2 * l - q;\n\n      return {\n        r: Math.round(\n          hue2rgb(p, q, h + HighContrastConstants.HSL_THRESHOLD_ONE_THIRD)\n          * HighContrastConstants.RGB_MAX_VALUE,\n        ),\n        g: Math.round(hue2rgb(p, q, h) * HighContrastConstants.RGB_MAX_VALUE),\n        b: Math.round(\n          hue2rgb(p, q, h - HighContrastConstants.HSL_THRESHOLD_ONE_THIRD)\n          * HighContrastConstants.RGB_MAX_VALUE,\n        ),\n      };\n    };\n\n    const selectorItems: {\n      index: number;\n      luminance: number;\n      hsl: { h: number; s: number; l: number };\n    }[] = [];\n\n    for (let i = 0; i < colorInfos.length; i++) {\n      const item = colorInfos[i];\n      if (item.color === 'none' || item.color === 'transparent') {\n        continue;\n      }\n      if (item.isInSelectors) {\n        const rgb = this.parseColorToRgb(item.color);\n        if (rgb) {\n          const hsl = rgbToHsl(rgb);\n          selectorItems.push({\n            index: i,\n            luminance: hsl.l,\n            hsl,\n          });\n        }\n      }\n    }\n\n    if (selectorItems.length <= 1) {\n      return colorInfos.map(item => ({ ...item }));\n    }\n\n    const luminances = selectorItems.map(item => item.luminance);\n    const minLum = Math.min(...luminances);\n    const maxLum = Math.max(...luminances);\n    const lumRange = maxLum - minLum;\n\n    const result: ElementColorInfo[] = colorInfos.map(item => ({ ...item }));\n\n    for (const selectorItem of selectorItems) {\n      let newLuminance: number;\n\n      if (lumRange === 0) {\n        newLuminance = HighContrastConstants.DEFAULT_MIDRANGE_LUMINANCE;\n      } else {\n        const normalizedPosition = (selectorItem.luminance - minLum) / lumRange;\n        newLuminance = normalizedPosition;\n      }\n\n      const newHsl = {\n        h: selectorItem.hsl.h,\n        s: selectorItem.hsl.s,\n        l: newLuminance,\n      };\n      const newRgb = hslToRgb(newHsl);\n      const newColor = this.rgbToHex(newRgb);\n\n      result[selectorItem.index].color = newColor;\n    }\n\n    return result;\n  }\n\n  private applyPatternsToElements(\n    highContrastElInfo: ElementColorInfo[],\n  ): void {\n    if (!this.originalColorInfo)\n      return;\n\n    if (!this.patternService) {\n      this.patternService = new PatternService();\n      const svg = this.displayService.plot as unknown as SVGSVGElement;\n      this.patternService.initialize(svg);\n    }\n\n    const elementToHighContrastColor = new Map<SVGElement, string>();\n    for (const item of highContrastElInfo) {\n      if (item.isInSelectors && item.attr === 'fill') {\n        elementToHighContrastColor.set(item.element, item.color);\n      }\n    }\n\n    const colorGroups = new Map<string, ElementColorInfo[]>();\n\n    for (const item of this.originalColorInfo) {\n      if (item.isInSelectors && item.attr === 'fill') {\n        const normalizedColor = this.normalizeColor(item.color);\n        if (!colorGroups.has(normalizedColor)) {\n          colorGroups.set(normalizedColor, []);\n        }\n        colorGroups.get(normalizedColor)!.push(item);\n      }\n    }\n\n    let patternIndex = 0;\n    for (const [_color, elements] of colorGroups) {\n      const patternType\n        = this.patternService.getPatternTypeByIndex(patternIndex);\n\n      for (const item of elements) {\n        const baseColor\n          = elementToHighContrastColor.get(item.element)\n            || this.highContrastLightColor;\n\n        const patternColor = this.getMostContrastingColor(baseColor);\n\n        this.patternService.applyPattern(item.element, {\n          type: patternType,\n          baseColor,\n          patternColor,\n        });\n      }\n\n      patternIndex++;\n    }\n  }\n\n  private getMostContrastingColor(color: string): string {\n    const colorLuminance = this.getRelativeLuminance(color);\n    const darkLuminance = this.getRelativeLuminance(this.highContrastDarkColor);\n    const lightLuminance = this.getRelativeLuminance(\n      this.highContrastLightColor,\n    );\n\n    const darkContrast = Math.abs(colorLuminance - darkLuminance);\n    const lightContrast = Math.abs(colorLuminance - lightLuminance);\n\n    return darkContrast > lightContrast\n      ? this.highContrastDarkColor\n      : this.highContrastLightColor;\n  }\n\n  private getRelativeLuminance(color: string): number {\n    const rgb = this.parseColorToRgb(color);\n    if (!rgb)\n      return HighContrastConstants.DEFAULT_MIDRANGE_LUMINANCE;\n\n    return (\n      (HighContrastConstants.LUMINANCE_RED_COEFF * rgb.r\n        + HighContrastConstants.LUMINANCE_GREEN_COEFF * rgb.g\n        + HighContrastConstants.LUMINANCE_BLUE_COEFF * rgb.b)\n      / HighContrastConstants.RGB_MAX_VALUE\n    );\n  }\n}\n","import type { SettingsService } from '@service/settings';\nimport type { Disposable } from '@type/disposable';\nimport type { Observer } from '@type/observable';\nimport type { Settings } from '@type/settings';\n\nimport type {\n  FigureState,\n  HighlightState,\n  SubplotState,\n  TraceState,\n} from '@type/state';\nimport { Constant } from '@util/constant';\nimport { Svg } from '@util/svg';\n\n/**\n * Union type representing all possible state types that the HighlightService can observe.\n * Includes subplot, trace, figure states, and settings changes.\n */\ntype HighlightStateUnion = SubplotState | TraceState | FigureState | Settings;\n\n/**\n * Service responsible for managing visual highlighting of SVG elements in MAIDR visualizations.\n *\n * The HighlightService provides visual feedback by creating highlight overlays on chart elements\n * when users navigate through data points. It supports both trace-level highlighting (individual\n * data points) and subplot-level highlighting (for multi-plot scenarios).\n *\n * @implements {Observer<HighlightStateUnion>} - Observes state changes to update highlights\n * @implements {Disposable} - Supports cleanup when the service is no longer needed\n *\n * @example\n * ```typescript\n * const highlightService = new HighlightService(settingsService);\n *\n * // Subscribe to state changes\n * traceState.subscribe(highlightService);\n *\n * // Manual highlighting\n * highlightService.highlight(svgElement);\n *\n * // Cleanup\n * highlightService.dispose();\n * ```\n */\nexport class HighlightService\nimplements Observer<HighlightStateUnion>, Disposable {\n  /**\n   * Map storing the relationship between original SVG elements and their highlight clones.\n   * Keys are the original elements, values are the highlight overlay elements.\n   */\n  private readonly highlightedElements: Map<SVGElement, SVGElement>;\n  private readonly settingsService: SettingsService;\n\n  /**\n   * Set of subplot elements that currently have highlight styling applied.\n   * Used to track and clean up subplot-level highlights.\n   */\n  private readonly highlightedSubplots: Set<SVGElement>;\n\n  /**\n   * The current color used for highlighting elements.\n   * Updated when settings change.\n   */\n  private currentHighlightColor: string;\n\n  /**\n   * Creates a new HighlightService instance.\n   *\n   * @param settings - The settings service used to retrieve highlight color preferences\n   */\n  public constructor(settings: SettingsService) {\n    this.settingsService = settings;\n\n    this.highlightedElements = new Map();\n    this.highlightedSubplots = new Set();\n    const initialSettings = settings.loadSettings();\n    this.currentHighlightColor = initialSettings.general.highlightColor;\n  }\n\n  /**\n   * Disposes of the service by removing all active highlights.\n   * Should be called when the service is no longer needed to prevent memory leaks.\n   */\n  public dispose(): void {\n    this.unhighlightAll();\n  }\n\n  /**\n   * Type guard to determine if a state object is a Settings type.\n   *\n   * @param state - The state object to check\n   * @returns True if the state is a Settings object, false otherwise\n   */\n  private isSettings(state: HighlightStateUnion): state is Settings {\n    return 'general' in state;\n  }\n\n  /**\n   * Creates a highlight overlay element for the given SVG element.\n   *\n   * @param element - The SVG element to create a highlight for\n   * @returns A new SVG element configured as a highlight overlay\n   * @throws {TypeError} If the provided element is not an SVGElement\n   */\n  private createHighlightElement(element: SVGElement): SVGElement {\n    if (!(element instanceof SVGElement)) {\n      throw new TypeError('Invalid element provided for highlight creation');\n    }\n\n    const clone = Svg.createHighlightElement(\n      element,\n      this.currentHighlightColor,\n    );\n    clone.id = `${Constant.MAIDR_HIGHLIGHT}-${Date.now()}-${Math.random()}`;\n    return clone;\n  }\n\n  /**\n   * Handles updates to application settings by updating the highlight color.\n   *\n   * @param settings - The updated settings object containing the new highlight color\n   */\n  private handleSettingsUpdate(settings: Settings): void {\n    this.currentHighlightColor = settings.general.highlightColor;\n  }\n\n  /**\n   * Handles state updates for figure, subplot, or trace states.\n   * Determines the appropriate highlighting strategy based on state type.\n   *\n   * @param state - The state object containing highlight information\n   */\n  private handleStateUpdate(\n    state: SubplotState | TraceState | FigureState,\n  ): void {\n    if (state.empty) {\n      return;\n    }\n\n    this.unhighlightTraceElements();\n\n    if (state.type === 'figure') {\n      this.handleFigureState(state);\n    } else if (state.type === 'subplot') {\n      this.handleSubplotState(state);\n    } else {\n      this.handleTraceState(state);\n    }\n  }\n\n  /**\n   * Handles highlighting for figure-level state changes.\n   *\n   * @param state - The figure state containing highlight information\n   */\n  private handleFigureState(state: FigureState): void {\n    if (!state.empty) {\n      this.processHighlighting(state.highlight);\n    }\n  }\n\n  /**\n   * Handles highlighting for subplot-level state changes.\n   *\n   * @param state - The subplot state containing highlight information\n   */\n  private handleSubplotState(state: SubplotState): void {\n    if (!state.empty) {\n      this.processHighlighting(state.highlight);\n    }\n  }\n\n  /**\n   * Handles highlighting for trace-level state changes.\n   * Extracts elements from the highlight state and applies trace highlighting.\n   *\n   * @param state - The trace state containing highlight information\n   */\n  private handleTraceState(state: TraceState): void {\n    if (state.empty || state.highlight.empty) {\n      return;\n    }\n\n    const elements = this.getElementsFromHighlight(state.highlight);\n    this.highlightTraceElements(elements);\n  }\n\n  /**\n   * Processes highlighting based on whether the visualization is a multi-plot scenario.\n   * For multi-plot scenarios, applies subplot highlighting; otherwise clears subplot highlights.\n   *\n   * @param highlight - The highlight state containing elements to highlight\n   */\n  private processHighlighting(highlight: HighlightState): void {\n    if (highlight.empty) {\n      return;\n    }\n\n    const elements = this.getElementsFromHighlight(highlight);\n    const isMultiPlot = this.isMultiPlotScenario();\n\n    if (isMultiPlot) {\n      this.highlightSubplotElements(elements);\n    } else {\n      this.unhighlightSubplotElements();\n    }\n  }\n\n  /**\n   * Extracts SVG elements from a highlight state object.\n   * Normalizes the elements to always return an array.\n   *\n   * @param highlight - The highlight state containing element(s)\n   * @returns An array of SVG elements to highlight\n   */\n  private getElementsFromHighlight(highlight: HighlightState): SVGElement[] {\n    if (highlight.empty) {\n      return [];\n    }\n    return Array.isArray(highlight.elements)\n      ? highlight.elements\n      : [highlight.elements];\n  }\n\n  /**\n   * Determines if the current visualization contains multiple subplots.\n   * Checks the DOM for multiple axes groups to identify multi-plot scenarios.\n   *\n   * @returns True if more than one subplot exists, false otherwise\n   */\n  private isMultiPlotScenario(): boolean {\n    const totalSubplots = document.querySelectorAll('g[id^=\"axes_\"]').length;\n    return totalSubplots > 1;\n  }\n\n  /**\n   * Applies highlight overlays to trace-level SVG elements.\n   * Creates cloned highlight elements and tracks them in the highlightedElements map.\n   *\n   * @param elements - Array of SVG elements to highlight\n   */\n  private highlightTraceElements(elements: SVGElement[]): void {\n    for (const element of elements) {\n      try {\n        const highlightElement = this.createHighlightElement(element);\n        this.highlightedElements.set(element, highlightElement);\n      } catch (error) {\n        console.error('Failed to highlight element:', error);\n      }\n    }\n  }\n\n  /**\n   * Applies highlight styling to subplot-level SVG elements.\n   * Uses adaptive color calculation based on the figure background.\n   *\n   * @param elements - Array of subplot SVG elements to highlight\n   */\n  private highlightSubplotElements(elements: SVGElement[]): void {\n    this.unhighlightSubplotElements();\n    const figure = document.querySelector(\n      'g[id^=\"maidr-\"] > path[style*=\"fill\"]',\n    )?.parentElement as SVGElement | null;\n    const figureBgElement\n      = (figure?.querySelector('path[style*=\"fill\"]') as SVGElement) || undefined;\n    for (const element of elements) {\n      Svg.setSubplotHighlightSvgWithAdaptiveColor(\n        element,\n        this.currentHighlightColor,\n        figureBgElement,\n      );\n      this.highlightedSubplots.add(element);\n    }\n  }\n\n  /**\n   * Observer update method called when observed state changes.\n   * Routes to appropriate handler based on state type.\n   *\n   * @param state - The updated state object (Settings, SubplotState, TraceState, or FigureState)\n   */\n  public update(state: HighlightStateUnion): void {\n    try {\n      if (this.isSettings(state)) {\n        this.handleSettingsUpdate(state);\n      } else {\n        this.handleStateUpdate(state);\n      }\n    } catch (error) {\n      console.error('Failed to update highlight service:', error);\n    }\n  }\n\n  /**\n   * Manually highlights a single SVG element.\n   * Removes any existing highlight on the element before applying a new one.\n   *\n   * @param element - The SVG element to highlight\n   */\n  public highlight(element: SVGElement): void {\n    if (!(element instanceof SVGElement)) {\n      console.warn('Invalid element provided to highlight method');\n      return;\n    }\n\n    try {\n      this.unhighlight(element);\n      const highlightElement = this.createHighlightElement(element);\n      this.highlightedElements.set(element, highlightElement);\n    } catch (error) {\n      console.error('Failed to highlight element:', error);\n    }\n  }\n\n  /**\n   * Removes the highlight from a single SVG element.\n   * Safely handles cases where the element has no active highlight.\n   *\n   * @param element - The SVG element to remove highlight from\n   */\n  public unhighlight(element: SVGElement): void {\n    if (!(element instanceof SVGElement)) {\n      return;\n    }\n\n    const highlightElement = this.highlightedElements.get(element);\n    if (highlightElement) {\n      try {\n        highlightElement.remove();\n        this.highlightedElements.delete(element);\n      } catch (error) {\n        console.error('Failed to unhighlight element:', error);\n      }\n    }\n  }\n\n  /**\n   * Clears all active highlights from both trace elements and subplots.\n   * Use this method to reset the visual state of the visualization.\n   */\n  public clear(): void {\n    try {\n      this.highlightedElements.forEach((highlightElement) => {\n        highlightElement.remove();\n      });\n      this.highlightedElements.clear();\n      this.unhighlightSubplotElements();\n    } catch (error) {\n      console.error('Failed to clear highlights:', error);\n    }\n  }\n\n  /**\n   * Removes all trace-level highlights from the DOM and clears the tracking map.\n   */\n  private unhighlightTraceElements(): void {\n    this.highlightedElements.forEach((highlightElement) => {\n      highlightElement.remove();\n    });\n    this.highlightedElements.clear();\n  }\n\n  /**\n   * Removes all subplot-level highlight styling and clears the tracking set.\n   */\n  private unhighlightSubplotElements(): void {\n    this.highlightedSubplots.forEach((element) => {\n      Svg.removeSubplotHighlightSvg(element);\n    });\n    this.highlightedSubplots.clear();\n  }\n\n  /**\n   * Removes all highlights from both trace elements and subplots.\n   * Called internally during disposal and cleanup operations.\n   */\n  private unhighlightAll(): void {\n    this.unhighlightTraceElements();\n    this.unhighlightSubplotElements();\n  }\n}\n","import type { Disposable } from '@type/disposable';\nimport type { Event } from '@type/event';\nimport { Emitter } from '@type/event';\n\n/**\n * Event payload for notification changes.\n */\ninterface NotificationChangedEvent {\n  /** The notification message content */\n  value: string;\n}\n\n/**\n * Service for managing and broadcasting notification messages throughout the application.\n */\nexport class NotificationService implements Disposable {\n  private readonly onChangeEmitter: Emitter<NotificationChangedEvent>;\n  /** Event that fires when a notification is triggered */\n  public readonly onChange: Event<NotificationChangedEvent>;\n\n  /**\n   * Creates a new NotificationService instance and initializes the event emitter.\n   */\n  public constructor() {\n    this.onChangeEmitter = new Emitter<NotificationChangedEvent>();\n    this.onChange = this.onChangeEmitter.event;\n  }\n\n  /**\n   * Disposes of the notification service and cleans up event listeners.\n   */\n  public dispose(): void {\n    this.onChangeEmitter.dispose();\n  }\n\n  /**\n   * Broadcasts a notification message to all registered listeners.\n   * @param message - The notification message to broadcast\n   */\n  public notify(message: string): void {\n    if (!message) {\n      return;\n    }\n\n    this.onChangeEmitter.fire({ value: message });\n  }\n}\n","import type { Disposable } from '@type/disposable';\nimport type { Event } from '@type/event';\nimport type { Observer } from '@type/observable';\nimport type { TraceState } from '@type/state';\nimport type { DisplayService } from './display';\nimport type { NotificationService } from './notification';\nimport type { TextService } from './text';\nimport { Emitter, Scope } from '@type/event';\n\n/**\n * Event data emitted when the review content changes.\n */\ninterface ReviewChangedEvent {\n  value: string;\n}\n\n/**\n * Manages review mode functionality for trace data, generating formatted review text.\n */\nexport class ReviewService implements Observer<TraceState>, Disposable {\n  private readonly notification: NotificationService;\n  private readonly display: DisplayService;\n  private readonly text: TextService;\n\n  private enabled: boolean;\n\n  private readonly onChangeEmitter: Emitter<ReviewChangedEvent>;\n  public readonly onChange: Event<ReviewChangedEvent>;\n\n  /**\n   * Creates a new ReviewService instance.\n   * @param notification - Service for displaying notifications\n   * @param display - Service for managing display focus\n   * @param text - Service for formatting text output\n   */\n  public constructor(notification: NotificationService, display: DisplayService, text: TextService) {\n    this.notification = notification;\n    this.display = display;\n    this.text = text;\n\n    this.enabled = false;\n\n    this.onChangeEmitter = new Emitter<ReviewChangedEvent>();\n    this.onChange = this.onChangeEmitter.event;\n  }\n\n  /**\n   * Disposes of the review service and cleans up event emitters.\n   */\n  public dispose(): void {\n    this.onChangeEmitter.dispose();\n  }\n\n  /**\n   * Updates the review content based on the current trace state.\n   * @param state - The current trace state to generate review from\n   */\n  public update(state: TraceState): void {\n    if (!this.enabled || state.empty) {\n      return;\n    }\n\n    const review = this.text.format(state);\n    if (review) {\n      this.onChangeEmitter.fire({ value: review });\n    }\n  }\n\n  /**\n   * Toggles review mode on or off and updates the display focus.\n   * @param state - The current trace state to review\n   */\n  public toggle(state: TraceState): void {\n    if (state.empty) {\n      const noInfo = 'No info for review';\n      this.notification.notify(noInfo);\n      return;\n    }\n\n    this.enabled = !this.enabled;\n    this.update(state);\n    this.display.toggleFocus(Scope.REVIEW);\n\n    const message = `Review is ${this.enabled ? 'on' : 'off'}`;\n    this.notification.notify(message);\n  }\n}\n","import type { Context } from '@model/context';\nimport type { TextService } from './text';\nimport { AbstractTrace } from '@model/abstract';\nimport { isGridNavigable } from '@type/navigation';\nimport { Constant } from '@util/constant';\n\n/**\n * Manages rotor-based navigation for the active trace via alt+shift+up and alt+shift+down\n *\n * Purpose:\n * - Provide modal navigation over a trace by rotating through available modes.\n *\n * Available modes vary by trace type:\n * - Non-scatter traces: DATA_MODE → LOWER_VALUE_MODE → HIGHER_VALUE_MODE\n * - Scatter traces (with grid): ROW_COL_MODE → GRID_MODE\n * - Scatter traces (no grid): ROW_COL_MODE only\n *\n * Mode descriptions:\n * - DATA_MODE / ROW_COL_MODE: Default data browsing. The display name is trace-specific.\n * - LOWER_VALUE_MODE: Navigate to data points with lower y-values (non-scatter only).\n * - HIGHER_VALUE_MODE: Navigate to data points with higher y-values (non-scatter only).\n * - GRID_MODE: Navigate by grid cells in scatter plots (scatter with grid config only).\n *\n * Responsibilities:\n * - Track the current rotor mode and expose helpers to cycle forward/backward across modes.\n * - Coordinate scope focus: entering a compare mode (LOWER/HIGHER) may switch focus to\n *   the rotor scope; returning to data mode restores focus to the trace scope.\n * - Delegate directional movement to the active {@link AbstractTrace} implementation using\n *   rotor-aware APIs, with a fallback to compare-based traversal when rotor methods are\n *   unavailable.\n *\n * Dependencies:\n * - Context: Provides the active trace and current scope.\n * - TextService: Reserved for user-facing feedback/messages and parity with other services.\n *\n * Notes:\n * - UI-agnostic: this service contains no rendering logic and does not depend on the UI.\n * - Returns user-facing messages from movement methods when a move is not possible; callers\n *   may surface these through the ViewModel/UI.\n */\nexport class RotorNavigationService {\n  private readonly context: Context;\n  private readonly text: TextService;\n  private rotorIndex: number;\n\n  /**\n   * Creates a new RotorNavigationService instance.\n   * @param context - The context providing access to the active trace\n   */\n  public constructor(context: Context, text: TextService) {\n    this.context = context;\n    this.rotorIndex = 0;\n    this.text = text;\n  }\n\n  /**\n   * Advances to the next rotor navigation mode.\n   * @returns The name of the new rotor mode, or grid info if entering grid mode\n   */\n  public moveToNextRotorUnit(): string {\n    const modes = this.getAvailableModes();\n    this.rotorIndex = (this.rotorIndex + 1) % modes.length;\n\n    this.setMode();\n    return this.formatModeDisplay();\n  }\n\n  /**\n   * Moves to the previous rotor navigation mode.\n   * @returns The name of the new rotor mode, or grid info if entering grid mode\n   */\n  public moveToPrevRotorUnit(): string {\n    const modes = this.getAvailableModes();\n    this.rotorIndex = (this.rotorIndex - 1 + modes.length) % modes.length;\n\n    this.setMode();\n    return this.formatModeDisplay();\n  }\n\n  /**\n   * Formats the mode display string.\n   * For grid mode, returns \"GRID NAVIGATION: 5×4 GRID\".\n   * For other modes, returns the mode name.\n   */\n  private formatModeDisplay(): string {\n    const mode = this.getMode();\n    if (mode === Constant.GRID_MODE) {\n      const activeTrace = this.context.active;\n      if (isGridNavigable(activeTrace)) {\n        const dims = activeTrace.getGridDimensions();\n        if (dims) {\n          return `GRID NAVIGATION: ${dims.rows}×${dims.cols} GRID`;\n        }\n      }\n    }\n    return mode;\n  }\n\n  /**\n   * Gets the current rotor mode index.\n   * @returns The current rotor index\n   */\n  public getCurrentUnit(): number {\n    return this.rotorIndex;\n  }\n\n  /**\n   * Moves to the next data point in the specified direction based on current compare mode.\n   * @param direction - The direction to move ('left' or 'right')\n   * @returns Error message if move failed, null otherwise\n   */\n  public callMoveToNextCompareMethod(direction: 'left' | 'right'): string | null {\n    const activeTrace = this.context.active;\n\n    const compareType = this.getCompareType();\n    if (compareType !== 'lower' && compareType !== 'higher') {\n      console.error(`Unexpected compare type: ${compareType}`);\n      return null;\n    }\n    // Check if activeTrace is an instance of AbstractTrace and supports moveToNextHigherValue\n    if (activeTrace instanceof AbstractTrace) {\n      const xValue = activeTrace.getCurrentXValue(); // Get the current X value\n      if (xValue !== null) {\n        const moved = activeTrace.moveToNextCompareValue(direction, compareType);\n        if (!moved) {\n          const msg = this.getMessage(compareType, direction);\n          console.warn(msg);\n          return msg;\n        }\n      } else {\n        console.error('Unable to retrieve the current X value.');\n      }\n    } else {\n      console.error('The active trace does not support \\'callMoveToNextCompareMethod\\'.');\n    }\n    return null;\n  }\n\n  /**\n   * Moves up to a data point with lower/higher value based on rotor mode,\n   * or moves up one grid cell in grid mode.\n   * @returns Error message if move failed, null otherwise\n   */\n  public moveUp(): string | null {\n    if (this.isGridMode()) {\n      return this.moveGrid('up');\n    }\n\n    const activeTrace = this.context.active;\n    try {\n      if (activeTrace instanceof AbstractTrace) {\n        const moved = activeTrace.moveUpRotor(this.getCompareType());\n        if (!moved) {\n          const msg = this.getMessage(this.getCompareType(), 'above');\n          console.warn(msg);\n          return msg;\n        }\n      }\n    } catch {\n      // default behavior is to mirror move right\n      return this.moveRight();\n    }\n    return null;\n  }\n\n  /**\n   * Moves down to a data point with lower/higher value based on rotor mode,\n   * or moves down one grid cell in grid mode.\n   * @returns Error message if move failed, null otherwise\n   */\n  public moveDown(): string | null {\n    if (this.isGridMode()) {\n      return this.moveGrid('down');\n    }\n\n    const activeTrace = this.context.active;\n    try {\n      if (activeTrace instanceof AbstractTrace) {\n        const moved = activeTrace.moveDownRotor(this.getCompareType());\n        if (!moved) {\n          const msg = this.getMessage(this.getCompareType(), 'below');\n          console.warn(msg);\n          return msg;\n        }\n      }\n    } catch {\n      // default behavior is to mirror move left\n      return this.moveLeft();\n    }\n    return null;\n  }\n\n  /**\n   * Moves left to a data point with lower/higher value based on rotor mode,\n   * or moves left one grid cell in grid mode.\n   * @returns Error message if move failed, null otherwise\n   */\n  public moveLeft(): string | null {\n    if (this.isGridMode()) {\n      return this.moveGrid('left');\n    }\n\n    const activeTrace = this.context.active;\n    try {\n      if (activeTrace instanceof AbstractTrace) {\n        const moved = activeTrace.moveLeftRotor(this.getCompareType());\n        if (!moved) {\n          const msg = this.getMessage(this.getCompareType(), 'left');\n          console.warn(msg);\n          return msg;\n        }\n      }\n    } catch {\n      // default behavior is to mirror move left\n      return this.callMoveToNextCompareMethod('left');\n    }\n    return null;\n  }\n\n  /**\n   * Moves right to a data point with lower/higher value based on rotor mode,\n   * or moves right one grid cell in grid mode.\n   * @returns Error message if move failed, null otherwise\n   */\n  public moveRight(): string | null {\n    if (this.isGridMode()) {\n      return this.moveGrid('right');\n    }\n\n    const activeTrace = this.context.active;\n    try {\n      if (activeTrace instanceof AbstractTrace) {\n        const moved = activeTrace.moveRightRotor(this.getCompareType());\n        if (!moved) {\n          const msg = this.getMessage(this.getCompareType(), 'right');\n          console.warn(msg);\n          return msg;\n        }\n      }\n    } catch {\n      // default behavior is to mirror move right\n      return this.callMoveToNextCompareMethod('right');\n    }\n    return null;\n  }\n\n  /**\n   * Sets the rotor mode based on the current index and updates context state.\n   */\n  public setMode(): void {\n    const currMode = this.getMode();\n    if (this.isDataMode(currMode)) {\n      this.context.setRotorEnabled(false);\n      this.notifyGridMode(false);\n      return;\n    }\n    this.context.setRotorEnabled(true);\n    this.notifyGridMode(currMode === Constant.GRID_MODE);\n  }\n\n  /**\n   * Gets the current rotor mode name.\n   * @returns The display name of the current rotor mode\n   */\n  public getMode(): string {\n    const modes = this.getAvailableModes();\n    // Clamp index in case modes list changed between cycles\n    const idx = this.rotorIndex % modes.length;\n    return modes[idx];\n  }\n\n  /**\n   * Gets the comparison type for the current rotor mode.\n   * @returns 'lower' or 'higher' based on the current mode\n   */\n  public getCompareType(): 'lower' | 'higher' {\n    const currMode = this.getMode();\n    if (currMode === Constant.HIGHER_VALUE_MODE) {\n      return 'higher';\n    } else if (currMode === Constant.LOWER_VALUE_MODE) {\n      return 'lower';\n    }\n    return 'lower'; // fallback\n  }\n\n  public getMessage(navType: string, direction: string): string {\n    if (this.text.isOff()) {\n      return '';\n    }\n    if (this.text.isTerse()) {\n      const preposition = direction === 'above' || direction === 'below' ? '' : 'on the ';\n      return `No ${navType} value found ${preposition}${direction}`;\n    }\n    const position = direction === 'above' || direction === 'below' ? `${direction} ` : `to the ${direction} of `;\n    return `No ${navType} value found ${position}the current value.`;\n  }\n\n  /**\n   * Builds the list of available rotor modes based on active trace capabilities.\n   * - Always includes the trace's data mode name (DATA_MODE or ROW_COL_MODE)\n   * - Includes LOWER/HIGHER value modes if trace supports compare\n   * - Includes GRID_MODE if trace supports grid navigation\n   */\n  private getAvailableModes(): string[] {\n    const activeTrace = this.context.active;\n    const modes: string[] = [];\n\n    if (activeTrace instanceof AbstractTrace) {\n      modes.push(activeTrace.dataModeName());\n\n      if (activeTrace.supportsCompareMode()) {\n        modes.push(Constant.LOWER_VALUE_MODE);\n        modes.push(Constant.HIGHER_VALUE_MODE);\n      }\n\n      if (isGridNavigable(activeTrace) && activeTrace.supportsGridMode()) {\n        modes.push(Constant.GRID_MODE);\n      }\n    } else {\n      modes.push(Constant.DATA_MODE);\n    }\n\n    return modes;\n  }\n\n  /**\n   * Checks if the given mode name is a data mode (either DATA_MODE or ROW_COL_MODE).\n   */\n  private isDataMode(mode: string): boolean {\n    return mode === Constant.DATA_MODE || mode === Constant.ROW_COL_MODE;\n  }\n\n  /**\n   * Checks if the current rotor mode is GRID_MODE.\n   */\n  private isGridMode(): boolean {\n    return this.getMode() === Constant.GRID_MODE;\n  }\n\n  /**\n   * Notifies the active trace to enter or exit grid mode.\n   */\n  private notifyGridMode(enabled: boolean): void {\n    const activeTrace = this.context.active;\n    if (isGridNavigable(activeTrace)) {\n      activeTrace.setGridMode(enabled);\n    }\n  }\n\n  /**\n   * Handles grid navigation in the specified direction.\n   * @returns Error message if grid not supported, null otherwise (boundary handled by notifyOutOfBounds)\n   */\n  private moveGrid(direction: 'up' | 'down' | 'left' | 'right'): string | null {\n    const activeTrace = this.context.active;\n    if (!isGridNavigable(activeTrace) || !activeTrace.supportsGridMode()) {\n      return this.getMessage('grid', direction);\n    }\n\n    // Grid move methods call notifyOutOfBounds() on boundary, which handles audio/text\n    switch (direction) {\n      case 'up':\n        activeTrace.moveGridUp();\n        break;\n      case 'down':\n        activeTrace.moveGridDown();\n        break;\n      case 'left':\n        activeTrace.moveGridLeft();\n        break;\n      case 'right':\n        activeTrace.moveGridRight();\n        break;\n    }\n\n    return null;\n  }\n}\n","import type { DisplayService } from '@service/display';\nimport type { StorageService } from '@service/storage';\nimport type { Disposable } from '@type/disposable';\nimport type { Event } from '@type/event';\nimport type { Observer } from '@type/observable';\nimport type { Settings } from '@type/settings';\nimport { Emitter, Scope } from '@type/event';\n\nconst SETTINGS_KEY = 'maidr-settings';\n\nfunction getValue<T>(settings: any, key: string): T | undefined {\n  return key.split('.').reduce((acc, part) => {\n    return acc && acc[part];\n  }, settings);\n}\n\nfunction getSettingValue<T>(settings: any, key: string): T {\n  const value = getValue(settings, key);\n  if (value === undefined) {\n    throw new Error(`Setting not found: ${key}`);\n  }\n  return value as T;\n}\n\nclass SettingsChangedEvent {\n  public readonly oldSettings: Settings;\n  public readonly newSettings: Settings;\n\n  public constructor(oldSettings: Settings, newSettings: Settings) {\n    this.oldSettings = oldSettings;\n    this.newSettings = newSettings;\n  }\n\n  public affectsSetting(id: string): boolean {\n    const oldValue = getSettingValue(this.oldSettings, id);\n    const newValue = getSettingValue(this.newSettings, id);\n    return JSON.stringify(oldValue) !== JSON.stringify(newValue);\n  }\n\n  public get<T>(settingPath: string): T {\n    return getSettingValue<T>(this.newSettings, settingPath);\n  }\n}\n\nexport class SettingsService implements Disposable {\n  private readonly storage: StorageService;\n  private readonly display: DisplayService;\n\n  private readonly defaultSettings: Settings;\n  private currentSettings: Settings;\n  private observers: Observer<Settings>[];\n\n  private readonly onChangeEmitter: Emitter<SettingsChangedEvent>;\n  public readonly onChange: Event<SettingsChangedEvent>;\n\n  public constructor(storage: StorageService, display: DisplayService) {\n    this.storage = storage;\n    this.display = display;\n    this.observers = [];\n\n    this.defaultSettings = {\n      general: {\n        volume: 50,\n        highlightColor: '#03c809',\n        highContrastMode: false,\n        highContrastLevels: 2,\n        highContrastLightColor: '#ffffff',\n        highContrastDarkColor: '#000000',\n        brailleDisplaySize: 32,\n        minFrequency: 200,\n        maxFrequency: 1000,\n        autoplayDuration: 4000,\n        ariaMode: 'assertive',\n        hoverMode: 'pointermove',\n      },\n      llm: {\n        expertiseLevel: 'basic',\n        customInstruction: '',\n        models: {\n          OPENAI: {\n            enabled: false,\n            apiKey: '',\n            name: 'OpenAI',\n            version: 'gpt-4o',\n          },\n          ANTHROPIC_CLAUDE: {\n            enabled: false,\n            apiKey: '',\n            name: 'Anthropic Claude',\n            version: 'claude-3-7-sonnet-latest',\n          },\n          GOOGLE_GEMINI: {\n            enabled: false,\n            apiKey: '',\n            name: 'Google Gemini',\n            version: 'gemini-2.0-flash',\n          },\n        },\n      },\n    };\n    this.onChangeEmitter = new Emitter<SettingsChangedEvent>();\n    this.onChange = this.onChangeEmitter.event;\n    const saved = this.storage.load<Settings>(SETTINGS_KEY);\n    this.currentSettings = saved ?? this.defaultSettings;\n  }\n\n  public dispose(): void {\n    this.onChangeEmitter.dispose();\n  }\n\n  public loadSettings(): Settings {\n    return this.currentSettings;\n  }\n\n  public saveSettings(newSettings: Settings): void {\n    const oldSettings = this.currentSettings;\n    this.currentSettings = newSettings;\n\n    this.storage.save(SETTINGS_KEY, this.currentSettings);\n    this.onChangeEmitter.fire(new SettingsChangedEvent(oldSettings, newSettings));\n  }\n\n  public resetSettings(): Settings {\n    const oldSettings = this.currentSettings;\n    this.currentSettings = this.defaultSettings;\n\n    this.storage.remove(SETTINGS_KEY);\n    this.onChangeEmitter.fire(new SettingsChangedEvent(oldSettings, this.currentSettings));\n    return this.currentSettings;\n  }\n\n  public get<T>(settingPath: string): T {\n    return getSettingValue<T>(this.currentSettings, settingPath);\n  }\n\n  public toggle(): void {\n    this.display.toggleFocus(Scope.SETTINGS);\n  }\n\n  public addObserver(observer: Observer<Settings>): void {\n    this.observers.push(observer);\n  }\n\n  /**\n   * Unregisters an observer from settings change notifications.\n   * @param observer - The observer to remove from the notification list\n   */\n  public removeObserver(observer: Observer<Settings>): void {\n    this.observers = this.observers.filter(obs => obs !== observer);\n  }\n\n  /**\n   * Notifies all registered observers of the current settings state.\n   */\n  public notifyStateUpdate(): void {\n    for (const observer of this.observers) {\n      observer.update(this.currentSettings);\n    }\n  }\n}\n","/**\n * Interface for storage operations to persist and retrieve data.\n */\nexport interface StorageService {\n  /**\n   * Saves a value to storage with the specified key.\n   * @param key - The storage key\n   * @param value - The value to store\n   */\n  save: <T>(key: string, value: T) => void;\n  /**\n   * Loads a value from storage by key.\n   * @param key - The storage key\n   * @returns The stored value or null if not found\n   */\n  load: <T>(key: string) => T | null;\n  /**\n   * Removes a value from storage by key.\n   * @param key - The storage key\n   */\n  remove: (key: string) => void;\n}\n\n/**\n * Implementation of StorageService using browser's localStorage API.\n */\nexport class LocalStorageService implements StorageService {\n  /**\n   * Saves a value to localStorage by serializing it to JSON.\n   * @param key - The storage key\n   * @param value - The value to store\n   */\n  public save<T>(key: string, value: T): void {\n    try {\n      const serialized = JSON.stringify(value);\n      localStorage.setItem(key, serialized);\n    } catch (error) {\n      console.error(`Error while saving ${key} to storage`, error);\n    }\n  }\n\n  /**\n   * Loads a value from localStorage and deserializes it from JSON.\n   * @param key - The storage key\n   * @returns The stored value or null if not found or on error\n   */\n  public load<T>(key: string): T | null {\n    try {\n      const serialized = localStorage.getItem(key);\n      if (serialized === null) {\n        return null;\n      }\n\n      return JSON.parse(serialized) as T;\n    } catch (error) {\n      console.error(`Error while loading ${key} from storage`, error);\n      return null;\n    }\n  }\n\n  /**\n   * Removes a value from localStorage by key.\n   * @param key - The storage key\n   */\n  public remove(key: string): void {\n    try {\n      localStorage.removeItem(key);\n    } catch (error) {\n      console.error(`Error while removing ${key} from storage`, error);\n    }\n  }\n}\n","import type { BoxPoint, CandlestickTrend, Orientation, TraceType } from '@type/grammar';\nimport type { MovableDirection } from './movable';\n\n/**\n * Union type representing state at any level of the plot hierarchy.\n */\nexport type PlotState = FigureState | SubplotState | TraceState;\n\n/**\n * State for the top-level figure containing metadata and current subplot state.\n */\nexport type FigureState\n  = | {\n    empty: true;\n    type: 'figure';\n    warning?: boolean;\n  }\n  | {\n    empty: false;\n    type: 'figure';\n    title: string;\n    subtitle: string;\n    caption: string;\n    size: number;\n    index: number;\n    subplot: SubplotState;\n    traceTypes: string[];\n    highlight: HighlightState; // Figure manages subplot highlighting\n  };\n\n/**\n * State for a subplot containing its index, size, and current trace state.\n */\nexport type SubplotState\n  = | {\n    empty: true;\n    type: 'subplot';\n    warning?: boolean;\n  }\n  | {\n    empty: false;\n    type: 'subplot';\n    size: number;\n    index: number;\n    trace: TraceState;\n    highlight: HighlightState;\n  };\n\n/**\n * Empty trace state used as a placeholder when no data is available.\n */\ninterface TraceEmptyState {\n  empty: true;\n  type: 'trace';\n  traceType: TraceType;\n  audio: AudioEmptyState;\n  warning?: boolean;\n}\n\n/**\n * State for a single trace/layer containing all rendering and navigation information.\n */\nexport type TraceState\n  = | TraceEmptyState\n    | {\n      empty: false;\n      type: 'trace';\n      /** Unique identifier for the layer/trace */\n      layerId: string;\n      traceType: TraceType;\n      plotType: string;\n      title: string;\n      xAxis: string;\n      yAxis: string;\n      z: string;\n      hasMultiPoints: boolean;\n      audio: AudioState;\n      braille: BrailleState;\n      text: TextState;\n      autoplay: AutoplayState;\n      highlight: HighlightState;\n      /**\n       * Array of audio states for all lines that intersect at the current point.\n       * Used for intersection-aware audio playback in multiline plots.\n       * null/undefined for normal points (single line or no intersection).\n       */\n      intersections?: AudioState[] | null;\n      /**\n       * Number of groups/series in the plot.\n       * Only present for multiline plots where plotType === 'multiline'.\n       */\n      groupCount?: number;\n      /**\n       * Plot orientation, if applicable (e.g. bar, box, violin).\n       */\n      orientation?: Orientation;\n    };\n\n/**\n * Type narrowing for non-empty trace states with full data.\n */\nexport type NonEmptyTraceState = Extract<TraceState, { empty: false }>;\n\n/**\n * Extended trace state for layer switching mode with navigation indices.\n */\nexport interface LayerSwitchTraceState extends NonEmptyTraceState {\n  isLayerSwitch: true;\n  index: number;\n  size: number;\n}\n\n/**\n * Type guard to check if a trace state is in layer switch mode.\n */\nexport function isLayerSwitchTraceState(state: TraceState): state is LayerSwitchTraceState {\n  return (\n    !state.empty\n    && (state as Partial<LayerSwitchTraceState>).isLayerSwitch === true\n    && typeof (state as Partial<LayerSwitchTraceState>).index === 'number'\n    && typeof (state as Partial<LayerSwitchTraceState>).size === 'number'\n  );\n}\n\n/**\n * Minimal audio state for empty traces containing only navigation indices.\n */\nexport interface AudioEmptyState {\n  y: number;\n  x: number;\n  rows: number;\n  cols: number;\n}\n\n/**\n * Audio state containing frequency mapping and current value for sonification.\n */\nexport interface AudioState {\n  freq: {\n    min: number;\n    max: number;\n    raw: number | number[];\n  };\n  panning: {\n    y: number;\n    x: number;\n    rows: number;\n    cols: number;\n  };\n  /**\n   * Group index for multiclass plots.\n   * Used to determine which audio palette entry to use.\n   * If undefined, defaults to 0 (single group).\n   */\n  group?: number;\n  /**\n   * Indicates whether the audio is continuous.\n   * If true, the audio plays without interruption.\n   * If false or undefined, the audio may have discrete segments.\n   */\n  isContinuous?: boolean;\n  /**\n   * Candlestick trend information for audio palette selection.\n   * Used by AudioService to determine appropriate audio characteristics.\n   * Only applicable for candlestick traces.\n   */\n  trend?: CandlestickTrend;\n  /**\n   * Volume multiplier for dynamic volume control.\n   * Used to scale audio volume based on data characteristics (e.g., violin plot width).\n   * If undefined, defaults to 1.0 (no volume scaling).\n   * Range should typically be between 0.0 and 1.0, but can exceed 1.0 for emphasis.\n   */\n  volumeMultiplier?: number;\n  /**\n   * Volume scale for dynamic volume control (0-1 range).\n   * Used to scale audio volume based on density values (e.g., violin plot density).\n   * If undefined, defaults to 1.0 (no volume scaling).\n   * Range is 0.0 to 1.0, where 0.0 = quietest and 1.0 = loudest.\n   */\n  volumeScale?: number;\n}\n\n/**\n * Union type for all braille display states across different plot types.\n */\nexport type BrailleState\n  = | TraceEmptyState\n    | BarBrailleState\n    | BoxBrailleState\n    | HeatmapBrailleState\n    | LineBrailleState;\n\n/**\n * Base braille state with common properties for all plot types.\n */\ninterface BaseBrailleState {\n  id: string;\n  empty: false;\n  row: number;\n  col: number;\n  custom?: string[];\n}\n\n/**\n * Braille state for bar charts with grouped values and min/max per group.\n */\nexport interface BarBrailleState extends BaseBrailleState {\n  values: number[][];\n  min: number[];\n  max: number[];\n}\n\n/**\n * Braille state for boxplots with quartile information.\n */\nexport interface BoxBrailleState extends BaseBrailleState {\n  values: BoxPoint[];\n  min: number;\n  max: number;\n}\n\n/**\n * Braille state for candlestick charts with OHLC values.\n */\nexport interface CandlestickBrailleState extends BaseBrailleState {\n  values: number[][];\n  min: number;\n  max: number;\n}\n\n/**\n * Braille state for line charts with multi-series values.\n */\nexport interface LineBrailleState extends BaseBrailleState {\n  values: number[][];\n  min: number[];\n  max: number[];\n}\n\n/**\n * Braille state for heatmaps with 2D grid values.\n */\nexport interface HeatmapBrailleState extends BaseBrailleState {\n  values: number[][];\n  min: number;\n  max: number;\n}\n\n/**\n * Axis type identifier for formatting.\n */\nexport type AxisType = 'x' | 'y' | 'z';\n\n/**\n * Text description state containing labels and values for screen reader output.\n */\nexport interface TextState {\n  main: { label: string; value: number | number[] | string };\n  cross: { label: string; value: number | number[] | string };\n  z?: { label: string; value: number | string };\n  range?: { min: number; max: number };\n  section?: string;\n  /**\n   * Original axis identity for main value.\n   * For vertical plots: 'x', for horizontal plots: 'y'.\n   * Used to apply correct formatter regardless of orientation.\n   */\n  mainAxis?: AxisType;\n  /**\n   * Original axis identity for cross value.\n   * For vertical plots: 'y', for horizontal plots: 'x'.\n   * Used to apply correct formatter regardless of orientation.\n   */\n  crossAxis?: AxisType;\n  /**\n   * Range for the cross axis, used in grid navigation to show both axis ranges.\n   */\n  crossRange?: { min: number; max: number };\n  /**\n   * Points in the current grid cell, listed as coordinate pairs.\n   */\n  gridPoints?: { x: number; y: number }[];\n  /**\n   * Current grid cell position (1-indexed for display).\n   */\n  gridPosition?: { row: number; col: number };\n}\n\n/**\n * Autoplay state mapping directions to point counts for continuous playback.\n */\nexport type AutoplayState = {\n  [key in MovableDirection]: number;\n};\n\n/**\n * Highlight state for visual emphasis of current plot elements.\n */\nexport type HighlightState\n  = | {\n    empty: true;\n    type: 'trace';\n    traceType?: TraceType;\n    audio: AudioEmptyState;\n  }\n  | {\n    empty: false;\n    elements: SVGElement | SVGElement[];\n  };\n","import type { Disposable } from '@type/disposable';\nimport type { Event } from '@type/event';\nimport type { Observer } from '@type/observable';\nimport type { PlotState, TextState, TraceState } from '@type/state';\nimport type { AxisType, FormatterService } from './formatter';\nimport type { NotificationService } from './notification';\nimport { BoxplotSection } from '@type/boxplotSection';\nimport { Emitter } from '@type/event';\nimport { isLayerSwitchTraceState } from '@type/state';\nimport { Constant } from '@util/constant';\n\n/**\n * Enumeration of available text output modes.\n */\nenum TextMode {\n  OFF = 'off',\n  TERSE = 'terse',\n  VERBOSE = 'verbose',\n}\n\n/**\n * Event emitted when text content changes.\n */\ninterface TextChangedEvent {\n  value: string;\n}\n\n/**\n * Event emitted during text navigation actions.\n */\ninterface TextNavigationEvent {\n  type: 'first_navigation';\n}\n\n/**\n * Service for managing text output and formatting of plot state information.\n */\nexport class TextService implements Observer<PlotState>, Disposable {\n  private readonly notification: NotificationService;\n  private readonly formatter?: FormatterService;\n\n  private mode: TextMode;\n  private currentState: PlotState | null = null;\n  private currentSubplotIndex: number | null = null;\n  private currentLayerId: string | null = null;\n  private hasHadFirstNavigation: boolean = false;\n\n  private readonly onChangeEmitter: Emitter<TextChangedEvent>;\n  public readonly onChange: Event<TextChangedEvent>;\n\n  private readonly onNavigationEmitter: Emitter<TextNavigationEvent>;\n  public readonly onNavigation: Event<TextNavigationEvent>;\n\n  /**\n   * Constructs a TextService instance with notification support.\n   * @param notification - The notification service for user alerts\n   * @param formatter - Optional formatter service for custom value formatting\n   */\n  public constructor(notification: NotificationService, formatter?: FormatterService) {\n    this.notification = notification;\n    this.formatter = formatter;\n\n    this.mode = TextMode.VERBOSE;\n\n    this.onChangeEmitter = new Emitter<TextChangedEvent>();\n    this.onChange = this.onChangeEmitter.event;\n\n    this.onNavigationEmitter = new Emitter<TextNavigationEvent>();\n    this.onNavigation = this.onNavigationEmitter.event;\n  }\n\n  /**\n   * Disposes of event emitters and releases resources.\n   */\n  public dispose(): void {\n    this.onChangeEmitter.dispose();\n    this.onNavigationEmitter.dispose();\n  }\n\n  /**\n   * Formats a single value using the formatter service if available.\n   * Falls back to String() conversion if no formatter is configured.\n   *\n   * @param value - The value to format\n   * @param axis - The axis type ('x', 'y', or 'z')\n   * @returns Formatted string representation of the value\n   */\n  private formatSingleValue(value: number | string, axis: AxisType): string {\n    if (this.formatter && this.currentLayerId) {\n      return this.formatter.formatSingleValue(value, this.currentLayerId, axis);\n    }\n    return String(value);\n  }\n\n  /**\n   * Formats an array of values using the formatter service if available.\n   * Falls back to String() conversion for each element if no formatter is configured.\n   *\n   * @param values - The array of values to format\n   * @param axis - The axis type ('x', 'y', or 'z')\n   * @returns Array of formatted strings\n   */\n  private formatArrayValue(values: (number | string)[], axis: AxisType): string[] {\n    if (this.formatter && this.currentLayerId) {\n      return this.formatter.formatArrayValue(values, this.currentLayerId, axis);\n    }\n    return values.map(v => String(v));\n  }\n\n  /**\n   * Get the current state that was last processed by the TextService\n   * This provides access to state information without violating dependency flow\n   */\n  public getCurrentState(): PlotState | null {\n    return this.currentState;\n  }\n\n  /**\n   * Get coordinate information from the current state\n   * Returns null if no valid state is available\n   */\n  public getCoordinateText(): string | null {\n    if (!this.currentState || this.currentState.empty) {\n      return null;\n    }\n\n    // Handle different state types\n    if (this.currentState.type === 'subplot' && !this.currentState.trace.empty) {\n      return this.formatCoordinateText(this.currentState.trace);\n    } else if (this.currentState.type === 'trace' && !this.currentState.empty) {\n      return this.formatCoordinateText(this.currentState);\n    }\n\n    return null;\n  }\n\n  /**\n   * Check if the current state represents a layer switch\n   * Returns true if the subplot index has changed\n   */\n  public isLayerSwitch(): boolean {\n    if (!this.currentState || this.currentState.empty || this.currentState.type !== 'subplot') {\n      return false;\n    }\n\n    const newSubplotIndex = this.currentState.index;\n\n    if (this.currentSubplotIndex !== null && this.currentSubplotIndex !== newSubplotIndex) {\n      // Layer switch detected - subplot index changed\n      this.currentSubplotIndex = newSubplotIndex;\n      return true;\n    } else if (this.currentSubplotIndex === null) {\n      // First time setting the subplot index\n      this.currentSubplotIndex = newSubplotIndex;\n      // If this is not the first layer (index 0), treat it as a layer switch\n      return newSubplotIndex !== 0;\n    }\n\n    return false;\n  }\n\n  /**\n   * Check if the first navigation has occurred\n   * Returns true if the user has navigated at least once\n   */\n  public getHasHadFirstNavigation(): boolean {\n    return this.hasHadFirstNavigation;\n  }\n\n  /**\n   * Enable announcements after first navigation\n   * This method can be called externally to enable announcements\n   */\n  public enableAnnouncements(): void {\n    this.onNavigationEmitter.fire({ type: 'first_navigation' });\n  }\n\n  /**\n   * Formats coordinate information from trace state into readable text.\n   * @param traceState - The trace state containing coordinate data\n   * @returns Formatted coordinate text or null if unavailable\n   */\n  private formatCoordinateText(traceState: TraceState): string | null {\n    if (traceState.empty || !traceState.text) {\n      return null;\n    }\n\n    // Set currentLayerId for formatting\n    this.currentLayerId = traceState.layerId;\n\n    const { text } = traceState;\n    const parts: string[] = [];\n\n    // Use axis identity from TextState, fallback to default mapping\n    const mainAxisType = text.mainAxis ?? 'x';\n    const crossAxisType = text.crossAxis ?? 'y';\n\n    // Add main coordinate (x for vertical, y for horizontal)\n    if (text.main && text.main.value !== undefined) {\n      const mainValue = Array.isArray(text.main.value)\n        ? this.formatArrayValue(text.main.value as (number | string)[], mainAxisType).join(', ')\n        : this.formatSingleValue(text.main.value as number | string, mainAxisType);\n      parts.push(`${text.main.label} is ${mainValue}`);\n    }\n\n    // Add cross coordinate (y for vertical, x for horizontal)\n    if (text.cross && text.cross.value !== undefined) {\n      const crossValue = Array.isArray(text.cross.value)\n        ? this.formatArrayValue(text.cross.value as (number | string)[], crossAxisType).join(', ')\n        : this.formatSingleValue(text.cross.value as number | string, crossAxisType);\n      parts.push(`${text.cross.label} is ${crossValue}`);\n    }\n\n    // Add z/type information (for line plots this includes group/type like \"MAV=3\")\n    if (text.z && text.z.value !== undefined) {\n      parts.push(`${text.z.label} is ${text.z.value}`);\n    }\n\n    return parts.length > 0 ? parts.join(', ') : null;\n  }\n\n  /**\n   * Formats a layer switch announcement from trace state.\n   * @param state - The trace state representing the new layer\n   * @returns Formatted announcement text for the layer switch\n   */\n  private formatLayerSwitchAnnouncement(state: TraceState): string {\n    if (!isLayerSwitchTraceState(state))\n      return '';\n\n    // Set currentLayerId for formatting\n    this.currentLayerId = state.layerId;\n\n    let announcement = `Layer ${state.index} of ${state.size}: ${state.plotType || state.traceType} plot`;\n    if (state.text) {\n      const parts: string[] = [];\n\n      // Use axis identity from TextState, fallback to default mapping\n      const mainAxisType = state.text.mainAxis ?? 'x';\n      const crossAxisType = state.text.crossAxis ?? 'y';\n\n      if (state.text.main && state.text.main.value !== undefined) {\n        const mainValue = Array.isArray(state.text.main.value)\n          ? this.formatArrayValue(state.text.main.value as (number | string)[], mainAxisType).join(', ')\n          : this.formatSingleValue(state.text.main.value as number | string, mainAxisType);\n        parts.push(`${state.text.main.label} is ${mainValue}`);\n      }\n      // Exclude cross value for violin box plots during layer switch.\n      // With explicit violin_box trace type, no heuristic is needed.\n      const isViolinBoxPlot = state.traceType === 'violin_box';\n      if (!isViolinBoxPlot && state.text.cross && state.text.cross.value !== undefined) {\n        const crossValue = Array.isArray(state.text.cross.value)\n          ? this.formatArrayValue(state.text.cross.value as (number | string)[], crossAxisType).join(', ')\n          : this.formatSingleValue(state.text.cross.value as number | string, crossAxisType);\n        parts.push(`${state.text.cross.label} is ${crossValue}`);\n      }\n      if (state.text.z && state.text.z.value !== undefined) {\n        parts.push(`${state.text.z.label} is ${state.text.z.value}`);\n      }\n      if (parts.length > 0) {\n        announcement += ` at ${parts.join(', ')}`;\n      }\n    }\n    return announcement;\n  }\n\n  /**\n   * Formats plot state into human-readable text based on current mode.\n   * @param state - The state to format (string or PlotState object)\n   * @returns Formatted text representation of the state\n   */\n  public format(state: string | PlotState): string {\n    if (typeof state === 'string') {\n      return state;\n    } else if (!state || state.empty) {\n      if (state.type === 'subplot') {\n        return 'No additional layer';\n      }\n      return `No ${state.type === 'trace' ? 'plot' : state.type} info to display`;\n    } else if (state.type === 'figure') {\n      return this.formatFigureText(state.index, state.size, state.traceTypes);\n    } else if (state.type === 'subplot') {\n      return this.formatSubplotText(state.index, state.size, state.trace.traceType, state.trace);\n    } else if (this.mode === TextMode.VERBOSE) {\n      return this.formatVerboseTraceText(state.text);\n    } else {\n      return this.formatTerseTraceText(state.text);\n    }\n  }\n\n  /**\n   * Formats figure-level text with subplot information.\n   * @param index - Current subplot index\n   * @param size - Total number of subplots\n   * @param traceTypes - Array of trace type names in the figure\n   * @returns Formatted figure description text\n   */\n  private formatFigureText(index: number, size: number, traceTypes: string[]): string {\n    const details = traceTypes.length === 1\n      ? `This is a ${traceTypes[0]} plot`\n      : `This is a multi-layered plot containing ${traceTypes.join(Constant.COMMA_SPACE)} plots`;\n    return `Subplot ${index} of ${size}: ${details}. Press 'ENTER' to select this subplot.`;\n  }\n\n  /**\n   * Formats subplot-level text with layer information.\n   * @param index - Current layer index\n   * @param size - Total number of layers\n   * @param traceType - The type of trace being displayed\n   * @param traceState - Optional trace state for additional context\n   * @returns Formatted subplot description text\n   */\n  private formatSubplotText(index: number, size: number, traceType: string, traceState?: TraceState): string {\n    // Use plotType if available, otherwise fall back to traceType\n    const type = traceState && !traceState.empty ? traceState.plotType : traceType;\n    return `Layer ${index} of ${size}: ${type} plot`;\n  }\n\n  /**\n   * Determines if the current state represents a box plot.\n   * @param state - The text state to check\n   * @returns True if state has sections but no z (indicating a box plot)\n   */\n  private isBoxPlotWithSection(state: TextState): boolean {\n    return state.section !== undefined && state.z === undefined;\n  }\n\n  /**\n   * Formats trace text in verbose mode with full descriptions.\n   * @param state - The text state to format\n   * @returns Verbose formatted text with complete coordinate information\n   */\n  private formatVerboseTraceText(state: TextState): string {\n    // Grid cell format: \"{xLabel} is {xMin} through {xMax}, {yLabel} is {yMin} through {yMax}, points are: ...\"\n    if (state.gridPoints !== undefined && state.range && state.crossRange) {\n      return this.formatVerboseGridText(state);\n    }\n\n    const verbose = new Array<string>();\n\n    // Grid cell point navigation: add \"Cell [row,col]\" prefix\n    if (state.gridPosition && state.gridPoints === undefined) {\n      verbose.push(`Cell [${state.gridPosition.row},${state.gridPosition.col}]`, Constant.COMMA_SPACE);\n    }\n\n    // Use axis identity from TextState, fallback to default mapping\n    const mainAxisType = state.mainAxis ?? 'x';\n    const crossAxisType = state.crossAxis ?? 'y';\n\n    // Format main-axis values.\n    verbose.push(state.main.label, Constant.IS);\n\n    // Format for histogram and scatter plot.\n    if (state.range !== undefined) {\n      verbose.push(\n        this.formatSingleValue(state.range.min, mainAxisType),\n        Constant.THROUGH,\n        this.formatSingleValue(state.range.max, mainAxisType),\n      );\n    } else if (Array.isArray(state.main.value)) {\n      verbose.push(this.formatArrayValue(state.main.value as (number | string)[], mainAxisType).join(Constant.COMMA_SPACE));\n    } else {\n      verbose.push(this.formatSingleValue(state.main.value as number | string, mainAxisType));\n    }\n\n    // Special handling for boxplot outlier sections\n    if (\n      state.section\n      && this.isBoxPlotWithSection(state)\n      && (state.section === BoxplotSection.UPPER_OUTLIER || state.section === BoxplotSection.LOWER_OUTLIER)\n      && Array.isArray(state.cross.value)\n    ) {\n      // e.g. 'upper outlier(s)' or 'lower outlier(s)' section\n      const label = state.cross.label;\n      const outliers = state.cross.value as (number | string)[];\n      const formattedOutliers = this.formatArrayValue(outliers, crossAxisType);\n      const outlierStr = `[${formattedOutliers.join(', ')}]`;\n      const formattedMainValue = this.formatSingleValue(state.main.value as number | string, mainAxisType);\n      if (outliers.length === 0) {\n        // No outliers\n        return `${state.main.label} is ${formattedMainValue}, no ${state.section.toLowerCase()} for ${label}`;\n      } else {\n        // Outlier values present\n        const verb = outliers.length === 1 ? 'is' : 'are';\n        return `${state.main.label} is ${formattedMainValue}, ${state.section.toLowerCase()} for ${label} ${verb} ${outlierStr}`;\n      }\n    }\n\n    // Format cross-axis label.\n    if (state.section !== undefined) {\n      if (this.isBoxPlotWithSection(state)) {\n        const label = state.cross.label;\n        verbose.push(Constant.COMMA_SPACE, state.section!.toLowerCase(), Constant.SPACE, label);\n      } else {\n        // For candlestick plots: \"section cross.label\" (e.g., \"high Price\")\n        verbose.push(Constant.COMMA_SPACE, state.section!, Constant.SPACE, state.cross.label);\n      }\n    } else {\n      verbose.push(Constant.COMMA_SPACE, state.cross.label);\n    }\n\n    // Format cross-axis values.\n    if (!Array.isArray(state.cross.value)) {\n      verbose.push(Constant.IS, this.formatSingleValue(state.cross.value as number | string, crossAxisType));\n    } else if (state.cross.value.length > 1) {\n      verbose.push(Constant.ARE, this.formatArrayValue(state.cross.value as (number | string)[], crossAxisType).join(Constant.COMMA_SPACE));\n    } else if (state.cross.value.length > 0) {\n      verbose.push(Constant.IS, this.formatArrayValue(state.cross.value as (number | string)[], crossAxisType).join(Constant.COMMA_SPACE));\n    }\n\n    // Format for heatmap and scatter plot.\n    if (state.z !== undefined) {\n      // Convert candlestick trend values to lowercase for text mode\n      let zValue: string;\n      if (state.z.value === 'Bull' || state.z.value === 'Bear') {\n        zValue = state.z.value.toLowerCase();\n      } else {\n        zValue = this.formatSingleValue(state.z.value as number | string, 'z');\n      }\n\n      verbose.push(\n        Constant.COMMA_SPACE,\n        state.z.label,\n        Constant.IS,\n        zValue,\n      );\n    }\n\n    return verbose.join(Constant.EMPTY);\n  }\n\n  /**\n   * Formats trace text in terse mode with minimal output.\n   * @param state - The text state to format\n   * @returns Terse formatted text with compact coordinate representation\n   */\n  private formatTerseTraceText(state: TextState): string {\n    // Grid cell format: \"{xMin} through {xMax}, {yMin} through {yMax}, points: ...\"\n    if (state.gridPoints !== undefined && state.range && state.crossRange) {\n      return this.formatTerseGridText(state);\n    }\n\n    const terse = new Array<string>();\n\n    // Grid cell point navigation: add \"Cell [row,col]\" prefix\n    if (state.gridPosition && state.gridPoints === undefined) {\n      terse.push(`Cell [${state.gridPosition.row},${state.gridPosition.col}]`, Constant.COMMA_SPACE);\n    }\n\n    // Use axis identity from state (supports orientation-aware formatting)\n    const mainAxisType = state.mainAxis ?? 'x';\n    const crossAxisType = state.crossAxis ?? 'y';\n\n    if (Array.isArray(state.main.value)) {\n      terse.push(Constant.OPEN_BRACKET, this.formatArrayValue(state.main.value as (number | string)[], mainAxisType).join(Constant.COMMA_SPACE), Constant.CLOSE_BRACKET);\n    } else {\n      terse.push(this.formatSingleValue(state.main.value as number | string, mainAxisType), Constant.COMMA_SPACE);\n    }\n\n    // Special handling for boxplot outlier sections\n    if (\n      state.section\n      && this.isBoxPlotWithSection(state)\n      && (state.section === BoxplotSection.UPPER_OUTLIER || state.section === BoxplotSection.LOWER_OUTLIER)\n      && Array.isArray(state.cross.value)\n    ) {\n      const outliers = state.cross.value as (number | string)[];\n      const formattedOutliers = this.formatArrayValue(outliers, crossAxisType);\n      const outlierStr = `[${formattedOutliers.join(', ')}]`;\n      const formattedMainValue = this.formatSingleValue(state.main.value as number | string, mainAxisType);\n      if (outliers.length === 0) {\n        return `${formattedMainValue}, no ${state.section.toLowerCase()}`;\n      } else {\n        return `${formattedMainValue}, ${outliers.length} ${state.section.toLowerCase()} ${outlierStr}`;\n      }\n    }\n\n    // Format for cross axis values.\n    // For candlestick plots, we show section (type) first, then cross.value (price)\n    // For box plots, we also show section (type) first, then cross.value\n    if (state.section !== undefined && state.z !== undefined) {\n      // For candlestick: show section (type) first, then cross.value (price)\n      terse.push(state.section!, Constant.SPACE);\n      if (!Array.isArray(state.cross.value)) {\n        terse.push(this.formatSingleValue(state.cross.value as number | string, crossAxisType));\n      } else {\n        terse.push(Constant.OPEN_BRACKET, this.formatArrayValue(state.cross.value as (number | string)[], crossAxisType).join(Constant.COMMA_SPACE), Constant.CLOSE_BRACKET);\n      }\n    } else if (state.section !== undefined && state.z === undefined) {\n      // For box plots: show section (type) first, then cross.value\n      terse.push(state.section!, Constant.SPACE);\n      if (!Array.isArray(state.cross.value)) {\n        terse.push(this.formatSingleValue(state.cross.value as number | string, crossAxisType));\n      } else {\n        terse.push(Constant.OPEN_BRACKET, this.formatArrayValue(state.cross.value as (number | string)[], crossAxisType).join(Constant.COMMA_SPACE), Constant.CLOSE_BRACKET);\n      }\n    } else {\n      // For other plots: show cross.value normally\n      if (!Array.isArray(state.cross.value)) {\n        terse.push(this.formatSingleValue(state.cross.value as number | string, crossAxisType));\n      } else {\n        terse.push(Constant.OPEN_BRACKET, this.formatArrayValue(state.cross.value as (number | string)[], crossAxisType).join(Constant.COMMA_SPACE), Constant.CLOSE_BRACKET);\n      }\n    }\n\n    // Format for heatmap and segmented plots.\n    if (state.z !== undefined) {\n      // Convert candlestick trend values to lowercase for text mode\n      let zValue: string;\n      if (state.z.value === 'Bull' || state.z.value === 'Bear') {\n        zValue = state.z.value.toLowerCase();\n      } else {\n        zValue = this.formatSingleValue(state.z.value as number | string, 'z');\n      }\n\n      // For candlestick plots, add comma before trend value to show \"open 100, bear\"\n      if (state.section !== undefined) {\n        terse.push(Constant.COMMA_SPACE, zValue);\n      } else {\n        terse.push(Constant.COMMA_SPACE, zValue);\n      }\n    }\n\n    return terse.join(Constant.EMPTY);\n  }\n\n  /**\n   * Formats grid cell text in verbose mode.\n   * Output: \"Cell [row,col], {xLabel} is {xMin} through {xMax}, {yLabel} is {yMin} through {yMax}, points are: (x1, y1), ...\"\n   */\n  private formatVerboseGridText(state: TextState): string {\n    const mainAxisType = state.mainAxis ?? 'x';\n    const crossAxisType = state.crossAxis ?? 'y';\n    const parts: string[] = [];\n\n    // Cell position\n    if (state.gridPosition) {\n      parts.push(`Cell [${state.gridPosition.row},${state.gridPosition.col}]`, Constant.COMMA_SPACE);\n    }\n\n    // X range\n    parts.push(\n      state.main.label,\n      Constant.IS,\n      this.formatSingleValue(state.range!.min, mainAxisType),\n      Constant.THROUGH,\n      this.formatSingleValue(state.range!.max, mainAxisType),\n    );\n\n    // Y range\n    parts.push(\n      Constant.COMMA_SPACE,\n      state.cross.label,\n      Constant.IS,\n      this.formatSingleValue(state.crossRange!.min, crossAxisType),\n      Constant.THROUGH,\n      this.formatSingleValue(state.crossRange!.max, crossAxisType),\n    );\n\n    // Points\n    const points = state.gridPoints!;\n    if (points.length === 0) {\n      parts.push(Constant.COMMA_SPACE, 'no points');\n    } else {\n      const pointStrs = points.map(\n        p => `(${this.formatSingleValue(p.x, mainAxisType)}, ${this.formatSingleValue(p.y, crossAxisType)})`,\n      );\n      const verb = points.length === 1 ? ' is' : 's are';\n      parts.push(Constant.COMMA_SPACE, `point${verb}: `, pointStrs.join(Constant.COMMA_SPACE));\n    }\n\n    return parts.join(Constant.EMPTY);\n  }\n\n  /**\n   * Formats grid cell text in terse mode.\n   * Output: \"Cell [row,col], {xMin} through {xMax}, {yMin} through {yMax}, points: (x1, y1), ...\"\n   */\n  private formatTerseGridText(state: TextState): string {\n    const mainAxisType = state.mainAxis ?? 'x';\n    const crossAxisType = state.crossAxis ?? 'y';\n    const parts: string[] = [];\n\n    // Cell position\n    if (state.gridPosition) {\n      parts.push(`Cell [${state.gridPosition.row},${state.gridPosition.col}]`, Constant.COMMA_SPACE);\n    }\n\n    // X range\n    parts.push(\n      this.formatSingleValue(state.range!.min, mainAxisType),\n      Constant.THROUGH,\n      this.formatSingleValue(state.range!.max, mainAxisType),\n    );\n\n    // Y range\n    parts.push(\n      Constant.COMMA_SPACE,\n      this.formatSingleValue(state.crossRange!.min, crossAxisType),\n      Constant.THROUGH,\n      this.formatSingleValue(state.crossRange!.max, crossAxisType),\n    );\n\n    // Points\n    const points = state.gridPoints!;\n    if (points.length === 0) {\n      parts.push(Constant.COMMA_SPACE, 'no points');\n    } else {\n      const pointStrs = points.map(\n        p => `(${this.formatSingleValue(p.x, mainAxisType)}, ${this.formatSingleValue(p.y, crossAxisType)})`,\n      );\n      parts.push(Constant.COMMA_SPACE, 'points: ', pointStrs.join(Constant.COMMA_SPACE));\n    }\n\n    return parts.join(Constant.EMPTY);\n  }\n\n  /**\n   * Updates the service with new plot state and emits appropriate events.\n   * @param state - The new plot state to process\n   */\n  public update(state: PlotState): void {\n    if (this.mode === TextMode.OFF) {\n      return;\n    }\n\n    // Store the current state for access by ViewModels\n    this.currentState = state;\n\n    // Track current layer ID for formatting\n    if (state.type === 'trace' && !state.empty) {\n      this.currentLayerId = state.layerId;\n    } else if (state.type === 'subplot' && !state.empty && !state.trace.empty) {\n      this.currentLayerId = state.trace.layerId;\n    }\n\n    // Use the type guard and formatter for layer switches\n    if (state.type === 'trace' && isLayerSwitchTraceState(state)) {\n      const announcement = this.formatLayerSwitchAnnouncement(state);\n      this.notification.notify(announcement);\n      return;\n    }\n\n    if (state.type === 'subplot') {\n      const text = this.format(state);\n      if (text) {\n        this.notification.notify(text);\n      }\n      return;\n    }\n\n    // Handle figure-level navigation - this is the first navigation in multi-panel plots\n    if (state.type === 'figure' && !state.empty && !this.hasHadFirstNavigation) {\n      this.hasHadFirstNavigation = true;\n      this.onNavigationEmitter.fire({ type: 'first_navigation' });\n    }\n\n    const text = this.format(state);\n    if (text) {\n      this.onChangeEmitter.fire({ value: text });\n    }\n  }\n\n  /**\n   * Toggles between text modes (OFF, TERSE, VERBOSE) in sequence.\n   * @returns True if text mode is now active (not OFF), false otherwise\n   */\n  public toggle(): boolean {\n    switch (this.mode) {\n      case TextMode.OFF:\n        this.mode = TextMode.VERBOSE;\n        break;\n\n      case TextMode.TERSE:\n        this.mode = TextMode.OFF;\n        break;\n\n      case TextMode.VERBOSE:\n        this.mode = TextMode.TERSE;\n        break;\n    }\n\n    const message = `Text mode is ${this.mode}`;\n    this.notification.notify(message);\n\n    return this.mode !== TextMode.OFF;\n  }\n\n  /**\n   * Checks if the text service is in verbose mode.\n   * @returns True if text mode is set to verbose, false otherwise\n   */\n  public isVerbose(): boolean {\n    return this.mode === TextMode.VERBOSE;\n  }\n\n  /**\n   * Checks if the text service is in terse mode.\n   * @returns True if text mode is set to terse, false otherwise\n   */\n  public isTerse(): boolean {\n    return this.mode === TextMode.TERSE;\n  }\n\n  /**\n   * Checks if the text service is turned off.\n   * @returns True if text mode is set to off, false otherwise\n   */\n  public isOff(): boolean {\n    return this.mode === TextMode.OFF;\n  }\n}\n","// src/utils/formatProdErrorMessage.ts\nfunction formatProdErrorMessage(code) {\n  return `Minified Redux error #${code}; visit https://redux.js.org/Errors?code=${code} for the full message or use the non-minified dev environment for full errors. `;\n}\n\n// src/utils/symbol-observable.ts\nvar $$observable = /* @__PURE__ */ (() => typeof Symbol === \"function\" && Symbol.observable || \"@@observable\")();\nvar symbol_observable_default = $$observable;\n\n// src/utils/actionTypes.ts\nvar randomString = () => Math.random().toString(36).substring(7).split(\"\").join(\".\");\nvar ActionTypes = {\n  INIT: `@@redux/INIT${/* @__PURE__ */ randomString()}`,\n  REPLACE: `@@redux/REPLACE${/* @__PURE__ */ randomString()}`,\n  PROBE_UNKNOWN_ACTION: () => `@@redux/PROBE_UNKNOWN_ACTION${randomString()}`\n};\nvar actionTypes_default = ActionTypes;\n\n// src/utils/isPlainObject.ts\nfunction isPlainObject(obj) {\n  if (typeof obj !== \"object\" || obj === null)\n    return false;\n  let proto = obj;\n  while (Object.getPrototypeOf(proto) !== null) {\n    proto = Object.getPrototypeOf(proto);\n  }\n  return Object.getPrototypeOf(obj) === proto || Object.getPrototypeOf(obj) === null;\n}\n\n// src/utils/kindOf.ts\nfunction miniKindOf(val) {\n  if (val === void 0)\n    return \"undefined\";\n  if (val === null)\n    return \"null\";\n  const type = typeof val;\n  switch (type) {\n    case \"boolean\":\n    case \"string\":\n    case \"number\":\n    case \"symbol\":\n    case \"function\": {\n      return type;\n    }\n  }\n  if (Array.isArray(val))\n    return \"array\";\n  if (isDate(val))\n    return \"date\";\n  if (isError(val))\n    return \"error\";\n  const constructorName = ctorName(val);\n  switch (constructorName) {\n    case \"Symbol\":\n    case \"Promise\":\n    case \"WeakMap\":\n    case \"WeakSet\":\n    case \"Map\":\n    case \"Set\":\n      return constructorName;\n  }\n  return Object.prototype.toString.call(val).slice(8, -1).toLowerCase().replace(/\\s/g, \"\");\n}\nfunction ctorName(val) {\n  return typeof val.constructor === \"function\" ? val.constructor.name : null;\n}\nfunction isError(val) {\n  return val instanceof Error || typeof val.message === \"string\" && val.constructor && typeof val.constructor.stackTraceLimit === \"number\";\n}\nfunction isDate(val) {\n  if (val instanceof Date)\n    return true;\n  return typeof val.toDateString === \"function\" && typeof val.getDate === \"function\" && typeof val.setDate === \"function\";\n}\nfunction kindOf(val) {\n  let typeOfVal = typeof val;\n  if (process.env.NODE_ENV !== \"production\") {\n    typeOfVal = miniKindOf(val);\n  }\n  return typeOfVal;\n}\n\n// src/createStore.ts\nfunction createStore(reducer, preloadedState, enhancer) {\n  if (typeof reducer !== \"function\") {\n    throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(2) : `Expected the root reducer to be a function. Instead, received: '${kindOf(reducer)}'`);\n  }\n  if (typeof preloadedState === \"function\" && typeof enhancer === \"function\" || typeof enhancer === \"function\" && typeof arguments[3] === \"function\") {\n    throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(0) : \"It looks like you are passing several store enhancers to createStore(). This is not supported. Instead, compose them together to a single function. See https://redux.js.org/tutorials/fundamentals/part-4-store#creating-a-store-with-enhancers for an example.\");\n  }\n  if (typeof preloadedState === \"function\" && typeof enhancer === \"undefined\") {\n    enhancer = preloadedState;\n    preloadedState = void 0;\n  }\n  if (typeof enhancer !== \"undefined\") {\n    if (typeof enhancer !== \"function\") {\n      throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(1) : `Expected the enhancer to be a function. Instead, received: '${kindOf(enhancer)}'`);\n    }\n    return enhancer(createStore)(reducer, preloadedState);\n  }\n  let currentReducer = reducer;\n  let currentState = preloadedState;\n  let currentListeners = /* @__PURE__ */ new Map();\n  let nextListeners = currentListeners;\n  let listenerIdCounter = 0;\n  let isDispatching = false;\n  function ensureCanMutateNextListeners() {\n    if (nextListeners === currentListeners) {\n      nextListeners = /* @__PURE__ */ new Map();\n      currentListeners.forEach((listener, key) => {\n        nextListeners.set(key, listener);\n      });\n    }\n  }\n  function getState() {\n    if (isDispatching) {\n      throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(3) : \"You may not call store.getState() while the reducer is executing. The reducer has already received the state as an argument. Pass it down from the top reducer instead of reading it from the store.\");\n    }\n    return currentState;\n  }\n  function subscribe(listener) {\n    if (typeof listener !== \"function\") {\n      throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(4) : `Expected the listener to be a function. Instead, received: '${kindOf(listener)}'`);\n    }\n    if (isDispatching) {\n      throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(5) : \"You may not call store.subscribe() while the reducer is executing. If you would like to be notified after the store has been updated, subscribe from a component and invoke store.getState() in the callback to access the latest state. See https://redux.js.org/api/store#subscribelistener for more details.\");\n    }\n    let isSubscribed = true;\n    ensureCanMutateNextListeners();\n    const listenerId = listenerIdCounter++;\n    nextListeners.set(listenerId, listener);\n    return function unsubscribe() {\n      if (!isSubscribed) {\n        return;\n      }\n      if (isDispatching) {\n        throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(6) : \"You may not unsubscribe from a store listener while the reducer is executing. See https://redux.js.org/api/store#subscribelistener for more details.\");\n      }\n      isSubscribed = false;\n      ensureCanMutateNextListeners();\n      nextListeners.delete(listenerId);\n      currentListeners = null;\n    };\n  }\n  function dispatch(action) {\n    if (!isPlainObject(action)) {\n      throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(7) : `Actions must be plain objects. Instead, the actual type was: '${kindOf(action)}'. You may need to add middleware to your store setup to handle dispatching other values, such as 'redux-thunk' to handle dispatching functions. See https://redux.js.org/tutorials/fundamentals/part-4-store#middleware and https://redux.js.org/tutorials/fundamentals/part-6-async-logic#using-the-redux-thunk-middleware for examples.`);\n    }\n    if (typeof action.type === \"undefined\") {\n      throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(8) : 'Actions may not have an undefined \"type\" property. You may have misspelled an action type string constant.');\n    }\n    if (typeof action.type !== \"string\") {\n      throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(17) : `Action \"type\" property must be a string. Instead, the actual type was: '${kindOf(action.type)}'. Value was: '${action.type}' (stringified)`);\n    }\n    if (isDispatching) {\n      throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(9) : \"Reducers may not dispatch actions.\");\n    }\n    try {\n      isDispatching = true;\n      currentState = currentReducer(currentState, action);\n    } finally {\n      isDispatching = false;\n    }\n    const listeners = currentListeners = nextListeners;\n    listeners.forEach((listener) => {\n      listener();\n    });\n    return action;\n  }\n  function replaceReducer(nextReducer) {\n    if (typeof nextReducer !== \"function\") {\n      throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(10) : `Expected the nextReducer to be a function. Instead, received: '${kindOf(nextReducer)}`);\n    }\n    currentReducer = nextReducer;\n    dispatch({\n      type: actionTypes_default.REPLACE\n    });\n  }\n  function observable() {\n    const outerSubscribe = subscribe;\n    return {\n      /**\n       * The minimal observable subscription method.\n       * @param observer Any object that can be used as an observer.\n       * The observer object should have a `next` method.\n       * @returns An object with an `unsubscribe` method that can\n       * be used to unsubscribe the observable from the store, and prevent further\n       * emission of values from the observable.\n       */\n      subscribe(observer) {\n        if (typeof observer !== \"object\" || observer === null) {\n          throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(11) : `Expected the observer to be an object. Instead, received: '${kindOf(observer)}'`);\n        }\n        function observeState() {\n          const observerAsObserver = observer;\n          if (observerAsObserver.next) {\n            observerAsObserver.next(getState());\n          }\n        }\n        observeState();\n        const unsubscribe = outerSubscribe(observeState);\n        return {\n          unsubscribe\n        };\n      },\n      [symbol_observable_default]() {\n        return this;\n      }\n    };\n  }\n  dispatch({\n    type: actionTypes_default.INIT\n  });\n  const store = {\n    dispatch,\n    subscribe,\n    getState,\n    replaceReducer,\n    [symbol_observable_default]: observable\n  };\n  return store;\n}\nfunction legacy_createStore(reducer, preloadedState, enhancer) {\n  return createStore(reducer, preloadedState, enhancer);\n}\n\n// src/utils/warning.ts\nfunction warning(message) {\n  if (typeof console !== \"undefined\" && typeof console.error === \"function\") {\n    console.error(message);\n  }\n  try {\n    throw new Error(message);\n  } catch (e) {\n  }\n}\n\n// src/combineReducers.ts\nfunction getUnexpectedStateShapeWarningMessage(inputState, reducers, action, unexpectedKeyCache) {\n  const reducerKeys = Object.keys(reducers);\n  const argumentName = action && action.type === actionTypes_default.INIT ? \"preloadedState argument passed to createStore\" : \"previous state received by the reducer\";\n  if (reducerKeys.length === 0) {\n    return \"Store does not have a valid reducer. Make sure the argument passed to combineReducers is an object whose values are reducers.\";\n  }\n  if (!isPlainObject(inputState)) {\n    return `The ${argumentName} has unexpected type of \"${kindOf(inputState)}\". Expected argument to be an object with the following keys: \"${reducerKeys.join('\", \"')}\"`;\n  }\n  const unexpectedKeys = Object.keys(inputState).filter((key) => !reducers.hasOwnProperty(key) && !unexpectedKeyCache[key]);\n  unexpectedKeys.forEach((key) => {\n    unexpectedKeyCache[key] = true;\n  });\n  if (action && action.type === actionTypes_default.REPLACE)\n    return;\n  if (unexpectedKeys.length > 0) {\n    return `Unexpected ${unexpectedKeys.length > 1 ? \"keys\" : \"key\"} \"${unexpectedKeys.join('\", \"')}\" found in ${argumentName}. Expected to find one of the known reducer keys instead: \"${reducerKeys.join('\", \"')}\". Unexpected keys will be ignored.`;\n  }\n}\nfunction assertReducerShape(reducers) {\n  Object.keys(reducers).forEach((key) => {\n    const reducer = reducers[key];\n    const initialState = reducer(void 0, {\n      type: actionTypes_default.INIT\n    });\n    if (typeof initialState === \"undefined\") {\n      throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(12) : `The slice reducer for key \"${key}\" returned undefined during initialization. If the state passed to the reducer is undefined, you must explicitly return the initial state. The initial state may not be undefined. If you don't want to set a value for this reducer, you can use null instead of undefined.`);\n    }\n    if (typeof reducer(void 0, {\n      type: actionTypes_default.PROBE_UNKNOWN_ACTION()\n    }) === \"undefined\") {\n      throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(13) : `The slice reducer for key \"${key}\" returned undefined when probed with a random type. Don't try to handle '${actionTypes_default.INIT}' or other actions in \"redux/*\" namespace. They are considered private. Instead, you must return the current state for any unknown actions, unless it is undefined, in which case you must return the initial state, regardless of the action type. The initial state may not be undefined, but can be null.`);\n    }\n  });\n}\nfunction combineReducers(reducers) {\n  const reducerKeys = Object.keys(reducers);\n  const finalReducers = {};\n  for (let i = 0; i < reducerKeys.length; i++) {\n    const key = reducerKeys[i];\n    if (process.env.NODE_ENV !== \"production\") {\n      if (typeof reducers[key] === \"undefined\") {\n        warning(`No reducer provided for key \"${key}\"`);\n      }\n    }\n    if (typeof reducers[key] === \"function\") {\n      finalReducers[key] = reducers[key];\n    }\n  }\n  const finalReducerKeys = Object.keys(finalReducers);\n  let unexpectedKeyCache;\n  if (process.env.NODE_ENV !== \"production\") {\n    unexpectedKeyCache = {};\n  }\n  let shapeAssertionError;\n  try {\n    assertReducerShape(finalReducers);\n  } catch (e) {\n    shapeAssertionError = e;\n  }\n  return function combination(state = {}, action) {\n    if (shapeAssertionError) {\n      throw shapeAssertionError;\n    }\n    if (process.env.NODE_ENV !== \"production\") {\n      const warningMessage = getUnexpectedStateShapeWarningMessage(state, finalReducers, action, unexpectedKeyCache);\n      if (warningMessage) {\n        warning(warningMessage);\n      }\n    }\n    let hasChanged = false;\n    const nextState = {};\n    for (let i = 0; i < finalReducerKeys.length; i++) {\n      const key = finalReducerKeys[i];\n      const reducer = finalReducers[key];\n      const previousStateForKey = state[key];\n      const nextStateForKey = reducer(previousStateForKey, action);\n      if (typeof nextStateForKey === \"undefined\") {\n        const actionType = action && action.type;\n        throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(14) : `When called with an action of type ${actionType ? `\"${String(actionType)}\"` : \"(unknown type)\"}, the slice reducer for key \"${key}\" returned undefined. To ignore an action, you must explicitly return the previous state. If you want this reducer to hold no value, you can return null instead of undefined.`);\n      }\n      nextState[key] = nextStateForKey;\n      hasChanged = hasChanged || nextStateForKey !== previousStateForKey;\n    }\n    hasChanged = hasChanged || finalReducerKeys.length !== Object.keys(state).length;\n    return hasChanged ? nextState : state;\n  };\n}\n\n// src/bindActionCreators.ts\nfunction bindActionCreator(actionCreator, dispatch) {\n  return function(...args) {\n    return dispatch(actionCreator.apply(this, args));\n  };\n}\nfunction bindActionCreators(actionCreators, dispatch) {\n  if (typeof actionCreators === \"function\") {\n    return bindActionCreator(actionCreators, dispatch);\n  }\n  if (typeof actionCreators !== \"object\" || actionCreators === null) {\n    throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(16) : `bindActionCreators expected an object or a function, but instead received: '${kindOf(actionCreators)}'. Did you write \"import ActionCreators from\" instead of \"import * as ActionCreators from\"?`);\n  }\n  const boundActionCreators = {};\n  for (const key in actionCreators) {\n    const actionCreator = actionCreators[key];\n    if (typeof actionCreator === \"function\") {\n      boundActionCreators[key] = bindActionCreator(actionCreator, dispatch);\n    }\n  }\n  return boundActionCreators;\n}\n\n// src/compose.ts\nfunction compose(...funcs) {\n  if (funcs.length === 0) {\n    return (arg) => arg;\n  }\n  if (funcs.length === 1) {\n    return funcs[0];\n  }\n  return funcs.reduce((a, b) => (...args) => a(b(...args)));\n}\n\n// src/applyMiddleware.ts\nfunction applyMiddleware(...middlewares) {\n  return (createStore2) => (reducer, preloadedState) => {\n    const store = createStore2(reducer, preloadedState);\n    let dispatch = () => {\n      throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(15) : \"Dispatching while constructing your middleware is not allowed. Other middleware would not be applied to this dispatch.\");\n    };\n    const middlewareAPI = {\n      getState: store.getState,\n      dispatch: (action, ...args) => dispatch(action, ...args)\n    };\n    const chain = middlewares.map((middleware) => middleware(middlewareAPI));\n    dispatch = compose(...chain)(store.dispatch);\n    return {\n      ...store,\n      dispatch\n    };\n  };\n}\n\n// src/utils/isAction.ts\nfunction isAction(action) {\n  return isPlainObject(action) && \"type\" in action && typeof action.type === \"string\";\n}\nexport {\n  actionTypes_default as __DO_NOT_USE__ActionTypes,\n  applyMiddleware,\n  bindActionCreators,\n  combineReducers,\n  compose,\n  createStore,\n  isAction,\n  isPlainObject,\n  legacy_createStore\n};\n//# sourceMappingURL=redux.mjs.map","// src/utils/env.ts\nvar NOTHING = Symbol.for(\"immer-nothing\");\nvar DRAFTABLE = Symbol.for(\"immer-draftable\");\nvar DRAFT_STATE = Symbol.for(\"immer-state\");\n\n// src/utils/errors.ts\nvar errors = process.env.NODE_ENV !== \"production\" ? [\n  // All error codes, starting by 0:\n  function(plugin) {\n    return `The plugin for '${plugin}' has not been loaded into Immer. To enable the plugin, import and call \\`enable${plugin}()\\` when initializing your application.`;\n  },\n  function(thing) {\n    return `produce can only be called on things that are draftable: plain objects, arrays, Map, Set or classes that are marked with '[immerable]: true'. Got '${thing}'`;\n  },\n  \"This object has been frozen and should not be mutated\",\n  function(data) {\n    return \"Cannot use a proxy that has been revoked. Did you pass an object from inside an immer function to an async process? \" + data;\n  },\n  \"An immer producer returned a new value *and* modified its draft. Either return a new value *or* modify the draft.\",\n  \"Immer forbids circular references\",\n  \"The first or second argument to `produce` must be a function\",\n  \"The third argument to `produce` must be a function or undefined\",\n  \"First argument to `createDraft` must be a plain object, an array, or an immerable object\",\n  \"First argument to `finishDraft` must be a draft returned by `createDraft`\",\n  function(thing) {\n    return `'current' expects a draft, got: ${thing}`;\n  },\n  \"Object.defineProperty() cannot be used on an Immer draft\",\n  \"Object.setPrototypeOf() cannot be used on an Immer draft\",\n  \"Immer only supports deleting array indices\",\n  \"Immer only supports setting array indices and the 'length' property\",\n  function(thing) {\n    return `'original' expects a draft, got: ${thing}`;\n  }\n  // Note: if more errors are added, the errorOffset in Patches.ts should be increased\n  // See Patches.ts for additional errors\n] : [];\nfunction die(error, ...args) {\n  if (process.env.NODE_ENV !== \"production\") {\n    const e = errors[error];\n    const msg = isFunction(e) ? e.apply(null, args) : e;\n    throw new Error(`[Immer] ${msg}`);\n  }\n  throw new Error(\n    `[Immer] minified error nr: ${error}. Full error at: https://bit.ly/3cXEKWf`\n  );\n}\n\n// src/utils/common.ts\nvar O = Object;\nvar getPrototypeOf = O.getPrototypeOf;\nvar CONSTRUCTOR = \"constructor\";\nvar PROTOTYPE = \"prototype\";\nvar CONFIGURABLE = \"configurable\";\nvar ENUMERABLE = \"enumerable\";\nvar WRITABLE = \"writable\";\nvar VALUE = \"value\";\nvar isDraft = (value) => !!value && !!value[DRAFT_STATE];\nfunction isDraftable(value) {\n  if (!value)\n    return false;\n  return isPlainObject(value) || isArray(value) || !!value[DRAFTABLE] || !!value[CONSTRUCTOR]?.[DRAFTABLE] || isMap(value) || isSet(value);\n}\nvar objectCtorString = O[PROTOTYPE][CONSTRUCTOR].toString();\nvar cachedCtorStrings = /* @__PURE__ */ new WeakMap();\nfunction isPlainObject(value) {\n  if (!value || !isObjectish(value))\n    return false;\n  const proto = getPrototypeOf(value);\n  if (proto === null || proto === O[PROTOTYPE])\n    return true;\n  const Ctor = O.hasOwnProperty.call(proto, CONSTRUCTOR) && proto[CONSTRUCTOR];\n  if (Ctor === Object)\n    return true;\n  if (!isFunction(Ctor))\n    return false;\n  let ctorString = cachedCtorStrings.get(Ctor);\n  if (ctorString === void 0) {\n    ctorString = Function.toString.call(Ctor);\n    cachedCtorStrings.set(Ctor, ctorString);\n  }\n  return ctorString === objectCtorString;\n}\nfunction original(value) {\n  if (!isDraft(value))\n    die(15, value);\n  return value[DRAFT_STATE].base_;\n}\nfunction each(obj, iter, strict = true) {\n  if (getArchtype(obj) === 0 /* Object */) {\n    const keys = strict ? Reflect.ownKeys(obj) : O.keys(obj);\n    keys.forEach((key) => {\n      iter(key, obj[key], obj);\n    });\n  } else {\n    obj.forEach((entry, index) => iter(index, entry, obj));\n  }\n}\nfunction getArchtype(thing) {\n  const state = thing[DRAFT_STATE];\n  return state ? state.type_ : isArray(thing) ? 1 /* Array */ : isMap(thing) ? 2 /* Map */ : isSet(thing) ? 3 /* Set */ : 0 /* Object */;\n}\nvar has = (thing, prop, type = getArchtype(thing)) => type === 2 /* Map */ ? thing.has(prop) : O[PROTOTYPE].hasOwnProperty.call(thing, prop);\nvar get = (thing, prop, type = getArchtype(thing)) => (\n  // @ts-ignore\n  type === 2 /* Map */ ? thing.get(prop) : thing[prop]\n);\nvar set = (thing, propOrOldValue, value, type = getArchtype(thing)) => {\n  if (type === 2 /* Map */)\n    thing.set(propOrOldValue, value);\n  else if (type === 3 /* Set */) {\n    thing.add(value);\n  } else\n    thing[propOrOldValue] = value;\n};\nfunction is(x, y) {\n  if (x === y) {\n    return x !== 0 || 1 / x === 1 / y;\n  } else {\n    return x !== x && y !== y;\n  }\n}\nvar isArray = Array.isArray;\nvar isMap = (target) => target instanceof Map;\nvar isSet = (target) => target instanceof Set;\nvar isObjectish = (target) => typeof target === \"object\";\nvar isFunction = (target) => typeof target === \"function\";\nvar isBoolean = (target) => typeof target === \"boolean\";\nfunction isArrayIndex(value) {\n  const n = +value;\n  return Number.isInteger(n) && String(n) === value;\n}\nvar getProxyDraft = (value) => {\n  if (!isObjectish(value))\n    return null;\n  return value?.[DRAFT_STATE];\n};\nvar latest = (state) => state.copy_ || state.base_;\nvar getValue = (value) => {\n  const proxyDraft = getProxyDraft(value);\n  return proxyDraft ? proxyDraft.copy_ ?? proxyDraft.base_ : value;\n};\nvar getFinalValue = (state) => state.modified_ ? state.copy_ : state.base_;\nfunction shallowCopy(base, strict) {\n  if (isMap(base)) {\n    return new Map(base);\n  }\n  if (isSet(base)) {\n    return new Set(base);\n  }\n  if (isArray(base))\n    return Array[PROTOTYPE].slice.call(base);\n  const isPlain = isPlainObject(base);\n  if (strict === true || strict === \"class_only\" && !isPlain) {\n    const descriptors = O.getOwnPropertyDescriptors(base);\n    delete descriptors[DRAFT_STATE];\n    let keys = Reflect.ownKeys(descriptors);\n    for (let i = 0; i < keys.length; i++) {\n      const key = keys[i];\n      const desc = descriptors[key];\n      if (desc[WRITABLE] === false) {\n        desc[WRITABLE] = true;\n        desc[CONFIGURABLE] = true;\n      }\n      if (desc.get || desc.set)\n        descriptors[key] = {\n          [CONFIGURABLE]: true,\n          [WRITABLE]: true,\n          // could live with !!desc.set as well here...\n          [ENUMERABLE]: desc[ENUMERABLE],\n          [VALUE]: base[key]\n        };\n    }\n    return O.create(getPrototypeOf(base), descriptors);\n  } else {\n    const proto = getPrototypeOf(base);\n    if (proto !== null && isPlain) {\n      return { ...base };\n    }\n    const obj = O.create(proto);\n    return O.assign(obj, base);\n  }\n}\nfunction freeze(obj, deep = false) {\n  if (isFrozen(obj) || isDraft(obj) || !isDraftable(obj))\n    return obj;\n  if (getArchtype(obj) > 1) {\n    O.defineProperties(obj, {\n      set: dontMutateMethodOverride,\n      add: dontMutateMethodOverride,\n      clear: dontMutateMethodOverride,\n      delete: dontMutateMethodOverride\n    });\n  }\n  O.freeze(obj);\n  if (deep)\n    each(\n      obj,\n      (_key, value) => {\n        freeze(value, true);\n      },\n      false\n    );\n  return obj;\n}\nfunction dontMutateFrozenCollections() {\n  die(2);\n}\nvar dontMutateMethodOverride = {\n  [VALUE]: dontMutateFrozenCollections\n};\nfunction isFrozen(obj) {\n  if (obj === null || !isObjectish(obj))\n    return true;\n  return O.isFrozen(obj);\n}\n\n// src/utils/plugins.ts\nvar PluginMapSet = \"MapSet\";\nvar PluginPatches = \"Patches\";\nvar PluginArrayMethods = \"ArrayMethods\";\nvar plugins = {};\nfunction getPlugin(pluginKey) {\n  const plugin = plugins[pluginKey];\n  if (!plugin) {\n    die(0, pluginKey);\n  }\n  return plugin;\n}\nvar isPluginLoaded = (pluginKey) => !!plugins[pluginKey];\nfunction loadPlugin(pluginKey, implementation) {\n  if (!plugins[pluginKey])\n    plugins[pluginKey] = implementation;\n}\n\n// src/core/scope.ts\nvar currentScope;\nvar getCurrentScope = () => currentScope;\nvar createScope = (parent_, immer_) => ({\n  drafts_: [],\n  parent_,\n  immer_,\n  // Whenever the modified draft contains a draft from another scope, we\n  // need to prevent auto-freezing so the unowned draft can be finalized.\n  canAutoFreeze_: true,\n  unfinalizedDrafts_: 0,\n  handledSet_: /* @__PURE__ */ new Set(),\n  processedForPatches_: /* @__PURE__ */ new Set(),\n  mapSetPlugin_: isPluginLoaded(PluginMapSet) ? getPlugin(PluginMapSet) : void 0,\n  arrayMethodsPlugin_: isPluginLoaded(PluginArrayMethods) ? getPlugin(PluginArrayMethods) : void 0\n});\nfunction usePatchesInScope(scope, patchListener) {\n  if (patchListener) {\n    scope.patchPlugin_ = getPlugin(PluginPatches);\n    scope.patches_ = [];\n    scope.inversePatches_ = [];\n    scope.patchListener_ = patchListener;\n  }\n}\nfunction revokeScope(scope) {\n  leaveScope(scope);\n  scope.drafts_.forEach(revokeDraft);\n  scope.drafts_ = null;\n}\nfunction leaveScope(scope) {\n  if (scope === currentScope) {\n    currentScope = scope.parent_;\n  }\n}\nvar enterScope = (immer2) => currentScope = createScope(currentScope, immer2);\nfunction revokeDraft(draft) {\n  const state = draft[DRAFT_STATE];\n  if (state.type_ === 0 /* Object */ || state.type_ === 1 /* Array */)\n    state.revoke_();\n  else\n    state.revoked_ = true;\n}\n\n// src/core/finalize.ts\nfunction processResult(result, scope) {\n  scope.unfinalizedDrafts_ = scope.drafts_.length;\n  const baseDraft = scope.drafts_[0];\n  const isReplaced = result !== void 0 && result !== baseDraft;\n  if (isReplaced) {\n    if (baseDraft[DRAFT_STATE].modified_) {\n      revokeScope(scope);\n      die(4);\n    }\n    if (isDraftable(result)) {\n      result = finalize(scope, result);\n    }\n    const { patchPlugin_ } = scope;\n    if (patchPlugin_) {\n      patchPlugin_.generateReplacementPatches_(\n        baseDraft[DRAFT_STATE].base_,\n        result,\n        scope\n      );\n    }\n  } else {\n    result = finalize(scope, baseDraft);\n  }\n  maybeFreeze(scope, result, true);\n  revokeScope(scope);\n  if (scope.patches_) {\n    scope.patchListener_(scope.patches_, scope.inversePatches_);\n  }\n  return result !== NOTHING ? result : void 0;\n}\nfunction finalize(rootScope, value) {\n  if (isFrozen(value))\n    return value;\n  const state = value[DRAFT_STATE];\n  if (!state) {\n    const finalValue = handleValue(value, rootScope.handledSet_, rootScope);\n    return finalValue;\n  }\n  if (!isSameScope(state, rootScope)) {\n    return value;\n  }\n  if (!state.modified_) {\n    return state.base_;\n  }\n  if (!state.finalized_) {\n    const { callbacks_ } = state;\n    if (callbacks_) {\n      while (callbacks_.length > 0) {\n        const callback = callbacks_.pop();\n        callback(rootScope);\n      }\n    }\n    generatePatchesAndFinalize(state, rootScope);\n  }\n  return state.copy_;\n}\nfunction maybeFreeze(scope, value, deep = false) {\n  if (!scope.parent_ && scope.immer_.autoFreeze_ && scope.canAutoFreeze_) {\n    freeze(value, deep);\n  }\n}\nfunction markStateFinalized(state) {\n  state.finalized_ = true;\n  state.scope_.unfinalizedDrafts_--;\n}\nvar isSameScope = (state, rootScope) => state.scope_ === rootScope;\nvar EMPTY_LOCATIONS_RESULT = [];\nfunction updateDraftInParent(parent, draftValue, finalizedValue, originalKey) {\n  const parentCopy = latest(parent);\n  const parentType = parent.type_;\n  if (originalKey !== void 0) {\n    const currentValue = get(parentCopy, originalKey, parentType);\n    if (currentValue === draftValue) {\n      set(parentCopy, originalKey, finalizedValue, parentType);\n      return;\n    }\n  }\n  if (!parent.draftLocations_) {\n    const draftLocations = parent.draftLocations_ = /* @__PURE__ */ new Map();\n    each(parentCopy, (key, value) => {\n      if (isDraft(value)) {\n        const keys = draftLocations.get(value) || [];\n        keys.push(key);\n        draftLocations.set(value, keys);\n      }\n    });\n  }\n  const locations = parent.draftLocations_.get(draftValue) ?? EMPTY_LOCATIONS_RESULT;\n  for (const location of locations) {\n    set(parentCopy, location, finalizedValue, parentType);\n  }\n}\nfunction registerChildFinalizationCallback(parent, child, key) {\n  parent.callbacks_.push(function childCleanup(rootScope) {\n    const state = child;\n    if (!state || !isSameScope(state, rootScope)) {\n      return;\n    }\n    rootScope.mapSetPlugin_?.fixSetContents(state);\n    const finalizedValue = getFinalValue(state);\n    updateDraftInParent(parent, state.draft_ ?? state, finalizedValue, key);\n    generatePatchesAndFinalize(state, rootScope);\n  });\n}\nfunction generatePatchesAndFinalize(state, rootScope) {\n  const shouldFinalize = state.modified_ && !state.finalized_ && (state.type_ === 3 /* Set */ || state.type_ === 1 /* Array */ && state.allIndicesReassigned_ || (state.assigned_?.size ?? 0) > 0);\n  if (shouldFinalize) {\n    const { patchPlugin_ } = rootScope;\n    if (patchPlugin_) {\n      const basePath = patchPlugin_.getPath(state);\n      if (basePath) {\n        patchPlugin_.generatePatches_(state, basePath, rootScope);\n      }\n    }\n    markStateFinalized(state);\n  }\n}\nfunction handleCrossReference(target, key, value) {\n  const { scope_ } = target;\n  if (isDraft(value)) {\n    const state = value[DRAFT_STATE];\n    if (isSameScope(state, scope_)) {\n      state.callbacks_.push(function crossReferenceCleanup() {\n        prepareCopy(target);\n        const finalizedValue = getFinalValue(state);\n        updateDraftInParent(target, value, finalizedValue, key);\n      });\n    }\n  } else if (isDraftable(value)) {\n    target.callbacks_.push(function nestedDraftCleanup() {\n      const targetCopy = latest(target);\n      if (target.type_ === 3 /* Set */) {\n        if (targetCopy.has(value)) {\n          handleValue(value, scope_.handledSet_, scope_);\n        }\n      } else {\n        if (get(targetCopy, key, target.type_) === value) {\n          if (scope_.drafts_.length > 1 && (target.assigned_.get(key) ?? false) === true && target.copy_) {\n            handleValue(\n              get(target.copy_, key, target.type_),\n              scope_.handledSet_,\n              scope_\n            );\n          }\n        }\n      }\n    });\n  }\n}\nfunction handleValue(target, handledSet, rootScope) {\n  if (!rootScope.immer_.autoFreeze_ && rootScope.unfinalizedDrafts_ < 1) {\n    return target;\n  }\n  if (isDraft(target) || handledSet.has(target) || !isDraftable(target) || isFrozen(target)) {\n    return target;\n  }\n  handledSet.add(target);\n  each(target, (key, value) => {\n    if (isDraft(value)) {\n      const state = value[DRAFT_STATE];\n      if (isSameScope(state, rootScope)) {\n        const updatedValue = getFinalValue(state);\n        set(target, key, updatedValue, target.type_);\n        markStateFinalized(state);\n      }\n    } else if (isDraftable(value)) {\n      handleValue(value, handledSet, rootScope);\n    }\n  });\n  return target;\n}\n\n// src/core/proxy.ts\nfunction createProxyProxy(base, parent) {\n  const baseIsArray = isArray(base);\n  const state = {\n    type_: baseIsArray ? 1 /* Array */ : 0 /* Object */,\n    // Track which produce call this is associated with.\n    scope_: parent ? parent.scope_ : getCurrentScope(),\n    // True for both shallow and deep changes.\n    modified_: false,\n    // Used during finalization.\n    finalized_: false,\n    // Track which properties have been assigned (true) or deleted (false).\n    // actually instantiated in `prepareCopy()`\n    assigned_: void 0,\n    // The parent draft state.\n    parent_: parent,\n    // The base state.\n    base_: base,\n    // The base proxy.\n    draft_: null,\n    // set below\n    // The base copy with any updated values.\n    copy_: null,\n    // Called by the `produce` function.\n    revoke_: null,\n    isManual_: false,\n    // `callbacks` actually gets assigned in `createProxy`\n    callbacks_: void 0\n  };\n  let target = state;\n  let traps = objectTraps;\n  if (baseIsArray) {\n    target = [state];\n    traps = arrayTraps;\n  }\n  const { revoke, proxy } = Proxy.revocable(target, traps);\n  state.draft_ = proxy;\n  state.revoke_ = revoke;\n  return [proxy, state];\n}\nvar objectTraps = {\n  get(state, prop) {\n    if (prop === DRAFT_STATE)\n      return state;\n    let arrayPlugin = state.scope_.arrayMethodsPlugin_;\n    const isArrayWithStringProp = state.type_ === 1 /* Array */ && typeof prop === \"string\";\n    if (isArrayWithStringProp) {\n      if (arrayPlugin?.isArrayOperationMethod(prop)) {\n        return arrayPlugin.createMethodInterceptor(state, prop);\n      }\n    }\n    const source = latest(state);\n    if (!has(source, prop, state.type_)) {\n      return readPropFromProto(state, source, prop);\n    }\n    const value = source[prop];\n    if (state.finalized_ || !isDraftable(value)) {\n      return value;\n    }\n    if (isArrayWithStringProp && state.operationMethod && arrayPlugin?.isMutatingArrayMethod(\n      state.operationMethod\n    ) && isArrayIndex(prop)) {\n      return value;\n    }\n    if (value === peek(state.base_, prop)) {\n      prepareCopy(state);\n      const childKey = state.type_ === 1 /* Array */ ? +prop : prop;\n      const childDraft = createProxy(state.scope_, value, state, childKey);\n      return state.copy_[childKey] = childDraft;\n    }\n    return value;\n  },\n  has(state, prop) {\n    return prop in latest(state);\n  },\n  ownKeys(state) {\n    return Reflect.ownKeys(latest(state));\n  },\n  set(state, prop, value) {\n    const desc = getDescriptorFromProto(latest(state), prop);\n    if (desc?.set) {\n      desc.set.call(state.draft_, value);\n      return true;\n    }\n    if (!state.modified_) {\n      const current2 = peek(latest(state), prop);\n      const currentState = current2?.[DRAFT_STATE];\n      if (currentState && currentState.base_ === value) {\n        state.copy_[prop] = value;\n        state.assigned_.set(prop, false);\n        return true;\n      }\n      if (is(value, current2) && (value !== void 0 || has(state.base_, prop, state.type_)))\n        return true;\n      prepareCopy(state);\n      markChanged(state);\n    }\n    if (state.copy_[prop] === value && // special case: handle new props with value 'undefined'\n    (value !== void 0 || prop in state.copy_) || // special case: NaN\n    Number.isNaN(value) && Number.isNaN(state.copy_[prop]))\n      return true;\n    state.copy_[prop] = value;\n    state.assigned_.set(prop, true);\n    handleCrossReference(state, prop, value);\n    return true;\n  },\n  deleteProperty(state, prop) {\n    prepareCopy(state);\n    if (peek(state.base_, prop) !== void 0 || prop in state.base_) {\n      state.assigned_.set(prop, false);\n      markChanged(state);\n    } else {\n      state.assigned_.delete(prop);\n    }\n    if (state.copy_) {\n      delete state.copy_[prop];\n    }\n    return true;\n  },\n  // Note: We never coerce `desc.value` into an Immer draft, because we can't make\n  // the same guarantee in ES5 mode.\n  getOwnPropertyDescriptor(state, prop) {\n    const owner = latest(state);\n    const desc = Reflect.getOwnPropertyDescriptor(owner, prop);\n    if (!desc)\n      return desc;\n    return {\n      [WRITABLE]: true,\n      [CONFIGURABLE]: state.type_ !== 1 /* Array */ || prop !== \"length\",\n      [ENUMERABLE]: desc[ENUMERABLE],\n      [VALUE]: owner[prop]\n    };\n  },\n  defineProperty() {\n    die(11);\n  },\n  getPrototypeOf(state) {\n    return getPrototypeOf(state.base_);\n  },\n  setPrototypeOf() {\n    die(12);\n  }\n};\nvar arrayTraps = {};\nfor (let key in objectTraps) {\n  let fn = objectTraps[key];\n  arrayTraps[key] = function() {\n    const args = arguments;\n    args[0] = args[0][0];\n    return fn.apply(this, args);\n  };\n}\narrayTraps.deleteProperty = function(state, prop) {\n  if (process.env.NODE_ENV !== \"production\" && isNaN(parseInt(prop)))\n    die(13);\n  return arrayTraps.set.call(this, state, prop, void 0);\n};\narrayTraps.set = function(state, prop, value) {\n  if (process.env.NODE_ENV !== \"production\" && prop !== \"length\" && isNaN(parseInt(prop)))\n    die(14);\n  return objectTraps.set.call(this, state[0], prop, value, state[0]);\n};\nfunction peek(draft, prop) {\n  const state = draft[DRAFT_STATE];\n  const source = state ? latest(state) : draft;\n  return source[prop];\n}\nfunction readPropFromProto(state, source, prop) {\n  const desc = getDescriptorFromProto(source, prop);\n  return desc ? VALUE in desc ? desc[VALUE] : (\n    // This is a very special case, if the prop is a getter defined by the\n    // prototype, we should invoke it with the draft as context!\n    desc.get?.call(state.draft_)\n  ) : void 0;\n}\nfunction getDescriptorFromProto(source, prop) {\n  if (!(prop in source))\n    return void 0;\n  let proto = getPrototypeOf(source);\n  while (proto) {\n    const desc = Object.getOwnPropertyDescriptor(proto, prop);\n    if (desc)\n      return desc;\n    proto = getPrototypeOf(proto);\n  }\n  return void 0;\n}\nfunction markChanged(state) {\n  if (!state.modified_) {\n    state.modified_ = true;\n    if (state.parent_) {\n      markChanged(state.parent_);\n    }\n  }\n}\nfunction prepareCopy(state) {\n  if (!state.copy_) {\n    state.assigned_ = /* @__PURE__ */ new Map();\n    state.copy_ = shallowCopy(\n      state.base_,\n      state.scope_.immer_.useStrictShallowCopy_\n    );\n  }\n}\n\n// src/core/immerClass.ts\nvar Immer2 = class {\n  constructor(config) {\n    this.autoFreeze_ = true;\n    this.useStrictShallowCopy_ = false;\n    this.useStrictIteration_ = false;\n    /**\n     * The `produce` function takes a value and a \"recipe function\" (whose\n     * return value often depends on the base state). The recipe function is\n     * free to mutate its first argument however it wants. All mutations are\n     * only ever applied to a __copy__ of the base state.\n     *\n     * Pass only a function to create a \"curried producer\" which relieves you\n     * from passing the recipe function every time.\n     *\n     * Only plain objects and arrays are made mutable. All other objects are\n     * considered uncopyable.\n     *\n     * Note: This function is __bound__ to its `Immer` instance.\n     *\n     * @param {any} base - the initial state\n     * @param {Function} recipe - function that receives a proxy of the base state as first argument and which can be freely modified\n     * @param {Function} patchListener - optional function that will be called with all the patches produced here\n     * @returns {any} a new state, or the initial state if nothing was modified\n     */\n    this.produce = (base, recipe, patchListener) => {\n      if (isFunction(base) && !isFunction(recipe)) {\n        const defaultBase = recipe;\n        recipe = base;\n        const self = this;\n        return function curriedProduce(base2 = defaultBase, ...args) {\n          return self.produce(base2, (draft) => recipe.call(this, draft, ...args));\n        };\n      }\n      if (!isFunction(recipe))\n        die(6);\n      if (patchListener !== void 0 && !isFunction(patchListener))\n        die(7);\n      let result;\n      if (isDraftable(base)) {\n        const scope = enterScope(this);\n        const proxy = createProxy(scope, base, void 0);\n        let hasError = true;\n        try {\n          result = recipe(proxy);\n          hasError = false;\n        } finally {\n          if (hasError)\n            revokeScope(scope);\n          else\n            leaveScope(scope);\n        }\n        usePatchesInScope(scope, patchListener);\n        return processResult(result, scope);\n      } else if (!base || !isObjectish(base)) {\n        result = recipe(base);\n        if (result === void 0)\n          result = base;\n        if (result === NOTHING)\n          result = void 0;\n        if (this.autoFreeze_)\n          freeze(result, true);\n        if (patchListener) {\n          const p = [];\n          const ip = [];\n          getPlugin(PluginPatches).generateReplacementPatches_(base, result, {\n            patches_: p,\n            inversePatches_: ip\n          });\n          patchListener(p, ip);\n        }\n        return result;\n      } else\n        die(1, base);\n    };\n    this.produceWithPatches = (base, recipe) => {\n      if (isFunction(base)) {\n        return (state, ...args) => this.produceWithPatches(state, (draft) => base(draft, ...args));\n      }\n      let patches, inversePatches;\n      const result = this.produce(base, recipe, (p, ip) => {\n        patches = p;\n        inversePatches = ip;\n      });\n      return [result, patches, inversePatches];\n    };\n    if (isBoolean(config?.autoFreeze))\n      this.setAutoFreeze(config.autoFreeze);\n    if (isBoolean(config?.useStrictShallowCopy))\n      this.setUseStrictShallowCopy(config.useStrictShallowCopy);\n    if (isBoolean(config?.useStrictIteration))\n      this.setUseStrictIteration(config.useStrictIteration);\n  }\n  createDraft(base) {\n    if (!isDraftable(base))\n      die(8);\n    if (isDraft(base))\n      base = current(base);\n    const scope = enterScope(this);\n    const proxy = createProxy(scope, base, void 0);\n    proxy[DRAFT_STATE].isManual_ = true;\n    leaveScope(scope);\n    return proxy;\n  }\n  finishDraft(draft, patchListener) {\n    const state = draft && draft[DRAFT_STATE];\n    if (!state || !state.isManual_)\n      die(9);\n    const { scope_: scope } = state;\n    usePatchesInScope(scope, patchListener);\n    return processResult(void 0, scope);\n  }\n  /**\n   * Pass true to automatically freeze all copies created by Immer.\n   *\n   * By default, auto-freezing is enabled.\n   */\n  setAutoFreeze(value) {\n    this.autoFreeze_ = value;\n  }\n  /**\n   * Pass true to enable strict shallow copy.\n   *\n   * By default, immer does not copy the object descriptors such as getter, setter and non-enumrable properties.\n   */\n  setUseStrictShallowCopy(value) {\n    this.useStrictShallowCopy_ = value;\n  }\n  /**\n   * Pass false to use faster iteration that skips non-enumerable properties\n   * but still handles symbols for compatibility.\n   *\n   * By default, strict iteration is enabled (includes all own properties).\n   */\n  setUseStrictIteration(value) {\n    this.useStrictIteration_ = value;\n  }\n  shouldUseStrictIteration() {\n    return this.useStrictIteration_;\n  }\n  applyPatches(base, patches) {\n    let i;\n    for (i = patches.length - 1; i >= 0; i--) {\n      const patch = patches[i];\n      if (patch.path.length === 0 && patch.op === \"replace\") {\n        base = patch.value;\n        break;\n      }\n    }\n    if (i > -1) {\n      patches = patches.slice(i + 1);\n    }\n    const applyPatchesImpl = getPlugin(PluginPatches).applyPatches_;\n    if (isDraft(base)) {\n      return applyPatchesImpl(base, patches);\n    }\n    return this.produce(\n      base,\n      (draft) => applyPatchesImpl(draft, patches)\n    );\n  }\n};\nfunction createProxy(rootScope, value, parent, key) {\n  const [draft, state] = isMap(value) ? getPlugin(PluginMapSet).proxyMap_(value, parent) : isSet(value) ? getPlugin(PluginMapSet).proxySet_(value, parent) : createProxyProxy(value, parent);\n  const scope = parent?.scope_ ?? getCurrentScope();\n  scope.drafts_.push(draft);\n  state.callbacks_ = parent?.callbacks_ ?? [];\n  state.key_ = key;\n  if (parent && key !== void 0) {\n    registerChildFinalizationCallback(parent, state, key);\n  } else {\n    state.callbacks_.push(function rootDraftCleanup(rootScope2) {\n      rootScope2.mapSetPlugin_?.fixSetContents(state);\n      const { patchPlugin_ } = rootScope2;\n      if (state.modified_ && patchPlugin_) {\n        patchPlugin_.generatePatches_(state, [], rootScope2);\n      }\n    });\n  }\n  return draft;\n}\n\n// src/core/current.ts\nfunction current(value) {\n  if (!isDraft(value))\n    die(10, value);\n  return currentImpl(value);\n}\nfunction currentImpl(value) {\n  if (!isDraftable(value) || isFrozen(value))\n    return value;\n  const state = value[DRAFT_STATE];\n  let copy;\n  let strict = true;\n  if (state) {\n    if (!state.modified_)\n      return state.base_;\n    state.finalized_ = true;\n    copy = shallowCopy(value, state.scope_.immer_.useStrictShallowCopy_);\n    strict = state.scope_.immer_.shouldUseStrictIteration();\n  } else {\n    copy = shallowCopy(value, true);\n  }\n  each(\n    copy,\n    (key, childValue) => {\n      set(copy, key, currentImpl(childValue));\n    },\n    strict\n  );\n  if (state) {\n    state.finalized_ = false;\n  }\n  return copy;\n}\n\n// src/plugins/patches.ts\nfunction enablePatches() {\n  const errorOffset = 16;\n  if (process.env.NODE_ENV !== \"production\") {\n    errors.push(\n      'Sets cannot have \"replace\" patches.',\n      function(op) {\n        return \"Unsupported patch operation: \" + op;\n      },\n      function(path) {\n        return \"Cannot apply patch, path doesn't resolve: \" + path;\n      },\n      \"Patching reserved attributes like __proto__, prototype and constructor is not allowed\"\n    );\n  }\n  function getPath(state, path = []) {\n    if (state.key_ !== void 0) {\n      const parentCopy = state.parent_.copy_ ?? state.parent_.base_;\n      const proxyDraft = getProxyDraft(get(parentCopy, state.key_));\n      const valueAtKey = get(parentCopy, state.key_);\n      if (valueAtKey === void 0) {\n        return null;\n      }\n      if (valueAtKey !== state.draft_ && valueAtKey !== state.base_ && valueAtKey !== state.copy_) {\n        return null;\n      }\n      if (proxyDraft != null && proxyDraft.base_ !== state.base_) {\n        return null;\n      }\n      const isSet2 = state.parent_.type_ === 3 /* Set */;\n      let key;\n      if (isSet2) {\n        const setParent = state.parent_;\n        key = Array.from(setParent.drafts_.keys()).indexOf(state.key_);\n      } else {\n        key = state.key_;\n      }\n      if (!(isSet2 && parentCopy.size > key || has(parentCopy, key))) {\n        return null;\n      }\n      path.push(key);\n    }\n    if (state.parent_) {\n      return getPath(state.parent_, path);\n    }\n    path.reverse();\n    try {\n      resolvePath(state.copy_, path);\n    } catch (e) {\n      return null;\n    }\n    return path;\n  }\n  function resolvePath(base, path) {\n    let current2 = base;\n    for (let i = 0; i < path.length - 1; i++) {\n      const key = path[i];\n      current2 = get(current2, key);\n      if (!isObjectish(current2) || current2 === null) {\n        throw new Error(`Cannot resolve path at '${path.join(\"/\")}'`);\n      }\n    }\n    return current2;\n  }\n  const REPLACE = \"replace\";\n  const ADD = \"add\";\n  const REMOVE = \"remove\";\n  function generatePatches_(state, basePath, scope) {\n    if (state.scope_.processedForPatches_.has(state)) {\n      return;\n    }\n    state.scope_.processedForPatches_.add(state);\n    const { patches_, inversePatches_ } = scope;\n    switch (state.type_) {\n      case 0 /* Object */:\n      case 2 /* Map */:\n        return generatePatchesFromAssigned(\n          state,\n          basePath,\n          patches_,\n          inversePatches_\n        );\n      case 1 /* Array */:\n        return generateArrayPatches(\n          state,\n          basePath,\n          patches_,\n          inversePatches_\n        );\n      case 3 /* Set */:\n        return generateSetPatches(\n          state,\n          basePath,\n          patches_,\n          inversePatches_\n        );\n    }\n  }\n  function generateArrayPatches(state, basePath, patches, inversePatches) {\n    let { base_, assigned_ } = state;\n    let copy_ = state.copy_;\n    if (copy_.length < base_.length) {\n      ;\n      [base_, copy_] = [copy_, base_];\n      [patches, inversePatches] = [inversePatches, patches];\n    }\n    const allReassigned = state.allIndicesReassigned_ === true;\n    for (let i = 0; i < base_.length; i++) {\n      const copiedItem = copy_[i];\n      const baseItem = base_[i];\n      const isAssigned = allReassigned || assigned_?.get(i.toString());\n      if (isAssigned && copiedItem !== baseItem) {\n        const childState = copiedItem?.[DRAFT_STATE];\n        if (childState && childState.modified_) {\n          continue;\n        }\n        const path = basePath.concat([i]);\n        patches.push({\n          op: REPLACE,\n          path,\n          // Need to maybe clone it, as it can in fact be the original value\n          // due to the base/copy inversion at the start of this function\n          value: clonePatchValueIfNeeded(copiedItem)\n        });\n        inversePatches.push({\n          op: REPLACE,\n          path,\n          value: clonePatchValueIfNeeded(baseItem)\n        });\n      }\n    }\n    for (let i = base_.length; i < copy_.length; i++) {\n      const path = basePath.concat([i]);\n      patches.push({\n        op: ADD,\n        path,\n        // Need to maybe clone it, as it can in fact be the original value\n        // due to the base/copy inversion at the start of this function\n        value: clonePatchValueIfNeeded(copy_[i])\n      });\n    }\n    for (let i = copy_.length - 1; base_.length <= i; --i) {\n      const path = basePath.concat([i]);\n      inversePatches.push({\n        op: REMOVE,\n        path\n      });\n    }\n  }\n  function generatePatchesFromAssigned(state, basePath, patches, inversePatches) {\n    const { base_, copy_, type_ } = state;\n    each(state.assigned_, (key, assignedValue) => {\n      const origValue = get(base_, key, type_);\n      const value = get(copy_, key, type_);\n      const op = !assignedValue ? REMOVE : has(base_, key) ? REPLACE : ADD;\n      if (origValue === value && op === REPLACE)\n        return;\n      const path = basePath.concat(key);\n      patches.push(\n        op === REMOVE ? { op, path } : { op, path, value: clonePatchValueIfNeeded(value) }\n      );\n      inversePatches.push(\n        op === ADD ? { op: REMOVE, path } : op === REMOVE ? { op: ADD, path, value: clonePatchValueIfNeeded(origValue) } : { op: REPLACE, path, value: clonePatchValueIfNeeded(origValue) }\n      );\n    });\n  }\n  function generateSetPatches(state, basePath, patches, inversePatches) {\n    let { base_, copy_ } = state;\n    let i = 0;\n    base_.forEach((value) => {\n      if (!copy_.has(value)) {\n        const path = basePath.concat([i]);\n        patches.push({\n          op: REMOVE,\n          path,\n          value\n        });\n        inversePatches.unshift({\n          op: ADD,\n          path,\n          value\n        });\n      }\n      i++;\n    });\n    i = 0;\n    copy_.forEach((value) => {\n      if (!base_.has(value)) {\n        const path = basePath.concat([i]);\n        patches.push({\n          op: ADD,\n          path,\n          value\n        });\n        inversePatches.unshift({\n          op: REMOVE,\n          path,\n          value\n        });\n      }\n      i++;\n    });\n  }\n  function generateReplacementPatches_(baseValue, replacement, scope) {\n    const { patches_, inversePatches_ } = scope;\n    patches_.push({\n      op: REPLACE,\n      path: [],\n      value: replacement === NOTHING ? void 0 : replacement\n    });\n    inversePatches_.push({\n      op: REPLACE,\n      path: [],\n      value: baseValue\n    });\n  }\n  function applyPatches_(draft, patches) {\n    patches.forEach((patch) => {\n      const { path, op } = patch;\n      let base = draft;\n      for (let i = 0; i < path.length - 1; i++) {\n        const parentType = getArchtype(base);\n        let p = path[i];\n        if (typeof p !== \"string\" && typeof p !== \"number\") {\n          p = \"\" + p;\n        }\n        if ((parentType === 0 /* Object */ || parentType === 1 /* Array */) && (p === \"__proto__\" || p === CONSTRUCTOR))\n          die(errorOffset + 3);\n        if (isFunction(base) && p === PROTOTYPE)\n          die(errorOffset + 3);\n        base = get(base, p);\n        if (!isObjectish(base))\n          die(errorOffset + 2, path.join(\"/\"));\n      }\n      const type = getArchtype(base);\n      const value = deepClonePatchValue(patch.value);\n      const key = path[path.length - 1];\n      switch (op) {\n        case REPLACE:\n          switch (type) {\n            case 2 /* Map */:\n              return base.set(key, value);\n            case 3 /* Set */:\n              die(errorOffset);\n            default:\n              return base[key] = value;\n          }\n        case ADD:\n          switch (type) {\n            case 1 /* Array */:\n              return key === \"-\" ? base.push(value) : base.splice(key, 0, value);\n            case 2 /* Map */:\n              return base.set(key, value);\n            case 3 /* Set */:\n              return base.add(value);\n            default:\n              return base[key] = value;\n          }\n        case REMOVE:\n          switch (type) {\n            case 1 /* Array */:\n              return base.splice(key, 1);\n            case 2 /* Map */:\n              return base.delete(key);\n            case 3 /* Set */:\n              return base.delete(patch.value);\n            default:\n              return delete base[key];\n          }\n        default:\n          die(errorOffset + 1, op);\n      }\n    });\n    return draft;\n  }\n  function deepClonePatchValue(obj) {\n    if (!isDraftable(obj))\n      return obj;\n    if (isArray(obj))\n      return obj.map(deepClonePatchValue);\n    if (isMap(obj))\n      return new Map(\n        Array.from(obj.entries()).map(([k, v]) => [k, deepClonePatchValue(v)])\n      );\n    if (isSet(obj))\n      return new Set(Array.from(obj).map(deepClonePatchValue));\n    const cloned = Object.create(getPrototypeOf(obj));\n    for (const key in obj)\n      cloned[key] = deepClonePatchValue(obj[key]);\n    if (has(obj, DRAFTABLE))\n      cloned[DRAFTABLE] = obj[DRAFTABLE];\n    return cloned;\n  }\n  function clonePatchValueIfNeeded(obj) {\n    if (isDraft(obj)) {\n      return deepClonePatchValue(obj);\n    } else\n      return obj;\n  }\n  loadPlugin(PluginPatches, {\n    applyPatches_,\n    generatePatches_,\n    generateReplacementPatches_,\n    getPath\n  });\n}\n\n// src/plugins/mapset.ts\nfunction enableMapSet() {\n  class DraftMap extends Map {\n    constructor(target, parent) {\n      super();\n      this[DRAFT_STATE] = {\n        type_: 2 /* Map */,\n        parent_: parent,\n        scope_: parent ? parent.scope_ : getCurrentScope(),\n        modified_: false,\n        finalized_: false,\n        copy_: void 0,\n        assigned_: void 0,\n        base_: target,\n        draft_: this,\n        isManual_: false,\n        revoked_: false,\n        callbacks_: []\n      };\n    }\n    get size() {\n      return latest(this[DRAFT_STATE]).size;\n    }\n    has(key) {\n      return latest(this[DRAFT_STATE]).has(key);\n    }\n    set(key, value) {\n      const state = this[DRAFT_STATE];\n      assertUnrevoked(state);\n      if (!latest(state).has(key) || latest(state).get(key) !== value) {\n        prepareMapCopy(state);\n        markChanged(state);\n        state.assigned_.set(key, true);\n        state.copy_.set(key, value);\n        state.assigned_.set(key, true);\n        handleCrossReference(state, key, value);\n      }\n      return this;\n    }\n    delete(key) {\n      if (!this.has(key)) {\n        return false;\n      }\n      const state = this[DRAFT_STATE];\n      assertUnrevoked(state);\n      prepareMapCopy(state);\n      markChanged(state);\n      if (state.base_.has(key)) {\n        state.assigned_.set(key, false);\n      } else {\n        state.assigned_.delete(key);\n      }\n      state.copy_.delete(key);\n      return true;\n    }\n    clear() {\n      const state = this[DRAFT_STATE];\n      assertUnrevoked(state);\n      if (latest(state).size) {\n        prepareMapCopy(state);\n        markChanged(state);\n        state.assigned_ = /* @__PURE__ */ new Map();\n        each(state.base_, (key) => {\n          state.assigned_.set(key, false);\n        });\n        state.copy_.clear();\n      }\n    }\n    forEach(cb, thisArg) {\n      const state = this[DRAFT_STATE];\n      latest(state).forEach((_value, key, _map) => {\n        cb.call(thisArg, this.get(key), key, this);\n      });\n    }\n    get(key) {\n      const state = this[DRAFT_STATE];\n      assertUnrevoked(state);\n      const value = latest(state).get(key);\n      if (state.finalized_ || !isDraftable(value)) {\n        return value;\n      }\n      if (value !== state.base_.get(key)) {\n        return value;\n      }\n      const draft = createProxy(state.scope_, value, state, key);\n      prepareMapCopy(state);\n      state.copy_.set(key, draft);\n      return draft;\n    }\n    keys() {\n      return latest(this[DRAFT_STATE]).keys();\n    }\n    values() {\n      const iterator = this.keys();\n      return {\n        [Symbol.iterator]: () => this.values(),\n        next: () => {\n          const r = iterator.next();\n          if (r.done)\n            return r;\n          const value = this.get(r.value);\n          return {\n            done: false,\n            value\n          };\n        }\n      };\n    }\n    entries() {\n      const iterator = this.keys();\n      return {\n        [Symbol.iterator]: () => this.entries(),\n        next: () => {\n          const r = iterator.next();\n          if (r.done)\n            return r;\n          const value = this.get(r.value);\n          return {\n            done: false,\n            value: [r.value, value]\n          };\n        }\n      };\n    }\n    [(DRAFT_STATE, Symbol.iterator)]() {\n      return this.entries();\n    }\n  }\n  function proxyMap_(target, parent) {\n    const map = new DraftMap(target, parent);\n    return [map, map[DRAFT_STATE]];\n  }\n  function prepareMapCopy(state) {\n    if (!state.copy_) {\n      state.assigned_ = /* @__PURE__ */ new Map();\n      state.copy_ = new Map(state.base_);\n    }\n  }\n  class DraftSet extends Set {\n    constructor(target, parent) {\n      super();\n      this[DRAFT_STATE] = {\n        type_: 3 /* Set */,\n        parent_: parent,\n        scope_: parent ? parent.scope_ : getCurrentScope(),\n        modified_: false,\n        finalized_: false,\n        copy_: void 0,\n        base_: target,\n        draft_: this,\n        drafts_: /* @__PURE__ */ new Map(),\n        revoked_: false,\n        isManual_: false,\n        assigned_: void 0,\n        callbacks_: []\n      };\n    }\n    get size() {\n      return latest(this[DRAFT_STATE]).size;\n    }\n    has(value) {\n      const state = this[DRAFT_STATE];\n      assertUnrevoked(state);\n      if (!state.copy_) {\n        return state.base_.has(value);\n      }\n      if (state.copy_.has(value))\n        return true;\n      if (state.drafts_.has(value) && state.copy_.has(state.drafts_.get(value)))\n        return true;\n      return false;\n    }\n    add(value) {\n      const state = this[DRAFT_STATE];\n      assertUnrevoked(state);\n      if (!this.has(value)) {\n        prepareSetCopy(state);\n        markChanged(state);\n        state.copy_.add(value);\n        handleCrossReference(state, value, value);\n      }\n      return this;\n    }\n    delete(value) {\n      if (!this.has(value)) {\n        return false;\n      }\n      const state = this[DRAFT_STATE];\n      assertUnrevoked(state);\n      prepareSetCopy(state);\n      markChanged(state);\n      return state.copy_.delete(value) || (state.drafts_.has(value) ? state.copy_.delete(state.drafts_.get(value)) : (\n        /* istanbul ignore next */\n        false\n      ));\n    }\n    clear() {\n      const state = this[DRAFT_STATE];\n      assertUnrevoked(state);\n      if (latest(state).size) {\n        prepareSetCopy(state);\n        markChanged(state);\n        state.copy_.clear();\n      }\n    }\n    values() {\n      const state = this[DRAFT_STATE];\n      assertUnrevoked(state);\n      prepareSetCopy(state);\n      return state.copy_.values();\n    }\n    entries() {\n      const state = this[DRAFT_STATE];\n      assertUnrevoked(state);\n      prepareSetCopy(state);\n      return state.copy_.entries();\n    }\n    keys() {\n      return this.values();\n    }\n    [(DRAFT_STATE, Symbol.iterator)]() {\n      return this.values();\n    }\n    forEach(cb, thisArg) {\n      const iterator = this.values();\n      let result = iterator.next();\n      while (!result.done) {\n        cb.call(thisArg, result.value, result.value, this);\n        result = iterator.next();\n      }\n    }\n  }\n  function proxySet_(target, parent) {\n    const set2 = new DraftSet(target, parent);\n    return [set2, set2[DRAFT_STATE]];\n  }\n  function prepareSetCopy(state) {\n    if (!state.copy_) {\n      state.copy_ = /* @__PURE__ */ new Set();\n      state.base_.forEach((value) => {\n        if (isDraftable(value)) {\n          const draft = createProxy(state.scope_, value, state, value);\n          state.drafts_.set(value, draft);\n          state.copy_.add(draft);\n        } else {\n          state.copy_.add(value);\n        }\n      });\n    }\n  }\n  function assertUnrevoked(state) {\n    if (state.revoked_)\n      die(3, JSON.stringify(latest(state)));\n  }\n  function fixSetContents(target) {\n    if (target.type_ === 3 /* Set */ && target.copy_) {\n      const copy = new Set(target.copy_);\n      target.copy_.clear();\n      copy.forEach((value) => {\n        target.copy_.add(getValue(value));\n      });\n    }\n  }\n  loadPlugin(PluginMapSet, { proxyMap_, proxySet_, fixSetContents });\n}\n\n// src/plugins/arrayMethods.ts\nfunction enableArrayMethods() {\n  const SHIFTING_METHODS = /* @__PURE__ */ new Set([\"shift\", \"unshift\"]);\n  const QUEUE_METHODS = /* @__PURE__ */ new Set([\"push\", \"pop\"]);\n  const RESULT_RETURNING_METHODS = /* @__PURE__ */ new Set([\n    ...QUEUE_METHODS,\n    ...SHIFTING_METHODS\n  ]);\n  const REORDERING_METHODS = /* @__PURE__ */ new Set([\"reverse\", \"sort\"]);\n  const MUTATING_METHODS = /* @__PURE__ */ new Set([\n    ...RESULT_RETURNING_METHODS,\n    ...REORDERING_METHODS,\n    \"splice\"\n  ]);\n  const FIND_METHODS = /* @__PURE__ */ new Set([\"find\", \"findLast\"]);\n  const NON_MUTATING_METHODS = /* @__PURE__ */ new Set([\n    \"filter\",\n    \"slice\",\n    \"concat\",\n    \"flat\",\n    ...FIND_METHODS,\n    \"findIndex\",\n    \"findLastIndex\",\n    \"some\",\n    \"every\",\n    \"indexOf\",\n    \"lastIndexOf\",\n    \"includes\",\n    \"join\",\n    \"toString\",\n    \"toLocaleString\"\n  ]);\n  function isMutatingArrayMethod(method) {\n    return MUTATING_METHODS.has(method);\n  }\n  function isNonMutatingArrayMethod(method) {\n    return NON_MUTATING_METHODS.has(method);\n  }\n  function isArrayOperationMethod(method) {\n    return isMutatingArrayMethod(method) || isNonMutatingArrayMethod(method);\n  }\n  function enterOperation(state, method) {\n    state.operationMethod = method;\n  }\n  function exitOperation(state) {\n    state.operationMethod = void 0;\n  }\n  function executeArrayMethod(state, operation, markLength = true) {\n    prepareCopy(state);\n    const result = operation();\n    markChanged(state);\n    if (markLength)\n      state.assigned_.set(\"length\", true);\n    return result;\n  }\n  function markAllIndicesReassigned(state) {\n    state.allIndicesReassigned_ = true;\n  }\n  function normalizeSliceIndex(index, length) {\n    if (index < 0) {\n      return Math.max(length + index, 0);\n    }\n    return Math.min(index, length);\n  }\n  function handleInsertedValues(state, startIndex, values) {\n    for (let i = 0; i < values.length; i++) {\n      const index = startIndex + i;\n      state.assigned_.set(index, true);\n      handleCrossReference(state, index, values[i]);\n    }\n  }\n  function handleSimpleOperation(state, method, args) {\n    return executeArrayMethod(state, () => {\n      const lengthBefore = state.copy_.length;\n      const result = state.copy_[method](...args);\n      if (SHIFTING_METHODS.has(method)) {\n        markAllIndicesReassigned(state);\n      }\n      if (method === \"push\" && args.length > 0) {\n        handleInsertedValues(state, lengthBefore, args);\n      } else if (method === \"unshift\" && args.length > 0) {\n        handleInsertedValues(state, 0, args);\n      }\n      return RESULT_RETURNING_METHODS.has(method) ? result : state.draft_;\n    });\n  }\n  function handleReorderingOperation(state, method, args) {\n    return executeArrayMethod(\n      state,\n      () => {\n        ;\n        state.copy_[method](...args);\n        markAllIndicesReassigned(state);\n        return state.draft_;\n      },\n      false\n    );\n  }\n  function createMethodInterceptor(state, originalMethod) {\n    return function interceptedMethod(...args) {\n      const method = originalMethod;\n      enterOperation(state, method);\n      try {\n        if (isMutatingArrayMethod(method)) {\n          if (RESULT_RETURNING_METHODS.has(method)) {\n            return handleSimpleOperation(state, method, args);\n          }\n          if (REORDERING_METHODS.has(method)) {\n            return handleReorderingOperation(state, method, args);\n          }\n          if (method === \"splice\") {\n            const res = executeArrayMethod(\n              state,\n              () => state.copy_.splice(...args)\n            );\n            markAllIndicesReassigned(state);\n            if (args.length > 2) {\n              const startIndex = normalizeSliceIndex(\n                args[0] ?? 0,\n                state.copy_.length\n              );\n              handleInsertedValues(state, startIndex, args.slice(2));\n            }\n            return res;\n          }\n        } else {\n          return handleNonMutatingOperation(state, method, args);\n        }\n      } finally {\n        exitOperation(state);\n      }\n    };\n  }\n  function handleNonMutatingOperation(state, method, args) {\n    const source = latest(state);\n    if (method === \"filter\") {\n      const predicate = args[0];\n      const result = [];\n      for (let i = 0; i < source.length; i++) {\n        if (predicate(source[i], i, source)) {\n          result.push(state.draft_[i]);\n        }\n      }\n      return result;\n    }\n    if (FIND_METHODS.has(method)) {\n      const predicate = args[0];\n      const isForward = method === \"find\";\n      const step = isForward ? 1 : -1;\n      const start = isForward ? 0 : source.length - 1;\n      for (let i = start; i >= 0 && i < source.length; i += step) {\n        if (predicate(source[i], i, source)) {\n          return state.draft_[i];\n        }\n      }\n      return void 0;\n    }\n    if (method === \"slice\") {\n      const rawStart = args[0] ?? 0;\n      const rawEnd = args[1] ?? source.length;\n      const start = normalizeSliceIndex(rawStart, source.length);\n      const end = normalizeSliceIndex(rawEnd, source.length);\n      const result = [];\n      for (let i = start; i < end; i++) {\n        result.push(state.draft_[i]);\n      }\n      return result;\n    }\n    return source[method](...args);\n  }\n  loadPlugin(PluginArrayMethods, {\n    createMethodInterceptor,\n    isArrayOperationMethod,\n    isMutatingArrayMethod\n  });\n}\n\n// src/immer.ts\nvar immer = new Immer2();\nvar produce = immer.produce;\nvar produceWithPatches = /* @__PURE__ */ immer.produceWithPatches.bind(\n  immer\n);\nvar setAutoFreeze = /* @__PURE__ */ immer.setAutoFreeze.bind(immer);\nvar setUseStrictShallowCopy = /* @__PURE__ */ immer.setUseStrictShallowCopy.bind(\n  immer\n);\nvar setUseStrictIteration = /* @__PURE__ */ immer.setUseStrictIteration.bind(\n  immer\n);\nvar applyPatches = /* @__PURE__ */ immer.applyPatches.bind(immer);\nvar createDraft = /* @__PURE__ */ immer.createDraft.bind(immer);\nvar finishDraft = /* @__PURE__ */ immer.finishDraft.bind(immer);\nvar castDraft = (value) => value;\nvar castImmutable = (value) => value;\nexport {\n  Immer2 as Immer,\n  applyPatches,\n  castDraft,\n  castImmutable,\n  createDraft,\n  current,\n  enableArrayMethods,\n  enableMapSet,\n  enablePatches,\n  finishDraft,\n  freeze,\n  DRAFTABLE as immerable,\n  isDraft,\n  isDraftable,\n  NOTHING as nothing,\n  original,\n  produce,\n  produceWithPatches,\n  setAutoFreeze,\n  setUseStrictIteration,\n  setUseStrictShallowCopy\n};\n//# sourceMappingURL=immer.mjs.map","// src/index.ts\nfunction createThunkMiddleware(extraArgument) {\n  const middleware = ({ dispatch, getState }) => (next) => (action) => {\n    if (typeof action === \"function\") {\n      return action(dispatch, getState, extraArgument);\n    }\n    return next(action);\n  };\n  return middleware;\n}\nvar thunk = createThunkMiddleware();\nvar withExtraArgument = createThunkMiddleware;\nexport {\n  thunk,\n  withExtraArgument\n};\n","// src/index.ts\nexport * from \"redux\";\nimport { freeze, original as original2 } from \"immer\";\n\n// src/immerImports.ts\nimport { current, isDraft, produce, isDraftable, setUseStrictIteration } from \"immer\";\n\n// src/index.ts\nimport { createSelector, lruMemoize } from \"reselect\";\n\n// src/reselectImports.ts\nimport { createSelectorCreator, weakMapMemoize } from \"reselect\";\n\n// src/createDraftSafeSelector.ts\nvar createDraftSafeSelectorCreator = (...args) => {\n  const createSelector2 = createSelectorCreator(...args);\n  const createDraftSafeSelector2 = Object.assign((...args2) => {\n    const selector = createSelector2(...args2);\n    const wrappedSelector = (value, ...rest) => selector(isDraft(value) ? current(value) : value, ...rest);\n    Object.assign(wrappedSelector, selector);\n    return wrappedSelector;\n  }, {\n    withTypes: () => createDraftSafeSelector2\n  });\n  return createDraftSafeSelector2;\n};\nvar createDraftSafeSelector = /* @__PURE__ */ createDraftSafeSelectorCreator(weakMapMemoize);\n\n// src/reduxImports.ts\nimport { createStore, combineReducers, applyMiddleware, compose, isPlainObject, isAction } from \"redux\";\n\n// src/devtoolsExtension.ts\nvar composeWithDevTools = typeof window !== \"undefined\" && window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__ ? window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__ : function() {\n  if (arguments.length === 0) return void 0;\n  if (typeof arguments[0] === \"object\") return compose;\n  return compose.apply(null, arguments);\n};\nvar devToolsEnhancer = typeof window !== \"undefined\" && window.__REDUX_DEVTOOLS_EXTENSION__ ? window.__REDUX_DEVTOOLS_EXTENSION__ : function() {\n  return function(noop3) {\n    return noop3;\n  };\n};\n\n// src/getDefaultMiddleware.ts\nimport { thunk as thunkMiddleware, withExtraArgument } from \"redux-thunk\";\n\n// src/tsHelpers.ts\nvar hasMatchFunction = (v) => {\n  return v && typeof v.match === \"function\";\n};\n\n// src/createAction.ts\nfunction createAction(type, prepareAction) {\n  function actionCreator(...args) {\n    if (prepareAction) {\n      let prepared = prepareAction(...args);\n      if (!prepared) {\n        throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(0) : \"prepareAction did not return an object\");\n      }\n      return {\n        type,\n        payload: prepared.payload,\n        ...\"meta\" in prepared && {\n          meta: prepared.meta\n        },\n        ...\"error\" in prepared && {\n          error: prepared.error\n        }\n      };\n    }\n    return {\n      type,\n      payload: args[0]\n    };\n  }\n  actionCreator.toString = () => `${type}`;\n  actionCreator.type = type;\n  actionCreator.match = (action) => isAction(action) && action.type === type;\n  return actionCreator;\n}\nfunction isActionCreator(action) {\n  return typeof action === \"function\" && \"type\" in action && // hasMatchFunction only wants Matchers but I don't see the point in rewriting it\n  hasMatchFunction(action);\n}\nfunction isFSA(action) {\n  return isAction(action) && Object.keys(action).every(isValidKey);\n}\nfunction isValidKey(key) {\n  return [\"type\", \"payload\", \"error\", \"meta\"].indexOf(key) > -1;\n}\n\n// src/actionCreatorInvariantMiddleware.ts\nfunction getMessage(type) {\n  const splitType = type ? `${type}`.split(\"/\") : [];\n  const actionName = splitType[splitType.length - 1] || \"actionCreator\";\n  return `Detected an action creator with type \"${type || \"unknown\"}\" being dispatched. \nMake sure you're calling the action creator before dispatching, i.e. \\`dispatch(${actionName}())\\` instead of \\`dispatch(${actionName})\\`. This is necessary even if the action has no payload.`;\n}\nfunction createActionCreatorInvariantMiddleware(options = {}) {\n  if (process.env.NODE_ENV === \"production\") {\n    return () => (next) => (action) => next(action);\n  }\n  const {\n    isActionCreator: isActionCreator2 = isActionCreator\n  } = options;\n  return () => (next) => (action) => {\n    if (isActionCreator2(action)) {\n      console.warn(getMessage(action.type));\n    }\n    return next(action);\n  };\n}\n\n// src/utils.ts\nfunction getTimeMeasureUtils(maxDelay, fnName) {\n  let elapsed = 0;\n  return {\n    measureTime(fn) {\n      const started = Date.now();\n      try {\n        return fn();\n      } finally {\n        const finished = Date.now();\n        elapsed += finished - started;\n      }\n    },\n    warnIfExceeded() {\n      if (elapsed > maxDelay) {\n        console.warn(`${fnName} took ${elapsed}ms, which is more than the warning threshold of ${maxDelay}ms. \nIf your state or actions are very large, you may want to disable the middleware as it might cause too much of a slowdown in development mode. See https://redux-toolkit.js.org/api/getDefaultMiddleware for instructions.\nIt is disabled in production builds, so you don't need to worry about that.`);\n      }\n    }\n  };\n}\nvar Tuple = class _Tuple extends Array {\n  constructor(...items) {\n    super(...items);\n    Object.setPrototypeOf(this, _Tuple.prototype);\n  }\n  static get [Symbol.species]() {\n    return _Tuple;\n  }\n  concat(...arr) {\n    return super.concat.apply(this, arr);\n  }\n  prepend(...arr) {\n    if (arr.length === 1 && Array.isArray(arr[0])) {\n      return new _Tuple(...arr[0].concat(this));\n    }\n    return new _Tuple(...arr.concat(this));\n  }\n};\nfunction freezeDraftable(val) {\n  return isDraftable(val) ? produce(val, () => {\n  }) : val;\n}\nfunction getOrInsertComputed(map, key, compute) {\n  if (map.has(key)) return map.get(key);\n  return map.set(key, compute(key)).get(key);\n}\n\n// src/immutableStateInvariantMiddleware.ts\nfunction isImmutableDefault(value) {\n  return typeof value !== \"object\" || value == null || Object.isFrozen(value);\n}\nfunction trackForMutations(isImmutable, ignoredPaths, obj) {\n  const trackedProperties = trackProperties(isImmutable, ignoredPaths, obj);\n  return {\n    detectMutations() {\n      return detectMutations(isImmutable, ignoredPaths, trackedProperties, obj);\n    }\n  };\n}\nfunction trackProperties(isImmutable, ignoredPaths = [], obj, path = \"\", checkedObjects = /* @__PURE__ */ new Set()) {\n  const tracked = {\n    value: obj\n  };\n  if (!isImmutable(obj) && !checkedObjects.has(obj)) {\n    checkedObjects.add(obj);\n    tracked.children = {};\n    const hasIgnoredPaths = ignoredPaths.length > 0;\n    for (const key in obj) {\n      const nestedPath = path ? path + \".\" + key : key;\n      if (hasIgnoredPaths) {\n        const hasMatches = ignoredPaths.some((ignored) => {\n          if (ignored instanceof RegExp) {\n            return ignored.test(nestedPath);\n          }\n          return nestedPath === ignored;\n        });\n        if (hasMatches) {\n          continue;\n        }\n      }\n      tracked.children[key] = trackProperties(isImmutable, ignoredPaths, obj[key], nestedPath);\n    }\n  }\n  return tracked;\n}\nfunction detectMutations(isImmutable, ignoredPaths = [], trackedProperty, obj, sameParentRef = false, path = \"\") {\n  const prevObj = trackedProperty ? trackedProperty.value : void 0;\n  const sameRef = prevObj === obj;\n  if (sameParentRef && !sameRef && !Number.isNaN(obj)) {\n    return {\n      wasMutated: true,\n      path\n    };\n  }\n  if (isImmutable(prevObj) || isImmutable(obj)) {\n    return {\n      wasMutated: false\n    };\n  }\n  const keysToDetect = {};\n  for (let key in trackedProperty.children) {\n    keysToDetect[key] = true;\n  }\n  for (let key in obj) {\n    keysToDetect[key] = true;\n  }\n  const hasIgnoredPaths = ignoredPaths.length > 0;\n  for (let key in keysToDetect) {\n    const nestedPath = path ? path + \".\" + key : key;\n    if (hasIgnoredPaths) {\n      const hasMatches = ignoredPaths.some((ignored) => {\n        if (ignored instanceof RegExp) {\n          return ignored.test(nestedPath);\n        }\n        return nestedPath === ignored;\n      });\n      if (hasMatches) {\n        continue;\n      }\n    }\n    const result = detectMutations(isImmutable, ignoredPaths, trackedProperty.children[key], obj[key], sameRef, nestedPath);\n    if (result.wasMutated) {\n      return result;\n    }\n  }\n  return {\n    wasMutated: false\n  };\n}\nfunction createImmutableStateInvariantMiddleware(options = {}) {\n  if (process.env.NODE_ENV === \"production\") {\n    return () => (next) => (action) => next(action);\n  } else {\n    let stringify2 = function(obj, serializer, indent, decycler) {\n      return JSON.stringify(obj, getSerialize2(serializer, decycler), indent);\n    }, getSerialize2 = function(serializer, decycler) {\n      let stack = [], keys = [];\n      if (!decycler) decycler = function(_, value) {\n        if (stack[0] === value) return \"[Circular ~]\";\n        return \"[Circular ~.\" + keys.slice(0, stack.indexOf(value)).join(\".\") + \"]\";\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 = decycler.call(this, key, value);\n        } else stack.push(value);\n        return serializer == null ? value : serializer.call(this, key, value);\n      };\n    };\n    var stringify = stringify2, getSerialize = getSerialize2;\n    let {\n      isImmutable = isImmutableDefault,\n      ignoredPaths,\n      warnAfter = 32\n    } = options;\n    const track = trackForMutations.bind(null, isImmutable, ignoredPaths);\n    return ({\n      getState\n    }) => {\n      let state = getState();\n      let tracker = track(state);\n      let result;\n      return (next) => (action) => {\n        const measureUtils = getTimeMeasureUtils(warnAfter, \"ImmutableStateInvariantMiddleware\");\n        measureUtils.measureTime(() => {\n          state = getState();\n          result = tracker.detectMutations();\n          tracker = track(state);\n          if (result.wasMutated) {\n            throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(19) : `A state mutation was detected between dispatches, in the path '${result.path || \"\"}'.  This may cause incorrect behavior. (https://redux.js.org/style-guide/style-guide#do-not-mutate-state)`);\n          }\n        });\n        const dispatchedAction = next(action);\n        measureUtils.measureTime(() => {\n          state = getState();\n          result = tracker.detectMutations();\n          tracker = track(state);\n          if (result.wasMutated) {\n            throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(20) : `A state mutation was detected inside a dispatch, in the path: ${result.path || \"\"}. Take a look at the reducer(s) handling the action ${stringify2(action)}. (https://redux.js.org/style-guide/style-guide#do-not-mutate-state)`);\n          }\n        });\n        measureUtils.warnIfExceeded();\n        return dispatchedAction;\n      };\n    };\n  }\n}\n\n// src/serializableStateInvariantMiddleware.ts\nfunction isPlain(val) {\n  const type = typeof val;\n  return val == null || type === \"string\" || type === \"boolean\" || type === \"number\" || Array.isArray(val) || isPlainObject(val);\n}\nfunction findNonSerializableValue(value, path = \"\", isSerializable = isPlain, getEntries, ignoredPaths = [], cache) {\n  let foundNestedSerializable;\n  if (!isSerializable(value)) {\n    return {\n      keyPath: path || \"<root>\",\n      value\n    };\n  }\n  if (typeof value !== \"object\" || value === null) {\n    return false;\n  }\n  if (cache?.has(value)) return false;\n  const entries = getEntries != null ? getEntries(value) : Object.entries(value);\n  const hasIgnoredPaths = ignoredPaths.length > 0;\n  for (const [key, nestedValue] of entries) {\n    const nestedPath = path ? path + \".\" + key : key;\n    if (hasIgnoredPaths) {\n      const hasMatches = ignoredPaths.some((ignored) => {\n        if (ignored instanceof RegExp) {\n          return ignored.test(nestedPath);\n        }\n        return nestedPath === ignored;\n      });\n      if (hasMatches) {\n        continue;\n      }\n    }\n    if (!isSerializable(nestedValue)) {\n      return {\n        keyPath: nestedPath,\n        value: nestedValue\n      };\n    }\n    if (typeof nestedValue === \"object\") {\n      foundNestedSerializable = findNonSerializableValue(nestedValue, nestedPath, isSerializable, getEntries, ignoredPaths, cache);\n      if (foundNestedSerializable) {\n        return foundNestedSerializable;\n      }\n    }\n  }\n  if (cache && isNestedFrozen(value)) cache.add(value);\n  return false;\n}\nfunction isNestedFrozen(value) {\n  if (!Object.isFrozen(value)) return false;\n  for (const nestedValue of Object.values(value)) {\n    if (typeof nestedValue !== \"object\" || nestedValue === null) continue;\n    if (!isNestedFrozen(nestedValue)) return false;\n  }\n  return true;\n}\nfunction createSerializableStateInvariantMiddleware(options = {}) {\n  if (process.env.NODE_ENV === \"production\") {\n    return () => (next) => (action) => next(action);\n  } else {\n    const {\n      isSerializable = isPlain,\n      getEntries,\n      ignoredActions = [],\n      ignoredActionPaths = [\"meta.arg\", \"meta.baseQueryMeta\"],\n      ignoredPaths = [],\n      warnAfter = 32,\n      ignoreState = false,\n      ignoreActions = false,\n      disableCache = false\n    } = options;\n    const cache = !disableCache && WeakSet ? /* @__PURE__ */ new WeakSet() : void 0;\n    return (storeAPI) => (next) => (action) => {\n      if (!isAction(action)) {\n        return next(action);\n      }\n      const result = next(action);\n      const measureUtils = getTimeMeasureUtils(warnAfter, \"SerializableStateInvariantMiddleware\");\n      if (!ignoreActions && !(ignoredActions.length && ignoredActions.indexOf(action.type) !== -1)) {\n        measureUtils.measureTime(() => {\n          const foundActionNonSerializableValue = findNonSerializableValue(action, \"\", isSerializable, getEntries, ignoredActionPaths, cache);\n          if (foundActionNonSerializableValue) {\n            const {\n              keyPath,\n              value\n            } = foundActionNonSerializableValue;\n            console.error(`A non-serializable value was detected in an action, in the path: \\`${keyPath}\\`. Value:`, value, \"\\nTake a look at the logic that dispatched this action: \", action, \"\\n(See https://redux.js.org/faq/actions#why-should-type-be-a-string-or-at-least-serializable-why-should-my-action-types-be-constants)\", \"\\n(To allow non-serializable values see: https://redux-toolkit.js.org/usage/usage-guide#working-with-non-serializable-data)\");\n          }\n        });\n      }\n      if (!ignoreState) {\n        measureUtils.measureTime(() => {\n          const state = storeAPI.getState();\n          const foundStateNonSerializableValue = findNonSerializableValue(state, \"\", isSerializable, getEntries, ignoredPaths, cache);\n          if (foundStateNonSerializableValue) {\n            const {\n              keyPath,\n              value\n            } = foundStateNonSerializableValue;\n            console.error(`A non-serializable value was detected in the state, in the path: \\`${keyPath}\\`. Value:`, value, `\nTake a look at the reducer(s) handling this action type: ${action.type}.\n(See https://redux.js.org/faq/organizing-state#can-i-put-functions-promises-or-other-non-serializable-items-in-my-store-state)`);\n          }\n        });\n        measureUtils.warnIfExceeded();\n      }\n      return result;\n    };\n  }\n}\n\n// src/getDefaultMiddleware.ts\nfunction isBoolean(x) {\n  return typeof x === \"boolean\";\n}\nvar buildGetDefaultMiddleware = () => function getDefaultMiddleware(options) {\n  const {\n    thunk = true,\n    immutableCheck = true,\n    serializableCheck = true,\n    actionCreatorCheck = true\n  } = options ?? {};\n  let middlewareArray = new Tuple();\n  if (thunk) {\n    if (isBoolean(thunk)) {\n      middlewareArray.push(thunkMiddleware);\n    } else {\n      middlewareArray.push(withExtraArgument(thunk.extraArgument));\n    }\n  }\n  if (process.env.NODE_ENV !== \"production\") {\n    if (immutableCheck) {\n      let immutableOptions = {};\n      if (!isBoolean(immutableCheck)) {\n        immutableOptions = immutableCheck;\n      }\n      middlewareArray.unshift(createImmutableStateInvariantMiddleware(immutableOptions));\n    }\n    if (serializableCheck) {\n      let serializableOptions = {};\n      if (!isBoolean(serializableCheck)) {\n        serializableOptions = serializableCheck;\n      }\n      middlewareArray.push(createSerializableStateInvariantMiddleware(serializableOptions));\n    }\n    if (actionCreatorCheck) {\n      let actionCreatorOptions = {};\n      if (!isBoolean(actionCreatorCheck)) {\n        actionCreatorOptions = actionCreatorCheck;\n      }\n      middlewareArray.unshift(createActionCreatorInvariantMiddleware(actionCreatorOptions));\n    }\n  }\n  return middlewareArray;\n};\n\n// src/autoBatchEnhancer.ts\nvar SHOULD_AUTOBATCH = \"RTK_autoBatch\";\nvar prepareAutoBatched = () => (payload) => ({\n  payload,\n  meta: {\n    [SHOULD_AUTOBATCH]: true\n  }\n});\nvar createQueueWithTimer = (timeout) => {\n  return (notify) => {\n    setTimeout(notify, timeout);\n  };\n};\nvar autoBatchEnhancer = (options = {\n  type: \"raf\"\n}) => (next) => (...args) => {\n  const store = next(...args);\n  let notifying = true;\n  let shouldNotifyAtEndOfTick = false;\n  let notificationQueued = false;\n  const listeners = /* @__PURE__ */ new Set();\n  const queueCallback = options.type === \"tick\" ? queueMicrotask : options.type === \"raf\" ? (\n    // requestAnimationFrame won't exist in SSR environments. Fall back to a vague approximation just to keep from erroring.\n    typeof window !== \"undefined\" && window.requestAnimationFrame ? window.requestAnimationFrame : createQueueWithTimer(10)\n  ) : options.type === \"callback\" ? options.queueNotification : createQueueWithTimer(options.timeout);\n  const notifyListeners = () => {\n    notificationQueued = false;\n    if (shouldNotifyAtEndOfTick) {\n      shouldNotifyAtEndOfTick = false;\n      listeners.forEach((l) => l());\n    }\n  };\n  return Object.assign({}, store, {\n    // Override the base `store.subscribe` method to keep original listeners\n    // from running if we're delaying notifications\n    subscribe(listener2) {\n      const wrappedListener = () => notifying && listener2();\n      const unsubscribe = store.subscribe(wrappedListener);\n      listeners.add(listener2);\n      return () => {\n        unsubscribe();\n        listeners.delete(listener2);\n      };\n    },\n    // Override the base `store.dispatch` method so that we can check actions\n    // for the `shouldAutoBatch` flag and determine if batching is active\n    dispatch(action) {\n      try {\n        notifying = !action?.meta?.[SHOULD_AUTOBATCH];\n        shouldNotifyAtEndOfTick = !notifying;\n        if (shouldNotifyAtEndOfTick) {\n          if (!notificationQueued) {\n            notificationQueued = true;\n            queueCallback(notifyListeners);\n          }\n        }\n        return store.dispatch(action);\n      } finally {\n        notifying = true;\n      }\n    }\n  });\n};\n\n// src/getDefaultEnhancers.ts\nvar buildGetDefaultEnhancers = (middlewareEnhancer) => function getDefaultEnhancers(options) {\n  const {\n    autoBatch = true\n  } = options ?? {};\n  let enhancerArray = new Tuple(middlewareEnhancer);\n  if (autoBatch) {\n    enhancerArray.push(autoBatchEnhancer(typeof autoBatch === \"object\" ? autoBatch : void 0));\n  }\n  return enhancerArray;\n};\n\n// src/configureStore.ts\nfunction configureStore(options) {\n  const getDefaultMiddleware = buildGetDefaultMiddleware();\n  const {\n    reducer = void 0,\n    middleware,\n    devTools = true,\n    duplicateMiddlewareCheck = true,\n    preloadedState = void 0,\n    enhancers = void 0\n  } = options || {};\n  let rootReducer;\n  if (typeof reducer === \"function\") {\n    rootReducer = reducer;\n  } else if (isPlainObject(reducer)) {\n    rootReducer = combineReducers(reducer);\n  } else {\n    throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(1) : \"`reducer` is a required argument, and must be a function or an object of functions that can be passed to combineReducers\");\n  }\n  if (process.env.NODE_ENV !== \"production\" && middleware && typeof middleware !== \"function\") {\n    throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(2) : \"`middleware` field must be a callback\");\n  }\n  let finalMiddleware;\n  if (typeof middleware === \"function\") {\n    finalMiddleware = middleware(getDefaultMiddleware);\n    if (process.env.NODE_ENV !== \"production\" && !Array.isArray(finalMiddleware)) {\n      throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(3) : \"when using a middleware builder function, an array of middleware must be returned\");\n    }\n  } else {\n    finalMiddleware = getDefaultMiddleware();\n  }\n  if (process.env.NODE_ENV !== \"production\" && finalMiddleware.some((item) => typeof item !== \"function\")) {\n    throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(4) : \"each middleware provided to configureStore must be a function\");\n  }\n  if (process.env.NODE_ENV !== \"production\" && duplicateMiddlewareCheck) {\n    let middlewareReferences = /* @__PURE__ */ new Set();\n    finalMiddleware.forEach((middleware2) => {\n      if (middlewareReferences.has(middleware2)) {\n        throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(42) : \"Duplicate middleware references found when creating the store. Ensure that each middleware is only included once.\");\n      }\n      middlewareReferences.add(middleware2);\n    });\n  }\n  let finalCompose = compose;\n  if (devTools) {\n    finalCompose = composeWithDevTools({\n      // Enable capture of stack traces for dispatched Redux actions\n      trace: process.env.NODE_ENV !== \"production\",\n      ...typeof devTools === \"object\" && devTools\n    });\n  }\n  const middlewareEnhancer = applyMiddleware(...finalMiddleware);\n  const getDefaultEnhancers = buildGetDefaultEnhancers(middlewareEnhancer);\n  if (process.env.NODE_ENV !== \"production\" && enhancers && typeof enhancers !== \"function\") {\n    throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(5) : \"`enhancers` field must be a callback\");\n  }\n  let storeEnhancers = typeof enhancers === \"function\" ? enhancers(getDefaultEnhancers) : getDefaultEnhancers();\n  if (process.env.NODE_ENV !== \"production\" && !Array.isArray(storeEnhancers)) {\n    throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(6) : \"`enhancers` callback must return an array\");\n  }\n  if (process.env.NODE_ENV !== \"production\" && storeEnhancers.some((item) => typeof item !== \"function\")) {\n    throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(7) : \"each enhancer provided to configureStore must be a function\");\n  }\n  if (process.env.NODE_ENV !== \"production\" && finalMiddleware.length && !storeEnhancers.includes(middlewareEnhancer)) {\n    console.error(\"middlewares were provided, but middleware enhancer was not included in final enhancers - make sure to call `getDefaultEnhancers`\");\n  }\n  const composedEnhancer = finalCompose(...storeEnhancers);\n  return createStore(rootReducer, preloadedState, composedEnhancer);\n}\n\n// src/mapBuilders.ts\nfunction executeReducerBuilderCallback(builderCallback) {\n  const actionsMap = {};\n  const actionMatchers = [];\n  let defaultCaseReducer;\n  const builder = {\n    addCase(typeOrActionCreator, reducer) {\n      if (process.env.NODE_ENV !== \"production\") {\n        if (actionMatchers.length > 0) {\n          throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(26) : \"`builder.addCase` should only be called before calling `builder.addMatcher`\");\n        }\n        if (defaultCaseReducer) {\n          throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(27) : \"`builder.addCase` should only be called before calling `builder.addDefaultCase`\");\n        }\n      }\n      const type = typeof typeOrActionCreator === \"string\" ? typeOrActionCreator : typeOrActionCreator.type;\n      if (!type) {\n        throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(28) : \"`builder.addCase` cannot be called with an empty action type\");\n      }\n      if (type in actionsMap) {\n        throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(29) : `\\`builder.addCase\\` cannot be called with two reducers for the same action type '${type}'`);\n      }\n      actionsMap[type] = reducer;\n      return builder;\n    },\n    addAsyncThunk(asyncThunk, reducers) {\n      if (process.env.NODE_ENV !== \"production\") {\n        if (defaultCaseReducer) {\n          throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(43) : \"`builder.addAsyncThunk` should only be called before calling `builder.addDefaultCase`\");\n        }\n      }\n      if (reducers.pending) actionsMap[asyncThunk.pending.type] = reducers.pending;\n      if (reducers.rejected) actionsMap[asyncThunk.rejected.type] = reducers.rejected;\n      if (reducers.fulfilled) actionsMap[asyncThunk.fulfilled.type] = reducers.fulfilled;\n      if (reducers.settled) actionMatchers.push({\n        matcher: asyncThunk.settled,\n        reducer: reducers.settled\n      });\n      return builder;\n    },\n    addMatcher(matcher, reducer) {\n      if (process.env.NODE_ENV !== \"production\") {\n        if (defaultCaseReducer) {\n          throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(30) : \"`builder.addMatcher` should only be called before calling `builder.addDefaultCase`\");\n        }\n      }\n      actionMatchers.push({\n        matcher,\n        reducer\n      });\n      return builder;\n    },\n    addDefaultCase(reducer) {\n      if (process.env.NODE_ENV !== \"production\") {\n        if (defaultCaseReducer) {\n          throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(31) : \"`builder.addDefaultCase` can only be called once\");\n        }\n      }\n      defaultCaseReducer = reducer;\n      return builder;\n    }\n  };\n  builderCallback(builder);\n  return [actionsMap, actionMatchers, defaultCaseReducer];\n}\n\n// src/createReducer.ts\nfunction isStateFunction(x) {\n  return typeof x === \"function\";\n}\nfunction createReducer(initialState, mapOrBuilderCallback) {\n  if (process.env.NODE_ENV !== \"production\") {\n    if (typeof mapOrBuilderCallback === \"object\") {\n      throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(8) : \"The object notation for `createReducer` has been removed. Please use the 'builder callback' notation instead: https://redux-toolkit.js.org/api/createReducer\");\n    }\n  }\n  let [actionsMap, finalActionMatchers, finalDefaultCaseReducer] = executeReducerBuilderCallback(mapOrBuilderCallback);\n  let getInitialState;\n  if (isStateFunction(initialState)) {\n    getInitialState = () => freezeDraftable(initialState());\n  } else {\n    const frozenInitialState = freezeDraftable(initialState);\n    getInitialState = () => frozenInitialState;\n  }\n  function reducer(state = getInitialState(), action) {\n    let caseReducers = [actionsMap[action.type], ...finalActionMatchers.filter(({\n      matcher\n    }) => matcher(action)).map(({\n      reducer: reducer2\n    }) => reducer2)];\n    if (caseReducers.filter((cr) => !!cr).length === 0) {\n      caseReducers = [finalDefaultCaseReducer];\n    }\n    return caseReducers.reduce((previousState, caseReducer) => {\n      if (caseReducer) {\n        if (isDraft(previousState)) {\n          const draft = previousState;\n          const result = caseReducer(draft, action);\n          if (result === void 0) {\n            return previousState;\n          }\n          return result;\n        } else if (!isDraftable(previousState)) {\n          const result = caseReducer(previousState, action);\n          if (result === void 0) {\n            if (previousState === null) {\n              return previousState;\n            }\n            throw Error(\"A case reducer on a non-draftable value must not return undefined\");\n          }\n          return result;\n        } else {\n          return produce(previousState, (draft) => {\n            return caseReducer(draft, action);\n          });\n        }\n      }\n      return previousState;\n    }, state);\n  }\n  reducer.getInitialState = getInitialState;\n  return reducer;\n}\n\n// src/matchers.ts\nvar matches = (matcher, action) => {\n  if (hasMatchFunction(matcher)) {\n    return matcher.match(action);\n  } else {\n    return matcher(action);\n  }\n};\nfunction isAnyOf(...matchers) {\n  return (action) => {\n    return matchers.some((matcher) => matches(matcher, action));\n  };\n}\nfunction isAllOf(...matchers) {\n  return (action) => {\n    return matchers.every((matcher) => matches(matcher, action));\n  };\n}\nfunction hasExpectedRequestMetadata(action, validStatus) {\n  if (!action || !action.meta) return false;\n  const hasValidRequestId = typeof action.meta.requestId === \"string\";\n  const hasValidRequestStatus = validStatus.indexOf(action.meta.requestStatus) > -1;\n  return hasValidRequestId && hasValidRequestStatus;\n}\nfunction isAsyncThunkArray(a) {\n  return typeof a[0] === \"function\" && \"pending\" in a[0] && \"fulfilled\" in a[0] && \"rejected\" in a[0];\n}\nfunction isPending(...asyncThunks) {\n  if (asyncThunks.length === 0) {\n    return (action) => hasExpectedRequestMetadata(action, [\"pending\"]);\n  }\n  if (!isAsyncThunkArray(asyncThunks)) {\n    return isPending()(asyncThunks[0]);\n  }\n  return isAnyOf(...asyncThunks.map((asyncThunk) => asyncThunk.pending));\n}\nfunction isRejected(...asyncThunks) {\n  if (asyncThunks.length === 0) {\n    return (action) => hasExpectedRequestMetadata(action, [\"rejected\"]);\n  }\n  if (!isAsyncThunkArray(asyncThunks)) {\n    return isRejected()(asyncThunks[0]);\n  }\n  return isAnyOf(...asyncThunks.map((asyncThunk) => asyncThunk.rejected));\n}\nfunction isRejectedWithValue(...asyncThunks) {\n  const hasFlag = (action) => {\n    return action && action.meta && action.meta.rejectedWithValue;\n  };\n  if (asyncThunks.length === 0) {\n    return isAllOf(isRejected(...asyncThunks), hasFlag);\n  }\n  if (!isAsyncThunkArray(asyncThunks)) {\n    return isRejectedWithValue()(asyncThunks[0]);\n  }\n  return isAllOf(isRejected(...asyncThunks), hasFlag);\n}\nfunction isFulfilled(...asyncThunks) {\n  if (asyncThunks.length === 0) {\n    return (action) => hasExpectedRequestMetadata(action, [\"fulfilled\"]);\n  }\n  if (!isAsyncThunkArray(asyncThunks)) {\n    return isFulfilled()(asyncThunks[0]);\n  }\n  return isAnyOf(...asyncThunks.map((asyncThunk) => asyncThunk.fulfilled));\n}\nfunction isAsyncThunkAction(...asyncThunks) {\n  if (asyncThunks.length === 0) {\n    return (action) => hasExpectedRequestMetadata(action, [\"pending\", \"fulfilled\", \"rejected\"]);\n  }\n  if (!isAsyncThunkArray(asyncThunks)) {\n    return isAsyncThunkAction()(asyncThunks[0]);\n  }\n  return isAnyOf(...asyncThunks.flatMap((asyncThunk) => [asyncThunk.pending, asyncThunk.rejected, asyncThunk.fulfilled]));\n}\n\n// src/nanoid.ts\nvar urlAlphabet = \"ModuleSymbhasOwnPr-0123456789ABCDEFGHNRVfgctiUvz_KqYTJkLxpZXIjQW\";\nvar nanoid = (size = 21) => {\n  let id = \"\";\n  let i = size;\n  while (i--) {\n    id += urlAlphabet[Math.random() * 64 | 0];\n  }\n  return id;\n};\n\n// src/createAsyncThunk.ts\nvar commonProperties = [\"name\", \"message\", \"stack\", \"code\"];\nvar RejectWithValue = class {\n  constructor(payload, meta) {\n    this.payload = payload;\n    this.meta = meta;\n  }\n  /*\n  type-only property to distinguish between RejectWithValue and FulfillWithMeta\n  does not exist at runtime\n  */\n  _type;\n};\nvar FulfillWithMeta = class {\n  constructor(payload, meta) {\n    this.payload = payload;\n    this.meta = meta;\n  }\n  /*\n  type-only property to distinguish between RejectWithValue and FulfillWithMeta\n  does not exist at runtime\n  */\n  _type;\n};\nvar miniSerializeError = (value) => {\n  if (typeof value === \"object\" && value !== null) {\n    const simpleError = {};\n    for (const property of commonProperties) {\n      if (typeof value[property] === \"string\") {\n        simpleError[property] = value[property];\n      }\n    }\n    return simpleError;\n  }\n  return {\n    message: String(value)\n  };\n};\nvar externalAbortMessage = \"External signal was aborted\";\nvar createAsyncThunk = /* @__PURE__ */ (() => {\n  function createAsyncThunk2(typePrefix, payloadCreator, options) {\n    const fulfilled = createAction(typePrefix + \"/fulfilled\", (payload, requestId, arg, meta) => ({\n      payload,\n      meta: {\n        ...meta || {},\n        arg,\n        requestId,\n        requestStatus: \"fulfilled\"\n      }\n    }));\n    const pending = createAction(typePrefix + \"/pending\", (requestId, arg, meta) => ({\n      payload: void 0,\n      meta: {\n        ...meta || {},\n        arg,\n        requestId,\n        requestStatus: \"pending\"\n      }\n    }));\n    const rejected = createAction(typePrefix + \"/rejected\", (error, requestId, arg, payload, meta) => ({\n      payload,\n      error: (options && options.serializeError || miniSerializeError)(error || \"Rejected\"),\n      meta: {\n        ...meta || {},\n        arg,\n        requestId,\n        rejectedWithValue: !!payload,\n        requestStatus: \"rejected\",\n        aborted: error?.name === \"AbortError\",\n        condition: error?.name === \"ConditionError\"\n      }\n    }));\n    function actionCreator(arg, {\n      signal\n    } = {}) {\n      return (dispatch, getState, extra) => {\n        const requestId = options?.idGenerator ? options.idGenerator(arg) : nanoid();\n        const abortController = new AbortController();\n        let abortHandler;\n        let abortReason;\n        function abort(reason) {\n          abortReason = reason;\n          abortController.abort();\n        }\n        if (signal) {\n          if (signal.aborted) {\n            abort(externalAbortMessage);\n          } else {\n            signal.addEventListener(\"abort\", () => abort(externalAbortMessage), {\n              once: true\n            });\n          }\n        }\n        const promise = async function() {\n          let finalAction;\n          try {\n            let conditionResult = options?.condition?.(arg, {\n              getState,\n              extra\n            });\n            if (isThenable(conditionResult)) {\n              conditionResult = await conditionResult;\n            }\n            if (conditionResult === false || abortController.signal.aborted) {\n              throw {\n                name: \"ConditionError\",\n                message: \"Aborted due to condition callback returning false.\"\n              };\n            }\n            const abortedPromise = new Promise((_, reject) => {\n              abortHandler = () => {\n                reject({\n                  name: \"AbortError\",\n                  message: abortReason || \"Aborted\"\n                });\n              };\n              abortController.signal.addEventListener(\"abort\", abortHandler, {\n                once: true\n              });\n            });\n            dispatch(pending(requestId, arg, options?.getPendingMeta?.({\n              requestId,\n              arg\n            }, {\n              getState,\n              extra\n            })));\n            finalAction = await Promise.race([abortedPromise, Promise.resolve(payloadCreator(arg, {\n              dispatch,\n              getState,\n              extra,\n              requestId,\n              signal: abortController.signal,\n              abort,\n              rejectWithValue: (value, meta) => {\n                return new RejectWithValue(value, meta);\n              },\n              fulfillWithValue: (value, meta) => {\n                return new FulfillWithMeta(value, meta);\n              }\n            })).then((result) => {\n              if (result instanceof RejectWithValue) {\n                throw result;\n              }\n              if (result instanceof FulfillWithMeta) {\n                return fulfilled(result.payload, requestId, arg, result.meta);\n              }\n              return fulfilled(result, requestId, arg);\n            })]);\n          } catch (err) {\n            finalAction = err instanceof RejectWithValue ? rejected(null, requestId, arg, err.payload, err.meta) : rejected(err, requestId, arg);\n          } finally {\n            if (abortHandler) {\n              abortController.signal.removeEventListener(\"abort\", abortHandler);\n            }\n          }\n          const skipDispatch = options && !options.dispatchConditionRejection && rejected.match(finalAction) && finalAction.meta.condition;\n          if (!skipDispatch) {\n            dispatch(finalAction);\n          }\n          return finalAction;\n        }();\n        return Object.assign(promise, {\n          abort,\n          requestId,\n          arg,\n          unwrap() {\n            return promise.then(unwrapResult);\n          }\n        });\n      };\n    }\n    return Object.assign(actionCreator, {\n      pending,\n      rejected,\n      fulfilled,\n      settled: isAnyOf(rejected, fulfilled),\n      typePrefix\n    });\n  }\n  createAsyncThunk2.withTypes = () => createAsyncThunk2;\n  return createAsyncThunk2;\n})();\nfunction unwrapResult(action) {\n  if (action.meta && action.meta.rejectedWithValue) {\n    throw action.payload;\n  }\n  if (action.error) {\n    throw action.error;\n  }\n  return action.payload;\n}\nfunction isThenable(value) {\n  return value !== null && typeof value === \"object\" && typeof value.then === \"function\";\n}\n\n// src/createSlice.ts\nvar asyncThunkSymbol = /* @__PURE__ */ Symbol.for(\"rtk-slice-createasyncthunk\");\nvar asyncThunkCreator = {\n  [asyncThunkSymbol]: createAsyncThunk\n};\nvar ReducerType = /* @__PURE__ */ ((ReducerType2) => {\n  ReducerType2[\"reducer\"] = \"reducer\";\n  ReducerType2[\"reducerWithPrepare\"] = \"reducerWithPrepare\";\n  ReducerType2[\"asyncThunk\"] = \"asyncThunk\";\n  return ReducerType2;\n})(ReducerType || {});\nfunction getType(slice, actionKey) {\n  return `${slice}/${actionKey}`;\n}\nfunction buildCreateSlice({\n  creators\n} = {}) {\n  const cAT = creators?.asyncThunk?.[asyncThunkSymbol];\n  return function createSlice2(options) {\n    const {\n      name,\n      reducerPath = name\n    } = options;\n    if (!name) {\n      throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(11) : \"`name` is a required option for createSlice\");\n    }\n    if (typeof process !== \"undefined\" && process.env.NODE_ENV === \"development\") {\n      if (options.initialState === void 0) {\n        console.error(\"You must provide an `initialState` value that is not `undefined`. You may have misspelled `initialState`\");\n      }\n    }\n    const reducers = (typeof options.reducers === \"function\" ? options.reducers(buildReducerCreators()) : options.reducers) || {};\n    const reducerNames = Object.keys(reducers);\n    const context = {\n      sliceCaseReducersByName: {},\n      sliceCaseReducersByType: {},\n      actionCreators: {},\n      sliceMatchers: []\n    };\n    const contextMethods = {\n      addCase(typeOrActionCreator, reducer2) {\n        const type = typeof typeOrActionCreator === \"string\" ? typeOrActionCreator : typeOrActionCreator.type;\n        if (!type) {\n          throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(12) : \"`context.addCase` cannot be called with an empty action type\");\n        }\n        if (type in context.sliceCaseReducersByType) {\n          throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(13) : \"`context.addCase` cannot be called with two reducers for the same action type: \" + type);\n        }\n        context.sliceCaseReducersByType[type] = reducer2;\n        return contextMethods;\n      },\n      addMatcher(matcher, reducer2) {\n        context.sliceMatchers.push({\n          matcher,\n          reducer: reducer2\n        });\n        return contextMethods;\n      },\n      exposeAction(name2, actionCreator) {\n        context.actionCreators[name2] = actionCreator;\n        return contextMethods;\n      },\n      exposeCaseReducer(name2, reducer2) {\n        context.sliceCaseReducersByName[name2] = reducer2;\n        return contextMethods;\n      }\n    };\n    reducerNames.forEach((reducerName) => {\n      const reducerDefinition = reducers[reducerName];\n      const reducerDetails = {\n        reducerName,\n        type: getType(name, reducerName),\n        createNotation: typeof options.reducers === \"function\"\n      };\n      if (isAsyncThunkSliceReducerDefinition(reducerDefinition)) {\n        handleThunkCaseReducerDefinition(reducerDetails, reducerDefinition, contextMethods, cAT);\n      } else {\n        handleNormalReducerDefinition(reducerDetails, reducerDefinition, contextMethods);\n      }\n    });\n    function buildReducer() {\n      if (process.env.NODE_ENV !== \"production\") {\n        if (typeof options.extraReducers === \"object\") {\n          throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(14) : \"The object notation for `createSlice.extraReducers` has been removed. Please use the 'builder callback' notation instead: https://redux-toolkit.js.org/api/createSlice\");\n        }\n      }\n      const [extraReducers = {}, actionMatchers = [], defaultCaseReducer = void 0] = typeof options.extraReducers === \"function\" ? executeReducerBuilderCallback(options.extraReducers) : [options.extraReducers];\n      const finalCaseReducers = {\n        ...extraReducers,\n        ...context.sliceCaseReducersByType\n      };\n      return createReducer(options.initialState, (builder) => {\n        for (let key in finalCaseReducers) {\n          builder.addCase(key, finalCaseReducers[key]);\n        }\n        for (let sM of context.sliceMatchers) {\n          builder.addMatcher(sM.matcher, sM.reducer);\n        }\n        for (let m of actionMatchers) {\n          builder.addMatcher(m.matcher, m.reducer);\n        }\n        if (defaultCaseReducer) {\n          builder.addDefaultCase(defaultCaseReducer);\n        }\n      });\n    }\n    const selectSelf = (state) => state;\n    const injectedSelectorCache = /* @__PURE__ */ new Map();\n    const injectedStateCache = /* @__PURE__ */ new WeakMap();\n    let _reducer;\n    function reducer(state, action) {\n      if (!_reducer) _reducer = buildReducer();\n      return _reducer(state, action);\n    }\n    function getInitialState() {\n      if (!_reducer) _reducer = buildReducer();\n      return _reducer.getInitialState();\n    }\n    function makeSelectorProps(reducerPath2, injected = false) {\n      function selectSlice(state) {\n        let sliceState = state[reducerPath2];\n        if (typeof sliceState === \"undefined\") {\n          if (injected) {\n            sliceState = getOrInsertComputed(injectedStateCache, selectSlice, getInitialState);\n          } else if (process.env.NODE_ENV !== \"production\") {\n            throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(15) : \"selectSlice returned undefined for an uninjected slice reducer\");\n          }\n        }\n        return sliceState;\n      }\n      function getSelectors(selectState = selectSelf) {\n        const selectorCache = getOrInsertComputed(injectedSelectorCache, injected, () => /* @__PURE__ */ new WeakMap());\n        return getOrInsertComputed(selectorCache, selectState, () => {\n          const map = {};\n          for (const [name2, selector] of Object.entries(options.selectors ?? {})) {\n            map[name2] = wrapSelector(selector, selectState, () => getOrInsertComputed(injectedStateCache, selectState, getInitialState), injected);\n          }\n          return map;\n        });\n      }\n      return {\n        reducerPath: reducerPath2,\n        getSelectors,\n        get selectors() {\n          return getSelectors(selectSlice);\n        },\n        selectSlice\n      };\n    }\n    const slice = {\n      name,\n      reducer,\n      actions: context.actionCreators,\n      caseReducers: context.sliceCaseReducersByName,\n      getInitialState,\n      ...makeSelectorProps(reducerPath),\n      injectInto(injectable, {\n        reducerPath: pathOpt,\n        ...config\n      } = {}) {\n        const newReducerPath = pathOpt ?? reducerPath;\n        injectable.inject({\n          reducerPath: newReducerPath,\n          reducer\n        }, config);\n        return {\n          ...slice,\n          ...makeSelectorProps(newReducerPath, true)\n        };\n      }\n    };\n    return slice;\n  };\n}\nfunction wrapSelector(selector, selectState, getInitialState, injected) {\n  function wrapper(rootState, ...args) {\n    let sliceState = selectState(rootState);\n    if (typeof sliceState === \"undefined\") {\n      if (injected) {\n        sliceState = getInitialState();\n      } else if (process.env.NODE_ENV !== \"production\") {\n        throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(16) : \"selectState returned undefined for an uninjected slice reducer\");\n      }\n    }\n    return selector(sliceState, ...args);\n  }\n  wrapper.unwrapped = selector;\n  return wrapper;\n}\nvar createSlice = /* @__PURE__ */ buildCreateSlice();\nfunction buildReducerCreators() {\n  function asyncThunk(payloadCreator, config) {\n    return {\n      _reducerDefinitionType: \"asyncThunk\" /* asyncThunk */,\n      payloadCreator,\n      ...config\n    };\n  }\n  asyncThunk.withTypes = () => asyncThunk;\n  return {\n    reducer(caseReducer) {\n      return Object.assign({\n        // hack so the wrapping function has the same name as the original\n        // we need to create a wrapper so the `reducerDefinitionType` is not assigned to the original\n        [caseReducer.name](...args) {\n          return caseReducer(...args);\n        }\n      }[caseReducer.name], {\n        _reducerDefinitionType: \"reducer\" /* reducer */\n      });\n    },\n    preparedReducer(prepare, reducer) {\n      return {\n        _reducerDefinitionType: \"reducerWithPrepare\" /* reducerWithPrepare */,\n        prepare,\n        reducer\n      };\n    },\n    asyncThunk\n  };\n}\nfunction handleNormalReducerDefinition({\n  type,\n  reducerName,\n  createNotation\n}, maybeReducerWithPrepare, context) {\n  let caseReducer;\n  let prepareCallback;\n  if (\"reducer\" in maybeReducerWithPrepare) {\n    if (createNotation && !isCaseReducerWithPrepareDefinition(maybeReducerWithPrepare)) {\n      throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(17) : \"Please use the `create.preparedReducer` notation for prepared action creators with the `create` notation.\");\n    }\n    caseReducer = maybeReducerWithPrepare.reducer;\n    prepareCallback = maybeReducerWithPrepare.prepare;\n  } else {\n    caseReducer = maybeReducerWithPrepare;\n  }\n  context.addCase(type, caseReducer).exposeCaseReducer(reducerName, caseReducer).exposeAction(reducerName, prepareCallback ? createAction(type, prepareCallback) : createAction(type));\n}\nfunction isAsyncThunkSliceReducerDefinition(reducerDefinition) {\n  return reducerDefinition._reducerDefinitionType === \"asyncThunk\" /* asyncThunk */;\n}\nfunction isCaseReducerWithPrepareDefinition(reducerDefinition) {\n  return reducerDefinition._reducerDefinitionType === \"reducerWithPrepare\" /* reducerWithPrepare */;\n}\nfunction handleThunkCaseReducerDefinition({\n  type,\n  reducerName\n}, reducerDefinition, context, cAT) {\n  if (!cAT) {\n    throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(18) : \"Cannot use `create.asyncThunk` in the built-in `createSlice`. Use `buildCreateSlice({ creators: { asyncThunk: asyncThunkCreator } })` to create a customised version of `createSlice`.\");\n  }\n  const {\n    payloadCreator,\n    fulfilled,\n    pending,\n    rejected,\n    settled,\n    options\n  } = reducerDefinition;\n  const thunk = cAT(type, payloadCreator, options);\n  context.exposeAction(reducerName, thunk);\n  if (fulfilled) {\n    context.addCase(thunk.fulfilled, fulfilled);\n  }\n  if (pending) {\n    context.addCase(thunk.pending, pending);\n  }\n  if (rejected) {\n    context.addCase(thunk.rejected, rejected);\n  }\n  if (settled) {\n    context.addMatcher(thunk.settled, settled);\n  }\n  context.exposeCaseReducer(reducerName, {\n    fulfilled: fulfilled || noop,\n    pending: pending || noop,\n    rejected: rejected || noop,\n    settled: settled || noop\n  });\n}\nfunction noop() {\n}\n\n// src/entities/entity_state.ts\nfunction getInitialEntityState() {\n  return {\n    ids: [],\n    entities: {}\n  };\n}\nfunction createInitialStateFactory(stateAdapter) {\n  function getInitialState(additionalState = {}, entities) {\n    const state = Object.assign(getInitialEntityState(), additionalState);\n    return entities ? stateAdapter.setAll(state, entities) : state;\n  }\n  return {\n    getInitialState\n  };\n}\n\n// src/entities/state_selectors.ts\nfunction createSelectorsFactory() {\n  function getSelectors(selectState, options = {}) {\n    const {\n      createSelector: createSelector2 = createDraftSafeSelector\n    } = options;\n    const selectIds = (state) => state.ids;\n    const selectEntities = (state) => state.entities;\n    const selectAll = createSelector2(selectIds, selectEntities, (ids, entities) => ids.map((id) => entities[id]));\n    const selectId = (_, id) => id;\n    const selectById = (entities, id) => entities[id];\n    const selectTotal = createSelector2(selectIds, (ids) => ids.length);\n    if (!selectState) {\n      return {\n        selectIds,\n        selectEntities,\n        selectAll,\n        selectTotal,\n        selectById: createSelector2(selectEntities, selectId, selectById)\n      };\n    }\n    const selectGlobalizedEntities = createSelector2(selectState, selectEntities);\n    return {\n      selectIds: createSelector2(selectState, selectIds),\n      selectEntities: selectGlobalizedEntities,\n      selectAll: createSelector2(selectState, selectAll),\n      selectTotal: createSelector2(selectState, selectTotal),\n      selectById: createSelector2(selectGlobalizedEntities, selectId, selectById)\n    };\n  }\n  return {\n    getSelectors\n  };\n}\n\n// src/entities/state_adapter.ts\nvar isDraftTyped = isDraft;\nfunction createSingleArgumentStateOperator(mutator) {\n  const operator = createStateOperator((_, state) => mutator(state));\n  return function operation(state) {\n    return operator(state, void 0);\n  };\n}\nfunction createStateOperator(mutator) {\n  return function operation(state, arg) {\n    function isPayloadActionArgument(arg2) {\n      return isFSA(arg2);\n    }\n    const runMutator = (draft) => {\n      if (isPayloadActionArgument(arg)) {\n        mutator(arg.payload, draft);\n      } else {\n        mutator(arg, draft);\n      }\n    };\n    if (isDraftTyped(state)) {\n      runMutator(state);\n      return state;\n    }\n    return produce(state, runMutator);\n  };\n}\n\n// src/entities/utils.ts\nfunction selectIdValue(entity, selectId) {\n  const key = selectId(entity);\n  if (process.env.NODE_ENV !== \"production\" && key === void 0) {\n    console.warn(\"The entity passed to the `selectId` implementation returned undefined.\", \"You should probably provide your own `selectId` implementation.\", \"The entity that was passed:\", entity, \"The `selectId` implementation:\", selectId.toString());\n  }\n  return key;\n}\nfunction ensureEntitiesArray(entities) {\n  if (!Array.isArray(entities)) {\n    entities = Object.values(entities);\n  }\n  return entities;\n}\nfunction getCurrent(value) {\n  return isDraft(value) ? current(value) : value;\n}\nfunction splitAddedUpdatedEntities(newEntities, selectId, state) {\n  newEntities = ensureEntitiesArray(newEntities);\n  const existingIdsArray = getCurrent(state.ids);\n  const existingIds = new Set(existingIdsArray);\n  const added = [];\n  const addedIds = /* @__PURE__ */ new Set([]);\n  const updated = [];\n  for (const entity of newEntities) {\n    const id = selectIdValue(entity, selectId);\n    if (existingIds.has(id) || addedIds.has(id)) {\n      updated.push({\n        id,\n        changes: entity\n      });\n    } else {\n      addedIds.add(id);\n      added.push(entity);\n    }\n  }\n  return [added, updated, existingIdsArray];\n}\n\n// src/entities/unsorted_state_adapter.ts\nfunction createUnsortedStateAdapter(selectId) {\n  function addOneMutably(entity, state) {\n    const key = selectIdValue(entity, selectId);\n    if (key in state.entities) {\n      return;\n    }\n    state.ids.push(key);\n    state.entities[key] = entity;\n  }\n  function addManyMutably(newEntities, state) {\n    newEntities = ensureEntitiesArray(newEntities);\n    for (const entity of newEntities) {\n      addOneMutably(entity, state);\n    }\n  }\n  function setOneMutably(entity, state) {\n    const key = selectIdValue(entity, selectId);\n    if (!(key in state.entities)) {\n      state.ids.push(key);\n    }\n    ;\n    state.entities[key] = entity;\n  }\n  function setManyMutably(newEntities, state) {\n    newEntities = ensureEntitiesArray(newEntities);\n    for (const entity of newEntities) {\n      setOneMutably(entity, state);\n    }\n  }\n  function setAllMutably(newEntities, state) {\n    newEntities = ensureEntitiesArray(newEntities);\n    state.ids = [];\n    state.entities = {};\n    addManyMutably(newEntities, state);\n  }\n  function removeOneMutably(key, state) {\n    return removeManyMutably([key], state);\n  }\n  function removeManyMutably(keys, state) {\n    let didMutate = false;\n    keys.forEach((key) => {\n      if (key in state.entities) {\n        delete state.entities[key];\n        didMutate = true;\n      }\n    });\n    if (didMutate) {\n      state.ids = state.ids.filter((id) => id in state.entities);\n    }\n  }\n  function removeAllMutably(state) {\n    Object.assign(state, {\n      ids: [],\n      entities: {}\n    });\n  }\n  function takeNewKey(keys, update, state) {\n    const original3 = state.entities[update.id];\n    if (original3 === void 0) {\n      return false;\n    }\n    const updated = Object.assign({}, original3, update.changes);\n    const newKey = selectIdValue(updated, selectId);\n    const hasNewKey = newKey !== update.id;\n    if (hasNewKey) {\n      keys[update.id] = newKey;\n      delete state.entities[update.id];\n    }\n    ;\n    state.entities[newKey] = updated;\n    return hasNewKey;\n  }\n  function updateOneMutably(update, state) {\n    return updateManyMutably([update], state);\n  }\n  function updateManyMutably(updates, state) {\n    const newKeys = {};\n    const updatesPerEntity = {};\n    updates.forEach((update) => {\n      if (update.id in state.entities) {\n        updatesPerEntity[update.id] = {\n          id: update.id,\n          // Spreads ignore falsy values, so this works even if there isn't\n          // an existing update already at this key\n          changes: {\n            ...updatesPerEntity[update.id]?.changes,\n            ...update.changes\n          }\n        };\n      }\n    });\n    updates = Object.values(updatesPerEntity);\n    const didMutateEntities = updates.length > 0;\n    if (didMutateEntities) {\n      const didMutateIds = updates.filter((update) => takeNewKey(newKeys, update, state)).length > 0;\n      if (didMutateIds) {\n        state.ids = Object.values(state.entities).map((e) => selectIdValue(e, selectId));\n      }\n    }\n  }\n  function upsertOneMutably(entity, state) {\n    return upsertManyMutably([entity], state);\n  }\n  function upsertManyMutably(newEntities, state) {\n    const [added, updated] = splitAddedUpdatedEntities(newEntities, selectId, state);\n    addManyMutably(added, state);\n    updateManyMutably(updated, state);\n  }\n  return {\n    removeAll: createSingleArgumentStateOperator(removeAllMutably),\n    addOne: createStateOperator(addOneMutably),\n    addMany: createStateOperator(addManyMutably),\n    setOne: createStateOperator(setOneMutably),\n    setMany: createStateOperator(setManyMutably),\n    setAll: createStateOperator(setAllMutably),\n    updateOne: createStateOperator(updateOneMutably),\n    updateMany: createStateOperator(updateManyMutably),\n    upsertOne: createStateOperator(upsertOneMutably),\n    upsertMany: createStateOperator(upsertManyMutably),\n    removeOne: createStateOperator(removeOneMutably),\n    removeMany: createStateOperator(removeManyMutably)\n  };\n}\n\n// src/entities/sorted_state_adapter.ts\nfunction findInsertIndex(sortedItems, item, comparisonFunction) {\n  let lowIndex = 0;\n  let highIndex = sortedItems.length;\n  while (lowIndex < highIndex) {\n    let middleIndex = lowIndex + highIndex >>> 1;\n    const currentItem = sortedItems[middleIndex];\n    const res = comparisonFunction(item, currentItem);\n    if (res >= 0) {\n      lowIndex = middleIndex + 1;\n    } else {\n      highIndex = middleIndex;\n    }\n  }\n  return lowIndex;\n}\nfunction insert(sortedItems, item, comparisonFunction) {\n  const insertAtIndex = findInsertIndex(sortedItems, item, comparisonFunction);\n  sortedItems.splice(insertAtIndex, 0, item);\n  return sortedItems;\n}\nfunction createSortedStateAdapter(selectId, comparer) {\n  const {\n    removeOne,\n    removeMany,\n    removeAll\n  } = createUnsortedStateAdapter(selectId);\n  function addOneMutably(entity, state) {\n    return addManyMutably([entity], state);\n  }\n  function addManyMutably(newEntities, state, existingIds) {\n    newEntities = ensureEntitiesArray(newEntities);\n    const existingKeys = new Set(existingIds ?? getCurrent(state.ids));\n    const addedKeys = /* @__PURE__ */ new Set();\n    const models = newEntities.filter((model) => {\n      const modelId = selectIdValue(model, selectId);\n      const notAdded = !addedKeys.has(modelId);\n      if (notAdded) addedKeys.add(modelId);\n      return !existingKeys.has(modelId) && notAdded;\n    });\n    if (models.length !== 0) {\n      mergeFunction(state, models);\n    }\n  }\n  function setOneMutably(entity, state) {\n    return setManyMutably([entity], state);\n  }\n  function setManyMutably(newEntities, state) {\n    let deduplicatedEntities = {};\n    newEntities = ensureEntitiesArray(newEntities);\n    if (newEntities.length !== 0) {\n      for (const item of newEntities) {\n        const entityId = selectId(item);\n        deduplicatedEntities[entityId] = item;\n        delete state.entities[entityId];\n      }\n      newEntities = ensureEntitiesArray(deduplicatedEntities);\n      mergeFunction(state, newEntities);\n    }\n  }\n  function setAllMutably(newEntities, state) {\n    newEntities = ensureEntitiesArray(newEntities);\n    state.entities = {};\n    state.ids = [];\n    addManyMutably(newEntities, state, []);\n  }\n  function updateOneMutably(update, state) {\n    return updateManyMutably([update], state);\n  }\n  function updateManyMutably(updates, state) {\n    let appliedUpdates = false;\n    let replacedIds = false;\n    for (let update of updates) {\n      const entity = state.entities[update.id];\n      if (!entity) {\n        continue;\n      }\n      appliedUpdates = true;\n      Object.assign(entity, update.changes);\n      const newId = selectId(entity);\n      if (update.id !== newId) {\n        replacedIds = true;\n        delete state.entities[update.id];\n        const oldIndex = state.ids.indexOf(update.id);\n        state.ids[oldIndex] = newId;\n        state.entities[newId] = entity;\n      }\n    }\n    if (appliedUpdates) {\n      mergeFunction(state, [], appliedUpdates, replacedIds);\n    }\n  }\n  function upsertOneMutably(entity, state) {\n    return upsertManyMutably([entity], state);\n  }\n  function upsertManyMutably(newEntities, state) {\n    const [added, updated, existingIdsArray] = splitAddedUpdatedEntities(newEntities, selectId, state);\n    if (added.length) {\n      addManyMutably(added, state, existingIdsArray);\n    }\n    if (updated.length) {\n      updateManyMutably(updated, state);\n    }\n  }\n  function areArraysEqual(a, b) {\n    if (a.length !== b.length) {\n      return false;\n    }\n    for (let i = 0; i < a.length; i++) {\n      if (a[i] === b[i]) {\n        continue;\n      }\n      return false;\n    }\n    return true;\n  }\n  const mergeFunction = (state, addedItems, appliedUpdates, replacedIds) => {\n    const currentEntities = getCurrent(state.entities);\n    const currentIds = getCurrent(state.ids);\n    const stateEntities = state.entities;\n    let ids = currentIds;\n    if (replacedIds) {\n      ids = new Set(currentIds);\n    }\n    let sortedEntities = [];\n    for (const id of ids) {\n      const entity = currentEntities[id];\n      if (entity) {\n        sortedEntities.push(entity);\n      }\n    }\n    const wasPreviouslyEmpty = sortedEntities.length === 0;\n    for (const item of addedItems) {\n      stateEntities[selectId(item)] = item;\n      if (!wasPreviouslyEmpty) {\n        insert(sortedEntities, item, comparer);\n      }\n    }\n    if (wasPreviouslyEmpty) {\n      sortedEntities = addedItems.slice().sort(comparer);\n    } else if (appliedUpdates) {\n      sortedEntities.sort(comparer);\n    }\n    const newSortedIds = sortedEntities.map(selectId);\n    if (!areArraysEqual(currentIds, newSortedIds)) {\n      state.ids = newSortedIds;\n    }\n  };\n  return {\n    removeOne,\n    removeMany,\n    removeAll,\n    addOne: createStateOperator(addOneMutably),\n    updateOne: createStateOperator(updateOneMutably),\n    upsertOne: createStateOperator(upsertOneMutably),\n    setOne: createStateOperator(setOneMutably),\n    setMany: createStateOperator(setManyMutably),\n    setAll: createStateOperator(setAllMutably),\n    addMany: createStateOperator(addManyMutably),\n    updateMany: createStateOperator(updateManyMutably),\n    upsertMany: createStateOperator(upsertManyMutably)\n  };\n}\n\n// src/entities/create_adapter.ts\nfunction createEntityAdapter(options = {}) {\n  const {\n    selectId,\n    sortComparer\n  } = {\n    sortComparer: false,\n    selectId: (instance) => instance.id,\n    ...options\n  };\n  const stateAdapter = sortComparer ? createSortedStateAdapter(selectId, sortComparer) : createUnsortedStateAdapter(selectId);\n  const stateFactory = createInitialStateFactory(stateAdapter);\n  const selectorsFactory = createSelectorsFactory();\n  return {\n    selectId,\n    sortComparer,\n    ...stateFactory,\n    ...selectorsFactory,\n    ...stateAdapter\n  };\n}\n\n// src/listenerMiddleware/exceptions.ts\nvar task = \"task\";\nvar listener = \"listener\";\nvar completed = \"completed\";\nvar cancelled = \"cancelled\";\nvar taskCancelled = `task-${cancelled}`;\nvar taskCompleted = `task-${completed}`;\nvar listenerCancelled = `${listener}-${cancelled}`;\nvar listenerCompleted = `${listener}-${completed}`;\nvar TaskAbortError = class {\n  constructor(code) {\n    this.code = code;\n    this.message = `${task} ${cancelled} (reason: ${code})`;\n  }\n  name = \"TaskAbortError\";\n  message;\n};\n\n// src/listenerMiddleware/utils.ts\nvar assertFunction = (func, expected) => {\n  if (typeof func !== \"function\") {\n    throw new TypeError(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(32) : `${expected} is not a function`);\n  }\n};\nvar noop2 = () => {\n};\nvar catchRejection = (promise, onError = noop2) => {\n  promise.catch(onError);\n  return promise;\n};\nvar addAbortSignalListener = (abortSignal, callback) => {\n  abortSignal.addEventListener(\"abort\", callback, {\n    once: true\n  });\n  return () => abortSignal.removeEventListener(\"abort\", callback);\n};\n\n// src/listenerMiddleware/task.ts\nvar validateActive = (signal) => {\n  if (signal.aborted) {\n    throw new TaskAbortError(signal.reason);\n  }\n};\nfunction raceWithSignal(signal, promise) {\n  let cleanup = noop2;\n  return new Promise((resolve, reject) => {\n    const notifyRejection = () => reject(new TaskAbortError(signal.reason));\n    if (signal.aborted) {\n      notifyRejection();\n      return;\n    }\n    cleanup = addAbortSignalListener(signal, notifyRejection);\n    promise.finally(() => cleanup()).then(resolve, reject);\n  }).finally(() => {\n    cleanup = noop2;\n  });\n}\nvar runTask = async (task2, cleanUp) => {\n  try {\n    await Promise.resolve();\n    const value = await task2();\n    return {\n      status: \"ok\",\n      value\n    };\n  } catch (error) {\n    return {\n      status: error instanceof TaskAbortError ? \"cancelled\" : \"rejected\",\n      error\n    };\n  } finally {\n    cleanUp?.();\n  }\n};\nvar createPause = (signal) => {\n  return (promise) => {\n    return catchRejection(raceWithSignal(signal, promise).then((output) => {\n      validateActive(signal);\n      return output;\n    }));\n  };\n};\nvar createDelay = (signal) => {\n  const pause = createPause(signal);\n  return (timeoutMs) => {\n    return pause(new Promise((resolve) => setTimeout(resolve, timeoutMs)));\n  };\n};\n\n// src/listenerMiddleware/index.ts\nvar {\n  assign\n} = Object;\nvar INTERNAL_NIL_TOKEN = {};\nvar alm = \"listenerMiddleware\";\nvar createFork = (parentAbortSignal, parentBlockingPromises) => {\n  const linkControllers = (controller) => addAbortSignalListener(parentAbortSignal, () => controller.abort(parentAbortSignal.reason));\n  return (taskExecutor, opts) => {\n    assertFunction(taskExecutor, \"taskExecutor\");\n    const childAbortController = new AbortController();\n    linkControllers(childAbortController);\n    const result = runTask(async () => {\n      validateActive(parentAbortSignal);\n      validateActive(childAbortController.signal);\n      const result2 = await taskExecutor({\n        pause: createPause(childAbortController.signal),\n        delay: createDelay(childAbortController.signal),\n        signal: childAbortController.signal\n      });\n      validateActive(childAbortController.signal);\n      return result2;\n    }, () => childAbortController.abort(taskCompleted));\n    if (opts?.autoJoin) {\n      parentBlockingPromises.push(result.catch(noop2));\n    }\n    return {\n      result: createPause(parentAbortSignal)(result),\n      cancel() {\n        childAbortController.abort(taskCancelled);\n      }\n    };\n  };\n};\nvar createTakePattern = (startListening, signal) => {\n  const take = async (predicate, timeout) => {\n    validateActive(signal);\n    let unsubscribe = () => {\n    };\n    const tuplePromise = new Promise((resolve, reject) => {\n      let stopListening = startListening({\n        predicate,\n        effect: (action, listenerApi) => {\n          listenerApi.unsubscribe();\n          resolve([action, listenerApi.getState(), listenerApi.getOriginalState()]);\n        }\n      });\n      unsubscribe = () => {\n        stopListening();\n        reject();\n      };\n    });\n    const promises = [tuplePromise];\n    if (timeout != null) {\n      promises.push(new Promise((resolve) => setTimeout(resolve, timeout, null)));\n    }\n    try {\n      const output = await raceWithSignal(signal, Promise.race(promises));\n      validateActive(signal);\n      return output;\n    } finally {\n      unsubscribe();\n    }\n  };\n  return (predicate, timeout) => catchRejection(take(predicate, timeout));\n};\nvar getListenerEntryPropsFrom = (options) => {\n  let {\n    type,\n    actionCreator,\n    matcher,\n    predicate,\n    effect\n  } = options;\n  if (type) {\n    predicate = createAction(type).match;\n  } else if (actionCreator) {\n    type = actionCreator.type;\n    predicate = actionCreator.match;\n  } else if (matcher) {\n    predicate = matcher;\n  } else if (predicate) {\n  } else {\n    throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(21) : \"Creating or removing a listener requires one of the known fields for matching an action\");\n  }\n  assertFunction(effect, \"options.listener\");\n  return {\n    predicate,\n    type,\n    effect\n  };\n};\nvar createListenerEntry = /* @__PURE__ */ assign((options) => {\n  const {\n    type,\n    predicate,\n    effect\n  } = getListenerEntryPropsFrom(options);\n  const entry = {\n    id: nanoid(),\n    effect,\n    type,\n    predicate,\n    pending: /* @__PURE__ */ new Set(),\n    unsubscribe: () => {\n      throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(22) : \"Unsubscribe not initialized\");\n    }\n  };\n  return entry;\n}, {\n  withTypes: () => createListenerEntry\n});\nvar findListenerEntry = (listenerMap, options) => {\n  const {\n    type,\n    effect,\n    predicate\n  } = getListenerEntryPropsFrom(options);\n  return Array.from(listenerMap.values()).find((entry) => {\n    const matchPredicateOrType = typeof type === \"string\" ? entry.type === type : entry.predicate === predicate;\n    return matchPredicateOrType && entry.effect === effect;\n  });\n};\nvar cancelActiveListeners = (entry) => {\n  entry.pending.forEach((controller) => {\n    controller.abort(listenerCancelled);\n  });\n};\nvar createClearListenerMiddleware = (listenerMap, executingListeners) => {\n  return () => {\n    for (const listener2 of executingListeners.keys()) {\n      cancelActiveListeners(listener2);\n    }\n    listenerMap.clear();\n  };\n};\nvar safelyNotifyError = (errorHandler, errorToNotify, errorInfo) => {\n  try {\n    errorHandler(errorToNotify, errorInfo);\n  } catch (errorHandlerError) {\n    setTimeout(() => {\n      throw errorHandlerError;\n    }, 0);\n  }\n};\nvar addListener = /* @__PURE__ */ assign(/* @__PURE__ */ createAction(`${alm}/add`), {\n  withTypes: () => addListener\n});\nvar clearAllListeners = /* @__PURE__ */ createAction(`${alm}/removeAll`);\nvar removeListener = /* @__PURE__ */ assign(/* @__PURE__ */ createAction(`${alm}/remove`), {\n  withTypes: () => removeListener\n});\nvar defaultErrorHandler = (...args) => {\n  console.error(`${alm}/error`, ...args);\n};\nvar createListenerMiddleware = (middlewareOptions = {}) => {\n  const listenerMap = /* @__PURE__ */ new Map();\n  const executingListeners = /* @__PURE__ */ new Map();\n  const trackExecutingListener = (entry) => {\n    const count = executingListeners.get(entry) ?? 0;\n    executingListeners.set(entry, count + 1);\n  };\n  const untrackExecutingListener = (entry) => {\n    const count = executingListeners.get(entry) ?? 1;\n    if (count === 1) {\n      executingListeners.delete(entry);\n    } else {\n      executingListeners.set(entry, count - 1);\n    }\n  };\n  const {\n    extra,\n    onError = defaultErrorHandler\n  } = middlewareOptions;\n  assertFunction(onError, \"onError\");\n  const insertEntry = (entry) => {\n    entry.unsubscribe = () => listenerMap.delete(entry.id);\n    listenerMap.set(entry.id, entry);\n    return (cancelOptions) => {\n      entry.unsubscribe();\n      if (cancelOptions?.cancelActive) {\n        cancelActiveListeners(entry);\n      }\n    };\n  };\n  const startListening = (options) => {\n    const entry = findListenerEntry(listenerMap, options) ?? createListenerEntry(options);\n    return insertEntry(entry);\n  };\n  assign(startListening, {\n    withTypes: () => startListening\n  });\n  const stopListening = (options) => {\n    const entry = findListenerEntry(listenerMap, options);\n    if (entry) {\n      entry.unsubscribe();\n      if (options.cancelActive) {\n        cancelActiveListeners(entry);\n      }\n    }\n    return !!entry;\n  };\n  assign(stopListening, {\n    withTypes: () => stopListening\n  });\n  const notifyListener = async (entry, action, api, getOriginalState) => {\n    const internalTaskController = new AbortController();\n    const take = createTakePattern(startListening, internalTaskController.signal);\n    const autoJoinPromises = [];\n    try {\n      entry.pending.add(internalTaskController);\n      trackExecutingListener(entry);\n      await Promise.resolve(entry.effect(\n        action,\n        // Use assign() rather than ... to avoid extra helper functions added to bundle\n        assign({}, api, {\n          getOriginalState,\n          condition: (predicate, timeout) => take(predicate, timeout).then(Boolean),\n          take,\n          delay: createDelay(internalTaskController.signal),\n          pause: createPause(internalTaskController.signal),\n          extra,\n          signal: internalTaskController.signal,\n          fork: createFork(internalTaskController.signal, autoJoinPromises),\n          unsubscribe: entry.unsubscribe,\n          subscribe: () => {\n            listenerMap.set(entry.id, entry);\n          },\n          cancelActiveListeners: () => {\n            entry.pending.forEach((controller, _, set) => {\n              if (controller !== internalTaskController) {\n                controller.abort(listenerCancelled);\n                set.delete(controller);\n              }\n            });\n          },\n          cancel: () => {\n            internalTaskController.abort(listenerCancelled);\n            entry.pending.delete(internalTaskController);\n          },\n          throwIfCancelled: () => {\n            validateActive(internalTaskController.signal);\n          }\n        })\n      ));\n    } catch (listenerError) {\n      if (!(listenerError instanceof TaskAbortError)) {\n        safelyNotifyError(onError, listenerError, {\n          raisedBy: \"effect\"\n        });\n      }\n    } finally {\n      await Promise.all(autoJoinPromises);\n      internalTaskController.abort(listenerCompleted);\n      untrackExecutingListener(entry);\n      entry.pending.delete(internalTaskController);\n    }\n  };\n  const clearListenerMiddleware = createClearListenerMiddleware(listenerMap, executingListeners);\n  const middleware = (api) => (next) => (action) => {\n    if (!isAction(action)) {\n      return next(action);\n    }\n    if (addListener.match(action)) {\n      return startListening(action.payload);\n    }\n    if (clearAllListeners.match(action)) {\n      clearListenerMiddleware();\n      return;\n    }\n    if (removeListener.match(action)) {\n      return stopListening(action.payload);\n    }\n    let originalState = api.getState();\n    const getOriginalState = () => {\n      if (originalState === INTERNAL_NIL_TOKEN) {\n        throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(23) : `${alm}: getOriginalState can only be called synchronously`);\n      }\n      return originalState;\n    };\n    let result;\n    try {\n      result = next(action);\n      if (listenerMap.size > 0) {\n        const currentState = api.getState();\n        const listenerEntries = Array.from(listenerMap.values());\n        for (const entry of listenerEntries) {\n          let runListener = false;\n          try {\n            runListener = entry.predicate(action, currentState, originalState);\n          } catch (predicateError) {\n            runListener = false;\n            safelyNotifyError(onError, predicateError, {\n              raisedBy: \"predicate\"\n            });\n          }\n          if (!runListener) {\n            continue;\n          }\n          notifyListener(entry, action, api, getOriginalState);\n        }\n      }\n    } finally {\n      originalState = INTERNAL_NIL_TOKEN;\n    }\n    return result;\n  };\n  return {\n    middleware,\n    startListening,\n    stopListening,\n    clearListeners: clearListenerMiddleware\n  };\n};\n\n// src/dynamicMiddleware/index.ts\nvar createMiddlewareEntry = (middleware) => ({\n  middleware,\n  applied: /* @__PURE__ */ new Map()\n});\nvar matchInstance = (instanceId) => (action) => action?.meta?.instanceId === instanceId;\nvar createDynamicMiddleware = () => {\n  const instanceId = nanoid();\n  const middlewareMap = /* @__PURE__ */ new Map();\n  const withMiddleware = Object.assign(createAction(\"dynamicMiddleware/add\", (...middlewares) => ({\n    payload: middlewares,\n    meta: {\n      instanceId\n    }\n  })), {\n    withTypes: () => withMiddleware\n  });\n  const addMiddleware = Object.assign(function addMiddleware2(...middlewares) {\n    middlewares.forEach((middleware2) => {\n      getOrInsertComputed(middlewareMap, middleware2, createMiddlewareEntry);\n    });\n  }, {\n    withTypes: () => addMiddleware\n  });\n  const getFinalMiddleware = (api) => {\n    const appliedMiddleware = Array.from(middlewareMap.values()).map((entry) => getOrInsertComputed(entry.applied, api, entry.middleware));\n    return compose(...appliedMiddleware);\n  };\n  const isWithMiddleware = isAllOf(withMiddleware, matchInstance(instanceId));\n  const middleware = (api) => (next) => (action) => {\n    if (isWithMiddleware(action)) {\n      addMiddleware(...action.payload);\n      return api.dispatch;\n    }\n    return getFinalMiddleware(api)(next)(action);\n  };\n  return {\n    middleware,\n    addMiddleware,\n    withMiddleware,\n    instanceId\n  };\n};\n\n// src/combineSlices.ts\nimport { combineReducers as combineReducers2 } from \"redux\";\nvar isSliceLike = (maybeSliceLike) => \"reducerPath\" in maybeSliceLike && typeof maybeSliceLike.reducerPath === \"string\";\nvar getReducers = (slices) => slices.flatMap((sliceOrMap) => isSliceLike(sliceOrMap) ? [[sliceOrMap.reducerPath, sliceOrMap.reducer]] : Object.entries(sliceOrMap));\nvar ORIGINAL_STATE = Symbol.for(\"rtk-state-proxy-original\");\nvar isStateProxy = (value) => !!value && !!value[ORIGINAL_STATE];\nvar stateProxyMap = /* @__PURE__ */ new WeakMap();\nvar createStateProxy = (state, reducerMap, initialStateCache) => getOrInsertComputed(stateProxyMap, state, () => new Proxy(state, {\n  get: (target, prop, receiver) => {\n    if (prop === ORIGINAL_STATE) return target;\n    const result = Reflect.get(target, prop, receiver);\n    if (typeof result === \"undefined\") {\n      const cached = initialStateCache[prop];\n      if (typeof cached !== \"undefined\") return cached;\n      const reducer = reducerMap[prop];\n      if (reducer) {\n        const reducerResult = reducer(void 0, {\n          type: nanoid()\n        });\n        if (typeof reducerResult === \"undefined\") {\n          throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(24) : `The slice reducer for key \"${prop.toString()}\" returned undefined when called for selector(). If the state passed to the reducer is undefined, you must explicitly return the initial state. The initial state may not be undefined. If you don't want to set a value for this reducer, you can use null instead of undefined.`);\n        }\n        initialStateCache[prop] = reducerResult;\n        return reducerResult;\n      }\n    }\n    return result;\n  }\n}));\nvar original = (state) => {\n  if (!isStateProxy(state)) {\n    throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(25) : \"original must be used on state Proxy\");\n  }\n  return state[ORIGINAL_STATE];\n};\nvar emptyObject = {};\nvar noopReducer = (state = emptyObject) => state;\nfunction combineSlices(...slices) {\n  const reducerMap = Object.fromEntries(getReducers(slices));\n  const getReducer = () => Object.keys(reducerMap).length ? combineReducers2(reducerMap) : noopReducer;\n  let reducer = getReducer();\n  function combinedReducer(state, action) {\n    return reducer(state, action);\n  }\n  combinedReducer.withLazyLoadedSlices = () => combinedReducer;\n  const initialStateCache = {};\n  const inject = (slice, config = {}) => {\n    const {\n      reducerPath,\n      reducer: reducerToInject\n    } = slice;\n    const currentReducer = reducerMap[reducerPath];\n    if (!config.overrideExisting && currentReducer && currentReducer !== reducerToInject) {\n      if (typeof process !== \"undefined\" && process.env.NODE_ENV === \"development\") {\n        console.error(`called \\`inject\\` to override already-existing reducer ${reducerPath} without specifying \\`overrideExisting: true\\``);\n      }\n      return combinedReducer;\n    }\n    if (config.overrideExisting && currentReducer !== reducerToInject) {\n      delete initialStateCache[reducerPath];\n    }\n    reducerMap[reducerPath] = reducerToInject;\n    reducer = getReducer();\n    return combinedReducer;\n  };\n  const selector = Object.assign(function makeSelector(selectorFn, selectState) {\n    return function selector2(state, ...args) {\n      return selectorFn(createStateProxy(selectState ? selectState(state, ...args) : state, reducerMap, initialStateCache), ...args);\n    };\n  }, {\n    original\n  });\n  return Object.assign(combinedReducer, {\n    inject,\n    selector\n  });\n}\n\n// src/formatProdErrorMessage.ts\nfunction formatProdErrorMessage(code) {\n  return `Minified Redux Toolkit error #${code}; visit https://redux-toolkit.js.org/Errors?code=${code} for the full message or use the non-minified dev environment for full errors. `;\n}\nexport {\n  ReducerType,\n  SHOULD_AUTOBATCH,\n  TaskAbortError,\n  Tuple,\n  addListener,\n  asyncThunkCreator,\n  autoBatchEnhancer,\n  buildCreateSlice,\n  clearAllListeners,\n  combineSlices,\n  configureStore,\n  createAction,\n  createActionCreatorInvariantMiddleware,\n  createAsyncThunk,\n  createDraftSafeSelector,\n  createDraftSafeSelectorCreator,\n  createDynamicMiddleware,\n  createEntityAdapter,\n  createImmutableStateInvariantMiddleware,\n  createListenerMiddleware,\n  produce as createNextState,\n  createReducer,\n  createSelector,\n  createSelectorCreator,\n  createSerializableStateInvariantMiddleware,\n  createSlice,\n  current,\n  findNonSerializableValue,\n  formatProdErrorMessage,\n  freeze,\n  isActionCreator,\n  isAllOf,\n  isAnyOf,\n  isAsyncThunkAction,\n  isDraft,\n  isFSA as isFluxStandardAction,\n  isFulfilled,\n  isImmutableDefault,\n  isPending,\n  isPlain,\n  isRejected,\n  isRejectedWithValue,\n  lruMemoize,\n  miniSerializeError,\n  nanoid,\n  original2 as original,\n  prepareAutoBatched,\n  removeListener,\n  unwrapResult,\n  weakMapMemoize\n};\n//# sourceMappingURL=redux-toolkit.modern.mjs.map","import type { Disposable } from '@type/disposable';\nimport type { AppStore } from '../store';\n\n/**\n * Abstract base class for view models that manage UI state and store interactions.\n * @template UiState The type of UI state managed by this view model.\n */\nexport abstract class AbstractViewModel<UiState> implements Disposable {\n  protected readonly store: AppStore;\n  protected readonly disposables: Disposable[];\n\n  /**\n   * Creates a new AbstractViewModel instance.\n   * @param {AppStore} store - The Redux store instance for state management.\n   */\n  protected constructor(store: AppStore) {\n    this.store = store;\n    this.disposables = new Array<Disposable>();\n  }\n\n  /**\n   * Disposes all registered disposables and clears the disposables array.\n   */\n  public dispose(): void {\n    this.disposables.forEach(disposable => disposable.dispose());\n    this.disposables.length = 0;\n  }\n\n  /**\n   * Gets the current UI state managed by this view model.\n   * @returns {UiState} The current UI state.\n   */\n  public abstract get state(): UiState;\n}\n","import type { PayloadAction } from '@reduxjs/toolkit';\nimport type { BrailleService } from '@service/braille';\nimport type { AppStore } from '@state/store';\nimport type { TraceState } from '@type/state';\nimport { createSlice } from '@reduxjs/toolkit';\nimport { DEFAULT_BRAILLE_SIZE } from '@service/braille';\nimport { AbstractViewModel } from './viewModel';\n\n/**\n * Represents the state of the braille display.\n */\nexport interface BrailleState {\n  value: string;\n  index: number;\n  displaySize: number;\n}\n\nconst initialState: BrailleState = {\n  value: '',\n  index: -1,\n  displaySize: DEFAULT_BRAILLE_SIZE,\n};\n\nconst brailleSlice = createSlice({\n  name: 'braille',\n  initialState,\n  reducers: {\n    update(_, action: PayloadAction<BrailleState>): BrailleState {\n      return action.payload;\n    },\n    reset(): BrailleState {\n      return initialState;\n    },\n  },\n});\nconst { update, reset } = brailleSlice.actions;\n\n/**\n * View model for managing braille display state and interactions.\n */\nexport class BrailleViewModel extends AbstractViewModel<BrailleState> {\n  private readonly brailleService: BrailleService;\n\n  /**\n   * Creates a new BrailleViewModel instance and registers braille service listeners.\n   * @param {AppStore} store - The Redux store instance.\n   * @param {BrailleService} brailleService - The braille service for handling braille operations.\n   */\n  public constructor(store: AppStore, brailleService: BrailleService) {\n    super(store);\n    this.brailleService = brailleService;\n    this.registerListener();\n  }\n\n  /**\n   * Disposes the view model and resets braille state to initial values.\n   */\n  public dispose(): void {\n    super.dispose();\n    this.store.dispatch(reset());\n  }\n\n  /**\n   * Registers a listener to handle braille service changes and update the store.\n   */\n  private registerListener(): void {\n    this.disposables.push(this.brailleService.onChange((e) => {\n      this.store.dispatch(update(e));\n    }));\n  }\n\n  /**\n   * Gets the current braille state from the store.\n   * @returns {BrailleState} The current braille state.\n   */\n  public get state(): BrailleState {\n    return this.store.getState().braille;\n  }\n\n  /**\n   * Moves the braille display to a specific index position.\n   * @param {number} index - The target index position.\n   */\n  public moveToIndex(index: number): void {\n    this.brailleService.moveToIndex(index);\n  }\n\n  /**\n   * Updates the braille display with new trace state data.\n   * @param {TraceState} state - The trace state to update with.\n   */\n  public update(state: TraceState): void {\n    this.brailleService.update(state);\n  }\n\n  /**\n   * Toggles the braille display visibility based on the provided trace state.\n   * @param {TraceState} state - The trace state for toggling.\n   */\n  public toggle(state: TraceState): void {\n    this.brailleService.toggle(state);\n  }\n}\n\nexport default brailleSlice.reducer;\n","import type { LlmVersion } from '@type/llm';\n\n/**\n * Available OpenAI GPT model versions.\n */\nexport type GptVersion = 'gpt-4o' | 'gpt-4o-mini' | 'gpt-4.1' | 'o1-mini' | 'o3' | 'o4-mini';\n\n/**\n * Available Anthropic Claude model versions.\n */\nexport type ClaudeVersion = 'claude-3-5-haiku-latest' | 'claude-3-5-sonnet-latest' | 'claude-3-7-sonnet-latest';\n\n/**\n * Available Google Gemini model versions.\n */\nexport type GeminiVersion = 'gemini-2.0-flash' | 'gemini-2.0-flash-lite' | 'gemini-2.5-flash-preview-04-17' | 'gemini-2.5-pro-preview-05-06';\n\n/**\n * Configuration structure for LLM model versions including default, options, and display labels.\n * @template T - The specific model version type extending LlmVersion\n */\nexport interface ModelConfig<T extends LlmVersion> {\n  /** The default model version to use */\n  default: T;\n  /** All available model versions */\n  options: readonly T[];\n  /** Human-readable labels for each model version */\n  labels: Record<T, string>;\n}\n\n/**\n * Complete configuration for all supported LLM providers and their model versions.\n */\nexport interface ModelVersions {\n  /** OpenAI GPT model configuration */\n  OPENAI: ModelConfig<GptVersion>;\n  /** Anthropic Claude model configuration */\n  ANTHROPIC_CLAUDE: ModelConfig<ClaudeVersion>;\n  /** Google Gemini model configuration */\n  GOOGLE_GEMINI: ModelConfig<GeminiVersion>;\n}\n\n/**\n * Configuration object containing default versions, available options, and display labels for all LLM providers.\n */\nexport const MODEL_VERSIONS: ModelVersions = {\n  OPENAI: {\n    default: 'gpt-4o',\n    options: ['gpt-4o', 'gpt-4o-mini', 'gpt-4.1', 'o1-mini', 'o3', 'o4-mini'] as const,\n    labels: {\n      'gpt-4o': 'GPT-4o',\n      'gpt-4o-mini': 'GPT-4o Mini',\n      'gpt-4.1': 'GPT-4.1',\n      'o1-mini': 'o1-mini',\n      'o3': 'o3',\n      'o4-mini': 'o4-mini',\n    },\n  },\n  ANTHROPIC_CLAUDE: {\n    default: 'claude-3-7-sonnet-latest',\n    options: ['claude-3-5-haiku-latest', 'claude-3-5-sonnet-latest', 'claude-3-7-sonnet-latest'] as const,\n    labels: {\n      'claude-3-5-haiku-latest': 'Claude 3.5 Haiku',\n      'claude-3-5-sonnet-latest': 'Claude 3.5 Sonnet',\n      'claude-3-7-sonnet-latest': 'Claude 3.7 Sonnet',\n    },\n  },\n  GOOGLE_GEMINI: {\n    default: 'gemini-2.0-flash',\n    options: ['gemini-2.0-flash', 'gemini-2.0-flash-lite', 'gemini-2.5-flash-preview-04-17', 'gemini-2.5-pro-preview-05-06'] as const,\n    labels: {\n      'gemini-2.0-flash': 'Gemini 2.0 Flash',\n      'gemini-2.0-flash-lite': 'Gemini 2.0 Flash Lite',\n      'gemini-2.5-flash-preview-04-17': 'Gemini 2.5 Flash Preview',\n      'gemini-2.5-pro-preview-05-06': 'Gemini 2.5 Pro Preview',\n    },\n  },\n};\n","import type { PayloadAction } from '@reduxjs/toolkit';\nimport type { AudioService } from '@service/audio';\nimport type { ChatService } from '@service/chat';\nimport type { Suggestion } from '@type/chat';\nimport type { Llm, Message } from '@type/llm';\nimport type { AppStore, RootState } from '../store';\nimport { createSlice } from '@reduxjs/toolkit';\nimport { MODEL_VERSIONS } from '@service/modelVersions';\nimport { AbstractViewModel } from './viewModel';\n\n/**\n * Represents the state of the chat interface.\n */\nexport interface ChatState {\n  messages: Message[];\n  suggestions: Suggestion[];\n}\n\nconst initialState: ChatState = {\n  messages: [],\n  suggestions: [],\n};\n\n/**\n * Converts a model key to a human-readable display name.\n * @param {string} modelKey - The model key identifier.\n * @returns {string} The display name for the model.\n */\nfunction getModelDisplayName(modelKey: string): string {\n  switch (modelKey) {\n    case 'OPENAI':\n      return 'OpenAI';\n    case 'ANTHROPIC_CLAUDE':\n      return 'Anthropic Claude';\n    case 'GOOGLE_GEMINI':\n      return 'Google Gemini';\n    default:\n      return 'AI Assistant';\n  }\n}\n\nconst chatSlice = createSlice({\n  name: 'chat',\n  initialState,\n  reducers: {\n    addUserMessage: (state, action: PayloadAction<{ text: string; timestamp: string }>) => {\n      state.messages.push({\n        id: `msg-${Date.now()}`,\n        text: action.payload.text,\n        isUser: true,\n        timestamp: action.payload.timestamp,\n        status: 'SUCCESS',\n      });\n    },\n    addSystemMessage: (state, action: PayloadAction<{ text: string; timestamp: string; modelSelections?: { modelKey: Llm; name: string; version: string }[]; isWelcomeMessage?: boolean }>) => {\n      state.messages.push({\n        id: `system-${Date.now()}`,\n        text: action.payload.text,\n        isUser: false,\n        timestamp: action.payload.timestamp,\n        status: 'SUCCESS',\n        modelSelections: action.payload.modelSelections,\n        isWelcomeMessage: action.payload.isWelcomeMessage,\n      });\n    },\n    addPendingResponse: (state, action: PayloadAction<{ model: Llm; timestamp: string }>) => {\n      state.messages.push({\n        id: `resp-${Date.now()}-${action.payload.model}`,\n        text: 'Processing request...',\n        isUser: false,\n        model: action.payload.model,\n        timestamp: action.payload.timestamp,\n        status: 'PENDING',\n      });\n    },\n    updateResponse: (state, action: PayloadAction<{ model: Llm; data: string; timestamp: string }>) => {\n      const message = state.messages.find(m =>\n        m.model === action.payload.model\n        && m.timestamp === action.payload.timestamp,\n      );\n      if (message) {\n        message.text = action.payload.data;\n        message.status = 'SUCCESS';\n      }\n    },\n    updateError: (state, action: PayloadAction<{ model: Llm; error: string; timestamp: string }>) => {\n      const message = state.messages.find(m =>\n        m.model === action.payload.model\n        && m.timestamp === action.payload.timestamp,\n      );\n      if (message) {\n        message.text = `Error: ${action.payload.error}`;\n        message.status = 'FAILED';\n      }\n    },\n    updateSuggestions: (state, action: PayloadAction<Suggestion[]>) => {\n      state.suggestions = action.payload;\n    },\n    updateWelcomeMessage: (state, action: PayloadAction<{ text: string; modelSelections?: { modelKey: Llm; name: string; version: string }[] }>) => {\n      // Find the welcome message (first system message with isWelcomeMessage flag)\n      const welcomeMessageIndex = state.messages.findIndex(msg => msg.isWelcomeMessage);\n      if (welcomeMessageIndex !== -1) {\n        state.messages[welcomeMessageIndex].text = action.payload.text;\n        if (action.payload.modelSelections) {\n          state.messages[welcomeMessageIndex].modelSelections = action.payload.modelSelections;\n        }\n      }\n    },\n    reset() {\n      return initialState;\n    },\n  },\n});\nconst { addUserMessage, addSystemMessage, addPendingResponse, updateResponse, updateError, updateSuggestions, updateWelcomeMessage, reset } = chatSlice.actions;\n\n/**\n * View model for managing chat interface state and AI model interactions.\n */\nexport class ChatViewModel extends AbstractViewModel<ChatState> {\n  private readonly chatService: ChatService;\n  private readonly audioService: AudioService;\n\n  /**\n   * Creates a new ChatViewModel instance and loads the initial welcome message.\n   * @param {AppStore} store - The Redux store instance.\n   * @param {ChatService} chatService - The chat service for managing AI interactions.\n   * @param {AudioService} audioService - The audio service for feedback sounds.\n   */\n  constructor(store: AppStore, chatService: ChatService, audioService: AudioService) {\n    super(store);\n    this.chatService = chatService;\n    this.audioService = audioService;\n    this.loadInitialMessage();\n  }\n\n  /**\n   * Disposes the view model and resets chat state to initial values.\n   */\n  public dispose(): void {\n    super.dispose();\n    this.store.dispatch(reset());\n  }\n\n  /**\n   * Gets the current chat state from the store.\n   * @returns {ChatState} The current chat state.\n   */\n  public get state(): ChatState {\n    return this.snapshot.chat;\n  }\n\n  /**\n   * Gets a read-only snapshot of the entire Redux store state.\n   * @returns {Readonly<RootState>} The current root state snapshot.\n   */\n  private get snapshot(): Readonly<RootState> {\n    return this.store.getState();\n  }\n\n  /**\n   * Checks if the user can send messages based on enabled models with valid API keys.\n   * @returns {boolean} True if at least one model is enabled with an API key.\n   */\n  public get canSend(): boolean {\n    const { llm } = this.snapshot.settings;\n    return Object.values(llm.models).some(model => model.enabled && model.apiKey.trim().length > 0);\n  }\n\n  /**\n   * Toggles the visibility of the chat interface.\n   */\n  public toggle(): void {\n    this.chatService.toggle();\n  }\n\n  /**\n   * Retrieves data about enabled AI models including display names and versions.\n   * @returns {{ enabledModels: string[]; modelSelections: { modelKey: Llm; name: string; version: string }[] }} Enabled models data.\n   */\n  private getEnabledModelsData(): { enabledModels: string[]; modelSelections: { modelKey: Llm; name: string; version: string }[] } {\n    const llmModels = this.snapshot.settings.llm.models;\n\n    const enabledModels = Object.entries(llmModels)\n      .filter(([_, cfg]) => cfg.enabled && cfg.apiKey.trim().length > 0)\n      .map(([modelKey, cfg]) => {\n        const labelMap = MODEL_VERSIONS[modelKey as keyof typeof MODEL_VERSIONS]?.labels;\n        const versionLabel = labelMap?.[cfg.version as keyof typeof labelMap] || cfg.version;\n        const displayName = getModelDisplayName(modelKey);\n        return `${displayName} (${versionLabel})`;\n      });\n\n    const modelSelections = Object.entries(llmModels)\n      .filter(([_, cfg]) => cfg.enabled && cfg.apiKey.trim().length > 0)\n      .map(([modelKey, cfg]) => ({\n        modelKey: modelKey as Llm,\n        name: getModelDisplayName(modelKey),\n        version: cfg.version,\n      }));\n\n    return { enabledModels, modelSelections };\n  }\n\n  /**\n   * Loads the initial welcome message displaying available AI models.\n   */\n  public loadInitialMessage(): void {\n    const timestamp = new Date().toISOString();\n    const { enabledModels, modelSelections } = this.getEnabledModelsData();\n\n    const text = enabledModels.length > 0\n      ? `Welcome to the Chart Assistant. You can select and switch between different AI models using the dropdowns below. Currently enabled: ${enabledModels.join(', ')}.`\n      : 'No agents are enabled. Please enable at least one agent and provide API keys in the settings page.';\n\n    this.store.dispatch(addSystemMessage({\n      text,\n      timestamp,\n      modelSelections,\n      isWelcomeMessage: true,\n    }));\n  }\n\n  /**\n   * Clears all chat messages and reloads the initial welcome message.\n   */\n  public refreshInitialMessage(): void {\n    // Clear existing messages and reload initial message\n    this.store.dispatch(reset());\n    this.loadInitialMessage();\n  }\n\n  /**\n   * Updates the welcome message with current enabled model information.\n   */\n  public updateWelcomeMessage(): void {\n    const { enabledModels, modelSelections } = this.getEnabledModelsData();\n\n    const text = enabledModels.length > 0\n      ? `Welcome to the Chart Assistant. You can select and switch between different AI models using the dropdowns below. Currently enabled: ${enabledModels.join(', ')}.`\n      : 'No agents are enabled. Please enable at least one agent and provide API keys in the settings page.';\n\n    this.store.dispatch(updateWelcomeMessage({\n      text,\n      modelSelections,\n    }));\n  }\n\n  /**\n   * Generates contextual chat suggestions based on expertise level and last message.\n   * @returns {Suggestion[]} Array of suggested follow-up questions.\n   */\n  private generateSuggestions(): Suggestion[] {\n    try {\n      const lastMessage = this.state.messages[this.state.messages.length - 1];\n      if (!lastMessage || lastMessage.isUser)\n        return [];\n\n      const { llm } = this.snapshot.settings;\n      const expertise = llm.expertiseLevel;\n      const timestamp = Date.now();\n\n      const baseSuggestions: Suggestion[] = [\n        {\n          id: `suggestion-${timestamp}-1`,\n          text: 'Can you explain that in more detail?',\n          type: 'clarification',\n        },\n        {\n          id: `suggestion-${timestamp}-2`,\n          text: 'What can you say about the current datapoint?',\n          type: 'analysis',\n        },\n        {\n          id: `suggestion-${timestamp}-3`,\n          text: 'How does this compare to other data points?',\n          type: 'analysis',\n        },\n      ];\n\n      // Add expertise-specific suggestions\n      if (expertise === 'advanced') {\n        baseSuggestions.push(\n          {\n            id: `suggestion-${timestamp}-4`,\n            text: 'Can you perform a statistical analysis of this data?',\n            type: 'analysis',\n          },\n          {\n            id: `suggestion-${timestamp}-5`,\n            text: 'What are the potential outliers in this dataset?',\n            type: 'analysis',\n          },\n        );\n      }\n\n      return baseSuggestions;\n    } catch (error) {\n      console.error('Error generating suggestions:', error);\n      return [];\n    }\n  }\n\n  /**\n   * Generates and updates chat suggestions in the store.\n   */\n  public updateSuggestions(): void {\n    const suggestions = this.generateSuggestions();\n    this.store.dispatch(updateSuggestions(suggestions));\n  }\n\n  /**\n   * Validates if a string is a valid expertise level.\n   * @param {string} level - The expertise level to validate.\n   * @returns {boolean} True if the level is valid.\n   */\n  private isValidExpertiseLevel(level: string): level is 'basic' | 'intermediate' | 'advanced' {\n    return ['basic', 'intermediate', 'advanced'].includes(level);\n  }\n\n  /**\n   * Sends a user message to all enabled AI models and handles responses.\n   * @param {string} newMessage - The message text to send.\n   * @returns {Promise<void>} Promise that resolves when all responses are received.\n   */\n  public async sendMessage(newMessage: string): Promise<void> {\n    const { llm: llmSettings } = this.snapshot.settings;\n    const timestamp = new Date().toISOString();\n\n    this.store.dispatch(addUserMessage({\n      text: newMessage,\n      timestamp,\n    }));\n\n    const enabledModels = (Object.keys(llmSettings.models) as Llm[])\n      .filter(model => llmSettings.models[model].enabled && llmSettings.models[model].apiKey.trim().length > 0);\n    await Promise.all(enabledModels.map(async (model) => {\n      const audioId = this.audioService.playWaitingTone();\n      try {\n        this.store.dispatch(addPendingResponse({\n          model,\n          timestamp,\n        }));\n\n        const config = llmSettings.models[model];\n        const expertise = (llmSettings.customExpertise && ['basic', 'intermediate', 'advanced'].includes(llmSettings.customExpertise))\n          ? llmSettings.customExpertise as 'basic' | 'intermediate' | 'advanced'\n          : llmSettings.expertiseLevel;\n        const response = await this.chatService.sendMessage(model, {\n          message: newMessage,\n          customInstruction: llmSettings.customInstruction,\n          expertise,\n          apiKey: config.apiKey,\n        });\n\n        this.audioService.stop(audioId);\n        if (response.error) {\n          this.store.dispatch(updateError({\n            model,\n            error: response.error,\n            timestamp,\n          }));\n        } else {\n          this.store.dispatch(updateResponse({\n            model,\n            data: response.data!,\n            timestamp,\n          }));\n          this.audioService.playCompleteTone();\n          this.updateSuggestions();\n        }\n      } catch (error) {\n        this.audioService.stop(audioId);\n        this.store.dispatch(updateError({\n          model,\n          error: error instanceof Error ? error.message : 'Error processing request',\n          timestamp,\n        }));\n      }\n    }));\n  }\n}\n\nexport default chatSlice.reducer;\n","import type { PayloadAction } from '@reduxjs/toolkit';\nimport type { CommandPaletteService } from '@service/commandPalette';\nimport type { AppStore } from '@state/store';\nimport type { Keys } from '@type/event';\nimport { createSlice } from '@reduxjs/toolkit';\nimport { SCOPED_KEYMAP } from '@service/keybinding';\nimport { AbstractViewModel } from '@state/viewModel/viewModel';\nimport { Scope } from '@type/event';\n\n/**\n * Represents a single command item in the command palette.\n */\nexport interface CommandItem {\n  key: string;\n  description: string;\n  commandKey: Keys;\n}\n\n/**\n * Represents the state of the command palette interface.\n */\nexport interface CommandPaletteState {\n  visible: boolean;\n  commands: CommandItem[];\n  selectedIndex: number;\n  search: string;\n}\n\nconst initialState: CommandPaletteState = {\n  visible: false,\n  commands: [],\n  selectedIndex: -1,\n  search: '',\n};\n\nconst commandPaletteSlice = createSlice({\n  name: 'commandPalette',\n  initialState,\n  reducers: {\n    show(state, action: PayloadAction<{ commands: CommandItem[]; scope: Scope }>): void {\n      state.visible = true;\n      state.commands = action.payload.commands;\n      state.selectedIndex = -1;\n      state.search = '';\n    },\n    hide(state): void {\n      state.visible = false;\n      state.commands = [];\n      state.selectedIndex = -1;\n      state.search = '';\n    },\n    updateSelectedIndex(state, action: PayloadAction<number>): void {\n      state.selectedIndex = action.payload;\n    },\n    updateSearch(state, action: PayloadAction<string>): void {\n      state.search = action.payload;\n      state.selectedIndex = -1;\n    },\n  },\n});\n\nconst { show, hide, updateSelectedIndex, updateSearch } = commandPaletteSlice.actions;\n\n/**\n * Callback type for executing commands.\n */\nexport type ExecuteCommandCallback = (commandKey: Keys) => void;\n\n/**\n * View model for managing command palette state and navigation.\n */\nexport class CommandPaletteViewModel extends AbstractViewModel<CommandPaletteState> {\n  private readonly commandPaletteService: CommandPaletteService;\n  private executeCommandCallback: ExecuteCommandCallback | null = null;\n\n  /**\n   * Creates a new CommandPaletteViewModel instance.\n   * @param {AppStore} store - The Redux store instance.\n   * @param {CommandPaletteService} commandPaletteService - The command palette service for scope management.\n   */\n  public constructor(store: AppStore, commandPaletteService: CommandPaletteService) {\n    super(store);\n    this.commandPaletteService = commandPaletteService;\n  }\n\n  /**\n   * Sets the command execution callback.\n   * Called after CommandExecutor is created due to circular dependency.\n   * @param {ExecuteCommandCallback} callback - The callback to execute commands.\n   */\n  public setExecuteCommandCallback(callback: ExecuteCommandCallback): void {\n    this.executeCommandCallback = callback;\n  }\n\n  /**\n   * Disposes the view model and hides the command palette.\n   */\n  public dispose(): void {\n    super.dispose();\n    this.store.dispatch(hide());\n  }\n\n  /**\n   * Gets the current command palette state from the store.\n   * @returns {CommandPaletteState} The current command palette state.\n   */\n  public get state(): CommandPaletteState {\n    return this.store.getState().commandPalette;\n  }\n\n  /**\n   * Toggles the visibility of the command palette.\n   */\n  public toggle(): void {\n    const currentState = this.state;\n\n    if (currentState.visible) {\n      this.hide();\n    } else {\n      this.show();\n    }\n  }\n\n  /**\n   * Shows the command palette with available commands for the current scope.\n   */\n  public show(): void {\n    // Get available commands for current scope\n    const scopeKeymap = SCOPED_KEYMAP.TRACE; // Default to TRACE scope\n    const commands = Object.entries(scopeKeymap)\n      .filter(([commandKey]) => !commandKey.startsWith('ALLOW_'))\n      .map(([commandKey, entry]) => ({\n        key: entry.helpKey ?? entry.hotkey,\n        description: entry.description,\n        commandKey: commandKey as Keys,\n      }));\n\n    // Store the commands in the state first\n    this.store.dispatch(show({ commands, scope: Scope.TRACE }));\n\n    // Then change scope to show the modal\n    this.commandPaletteService.toggle();\n  }\n\n  /**\n   * Hides the command palette and returns to trace scope.\n   */\n  public hide(): void {\n    this.store.dispatch(hide());\n    this.commandPaletteService.returnToTraceScope();\n  }\n\n  /**\n   * Executes a command and closes the palette.\n   * This is the single entry point for command execution from the palette.\n   * @param {Keys} commandKey - The command key to execute.\n   */\n  public executeAndClose(commandKey: Keys): void {\n    if (!this.executeCommandCallback) {\n      throw new Error('Command execution callback not set. Call setExecuteCommandCallback first.');\n    }\n\n    const callback = this.executeCommandCallback;\n\n    // Hide the palette first (returns to TRACE scope)\n    this.hide();\n\n    // Small delay to ensure scope has changed before executing\n    setTimeout(() => {\n      callback(commandKey);\n    }, 0);\n  }\n\n  /**\n   * Selects and executes the currently highlighted command.\n   */\n  public selectCurrent(): void {\n    const currentState = this.state;\n\n    if (currentState.commands.length > 0 && currentState.selectedIndex >= 0) {\n      const command = currentState.commands[currentState.selectedIndex];\n      if (command) {\n        this.executeAndClose(command.commandKey);\n      }\n    }\n  }\n\n  /**\n   * Moves the selection up in the command list.\n   */\n  public moveUp(): void {\n    const currentState = this.state;\n\n    if (currentState.commands.length > 0) {\n      // If we're on the first option (index 0), don't move up - let the component handle going back to search\n      if (currentState.selectedIndex === 0) {\n        return; // Component will handle this case\n      }\n\n      // If no option is selected, start from the last option\n      const currentIndex = currentState.selectedIndex >= 0 ? currentState.selectedIndex : currentState.commands.length - 1;\n      const newIndex = Math.max(0, currentIndex - 1);\n      this.store.dispatch(updateSelectedIndex(newIndex));\n    }\n  }\n\n  /**\n   * Moves the selection down in the command list.\n   */\n  public moveDown(): void {\n    const currentState = this.state;\n\n    if (currentState.commands.length > 0) {\n      // If no option is selected, start from the first option\n      const currentIndex = currentState.selectedIndex >= 0 ? currentState.selectedIndex : -1;\n      const newIndex = Math.min(currentState.commands.length - 1, currentIndex + 1);\n      this.store.dispatch(updateSelectedIndex(newIndex));\n    }\n  }\n\n  /**\n   * Deselects all options and returns focus to the search bar.\n   */\n  public moveToSearch(): void {\n    // Deselect all options to return focus to search bar\n    this.store.dispatch(updateSelectedIndex(-1));\n    // Note: The component will handle focusing the search input via useEffect\n  }\n\n  /**\n   * Updates the search filter text for the command palette.\n   * @param {string} search - The search text to filter commands.\n   */\n  public updateSearch(search: string): void {\n    this.store.dispatch(updateSearch(search));\n  }\n}\n\nexport default commandPaletteSlice.reducer;\n","import type { PayloadAction } from '@reduxjs/toolkit';\nimport type { DisplayService } from '@service/display';\nimport type { AppStore } from '@state/store';\nimport type { Focus } from '@type/event';\nimport { createSlice } from '@reduxjs/toolkit';\nimport { AbstractViewModel } from '@state/viewModel/viewModel';\n\n/**\n * Represents the state of a tooltip UI element.\n */\nexport interface TooltipState {\n  visible: boolean;\n  value: string;\n}\n\n/**\n * Represents the state of display UI elements including focus and tooltips.\n */\nexport interface DisplayState {\n  focus: Focus | null;\n  tooltip: TooltipState;\n}\n\nconst initialState: DisplayState = {\n  focus: null,\n  tooltip: {\n    visible: false,\n    value: '',\n  },\n};\n\nconst displaySlice = createSlice({\n  name: 'display',\n  initialState,\n  reducers: {\n    hideTooltip(state): void {\n      state.tooltip = { ...state.tooltip, visible: false, value: '' };\n    },\n    showTooltip(state, action: PayloadAction<string>): void {\n      state.tooltip = { ...state.tooltip, visible: true, value: action.payload };\n    },\n    updateFocus(state, action: PayloadAction<Focus>): void {\n      state.focus = action.payload;\n    },\n    clearFocus(state): void {\n      state.focus = null;\n    },\n  },\n});\nconst { hideTooltip, showTooltip, updateFocus, clearFocus } = displaySlice.actions;\n\n/**\n * View model for managing display UI state including focus and tooltips.\n */\nexport class DisplayViewModel extends AbstractViewModel<DisplayState> {\n  private readonly displayService: DisplayService;\n\n  /**\n   * Creates a new DisplayViewModel instance and initializes display listeners.\n   * @param {AppStore} store - The Redux store instance.\n   * @param {DisplayService} displayService - The display service for managing UI elements.\n   */\n  public constructor(store: AppStore, displayService: DisplayService) {\n    super(store);\n\n    this.displayService = displayService;\n\n    this.registerListeners();\n\n    this.store.dispatch(hideTooltip());\n  }\n\n  /**\n   * Disposes the view model, clears focus, and restores instruction tooltip.\n   */\n  public dispose(): void {\n    // Clear only focus to avoid wiping other display UI state\n    this.store.dispatch(clearFocus());\n    this.store.dispatch(showTooltip(this.displayService.getInstruction()));\n    super.dispose();\n  }\n\n  /**\n   * Registers listeners to handle display service focus change events.\n   */\n  private registerListeners(): void {\n    this.disposables.push(this.displayService.onChange((e) => {\n      this.store.dispatch(updateFocus(e.value));\n    }));\n  }\n\n  /**\n   * Gets the current display state from the store.\n   * @returns {DisplayState} The current display state.\n   */\n  public get state(): DisplayState {\n    return this.store.getState().display;\n  }\n}\n\nexport default displaySlice.reducer;\n","import type { Context } from '@model/context';\nimport type { FormatterService } from '@service/formatter';\nimport type { GoToExtremaService } from '@service/goToExtrema';\nimport type { AppStore } from '@state/store';\nimport type { ExtremaTarget } from '@type/extrema';\nimport type { TraceType } from '@type/grammar';\nimport type { XValue } from '@type/navigation';\nimport type { TraceState } from '@type/state';\nimport { createSlice } from '@reduxjs/toolkit';\nimport { AbstractViewModel } from '@state/viewModel/viewModel';\n\n// Type for plots that support getAvailableXValues\ninterface PlotWithXValues {\n  getAvailableXValues: () => XValue[];\n}\n\nexport interface GoToExtremaState {\n  visible: boolean;\n  targets: any[];\n  selectedIndex: number;\n  description: string; // Add description field\n}\n\nconst initialState: GoToExtremaState = {\n  visible: false,\n  targets: [],\n  selectedIndex: 0,\n  description: '', // Initialize description\n};\n\nconst goToExtremaSlice = createSlice({\n  name: 'goToExtrema',\n  initialState,\n  reducers: {\n    show(state, action): GoToExtremaState {\n      return {\n        visible: true,\n        targets: action.payload.targets,\n        selectedIndex: 0,\n        description: action.payload.description, // Store description\n      };\n    },\n    hide(): GoToExtremaState {\n      const newState = {\n        visible: false,\n        targets: [],\n        selectedIndex: 0,\n        description: '',\n      };\n      return newState;\n    },\n    updateSelectedIndex(state, action): GoToExtremaState {\n      return {\n        ...state,\n        selectedIndex: action.payload,\n      };\n    },\n  },\n});\n\nconst { show, hide, updateSelectedIndex } = goToExtremaSlice.actions;\n\nexport class GoToExtremaViewModel extends AbstractViewModel<GoToExtremaState> {\n  private readonly goToExtremaService: GoToExtremaService;\n  private readonly context: Context;\n  private readonly formatter?: FormatterService;\n\n  public constructor(\n    store: AppStore,\n    goToExtremaService: GoToExtremaService,\n    context: Context,\n    formatter?: FormatterService,\n  ) {\n    super(store);\n    this.goToExtremaService = goToExtremaService;\n    this.context = context;\n    this.formatter = formatter;\n  }\n\n  public dispose(): void {\n    super.dispose();\n    this.store.dispatch(hide());\n  }\n\n  public get state(): GoToExtremaState {\n    return this.store.getState().goToExtrema;\n  }\n\n  public toggle(state: TraceState): void {\n    if (state.empty) {\n      return;\n    }\n\n    // Get the active trace\n    const activeTrace = this.context.active;\n\n    // Check if the trace supports extrema navigation using the service\n    if (activeTrace && this.goToExtremaService.isExtremaNavigable(activeTrace)) {\n      // Get extrema targets from the plot class\n      const extremaTargets = activeTrace.getExtremaTargets();\n\n      // Apply formatting to target labels using FormatterService\n      const formattedTargets = this.formatTargetLabels(extremaTargets, state.layerId);\n\n      // Generate description based on current trace type\n      const description = this.generateDescription(state.traceType);\n\n      // Store the targets and description in the state\n      this.store.dispatch(show({ targets: formattedTargets, description }));\n\n      // Then change scope to show the modal\n      this.goToExtremaService.toggle(state);\n    }\n  }\n\n  public hide(): void {\n    this.store.dispatch(hide());\n\n    // Return scope to TRACE so plot navigation works again\n    this.goToExtremaService.returnToTraceScope();\n  }\n\n  public get activeContext(): Context {\n    return this.context;\n  }\n\n  public moveUp(): void {\n    const currentState = this.state;\n\n    if (currentState.targets.length > 0) {\n      const prevIndex = currentState.selectedIndex || 0;\n      const newIndex = Math.max(0, prevIndex - 1);\n      this.store.dispatch(updateSelectedIndex(newIndex));\n    }\n  }\n\n  public moveDown(): void {\n    const currentState = this.state;\n\n    if (currentState.targets.length > 0) {\n      // Include search option at index = targets.length\n      const maxIndex = currentState.targets.length;\n      const prevIndex = currentState.selectedIndex || 0;\n      const newIndex = Math.min(maxIndex, prevIndex + 1);\n      this.store.dispatch(updateSelectedIndex(newIndex));\n    }\n  }\n\n  public selectCurrent(): void {\n    const currentState = this.state;\n\n    if (currentState.targets.length > 0 && currentState.selectedIndex !== undefined) {\n      const target = currentState.targets[currentState.selectedIndex];\n      if (target) {\n        this.handleTargetSelect(target as ExtremaTarget);\n      }\n    }\n  }\n\n  private handleTargetSelect(target: ExtremaTarget): void {\n    // Get the active trace and navigate to the selected target\n    const activeTrace = this.context.active;\n\n    if (activeTrace && this.goToExtremaService.isExtremaNavigable(activeTrace)) {\n      try {\n        // First hide the modal to ensure proper scope change\n        this.store.dispatch(hide());\n\n        // Return to trace scope before navigation\n        this.goToExtremaService.returnToTraceScope();\n\n        // Then navigate to the target\n        activeTrace.navigateToExtrema(target);\n      } catch (error) {\n        // If navigation fails, ensure we're back in trace scope\n        this.goToExtremaService.returnToTraceScope();\n      }\n    } else {\n      this.goToExtremaService.returnToTraceScope();\n    }\n  }\n\n  /**\n   * Format extrema target labels by replacing raw xValues with formatted ones.\n   * When no custom formatter is configured the labels pass through unchanged.\n   */\n  private formatTargetLabels(targets: ExtremaTarget[], layerId: string): ExtremaTarget[] {\n    if (!this.formatter || !this.formatter.hasCustomFormatter(layerId, 'x')) {\n      return targets;\n    }\n\n    return targets.map((target) => {\n      if (target.xValue === undefined) {\n        return target;\n      }\n      const formatted = this.formatter!.formatSingleValue(target.xValue, layerId, 'x');\n      const raw = String(target.xValue);\n      if (formatted === raw) {\n        return target;\n      }\n      return {\n        ...target,\n        label: target.label.replaceAll(raw, formatted),\n      };\n    });\n  }\n\n  /**\n   * Generate description based on trace type\n   * @param traceType The type of the current trace\n   * @returns A description appropriate for the plot type\n   */\n  private generateDescription(traceType: TraceType): string {\n    return `Navigate to points of interest within the current ${traceType}`;\n  }\n\n  /**\n   * Get available X values from the active trace for search functionality\n   * @returns Array of X values that can be searched/navigated to\n   */\n  public getAvailableXValues(): XValue[] {\n    const activeTrace = this.context.active;\n    if (activeTrace && this.supportsXValueNavigation(activeTrace)) {\n      return (activeTrace as PlotWithXValues).getAvailableXValues();\n    }\n    return [];\n  }\n\n  /**\n   * Check if a trace supports extrema navigation\n   * @param trace The trace to check\n   * @returns True if the trace supports extrema navigation\n   */\n  public isExtremaNavigable(trace: unknown): boolean {\n    return this.goToExtremaService.isExtremaNavigable(trace);\n  }\n\n  /**\n   * Check if a plot supports X value navigation\n   * @param plot The plot to check\n   * @returns True if the plot supports getAvailableXValues\n   */\n  private supportsXValueNavigation(plot: unknown): plot is PlotWithXValues {\n    return plot !== null\n      && typeof plot === 'object'\n      && 'getAvailableXValues' in plot\n      && typeof (plot as any).getAvailableXValues === 'function';\n  }\n}\n\nexport default goToExtremaSlice.reducer;\n","import type { PayloadAction } from '@reduxjs/toolkit';\nimport type { HelpService } from '@service/help';\nimport type { HelpMenuItem } from '@type/help';\nimport type { AppStore } from '../store';\nimport { createSlice } from '@reduxjs/toolkit';\nimport { AbstractViewModel } from './viewModel';\n\n/**\n * State interface for the help menu containing available help items.\n */\nexport interface HelpMenuState {\n  items: HelpMenuItem[];\n}\n\nconst initialState: HelpMenuState = {\n  items: [],\n};\n\nconst helpSlice = createSlice({\n  name: 'help',\n  initialState,\n  reducers: {\n    setHelpItems(state, action: PayloadAction<HelpMenuItem[]>): void {\n      state.items = action.payload;\n    },\n    reset(): HelpMenuState {\n      return initialState;\n    },\n  },\n});\nconst { setHelpItems, reset } = helpSlice.actions;\n\n/**\n * ViewModel for managing the help menu and its display state.\n */\nexport class HelpViewModel extends AbstractViewModel<HelpMenuState> {\n  private readonly helpService: HelpService;\n\n  /**\n   * Creates a new HelpViewModel instance.\n   * @param store - The Redux store for state management\n   * @param helpService - Service for managing help menu functionality\n   */\n  public constructor(store: AppStore, helpService: HelpService) {\n    super(store);\n    this.helpService = helpService;\n  }\n\n  /**\n   * Toggles the visibility of the help menu.\n   */\n  public toggle(): void {\n    const items = this.helpService.getMenuItems();\n    this.store.dispatch(setHelpItems(items));\n    this.helpService.toggle();\n  }\n\n  /**\n   * Disposes the view model and resets help menu state.\n   */\n  public dispose(): void {\n    super.dispose();\n    this.store.dispatch(reset());\n  }\n\n  /**\n   * Gets the current state of the help menu.\n   * @returns The current HelpMenuState\n   */\n  public get state(): HelpMenuState {\n    return this.store.getState().help;\n  }\n}\n\nexport default helpSlice.reducer;\n","import type { CommandExecutor } from '@service/commandExecutor';\nimport type { BrailleViewModel } from '@state/viewModel/brailleViewModel';\nimport type { ChatViewModel } from '@state/viewModel/chatViewModel';\nimport type { CommandPaletteViewModel } from '@state/viewModel/commandPaletteViewModel';\nimport type { DisplayViewModel } from '@state/viewModel/displayViewModel';\nimport type { GoToExtremaViewModel } from '@state/viewModel/goToExtremaViewModel';\nimport type { HelpViewModel } from '@state/viewModel/helpViewModel';\nimport type { ReviewViewModel } from '@state/viewModel/reviewViewModel';\nimport type { Disposable } from '@type/disposable';\nimport type { RotorNavigationViewModel } from './rotorNavigationViewModel';\nimport type { SettingsViewModel } from './settingsViewModel';\nimport type { TextViewModel } from './textViewModel';\n\n/**\n * Interface mapping view model keys to their corresponding view model types.\n */\nexport interface ViewModelMap {\n  braille: BrailleViewModel;\n  chat: ChatViewModel;\n  commandExecutor: CommandExecutor;\n  commandPalette: CommandPaletteViewModel;\n  display: DisplayViewModel;\n  goToExtrema: GoToExtremaViewModel;\n  help: HelpViewModel;\n  review: ReviewViewModel;\n  settings: SettingsViewModel;\n  text: TextViewModel;\n  rotor: RotorNavigationViewModel;\n}\n\n/**\n * Registry for managing and accessing view models within a single MAIDR plot instance.\n * Each Controller owns its own ViewModelRegistry for state isolation.\n */\nexport class ViewModelRegistry implements Disposable {\n  private readonly viewModels = new Map<keyof ViewModelMap, ViewModelMap[keyof ViewModelMap]>();\n\n  /**\n   * Registers a view model instance with the registry.\n   * @param key - The key identifying the view model\n   * @param viewModel - The view model instance to register\n   */\n  public register<K extends keyof ViewModelMap>(key: K, viewModel: ViewModelMap[K]): void {\n    this.viewModels.set(key, viewModel);\n  }\n\n  /**\n   * Retrieves a registered view model by key.\n   * @param key - The key identifying the view model\n   * @returns The registered view model instance\n   * @throws Error if the view model is not found\n   */\n  public get<K extends keyof ViewModelMap>(key: K): ViewModelMap[K] {\n    if (!this.viewModels.has(key)) {\n      throw new Error(`Error while loading view model for ${key}`);\n    }\n    return this.viewModels.get(key)! as ViewModelMap[K];\n  }\n\n  /**\n   * Clears all registered view model references.\n   * Note: This does NOT dispose individual view models -- the Controller\n   * is responsible for disposing each view model before calling this.\n   */\n  public dispose(): void {\n    this.viewModels.clear();\n  }\n}\n","import type { PayloadAction } from '@reduxjs/toolkit';\nimport type { ReviewService } from '@service/review';\nimport type { AppStore } from '@state/store';\nimport type { TraceState } from '@type/state';\nimport { createSlice } from '@reduxjs/toolkit';\nimport { AbstractViewModel } from './viewModel';\n\n/**\n * State interface for the review feature containing the current review value.\n */\nexport interface ReviewState {\n  value: string;\n}\n\nconst initialState: ReviewState = {\n  value: '',\n};\n\nconst reviewSlice = createSlice({\n  name: 'review',\n  initialState,\n  reducers: {\n    update(state, action: PayloadAction<string>): void {\n      state.value = action.payload;\n    },\n    reset(): ReviewState {\n      return initialState;\n    },\n  },\n});\nconst { update, reset } = reviewSlice.actions;\n\n/**\n * ViewModel for managing the review feature that displays plot data summaries.\n */\nexport class ReviewViewModel extends AbstractViewModel<ReviewState> {\n  private readonly reviewService: ReviewService;\n\n  /**\n   * Creates a new ReviewViewModel instance.\n   * @param store - The Redux store for state management\n   * @param reviewService - Service for managing review functionality\n   */\n  public constructor(store: AppStore, reviewService: ReviewService) {\n    super(store);\n    this.reviewService = reviewService;\n    this.registerListener();\n  }\n\n  /**\n   * Disposes the view model and resets review state.\n   */\n  public dispose(): void {\n    super.dispose();\n    this.store.dispatch(reset());\n  }\n\n  /**\n   * Registers event listeners for review service changes.\n   */\n  private registerListener(): void {\n    this.disposables.push(this.reviewService.onChange((e) => {\n      this.store.dispatch(update(e.value));\n    }));\n  }\n\n  /**\n   * Gets the current state of the review feature.\n   * @returns The current ReviewState\n   */\n  public get state(): ReviewState {\n    return this.store.getState().review;\n  }\n\n  /**\n   * Toggles the visibility of the review modal.\n   * @param state - The current trace state\n   */\n  public toggle(state: TraceState): void {\n    this.reviewService.toggle(state);\n  }\n}\n\nexport default reviewSlice.reducer;\n","import type { PayloadAction } from '@reduxjs/toolkit';\nimport type { RotorNavigationService } from '@service/rotor';\nimport type { AppStore } from '@state/store';\nimport { createSlice } from '@reduxjs/toolkit';\nimport { AbstractViewModel } from '@state/viewModel/viewModel';\n\n/**\n * State interface for rotor navigation containing the current rotor value.\n */\nexport interface RotorState {\n  rotor_value: string | null;\n}\nconst initialState: RotorState = {\n  rotor_value: '',\n};\nconst rotorNavigationSlice = createSlice({\n  name: 'rotorNavigation',\n  initialState,\n  reducers: {\n    show(): RotorState {\n      return {\n        rotor_value: '',\n      };\n    },\n    setValue(state, action: PayloadAction<string | null>) {\n      state.rotor_value = action.payload;\n    },\n  },\n});\nexport const { setValue } = rotorNavigationSlice.actions;\n/**\n * ViewModel for managing rotor-based navigation through plot elements.\n */\nexport class RotorNavigationViewModel extends AbstractViewModel<RotorState> {\n  private readonly rotorService: RotorNavigationService;\n\n  /**\n   * Creates a new RotorNavigationViewModel instance.\n   * @param store - The Redux store for state management\n   * @param rotorService - Service for handling rotor navigation logic\n   */\n  public constructor(\n    store: AppStore,\n    rotorService: RotorNavigationService,\n  ) {\n    super(store);\n    this.rotorService = rotorService;\n  }\n\n  /**\n   * Gets the current state of rotor navigation.\n   * @returns The current RotorState\n   */\n  public get state(): RotorState {\n    return this.store.getState().rotor;\n  }\n\n  /**\n   * Moves to the next navigation unit in the rotor.\n   */\n  public moveToNextNavUnit(): void {\n    const curr_mode = this.rotorService.moveToNextRotorUnit();\n    this.store.dispatch(setValue(`${curr_mode}`));\n  }\n\n  /**\n   * Moves to the previous navigation unit in the rotor.\n   */\n  public moveToPrevNavUnit(): void {\n    const curr_mode = this.rotorService.moveToPrevRotorUnit();\n    this.store.dispatch(setValue(`${curr_mode}`));\n  }\n\n  /**\n   * Moves up within the current rotor navigation unit.\n   */\n  public moveUp(): void {\n    this.store.dispatch(setValue(this.rotorService.moveUp()));\n  }\n\n  /**\n   * Moves left within the current rotor navigation unit.\n   */\n  public moveLeft(): void {\n    this.store.dispatch(setValue(this.rotorService.moveLeft()));\n  }\n\n  /**\n   * Moves down within the current rotor navigation unit.\n   */\n  public moveDown(): void {\n    this.store.dispatch(setValue(this.rotorService.moveDown()));\n  }\n\n  /**\n   * Moves right within the current rotor navigation unit.\n   */\n  public moveRight(): void {\n    this.store.dispatch(setValue(this.rotorService.moveRight()));\n  }\n}\n\nexport default rotorNavigationSlice.reducer;\n","import type { Llm, LlmVersion } from './llm';\n\n/**\n * ARIA live region politeness level for screen reader announcements.\n */\nexport type AriaMode = 'assertive' | 'polite';\n\n/**\n * User expertise level for tailoring AI chat responses.\n */\nexport type ExpertiseLevel = 'basic' | 'intermediate' | 'advanced' | 'custom';\n\n/**\n * Mouse hover interaction mode for plot navigation.\n */\nexport type HoverMode = 'off' | 'pointermove' | 'click';\n\n/**\n * Configuration settings for a specific LLM model.\n */\nexport interface LlmModelSettings {\n  name: string;\n  apiKey: string;\n  enabled: boolean;\n  version: LlmVersion;\n}\n\n/**\n * LLM-specific settings including expertise level and model configurations.\n */\nexport interface LlmSettings {\n  expertiseLevel: ExpertiseLevel;\n  customExpertise?: string;\n  customInstruction: string;\n  models: Record<Llm, LlmModelSettings>;\n}\n\n/**\n * General application settings for audio, visual, and accessibility features.\n */\nexport interface GeneralSettings {\n  volume: number;\n  highlightColor: string;\n  highContrastMode: boolean;\n  highContrastLevels: number;\n  highContrastLightColor: string;\n  highContrastDarkColor: string;\n  brailleDisplaySize: number;\n  minFrequency: number;\n  maxFrequency: number;\n  autoplayDuration: number;\n  ariaMode: AriaMode;\n  hoverMode: HoverMode;\n}\n\n/**\n * Root settings object containing all user preferences and configurations.\n */\nexport interface Settings {\n  general: GeneralSettings;\n  llm: LlmSettings;\n}\n\nexport const DEFAULT_SETTINGS: Settings = {\n  general: {\n    volume: 50,\n    highlightColor: '#03c809',\n    highContrastMode: false,\n    highContrastLevels: 2,\n    highContrastLightColor: '#ffffff',\n    highContrastDarkColor: '#000000',\n    brailleDisplaySize: 32,\n    minFrequency: 200,\n    maxFrequency: 1000,\n    autoplayDuration: 4000,\n    ariaMode: 'assertive',\n    hoverMode: 'pointermove',\n  },\n  llm: {\n    expertiseLevel: 'basic',\n    customInstruction: '',\n    models: {\n      OPENAI: {\n        enabled: false,\n        apiKey: '',\n        name: 'OpenAI',\n        version: 'gpt-4o',\n      },\n      ANTHROPIC_CLAUDE: {\n        enabled: false,\n        apiKey: '',\n        name: 'Anthropic Claude',\n        version: 'claude-3-7-sonnet-latest',\n      },\n      GOOGLE_GEMINI: {\n        enabled: false,\n        apiKey: '',\n        name: 'Google Gemini',\n        version: 'gemini-2.0-flash',\n      },\n    },\n  },\n};\n","import type { PayloadAction } from '@reduxjs/toolkit';\nimport type { SettingsService } from '@service/settings';\nimport type { Settings } from '@type/settings';\nimport type { AppStore } from '../store';\nimport { createSlice } from '@reduxjs/toolkit';\nimport { DEFAULT_SETTINGS } from '@type/settings';\nimport { AbstractViewModel } from './viewModel';\n\n/**\n * State interface for application settings, extending the base Settings type.\n */\nexport interface SettingsState extends Settings {}\n\nconst initialState = DEFAULT_SETTINGS;\n\nconst settingsSlice = createSlice({\n  name: 'settings',\n  initialState,\n  reducers: {\n    update: (state, action: PayloadAction<Settings>): SettingsState => {\n      return { ...state, ...action.payload };\n    },\n    reset: (): SettingsState => {\n      return initialState;\n    },\n  },\n});\nconst { update, reset } = settingsSlice.actions;\n\n/**\n * ViewModel for managing application settings and configuration.\n */\nexport class SettingsViewModel extends AbstractViewModel<SettingsState> {\n  private readonly settingsService: SettingsService;\n\n  /**\n   * Creates a new SettingsViewModel instance and loads initial settings.\n   * @param store - The Redux store for state management\n   * @param settingsService - Service for handling settings persistence and logic\n   */\n  public constructor(store: AppStore, settingsService: SettingsService) {\n    super(store);\n    this.settingsService = settingsService;\n    this.load();\n  }\n\n  /**\n   * Disposes the view model and resets settings state.\n   */\n  public dispose(): void {\n    super.dispose();\n    this.store.dispatch(reset());\n  }\n\n  /**\n   * Gets the current settings state.\n   * @returns The current SettingsState\n   */\n  public get state(): SettingsState {\n    return this.store.getState().settings;\n  }\n\n  /**\n   * Loads settings from storage and updates the state.\n   */\n  public load(): void {\n    const settings = this.settingsService.loadSettings();\n    this.store.dispatch(update(settings));\n  }\n\n  /**\n   * Saves settings, updates state, and closes the settings modal.\n   * @param settings - The settings to save\n   */\n  public saveAndClose(settings: Settings): void {\n    this.settingsService.saveSettings(settings);\n    this.store.dispatch(update(settings));\n    this.toggle();\n  }\n\n  /**\n   * Saves settings and updates the state without closing the modal.\n   * @param settings - The settings to save\n   */\n  public saveSettings(settings: Settings): void {\n    this.settingsService.saveSettings(settings);\n    this.store.dispatch(update(settings));\n  }\n\n  /**\n   * Resets settings to default values and updates the state.\n   */\n  public reset(): void {\n    const settings = this.settingsService.resetSettings();\n    this.store.dispatch(update(settings));\n  }\n\n  /**\n   * Toggles the visibility of the settings modal.\n   */\n  public toggle(): void {\n    this.settingsService.toggle();\n  }\n}\n\nexport default settingsSlice.reducer;\n","import type { PayloadAction } from '@reduxjs/toolkit';\nimport type { AudioService } from '@service/audio';\nimport type { AutoplayService } from '@service/autoplay';\nimport type { NotificationService } from '@service/notification';\nimport type { TextService } from '@service/text';\nimport type { PlotState } from '@type/state';\nimport type { AppStore } from '../store';\nimport { createSlice } from '@reduxjs/toolkit';\nimport { AbstractViewModel } from './viewModel';\n\n/**\n * State interface for text display and announcement functionality.\n */\nexport interface TextState {\n  enabled: boolean;\n  announce: boolean;\n  value: string;\n  /**\n   * Monotonic counter that increments on every update (including same-text updates).\n   *  Used by the View to detect re-announcement requests without invisible characters.\n   */\n  revision: number;\n  message: string | null;\n}\n\nconst initialState: TextState = {\n  enabled: true,\n  announce: true,\n  value: '',\n  revision: 0,\n  message: null,\n};\n\nconst textSlice = createSlice({\n  name: 'text',\n  initialState,\n  reducers: {\n    update(state, action: PayloadAction<string>): void {\n      state.value = action.payload;\n      state.revision += 1;\n    },\n    announceText(state, action: PayloadAction<boolean>): void {\n      state.announce = action.payload;\n    },\n    toggle(state, action: PayloadAction<boolean>): void {\n      state.enabled = action.payload;\n    },\n    notify(state, action: PayloadAction<string>): void {\n      state.message = action.payload;\n    },\n    clearMessage(state): void {\n      state.message = null;\n    },\n    reset(): TextState {\n      return initialState;\n    },\n  },\n});\nconst { update, announceText, toggle, notify, clearMessage, reset } = textSlice.actions;\n\n/**\n * ViewModel for managing text display, announcements, and notifications.\n */\nexport class TextViewModel extends AbstractViewModel<TextState> {\n  private readonly audioService: AudioService;\n  private readonly textService: TextService;\n\n  /**\n   * Creates a new TextViewModel instance and registers event listeners.\n   * @param store - The Redux store for state management\n   * @param text - Service for managing text formatting and updates\n   * @param notification - Service for handling notification messages\n   * @param autoplay - Service for managing autoplay functionality\n   * @param audio - Audio service for playing warning tones\n   */\n  public constructor(\n    store: AppStore,\n    text: TextService,\n    notification: NotificationService,\n    autoplay: AutoplayService,\n    audio: AudioService,\n  ) {\n    super(store);\n    this.audioService = audio;\n    this.textService = text;\n    this.registerListeners(notification, autoplay);\n  }\n\n  /**\n   * Disposes the view model and resets text state.\n   */\n  public dispose(): void {\n    super.dispose();\n    this.store.dispatch(reset());\n  }\n\n  /**\n   * Registers event listeners for text, notification, and autoplay services.\n   * @param notification - The notification service to listen to\n   * @param autoplay - The autoplay service to listen to\n   */\n  private registerListeners(notification: NotificationService, autoplay: AutoplayService): void {\n    this.disposables.push(this.textService.onChange((e) => {\n      this.update(e.value);\n    }));\n\n    this.disposables.push(this.textService.onNavigation((e) => {\n      if (e.type === 'first_navigation') {\n        this.setAnnounce(true);\n      }\n    }));\n\n    this.disposables.push(notification.onChange((e) => {\n      this.notify(e.value);\n    }));\n\n    this.disposables.push(autoplay.onChange((e) => {\n      switch (e.type) {\n        case 'start':\n          this.setAnnounce(false);\n          break;\n        case 'stop':\n          this.setAnnounce(true);\n          break;\n      }\n    }));\n  }\n\n  /**\n   * Gets the current text state.\n   * @returns The current TextState\n   */\n  public get state(): TextState {\n    return this.store.getState().text;\n  }\n\n  /**\n   * Toggles the text display feature on or off.\n   */\n  public toggle(): void {\n    const enabled = this.textService.toggle();\n    this.store.dispatch(toggle(enabled));\n  }\n\n  /**\n   * Updates the displayed text with formatted content.\n   * Each dispatch increments a revision counter in the Redux state, so the View\n   * always receives a new state — even when the text is identical. This allows\n   * the View to force a screen-reader re-announcement by re-mounting the alert\n   * element with a new React key, without relying on invisible Unicode characters.\n   * @param text - The text or plot state to display\n   */\n  public update(text: string | PlotState): void {\n    const formattedText = this.textService.format(text);\n    this.store.dispatch(update(formattedText));\n    this.store.dispatch(clearMessage());\n  }\n\n  /**\n   * Displays a notification message to the user.\n   * @param message - The message to display\n   */\n  public notify(message: string): void {\n    this.store.dispatch(notify(message));\n  }\n\n  /**\n   * Sets whether text should be announced by screen readers.\n   * @param enabled - Whether to enable text announcements\n   */\n  public setAnnounce(enabled: boolean): void {\n    this.store.dispatch(announceText(enabled));\n  }\n\n  /**\n   * Warns the user if text mode is off by announcing a message and playing a warning tone.\n   * @returns True if text mode is off and the warning was issued, false otherwise\n   */\n  public warnIfTextOff(): boolean {\n    if (!this.textService.isOff()) {\n      return false;\n    }\n    this.notify('Text mode is off. To enable, press the T key.');\n    this.audioService.playWarningTone();\n    return true;\n  }\n}\n\nexport default textSlice.reducer;\n","import type { Subplot } from '@model/plot';\n\n/**\n * Pre-computed visual layout information for a multi-panel figure.\n *\n * Because the ordering of subplots in the MAIDR JSON data array does not always\n * match the visual (top-to-bottom, left-to-right) ordering in the SVG, we must\n * inspect the DOM at initialization time to determine the true visual positions.\n *\n * This data is computed once by {@link resolveSubplotLayout} (called from the\n * Controller) and then passed into the Figure, keeping the Model layer free of\n * direct DOM access.\n */\nexport interface SubplotLayout {\n  /**\n   * Maps each data position `\"row,col\"` to its 1-based visual display index\n   * (top-left = 1, reading order).\n   */\n  visualOrderMap: Map<string, number>;\n\n  /**\n   * The data-array row index that corresponds to the visually top-left subplot.\n   */\n  topLeftRow: number;\n\n  /**\n   * Whether pressing the Up arrow should decrease the data row index.\n   *\n   * This is `true` when data row 0 is already at the visual top (lower Y),\n   * because {@link MovableGrid} maps UPWARD to row + 1 by default.\n   */\n  invertVertical: boolean;\n\n  /**\n   * Total number of `<g id=\"axes_*\">` groups found in the SVG.\n   * Used by Figure.highlight to decide whether to show subplot outlines.\n   */\n  totalAxesCount: number;\n\n  /**\n   * Pre-resolved SVG axes elements keyed by `\"row,col\"`.\n   * Each subplot's axes `<g>` is looked up once and stored here so that\n   * the Figure.highlight getter needs no runtime DOM access.\n   */\n  axesElements: Map<string, SVGElement | null>;\n}\n\n/**\n * Position entry used internally during visual-order computation.\n */\ninterface AxesPosition {\n  row: number;\n  col: number;\n  x: number;\n  y: number;\n}\n\n// ---------------------------------------------------------------------------\n// Public API\n// ---------------------------------------------------------------------------\n\n/**\n * Inspects the DOM to resolve the visual layout of all subplots in a figure.\n *\n * This is the **only** place where subplot-related DOM queries happen.\n * The result is a plain data object that can be passed into the Figure model\n * without violating MVVC layer boundaries.\n *\n * @param subplots - The 2D subplot array from the Figure (already constructed).\n * @returns A {@link SubplotLayout} containing pre-computed visual ordering,\n *          starting position, inversion flag, and axes element references.\n */\nexport function resolveSubplotLayout(subplots: Subplot[][]): SubplotLayout {\n  const axesElements = collectAxesElements(subplots);\n  const positions = collectAxesPositions(subplots, axesElements);\n  const totalAxesCount = document.querySelectorAll('g[id^=\"axes_\"]').length;\n\n  if (positions.length === 0) {\n    return buildFallbackLayout(subplots, totalAxesCount, axesElements);\n  }\n\n  const sorted = sortByVisualPosition(positions);\n  const visualOrderMap = buildOrderMap(sorted);\n  const topLeftRow = sorted[0].row;\n  const invertVertical = detectInversion(positions, subplots.length);\n\n  return { visualOrderMap, topLeftRow, invertVertical, totalAxesCount, axesElements };\n}\n\n// ---------------------------------------------------------------------------\n// Internal helpers — each function has a single, well-defined purpose.\n// ---------------------------------------------------------------------------\n\n/**\n * Finds the parent `<g id=\"axes_*\">` SVG element for a given subplot.\n *\n * Tries two strategies:\n * 1. Walk up from the subplot's own selector element (`subplot.selector`).\n * 2. Walk up from the first layer's selector string (for facet-style plots\n *    where the subplot itself has no selector).\n *\n * @param highlightElement - The subplot's own SVG highlight element (may be null).\n * @param layerSelector    - CSS selector string from the first layer (may be null).\n * @returns The matching `<g>` element, or `null` if not found.\n */\nfunction findAxesElement(\n  highlightElement: SVGElement | null,\n  layerSelector: string | null,\n): SVGElement | null {\n  if (highlightElement) {\n    const axes = highlightElement.closest('g[id^=\"axes_\"]') as SVGElement | null;\n    if (axes)\n      return axes;\n  }\n\n  if (layerSelector) {\n    const el = document.querySelector(layerSelector) as SVGElement | null;\n    if (el) {\n      const axes = el.closest('g[id^=\"axes_\"]') as SVGElement | null;\n      if (axes)\n        return axes;\n    }\n  }\n\n  return null;\n}\n\n/**\n * Resolves the axes element for every subplot and returns them in a map\n * keyed by `\"row,col\"`.\n */\nfunction collectAxesElements(subplots: Subplot[][]): Map<string, SVGElement | null> {\n  const map = new Map<string, SVGElement | null>();\n\n  for (let r = 0; r < subplots.length; r++) {\n    for (let c = 0; c < subplots[r].length; c++) {\n      const subplot = subplots[r][c];\n      const axesEl = findAxesElement(\n        subplot.getHighlightElement(),\n        subplot.getLayerSelector(),\n      );\n      map.set(`${r},${c}`, axesEl);\n    }\n  }\n\n  return map;\n}\n\n/**\n * Reads bounding-box positions for every subplot that has a resolved axes element.\n */\nfunction collectAxesPositions(\n  subplots: Subplot[][],\n  axesElements: Map<string, SVGElement | null>,\n): AxesPosition[] {\n  const positions: AxesPosition[] = [];\n\n  for (let r = 0; r < subplots.length; r++) {\n    for (let c = 0; c < subplots[r].length; c++) {\n      const axesEl = axesElements.get(`${r},${c}`);\n      if (axesEl) {\n        const bbox = axesEl.getBoundingClientRect();\n        positions.push({ row: r, col: c, y: bbox.top, x: bbox.left });\n      }\n    }\n  }\n\n  return positions;\n}\n\n/**\n * Sorts position entries in visual reading order: top-to-bottom (ascending Y),\n * then left-to-right (ascending X).\n */\nfunction sortByVisualPosition(entries: AxesPosition[]): AxesPosition[] {\n  return [...entries].sort((a, b) => a.y - b.y || a.x - b.x);\n}\n\n/**\n * Creates a 1-based visual index map from a sorted array of positions.\n */\nfunction buildOrderMap(sorted: AxesPosition[]): Map<string, number> {\n  const map = new Map<string, number>();\n  for (let i = 0; i < sorted.length; i++) {\n    map.set(`${sorted[i].row},${sorted[i].col}`, i + 1);\n  }\n  return map;\n}\n\n/**\n * Determines whether vertical navigation directions should be inverted.\n *\n * If data row 0 has a *lower* screen Y than data row 1 (i.e. row 0 is\n * visually above row 1), then the data is ordered top-to-bottom. Because\n * {@link MovableGrid} maps `UPWARD` to `row + 1`, we must invert so that\n * pressing Up actually moves toward lower row indices (visually upward).\n */\nfunction detectInversion(entries: AxesPosition[], numRows: number): boolean {\n  if (numRows <= 1)\n    return false;\n\n  const row0 = entries.find(e => e.row === 0);\n  const row1 = entries.find(e => e.row === 1);\n\n  if (row0 && row1) {\n    return row0.y < row1.y;\n  }\n  return false;\n}\n\n/**\n * Returns a default layout when no DOM elements are found (fallback).\n * Uses data-array order directly: index 1 = (0,0), no inversion.\n */\nfunction buildFallbackLayout(\n  subplots: Subplot[][],\n  totalAxesCount: number,\n  axesElements: Map<string, SVGElement | null>,\n): SubplotLayout {\n  const visualOrderMap = new Map<string, number>();\n  let idx = 1;\n  for (let r = 0; r < subplots.length; r++) {\n    for (let c = 0; c < subplots[r].length; c++) {\n      visualOrderMap.set(`${r},${c}`, idx++);\n    }\n  }\n\n  return {\n    visualOrderMap,\n    topLeftRow: 0,\n    invertVertical: false,\n    totalAxesCount,\n    axesElements,\n  };\n}\n","import type { AppStore } from '@state/store';\nimport type { Disposable } from '@type/disposable';\nimport type { Maidr } from '@type/grammar';\nimport { Context } from '@model/context';\nimport { Figure } from '@model/plot';\nimport { AudioService } from '@service/audio';\nimport { AutoplayService } from '@service/autoplay';\nimport { BrailleService } from '@service/braille';\nimport { ChatService } from '@service/chat';\nimport { CommandExecutor } from '@service/commandExecutor';\nimport { CommandPaletteService } from '@service/commandPalette';\nimport { DisplayService } from '@service/display';\nimport { FormatterService } from '@service/formatter';\nimport { GoToExtremaService } from '@service/goToExtrema';\nimport { HelpService } from '@service/help';\nimport { HighContrastService } from '@service/highContrast';\nimport { HighlightService } from '@service/highlight';\nimport { KeybindingService, Mousebindingservice } from '@service/keybinding';\nimport { NotificationService } from '@service/notification';\nimport { ReviewService } from '@service/review';\nimport { RotorNavigationService } from '@service/rotor';\nimport { SettingsService } from '@service/settings';\nimport { LocalStorageService } from '@service/storage';\nimport { TextService } from '@service/text';\nimport { BrailleViewModel } from '@state/viewModel/brailleViewModel';\nimport { ChatViewModel } from '@state/viewModel/chatViewModel';\nimport { CommandPaletteViewModel } from '@state/viewModel/commandPaletteViewModel';\nimport { DisplayViewModel } from '@state/viewModel/displayViewModel';\nimport { GoToExtremaViewModel } from '@state/viewModel/goToExtremaViewModel';\nimport { HelpViewModel } from '@state/viewModel/helpViewModel';\nimport { ViewModelRegistry } from '@state/viewModel/registry';\nimport { ReviewViewModel } from '@state/viewModel/reviewViewModel';\nimport { RotorNavigationViewModel } from '@state/viewModel/rotorNavigationViewModel';\nimport { SettingsViewModel } from '@state/viewModel/settingsViewModel';\nimport { TextViewModel } from '@state/viewModel/textViewModel';\nimport { resolveSubplotLayout } from '@util/subplotLayout';\n\n/**\n * Main controller class that orchestrates all services, view models, and interactions for the MAIDR application.\n */\nexport class Controller implements Disposable {\n  private readonly figure: Figure;\n  private readonly context: Context;\n\n  private readonly displayService: DisplayService;\n  private readonly notificationService: NotificationService;\n  private readonly settingsService: SettingsService;\n  private readonly formatterService: FormatterService;\n\n  private readonly audioService: AudioService;\n  private readonly brailleService: BrailleService;\n  private readonly goToExtremaService: GoToExtremaService;\n  private readonly textService: TextService;\n  private readonly reviewService: ReviewService;\n  private readonly rotorNavigationService: RotorNavigationService;\n\n  private readonly autoplayService: AutoplayService;\n  private readonly highContrastService: HighContrastService;\n  private readonly highlightService: HighlightService;\n  private readonly helpService: HelpService;\n  private readonly chatService: ChatService;\n\n  private readonly textViewModel: TextViewModel;\n  private readonly brailleViewModel: BrailleViewModel;\n  private readonly goToExtremaViewModel: GoToExtremaViewModel;\n  private readonly reviewViewModel: ReviewViewModel;\n  private readonly displayViewModel: DisplayViewModel;\n  private readonly helpViewModel: HelpViewModel;\n  private readonly chatViewModel: ChatViewModel;\n  private readonly settingsViewModel: SettingsViewModel;\n  private readonly rotorNavigationViewModel: RotorNavigationViewModel;\n  private readonly commandPaletteViewModel: CommandPaletteViewModel;\n\n  private readonly keybinding: KeybindingService;\n  private readonly mousebinding: Mousebindingservice;\n  private readonly commandExecutor: CommandExecutor;\n  private readonly viewModelRegistry: ViewModelRegistry;\n\n  /**\n   * Initializes the controller with all necessary services, view models, and bindings.\n   * @param maidr - The MAIDR configuration object containing plot data and settings\n   * @param plot - The HTML element containing the plot to be made accessible\n   * @param store - The Redux store instance for this plot's state management\n   */\n  public constructor(maidr: Maidr, plot: HTMLElement, store: AppStore) {\n    this.viewModelRegistry = new ViewModelRegistry();\n    this.figure = new Figure(maidr);\n    this.figure.applyLayout(resolveSubplotLayout(this.figure.subplots));\n    this.context = new Context(this.figure);\n\n    this.notificationService = new NotificationService();\n    this.formatterService = new FormatterService(maidr);\n    this.textService = new TextService(this.notificationService, this.formatterService);\n    this.displayService = new DisplayService(this.context, plot, this.textService);\n    this.settingsService = new SettingsService(\n      new LocalStorageService(),\n      this.displayService,\n    );\n    this.audioService = new AudioService(this.notificationService, this.settingsService, this.context.state);\n\n    this.brailleService = new BrailleService(\n      this.context,\n      this.notificationService,\n      this.displayService,\n      this.settingsService,\n    );\n    this.goToExtremaService = new GoToExtremaService(\n      this.context,\n      this.displayService,\n    );\n    this.reviewService = new ReviewService(\n      this.notificationService,\n      this.displayService,\n      this.textService,\n    );\n\n    this.autoplayService = new AutoplayService(this.context, this.notificationService, this.settingsService);\n    this.highContrastService = new HighContrastService(\n      this.settingsService,\n      this.notificationService,\n      this.displayService,\n      this.figure,\n      this.context,\n    );\n    this.highlightService = new HighlightService(this.settingsService);\n    this.helpService = new HelpService(this.context, this.displayService);\n    this.chatService = new ChatService(\n      this.displayService,\n      this.textService,\n      maidr,\n    );\n\n    this.textViewModel = new TextViewModel(\n      store,\n      this.textService,\n      this.notificationService,\n      this.autoplayService,\n      this.audioService,\n    );\n    this.brailleViewModel = new BrailleViewModel(store, this.brailleService);\n    this.goToExtremaViewModel = new GoToExtremaViewModel(\n      store,\n      this.goToExtremaService,\n      this.context,\n      this.formatterService,\n    );\n    this.reviewViewModel = new ReviewViewModel(store, this.reviewService);\n    this.displayViewModel = new DisplayViewModel(store, this.displayService);\n    this.helpViewModel = new HelpViewModel(store, this.helpService);\n    this.settingsViewModel = new SettingsViewModel(store, this.settingsService);\n\n    this.rotorNavigationService = new RotorNavigationService(\n      this.context,\n      this.textService,\n    );\n    this.rotorNavigationViewModel = new RotorNavigationViewModel(\n      store,\n      this.rotorNavigationService,\n    );\n    this.chatViewModel = new ChatViewModel(\n      store,\n      this.chatService,\n      this.audioService,\n    );\n\n    const commandPaletteService = new CommandPaletteService(\n      this.context,\n      this.displayService,\n    );\n    this.commandPaletteViewModel = new CommandPaletteViewModel(\n      store,\n      commandPaletteService,\n    );\n\n    this.keybinding = new KeybindingService({\n      context: this.context,\n\n      audioService: this.audioService,\n      autoplayService: this.autoplayService,\n      brailleService: this.brailleService,\n      displayService: this.displayService,\n      highContrastService: this.highContrastService,\n      highlightService: this.highlightService,\n      notificationService: this.notificationService,\n      rotorNavigationService: this.rotorNavigationService,\n      settingsService: this.settingsService,\n      textService: this.textService,\n\n      brailleViewModel: this.brailleViewModel,\n      chatViewModel: this.chatViewModel,\n      commandPaletteViewModel: this.commandPaletteViewModel,\n      goToExtremaViewModel: this.goToExtremaViewModel,\n      helpViewModel: this.helpViewModel,\n      reviewViewModel: this.reviewViewModel,\n      settingsViewModel: this.settingsViewModel,\n      textViewModel: this.textViewModel,\n      rotorNavigationViewModel: this.rotorNavigationViewModel,\n    });\n    this.mousebinding = new Mousebindingservice(\n      {\n        context: this.context,\n\n        audioService: this.audioService,\n        autoplayService: this.autoplayService,\n        brailleService: this.brailleService,\n        displayService: this.displayService,\n        highContrastService: this.highContrastService,\n        highlightService: this.highlightService,\n        notificationService: this.notificationService,\n        rotorNavigationService: this.rotorNavigationService,\n        settingsService: this.settingsService,\n        textService: this.textService,\n\n        brailleViewModel: this.brailleViewModel,\n        chatViewModel: this.chatViewModel,\n        commandPaletteViewModel: this.commandPaletteViewModel,\n        goToExtremaViewModel: this.goToExtremaViewModel,\n        helpViewModel: this.helpViewModel,\n        reviewViewModel: this.reviewViewModel,\n        settingsViewModel: this.settingsViewModel,\n        textViewModel: this.textViewModel,\n        rotorNavigationViewModel: this.rotorNavigationViewModel,\n      },\n      this.settingsService,\n      this.displayService,\n    );\n\n    this.commandExecutor = new CommandExecutor(\n      {\n        context: this.context,\n\n        audioService: this.audioService,\n        autoplayService: this.autoplayService,\n        brailleService: this.brailleService,\n        displayService: this.displayService,\n        highContrastService: this.highContrastService,\n        highlightService: this.highlightService,\n        notificationService: this.notificationService,\n        rotorNavigationService: this.rotorNavigationService,\n        settingsService: this.settingsService,\n        textService: this.textService,\n\n        brailleViewModel: this.brailleViewModel,\n        chatViewModel: this.chatViewModel,\n        commandPaletteViewModel: this.commandPaletteViewModel,\n        goToExtremaViewModel: this.goToExtremaViewModel,\n        helpViewModel: this.helpViewModel,\n        reviewViewModel: this.reviewViewModel,\n        settingsViewModel: this.settingsViewModel,\n        textViewModel: this.textViewModel,\n        rotorNavigationViewModel: this.rotorNavigationViewModel,\n      },\n      this.context.scope,\n    );\n\n    // Inject command execution callback into CommandPaletteViewModel (deferred due to circular dependency)\n    this.commandPaletteViewModel.setExecuteCommandCallback(\n      commandKey => this.commandExecutor.executeCommand(commandKey),\n    );\n\n    this.registerViewModels();\n    this.registerObservers();\n    this.keybinding.register(this.context.scope);\n    this.mousebinding.registerEvents();\n  }\n\n  /**\n   * Announces the initial instruction to screen readers using a live region.\n   */\n  public announceInitialInstruction(): void {\n    const instruction = this.displayService.getInstruction(false);\n    // Use textViewModel.update() so the revision counter is bumped,\n    // which forces the View to re-mount the role=\"alert\" element and\n    // triggers a screen-reader announcement.\n    this.textViewModel.update(instruction);\n  }\n\n  /**\n   * Retrieves the initial instruction text for the plot.\n   * @returns The initial instruction text\n   */\n  public getInitialInstruction(): string {\n    return this.displayService.getInstruction(false);\n  }\n\n  /**\n   * Displays the initial instruction in the text view without announcing it to screen readers.\n   */\n  public showInitialInstructionInText(): void {\n    const text = this.displayService.getInstruction(false);\n    // Keep initial instruction visual-only; enable announce later on first nav update\n    this.textViewModel.setAnnounce(false);\n    this.textViewModel.update(text);\n  }\n\n  /**\n   * Initialize high contrast mode if enabled in settings.\n   * Call this after the Controller is fully set up and will persist (not the throwaway init).\n   */\n  public initializeHighContrast(): void {\n    this.highContrastService.initializeHighContrast();\n  }\n\n  /**\n   * Suspend high contrast mode visually (restore original colors).\n   * Call this on blur to return the chart to its original appearance.\n   */\n  public suspendHighContrast(): void {\n    this.highContrastService.suspendHighContrast();\n  }\n\n  /**\n   * Cleans up all services, view models, and event listeners.\n   */\n  public dispose(): void {\n    this.keybinding.unregister();\n    this.mousebinding.dispose();\n    this.commandExecutor.dispose();\n\n    this.viewModelRegistry.dispose();\n    this.settingsViewModel.dispose();\n    this.chatViewModel.dispose();\n    this.helpViewModel.dispose();\n    this.displayViewModel.dispose();\n    this.goToExtremaViewModel.dispose();\n    this.reviewViewModel.dispose();\n    this.brailleViewModel.dispose();\n    this.textViewModel.dispose();\n    this.commandPaletteViewModel.dispose();\n    this.rotorNavigationViewModel.dispose();\n\n    this.highContrastService.dispose();\n    this.highlightService.dispose();\n    this.autoplayService.dispose();\n\n    this.textService.dispose();\n    this.reviewService.dispose();\n    this.brailleService.dispose();\n    this.audioService.dispose();\n    this.formatterService.dispose();\n\n    this.settingsService.dispose();\n    this.notificationService.dispose();\n    this.displayService.dispose();\n    this.context.dispose();\n    this.figure.dispose();\n  }\n\n  /**\n   * Returns the context value for React dependency injection.\n   * Used by the React component tree to access view models and command executor.\n   */\n  public getContextValue(): { viewModelRegistry: ViewModelRegistry; commandExecutor: CommandExecutor } {\n    return {\n      viewModelRegistry: this.viewModelRegistry,\n      commandExecutor: this.commandExecutor,\n    };\n  }\n\n  /**\n   * Registers all view models with this controller's registry.\n   */\n  private registerViewModels(): void {\n    this.viewModelRegistry.register('text', this.textViewModel);\n    this.viewModelRegistry.register('braille', this.brailleViewModel);\n    this.viewModelRegistry.register('goToExtrema', this.goToExtremaViewModel);\n    this.viewModelRegistry.register('review', this.reviewViewModel);\n    this.viewModelRegistry.register('display', this.displayViewModel);\n    this.viewModelRegistry.register('help', this.helpViewModel);\n    this.viewModelRegistry.register('chat', this.chatViewModel);\n    this.viewModelRegistry.register('settings', this.settingsViewModel);\n    this.viewModelRegistry.register('commandPalette', this.commandPaletteViewModel);\n    this.viewModelRegistry.register('commandExecutor', this.commandExecutor);\n    this.viewModelRegistry.register('rotor', this.rotorNavigationViewModel);\n  }\n\n  /**\n   * Registers observers to the figure, subplots, and traces for state updates.\n   */\n  private registerObservers(): void {\n    this.figure.addObserver(this.textService);\n    this.figure.addObserver(this.audioService);\n    this.figure.addObserver(this.highlightService);\n    this.figure.subplots.forEach(subplotRow => subplotRow.forEach((subplot) => {\n      subplot.addObserver(this.textService);\n      subplot.addObserver(this.audioService);\n      subplot.addObserver(this.brailleService);\n      subplot.addObserver(this.highlightService);\n      subplot.traces.forEach(traceRow => traceRow.forEach((trace) => {\n        trace.addObserver(this.audioService);\n        trace.addObserver(this.brailleService);\n        trace.addObserver(this.textService);\n        trace.addObserver(this.reviewService);\n        trace.addObserver(this.highlightService);\n      }));\n    }));\n  }\n}\n","import type { MaidrContextValue } from '@state/context';\nimport type { AppStore } from '@state/store';\nimport type { Maidr as MaidrData } from '@type/grammar';\nimport type { RefObject } from 'react';\nimport { useCallback, useEffect, useRef, useState } from 'react';\nimport { Controller } from '../../controller';\n\n/**\n * Return type for the useMaidrController hook.\n */\ninterface UseMaidrControllerResult {\n  /** Ref to attach to the plot wrapper div. */\n  plotRef: RefObject<HTMLDivElement | null>;\n  /** Ref to attach to the figure element. */\n  figureRef: RefObject<HTMLElement | null>;\n  /** The context value for React dependency injection, or null before focus-in. */\n  contextValue: MaidrContextValue | null;\n  /** Focus-in handler to attach to the figure element. */\n  onFocusIn: () => void;\n  /** Focus-out handler to attach to the figure element. */\n  onFocusOut: () => void;\n}\n\n/**\n * Custom hook that manages the full Controller lifecycle for a MAIDR plot instance.\n *\n * Handles:\n * - Controller creation on focus-in (deferred -- no throwaway Controller on mount)\n * - Controller disposal on focus-out\n * - Visibility change re-creation\n * - Timer cleanup and stale-closure prevention\n * - Unmount cleanup\n *\n * @param data - The MAIDR configuration describing the plot\n * @param store - The per-instance Redux store\n * @returns Refs, context value, and event handlers for the component to wire up\n */\nexport function useMaidrController(data: MaidrData, store: AppStore): UseMaidrControllerResult {\n  const plotRef = useRef<HTMLDivElement>(null);\n  const figureRef = useRef<HTMLElement>(null);\n  const controllerRef = useRef<Controller | null>(null);\n  const hasAnnouncedRef = useRef(false);\n  const focusInTimerRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n  const focusOutTimerRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n\n  const [contextValue, setContextValue] = useState<MaidrContextValue | null>(null);\n\n  const createController = useCallback((): Controller | null => {\n    const plotElement = plotRef.current;\n    if (!plotElement)\n      return null;\n\n    // Create a deep copy to prevent mutations on the original data object.\n    const dataClone = structuredClone(data);\n    const ctrl = new Controller(dataClone, plotElement, store);\n    return ctrl;\n  }, [data, store]);\n\n  // Keep a ref to always access the latest createController, avoiding stale\n  // closures when data changes between the time a timer is queued and fires.\n  const createControllerRef = useRef(createController);\n  createControllerRef.current = createController;\n\n  const disposeController = useCallback((): void => {\n    if (controllerRef.current) {\n      controllerRef.current.suspendHighContrast();\n      controllerRef.current.dispose();\n      controllerRef.current = null;\n    }\n    setContextValue(null);\n    hasAnnouncedRef.current = false;\n  }, []);\n\n  const onFocusIn = useCallback((): void => {\n    // Cancel any pending focus-out to prevent dispose/create race.\n    if (focusOutTimerRef.current) {\n      clearTimeout(focusOutTimerRef.current);\n      focusOutTimerRef.current = null;\n    }\n    // Cancel any previously queued focus-in to avoid duplicate timers.\n    if (focusInTimerRef.current) {\n      clearTimeout(focusInTimerRef.current);\n      focusInTimerRef.current = null;\n    }\n    // Allow React to process all events before focusing in.\n    focusInTimerRef.current = setTimeout(() => {\n      focusInTimerRef.current = null;\n      if (!controllerRef.current) {\n        const ctrl = createControllerRef.current();\n        if (!ctrl)\n          return;\n        controllerRef.current = ctrl;\n        setContextValue(ctrl.getContextValue());\n        ctrl.initializeHighContrast();\n      }\n      if (!hasAnnouncedRef.current) {\n        hasAnnouncedRef.current = true;\n        controllerRef.current?.showInitialInstructionInText();\n      }\n    }, 0);\n  }, []);\n\n  const onFocusOut = useCallback((): void => {\n    // Cancel any pending focus-in to prevent a stale focus-in from firing\n    // after focus has already left the figure.\n    if (focusInTimerRef.current) {\n      clearTimeout(focusInTimerRef.current);\n      focusInTimerRef.current = null;\n    }\n    // Allow React to process all events before focusing out.\n    focusOutTimerRef.current = setTimeout(() => {\n      focusOutTimerRef.current = null;\n      const figureElement = figureRef.current;\n      if (!figureElement)\n        return;\n\n      const activeElement = document.activeElement as HTMLElement;\n      const isInside = figureElement.contains(activeElement);\n      if (!isInside) {\n        disposeController();\n      }\n    }, 0);\n  }, [disposeController]);\n\n  const onVisibilityChange = useCallback((): void => {\n    if (document.visibilityState === 'visible') {\n      // Only recreate the controller if the chart previously had focus.\n      // Without this guard, switching tabs would create a Controller for\n      // every mounted <Maidr> instance, even ones never interacted with.\n      if (!controllerRef.current)\n        return;\n\n      if (focusInTimerRef.current) {\n        clearTimeout(focusInTimerRef.current);\n        focusInTimerRef.current = null;\n      }\n      if (focusOutTimerRef.current) {\n        clearTimeout(focusOutTimerRef.current);\n        focusOutTimerRef.current = null;\n      }\n      disposeController();\n      const ctrl = createControllerRef.current();\n      if (!ctrl)\n        return;\n      controllerRef.current = ctrl;\n      setContextValue(ctrl.getContextValue());\n      ctrl.initializeHighContrast();\n      hasAnnouncedRef.current = false;\n    }\n  }, [disposeController]);\n\n  // Register visibility change listener.\n  useEffect(() => {\n    document.addEventListener('visibilitychange', onVisibilityChange);\n    return () => {\n      document.removeEventListener('visibilitychange', onVisibilityChange);\n    };\n  }, [onVisibilityChange]);\n\n  // Clean up pending timers and controller on unmount.\n  useEffect(() => {\n    return () => {\n      if (focusInTimerRef.current)\n        clearTimeout(focusInTimerRef.current);\n      if (focusOutTimerRef.current)\n        clearTimeout(focusOutTimerRef.current);\n      if (controllerRef.current) {\n        controllerRef.current.suspendHighContrast();\n        controllerRef.current.dispose();\n        controllerRef.current = null;\n      }\n    };\n  }, []);\n\n  return {\n    plotRef,\n    figureRef,\n    contextValue,\n    onFocusIn,\n    onFocusOut,\n  };\n}\n","import { configureStore } from '@reduxjs/toolkit';\nimport brailleReducer from './viewModel/brailleViewModel';\nimport chatReducer from './viewModel/chatViewModel';\nimport commandPaletteReducer from './viewModel/commandPaletteViewModel';\nimport displayReducer from './viewModel/displayViewModel';\nimport goToExtremaReducer from './viewModel/goToExtremaViewModel';\nimport helpMenuReducer from './viewModel/helpViewModel';\nimport reviewReducer from './viewModel/reviewViewModel';\nimport rotorReducer from './viewModel/rotorNavigationViewModel';\nimport settingsReducer from './viewModel/settingsViewModel';\nimport textReducer from './viewModel/textViewModel';\n\nconst reducers = {\n  braille: brailleReducer,\n  chat: chatReducer,\n  commandPalette: commandPaletteReducer,\n  display: displayReducer,\n  goToExtrema: goToExtremaReducer,\n  help: helpMenuReducer,\n  review: reviewReducer,\n  settings: settingsReducer,\n  text: textReducer,\n  rotor: rotorReducer,\n};\n\n/**\n * Creates a new Redux store instance with all application view model reducers.\n * Each MAIDR plot instance should have its own store for state isolation.\n */\n// eslint-disable-next-line ts/explicit-function-return-type -- Return type is inferred to derive AppStore and RootState types\nexport function createMaidrStore() {\n  return configureStore({ reducer: reducers });\n}\n\n/**\n * Type representing the application store instance.\n */\nexport type AppStore = ReturnType<typeof createMaidrStore>;\n\n/**\n * Root state type derived from the store's reducer map.\n */\nexport type RootState = ReturnType<AppStore['getState']>;\n","import type { CommandExecutor } from '@service/commandExecutor';\nimport type { ViewModelRegistry } from '@state/viewModel/registry';\nimport { createContext, useContext } from 'react';\n\n/**\n * Values provided to the MAIDR React component tree via context.\n * This replaces global singletons with per-instance dependency injection.\n */\nexport interface MaidrContextValue {\n  /** The view model registry for this MAIDR plot instance. */\n  viewModelRegistry: ViewModelRegistry;\n  /** The command executor for this MAIDR plot instance. */\n  commandExecutor: CommandExecutor;\n}\n\n/**\n * React Context for injecting per-instance dependencies into the MAIDR component tree.\n * Each MAIDR plot instance provides its own context value, ensuring state isolation.\n */\nexport const MaidrContext = createContext<MaidrContextValue | null>(null);\n\n/**\n * Hook to access the MAIDR context value.\n * Must be used within a MaidrContext.Provider.\n * @throws Error if used outside of a MaidrContext.Provider\n */\nexport function useMaidrContext(): MaidrContextValue {\n  const ctx = useContext(MaidrContext);\n  if (!ctx) {\n    throw new Error(\n      'useMaidrContext must be used within a MaidrContext.Provider. '\n      + 'Ensure the component is rendered inside a <Maidr> component.',\n    );\n  }\n  return ctx;\n}\n","/**\n * @license React\n * use-sync-external-store-with-selector.production.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\"use strict\";\nvar React = require(\"react\");\nfunction is(x, y) {\n  return (x === y && (0 !== x || 1 / x === 1 / y)) || (x !== x && y !== y);\n}\nvar objectIs = \"function\" === typeof Object.is ? Object.is : is,\n  useSyncExternalStore = React.useSyncExternalStore,\n  useRef = React.useRef,\n  useEffect = React.useEffect,\n  useMemo = React.useMemo,\n  useDebugValue = React.useDebugValue;\nexports.useSyncExternalStoreWithSelector = function (\n  subscribe,\n  getSnapshot,\n  getServerSnapshot,\n  selector,\n  isEqual\n) {\n  var instRef = useRef(null);\n  if (null === instRef.current) {\n    var inst = { hasValue: !1, value: null };\n    instRef.current = inst;\n  } else inst = instRef.current;\n  instRef = useMemo(\n    function () {\n      function memoizedSelector(nextSnapshot) {\n        if (!hasMemo) {\n          hasMemo = !0;\n          memoizedSnapshot = nextSnapshot;\n          nextSnapshot = selector(nextSnapshot);\n          if (void 0 !== isEqual && inst.hasValue) {\n            var currentSelection = inst.value;\n            if (isEqual(currentSelection, nextSnapshot))\n              return (memoizedSelection = currentSelection);\n          }\n          return (memoizedSelection = nextSnapshot);\n        }\n        currentSelection = memoizedSelection;\n        if (objectIs(memoizedSnapshot, nextSnapshot)) return currentSelection;\n        var nextSelection = selector(nextSnapshot);\n        if (void 0 !== isEqual && isEqual(currentSelection, nextSelection))\n          return (memoizedSnapshot = nextSnapshot), currentSelection;\n        memoizedSnapshot = nextSnapshot;\n        return (memoizedSelection = nextSelection);\n      }\n      var hasMemo = !1,\n        memoizedSnapshot,\n        memoizedSelection,\n        maybeGetServerSnapshot =\n          void 0 === getServerSnapshot ? null : getServerSnapshot;\n      return [\n        function () {\n          return memoizedSelector(getSnapshot());\n        },\n        null === maybeGetServerSnapshot\n          ? void 0\n          : function () {\n              return memoizedSelector(maybeGetServerSnapshot());\n            }\n      ];\n    },\n    [getSnapshot, getServerSnapshot, selector, isEqual]\n  );\n  var value = useSyncExternalStore(subscribe, instRef[0], instRef[1]);\n  useEffect(\n    function () {\n      inst.hasValue = !0;\n      inst.value = value;\n    },\n    [value]\n  );\n  useDebugValue(value);\n  return value;\n};\n","/**\n * @license React\n * use-sync-external-store-with-selector.development.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\"use strict\";\n\"production\" !== process.env.NODE_ENV &&\n  (function () {\n    function is(x, y) {\n      return (x === y && (0 !== x || 1 / x === 1 / y)) || (x !== x && y !== y);\n    }\n    \"undefined\" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ &&\n      \"function\" ===\n        typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart &&\n      __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart(Error());\n    var React = require(\"react\"),\n      objectIs = \"function\" === typeof Object.is ? Object.is : is,\n      useSyncExternalStore = React.useSyncExternalStore,\n      useRef = React.useRef,\n      useEffect = React.useEffect,\n      useMemo = React.useMemo,\n      useDebugValue = React.useDebugValue;\n    exports.useSyncExternalStoreWithSelector = function (\n      subscribe,\n      getSnapshot,\n      getServerSnapshot,\n      selector,\n      isEqual\n    ) {\n      var instRef = useRef(null);\n      if (null === instRef.current) {\n        var inst = { hasValue: !1, value: null };\n        instRef.current = inst;\n      } else inst = instRef.current;\n      instRef = useMemo(\n        function () {\n          function memoizedSelector(nextSnapshot) {\n            if (!hasMemo) {\n              hasMemo = !0;\n              memoizedSnapshot = nextSnapshot;\n              nextSnapshot = selector(nextSnapshot);\n              if (void 0 !== isEqual && inst.hasValue) {\n                var currentSelection = inst.value;\n                if (isEqual(currentSelection, nextSnapshot))\n                  return (memoizedSelection = currentSelection);\n              }\n              return (memoizedSelection = nextSnapshot);\n            }\n            currentSelection = memoizedSelection;\n            if (objectIs(memoizedSnapshot, nextSnapshot))\n              return currentSelection;\n            var nextSelection = selector(nextSnapshot);\n            if (void 0 !== isEqual && isEqual(currentSelection, nextSelection))\n              return (memoizedSnapshot = nextSnapshot), currentSelection;\n            memoizedSnapshot = nextSnapshot;\n            return (memoizedSelection = nextSelection);\n          }\n          var hasMemo = !1,\n            memoizedSnapshot,\n            memoizedSelection,\n            maybeGetServerSnapshot =\n              void 0 === getServerSnapshot ? null : getServerSnapshot;\n          return [\n            function () {\n              return memoizedSelector(getSnapshot());\n            },\n            null === maybeGetServerSnapshot\n              ? void 0\n              : function () {\n                  return memoizedSelector(maybeGetServerSnapshot());\n                }\n          ];\n        },\n        [getSnapshot, getServerSnapshot, selector, isEqual]\n      );\n      var value = useSyncExternalStore(subscribe, instRef[0], instRef[1]);\n      useEffect(\n        function () {\n          inst.hasValue = !0;\n          inst.value = value;\n        },\n        [value]\n      );\n      useDebugValue(value);\n      return value;\n    };\n    \"undefined\" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ &&\n      \"function\" ===\n        typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop &&\n      __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop(Error());\n  })();\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n  module.exports = require('./cjs/use-sync-external-store-with-selector.production.js');\n} else {\n  module.exports = require('./cjs/use-sync-external-store-with-selector.development.js');\n}\n","// src/utils/react.ts\nimport * as React from \"react\";\n\n// src/utils/react-is.ts\nvar IS_REACT_19 = /* @__PURE__ */ React.version.startsWith(\"19\");\nvar REACT_ELEMENT_TYPE = /* @__PURE__ */ Symbol.for(\n  IS_REACT_19 ? \"react.transitional.element\" : \"react.element\"\n);\nvar REACT_PORTAL_TYPE = /* @__PURE__ */ Symbol.for(\"react.portal\");\nvar REACT_FRAGMENT_TYPE = /* @__PURE__ */ Symbol.for(\"react.fragment\");\nvar REACT_STRICT_MODE_TYPE = /* @__PURE__ */ Symbol.for(\"react.strict_mode\");\nvar REACT_PROFILER_TYPE = /* @__PURE__ */ Symbol.for(\"react.profiler\");\nvar REACT_CONSUMER_TYPE = /* @__PURE__ */ Symbol.for(\"react.consumer\");\nvar REACT_CONTEXT_TYPE = /* @__PURE__ */ Symbol.for(\"react.context\");\nvar REACT_FORWARD_REF_TYPE = /* @__PURE__ */ Symbol.for(\"react.forward_ref\");\nvar REACT_SUSPENSE_TYPE = /* @__PURE__ */ Symbol.for(\"react.suspense\");\nvar REACT_SUSPENSE_LIST_TYPE = /* @__PURE__ */ Symbol.for(\n  \"react.suspense_list\"\n);\nvar REACT_MEMO_TYPE = /* @__PURE__ */ Symbol.for(\"react.memo\");\nvar REACT_LAZY_TYPE = /* @__PURE__ */ Symbol.for(\"react.lazy\");\nvar REACT_OFFSCREEN_TYPE = /* @__PURE__ */ Symbol.for(\"react.offscreen\");\nvar REACT_CLIENT_REFERENCE = /* @__PURE__ */ Symbol.for(\n  \"react.client.reference\"\n);\nvar ForwardRef = REACT_FORWARD_REF_TYPE;\nvar Memo = REACT_MEMO_TYPE;\nfunction isValidElementType(type) {\n  return typeof type === \"string\" || typeof type === \"function\" || type === REACT_FRAGMENT_TYPE || type === REACT_PROFILER_TYPE || type === REACT_STRICT_MODE_TYPE || type === REACT_SUSPENSE_TYPE || type === REACT_SUSPENSE_LIST_TYPE || type === REACT_OFFSCREEN_TYPE || typeof type === \"object\" && type !== null && (type.$$typeof === REACT_LAZY_TYPE || type.$$typeof === REACT_MEMO_TYPE || type.$$typeof === REACT_CONTEXT_TYPE || type.$$typeof === REACT_CONSUMER_TYPE || type.$$typeof === REACT_FORWARD_REF_TYPE || type.$$typeof === REACT_CLIENT_REFERENCE || type.getModuleId !== void 0) ? true : false;\n}\nfunction typeOf(object) {\n  if (typeof object === \"object\" && object !== null) {\n    const { $$typeof } = object;\n    switch ($$typeof) {\n      case REACT_ELEMENT_TYPE:\n        switch (object = object.type, object) {\n          case REACT_FRAGMENT_TYPE:\n          case REACT_PROFILER_TYPE:\n          case REACT_STRICT_MODE_TYPE:\n          case REACT_SUSPENSE_TYPE:\n          case REACT_SUSPENSE_LIST_TYPE:\n            return object;\n          default:\n            switch (object = object && object.$$typeof, object) {\n              case REACT_CONTEXT_TYPE:\n              case REACT_FORWARD_REF_TYPE:\n              case REACT_LAZY_TYPE:\n              case REACT_MEMO_TYPE:\n                return object;\n              case REACT_CONSUMER_TYPE:\n                return object;\n              default:\n                return $$typeof;\n            }\n        }\n      case REACT_PORTAL_TYPE:\n        return $$typeof;\n    }\n  }\n}\nfunction isContextConsumer(object) {\n  return IS_REACT_19 ? typeOf(object) === REACT_CONSUMER_TYPE : typeOf(object) === REACT_CONTEXT_TYPE;\n}\nfunction isMemo(object) {\n  return typeOf(object) === REACT_MEMO_TYPE;\n}\n\n// src/utils/warning.ts\nfunction warning(message) {\n  if (typeof console !== \"undefined\" && typeof console.error === \"function\") {\n    console.error(message);\n  }\n  try {\n    throw new Error(message);\n  } catch (e) {\n  }\n}\n\n// src/connect/verifySubselectors.ts\nfunction verify(selector, methodName) {\n  if (!selector) {\n    throw new Error(`Unexpected value for ${methodName} in connect.`);\n  } else if (methodName === \"mapStateToProps\" || methodName === \"mapDispatchToProps\") {\n    if (!Object.prototype.hasOwnProperty.call(selector, \"dependsOnOwnProps\")) {\n      warning(\n        `The selector for ${methodName} of connect did not specify a value for dependsOnOwnProps.`\n      );\n    }\n  }\n}\nfunction verifySubselectors(mapStateToProps, mapDispatchToProps, mergeProps) {\n  verify(mapStateToProps, \"mapStateToProps\");\n  verify(mapDispatchToProps, \"mapDispatchToProps\");\n  verify(mergeProps, \"mergeProps\");\n}\n\n// src/connect/selectorFactory.ts\nfunction pureFinalPropsSelectorFactory(mapStateToProps, mapDispatchToProps, mergeProps, dispatch, {\n  areStatesEqual,\n  areOwnPropsEqual,\n  areStatePropsEqual\n}) {\n  let hasRunAtLeastOnce = false;\n  let state;\n  let ownProps;\n  let stateProps;\n  let dispatchProps;\n  let mergedProps;\n  function handleFirstCall(firstState, firstOwnProps) {\n    state = firstState;\n    ownProps = firstOwnProps;\n    stateProps = mapStateToProps(state, ownProps);\n    dispatchProps = mapDispatchToProps(dispatch, ownProps);\n    mergedProps = mergeProps(stateProps, dispatchProps, ownProps);\n    hasRunAtLeastOnce = true;\n    return mergedProps;\n  }\n  function handleNewPropsAndNewState() {\n    stateProps = mapStateToProps(state, ownProps);\n    if (mapDispatchToProps.dependsOnOwnProps)\n      dispatchProps = mapDispatchToProps(dispatch, ownProps);\n    mergedProps = mergeProps(stateProps, dispatchProps, ownProps);\n    return mergedProps;\n  }\n  function handleNewProps() {\n    if (mapStateToProps.dependsOnOwnProps)\n      stateProps = mapStateToProps(state, ownProps);\n    if (mapDispatchToProps.dependsOnOwnProps)\n      dispatchProps = mapDispatchToProps(dispatch, ownProps);\n    mergedProps = mergeProps(stateProps, dispatchProps, ownProps);\n    return mergedProps;\n  }\n  function handleNewState() {\n    const nextStateProps = mapStateToProps(state, ownProps);\n    const statePropsChanged = !areStatePropsEqual(nextStateProps, stateProps);\n    stateProps = nextStateProps;\n    if (statePropsChanged)\n      mergedProps = mergeProps(stateProps, dispatchProps, ownProps);\n    return mergedProps;\n  }\n  function handleSubsequentCalls(nextState, nextOwnProps) {\n    const propsChanged = !areOwnPropsEqual(nextOwnProps, ownProps);\n    const stateChanged = !areStatesEqual(\n      nextState,\n      state,\n      nextOwnProps,\n      ownProps\n    );\n    state = nextState;\n    ownProps = nextOwnProps;\n    if (propsChanged && stateChanged) return handleNewPropsAndNewState();\n    if (propsChanged) return handleNewProps();\n    if (stateChanged) return handleNewState();\n    return mergedProps;\n  }\n  return function pureFinalPropsSelector(nextState, nextOwnProps) {\n    return hasRunAtLeastOnce ? handleSubsequentCalls(nextState, nextOwnProps) : handleFirstCall(nextState, nextOwnProps);\n  };\n}\nfunction finalPropsSelectorFactory(dispatch, {\n  initMapStateToProps,\n  initMapDispatchToProps,\n  initMergeProps,\n  ...options\n}) {\n  const mapStateToProps = initMapStateToProps(dispatch, options);\n  const mapDispatchToProps = initMapDispatchToProps(dispatch, options);\n  const mergeProps = initMergeProps(dispatch, options);\n  if (process.env.NODE_ENV !== \"production\") {\n    verifySubselectors(mapStateToProps, mapDispatchToProps, mergeProps);\n  }\n  return pureFinalPropsSelectorFactory(mapStateToProps, mapDispatchToProps, mergeProps, dispatch, options);\n}\n\n// src/utils/bindActionCreators.ts\nfunction bindActionCreators(actionCreators, dispatch) {\n  const boundActionCreators = {};\n  for (const key in actionCreators) {\n    const actionCreator = actionCreators[key];\n    if (typeof actionCreator === \"function\") {\n      boundActionCreators[key] = (...args) => dispatch(actionCreator(...args));\n    }\n  }\n  return boundActionCreators;\n}\n\n// src/utils/isPlainObject.ts\nfunction isPlainObject(obj) {\n  if (typeof obj !== \"object\" || obj === null) return false;\n  const proto = Object.getPrototypeOf(obj);\n  if (proto === null) return true;\n  let baseProto = proto;\n  while (Object.getPrototypeOf(baseProto) !== null) {\n    baseProto = Object.getPrototypeOf(baseProto);\n  }\n  return proto === baseProto;\n}\n\n// src/utils/verifyPlainObject.ts\nfunction verifyPlainObject(value, displayName, methodName) {\n  if (!isPlainObject(value)) {\n    warning(\n      `${methodName}() in ${displayName} must return a plain object. Instead received ${value}.`\n    );\n  }\n}\n\n// src/connect/wrapMapToProps.ts\nfunction wrapMapToPropsConstant(getConstant) {\n  return function initConstantSelector(dispatch) {\n    const constant = getConstant(dispatch);\n    function constantSelector() {\n      return constant;\n    }\n    constantSelector.dependsOnOwnProps = false;\n    return constantSelector;\n  };\n}\nfunction getDependsOnOwnProps(mapToProps) {\n  return mapToProps.dependsOnOwnProps ? Boolean(mapToProps.dependsOnOwnProps) : mapToProps.length !== 1;\n}\nfunction wrapMapToPropsFunc(mapToProps, methodName) {\n  return function initProxySelector(dispatch, { displayName }) {\n    const proxy = function mapToPropsProxy(stateOrDispatch, ownProps) {\n      return proxy.dependsOnOwnProps ? proxy.mapToProps(stateOrDispatch, ownProps) : proxy.mapToProps(stateOrDispatch, void 0);\n    };\n    proxy.dependsOnOwnProps = true;\n    proxy.mapToProps = function detectFactoryAndVerify(stateOrDispatch, ownProps) {\n      proxy.mapToProps = mapToProps;\n      proxy.dependsOnOwnProps = getDependsOnOwnProps(mapToProps);\n      let props = proxy(stateOrDispatch, ownProps);\n      if (typeof props === \"function\") {\n        proxy.mapToProps = props;\n        proxy.dependsOnOwnProps = getDependsOnOwnProps(props);\n        props = proxy(stateOrDispatch, ownProps);\n      }\n      if (process.env.NODE_ENV !== \"production\")\n        verifyPlainObject(props, displayName, methodName);\n      return props;\n    };\n    return proxy;\n  };\n}\n\n// src/connect/invalidArgFactory.ts\nfunction createInvalidArgFactory(arg, name) {\n  return (dispatch, options) => {\n    throw new Error(\n      `Invalid value of type ${typeof arg} for ${name} argument when connecting component ${options.wrappedComponentName}.`\n    );\n  };\n}\n\n// src/connect/mapDispatchToProps.ts\nfunction mapDispatchToPropsFactory(mapDispatchToProps) {\n  return mapDispatchToProps && typeof mapDispatchToProps === \"object\" ? wrapMapToPropsConstant(\n    (dispatch) => (\n      // @ts-ignore\n      bindActionCreators(mapDispatchToProps, dispatch)\n    )\n  ) : !mapDispatchToProps ? wrapMapToPropsConstant((dispatch) => ({\n    dispatch\n  })) : typeof mapDispatchToProps === \"function\" ? (\n    // @ts-ignore\n    wrapMapToPropsFunc(mapDispatchToProps, \"mapDispatchToProps\")\n  ) : createInvalidArgFactory(mapDispatchToProps, \"mapDispatchToProps\");\n}\n\n// src/connect/mapStateToProps.ts\nfunction mapStateToPropsFactory(mapStateToProps) {\n  return !mapStateToProps ? wrapMapToPropsConstant(() => ({})) : typeof mapStateToProps === \"function\" ? (\n    // @ts-ignore\n    wrapMapToPropsFunc(mapStateToProps, \"mapStateToProps\")\n  ) : createInvalidArgFactory(mapStateToProps, \"mapStateToProps\");\n}\n\n// src/connect/mergeProps.ts\nfunction defaultMergeProps(stateProps, dispatchProps, ownProps) {\n  return { ...ownProps, ...stateProps, ...dispatchProps };\n}\nfunction wrapMergePropsFunc(mergeProps) {\n  return function initMergePropsProxy(dispatch, { displayName, areMergedPropsEqual }) {\n    let hasRunOnce = false;\n    let mergedProps;\n    return function mergePropsProxy(stateProps, dispatchProps, ownProps) {\n      const nextMergedProps = mergeProps(stateProps, dispatchProps, ownProps);\n      if (hasRunOnce) {\n        if (!areMergedPropsEqual(nextMergedProps, mergedProps))\n          mergedProps = nextMergedProps;\n      } else {\n        hasRunOnce = true;\n        mergedProps = nextMergedProps;\n        if (process.env.NODE_ENV !== \"production\")\n          verifyPlainObject(mergedProps, displayName, \"mergeProps\");\n      }\n      return mergedProps;\n    };\n  };\n}\nfunction mergePropsFactory(mergeProps) {\n  return !mergeProps ? () => defaultMergeProps : typeof mergeProps === \"function\" ? wrapMergePropsFunc(mergeProps) : createInvalidArgFactory(mergeProps, \"mergeProps\");\n}\n\n// src/utils/batch.ts\nfunction defaultNoopBatch(callback) {\n  callback();\n}\n\n// src/utils/Subscription.ts\nfunction createListenerCollection() {\n  let first = null;\n  let last = null;\n  return {\n    clear() {\n      first = null;\n      last = null;\n    },\n    notify() {\n      defaultNoopBatch(() => {\n        let listener = first;\n        while (listener) {\n          listener.callback();\n          listener = listener.next;\n        }\n      });\n    },\n    get() {\n      const listeners = [];\n      let listener = first;\n      while (listener) {\n        listeners.push(listener);\n        listener = listener.next;\n      }\n      return listeners;\n    },\n    subscribe(callback) {\n      let isSubscribed = true;\n      const listener = last = {\n        callback,\n        next: null,\n        prev: last\n      };\n      if (listener.prev) {\n        listener.prev.next = listener;\n      } else {\n        first = listener;\n      }\n      return function unsubscribe() {\n        if (!isSubscribed || first === null) return;\n        isSubscribed = false;\n        if (listener.next) {\n          listener.next.prev = listener.prev;\n        } else {\n          last = listener.prev;\n        }\n        if (listener.prev) {\n          listener.prev.next = listener.next;\n        } else {\n          first = listener.next;\n        }\n      };\n    }\n  };\n}\nvar nullListeners = {\n  notify() {\n  },\n  get: () => []\n};\nfunction createSubscription(store, parentSub) {\n  let unsubscribe;\n  let listeners = nullListeners;\n  let subscriptionsAmount = 0;\n  let selfSubscribed = false;\n  function addNestedSub(listener) {\n    trySubscribe();\n    const cleanupListener = listeners.subscribe(listener);\n    let removed = false;\n    return () => {\n      if (!removed) {\n        removed = true;\n        cleanupListener();\n        tryUnsubscribe();\n      }\n    };\n  }\n  function notifyNestedSubs() {\n    listeners.notify();\n  }\n  function handleChangeWrapper() {\n    if (subscription.onStateChange) {\n      subscription.onStateChange();\n    }\n  }\n  function isSubscribed() {\n    return selfSubscribed;\n  }\n  function trySubscribe() {\n    subscriptionsAmount++;\n    if (!unsubscribe) {\n      unsubscribe = parentSub ? parentSub.addNestedSub(handleChangeWrapper) : store.subscribe(handleChangeWrapper);\n      listeners = createListenerCollection();\n    }\n  }\n  function tryUnsubscribe() {\n    subscriptionsAmount--;\n    if (unsubscribe && subscriptionsAmount === 0) {\n      unsubscribe();\n      unsubscribe = void 0;\n      listeners.clear();\n      listeners = nullListeners;\n    }\n  }\n  function trySubscribeSelf() {\n    if (!selfSubscribed) {\n      selfSubscribed = true;\n      trySubscribe();\n    }\n  }\n  function tryUnsubscribeSelf() {\n    if (selfSubscribed) {\n      selfSubscribed = false;\n      tryUnsubscribe();\n    }\n  }\n  const subscription = {\n    addNestedSub,\n    notifyNestedSubs,\n    handleChangeWrapper,\n    isSubscribed,\n    trySubscribe: trySubscribeSelf,\n    tryUnsubscribe: tryUnsubscribeSelf,\n    getListeners: () => listeners\n  };\n  return subscription;\n}\n\n// src/utils/useIsomorphicLayoutEffect.ts\nvar canUseDOM = () => !!(typeof window !== \"undefined\" && typeof window.document !== \"undefined\" && typeof window.document.createElement !== \"undefined\");\nvar isDOM = /* @__PURE__ */ canUseDOM();\nvar isRunningInReactNative = () => typeof navigator !== \"undefined\" && navigator.product === \"ReactNative\";\nvar isReactNative = /* @__PURE__ */ isRunningInReactNative();\nvar getUseIsomorphicLayoutEffect = () => isDOM || isReactNative ? React.useLayoutEffect : React.useEffect;\nvar useIsomorphicLayoutEffect = /* @__PURE__ */ getUseIsomorphicLayoutEffect();\n\n// src/utils/shallowEqual.ts\nfunction is(x, y) {\n  if (x === y) {\n    return x !== 0 || y !== 0 || 1 / x === 1 / y;\n  } else {\n    return x !== x && y !== y;\n  }\n}\nfunction shallowEqual(objA, objB) {\n  if (is(objA, objB)) return true;\n  if (typeof objA !== \"object\" || objA === null || typeof objB !== \"object\" || objB === null) {\n    return false;\n  }\n  const keysA = Object.keys(objA);\n  const keysB = Object.keys(objB);\n  if (keysA.length !== keysB.length) return false;\n  for (let i = 0; i < keysA.length; i++) {\n    if (!Object.prototype.hasOwnProperty.call(objB, keysA[i]) || !is(objA[keysA[i]], objB[keysA[i]])) {\n      return false;\n    }\n  }\n  return true;\n}\n\n// src/utils/hoistStatics.ts\nvar REACT_STATICS = {\n  childContextTypes: true,\n  contextType: true,\n  contextTypes: true,\n  defaultProps: true,\n  displayName: true,\n  getDefaultProps: true,\n  getDerivedStateFromError: true,\n  getDerivedStateFromProps: true,\n  mixins: true,\n  propTypes: true,\n  type: true\n};\nvar KNOWN_STATICS = {\n  name: true,\n  length: true,\n  prototype: true,\n  caller: true,\n  callee: true,\n  arguments: true,\n  arity: true\n};\nvar FORWARD_REF_STATICS = {\n  $$typeof: true,\n  render: true,\n  defaultProps: true,\n  displayName: true,\n  propTypes: true\n};\nvar MEMO_STATICS = {\n  $$typeof: true,\n  compare: true,\n  defaultProps: true,\n  displayName: true,\n  propTypes: true,\n  type: true\n};\nvar TYPE_STATICS = {\n  [ForwardRef]: FORWARD_REF_STATICS,\n  [Memo]: MEMO_STATICS\n};\nfunction getStatics(component) {\n  if (isMemo(component)) {\n    return MEMO_STATICS;\n  }\n  return TYPE_STATICS[component[\"$$typeof\"]] || REACT_STATICS;\n}\nvar defineProperty = Object.defineProperty;\nvar getOwnPropertyNames = Object.getOwnPropertyNames;\nvar getOwnPropertySymbols = Object.getOwnPropertySymbols;\nvar getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\nvar getPrototypeOf = Object.getPrototypeOf;\nvar objectPrototype = Object.prototype;\nfunction hoistNonReactStatics(targetComponent, sourceComponent) {\n  if (typeof sourceComponent !== \"string\") {\n    if (objectPrototype) {\n      const inheritedComponent = getPrototypeOf(sourceComponent);\n      if (inheritedComponent && inheritedComponent !== objectPrototype) {\n        hoistNonReactStatics(targetComponent, inheritedComponent);\n      }\n    }\n    let keys = getOwnPropertyNames(sourceComponent);\n    if (getOwnPropertySymbols) {\n      keys = keys.concat(getOwnPropertySymbols(sourceComponent));\n    }\n    const targetStatics = getStatics(targetComponent);\n    const sourceStatics = getStatics(sourceComponent);\n    for (let i = 0; i < keys.length; ++i) {\n      const key = keys[i];\n      if (!KNOWN_STATICS[key] && !(sourceStatics && sourceStatics[key]) && !(targetStatics && targetStatics[key])) {\n        const descriptor = getOwnPropertyDescriptor(sourceComponent, key);\n        try {\n          defineProperty(targetComponent, key, descriptor);\n        } catch (e) {\n        }\n      }\n    }\n  }\n  return targetComponent;\n}\n\n// src/components/Context.ts\nvar ContextKey = /* @__PURE__ */ Symbol.for(`react-redux-context`);\nvar gT = typeof globalThis !== \"undefined\" ? globalThis : (\n  /* fall back to a per-module scope (pre-8.1 behaviour) if `globalThis` is not available */\n  {}\n);\nfunction getContext() {\n  if (!React.createContext) return {};\n  const contextMap = gT[ContextKey] ??= /* @__PURE__ */ new Map();\n  let realContext = contextMap.get(React.createContext);\n  if (!realContext) {\n    realContext = React.createContext(\n      null\n    );\n    if (process.env.NODE_ENV !== \"production\") {\n      realContext.displayName = \"ReactRedux\";\n    }\n    contextMap.set(React.createContext, realContext);\n  }\n  return realContext;\n}\nvar ReactReduxContext = /* @__PURE__ */ getContext();\n\n// src/components/connect.tsx\nvar NO_SUBSCRIPTION_ARRAY = [null, null];\nvar stringifyComponent = (Comp) => {\n  try {\n    return JSON.stringify(Comp);\n  } catch (err) {\n    return String(Comp);\n  }\n};\nfunction useIsomorphicLayoutEffectWithArgs(effectFunc, effectArgs, dependencies) {\n  useIsomorphicLayoutEffect(() => effectFunc(...effectArgs), dependencies);\n}\nfunction captureWrapperProps(lastWrapperProps, lastChildProps, renderIsScheduled, wrapperProps, childPropsFromStoreUpdate, notifyNestedSubs) {\n  lastWrapperProps.current = wrapperProps;\n  renderIsScheduled.current = false;\n  if (childPropsFromStoreUpdate.current) {\n    childPropsFromStoreUpdate.current = null;\n    notifyNestedSubs();\n  }\n}\nfunction subscribeUpdates(shouldHandleStateChanges, store, subscription, childPropsSelector, lastWrapperProps, lastChildProps, renderIsScheduled, isMounted, childPropsFromStoreUpdate, notifyNestedSubs, additionalSubscribeListener) {\n  if (!shouldHandleStateChanges) return () => {\n  };\n  let didUnsubscribe = false;\n  let lastThrownError = null;\n  const checkForUpdates = () => {\n    if (didUnsubscribe || !isMounted.current) {\n      return;\n    }\n    const latestStoreState = store.getState();\n    let newChildProps, error;\n    try {\n      newChildProps = childPropsSelector(\n        latestStoreState,\n        lastWrapperProps.current\n      );\n    } catch (e) {\n      error = e;\n      lastThrownError = e;\n    }\n    if (!error) {\n      lastThrownError = null;\n    }\n    if (newChildProps === lastChildProps.current) {\n      if (!renderIsScheduled.current) {\n        notifyNestedSubs();\n      }\n    } else {\n      lastChildProps.current = newChildProps;\n      childPropsFromStoreUpdate.current = newChildProps;\n      renderIsScheduled.current = true;\n      additionalSubscribeListener();\n    }\n  };\n  subscription.onStateChange = checkForUpdates;\n  subscription.trySubscribe();\n  checkForUpdates();\n  const unsubscribeWrapper = () => {\n    didUnsubscribe = true;\n    subscription.tryUnsubscribe();\n    subscription.onStateChange = null;\n    if (lastThrownError) {\n      throw lastThrownError;\n    }\n  };\n  return unsubscribeWrapper;\n}\nfunction strictEqual(a, b) {\n  return a === b;\n}\nvar hasWarnedAboutDeprecatedPureOption = false;\nfunction connect(mapStateToProps, mapDispatchToProps, mergeProps, {\n  // The `pure` option has been removed, so TS doesn't like us destructuring this to check its existence.\n  // @ts-ignore\n  pure,\n  areStatesEqual = strictEqual,\n  areOwnPropsEqual = shallowEqual,\n  areStatePropsEqual = shallowEqual,\n  areMergedPropsEqual = shallowEqual,\n  // use React's forwardRef to expose a ref of the wrapped component\n  forwardRef = false,\n  // the context consumer to use\n  context = ReactReduxContext\n} = {}) {\n  if (process.env.NODE_ENV !== \"production\") {\n    if (pure !== void 0 && !hasWarnedAboutDeprecatedPureOption) {\n      hasWarnedAboutDeprecatedPureOption = true;\n      warning(\n        'The `pure` option has been removed. `connect` is now always a \"pure/memoized\" component'\n      );\n    }\n  }\n  const Context = context;\n  const initMapStateToProps = mapStateToPropsFactory(mapStateToProps);\n  const initMapDispatchToProps = mapDispatchToPropsFactory(mapDispatchToProps);\n  const initMergeProps = mergePropsFactory(mergeProps);\n  const shouldHandleStateChanges = Boolean(mapStateToProps);\n  const wrapWithConnect = (WrappedComponent) => {\n    if (process.env.NODE_ENV !== \"production\") {\n      const isValid = /* @__PURE__ */ isValidElementType(WrappedComponent);\n      if (!isValid)\n        throw new Error(\n          `You must pass a component to the function returned by connect. Instead received ${stringifyComponent(\n            WrappedComponent\n          )}`\n        );\n    }\n    const wrappedComponentName = WrappedComponent.displayName || WrappedComponent.name || \"Component\";\n    const displayName = `Connect(${wrappedComponentName})`;\n    const selectorFactoryOptions = {\n      shouldHandleStateChanges,\n      displayName,\n      wrappedComponentName,\n      WrappedComponent,\n      // @ts-ignore\n      initMapStateToProps,\n      initMapDispatchToProps,\n      initMergeProps,\n      areStatesEqual,\n      areStatePropsEqual,\n      areOwnPropsEqual,\n      areMergedPropsEqual\n    };\n    function ConnectFunction(props) {\n      const [propsContext, reactReduxForwardedRef, wrapperProps] = React.useMemo(() => {\n        const { reactReduxForwardedRef: reactReduxForwardedRef2, ...wrapperProps2 } = props;\n        return [props.context, reactReduxForwardedRef2, wrapperProps2];\n      }, [props]);\n      const ContextToUse = React.useMemo(() => {\n        let ResultContext = Context;\n        if (propsContext?.Consumer) {\n          if (process.env.NODE_ENV !== \"production\") {\n            const isValid = /* @__PURE__ */ isContextConsumer(\n              // @ts-ignore\n              /* @__PURE__ */ React.createElement(propsContext.Consumer, null)\n            );\n            if (!isValid) {\n              throw new Error(\n                \"You must pass a valid React context consumer as `props.context`\"\n              );\n            }\n            ResultContext = propsContext;\n          }\n        }\n        return ResultContext;\n      }, [propsContext, Context]);\n      const contextValue = React.useContext(ContextToUse);\n      const didStoreComeFromProps = Boolean(props.store) && Boolean(props.store.getState) && Boolean(props.store.dispatch);\n      const didStoreComeFromContext = Boolean(contextValue) && Boolean(contextValue.store);\n      if (process.env.NODE_ENV !== \"production\" && !didStoreComeFromProps && !didStoreComeFromContext) {\n        throw new Error(\n          `Could not find \"store\" in the context of \"${displayName}\". Either wrap the root component in a <Provider>, or pass a custom React context provider to <Provider> and the corresponding React context consumer to ${displayName} in connect options.`\n        );\n      }\n      const store = didStoreComeFromProps ? props.store : contextValue.store;\n      const getServerState = didStoreComeFromContext ? contextValue.getServerState : store.getState;\n      const childPropsSelector = React.useMemo(() => {\n        return finalPropsSelectorFactory(store.dispatch, selectorFactoryOptions);\n      }, [store]);\n      const [subscription, notifyNestedSubs] = React.useMemo(() => {\n        if (!shouldHandleStateChanges) return NO_SUBSCRIPTION_ARRAY;\n        const subscription2 = createSubscription(\n          store,\n          didStoreComeFromProps ? void 0 : contextValue.subscription\n        );\n        const notifyNestedSubs2 = subscription2.notifyNestedSubs.bind(subscription2);\n        return [subscription2, notifyNestedSubs2];\n      }, [store, didStoreComeFromProps, contextValue]);\n      const overriddenContextValue = React.useMemo(() => {\n        if (didStoreComeFromProps) {\n          return contextValue;\n        }\n        return {\n          ...contextValue,\n          subscription\n        };\n      }, [didStoreComeFromProps, contextValue, subscription]);\n      const lastChildProps = React.useRef(void 0);\n      const lastWrapperProps = React.useRef(wrapperProps);\n      const childPropsFromStoreUpdate = React.useRef(void 0);\n      const renderIsScheduled = React.useRef(false);\n      const isMounted = React.useRef(false);\n      const latestSubscriptionCallbackError = React.useRef(\n        void 0\n      );\n      useIsomorphicLayoutEffect(() => {\n        isMounted.current = true;\n        return () => {\n          isMounted.current = false;\n        };\n      }, []);\n      const actualChildPropsSelector = React.useMemo(() => {\n        const selector = () => {\n          if (childPropsFromStoreUpdate.current && wrapperProps === lastWrapperProps.current) {\n            return childPropsFromStoreUpdate.current;\n          }\n          return childPropsSelector(store.getState(), wrapperProps);\n        };\n        return selector;\n      }, [store, wrapperProps]);\n      const subscribeForReact = React.useMemo(() => {\n        const subscribe = (reactListener) => {\n          if (!subscription) {\n            return () => {\n            };\n          }\n          return subscribeUpdates(\n            shouldHandleStateChanges,\n            store,\n            subscription,\n            // @ts-ignore\n            childPropsSelector,\n            lastWrapperProps,\n            lastChildProps,\n            renderIsScheduled,\n            isMounted,\n            childPropsFromStoreUpdate,\n            notifyNestedSubs,\n            reactListener\n          );\n        };\n        return subscribe;\n      }, [subscription]);\n      useIsomorphicLayoutEffectWithArgs(captureWrapperProps, [\n        lastWrapperProps,\n        lastChildProps,\n        renderIsScheduled,\n        wrapperProps,\n        childPropsFromStoreUpdate,\n        notifyNestedSubs\n      ]);\n      let actualChildProps;\n      try {\n        actualChildProps = React.useSyncExternalStore(\n          // TODO We're passing through a big wrapper that does a bunch of extra side effects besides subscribing\n          subscribeForReact,\n          // TODO This is incredibly hacky. We've already processed the store update and calculated new child props,\n          // TODO and we're just passing that through so it triggers a re-render for us rather than relying on `uSES`.\n          actualChildPropsSelector,\n          getServerState ? () => childPropsSelector(getServerState(), wrapperProps) : actualChildPropsSelector\n        );\n      } catch (err) {\n        if (latestSubscriptionCallbackError.current) {\n          ;\n          err.message += `\nThe error may be correlated with this previous error:\n${latestSubscriptionCallbackError.current.stack}\n\n`;\n        }\n        throw err;\n      }\n      useIsomorphicLayoutEffect(() => {\n        latestSubscriptionCallbackError.current = void 0;\n        childPropsFromStoreUpdate.current = void 0;\n        lastChildProps.current = actualChildProps;\n      });\n      const renderedWrappedComponent = React.useMemo(() => {\n        return (\n          // @ts-ignore\n          /* @__PURE__ */ React.createElement(\n            WrappedComponent,\n            {\n              ...actualChildProps,\n              ref: reactReduxForwardedRef\n            }\n          )\n        );\n      }, [reactReduxForwardedRef, WrappedComponent, actualChildProps]);\n      const renderedChild = React.useMemo(() => {\n        if (shouldHandleStateChanges) {\n          return /* @__PURE__ */ React.createElement(ContextToUse.Provider, { value: overriddenContextValue }, renderedWrappedComponent);\n        }\n        return renderedWrappedComponent;\n      }, [ContextToUse, renderedWrappedComponent, overriddenContextValue]);\n      return renderedChild;\n    }\n    const _Connect = React.memo(ConnectFunction);\n    const Connect = _Connect;\n    Connect.WrappedComponent = WrappedComponent;\n    Connect.displayName = ConnectFunction.displayName = displayName;\n    if (forwardRef) {\n      const _forwarded = React.forwardRef(\n        function forwardConnectRef(props, ref) {\n          return /* @__PURE__ */ React.createElement(Connect, { ...props, reactReduxForwardedRef: ref });\n        }\n      );\n      const forwarded = _forwarded;\n      forwarded.displayName = displayName;\n      forwarded.WrappedComponent = WrappedComponent;\n      return /* @__PURE__ */ hoistNonReactStatics(forwarded, WrappedComponent);\n    }\n    return /* @__PURE__ */ hoistNonReactStatics(Connect, WrappedComponent);\n  };\n  return wrapWithConnect;\n}\nvar connect_default = connect;\n\n// src/components/Provider.tsx\nfunction Provider(providerProps) {\n  const { children, context, serverState, store } = providerProps;\n  const contextValue = React.useMemo(() => {\n    const subscription = createSubscription(store);\n    const baseContextValue = {\n      store,\n      subscription,\n      getServerState: serverState ? () => serverState : void 0\n    };\n    if (process.env.NODE_ENV === \"production\") {\n      return baseContextValue;\n    } else {\n      const { identityFunctionCheck = \"once\", stabilityCheck = \"once\" } = providerProps;\n      return /* @__PURE__ */ Object.assign(baseContextValue, {\n        stabilityCheck,\n        identityFunctionCheck\n      });\n    }\n  }, [store, serverState]);\n  const previousState = React.useMemo(() => store.getState(), [store]);\n  useIsomorphicLayoutEffect(() => {\n    const { subscription } = contextValue;\n    subscription.onStateChange = subscription.notifyNestedSubs;\n    subscription.trySubscribe();\n    if (previousState !== store.getState()) {\n      subscription.notifyNestedSubs();\n    }\n    return () => {\n      subscription.tryUnsubscribe();\n      subscription.onStateChange = void 0;\n    };\n  }, [contextValue, previousState]);\n  const Context = context || ReactReduxContext;\n  return /* @__PURE__ */ React.createElement(Context.Provider, { value: contextValue }, children);\n}\nvar Provider_default = Provider;\n\n// src/hooks/useReduxContext.ts\nfunction createReduxContextHook(context = ReactReduxContext) {\n  return function useReduxContext2() {\n    const contextValue = React.useContext(context);\n    if (process.env.NODE_ENV !== \"production\" && !contextValue) {\n      throw new Error(\n        \"could not find react-redux context value; please ensure the component is wrapped in a <Provider>\"\n      );\n    }\n    return contextValue;\n  };\n}\nvar useReduxContext = /* @__PURE__ */ createReduxContextHook();\n\n// src/hooks/useStore.ts\nfunction createStoreHook(context = ReactReduxContext) {\n  const useReduxContext2 = context === ReactReduxContext ? useReduxContext : (\n    // @ts-ignore\n    createReduxContextHook(context)\n  );\n  const useStore2 = () => {\n    const { store } = useReduxContext2();\n    return store;\n  };\n  Object.assign(useStore2, {\n    withTypes: () => useStore2\n  });\n  return useStore2;\n}\nvar useStore = /* @__PURE__ */ createStoreHook();\n\n// src/hooks/useDispatch.ts\nfunction createDispatchHook(context = ReactReduxContext) {\n  const useStore2 = context === ReactReduxContext ? useStore : createStoreHook(context);\n  const useDispatch2 = () => {\n    const store = useStore2();\n    return store.dispatch;\n  };\n  Object.assign(useDispatch2, {\n    withTypes: () => useDispatch2\n  });\n  return useDispatch2;\n}\nvar useDispatch = /* @__PURE__ */ createDispatchHook();\n\n// src/hooks/useSelector.ts\nimport { useSyncExternalStoreWithSelector } from \"use-sync-external-store/with-selector.js\";\nvar refEquality = (a, b) => a === b;\nfunction createSelectorHook(context = ReactReduxContext) {\n  const useReduxContext2 = context === ReactReduxContext ? useReduxContext : createReduxContextHook(context);\n  const useSelector2 = (selector, equalityFnOrOptions = {}) => {\n    const { equalityFn = refEquality } = typeof equalityFnOrOptions === \"function\" ? { equalityFn: equalityFnOrOptions } : equalityFnOrOptions;\n    if (process.env.NODE_ENV !== \"production\") {\n      if (!selector) {\n        throw new Error(`You must pass a selector to useSelector`);\n      }\n      if (typeof selector !== \"function\") {\n        throw new Error(`You must pass a function as a selector to useSelector`);\n      }\n      if (typeof equalityFn !== \"function\") {\n        throw new Error(\n          `You must pass a function as an equality function to useSelector`\n        );\n      }\n    }\n    const reduxContext = useReduxContext2();\n    const { store, subscription, getServerState } = reduxContext;\n    const firstRun = React.useRef(true);\n    const wrappedSelector = React.useCallback(\n      {\n        [selector.name](state) {\n          const selected = selector(state);\n          if (process.env.NODE_ENV !== \"production\") {\n            const { devModeChecks = {} } = typeof equalityFnOrOptions === \"function\" ? {} : equalityFnOrOptions;\n            const { identityFunctionCheck, stabilityCheck } = reduxContext;\n            const {\n              identityFunctionCheck: finalIdentityFunctionCheck,\n              stabilityCheck: finalStabilityCheck\n            } = {\n              stabilityCheck,\n              identityFunctionCheck,\n              ...devModeChecks\n            };\n            if (finalStabilityCheck === \"always\" || finalStabilityCheck === \"once\" && firstRun.current) {\n              const toCompare = selector(state);\n              if (!equalityFn(selected, toCompare)) {\n                let stack = void 0;\n                try {\n                  throw new Error();\n                } catch (e) {\n                  ;\n                  ({ stack } = e);\n                }\n                console.warn(\n                  \"Selector \" + (selector.name || \"unknown\") + \" returned a different result when called with the same parameters. This can lead to unnecessary rerenders.\\nSelectors that return a new reference (such as an object or an array) should be memoized: https://redux.js.org/usage/deriving-data-selectors#optimizing-selectors-with-memoization\",\n                  {\n                    state,\n                    selected,\n                    selected2: toCompare,\n                    stack\n                  }\n                );\n              }\n            }\n            if (finalIdentityFunctionCheck === \"always\" || finalIdentityFunctionCheck === \"once\" && firstRun.current) {\n              if (selected === state) {\n                let stack = void 0;\n                try {\n                  throw new Error();\n                } catch (e) {\n                  ;\n                  ({ stack } = e);\n                }\n                console.warn(\n                  \"Selector \" + (selector.name || \"unknown\") + \" returned the root state when called. This can lead to unnecessary rerenders.\\nSelectors that return the entire state are almost certainly a mistake, as they will cause a rerender whenever *anything* in state changes.\",\n                  { stack }\n                );\n              }\n            }\n            if (firstRun.current) firstRun.current = false;\n          }\n          return selected;\n        }\n      }[selector.name],\n      [selector]\n    );\n    const selectedState = useSyncExternalStoreWithSelector(\n      subscription.addNestedSub,\n      store.getState,\n      getServerState || store.getState,\n      wrappedSelector,\n      equalityFn\n    );\n    React.useDebugValue(selectedState);\n    return selectedState;\n  };\n  Object.assign(useSelector2, {\n    withTypes: () => useSelector2\n  });\n  return useSelector2;\n}\nvar useSelector = /* @__PURE__ */ createSelectorHook();\n\n// src/exports.ts\nvar batch = defaultNoopBatch;\nexport {\n  Provider_default as Provider,\n  ReactReduxContext,\n  batch,\n  connect_default as connect,\n  createDispatchHook,\n  createSelectorHook,\n  createStoreHook,\n  shallowEqual,\n  useDispatch,\n  useSelector,\n  useStore\n};\n//# sourceMappingURL=react-redux.mjs.map","import type { TypedUseSelectorHook } from 'react-redux';\nimport type { RootState } from '../store';\nimport type { ViewModelMap } from '../viewModel/registry';\nimport { useSelector } from 'react-redux';\nimport { useMaidrContext } from '../context';\n\nconst useAppSelector: TypedUseSelectorHook<RootState> = useSelector;\n\n/**\n * Hook to retrieve a view model instance from the current MAIDR context.\n * @param key - The key identifying the view model\n * @returns The view model instance\n */\nexport function useViewModel<K extends keyof ViewModelMap>(key: K): ViewModelMap[K] {\n  const { viewModelRegistry } = useMaidrContext();\n  return viewModelRegistry.get(key);\n}\n\n// Exclude commandExecutor from ViewModelsWithState since it's not in Redux state\ntype ViewModelsWithState = Exclude<keyof ViewModelMap, 'commandExecutor'>;\n\n/**\n * Hook to subscribe to a view model's Redux state slice.\n * @param key - The key identifying the view model's state slice\n * @returns The current state for the given key\n */\nexport function useViewModelState<K extends ViewModelsWithState>(key: K): RootState[K] {\n  return useAppSelector(state => state[key]);\n}\n","import { useViewModel, useViewModelState } from '@state/hook/useViewModel';\nimport { DomEventType } from '@type/event';\nimport { Constant } from '@util/constant';\nimport React, { useEffect, useId, useRef } from 'react';\n\nconst Braille: React.FC = () => {\n  const id = useId();\n  const viewModel = useViewModel('braille');\n  const { value, index, displaySize } = useViewModelState('braille');\n\n  const brailleRef = useRef<HTMLTextAreaElement>(null);\n  const lastIndexRef = useRef<number>(index);\n  // Handle Selection Change\n  const handleSelectionChange = (event: Event): void => {\n    const textArea = event.target as HTMLTextAreaElement;\n    const newIndex = textArea.selectionStart;\n    if (newIndex >= value.length) {\n      textArea.setSelectionRange(lastIndexRef.current, lastIndexRef.current);\n      return;\n    }\n\n    if (newIndex !== lastIndexRef.current) {\n      lastIndexRef.current = newIndex;\n      viewModel.moveToIndex(newIndex);\n    }\n  };\n\n  useEffect(() => {\n    const textArea = brailleRef.current;\n    if (!textArea) {\n      return;\n    }\n\n    textArea.addEventListener(DomEventType.SELECTION_CHANGE, handleSelectionChange);\n    return () => {\n      textArea.removeEventListener(DomEventType.SELECTION_CHANGE, handleSelectionChange);\n    };\n  }, []);\n  useEffect(() => {\n    const textArea = brailleRef.current;\n    if (!textArea) {\n      return;\n    }\n\n    textArea.value = value;\n    textArea.selectionStart = index;\n    textArea.selectionEnd = index;\n    textArea.focus();\n    lastIndexRef.current = index;\n  }, [value, index]);\n\n  return (\n    // role=\"application\" on the wrapper ensures screen readers (NVDA/JAWS)\n    // pass all keys, including Escape, through to the web app. Placed on\n    // the div (not the textarea) so the textarea retains its native\n    // \"textbox\" role — putting it on the textarea itself caused NVDA to\n    // announce \"edit braille app\" and broke arrow-key cursor movement.\n    // Browse-mode suppression for sibling content is not a concern here\n    // because the textarea is the sole interactive child.\n    <div id={id} role=\"application\" aria-label=\"Braille display\">\n      <textarea\n        id={`${Constant.BRAILLE_TEXT_AREA}-${id}`}\n        ref={brailleRef}\n        defaultValue={value}\n        autoCapitalize=\"off\"\n        autoCorrect=\"off\"\n        spellCheck={false}\n        wrap=\"off\"\n        rows={5}\n        cols={displaySize}\n      />\n    </div>\n  );\n};\n\nexport default Braille;\n","const defaultGenerator = componentName => componentName;\nconst createClassNameGenerator = () => {\n  let generate = defaultGenerator;\n  return {\n    configure(generator) {\n      generate = generator;\n    },\n    generate(componentName) {\n      return generate(componentName);\n    },\n    reset() {\n      generate = defaultGenerator;\n    }\n  };\n};\nconst ClassNameGenerator = createClassNameGenerator();\nexport default ClassNameGenerator;","/**\n * WARNING: Don't import this directly. It's imported by the code generated by\n * `@mui/interal-babel-plugin-minify-errors`. Make sure to always use string literals in `Error`\n * constructors to ensure the plugin works as expected. Supported patterns include:\n *   throw new Error('My message');\n *   throw new Error(`My message: ${foo}`);\n *   throw new Error(`My message: ${foo}` + 'another string');\n *   ...\n * @param {number} code\n */\nexport default function formatMuiErrorMessage(code, ...args) {\n  const url = new URL(`https://mui.com/production-error/?code=${code}`);\n  args.forEach(arg => url.searchParams.append('args[]', arg));\n  return `Minified MUI error #${code}; visit ${url} for the full message.`;\n}","import _formatErrorMessage from \"@mui/utils/formatMuiErrorMessage\";\n// It should to be noted that this function isn't equivalent to `text-transform: capitalize`.\n//\n// A strict capitalization should uppercase the first letter of each word in the sentence.\n// We only handle the first word.\nexport default function capitalize(string) {\n  if (typeof string !== 'string') {\n    throw new Error(process.env.NODE_ENV !== \"production\" ? 'MUI: `capitalize(string)` expects a string argument.' : _formatErrorMessage(7));\n  }\n  return string.charAt(0).toUpperCase() + string.slice(1);\n}","/**\n * Safe chained function.\n *\n * Will only create a new function if needed,\n * otherwise will pass back existing functions or null.\n */\nexport default function createChainedFunction(...funcs) {\n  return funcs.reduce((acc, func) => {\n    if (func == null) {\n      return acc;\n    }\n    return function chainedFunction(...args) {\n      acc.apply(this, args);\n      func.apply(this, args);\n    };\n  }, () => {});\n}","/** @license React v16.13.1\n * react-is.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';var b=\"function\"===typeof Symbol&&Symbol.for,c=b?Symbol.for(\"react.element\"):60103,d=b?Symbol.for(\"react.portal\"):60106,e=b?Symbol.for(\"react.fragment\"):60107,f=b?Symbol.for(\"react.strict_mode\"):60108,g=b?Symbol.for(\"react.profiler\"):60114,h=b?Symbol.for(\"react.provider\"):60109,k=b?Symbol.for(\"react.context\"):60110,l=b?Symbol.for(\"react.async_mode\"):60111,m=b?Symbol.for(\"react.concurrent_mode\"):60111,n=b?Symbol.for(\"react.forward_ref\"):60112,p=b?Symbol.for(\"react.suspense\"):60113,q=b?\nSymbol.for(\"react.suspense_list\"):60120,r=b?Symbol.for(\"react.memo\"):60115,t=b?Symbol.for(\"react.lazy\"):60116,v=b?Symbol.for(\"react.block\"):60121,w=b?Symbol.for(\"react.fundamental\"):60117,x=b?Symbol.for(\"react.responder\"):60118,y=b?Symbol.for(\"react.scope\"):60119;\nfunction z(a){if(\"object\"===typeof a&&null!==a){var u=a.$$typeof;switch(u){case c:switch(a=a.type,a){case l:case m:case e:case g:case f:case p:return a;default:switch(a=a&&a.$$typeof,a){case k:case n:case t:case r:case h:return a;default:return u}}case d:return u}}}function A(a){return z(a)===m}exports.AsyncMode=l;exports.ConcurrentMode=m;exports.ContextConsumer=k;exports.ContextProvider=h;exports.Element=c;exports.ForwardRef=n;exports.Fragment=e;exports.Lazy=t;exports.Memo=r;exports.Portal=d;\nexports.Profiler=g;exports.StrictMode=f;exports.Suspense=p;exports.isAsyncMode=function(a){return A(a)||z(a)===l};exports.isConcurrentMode=A;exports.isContextConsumer=function(a){return z(a)===k};exports.isContextProvider=function(a){return z(a)===h};exports.isElement=function(a){return\"object\"===typeof a&&null!==a&&a.$$typeof===c};exports.isForwardRef=function(a){return z(a)===n};exports.isFragment=function(a){return z(a)===e};exports.isLazy=function(a){return z(a)===t};\nexports.isMemo=function(a){return z(a)===r};exports.isPortal=function(a){return z(a)===d};exports.isProfiler=function(a){return z(a)===g};exports.isStrictMode=function(a){return z(a)===f};exports.isSuspense=function(a){return z(a)===p};\nexports.isValidElementType=function(a){return\"string\"===typeof a||\"function\"===typeof a||a===e||a===m||a===g||a===f||a===p||a===q||\"object\"===typeof a&&null!==a&&(a.$$typeof===t||a.$$typeof===r||a.$$typeof===h||a.$$typeof===k||a.$$typeof===n||a.$$typeof===w||a.$$typeof===x||a.$$typeof===y||a.$$typeof===v)};exports.typeOf=z;\n","/** @license React v16.13.1\n * react-is.development.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\n\n\nif (process.env.NODE_ENV !== \"production\") {\n  (function() {\n'use strict';\n\n// The Symbol used to tag the ReactElement-like types. If there is no native Symbol\n// nor polyfill, then a plain number is used for performance.\nvar hasSymbol = typeof Symbol === 'function' && Symbol.for;\nvar REACT_ELEMENT_TYPE = hasSymbol ? Symbol.for('react.element') : 0xeac7;\nvar REACT_PORTAL_TYPE = hasSymbol ? Symbol.for('react.portal') : 0xeaca;\nvar REACT_FRAGMENT_TYPE = hasSymbol ? Symbol.for('react.fragment') : 0xeacb;\nvar REACT_STRICT_MODE_TYPE = hasSymbol ? Symbol.for('react.strict_mode') : 0xeacc;\nvar REACT_PROFILER_TYPE = hasSymbol ? Symbol.for('react.profiler') : 0xead2;\nvar REACT_PROVIDER_TYPE = hasSymbol ? Symbol.for('react.provider') : 0xeacd;\nvar REACT_CONTEXT_TYPE = hasSymbol ? Symbol.for('react.context') : 0xeace; // TODO: We don't use AsyncMode or ConcurrentMode anymore. They were temporary\n// (unstable) APIs that have been removed. Can we remove the symbols?\n\nvar REACT_ASYNC_MODE_TYPE = hasSymbol ? Symbol.for('react.async_mode') : 0xeacf;\nvar REACT_CONCURRENT_MODE_TYPE = hasSymbol ? Symbol.for('react.concurrent_mode') : 0xeacf;\nvar REACT_FORWARD_REF_TYPE = hasSymbol ? Symbol.for('react.forward_ref') : 0xead0;\nvar REACT_SUSPENSE_TYPE = hasSymbol ? Symbol.for('react.suspense') : 0xead1;\nvar REACT_SUSPENSE_LIST_TYPE = hasSymbol ? Symbol.for('react.suspense_list') : 0xead8;\nvar REACT_MEMO_TYPE = hasSymbol ? Symbol.for('react.memo') : 0xead3;\nvar REACT_LAZY_TYPE = hasSymbol ? Symbol.for('react.lazy') : 0xead4;\nvar REACT_BLOCK_TYPE = hasSymbol ? Symbol.for('react.block') : 0xead9;\nvar REACT_FUNDAMENTAL_TYPE = hasSymbol ? Symbol.for('react.fundamental') : 0xead5;\nvar REACT_RESPONDER_TYPE = hasSymbol ? Symbol.for('react.responder') : 0xead6;\nvar REACT_SCOPE_TYPE = hasSymbol ? Symbol.for('react.scope') : 0xead7;\n\nfunction isValidElementType(type) {\n  return typeof type === 'string' || typeof type === 'function' || // Note: its typeof might be other than 'symbol' or 'number' if it's a polyfill.\n  type === REACT_FRAGMENT_TYPE || type === REACT_CONCURRENT_MODE_TYPE || type === REACT_PROFILER_TYPE || type === REACT_STRICT_MODE_TYPE || type === REACT_SUSPENSE_TYPE || type === REACT_SUSPENSE_LIST_TYPE || typeof type === 'object' && type !== null && (type.$$typeof === REACT_LAZY_TYPE || type.$$typeof === REACT_MEMO_TYPE || type.$$typeof === REACT_PROVIDER_TYPE || type.$$typeof === REACT_CONTEXT_TYPE || type.$$typeof === REACT_FORWARD_REF_TYPE || type.$$typeof === REACT_FUNDAMENTAL_TYPE || type.$$typeof === REACT_RESPONDER_TYPE || type.$$typeof === REACT_SCOPE_TYPE || type.$$typeof === REACT_BLOCK_TYPE);\n}\n\nfunction typeOf(object) {\n  if (typeof object === 'object' && object !== null) {\n    var $$typeof = object.$$typeof;\n\n    switch ($$typeof) {\n      case REACT_ELEMENT_TYPE:\n        var type = object.type;\n\n        switch (type) {\n          case REACT_ASYNC_MODE_TYPE:\n          case REACT_CONCURRENT_MODE_TYPE:\n          case REACT_FRAGMENT_TYPE:\n          case REACT_PROFILER_TYPE:\n          case REACT_STRICT_MODE_TYPE:\n          case REACT_SUSPENSE_TYPE:\n            return type;\n\n          default:\n            var $$typeofType = type && type.$$typeof;\n\n            switch ($$typeofType) {\n              case REACT_CONTEXT_TYPE:\n              case REACT_FORWARD_REF_TYPE:\n              case REACT_LAZY_TYPE:\n              case REACT_MEMO_TYPE:\n              case REACT_PROVIDER_TYPE:\n                return $$typeofType;\n\n              default:\n                return $$typeof;\n            }\n\n        }\n\n      case REACT_PORTAL_TYPE:\n        return $$typeof;\n    }\n  }\n\n  return undefined;\n} // AsyncMode is deprecated along with isAsyncMode\n\nvar AsyncMode = REACT_ASYNC_MODE_TYPE;\nvar ConcurrentMode = REACT_CONCURRENT_MODE_TYPE;\nvar ContextConsumer = REACT_CONTEXT_TYPE;\nvar ContextProvider = REACT_PROVIDER_TYPE;\nvar Element = REACT_ELEMENT_TYPE;\nvar ForwardRef = REACT_FORWARD_REF_TYPE;\nvar Fragment = REACT_FRAGMENT_TYPE;\nvar Lazy = REACT_LAZY_TYPE;\nvar Memo = REACT_MEMO_TYPE;\nvar Portal = REACT_PORTAL_TYPE;\nvar Profiler = REACT_PROFILER_TYPE;\nvar StrictMode = REACT_STRICT_MODE_TYPE;\nvar Suspense = REACT_SUSPENSE_TYPE;\nvar hasWarnedAboutDeprecatedIsAsyncMode = false; // AsyncMode should be deprecated\n\nfunction isAsyncMode(object) {\n  {\n    if (!hasWarnedAboutDeprecatedIsAsyncMode) {\n      hasWarnedAboutDeprecatedIsAsyncMode = true; // Using console['warn'] to evade Babel and ESLint\n\n      console['warn']('The ReactIs.isAsyncMode() alias has been deprecated, ' + 'and will be removed in React 17+. Update your code to use ' + 'ReactIs.isConcurrentMode() instead. It has the exact same API.');\n    }\n  }\n\n  return isConcurrentMode(object) || typeOf(object) === REACT_ASYNC_MODE_TYPE;\n}\nfunction isConcurrentMode(object) {\n  return typeOf(object) === REACT_CONCURRENT_MODE_TYPE;\n}\nfunction isContextConsumer(object) {\n  return typeOf(object) === REACT_CONTEXT_TYPE;\n}\nfunction isContextProvider(object) {\n  return typeOf(object) === REACT_PROVIDER_TYPE;\n}\nfunction isElement(object) {\n  return typeof object === 'object' && object !== null && object.$$typeof === REACT_ELEMENT_TYPE;\n}\nfunction isForwardRef(object) {\n  return typeOf(object) === REACT_FORWARD_REF_TYPE;\n}\nfunction isFragment(object) {\n  return typeOf(object) === REACT_FRAGMENT_TYPE;\n}\nfunction isLazy(object) {\n  return typeOf(object) === REACT_LAZY_TYPE;\n}\nfunction isMemo(object) {\n  return typeOf(object) === REACT_MEMO_TYPE;\n}\nfunction isPortal(object) {\n  return typeOf(object) === REACT_PORTAL_TYPE;\n}\nfunction isProfiler(object) {\n  return typeOf(object) === REACT_PROFILER_TYPE;\n}\nfunction isStrictMode(object) {\n  return typeOf(object) === REACT_STRICT_MODE_TYPE;\n}\nfunction isSuspense(object) {\n  return typeOf(object) === REACT_SUSPENSE_TYPE;\n}\n\nexports.AsyncMode = AsyncMode;\nexports.ConcurrentMode = ConcurrentMode;\nexports.ContextConsumer = ContextConsumer;\nexports.ContextProvider = ContextProvider;\nexports.Element = Element;\nexports.ForwardRef = ForwardRef;\nexports.Fragment = Fragment;\nexports.Lazy = Lazy;\nexports.Memo = Memo;\nexports.Portal = Portal;\nexports.Profiler = Profiler;\nexports.StrictMode = StrictMode;\nexports.Suspense = Suspense;\nexports.isAsyncMode = isAsyncMode;\nexports.isConcurrentMode = isConcurrentMode;\nexports.isContextConsumer = isContextConsumer;\nexports.isContextProvider = isContextProvider;\nexports.isElement = isElement;\nexports.isForwardRef = isForwardRef;\nexports.isFragment = isFragment;\nexports.isLazy = isLazy;\nexports.isMemo = isMemo;\nexports.isPortal = isPortal;\nexports.isProfiler = isProfiler;\nexports.isStrictMode = isStrictMode;\nexports.isSuspense = isSuspense;\nexports.isValidElementType = isValidElementType;\nexports.typeOf = typeOf;\n  })();\n}\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n  module.exports = require('./cjs/react-is.production.min.js');\n} else {\n  module.exports = require('./cjs/react-is.development.js');\n}\n","/*\nobject-assign\n(c) Sindre Sorhus\n@license MIT\n*/\n\n'use strict';\n/* eslint-disable no-unused-vars */\nvar getOwnPropertySymbols = Object.getOwnPropertySymbols;\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\nvar propIsEnumerable = Object.prototype.propertyIsEnumerable;\n\nfunction toObject(val) {\n\tif (val === null || val === undefined) {\n\t\tthrow new TypeError('Object.assign cannot be called with null or undefined');\n\t}\n\n\treturn Object(val);\n}\n\nfunction shouldUseNative() {\n\ttry {\n\t\tif (!Object.assign) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Detect buggy property enumeration order in older V8 versions.\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=4118\n\t\tvar test1 = new String('abc');  // eslint-disable-line no-new-wrappers\n\t\ttest1[5] = 'de';\n\t\tif (Object.getOwnPropertyNames(test1)[0] === '5') {\n\t\t\treturn false;\n\t\t}\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=3056\n\t\tvar test2 = {};\n\t\tfor (var i = 0; i < 10; i++) {\n\t\t\ttest2['_' + String.fromCharCode(i)] = i;\n\t\t}\n\t\tvar order2 = Object.getOwnPropertyNames(test2).map(function (n) {\n\t\t\treturn test2[n];\n\t\t});\n\t\tif (order2.join('') !== '0123456789') {\n\t\t\treturn false;\n\t\t}\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=3056\n\t\tvar test3 = {};\n\t\t'abcdefghijklmnopqrst'.split('').forEach(function (letter) {\n\t\t\ttest3[letter] = letter;\n\t\t});\n\t\tif (Object.keys(Object.assign({}, test3)).join('') !==\n\t\t\t\t'abcdefghijklmnopqrst') {\n\t\t\treturn false;\n\t\t}\n\n\t\treturn true;\n\t} catch (err) {\n\t\t// We don't expect any of the above to throw, but better to be safe.\n\t\treturn false;\n\t}\n}\n\nmodule.exports = shouldUseNative() ? Object.assign : function (target, source) {\n\tvar from;\n\tvar to = toObject(target);\n\tvar symbols;\n\n\tfor (var s = 1; s < arguments.length; s++) {\n\t\tfrom = Object(arguments[s]);\n\n\t\tfor (var key in from) {\n\t\t\tif (hasOwnProperty.call(from, key)) {\n\t\t\t\tto[key] = from[key];\n\t\t\t}\n\t\t}\n\n\t\tif (getOwnPropertySymbols) {\n\t\t\tsymbols = getOwnPropertySymbols(from);\n\t\t\tfor (var i = 0; i < symbols.length; i++) {\n\t\t\t\tif (propIsEnumerable.call(from, symbols[i])) {\n\t\t\t\t\tto[symbols[i]] = from[symbols[i]];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn to;\n};\n","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\nvar ReactPropTypesSecret = 'SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED';\n\nmodule.exports = ReactPropTypesSecret;\n","module.exports = Function.call.bind(Object.prototype.hasOwnProperty);\n","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\nvar printWarning = function() {};\n\nif (process.env.NODE_ENV !== 'production') {\n  var ReactPropTypesSecret = require('./lib/ReactPropTypesSecret');\n  var loggedTypeFailures = {};\n  var has = require('./lib/has');\n\n  printWarning = function(text) {\n    var message = 'Warning: ' + text;\n    if (typeof console !== 'undefined') {\n      console.error(message);\n    }\n    try {\n      // --- Welcome to debugging React ---\n      // This error was thrown as a convenience so that you can use this stack\n      // to find the callsite that caused this warning to fire.\n      throw new Error(message);\n    } catch (x) { /**/ }\n  };\n}\n\n/**\n * Assert that the values match with the type specs.\n * Error messages are memorized and will only be shown once.\n *\n * @param {object} typeSpecs Map of name to a ReactPropType\n * @param {object} values Runtime values that need to be type-checked\n * @param {string} location e.g. \"prop\", \"context\", \"child context\"\n * @param {string} componentName Name of the component for error messages.\n * @param {?Function} getStack Returns the component stack.\n * @private\n */\nfunction checkPropTypes(typeSpecs, values, location, componentName, getStack) {\n  if (process.env.NODE_ENV !== 'production') {\n    for (var typeSpecName in typeSpecs) {\n      if (has(typeSpecs, typeSpecName)) {\n        var error;\n        // Prop type validation may throw. In case they do, we don't want to\n        // fail the render phase where it didn't fail before. So we log it.\n        // After these have been cleaned up, we'll let them throw.\n        try {\n          // This is intentionally an invariant that gets caught. It's the same\n          // behavior as without this statement except with a better message.\n          if (typeof typeSpecs[typeSpecName] !== 'function') {\n            var err = Error(\n              (componentName || 'React class') + ': ' + location + ' type `' + typeSpecName + '` is invalid; ' +\n              'it must be a function, usually from the `prop-types` package, but received `' + typeof typeSpecs[typeSpecName] + '`.' +\n              'This often happens because of typos such as `PropTypes.function` instead of `PropTypes.func`.'\n            );\n            err.name = 'Invariant Violation';\n            throw err;\n          }\n          error = typeSpecs[typeSpecName](values, typeSpecName, componentName, location, null, ReactPropTypesSecret);\n        } catch (ex) {\n          error = ex;\n        }\n        if (error && !(error instanceof Error)) {\n          printWarning(\n            (componentName || 'React class') + ': type specification of ' +\n            location + ' `' + typeSpecName + '` is invalid; the type checker ' +\n            'function must return `null` or an `Error` but returned a ' + typeof error + '. ' +\n            'You may have forgotten to pass an argument to the type checker ' +\n            'creator (arrayOf, instanceOf, objectOf, oneOf, oneOfType, and ' +\n            'shape all require an argument).'\n          );\n        }\n        if (error instanceof Error && !(error.message in loggedTypeFailures)) {\n          // Only monitor this failure once because there tends to be a lot of the\n          // same error.\n          loggedTypeFailures[error.message] = true;\n\n          var stack = getStack ? getStack() : '';\n\n          printWarning(\n            'Failed ' + location + ' type: ' + error.message + (stack != null ? stack : '')\n          );\n        }\n      }\n    }\n  }\n}\n\n/**\n * Resets warning cache when testing.\n *\n * @private\n */\ncheckPropTypes.resetWarningCache = function() {\n  if (process.env.NODE_ENV !== 'production') {\n    loggedTypeFailures = {};\n  }\n}\n\nmodule.exports = checkPropTypes;\n","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\nvar ReactIs = require('react-is');\nvar assign = require('object-assign');\n\nvar ReactPropTypesSecret = require('./lib/ReactPropTypesSecret');\nvar has = require('./lib/has');\nvar checkPropTypes = require('./checkPropTypes');\n\nvar printWarning = function() {};\n\nif (process.env.NODE_ENV !== 'production') {\n  printWarning = function(text) {\n    var message = 'Warning: ' + text;\n    if (typeof console !== 'undefined') {\n      console.error(message);\n    }\n    try {\n      // --- Welcome to debugging React ---\n      // This error was thrown as a convenience so that you can use this stack\n      // to find the callsite that caused this warning to fire.\n      throw new Error(message);\n    } catch (x) {}\n  };\n}\n\nfunction emptyFunctionThatReturnsNull() {\n  return null;\n}\n\nmodule.exports = function(isValidElement, throwOnDirectAccess) {\n  /* global Symbol */\n  var ITERATOR_SYMBOL = typeof Symbol === 'function' && Symbol.iterator;\n  var FAUX_ITERATOR_SYMBOL = '@@iterator'; // Before Symbol spec.\n\n  /**\n   * Returns the iterator method function contained on the iterable object.\n   *\n   * Be sure to invoke the function with the iterable as context:\n   *\n   *     var iteratorFn = getIteratorFn(myIterable);\n   *     if (iteratorFn) {\n   *       var iterator = iteratorFn.call(myIterable);\n   *       ...\n   *     }\n   *\n   * @param {?object} maybeIterable\n   * @return {?function}\n   */\n  function getIteratorFn(maybeIterable) {\n    var iteratorFn = maybeIterable && (ITERATOR_SYMBOL && maybeIterable[ITERATOR_SYMBOL] || maybeIterable[FAUX_ITERATOR_SYMBOL]);\n    if (typeof iteratorFn === 'function') {\n      return iteratorFn;\n    }\n  }\n\n  /**\n   * Collection of methods that allow declaration and validation of props that are\n   * supplied to React components. Example usage:\n   *\n   *   var Props = require('ReactPropTypes');\n   *   var MyArticle = React.createClass({\n   *     propTypes: {\n   *       // An optional string prop named \"description\".\n   *       description: Props.string,\n   *\n   *       // A required enum prop named \"category\".\n   *       category: Props.oneOf(['News','Photos']).isRequired,\n   *\n   *       // A prop named \"dialog\" that requires an instance of Dialog.\n   *       dialog: Props.instanceOf(Dialog).isRequired\n   *     },\n   *     render: function() { ... }\n   *   });\n   *\n   * A more formal specification of how these methods are used:\n   *\n   *   type := array|bool|func|object|number|string|oneOf([...])|instanceOf(...)\n   *   decl := ReactPropTypes.{type}(.isRequired)?\n   *\n   * Each and every declaration produces a function with the same signature. This\n   * allows the creation of custom validation functions. For example:\n   *\n   *  var MyLink = React.createClass({\n   *    propTypes: {\n   *      // An optional string or URI prop named \"href\".\n   *      href: function(props, propName, componentName) {\n   *        var propValue = props[propName];\n   *        if (propValue != null && typeof propValue !== 'string' &&\n   *            !(propValue instanceof URI)) {\n   *          return new Error(\n   *            'Expected a string or an URI for ' + propName + ' in ' +\n   *            componentName\n   *          );\n   *        }\n   *      }\n   *    },\n   *    render: function() {...}\n   *  });\n   *\n   * @internal\n   */\n\n  var ANONYMOUS = '<<anonymous>>';\n\n  // Important!\n  // Keep this list in sync with production version in `./factoryWithThrowingShims.js`.\n  var ReactPropTypes = {\n    array: createPrimitiveTypeChecker('array'),\n    bigint: createPrimitiveTypeChecker('bigint'),\n    bool: createPrimitiveTypeChecker('boolean'),\n    func: createPrimitiveTypeChecker('function'),\n    number: createPrimitiveTypeChecker('number'),\n    object: createPrimitiveTypeChecker('object'),\n    string: createPrimitiveTypeChecker('string'),\n    symbol: createPrimitiveTypeChecker('symbol'),\n\n    any: createAnyTypeChecker(),\n    arrayOf: createArrayOfTypeChecker,\n    element: createElementTypeChecker(),\n    elementType: createElementTypeTypeChecker(),\n    instanceOf: createInstanceTypeChecker,\n    node: createNodeChecker(),\n    objectOf: createObjectOfTypeChecker,\n    oneOf: createEnumTypeChecker,\n    oneOfType: createUnionTypeChecker,\n    shape: createShapeTypeChecker,\n    exact: createStrictShapeTypeChecker,\n  };\n\n  /**\n   * inlined Object.is polyfill to avoid requiring consumers ship their own\n   * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/is\n   */\n  /*eslint-disable no-self-compare*/\n  function is(x, y) {\n    // SameValue algorithm\n    if (x === y) {\n      // Steps 1-5, 7-10\n      // Steps 6.b-6.e: +0 != -0\n      return x !== 0 || 1 / x === 1 / y;\n    } else {\n      // Step 6.a: NaN == NaN\n      return x !== x && y !== y;\n    }\n  }\n  /*eslint-enable no-self-compare*/\n\n  /**\n   * We use an Error-like object for backward compatibility as people may call\n   * PropTypes directly and inspect their output. However, we don't use real\n   * Errors anymore. We don't inspect their stack anyway, and creating them\n   * is prohibitively expensive if they are created too often, such as what\n   * happens in oneOfType() for any type before the one that matched.\n   */\n  function PropTypeError(message, data) {\n    this.message = message;\n    this.data = data && typeof data === 'object' ? data: {};\n    this.stack = '';\n  }\n  // Make `instanceof Error` still work for returned errors.\n  PropTypeError.prototype = Error.prototype;\n\n  function createChainableTypeChecker(validate) {\n    if (process.env.NODE_ENV !== 'production') {\n      var manualPropTypeCallCache = {};\n      var manualPropTypeWarningCount = 0;\n    }\n    function checkType(isRequired, props, propName, componentName, location, propFullName, secret) {\n      componentName = componentName || ANONYMOUS;\n      propFullName = propFullName || propName;\n\n      if (secret !== ReactPropTypesSecret) {\n        if (throwOnDirectAccess) {\n          // New behavior only for users of `prop-types` package\n          var err = new Error(\n            'Calling PropTypes validators directly is not supported by the `prop-types` package. ' +\n            'Use `PropTypes.checkPropTypes()` to call them. ' +\n            'Read more at http://fb.me/use-check-prop-types'\n          );\n          err.name = 'Invariant Violation';\n          throw err;\n        } else if (process.env.NODE_ENV !== 'production' && typeof console !== 'undefined') {\n          // Old behavior for people using React.PropTypes\n          var cacheKey = componentName + ':' + propName;\n          if (\n            !manualPropTypeCallCache[cacheKey] &&\n            // Avoid spamming the console because they are often not actionable except for lib authors\n            manualPropTypeWarningCount < 3\n          ) {\n            printWarning(\n              'You are manually calling a React.PropTypes validation ' +\n              'function for the `' + propFullName + '` prop on `' + componentName + '`. This is deprecated ' +\n              'and will throw in the standalone `prop-types` package. ' +\n              'You may be seeing this warning due to a third-party PropTypes ' +\n              'library. See https://fb.me/react-warning-dont-call-proptypes ' + 'for details.'\n            );\n            manualPropTypeCallCache[cacheKey] = true;\n            manualPropTypeWarningCount++;\n          }\n        }\n      }\n      if (props[propName] == null) {\n        if (isRequired) {\n          if (props[propName] === null) {\n            return new PropTypeError('The ' + location + ' `' + propFullName + '` is marked as required ' + ('in `' + componentName + '`, but its value is `null`.'));\n          }\n          return new PropTypeError('The ' + location + ' `' + propFullName + '` is marked as required in ' + ('`' + componentName + '`, but its value is `undefined`.'));\n        }\n        return null;\n      } else {\n        return validate(props, propName, componentName, location, propFullName);\n      }\n    }\n\n    var chainedCheckType = checkType.bind(null, false);\n    chainedCheckType.isRequired = checkType.bind(null, true);\n\n    return chainedCheckType;\n  }\n\n  function createPrimitiveTypeChecker(expectedType) {\n    function validate(props, propName, componentName, location, propFullName, secret) {\n      var propValue = props[propName];\n      var propType = getPropType(propValue);\n      if (propType !== expectedType) {\n        // `propValue` being instance of, say, date/regexp, pass the 'object'\n        // check, but we can offer a more precise error message here rather than\n        // 'of type `object`'.\n        var preciseType = getPreciseType(propValue);\n\n        return new PropTypeError(\n          'Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + preciseType + '` supplied to `' + componentName + '`, expected ') + ('`' + expectedType + '`.'),\n          {expectedType: expectedType}\n        );\n      }\n      return null;\n    }\n    return createChainableTypeChecker(validate);\n  }\n\n  function createAnyTypeChecker() {\n    return createChainableTypeChecker(emptyFunctionThatReturnsNull);\n  }\n\n  function createArrayOfTypeChecker(typeChecker) {\n    function validate(props, propName, componentName, location, propFullName) {\n      if (typeof typeChecker !== 'function') {\n        return new PropTypeError('Property `' + propFullName + '` of component `' + componentName + '` has invalid PropType notation inside arrayOf.');\n      }\n      var propValue = props[propName];\n      if (!Array.isArray(propValue)) {\n        var propType = getPropType(propValue);\n        return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + propType + '` supplied to `' + componentName + '`, expected an array.'));\n      }\n      for (var i = 0; i < propValue.length; i++) {\n        var error = typeChecker(propValue, i, componentName, location, propFullName + '[' + i + ']', ReactPropTypesSecret);\n        if (error instanceof Error) {\n          return error;\n        }\n      }\n      return null;\n    }\n    return createChainableTypeChecker(validate);\n  }\n\n  function createElementTypeChecker() {\n    function validate(props, propName, componentName, location, propFullName) {\n      var propValue = props[propName];\n      if (!isValidElement(propValue)) {\n        var propType = getPropType(propValue);\n        return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + propType + '` supplied to `' + componentName + '`, expected a single ReactElement.'));\n      }\n      return null;\n    }\n    return createChainableTypeChecker(validate);\n  }\n\n  function createElementTypeTypeChecker() {\n    function validate(props, propName, componentName, location, propFullName) {\n      var propValue = props[propName];\n      if (!ReactIs.isValidElementType(propValue)) {\n        var propType = getPropType(propValue);\n        return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + propType + '` supplied to `' + componentName + '`, expected a single ReactElement type.'));\n      }\n      return null;\n    }\n    return createChainableTypeChecker(validate);\n  }\n\n  function createInstanceTypeChecker(expectedClass) {\n    function validate(props, propName, componentName, location, propFullName) {\n      if (!(props[propName] instanceof expectedClass)) {\n        var expectedClassName = expectedClass.name || ANONYMOUS;\n        var actualClassName = getClassName(props[propName]);\n        return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + actualClassName + '` supplied to `' + componentName + '`, expected ') + ('instance of `' + expectedClassName + '`.'));\n      }\n      return null;\n    }\n    return createChainableTypeChecker(validate);\n  }\n\n  function createEnumTypeChecker(expectedValues) {\n    if (!Array.isArray(expectedValues)) {\n      if (process.env.NODE_ENV !== 'production') {\n        if (arguments.length > 1) {\n          printWarning(\n            'Invalid arguments supplied to oneOf, expected an array, got ' + arguments.length + ' arguments. ' +\n            'A common mistake is to write oneOf(x, y, z) instead of oneOf([x, y, z]).'\n          );\n        } else {\n          printWarning('Invalid argument supplied to oneOf, expected an array.');\n        }\n      }\n      return emptyFunctionThatReturnsNull;\n    }\n\n    function validate(props, propName, componentName, location, propFullName) {\n      var propValue = props[propName];\n      for (var i = 0; i < expectedValues.length; i++) {\n        if (is(propValue, expectedValues[i])) {\n          return null;\n        }\n      }\n\n      var valuesString = JSON.stringify(expectedValues, function replacer(key, value) {\n        var type = getPreciseType(value);\n        if (type === 'symbol') {\n          return String(value);\n        }\n        return value;\n      });\n      return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of value `' + String(propValue) + '` ' + ('supplied to `' + componentName + '`, expected one of ' + valuesString + '.'));\n    }\n    return createChainableTypeChecker(validate);\n  }\n\n  function createObjectOfTypeChecker(typeChecker) {\n    function validate(props, propName, componentName, location, propFullName) {\n      if (typeof typeChecker !== 'function') {\n        return new PropTypeError('Property `' + propFullName + '` of component `' + componentName + '` has invalid PropType notation inside objectOf.');\n      }\n      var propValue = props[propName];\n      var propType = getPropType(propValue);\n      if (propType !== 'object') {\n        return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + propType + '` supplied to `' + componentName + '`, expected an object.'));\n      }\n      for (var key in propValue) {\n        if (has(propValue, key)) {\n          var error = typeChecker(propValue, key, componentName, location, propFullName + '.' + key, ReactPropTypesSecret);\n          if (error instanceof Error) {\n            return error;\n          }\n        }\n      }\n      return null;\n    }\n    return createChainableTypeChecker(validate);\n  }\n\n  function createUnionTypeChecker(arrayOfTypeCheckers) {\n    if (!Array.isArray(arrayOfTypeCheckers)) {\n      process.env.NODE_ENV !== 'production' ? printWarning('Invalid argument supplied to oneOfType, expected an instance of array.') : void 0;\n      return emptyFunctionThatReturnsNull;\n    }\n\n    for (var i = 0; i < arrayOfTypeCheckers.length; i++) {\n      var checker = arrayOfTypeCheckers[i];\n      if (typeof checker !== 'function') {\n        printWarning(\n          'Invalid argument supplied to oneOfType. Expected an array of check functions, but ' +\n          'received ' + getPostfixForTypeWarning(checker) + ' at index ' + i + '.'\n        );\n        return emptyFunctionThatReturnsNull;\n      }\n    }\n\n    function validate(props, propName, componentName, location, propFullName) {\n      var expectedTypes = [];\n      for (var i = 0; i < arrayOfTypeCheckers.length; i++) {\n        var checker = arrayOfTypeCheckers[i];\n        var checkerResult = checker(props, propName, componentName, location, propFullName, ReactPropTypesSecret);\n        if (checkerResult == null) {\n          return null;\n        }\n        if (checkerResult.data && has(checkerResult.data, 'expectedType')) {\n          expectedTypes.push(checkerResult.data.expectedType);\n        }\n      }\n      var expectedTypesMessage = (expectedTypes.length > 0) ? ', expected one of type [' + expectedTypes.join(', ') + ']': '';\n      return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` supplied to ' + ('`' + componentName + '`' + expectedTypesMessage + '.'));\n    }\n    return createChainableTypeChecker(validate);\n  }\n\n  function createNodeChecker() {\n    function validate(props, propName, componentName, location, propFullName) {\n      if (!isNode(props[propName])) {\n        return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` supplied to ' + ('`' + componentName + '`, expected a ReactNode.'));\n      }\n      return null;\n    }\n    return createChainableTypeChecker(validate);\n  }\n\n  function invalidValidatorError(componentName, location, propFullName, key, type) {\n    return new PropTypeError(\n      (componentName || 'React class') + ': ' + location + ' type `' + propFullName + '.' + key + '` is invalid; ' +\n      'it must be a function, usually from the `prop-types` package, but received `' + type + '`.'\n    );\n  }\n\n  function createShapeTypeChecker(shapeTypes) {\n    function validate(props, propName, componentName, location, propFullName) {\n      var propValue = props[propName];\n      var propType = getPropType(propValue);\n      if (propType !== 'object') {\n        return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type `' + propType + '` ' + ('supplied to `' + componentName + '`, expected `object`.'));\n      }\n      for (var key in shapeTypes) {\n        var checker = shapeTypes[key];\n        if (typeof checker !== 'function') {\n          return invalidValidatorError(componentName, location, propFullName, key, getPreciseType(checker));\n        }\n        var error = checker(propValue, key, componentName, location, propFullName + '.' + key, ReactPropTypesSecret);\n        if (error) {\n          return error;\n        }\n      }\n      return null;\n    }\n    return createChainableTypeChecker(validate);\n  }\n\n  function createStrictShapeTypeChecker(shapeTypes) {\n    function validate(props, propName, componentName, location, propFullName) {\n      var propValue = props[propName];\n      var propType = getPropType(propValue);\n      if (propType !== 'object') {\n        return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type `' + propType + '` ' + ('supplied to `' + componentName + '`, expected `object`.'));\n      }\n      // We need to check all keys in case some are required but missing from props.\n      var allKeys = assign({}, props[propName], shapeTypes);\n      for (var key in allKeys) {\n        var checker = shapeTypes[key];\n        if (has(shapeTypes, key) && typeof checker !== 'function') {\n          return invalidValidatorError(componentName, location, propFullName, key, getPreciseType(checker));\n        }\n        if (!checker) {\n          return new PropTypeError(\n            'Invalid ' + location + ' `' + propFullName + '` key `' + key + '` supplied to `' + componentName + '`.' +\n            '\\nBad object: ' + JSON.stringify(props[propName], null, '  ') +\n            '\\nValid keys: ' + JSON.stringify(Object.keys(shapeTypes), null, '  ')\n          );\n        }\n        var error = checker(propValue, key, componentName, location, propFullName + '.' + key, ReactPropTypesSecret);\n        if (error) {\n          return error;\n        }\n      }\n      return null;\n    }\n\n    return createChainableTypeChecker(validate);\n  }\n\n  function isNode(propValue) {\n    switch (typeof propValue) {\n      case 'number':\n      case 'string':\n      case 'undefined':\n        return true;\n      case 'boolean':\n        return !propValue;\n      case 'object':\n        if (Array.isArray(propValue)) {\n          return propValue.every(isNode);\n        }\n        if (propValue === null || isValidElement(propValue)) {\n          return true;\n        }\n\n        var iteratorFn = getIteratorFn(propValue);\n        if (iteratorFn) {\n          var iterator = iteratorFn.call(propValue);\n          var step;\n          if (iteratorFn !== propValue.entries) {\n            while (!(step = iterator.next()).done) {\n              if (!isNode(step.value)) {\n                return false;\n              }\n            }\n          } else {\n            // Iterator will provide entry [k,v] tuples rather than values.\n            while (!(step = iterator.next()).done) {\n              var entry = step.value;\n              if (entry) {\n                if (!isNode(entry[1])) {\n                  return false;\n                }\n              }\n            }\n          }\n        } else {\n          return false;\n        }\n\n        return true;\n      default:\n        return false;\n    }\n  }\n\n  function isSymbol(propType, propValue) {\n    // Native Symbol.\n    if (propType === 'symbol') {\n      return true;\n    }\n\n    // falsy value can't be a Symbol\n    if (!propValue) {\n      return false;\n    }\n\n    // 19.4.3.5 Symbol.prototype[@@toStringTag] === 'Symbol'\n    if (propValue['@@toStringTag'] === 'Symbol') {\n      return true;\n    }\n\n    // Fallback for non-spec compliant Symbols which are polyfilled.\n    if (typeof Symbol === 'function' && propValue instanceof Symbol) {\n      return true;\n    }\n\n    return false;\n  }\n\n  // Equivalent of `typeof` but with special handling for array and regexp.\n  function getPropType(propValue) {\n    var propType = typeof propValue;\n    if (Array.isArray(propValue)) {\n      return 'array';\n    }\n    if (propValue instanceof RegExp) {\n      // Old webkits (at least until Android 4.0) return 'function' rather than\n      // 'object' for typeof a RegExp. We'll normalize this here so that /bla/\n      // passes PropTypes.object.\n      return 'object';\n    }\n    if (isSymbol(propType, propValue)) {\n      return 'symbol';\n    }\n    return propType;\n  }\n\n  // This handles more types than `getPropType`. Only used for error messages.\n  // See `createPrimitiveTypeChecker`.\n  function getPreciseType(propValue) {\n    if (typeof propValue === 'undefined' || propValue === null) {\n      return '' + propValue;\n    }\n    var propType = getPropType(propValue);\n    if (propType === 'object') {\n      if (propValue instanceof Date) {\n        return 'date';\n      } else if (propValue instanceof RegExp) {\n        return 'regexp';\n      }\n    }\n    return propType;\n  }\n\n  // Returns a string that is postfixed to a warning about an invalid type.\n  // For example, \"undefined\" or \"of type array\"\n  function getPostfixForTypeWarning(value) {\n    var type = getPreciseType(value);\n    switch (type) {\n      case 'array':\n      case 'object':\n        return 'an ' + type;\n      case 'boolean':\n      case 'date':\n      case 'regexp':\n        return 'a ' + type;\n      default:\n        return type;\n    }\n  }\n\n  // Returns class name of the object, if any.\n  function getClassName(propValue) {\n    if (!propValue.constructor || !propValue.constructor.name) {\n      return ANONYMOUS;\n    }\n    return propValue.constructor.name;\n  }\n\n  ReactPropTypes.checkPropTypes = checkPropTypes;\n  ReactPropTypes.resetWarningCache = checkPropTypes.resetWarningCache;\n  ReactPropTypes.PropTypes = ReactPropTypes;\n\n  return ReactPropTypes;\n};\n","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\nvar ReactPropTypesSecret = require('./lib/ReactPropTypesSecret');\n\nfunction emptyFunction() {}\nfunction emptyFunctionWithReset() {}\nemptyFunctionWithReset.resetWarningCache = emptyFunction;\n\nmodule.exports = function() {\n  function shim(props, propName, componentName, location, propFullName, secret) {\n    if (secret === ReactPropTypesSecret) {\n      // It is still safe when called from React.\n      return;\n    }\n    var err = new Error(\n      'Calling PropTypes validators directly is not supported by the `prop-types` package. ' +\n      'Use PropTypes.checkPropTypes() to call them. ' +\n      'Read more at http://fb.me/use-check-prop-types'\n    );\n    err.name = 'Invariant Violation';\n    throw err;\n  };\n  shim.isRequired = shim;\n  function getShim() {\n    return shim;\n  };\n  // Important!\n  // Keep this list in sync with production version in `./factoryWithTypeCheckers.js`.\n  var ReactPropTypes = {\n    array: shim,\n    bigint: shim,\n    bool: shim,\n    func: shim,\n    number: shim,\n    object: shim,\n    string: shim,\n    symbol: shim,\n\n    any: shim,\n    arrayOf: getShim,\n    element: shim,\n    elementType: shim,\n    instanceOf: getShim,\n    node: shim,\n    objectOf: getShim,\n    oneOf: getShim,\n    oneOfType: getShim,\n    shape: getShim,\n    exact: getShim,\n\n    checkPropTypes: emptyFunctionWithReset,\n    resetWarningCache: emptyFunction\n  };\n\n  ReactPropTypes.PropTypes = ReactPropTypes;\n\n  return ReactPropTypes;\n};\n","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nif (process.env.NODE_ENV !== 'production') {\n  var ReactIs = require('react-is');\n\n  // By explicitly using `prop-types` you are opting into new development behavior.\n  // http://fb.me/prop-types-in-prod\n  var throwOnDirectAccess = true;\n  module.exports = require('./factoryWithTypeCheckers')(ReactIs.isElement, throwOnDirectAccess);\n} else {\n  // By explicitly using `prop-types` you are opting into new production behavior.\n  // http://fb.me/prop-types-in-prod\n  module.exports = require('./factoryWithThrowingShims')();\n}\n","function r(e){var t,f,n=\"\";if(\"string\"==typeof e||\"number\"==typeof e)n+=e;else if(\"object\"==typeof e)if(Array.isArray(e)){var o=e.length;for(t=0;t<o;t++)e[t]&&(f=r(e[t]))&&(n&&(n+=\" \"),n+=f)}else for(f in e)e[f]&&(n&&(n+=\" \"),n+=f);return n}export function clsx(){for(var e,t,f=0,n=\"\",o=arguments.length;f<o;f++)(e=arguments[f])&&(t=r(e))&&(n&&(n+=\" \"),n+=t);return n}export default clsx;","/* eslint no-restricted-syntax: 0, prefer-template: 0, guard-for-in: 0\n   ---\n   These rules are preventing the performance optimizations below.\n */\n\n/**\n * Compose classes from multiple sources.\n *\n * @example\n * ```tsx\n * const slots = {\n *  root: ['root', 'primary'],\n *  label: ['label'],\n * };\n *\n * const getUtilityClass = (slot) => `MuiButton-${slot}`;\n *\n * const classes = {\n *   root: 'my-root-class',\n * };\n *\n * const output = composeClasses(slots, getUtilityClass, classes);\n * // {\n * //   root: 'MuiButton-root MuiButton-primary my-root-class',\n * //   label: 'MuiButton-label',\n * // }\n * ```\n *\n * @param slots a list of classes for each possible slot\n * @param getUtilityClass a function to resolve the class based on the slot name\n * @param classes the input classes from props\n * @returns the resolved classes for all slots\n */\nexport default function composeClasses(slots, getUtilityClass, classes = undefined) {\n  const output = {};\n  for (const slotName in slots) {\n    const slot = slots[slotName];\n    let buffer = '';\n    let start = true;\n    for (let i = 0; i < slot.length; i += 1) {\n      const value = slot[i];\n      if (value) {\n        buffer += (start === true ? '' : ' ') + getUtilityClass(value);\n        start = false;\n        if (classes && classes[value]) {\n          buffer += ' ' + classes[value];\n        }\n      }\n    }\n    output[slotName] = buffer;\n  }\n  return output;\n}","/**\n * @license React\n * react-is.production.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\"use strict\";\nvar REACT_ELEMENT_TYPE = Symbol.for(\"react.transitional.element\"),\n  REACT_PORTAL_TYPE = Symbol.for(\"react.portal\"),\n  REACT_FRAGMENT_TYPE = Symbol.for(\"react.fragment\"),\n  REACT_STRICT_MODE_TYPE = Symbol.for(\"react.strict_mode\"),\n  REACT_PROFILER_TYPE = Symbol.for(\"react.profiler\"),\n  REACT_CONSUMER_TYPE = Symbol.for(\"react.consumer\"),\n  REACT_CONTEXT_TYPE = Symbol.for(\"react.context\"),\n  REACT_FORWARD_REF_TYPE = Symbol.for(\"react.forward_ref\"),\n  REACT_SUSPENSE_TYPE = Symbol.for(\"react.suspense\"),\n  REACT_SUSPENSE_LIST_TYPE = Symbol.for(\"react.suspense_list\"),\n  REACT_MEMO_TYPE = Symbol.for(\"react.memo\"),\n  REACT_LAZY_TYPE = Symbol.for(\"react.lazy\"),\n  REACT_VIEW_TRANSITION_TYPE = Symbol.for(\"react.view_transition\"),\n  REACT_CLIENT_REFERENCE = Symbol.for(\"react.client.reference\");\nfunction typeOf(object) {\n  if (\"object\" === typeof object && null !== object) {\n    var $$typeof = object.$$typeof;\n    switch ($$typeof) {\n      case REACT_ELEMENT_TYPE:\n        switch (((object = object.type), object)) {\n          case REACT_FRAGMENT_TYPE:\n          case REACT_PROFILER_TYPE:\n          case REACT_STRICT_MODE_TYPE:\n          case REACT_SUSPENSE_TYPE:\n          case REACT_SUSPENSE_LIST_TYPE:\n          case REACT_VIEW_TRANSITION_TYPE:\n            return object;\n          default:\n            switch (((object = object && object.$$typeof), object)) {\n              case REACT_CONTEXT_TYPE:\n              case REACT_FORWARD_REF_TYPE:\n              case REACT_LAZY_TYPE:\n              case REACT_MEMO_TYPE:\n                return object;\n              case REACT_CONSUMER_TYPE:\n                return object;\n              default:\n                return $$typeof;\n            }\n        }\n      case REACT_PORTAL_TYPE:\n        return $$typeof;\n    }\n  }\n}\nexports.ContextConsumer = REACT_CONSUMER_TYPE;\nexports.ContextProvider = REACT_CONTEXT_TYPE;\nexports.Element = REACT_ELEMENT_TYPE;\nexports.ForwardRef = REACT_FORWARD_REF_TYPE;\nexports.Fragment = REACT_FRAGMENT_TYPE;\nexports.Lazy = REACT_LAZY_TYPE;\nexports.Memo = REACT_MEMO_TYPE;\nexports.Portal = REACT_PORTAL_TYPE;\nexports.Profiler = REACT_PROFILER_TYPE;\nexports.StrictMode = REACT_STRICT_MODE_TYPE;\nexports.Suspense = REACT_SUSPENSE_TYPE;\nexports.SuspenseList = REACT_SUSPENSE_LIST_TYPE;\nexports.isContextConsumer = function (object) {\n  return typeOf(object) === REACT_CONSUMER_TYPE;\n};\nexports.isContextProvider = function (object) {\n  return typeOf(object) === REACT_CONTEXT_TYPE;\n};\nexports.isElement = function (object) {\n  return (\n    \"object\" === typeof object &&\n    null !== object &&\n    object.$$typeof === REACT_ELEMENT_TYPE\n  );\n};\nexports.isForwardRef = function (object) {\n  return typeOf(object) === REACT_FORWARD_REF_TYPE;\n};\nexports.isFragment = function (object) {\n  return typeOf(object) === REACT_FRAGMENT_TYPE;\n};\nexports.isLazy = function (object) {\n  return typeOf(object) === REACT_LAZY_TYPE;\n};\nexports.isMemo = function (object) {\n  return typeOf(object) === REACT_MEMO_TYPE;\n};\nexports.isPortal = function (object) {\n  return typeOf(object) === REACT_PORTAL_TYPE;\n};\nexports.isProfiler = function (object) {\n  return typeOf(object) === REACT_PROFILER_TYPE;\n};\nexports.isStrictMode = function (object) {\n  return typeOf(object) === REACT_STRICT_MODE_TYPE;\n};\nexports.isSuspense = function (object) {\n  return typeOf(object) === REACT_SUSPENSE_TYPE;\n};\nexports.isSuspenseList = function (object) {\n  return typeOf(object) === REACT_SUSPENSE_LIST_TYPE;\n};\nexports.isValidElementType = function (type) {\n  return \"string\" === typeof type ||\n    \"function\" === typeof type ||\n    type === REACT_FRAGMENT_TYPE ||\n    type === REACT_PROFILER_TYPE ||\n    type === REACT_STRICT_MODE_TYPE ||\n    type === REACT_SUSPENSE_TYPE ||\n    type === REACT_SUSPENSE_LIST_TYPE ||\n    (\"object\" === typeof type &&\n      null !== type &&\n      (type.$$typeof === REACT_LAZY_TYPE ||\n        type.$$typeof === REACT_MEMO_TYPE ||\n        type.$$typeof === REACT_CONTEXT_TYPE ||\n        type.$$typeof === REACT_CONSUMER_TYPE ||\n        type.$$typeof === REACT_FORWARD_REF_TYPE ||\n        type.$$typeof === REACT_CLIENT_REFERENCE ||\n        void 0 !== type.getModuleId))\n    ? !0\n    : !1;\n};\nexports.typeOf = typeOf;\n","/**\n * @license React\n * react-is.development.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\"use strict\";\n\"production\" !== process.env.NODE_ENV &&\n  (function () {\n    function typeOf(object) {\n      if (\"object\" === typeof object && null !== object) {\n        var $$typeof = object.$$typeof;\n        switch ($$typeof) {\n          case REACT_ELEMENT_TYPE:\n            switch (((object = object.type), object)) {\n              case REACT_FRAGMENT_TYPE:\n              case REACT_PROFILER_TYPE:\n              case REACT_STRICT_MODE_TYPE:\n              case REACT_SUSPENSE_TYPE:\n              case REACT_SUSPENSE_LIST_TYPE:\n              case REACT_VIEW_TRANSITION_TYPE:\n                return object;\n              default:\n                switch (((object = object && object.$$typeof), object)) {\n                  case REACT_CONTEXT_TYPE:\n                  case REACT_FORWARD_REF_TYPE:\n                  case REACT_LAZY_TYPE:\n                  case REACT_MEMO_TYPE:\n                    return object;\n                  case REACT_CONSUMER_TYPE:\n                    return object;\n                  default:\n                    return $$typeof;\n                }\n            }\n          case REACT_PORTAL_TYPE:\n            return $$typeof;\n        }\n      }\n    }\n    var REACT_ELEMENT_TYPE = Symbol.for(\"react.transitional.element\"),\n      REACT_PORTAL_TYPE = Symbol.for(\"react.portal\"),\n      REACT_FRAGMENT_TYPE = Symbol.for(\"react.fragment\"),\n      REACT_STRICT_MODE_TYPE = Symbol.for(\"react.strict_mode\"),\n      REACT_PROFILER_TYPE = Symbol.for(\"react.profiler\"),\n      REACT_CONSUMER_TYPE = Symbol.for(\"react.consumer\"),\n      REACT_CONTEXT_TYPE = Symbol.for(\"react.context\"),\n      REACT_FORWARD_REF_TYPE = Symbol.for(\"react.forward_ref\"),\n      REACT_SUSPENSE_TYPE = Symbol.for(\"react.suspense\"),\n      REACT_SUSPENSE_LIST_TYPE = Symbol.for(\"react.suspense_list\"),\n      REACT_MEMO_TYPE = Symbol.for(\"react.memo\"),\n      REACT_LAZY_TYPE = Symbol.for(\"react.lazy\"),\n      REACT_VIEW_TRANSITION_TYPE = Symbol.for(\"react.view_transition\"),\n      REACT_CLIENT_REFERENCE = Symbol.for(\"react.client.reference\");\n    exports.ContextConsumer = REACT_CONSUMER_TYPE;\n    exports.ContextProvider = REACT_CONTEXT_TYPE;\n    exports.Element = REACT_ELEMENT_TYPE;\n    exports.ForwardRef = REACT_FORWARD_REF_TYPE;\n    exports.Fragment = REACT_FRAGMENT_TYPE;\n    exports.Lazy = REACT_LAZY_TYPE;\n    exports.Memo = REACT_MEMO_TYPE;\n    exports.Portal = REACT_PORTAL_TYPE;\n    exports.Profiler = REACT_PROFILER_TYPE;\n    exports.StrictMode = REACT_STRICT_MODE_TYPE;\n    exports.Suspense = REACT_SUSPENSE_TYPE;\n    exports.SuspenseList = REACT_SUSPENSE_LIST_TYPE;\n    exports.isContextConsumer = function (object) {\n      return typeOf(object) === REACT_CONSUMER_TYPE;\n    };\n    exports.isContextProvider = function (object) {\n      return typeOf(object) === REACT_CONTEXT_TYPE;\n    };\n    exports.isElement = function (object) {\n      return (\n        \"object\" === typeof object &&\n        null !== object &&\n        object.$$typeof === REACT_ELEMENT_TYPE\n      );\n    };\n    exports.isForwardRef = function (object) {\n      return typeOf(object) === REACT_FORWARD_REF_TYPE;\n    };\n    exports.isFragment = function (object) {\n      return typeOf(object) === REACT_FRAGMENT_TYPE;\n    };\n    exports.isLazy = function (object) {\n      return typeOf(object) === REACT_LAZY_TYPE;\n    };\n    exports.isMemo = function (object) {\n      return typeOf(object) === REACT_MEMO_TYPE;\n    };\n    exports.isPortal = function (object) {\n      return typeOf(object) === REACT_PORTAL_TYPE;\n    };\n    exports.isProfiler = function (object) {\n      return typeOf(object) === REACT_PROFILER_TYPE;\n    };\n    exports.isStrictMode = function (object) {\n      return typeOf(object) === REACT_STRICT_MODE_TYPE;\n    };\n    exports.isSuspense = function (object) {\n      return typeOf(object) === REACT_SUSPENSE_TYPE;\n    };\n    exports.isSuspenseList = function (object) {\n      return typeOf(object) === REACT_SUSPENSE_LIST_TYPE;\n    };\n    exports.isValidElementType = function (type) {\n      return \"string\" === typeof type ||\n        \"function\" === typeof type ||\n        type === REACT_FRAGMENT_TYPE ||\n        type === REACT_PROFILER_TYPE ||\n        type === REACT_STRICT_MODE_TYPE ||\n        type === REACT_SUSPENSE_TYPE ||\n        type === REACT_SUSPENSE_LIST_TYPE ||\n        (\"object\" === typeof type &&\n          null !== type &&\n          (type.$$typeof === REACT_LAZY_TYPE ||\n            type.$$typeof === REACT_MEMO_TYPE ||\n            type.$$typeof === REACT_CONTEXT_TYPE ||\n            type.$$typeof === REACT_CONSUMER_TYPE ||\n            type.$$typeof === REACT_FORWARD_REF_TYPE ||\n            type.$$typeof === REACT_CLIENT_REFERENCE ||\n            void 0 !== type.getModuleId))\n        ? !0\n        : !1;\n    };\n    exports.typeOf = typeOf;\n  })();\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n  module.exports = require('./cjs/react-is.production.js');\n} else {\n  module.exports = require('./cjs/react-is.development.js');\n}\n","import * as React from 'react';\nimport { isValidElementType } from 'react-is';\n\n// https://github.com/sindresorhus/is-plain-obj/blob/main/index.js\nexport function isPlainObject(item) {\n  if (typeof item !== 'object' || item === null) {\n    return false;\n  }\n  const prototype = Object.getPrototypeOf(item);\n  return (prototype === null || prototype === Object.prototype || Object.getPrototypeOf(prototype) === null) && !(Symbol.toStringTag in item) && !(Symbol.iterator in item);\n}\nfunction deepClone(source) {\n  if (/*#__PURE__*/React.isValidElement(source) || isValidElementType(source) || !isPlainObject(source)) {\n    return source;\n  }\n  const output = {};\n  Object.keys(source).forEach(key => {\n    output[key] = deepClone(source[key]);\n  });\n  return output;\n}\n\n/**\n * Merge objects deeply.\n * It will shallow copy React elements.\n *\n * If `options.clone` is set to `false` the source object will be merged directly into the target object.\n *\n * @example\n * ```ts\n * deepmerge({ a: { b: 1 }, d: 2 }, { a: { c: 2 }, d: 4 });\n * // => { a: { b: 1, c: 2 }, d: 4 }\n * ````\n *\n * @param target The target object.\n * @param source The source object.\n * @param options The merge options.\n * @param options.clone Set to `false` to merge the source object directly into the target object.\n * @returns The merged object.\n */\nexport default function deepmerge(target, source, options = {\n  clone: true\n}) {\n  const output = options.clone ? {\n    ...target\n  } : target;\n  if (isPlainObject(target) && isPlainObject(source)) {\n    Object.keys(source).forEach(key => {\n      if (/*#__PURE__*/React.isValidElement(source[key]) || isValidElementType(source[key])) {\n        output[key] = source[key];\n      } else if (isPlainObject(source[key]) &&\n      // Avoid prototype pollution\n      Object.prototype.hasOwnProperty.call(target, key) && isPlainObject(target[key])) {\n        // Since `output` is a clone of `target` and we have narrowed `target` in this block we can cast to the same type.\n        output[key] = deepmerge(target[key], source[key], options);\n      } else if (options.clone) {\n        output[key] = isPlainObject(source[key]) ? deepClone(source[key]) : source[key];\n      } else {\n        output[key] = source[key];\n      }\n    });\n  }\n  return output;\n}","import deepmerge from '@mui/utils/deepmerge';\nfunction merge(acc, item) {\n  if (!item) {\n    return acc;\n  }\n  return deepmerge(acc, item, {\n    clone: false // No need to clone deep, it's way faster.\n  });\n}\nexport default merge;","import PropTypes from 'prop-types';\nconst responsivePropType = process.env.NODE_ENV !== 'production' ? PropTypes.oneOfType([PropTypes.number, PropTypes.string, PropTypes.object, PropTypes.array]) : {};\nexport default responsivePropType;","/**\n * For using in `sx` prop to sort the breakpoint from low to high.\n * Note: this function does not work and will not support multiple units.\n *       e.g. input: { '@container (min-width:300px)': '1rem', '@container (min-width:40rem)': '2rem' }\n *            output: { '@container (min-width:40rem)': '2rem', '@container (min-width:300px)': '1rem' } // since 40 < 300 even though 40rem > 300px\n */\nexport function sortContainerQueries(theme, css) {\n  if (!theme.containerQueries) {\n    return css;\n  }\n  const sorted = Object.keys(css).filter(key => key.startsWith('@container')).sort((a, b) => {\n    const regex = /min-width:\\s*([0-9.]+)/;\n    return +(a.match(regex)?.[1] || 0) - +(b.match(regex)?.[1] || 0);\n  });\n  if (!sorted.length) {\n    return css;\n  }\n  return sorted.reduce((acc, key) => {\n    const value = css[key];\n    delete acc[key];\n    acc[key] = value;\n    return acc;\n  }, {\n    ...css\n  });\n}\nexport function isCqShorthand(breakpointKeys, value) {\n  return value === '@' || value.startsWith('@') && (breakpointKeys.some(key => value.startsWith(`@${key}`)) || !!value.match(/^@\\d/));\n}\nexport function getContainerQuery(theme, shorthand) {\n  const matches = shorthand.match(/^@([^/]+)?\\/?(.+)?$/);\n  if (!matches) {\n    if (process.env.NODE_ENV !== 'production') {\n      throw /* minify-error */new Error(`MUI: The provided shorthand ${`(${shorthand})`} is invalid. The format should be \\`@<breakpoint | number>\\` or \\`@<breakpoint | number>/<container>\\`.\\n` + 'For example, `@sm` or `@600` or `@40rem/sidebar`.');\n    }\n    return null;\n  }\n  const [, containerQuery, containerName] = matches;\n  const value = Number.isNaN(+containerQuery) ? containerQuery || 0 : +containerQuery;\n  return theme.containerQueries(containerName).up(value);\n}\nexport default function cssContainerQueries(themeInput) {\n  const toContainerQuery = (mediaQuery, name) => mediaQuery.replace('@media', name ? `@container ${name}` : '@container');\n  function attachCq(node, name) {\n    node.up = (...args) => toContainerQuery(themeInput.breakpoints.up(...args), name);\n    node.down = (...args) => toContainerQuery(themeInput.breakpoints.down(...args), name);\n    node.between = (...args) => toContainerQuery(themeInput.breakpoints.between(...args), name);\n    node.only = (...args) => toContainerQuery(themeInput.breakpoints.only(...args), name);\n    node.not = (...args) => {\n      const result = toContainerQuery(themeInput.breakpoints.not(...args), name);\n      if (result.includes('not all and')) {\n        // `@container` does not work with `not all and`, so need to invert the logic\n        return result.replace('not all and ', '').replace('min-width:', 'width<').replace('max-width:', 'width>').replace('and', 'or');\n      }\n      return result;\n    };\n  }\n  const node = {};\n  const containerQueries = name => {\n    attachCq(node, name);\n    return node;\n  };\n  attachCq(containerQueries);\n  return {\n    ...themeInput,\n    containerQueries\n  };\n}","import PropTypes from 'prop-types';\nimport deepmerge from '@mui/utils/deepmerge';\nimport merge from \"../merge/index.js\";\nimport { isCqShorthand, getContainerQuery } from \"../cssContainerQueries/index.js\";\n\n// The breakpoint **start** at this value.\n// For instance with the first breakpoint xs: [xs, sm[.\nexport const values = {\n  xs: 0,\n  // phone\n  sm: 600,\n  // tablet\n  md: 900,\n  // small laptop\n  lg: 1200,\n  // desktop\n  xl: 1536 // large screen\n};\nconst defaultBreakpoints = {\n  // Sorted ASC by size. That's important.\n  // It can't be configured as it's used statically for propTypes.\n  keys: ['xs', 'sm', 'md', 'lg', 'xl'],\n  up: key => `@media (min-width:${values[key]}px)`\n};\nconst defaultContainerQueries = {\n  containerQueries: containerName => ({\n    up: key => {\n      let result = typeof key === 'number' ? key : values[key] || key;\n      if (typeof result === 'number') {\n        result = `${result}px`;\n      }\n      return containerName ? `@container ${containerName} (min-width:${result})` : `@container (min-width:${result})`;\n    }\n  })\n};\nexport function handleBreakpoints(props, propValue, styleFromPropValue) {\n  const theme = props.theme || {};\n  if (Array.isArray(propValue)) {\n    const themeBreakpoints = theme.breakpoints || defaultBreakpoints;\n    return propValue.reduce((acc, item, index) => {\n      acc[themeBreakpoints.up(themeBreakpoints.keys[index])] = styleFromPropValue(propValue[index]);\n      return acc;\n    }, {});\n  }\n  if (typeof propValue === 'object') {\n    const themeBreakpoints = theme.breakpoints || defaultBreakpoints;\n    return Object.keys(propValue).reduce((acc, breakpoint) => {\n      if (isCqShorthand(themeBreakpoints.keys, breakpoint)) {\n        const containerKey = getContainerQuery(theme.containerQueries ? theme : defaultContainerQueries, breakpoint);\n        if (containerKey) {\n          acc[containerKey] = styleFromPropValue(propValue[breakpoint], breakpoint);\n        }\n      }\n      // key is breakpoint\n      else if (Object.keys(themeBreakpoints.values || values).includes(breakpoint)) {\n        const mediaKey = themeBreakpoints.up(breakpoint);\n        acc[mediaKey] = styleFromPropValue(propValue[breakpoint], breakpoint);\n      } else {\n        const cssKey = breakpoint;\n        acc[cssKey] = propValue[cssKey];\n      }\n      return acc;\n    }, {});\n  }\n  const output = styleFromPropValue(propValue);\n  return output;\n}\nfunction breakpoints(styleFunction) {\n  // false positive\n  // eslint-disable-next-line react/function-component-definition\n  const newStyleFunction = props => {\n    const theme = props.theme || {};\n    const base = styleFunction(props);\n    const themeBreakpoints = theme.breakpoints || defaultBreakpoints;\n    const extended = themeBreakpoints.keys.reduce((acc, key) => {\n      if (props[key]) {\n        acc = acc || {};\n        acc[themeBreakpoints.up(key)] = styleFunction({\n          theme,\n          ...props[key]\n        });\n      }\n      return acc;\n    }, null);\n    return merge(base, extended);\n  };\n  newStyleFunction.propTypes = process.env.NODE_ENV !== 'production' ? {\n    ...styleFunction.propTypes,\n    xs: PropTypes.object,\n    sm: PropTypes.object,\n    md: PropTypes.object,\n    lg: PropTypes.object,\n    xl: PropTypes.object\n  } : {};\n  newStyleFunction.filterProps = ['xs', 'sm', 'md', 'lg', 'xl', ...styleFunction.filterProps];\n  return newStyleFunction;\n}\nexport function createEmptyBreakpointObject(breakpointsInput = {}) {\n  const breakpointsInOrder = breakpointsInput.keys?.reduce((acc, key) => {\n    const breakpointStyleKey = breakpointsInput.up(key);\n    acc[breakpointStyleKey] = {};\n    return acc;\n  }, {});\n  return breakpointsInOrder || {};\n}\nexport function removeUnusedBreakpoints(breakpointKeys, style) {\n  return breakpointKeys.reduce((acc, key) => {\n    const breakpointOutput = acc[key];\n    const isBreakpointUnused = !breakpointOutput || Object.keys(breakpointOutput).length === 0;\n    if (isBreakpointUnused) {\n      delete acc[key];\n    }\n    return acc;\n  }, style);\n}\nexport function mergeBreakpointsInOrder(breakpointsInput, ...styles) {\n  const emptyBreakpoints = createEmptyBreakpointObject(breakpointsInput);\n  const mergedOutput = [emptyBreakpoints, ...styles].reduce((prev, next) => deepmerge(prev, next), {});\n  return removeUnusedBreakpoints(Object.keys(emptyBreakpoints), mergedOutput);\n}\n\n// compute base for responsive values; e.g.,\n// [1,2,3] => {xs: true, sm: true, md: true}\n// {xs: 1, sm: 2, md: 3} => {xs: true, sm: true, md: true}\nexport function computeBreakpointsBase(breakpointValues, themeBreakpoints) {\n  // fixed value\n  if (typeof breakpointValues !== 'object') {\n    return {};\n  }\n  const base = {};\n  const breakpointsKeys = Object.keys(themeBreakpoints);\n  if (Array.isArray(breakpointValues)) {\n    breakpointsKeys.forEach((breakpoint, i) => {\n      if (i < breakpointValues.length) {\n        base[breakpoint] = true;\n      }\n    });\n  } else {\n    breakpointsKeys.forEach(breakpoint => {\n      if (breakpointValues[breakpoint] != null) {\n        base[breakpoint] = true;\n      }\n    });\n  }\n  return base;\n}\nexport function resolveBreakpointValues({\n  values: breakpointValues,\n  breakpoints: themeBreakpoints,\n  base: customBase\n}) {\n  const base = customBase || computeBreakpointsBase(breakpointValues, themeBreakpoints);\n  const keys = Object.keys(base);\n  if (keys.length === 0) {\n    return breakpointValues;\n  }\n  let previous;\n  return keys.reduce((acc, breakpoint, i) => {\n    if (Array.isArray(breakpointValues)) {\n      acc[breakpoint] = breakpointValues[i] != null ? breakpointValues[i] : breakpointValues[previous];\n      previous = i;\n    } else if (typeof breakpointValues === 'object') {\n      acc[breakpoint] = breakpointValues[breakpoint] != null ? breakpointValues[breakpoint] : breakpointValues[previous];\n      previous = breakpoint;\n    } else {\n      acc[breakpoint] = breakpointValues;\n    }\n    return acc;\n  }, {});\n}\nexport default breakpoints;","import capitalize from '@mui/utils/capitalize';\nimport responsivePropType from \"../responsivePropType/index.js\";\nimport { handleBreakpoints } from \"../breakpoints/index.js\";\nexport function getPath(obj, path, checkVars = true) {\n  if (!path || typeof path !== 'string') {\n    return null;\n  }\n\n  // Check if CSS variables are used\n  if (obj && obj.vars && checkVars) {\n    const val = `vars.${path}`.split('.').reduce((acc, item) => acc && acc[item] ? acc[item] : null, obj);\n    if (val != null) {\n      return val;\n    }\n  }\n  return path.split('.').reduce((acc, item) => {\n    if (acc && acc[item] != null) {\n      return acc[item];\n    }\n    return null;\n  }, obj);\n}\nexport function getStyleValue(themeMapping, transform, propValueFinal, userValue = propValueFinal) {\n  let value;\n  if (typeof themeMapping === 'function') {\n    value = themeMapping(propValueFinal);\n  } else if (Array.isArray(themeMapping)) {\n    value = themeMapping[propValueFinal] || userValue;\n  } else {\n    value = getPath(themeMapping, propValueFinal) || userValue;\n  }\n  if (transform) {\n    value = transform(value, userValue, themeMapping);\n  }\n  return value;\n}\nfunction style(options) {\n  const {\n    prop,\n    cssProperty = options.prop,\n    themeKey,\n    transform\n  } = options;\n\n  // false positive\n  // eslint-disable-next-line react/function-component-definition\n  const fn = props => {\n    if (props[prop] == null) {\n      return null;\n    }\n    const propValue = props[prop];\n    const theme = props.theme;\n    const themeMapping = getPath(theme, themeKey) || {};\n    const styleFromPropValue = propValueFinal => {\n      let value = getStyleValue(themeMapping, transform, propValueFinal);\n      if (propValueFinal === value && typeof propValueFinal === 'string') {\n        // Haven't found value\n        value = getStyleValue(themeMapping, transform, `${prop}${propValueFinal === 'default' ? '' : capitalize(propValueFinal)}`, propValueFinal);\n      }\n      if (cssProperty === false) {\n        return value;\n      }\n      return {\n        [cssProperty]: value\n      };\n    };\n    return handleBreakpoints(props, propValue, styleFromPropValue);\n  };\n  fn.propTypes = process.env.NODE_ENV !== 'production' ? {\n    [prop]: responsivePropType\n  } : {};\n  fn.filterProps = [prop];\n  return fn;\n}\nexport default style;","export default function memoize(fn) {\n  const cache = {};\n  return arg => {\n    if (cache[arg] === undefined) {\n      cache[arg] = fn(arg);\n    }\n    return cache[arg];\n  };\n}","import responsivePropType from \"../responsivePropType/index.js\";\nimport { handleBreakpoints } from \"../breakpoints/index.js\";\nimport { getPath } from \"../style/index.js\";\nimport merge from \"../merge/index.js\";\nimport memoize from \"../memoize/index.js\";\nconst properties = {\n  m: 'margin',\n  p: 'padding'\n};\nconst directions = {\n  t: 'Top',\n  r: 'Right',\n  b: 'Bottom',\n  l: 'Left',\n  x: ['Left', 'Right'],\n  y: ['Top', 'Bottom']\n};\nconst aliases = {\n  marginX: 'mx',\n  marginY: 'my',\n  paddingX: 'px',\n  paddingY: 'py'\n};\n\n// memoize() impact:\n// From 300,000 ops/sec\n// To 350,000 ops/sec\nconst getCssProperties = memoize(prop => {\n  // It's not a shorthand notation.\n  if (prop.length > 2) {\n    if (aliases[prop]) {\n      prop = aliases[prop];\n    } else {\n      return [prop];\n    }\n  }\n  const [a, b] = prop.split('');\n  const property = properties[a];\n  const direction = directions[b] || '';\n  return Array.isArray(direction) ? direction.map(dir => property + dir) : [property + direction];\n});\nexport const marginKeys = ['m', 'mt', 'mr', 'mb', 'ml', 'mx', 'my', 'margin', 'marginTop', 'marginRight', 'marginBottom', 'marginLeft', 'marginX', 'marginY', 'marginInline', 'marginInlineStart', 'marginInlineEnd', 'marginBlock', 'marginBlockStart', 'marginBlockEnd'];\nexport const paddingKeys = ['p', 'pt', 'pr', 'pb', 'pl', 'px', 'py', 'padding', 'paddingTop', 'paddingRight', 'paddingBottom', 'paddingLeft', 'paddingX', 'paddingY', 'paddingInline', 'paddingInlineStart', 'paddingInlineEnd', 'paddingBlock', 'paddingBlockStart', 'paddingBlockEnd'];\nconst spacingKeys = [...marginKeys, ...paddingKeys];\nexport function createUnaryUnit(theme, themeKey, defaultValue, propName) {\n  const themeSpacing = getPath(theme, themeKey, true) ?? defaultValue;\n  if (typeof themeSpacing === 'number' || typeof themeSpacing === 'string') {\n    return val => {\n      if (typeof val === 'string') {\n        return val;\n      }\n      if (process.env.NODE_ENV !== 'production') {\n        if (typeof val !== 'number') {\n          console.error(`MUI: Expected ${propName} argument to be a number or a string, got ${val}.`);\n        }\n      }\n      if (typeof themeSpacing === 'string') {\n        if (themeSpacing.startsWith('var(') && val === 0) {\n          return 0;\n        }\n        if (themeSpacing.startsWith('var(') && val === 1) {\n          return themeSpacing;\n        }\n        return `calc(${val} * ${themeSpacing})`;\n      }\n      return themeSpacing * val;\n    };\n  }\n  if (Array.isArray(themeSpacing)) {\n    return val => {\n      if (typeof val === 'string') {\n        return val;\n      }\n      const abs = Math.abs(val);\n      if (process.env.NODE_ENV !== 'production') {\n        if (!Number.isInteger(abs)) {\n          console.error([`MUI: The \\`theme.${themeKey}\\` array type cannot be combined with non integer values.` + `You should either use an integer value that can be used as index, or define the \\`theme.${themeKey}\\` as a number.`].join('\\n'));\n        } else if (abs > themeSpacing.length - 1) {\n          console.error([`MUI: The value provided (${abs}) overflows.`, `The supported values are: ${JSON.stringify(themeSpacing)}.`, `${abs} > ${themeSpacing.length - 1}, you need to add the missing values.`].join('\\n'));\n        }\n      }\n      const transformed = themeSpacing[abs];\n      if (val >= 0) {\n        return transformed;\n      }\n      if (typeof transformed === 'number') {\n        return -transformed;\n      }\n      if (typeof transformed === 'string' && transformed.startsWith('var(')) {\n        return `calc(-1 * ${transformed})`;\n      }\n      return `-${transformed}`;\n    };\n  }\n  if (typeof themeSpacing === 'function') {\n    return themeSpacing;\n  }\n  if (process.env.NODE_ENV !== 'production') {\n    console.error([`MUI: The \\`theme.${themeKey}\\` value (${themeSpacing}) is invalid.`, 'It should be a number, an array or a function.'].join('\\n'));\n  }\n  return () => undefined;\n}\nexport function createUnarySpacing(theme) {\n  return createUnaryUnit(theme, 'spacing', 8, 'spacing');\n}\nexport function getValue(transformer, propValue) {\n  if (typeof propValue === 'string' || propValue == null) {\n    return propValue;\n  }\n  return transformer(propValue);\n}\nexport function getStyleFromPropValue(cssProperties, transformer) {\n  return propValue => cssProperties.reduce((acc, cssProperty) => {\n    acc[cssProperty] = getValue(transformer, propValue);\n    return acc;\n  }, {});\n}\nfunction resolveCssProperty(props, keys, prop, transformer) {\n  // Using a hash computation over an array iteration could be faster, but with only 28 items,\n  // it's doesn't worth the bundle size.\n  if (!keys.includes(prop)) {\n    return null;\n  }\n  const cssProperties = getCssProperties(prop);\n  const styleFromPropValue = getStyleFromPropValue(cssProperties, transformer);\n  const propValue = props[prop];\n  return handleBreakpoints(props, propValue, styleFromPropValue);\n}\nfunction style(props, keys) {\n  const transformer = createUnarySpacing(props.theme);\n  return Object.keys(props).map(prop => resolveCssProperty(props, keys, prop, transformer)).reduce(merge, {});\n}\nexport function margin(props) {\n  return style(props, marginKeys);\n}\nmargin.propTypes = process.env.NODE_ENV !== 'production' ? marginKeys.reduce((obj, key) => {\n  obj[key] = responsivePropType;\n  return obj;\n}, {}) : {};\nmargin.filterProps = marginKeys;\nexport function padding(props) {\n  return style(props, paddingKeys);\n}\npadding.propTypes = process.env.NODE_ENV !== 'production' ? paddingKeys.reduce((obj, key) => {\n  obj[key] = responsivePropType;\n  return obj;\n}, {}) : {};\npadding.filterProps = paddingKeys;\nfunction spacing(props) {\n  return style(props, spacingKeys);\n}\nspacing.propTypes = process.env.NODE_ENV !== 'production' ? spacingKeys.reduce((obj, key) => {\n  obj[key] = responsivePropType;\n  return obj;\n}, {}) : {};\nspacing.filterProps = spacingKeys;\nexport default spacing;","import merge from \"../merge/index.js\";\nfunction compose(...styles) {\n  const handlers = styles.reduce((acc, style) => {\n    style.filterProps.forEach(prop => {\n      acc[prop] = style;\n    });\n    return acc;\n  }, {});\n\n  // false positive\n  // eslint-disable-next-line react/function-component-definition\n  const fn = props => {\n    return Object.keys(props).reduce((acc, prop) => {\n      if (handlers[prop]) {\n        return merge(acc, handlers[prop](props));\n      }\n      return acc;\n    }, {});\n  };\n  fn.propTypes = process.env.NODE_ENV !== 'production' ? styles.reduce((acc, style) => Object.assign(acc, style.propTypes), {}) : {};\n  fn.filterProps = styles.reduce((acc, style) => acc.concat(style.filterProps), []);\n  return fn;\n}\nexport default compose;","import responsivePropType from \"../responsivePropType/index.js\";\nimport style from \"../style/index.js\";\nimport compose from \"../compose/index.js\";\nimport { createUnaryUnit, getValue } from \"../spacing/index.js\";\nimport { handleBreakpoints } from \"../breakpoints/index.js\";\nexport function borderTransform(value) {\n  if (typeof value !== 'number') {\n    return value;\n  }\n  return `${value}px solid`;\n}\nfunction createBorderStyle(prop, transform) {\n  return style({\n    prop,\n    themeKey: 'borders',\n    transform\n  });\n}\nexport const border = createBorderStyle('border', borderTransform);\nexport const borderTop = createBorderStyle('borderTop', borderTransform);\nexport const borderRight = createBorderStyle('borderRight', borderTransform);\nexport const borderBottom = createBorderStyle('borderBottom', borderTransform);\nexport const borderLeft = createBorderStyle('borderLeft', borderTransform);\nexport const borderColor = createBorderStyle('borderColor');\nexport const borderTopColor = createBorderStyle('borderTopColor');\nexport const borderRightColor = createBorderStyle('borderRightColor');\nexport const borderBottomColor = createBorderStyle('borderBottomColor');\nexport const borderLeftColor = createBorderStyle('borderLeftColor');\nexport const outline = createBorderStyle('outline', borderTransform);\nexport const outlineColor = createBorderStyle('outlineColor');\n\n// false positive\n// eslint-disable-next-line react/function-component-definition\nexport const borderRadius = props => {\n  if (props.borderRadius !== undefined && props.borderRadius !== null) {\n    const transformer = createUnaryUnit(props.theme, 'shape.borderRadius', 4, 'borderRadius');\n    const styleFromPropValue = propValue => ({\n      borderRadius: getValue(transformer, propValue)\n    });\n    return handleBreakpoints(props, props.borderRadius, styleFromPropValue);\n  }\n  return null;\n};\nborderRadius.propTypes = process.env.NODE_ENV !== 'production' ? {\n  borderRadius: responsivePropType\n} : {};\nborderRadius.filterProps = ['borderRadius'];\nconst borders = compose(border, borderTop, borderRight, borderBottom, borderLeft, borderColor, borderTopColor, borderRightColor, borderBottomColor, borderLeftColor, borderRadius, outline, outlineColor);\nexport default borders;","import style from \"../style/index.js\";\nimport compose from \"../compose/index.js\";\nimport { createUnaryUnit, getValue } from \"../spacing/index.js\";\nimport { handleBreakpoints } from \"../breakpoints/index.js\";\nimport responsivePropType from \"../responsivePropType/index.js\";\n\n// false positive\n// eslint-disable-next-line react/function-component-definition\nexport const gap = props => {\n  if (props.gap !== undefined && props.gap !== null) {\n    const transformer = createUnaryUnit(props.theme, 'spacing', 8, 'gap');\n    const styleFromPropValue = propValue => ({\n      gap: getValue(transformer, propValue)\n    });\n    return handleBreakpoints(props, props.gap, styleFromPropValue);\n  }\n  return null;\n};\ngap.propTypes = process.env.NODE_ENV !== 'production' ? {\n  gap: responsivePropType\n} : {};\ngap.filterProps = ['gap'];\n\n// false positive\n// eslint-disable-next-line react/function-component-definition\nexport const columnGap = props => {\n  if (props.columnGap !== undefined && props.columnGap !== null) {\n    const transformer = createUnaryUnit(props.theme, 'spacing', 8, 'columnGap');\n    const styleFromPropValue = propValue => ({\n      columnGap: getValue(transformer, propValue)\n    });\n    return handleBreakpoints(props, props.columnGap, styleFromPropValue);\n  }\n  return null;\n};\ncolumnGap.propTypes = process.env.NODE_ENV !== 'production' ? {\n  columnGap: responsivePropType\n} : {};\ncolumnGap.filterProps = ['columnGap'];\n\n// false positive\n// eslint-disable-next-line react/function-component-definition\nexport const rowGap = props => {\n  if (props.rowGap !== undefined && props.rowGap !== null) {\n    const transformer = createUnaryUnit(props.theme, 'spacing', 8, 'rowGap');\n    const styleFromPropValue = propValue => ({\n      rowGap: getValue(transformer, propValue)\n    });\n    return handleBreakpoints(props, props.rowGap, styleFromPropValue);\n  }\n  return null;\n};\nrowGap.propTypes = process.env.NODE_ENV !== 'production' ? {\n  rowGap: responsivePropType\n} : {};\nrowGap.filterProps = ['rowGap'];\nexport const gridColumn = style({\n  prop: 'gridColumn'\n});\nexport const gridRow = style({\n  prop: 'gridRow'\n});\nexport const gridAutoFlow = style({\n  prop: 'gridAutoFlow'\n});\nexport const gridAutoColumns = style({\n  prop: 'gridAutoColumns'\n});\nexport const gridAutoRows = style({\n  prop: 'gridAutoRows'\n});\nexport const gridTemplateColumns = style({\n  prop: 'gridTemplateColumns'\n});\nexport const gridTemplateRows = style({\n  prop: 'gridTemplateRows'\n});\nexport const gridTemplateAreas = style({\n  prop: 'gridTemplateAreas'\n});\nexport const gridArea = style({\n  prop: 'gridArea'\n});\nconst grid = compose(gap, columnGap, rowGap, gridColumn, gridRow, gridAutoFlow, gridAutoColumns, gridAutoRows, gridTemplateColumns, gridTemplateRows, gridTemplateAreas, gridArea);\nexport default grid;","import style from \"../style/index.js\";\nimport compose from \"../compose/index.js\";\nexport function paletteTransform(value, userValue) {\n  if (userValue === 'grey') {\n    return userValue;\n  }\n  return value;\n}\nexport const color = style({\n  prop: 'color',\n  themeKey: 'palette',\n  transform: paletteTransform\n});\nexport const bgcolor = style({\n  prop: 'bgcolor',\n  cssProperty: 'backgroundColor',\n  themeKey: 'palette',\n  transform: paletteTransform\n});\nexport const backgroundColor = style({\n  prop: 'backgroundColor',\n  themeKey: 'palette',\n  transform: paletteTransform\n});\nconst palette = compose(color, bgcolor, backgroundColor);\nexport default palette;","import style from \"../style/index.js\";\nimport compose from \"../compose/index.js\";\nimport { handleBreakpoints, values as breakpointsValues } from \"../breakpoints/index.js\";\nexport function sizingTransform(value) {\n  return value <= 1 && value !== 0 ? `${value * 100}%` : value;\n}\nexport const width = style({\n  prop: 'width',\n  transform: sizingTransform\n});\nexport const maxWidth = props => {\n  if (props.maxWidth !== undefined && props.maxWidth !== null) {\n    const styleFromPropValue = propValue => {\n      const breakpoint = props.theme?.breakpoints?.values?.[propValue] || breakpointsValues[propValue];\n      if (!breakpoint) {\n        return {\n          maxWidth: sizingTransform(propValue)\n        };\n      }\n      if (props.theme?.breakpoints?.unit !== 'px') {\n        return {\n          maxWidth: `${breakpoint}${props.theme.breakpoints.unit}`\n        };\n      }\n      return {\n        maxWidth: breakpoint\n      };\n    };\n    return handleBreakpoints(props, props.maxWidth, styleFromPropValue);\n  }\n  return null;\n};\nmaxWidth.filterProps = ['maxWidth'];\nexport const minWidth = style({\n  prop: 'minWidth',\n  transform: sizingTransform\n});\nexport const height = style({\n  prop: 'height',\n  transform: sizingTransform\n});\nexport const maxHeight = style({\n  prop: 'maxHeight',\n  transform: sizingTransform\n});\nexport const minHeight = style({\n  prop: 'minHeight',\n  transform: sizingTransform\n});\nexport const sizeWidth = style({\n  prop: 'size',\n  cssProperty: 'width',\n  transform: sizingTransform\n});\nexport const sizeHeight = style({\n  prop: 'size',\n  cssProperty: 'height',\n  transform: sizingTransform\n});\nexport const boxSizing = style({\n  prop: 'boxSizing'\n});\nconst sizing = compose(width, maxWidth, minWidth, height, maxHeight, minHeight, boxSizing);\nexport default sizing;","import { padding, margin } from \"../spacing/index.js\";\nimport { borderRadius, borderTransform } from \"../borders/index.js\";\nimport { gap, rowGap, columnGap } from \"../cssGrid/index.js\";\nimport { paletteTransform } from \"../palette/index.js\";\nimport { maxWidth, sizingTransform } from \"../sizing/index.js\";\nconst defaultSxConfig = {\n  // borders\n  border: {\n    themeKey: 'borders',\n    transform: borderTransform\n  },\n  borderTop: {\n    themeKey: 'borders',\n    transform: borderTransform\n  },\n  borderRight: {\n    themeKey: 'borders',\n    transform: borderTransform\n  },\n  borderBottom: {\n    themeKey: 'borders',\n    transform: borderTransform\n  },\n  borderLeft: {\n    themeKey: 'borders',\n    transform: borderTransform\n  },\n  borderColor: {\n    themeKey: 'palette'\n  },\n  borderTopColor: {\n    themeKey: 'palette'\n  },\n  borderRightColor: {\n    themeKey: 'palette'\n  },\n  borderBottomColor: {\n    themeKey: 'palette'\n  },\n  borderLeftColor: {\n    themeKey: 'palette'\n  },\n  outline: {\n    themeKey: 'borders',\n    transform: borderTransform\n  },\n  outlineColor: {\n    themeKey: 'palette'\n  },\n  borderRadius: {\n    themeKey: 'shape.borderRadius',\n    style: borderRadius\n  },\n  // palette\n  color: {\n    themeKey: 'palette',\n    transform: paletteTransform\n  },\n  bgcolor: {\n    themeKey: 'palette',\n    cssProperty: 'backgroundColor',\n    transform: paletteTransform\n  },\n  backgroundColor: {\n    themeKey: 'palette',\n    transform: paletteTransform\n  },\n  // spacing\n  p: {\n    style: padding\n  },\n  pt: {\n    style: padding\n  },\n  pr: {\n    style: padding\n  },\n  pb: {\n    style: padding\n  },\n  pl: {\n    style: padding\n  },\n  px: {\n    style: padding\n  },\n  py: {\n    style: padding\n  },\n  padding: {\n    style: padding\n  },\n  paddingTop: {\n    style: padding\n  },\n  paddingRight: {\n    style: padding\n  },\n  paddingBottom: {\n    style: padding\n  },\n  paddingLeft: {\n    style: padding\n  },\n  paddingX: {\n    style: padding\n  },\n  paddingY: {\n    style: padding\n  },\n  paddingInline: {\n    style: padding\n  },\n  paddingInlineStart: {\n    style: padding\n  },\n  paddingInlineEnd: {\n    style: padding\n  },\n  paddingBlock: {\n    style: padding\n  },\n  paddingBlockStart: {\n    style: padding\n  },\n  paddingBlockEnd: {\n    style: padding\n  },\n  m: {\n    style: margin\n  },\n  mt: {\n    style: margin\n  },\n  mr: {\n    style: margin\n  },\n  mb: {\n    style: margin\n  },\n  ml: {\n    style: margin\n  },\n  mx: {\n    style: margin\n  },\n  my: {\n    style: margin\n  },\n  margin: {\n    style: margin\n  },\n  marginTop: {\n    style: margin\n  },\n  marginRight: {\n    style: margin\n  },\n  marginBottom: {\n    style: margin\n  },\n  marginLeft: {\n    style: margin\n  },\n  marginX: {\n    style: margin\n  },\n  marginY: {\n    style: margin\n  },\n  marginInline: {\n    style: margin\n  },\n  marginInlineStart: {\n    style: margin\n  },\n  marginInlineEnd: {\n    style: margin\n  },\n  marginBlock: {\n    style: margin\n  },\n  marginBlockStart: {\n    style: margin\n  },\n  marginBlockEnd: {\n    style: margin\n  },\n  // display\n  displayPrint: {\n    cssProperty: false,\n    transform: value => ({\n      '@media print': {\n        display: value\n      }\n    })\n  },\n  display: {},\n  overflow: {},\n  textOverflow: {},\n  visibility: {},\n  whiteSpace: {},\n  // flexbox\n  flexBasis: {},\n  flexDirection: {},\n  flexWrap: {},\n  justifyContent: {},\n  alignItems: {},\n  alignContent: {},\n  order: {},\n  flex: {},\n  flexGrow: {},\n  flexShrink: {},\n  alignSelf: {},\n  justifyItems: {},\n  justifySelf: {},\n  // grid\n  gap: {\n    style: gap\n  },\n  rowGap: {\n    style: rowGap\n  },\n  columnGap: {\n    style: columnGap\n  },\n  gridColumn: {},\n  gridRow: {},\n  gridAutoFlow: {},\n  gridAutoColumns: {},\n  gridAutoRows: {},\n  gridTemplateColumns: {},\n  gridTemplateRows: {},\n  gridTemplateAreas: {},\n  gridArea: {},\n  // positions\n  position: {},\n  zIndex: {\n    themeKey: 'zIndex'\n  },\n  top: {},\n  right: {},\n  bottom: {},\n  left: {},\n  // shadows\n  boxShadow: {\n    themeKey: 'shadows'\n  },\n  // sizing\n  width: {\n    transform: sizingTransform\n  },\n  maxWidth: {\n    style: maxWidth\n  },\n  minWidth: {\n    transform: sizingTransform\n  },\n  height: {\n    transform: sizingTransform\n  },\n  maxHeight: {\n    transform: sizingTransform\n  },\n  minHeight: {\n    transform: sizingTransform\n  },\n  boxSizing: {},\n  // typography\n  font: {\n    themeKey: 'font'\n  },\n  fontFamily: {\n    themeKey: 'typography'\n  },\n  fontSize: {\n    themeKey: 'typography'\n  },\n  fontStyle: {\n    themeKey: 'typography'\n  },\n  fontWeight: {\n    themeKey: 'typography'\n  },\n  letterSpacing: {},\n  textTransform: {},\n  lineHeight: {},\n  textAlign: {},\n  typography: {\n    cssProperty: false,\n    themeKey: 'typography'\n  }\n};\nexport default defaultSxConfig;","import capitalize from '@mui/utils/capitalize';\nimport merge from \"../merge/index.js\";\nimport { getPath, getStyleValue as getValue } from \"../style/index.js\";\nimport { handleBreakpoints, createEmptyBreakpointObject, removeUnusedBreakpoints } from \"../breakpoints/index.js\";\nimport { sortContainerQueries } from \"../cssContainerQueries/index.js\";\nimport defaultSxConfig from \"./defaultSxConfig.js\";\nfunction objectsHaveSameKeys(...objects) {\n  const allKeys = objects.reduce((keys, object) => keys.concat(Object.keys(object)), []);\n  const union = new Set(allKeys);\n  return objects.every(object => union.size === Object.keys(object).length);\n}\nfunction callIfFn(maybeFn, arg) {\n  return typeof maybeFn === 'function' ? maybeFn(arg) : maybeFn;\n}\n\n// eslint-disable-next-line @typescript-eslint/naming-convention\nexport function unstable_createStyleFunctionSx() {\n  function getThemeValue(prop, val, theme, config) {\n    const props = {\n      [prop]: val,\n      theme\n    };\n    const options = config[prop];\n    if (!options) {\n      return {\n        [prop]: val\n      };\n    }\n    const {\n      cssProperty = prop,\n      themeKey,\n      transform,\n      style\n    } = options;\n    if (val == null) {\n      return null;\n    }\n\n    // TODO v6: remove, see https://github.com/mui/material-ui/pull/38123\n    if (themeKey === 'typography' && val === 'inherit') {\n      return {\n        [prop]: val\n      };\n    }\n    const themeMapping = getPath(theme, themeKey) || {};\n    if (style) {\n      return style(props);\n    }\n    const styleFromPropValue = propValueFinal => {\n      let value = getValue(themeMapping, transform, propValueFinal);\n      if (propValueFinal === value && typeof propValueFinal === 'string') {\n        // Haven't found value\n        value = getValue(themeMapping, transform, `${prop}${propValueFinal === 'default' ? '' : capitalize(propValueFinal)}`, propValueFinal);\n      }\n      if (cssProperty === false) {\n        return value;\n      }\n      return {\n        [cssProperty]: value\n      };\n    };\n    return handleBreakpoints(props, val, styleFromPropValue);\n  }\n  function styleFunctionSx(props) {\n    const {\n      sx,\n      theme = {},\n      nested\n    } = props || {};\n    if (!sx) {\n      return null; // Emotion & styled-components will neglect null\n    }\n    const config = theme.unstable_sxConfig ?? defaultSxConfig;\n\n    /*\n     * Receive `sxInput` as object or callback\n     * and then recursively check keys & values to create media query object styles.\n     * (the result will be used in `styled`)\n     */\n    function traverse(sxInput) {\n      let sxObject = sxInput;\n      if (typeof sxInput === 'function') {\n        sxObject = sxInput(theme);\n      } else if (typeof sxInput !== 'object') {\n        // value\n        return sxInput;\n      }\n      if (!sxObject) {\n        return null;\n      }\n      const emptyBreakpoints = createEmptyBreakpointObject(theme.breakpoints);\n      const breakpointsKeys = Object.keys(emptyBreakpoints);\n      let css = emptyBreakpoints;\n      Object.keys(sxObject).forEach(styleKey => {\n        const value = callIfFn(sxObject[styleKey], theme);\n        if (value !== null && value !== undefined) {\n          if (typeof value === 'object') {\n            if (config[styleKey]) {\n              css = merge(css, getThemeValue(styleKey, value, theme, config));\n            } else {\n              const breakpointsValues = handleBreakpoints({\n                theme\n              }, value, x => ({\n                [styleKey]: x\n              }));\n              if (objectsHaveSameKeys(breakpointsValues, value)) {\n                css[styleKey] = styleFunctionSx({\n                  sx: value,\n                  theme,\n                  nested: true\n                });\n              } else {\n                css = merge(css, breakpointsValues);\n              }\n            }\n          } else {\n            css = merge(css, getThemeValue(styleKey, value, theme, config));\n          }\n        }\n      });\n      if (!nested && theme.modularCssLayers) {\n        return {\n          '@layer sx': sortContainerQueries(theme, removeUnusedBreakpoints(breakpointsKeys, css))\n        };\n      }\n      return sortContainerQueries(theme, removeUnusedBreakpoints(breakpointsKeys, css));\n    }\n    return Array.isArray(sx) ? sx.map(traverse) : traverse(sx);\n  }\n  return styleFunctionSx;\n}\nconst styleFunctionSx = unstable_createStyleFunctionSx();\nstyleFunctionSx.filterProps = ['sx'];\nexport default styleFunctionSx;","import { isPlainObject } from '@mui/utils/deepmerge';\nimport defaultSxConfig from \"./defaultSxConfig.js\";\nconst splitProps = props => {\n  const result = {\n    systemProps: {},\n    otherProps: {}\n  };\n  const config = props?.theme?.unstable_sxConfig ?? defaultSxConfig;\n  Object.keys(props).forEach(prop => {\n    if (config[prop]) {\n      result.systemProps[prop] = props[prop];\n    } else {\n      result.otherProps[prop] = props[prop];\n    }\n  });\n  return result;\n};\nexport default function extendSxProp(props) {\n  const {\n    sx: inSx,\n    ...other\n  } = props;\n  const {\n    systemProps,\n    otherProps\n  } = splitProps(other);\n  let finalSx;\n  if (Array.isArray(inSx)) {\n    finalSx = [systemProps, ...inSx];\n  } else if (typeof inSx === 'function') {\n    finalSx = (...args) => {\n      const result = inSx(...args);\n      if (!isPlainObject(result)) {\n        return systemProps;\n      }\n      return {\n        ...systemProps,\n        ...result\n      };\n    };\n  } else {\n    finalSx = {\n      ...systemProps,\n      ...inSx\n    };\n  }\n  return {\n    ...otherProps,\n    sx: finalSx\n  };\n}","function _extends() {\n  return _extends = Object.assign ? Object.assign.bind() : function (n) {\n    for (var e = 1; e < arguments.length; e++) {\n      var t = arguments[e];\n      for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]);\n    }\n    return n;\n  }, _extends.apply(null, arguments);\n}\nexport { _extends as default };","var isDevelopment = false;\n\n/*\n\nBased off glamor's StyleSheet, thanks Sunil ❤️\n\nhigh performance StyleSheet for css-in-js systems\n\n- uses multiple style tags behind the scenes for millions of rules\n- uses `insertRule` for appending in production for *much* faster performance\n\n// usage\n\nimport { StyleSheet } from '@emotion/sheet'\n\nlet styleSheet = new StyleSheet({ key: '', container: document.head })\n\nstyleSheet.insert('#box { border: 1px solid red; }')\n- appends a css rule into the stylesheet\n\nstyleSheet.flush()\n- empties the stylesheet of all its contents\n\n*/\n\nfunction sheetForTag(tag) {\n  if (tag.sheet) {\n    return tag.sheet;\n  } // this weirdness brought to you by firefox\n\n  /* istanbul ignore next */\n\n\n  for (var i = 0; i < document.styleSheets.length; i++) {\n    if (document.styleSheets[i].ownerNode === tag) {\n      return document.styleSheets[i];\n    }\n  } // this function should always return with a value\n  // TS can't understand it though so we make it stop complaining here\n\n\n  return undefined;\n}\n\nfunction createStyleElement(options) {\n  var tag = document.createElement('style');\n  tag.setAttribute('data-emotion', options.key);\n\n  if (options.nonce !== undefined) {\n    tag.setAttribute('nonce', options.nonce);\n  }\n\n  tag.appendChild(document.createTextNode(''));\n  tag.setAttribute('data-s', '');\n  return tag;\n}\n\nvar StyleSheet = /*#__PURE__*/function () {\n  // Using Node instead of HTMLElement since container may be a ShadowRoot\n  function StyleSheet(options) {\n    var _this = this;\n\n    this._insertTag = function (tag) {\n      var before;\n\n      if (_this.tags.length === 0) {\n        if (_this.insertionPoint) {\n          before = _this.insertionPoint.nextSibling;\n        } else if (_this.prepend) {\n          before = _this.container.firstChild;\n        } else {\n          before = _this.before;\n        }\n      } else {\n        before = _this.tags[_this.tags.length - 1].nextSibling;\n      }\n\n      _this.container.insertBefore(tag, before);\n\n      _this.tags.push(tag);\n    };\n\n    this.isSpeedy = options.speedy === undefined ? !isDevelopment : options.speedy;\n    this.tags = [];\n    this.ctr = 0;\n    this.nonce = options.nonce; // key is the value of the data-emotion attribute, it's used to identify different sheets\n\n    this.key = options.key;\n    this.container = options.container;\n    this.prepend = options.prepend;\n    this.insertionPoint = options.insertionPoint;\n    this.before = null;\n  }\n\n  var _proto = StyleSheet.prototype;\n\n  _proto.hydrate = function hydrate(nodes) {\n    nodes.forEach(this._insertTag);\n  };\n\n  _proto.insert = function insert(rule) {\n    // the max length is how many rules we have per style tag, it's 65000 in speedy mode\n    // it's 1 in dev because we insert source maps that map a single rule to a location\n    // and you can only have one source map per style tag\n    if (this.ctr % (this.isSpeedy ? 65000 : 1) === 0) {\n      this._insertTag(createStyleElement(this));\n    }\n\n    var tag = this.tags[this.tags.length - 1];\n\n    if (this.isSpeedy) {\n      var sheet = sheetForTag(tag);\n\n      try {\n        // this is the ultrafast version, works across browsers\n        // the big drawback is that the css won't be editable in devtools\n        sheet.insertRule(rule, sheet.cssRules.length);\n      } catch (e) {\n      }\n    } else {\n      tag.appendChild(document.createTextNode(rule));\n    }\n\n    this.ctr++;\n  };\n\n  _proto.flush = function flush() {\n    this.tags.forEach(function (tag) {\n      var _tag$parentNode;\n\n      return (_tag$parentNode = tag.parentNode) == null ? void 0 : _tag$parentNode.removeChild(tag);\n    });\n    this.tags = [];\n    this.ctr = 0;\n  };\n\n  return StyleSheet;\n}();\n\nexport { StyleSheet };\n","export var MS = '-ms-'\nexport var MOZ = '-moz-'\nexport var WEBKIT = '-webkit-'\n\nexport var COMMENT = 'comm'\nexport var RULESET = 'rule'\nexport var DECLARATION = 'decl'\n\nexport var PAGE = '@page'\nexport var MEDIA = '@media'\nexport var IMPORT = '@import'\nexport var CHARSET = '@charset'\nexport var VIEWPORT = '@viewport'\nexport var SUPPORTS = '@supports'\nexport var DOCUMENT = '@document'\nexport var NAMESPACE = '@namespace'\nexport var KEYFRAMES = '@keyframes'\nexport var FONT_FACE = '@font-face'\nexport var COUNTER_STYLE = '@counter-style'\nexport var FONT_FEATURE_VALUES = '@font-feature-values'\nexport var LAYER = '@layer'\n","/**\n * @param {number}\n * @return {number}\n */\nexport var abs = Math.abs\n\n/**\n * @param {number}\n * @return {string}\n */\nexport var from = String.fromCharCode\n\n/**\n * @param {object}\n * @return {object}\n */\nexport var assign = Object.assign\n\n/**\n * @param {string} value\n * @param {number} length\n * @return {number}\n */\nexport function hash (value, length) {\n\treturn charat(value, 0) ^ 45 ? (((((((length << 2) ^ charat(value, 0)) << 2) ^ charat(value, 1)) << 2) ^ charat(value, 2)) << 2) ^ charat(value, 3) : 0\n}\n\n/**\n * @param {string} value\n * @return {string}\n */\nexport function trim (value) {\n\treturn value.trim()\n}\n\n/**\n * @param {string} value\n * @param {RegExp} pattern\n * @return {string?}\n */\nexport function match (value, pattern) {\n\treturn (value = pattern.exec(value)) ? value[0] : value\n}\n\n/**\n * @param {string} value\n * @param {(string|RegExp)} pattern\n * @param {string} replacement\n * @return {string}\n */\nexport function replace (value, pattern, replacement) {\n\treturn value.replace(pattern, replacement)\n}\n\n/**\n * @param {string} value\n * @param {string} search\n * @return {number}\n */\nexport function indexof (value, search) {\n\treturn value.indexOf(search)\n}\n\n/**\n * @param {string} value\n * @param {number} index\n * @return {number}\n */\nexport function charat (value, index) {\n\treturn value.charCodeAt(index) | 0\n}\n\n/**\n * @param {string} value\n * @param {number} begin\n * @param {number} end\n * @return {string}\n */\nexport function substr (value, begin, end) {\n\treturn value.slice(begin, end)\n}\n\n/**\n * @param {string} value\n * @return {number}\n */\nexport function strlen (value) {\n\treturn value.length\n}\n\n/**\n * @param {any[]} value\n * @return {number}\n */\nexport function sizeof (value) {\n\treturn value.length\n}\n\n/**\n * @param {any} value\n * @param {any[]} array\n * @return {any}\n */\nexport function append (value, array) {\n\treturn array.push(value), value\n}\n\n/**\n * @param {string[]} array\n * @param {function} callback\n * @return {string}\n */\nexport function combine (array, callback) {\n\treturn array.map(callback).join('')\n}\n","import {from, trim, charat, strlen, substr, append, assign} from './Utility.js'\n\nexport var line = 1\nexport var column = 1\nexport var length = 0\nexport var position = 0\nexport var character = 0\nexport var characters = ''\n\n/**\n * @param {string} value\n * @param {object | null} root\n * @param {object | null} parent\n * @param {string} type\n * @param {string[] | string} props\n * @param {object[] | string} children\n * @param {number} length\n */\nexport function node (value, root, parent, type, props, children, length) {\n\treturn {value: value, root: root, parent: parent, type: type, props: props, children: children, line: line, column: column, length: length, return: ''}\n}\n\n/**\n * @param {object} root\n * @param {object} props\n * @return {object}\n */\nexport function copy (root, props) {\n\treturn assign(node('', null, null, '', null, null, 0), root, {length: -root.length}, props)\n}\n\n/**\n * @return {number}\n */\nexport function char () {\n\treturn character\n}\n\n/**\n * @return {number}\n */\nexport function prev () {\n\tcharacter = position > 0 ? charat(characters, --position) : 0\n\n\tif (column--, character === 10)\n\t\tcolumn = 1, line--\n\n\treturn character\n}\n\n/**\n * @return {number}\n */\nexport function next () {\n\tcharacter = position < length ? charat(characters, position++) : 0\n\n\tif (column++, character === 10)\n\t\tcolumn = 1, line++\n\n\treturn character\n}\n\n/**\n * @return {number}\n */\nexport function peek () {\n\treturn charat(characters, position)\n}\n\n/**\n * @return {number}\n */\nexport function caret () {\n\treturn position\n}\n\n/**\n * @param {number} begin\n * @param {number} end\n * @return {string}\n */\nexport function slice (begin, end) {\n\treturn substr(characters, begin, end)\n}\n\n/**\n * @param {number} type\n * @return {number}\n */\nexport function token (type) {\n\tswitch (type) {\n\t\t// \\0 \\t \\n \\r \\s whitespace token\n\t\tcase 0: case 9: case 10: case 13: case 32:\n\t\t\treturn 5\n\t\t// ! + , / > @ ~ isolate token\n\t\tcase 33: case 43: case 44: case 47: case 62: case 64: case 126:\n\t\t// ; { } breakpoint token\n\t\tcase 59: case 123: case 125:\n\t\t\treturn 4\n\t\t// : accompanied token\n\t\tcase 58:\n\t\t\treturn 3\n\t\t// \" ' ( [ opening delimit token\n\t\tcase 34: case 39: case 40: case 91:\n\t\t\treturn 2\n\t\t// ) ] closing delimit token\n\t\tcase 41: case 93:\n\t\t\treturn 1\n\t}\n\n\treturn 0\n}\n\n/**\n * @param {string} value\n * @return {any[]}\n */\nexport function alloc (value) {\n\treturn line = column = 1, length = strlen(characters = value), position = 0, []\n}\n\n/**\n * @param {any} value\n * @return {any}\n */\nexport function dealloc (value) {\n\treturn characters = '', value\n}\n\n/**\n * @param {number} type\n * @return {string}\n */\nexport function delimit (type) {\n\treturn trim(slice(position - 1, delimiter(type === 91 ? type + 2 : type === 40 ? type + 1 : type)))\n}\n\n/**\n * @param {string} value\n * @return {string[]}\n */\nexport function tokenize (value) {\n\treturn dealloc(tokenizer(alloc(value)))\n}\n\n/**\n * @param {number} type\n * @return {string}\n */\nexport function whitespace (type) {\n\twhile (character = peek())\n\t\tif (character < 33)\n\t\t\tnext()\n\t\telse\n\t\t\tbreak\n\n\treturn token(type) > 2 || token(character) > 3 ? '' : ' '\n}\n\n/**\n * @param {string[]} children\n * @return {string[]}\n */\nexport function tokenizer (children) {\n\twhile (next())\n\t\tswitch (token(character)) {\n\t\t\tcase 0: append(identifier(position - 1), children)\n\t\t\t\tbreak\n\t\t\tcase 2: append(delimit(character), children)\n\t\t\t\tbreak\n\t\t\tdefault: append(from(character), children)\n\t\t}\n\n\treturn children\n}\n\n/**\n * @param {number} index\n * @param {number} count\n * @return {string}\n */\nexport function escaping (index, count) {\n\twhile (--count && next())\n\t\t// not 0-9 A-F a-f\n\t\tif (character < 48 || character > 102 || (character > 57 && character < 65) || (character > 70 && character < 97))\n\t\t\tbreak\n\n\treturn slice(index, caret() + (count < 6 && peek() == 32 && next() == 32))\n}\n\n/**\n * @param {number} type\n * @return {number}\n */\nexport function delimiter (type) {\n\twhile (next())\n\t\tswitch (character) {\n\t\t\t// ] ) \" '\n\t\t\tcase type:\n\t\t\t\treturn position\n\t\t\t// \" '\n\t\t\tcase 34: case 39:\n\t\t\t\tif (type !== 34 && type !== 39)\n\t\t\t\t\tdelimiter(character)\n\t\t\t\tbreak\n\t\t\t// (\n\t\t\tcase 40:\n\t\t\t\tif (type === 41)\n\t\t\t\t\tdelimiter(type)\n\t\t\t\tbreak\n\t\t\t// \\\n\t\t\tcase 92:\n\t\t\t\tnext()\n\t\t\t\tbreak\n\t\t}\n\n\treturn position\n}\n\n/**\n * @param {number} type\n * @param {number} index\n * @return {number}\n */\nexport function commenter (type, index) {\n\twhile (next())\n\t\t// //\n\t\tif (type + character === 47 + 10)\n\t\t\tbreak\n\t\t// /*\n\t\telse if (type + character === 42 + 42 && peek() === 47)\n\t\t\tbreak\n\n\treturn '/*' + slice(index, position - 1) + '*' + from(type === 47 ? type : next())\n}\n\n/**\n * @param {number} index\n * @return {string}\n */\nexport function identifier (index) {\n\twhile (!token(peek()))\n\t\tnext()\n\n\treturn slice(index, position)\n}\n","import {COMMENT, RULESET, DECLARATION} from './Enum.js'\nimport {abs, charat, trim, from, sizeof, strlen, substr, append, replace, indexof} from './Utility.js'\nimport {node, char, prev, next, peek, caret, alloc, dealloc, delimit, whitespace, escaping, identifier, commenter} from './Tokenizer.js'\n\n/**\n * @param {string} value\n * @return {object[]}\n */\nexport function compile (value) {\n\treturn dealloc(parse('', null, null, null, [''], value = alloc(value), 0, [0], value))\n}\n\n/**\n * @param {string} value\n * @param {object} root\n * @param {object?} parent\n * @param {string[]} rule\n * @param {string[]} rules\n * @param {string[]} rulesets\n * @param {number[]} pseudo\n * @param {number[]} points\n * @param {string[]} declarations\n * @return {object}\n */\nexport function parse (value, root, parent, rule, rules, rulesets, pseudo, points, declarations) {\n\tvar index = 0\n\tvar offset = 0\n\tvar length = pseudo\n\tvar atrule = 0\n\tvar property = 0\n\tvar previous = 0\n\tvar variable = 1\n\tvar scanning = 1\n\tvar ampersand = 1\n\tvar character = 0\n\tvar type = ''\n\tvar props = rules\n\tvar children = rulesets\n\tvar reference = rule\n\tvar characters = type\n\n\twhile (scanning)\n\t\tswitch (previous = character, character = next()) {\n\t\t\t// (\n\t\t\tcase 40:\n\t\t\t\tif (previous != 108 && charat(characters, length - 1) == 58) {\n\t\t\t\t\tif (indexof(characters += replace(delimit(character), '&', '&\\f'), '&\\f') != -1)\n\t\t\t\t\t\tampersand = -1\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t// \" ' [\n\t\t\tcase 34: case 39: case 91:\n\t\t\t\tcharacters += delimit(character)\n\t\t\t\tbreak\n\t\t\t// \\t \\n \\r \\s\n\t\t\tcase 9: case 10: case 13: case 32:\n\t\t\t\tcharacters += whitespace(previous)\n\t\t\t\tbreak\n\t\t\t// \\\n\t\t\tcase 92:\n\t\t\t\tcharacters += escaping(caret() - 1, 7)\n\t\t\t\tcontinue\n\t\t\t// /\n\t\t\tcase 47:\n\t\t\t\tswitch (peek()) {\n\t\t\t\t\tcase 42: case 47:\n\t\t\t\t\t\tappend(comment(commenter(next(), caret()), root, parent), declarations)\n\t\t\t\t\t\tbreak\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tcharacters += '/'\n\t\t\t\t}\n\t\t\t\tbreak\n\t\t\t// {\n\t\t\tcase 123 * variable:\n\t\t\t\tpoints[index++] = strlen(characters) * ampersand\n\t\t\t// } ; \\0\n\t\t\tcase 125 * variable: case 59: case 0:\n\t\t\t\tswitch (character) {\n\t\t\t\t\t// \\0 }\n\t\t\t\t\tcase 0: case 125: scanning = 0\n\t\t\t\t\t// ;\n\t\t\t\t\tcase 59 + offset: if (ampersand == -1) characters = replace(characters, /\\f/g, '')\n\t\t\t\t\t\tif (property > 0 && (strlen(characters) - length))\n\t\t\t\t\t\t\tappend(property > 32 ? declaration(characters + ';', rule, parent, length - 1) : declaration(replace(characters, ' ', '') + ';', rule, parent, length - 2), declarations)\n\t\t\t\t\t\tbreak\n\t\t\t\t\t// @ ;\n\t\t\t\t\tcase 59: characters += ';'\n\t\t\t\t\t// { rule/at-rule\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tappend(reference = ruleset(characters, root, parent, index, offset, rules, points, type, props = [], children = [], length), rulesets)\n\n\t\t\t\t\t\tif (character === 123)\n\t\t\t\t\t\t\tif (offset === 0)\n\t\t\t\t\t\t\t\tparse(characters, root, reference, reference, props, rulesets, length, points, children)\n\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\tswitch (atrule === 99 && charat(characters, 3) === 110 ? 100 : atrule) {\n\t\t\t\t\t\t\t\t\t// d l m s\n\t\t\t\t\t\t\t\t\tcase 100: case 108: case 109: case 115:\n\t\t\t\t\t\t\t\t\t\tparse(value, reference, reference, rule && append(ruleset(value, reference, reference, 0, 0, rules, points, type, rules, props = [], length), children), rules, children, length, points, rule ? props : children)\n\t\t\t\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\t\t\tparse(characters, reference, reference, reference, [''], children, 0, points, children)\n\t\t\t\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tindex = offset = property = 0, variable = ampersand = 1, type = characters = '', length = pseudo\n\t\t\t\tbreak\n\t\t\t// :\n\t\t\tcase 58:\n\t\t\t\tlength = 1 + strlen(characters), property = previous\n\t\t\tdefault:\n\t\t\t\tif (variable < 1)\n\t\t\t\t\tif (character == 123)\n\t\t\t\t\t\t--variable\n\t\t\t\t\telse if (character == 125 && variable++ == 0 && prev() == 125)\n\t\t\t\t\t\tcontinue\n\n\t\t\t\tswitch (characters += from(character), character * variable) {\n\t\t\t\t\t// &\n\t\t\t\t\tcase 38:\n\t\t\t\t\t\tampersand = offset > 0 ? 1 : (characters += '\\f', -1)\n\t\t\t\t\t\tbreak\n\t\t\t\t\t// ,\n\t\t\t\t\tcase 44:\n\t\t\t\t\t\tpoints[index++] = (strlen(characters) - 1) * ampersand, ampersand = 1\n\t\t\t\t\t\tbreak\n\t\t\t\t\t// @\n\t\t\t\t\tcase 64:\n\t\t\t\t\t\t// -\n\t\t\t\t\t\tif (peek() === 45)\n\t\t\t\t\t\t\tcharacters += delimit(next())\n\n\t\t\t\t\t\tatrule = peek(), offset = length = strlen(type = characters += identifier(caret())), character++\n\t\t\t\t\t\tbreak\n\t\t\t\t\t// -\n\t\t\t\t\tcase 45:\n\t\t\t\t\t\tif (previous === 45 && strlen(characters) == 2)\n\t\t\t\t\t\t\tvariable = 0\n\t\t\t\t}\n\t\t}\n\n\treturn rulesets\n}\n\n/**\n * @param {string} value\n * @param {object} root\n * @param {object?} parent\n * @param {number} index\n * @param {number} offset\n * @param {string[]} rules\n * @param {number[]} points\n * @param {string} type\n * @param {string[]} props\n * @param {string[]} children\n * @param {number} length\n * @return {object}\n */\nexport function ruleset (value, root, parent, index, offset, rules, points, type, props, children, length) {\n\tvar post = offset - 1\n\tvar rule = offset === 0 ? rules : ['']\n\tvar size = sizeof(rule)\n\n\tfor (var i = 0, j = 0, k = 0; i < index; ++i)\n\t\tfor (var x = 0, y = substr(value, post + 1, post = abs(j = points[i])), z = value; x < size; ++x)\n\t\t\tif (z = trim(j > 0 ? rule[x] + ' ' + y : replace(y, /&\\f/g, rule[x])))\n\t\t\t\tprops[k++] = z\n\n\treturn node(value, root, parent, offset === 0 ? RULESET : type, props, children, length)\n}\n\n/**\n * @param {number} value\n * @param {object} root\n * @param {object?} parent\n * @return {object}\n */\nexport function comment (value, root, parent) {\n\treturn node(value, root, parent, COMMENT, from(char()), substr(value, 2, -2), 0)\n}\n\n/**\n * @param {string} value\n * @param {object} root\n * @param {object?} parent\n * @param {number} length\n * @return {object}\n */\nexport function declaration (value, root, parent, length) {\n\treturn node(value, root, parent, DECLARATION, substr(value, 0, length), substr(value, length + 1, -1), length)\n}\n","import {IMPORT, LAYER, COMMENT, RULESET, DECLARATION, KEYFRAMES} from './Enum.js'\nimport {strlen, sizeof} from './Utility.js'\n\n/**\n * @param {object[]} children\n * @param {function} callback\n * @return {string}\n */\nexport function serialize (children, callback) {\n\tvar output = ''\n\tvar length = sizeof(children)\n\n\tfor (var i = 0; i < length; i++)\n\t\toutput += callback(children[i], i, children, callback) || ''\n\n\treturn output\n}\n\n/**\n * @param {object} element\n * @param {number} index\n * @param {object[]} children\n * @param {function} callback\n * @return {string}\n */\nexport function stringify (element, index, children, callback) {\n\tswitch (element.type) {\n\t\tcase LAYER: if (element.children.length) break\n\t\tcase IMPORT: case DECLARATION: return element.return = element.return || element.value\n\t\tcase COMMENT: return ''\n\t\tcase KEYFRAMES: return element.return = element.value + '{' + serialize(element.children, callback) + '}'\n\t\tcase RULESET: element.value = element.props.join(',')\n\t}\n\n\treturn strlen(children = serialize(element.children, callback)) ? element.return = element.value + '{' + children + '}' : ''\n}\n","import {MS, MOZ, WEBKIT, RULESET, KEYFRAMES, DECLARATION} from './Enum.js'\nimport {match, charat, substr, strlen, sizeof, replace, combine} from './Utility.js'\nimport {copy, tokenize} from './Tokenizer.js'\nimport {serialize} from './Serializer.js'\nimport {prefix} from './Prefixer.js'\n\n/**\n * @param {function[]} collection\n * @return {function}\n */\nexport function middleware (collection) {\n\tvar length = sizeof(collection)\n\n\treturn function (element, index, children, callback) {\n\t\tvar output = ''\n\n\t\tfor (var i = 0; i < length; i++)\n\t\t\toutput += collection[i](element, index, children, callback) || ''\n\n\t\treturn output\n\t}\n}\n\n/**\n * @param {function} callback\n * @return {function}\n */\nexport function rulesheet (callback) {\n\treturn function (element) {\n\t\tif (!element.root)\n\t\t\tif (element = element.return)\n\t\t\t\tcallback(element)\n\t}\n}\n\n/**\n * @param {object} element\n * @param {number} index\n * @param {object[]} children\n * @param {function} callback\n */\nexport function prefixer (element, index, children, callback) {\n\tif (element.length > -1)\n\t\tif (!element.return)\n\t\t\tswitch (element.type) {\n\t\t\t\tcase DECLARATION: element.return = prefix(element.value, element.length, children)\n\t\t\t\t\treturn\n\t\t\t\tcase KEYFRAMES:\n\t\t\t\t\treturn serialize([copy(element, {value: replace(element.value, '@', '@' + WEBKIT)})], callback)\n\t\t\t\tcase RULESET:\n\t\t\t\t\tif (element.length)\n\t\t\t\t\t\treturn combine(element.props, function (value) {\n\t\t\t\t\t\t\tswitch (match(value, /(::plac\\w+|:read-\\w+)/)) {\n\t\t\t\t\t\t\t\t// :read-(only|write)\n\t\t\t\t\t\t\t\tcase ':read-only': case ':read-write':\n\t\t\t\t\t\t\t\t\treturn serialize([copy(element, {props: [replace(value, /:(read-\\w+)/, ':' + MOZ + '$1')]})], callback)\n\t\t\t\t\t\t\t\t// :placeholder\n\t\t\t\t\t\t\t\tcase '::placeholder':\n\t\t\t\t\t\t\t\t\treturn serialize([\n\t\t\t\t\t\t\t\t\t\tcopy(element, {props: [replace(value, /:(plac\\w+)/, ':' + WEBKIT + 'input-$1')]}),\n\t\t\t\t\t\t\t\t\t\tcopy(element, {props: [replace(value, /:(plac\\w+)/, ':' + MOZ + '$1')]}),\n\t\t\t\t\t\t\t\t\t\tcopy(element, {props: [replace(value, /:(plac\\w+)/, MS + 'input-$1')]})\n\t\t\t\t\t\t\t\t\t], callback)\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\treturn ''\n\t\t\t\t\t\t})\n\t\t\t}\n}\n\n/**\n * @param {object} element\n * @param {number} index\n * @param {object[]} children\n */\nexport function namespace (element) {\n\tswitch (element.type) {\n\t\tcase RULESET:\n\t\t\telement.props = element.props.map(function (value) {\n\t\t\t\treturn combine(tokenize(value), function (value, index, children) {\n\t\t\t\t\tswitch (charat(value, 0)) {\n\t\t\t\t\t\t// \\f\n\t\t\t\t\t\tcase 12:\n\t\t\t\t\t\t\treturn substr(value, 1, strlen(value))\n\t\t\t\t\t\t// \\0 ( + > ~\n\t\t\t\t\t\tcase 0: case 40: case 43: case 62: case 126:\n\t\t\t\t\t\t\treturn value\n\t\t\t\t\t\t// :\n\t\t\t\t\t\tcase 58:\n\t\t\t\t\t\t\tif (children[++index] === 'global')\n\t\t\t\t\t\t\t\tchildren[index] = '', children[++index] = '\\f' + substr(children[index], index = 1, -1)\n\t\t\t\t\t\t// \\s\n\t\t\t\t\t\tcase 32:\n\t\t\t\t\t\t\treturn index === 1 ? '' : value\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\tswitch (index) {\n\t\t\t\t\t\t\t\tcase 0: element = value\n\t\t\t\t\t\t\t\t\treturn sizeof(children) > 1 ? '' : value\n\t\t\t\t\t\t\t\tcase index = sizeof(children) - 1: case 2:\n\t\t\t\t\t\t\t\t\treturn index === 2 ? value + element + element : value + element\n\t\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\t\treturn value\n\t\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t})\n\t}\n}\n","function memoize(fn) {\n  var cache = Object.create(null);\n  return function (arg) {\n    if (cache[arg] === undefined) cache[arg] = fn(arg);\n    return cache[arg];\n  };\n}\n\nexport { memoize as default };\n","import { StyleSheet } from '@emotion/sheet';\nimport { dealloc, alloc, next, token, from, peek, delimit, slice, position, RULESET, combine, match, serialize, copy, replace, WEBKIT, MOZ, MS, KEYFRAMES, DECLARATION, hash, charat, strlen, indexof, stringify, rulesheet, middleware, compile } from 'stylis';\nimport '@emotion/weak-memoize';\nimport '@emotion/memoize';\n\nvar identifierWithPointTracking = function identifierWithPointTracking(begin, points, index) {\n  var previous = 0;\n  var character = 0;\n\n  while (true) {\n    previous = character;\n    character = peek(); // &\\f\n\n    if (previous === 38 && character === 12) {\n      points[index] = 1;\n    }\n\n    if (token(character)) {\n      break;\n    }\n\n    next();\n  }\n\n  return slice(begin, position);\n};\n\nvar toRules = function toRules(parsed, points) {\n  // pretend we've started with a comma\n  var index = -1;\n  var character = 44;\n\n  do {\n    switch (token(character)) {\n      case 0:\n        // &\\f\n        if (character === 38 && peek() === 12) {\n          // this is not 100% correct, we don't account for literal sequences here - like for example quoted strings\n          // stylis inserts \\f after & to know when & where it should replace this sequence with the context selector\n          // and when it should just concatenate the outer and inner selectors\n          // it's very unlikely for this sequence to actually appear in a different context, so we just leverage this fact here\n          points[index] = 1;\n        }\n\n        parsed[index] += identifierWithPointTracking(position - 1, points, index);\n        break;\n\n      case 2:\n        parsed[index] += delimit(character);\n        break;\n\n      case 4:\n        // comma\n        if (character === 44) {\n          // colon\n          parsed[++index] = peek() === 58 ? '&\\f' : '';\n          points[index] = parsed[index].length;\n          break;\n        }\n\n      // fallthrough\n\n      default:\n        parsed[index] += from(character);\n    }\n  } while (character = next());\n\n  return parsed;\n};\n\nvar getRules = function getRules(value, points) {\n  return dealloc(toRules(alloc(value), points));\n}; // WeakSet would be more appropriate, but only WeakMap is supported in IE11\n\n\nvar fixedElements = /* #__PURE__ */new WeakMap();\nvar compat = function compat(element) {\n  if (element.type !== 'rule' || !element.parent || // positive .length indicates that this rule contains pseudo\n  // negative .length indicates that this rule has been already prefixed\n  element.length < 1) {\n    return;\n  }\n\n  var value = element.value;\n  var parent = element.parent;\n  var isImplicitRule = element.column === parent.column && element.line === parent.line;\n\n  while (parent.type !== 'rule') {\n    parent = parent.parent;\n    if (!parent) return;\n  } // short-circuit for the simplest case\n\n\n  if (element.props.length === 1 && value.charCodeAt(0) !== 58\n  /* colon */\n  && !fixedElements.get(parent)) {\n    return;\n  } // if this is an implicitly inserted rule (the one eagerly inserted at the each new nested level)\n  // then the props has already been manipulated beforehand as they that array is shared between it and its \"rule parent\"\n\n\n  if (isImplicitRule) {\n    return;\n  }\n\n  fixedElements.set(element, true);\n  var points = [];\n  var rules = getRules(value, points);\n  var parentRules = parent.props;\n\n  for (var i = 0, k = 0; i < rules.length; i++) {\n    for (var j = 0; j < parentRules.length; j++, k++) {\n      element.props[k] = points[i] ? rules[i].replace(/&\\f/g, parentRules[j]) : parentRules[j] + \" \" + rules[i];\n    }\n  }\n};\nvar removeLabel = function removeLabel(element) {\n  if (element.type === 'decl') {\n    var value = element.value;\n\n    if ( // charcode for l\n    value.charCodeAt(0) === 108 && // charcode for b\n    value.charCodeAt(2) === 98) {\n      // this ignores label\n      element[\"return\"] = '';\n      element.value = '';\n    }\n  }\n};\n\n/* eslint-disable no-fallthrough */\n\nfunction prefix(value, length) {\n  switch (hash(value, length)) {\n    // color-adjust\n    case 5103:\n      return WEBKIT + 'print-' + value + value;\n    // animation, animation-(delay|direction|duration|fill-mode|iteration-count|name|play-state|timing-function)\n\n    case 5737:\n    case 4201:\n    case 3177:\n    case 3433:\n    case 1641:\n    case 4457:\n    case 2921: // text-decoration, filter, clip-path, backface-visibility, column, box-decoration-break\n\n    case 5572:\n    case 6356:\n    case 5844:\n    case 3191:\n    case 6645:\n    case 3005: // mask, mask-image, mask-(mode|clip|size), mask-(repeat|origin), mask-position, mask-composite,\n\n    case 6391:\n    case 5879:\n    case 5623:\n    case 6135:\n    case 4599:\n    case 4855: // background-clip, columns, column-(count|fill|gap|rule|rule-color|rule-style|rule-width|span|width)\n\n    case 4215:\n    case 6389:\n    case 5109:\n    case 5365:\n    case 5621:\n    case 3829:\n      return WEBKIT + value + value;\n    // appearance, user-select, transform, hyphens, text-size-adjust\n\n    case 5349:\n    case 4246:\n    case 4810:\n    case 6968:\n    case 2756:\n      return WEBKIT + value + MOZ + value + MS + value + value;\n    // flex, flex-direction\n\n    case 6828:\n    case 4268:\n      return WEBKIT + value + MS + value + value;\n    // order\n\n    case 6165:\n      return WEBKIT + value + MS + 'flex-' + value + value;\n    // align-items\n\n    case 5187:\n      return WEBKIT + value + replace(value, /(\\w+).+(:[^]+)/, WEBKIT + 'box-$1$2' + MS + 'flex-$1$2') + value;\n    // align-self\n\n    case 5443:\n      return WEBKIT + value + MS + 'flex-item-' + replace(value, /flex-|-self/, '') + value;\n    // align-content\n\n    case 4675:\n      return WEBKIT + value + MS + 'flex-line-pack' + replace(value, /align-content|flex-|-self/, '') + value;\n    // flex-shrink\n\n    case 5548:\n      return WEBKIT + value + MS + replace(value, 'shrink', 'negative') + value;\n    // flex-basis\n\n    case 5292:\n      return WEBKIT + value + MS + replace(value, 'basis', 'preferred-size') + value;\n    // flex-grow\n\n    case 6060:\n      return WEBKIT + 'box-' + replace(value, '-grow', '') + WEBKIT + value + MS + replace(value, 'grow', 'positive') + value;\n    // transition\n\n    case 4554:\n      return WEBKIT + replace(value, /([^-])(transform)/g, '$1' + WEBKIT + '$2') + value;\n    // cursor\n\n    case 6187:\n      return replace(replace(replace(value, /(zoom-|grab)/, WEBKIT + '$1'), /(image-set)/, WEBKIT + '$1'), value, '') + value;\n    // background, background-image\n\n    case 5495:\n    case 3959:\n      return replace(value, /(image-set\\([^]*)/, WEBKIT + '$1' + '$`$1');\n    // justify-content\n\n    case 4968:\n      return replace(replace(value, /(.+:)(flex-)?(.*)/, WEBKIT + 'box-pack:$3' + MS + 'flex-pack:$3'), /s.+-b[^;]+/, 'justify') + WEBKIT + value + value;\n    // (margin|padding)-inline-(start|end)\n\n    case 4095:\n    case 3583:\n    case 4068:\n    case 2532:\n      return replace(value, /(.+)-inline(.+)/, WEBKIT + '$1$2') + value;\n    // (min|max)?(width|height|inline-size|block-size)\n\n    case 8116:\n    case 7059:\n    case 5753:\n    case 5535:\n    case 5445:\n    case 5701:\n    case 4933:\n    case 4677:\n    case 5533:\n    case 5789:\n    case 5021:\n    case 4765:\n      // stretch, max-content, min-content, fill-available\n      if (strlen(value) - 1 - length > 6) switch (charat(value, length + 1)) {\n        // (m)ax-content, (m)in-content\n        case 109:\n          // -\n          if (charat(value, length + 4) !== 45) break;\n        // (f)ill-available, (f)it-content\n\n        case 102:\n          return replace(value, /(.+:)(.+)-([^]+)/, '$1' + WEBKIT + '$2-$3' + '$1' + MOZ + (charat(value, length + 3) == 108 ? '$3' : '$2-$3')) + value;\n        // (s)tretch\n\n        case 115:\n          return ~indexof(value, 'stretch') ? prefix(replace(value, 'stretch', 'fill-available'), length) + value : value;\n      }\n      break;\n    // position: sticky\n\n    case 4949:\n      // (s)ticky?\n      if (charat(value, length + 1) !== 115) break;\n    // display: (flex|inline-flex)\n\n    case 6444:\n      switch (charat(value, strlen(value) - 3 - (~indexof(value, '!important') && 10))) {\n        // stic(k)y\n        case 107:\n          return replace(value, ':', ':' + WEBKIT) + value;\n        // (inline-)?fl(e)x\n\n        case 101:\n          return replace(value, /(.+:)([^;!]+)(;|!.+)?/, '$1' + WEBKIT + (charat(value, 14) === 45 ? 'inline-' : '') + 'box$3' + '$1' + WEBKIT + '$2$3' + '$1' + MS + '$2box$3') + value;\n      }\n\n      break;\n    // writing-mode\n\n    case 5936:\n      switch (charat(value, length + 11)) {\n        // vertical-l(r)\n        case 114:\n          return WEBKIT + value + MS + replace(value, /[svh]\\w+-[tblr]{2}/, 'tb') + value;\n        // vertical-r(l)\n\n        case 108:\n          return WEBKIT + value + MS + replace(value, /[svh]\\w+-[tblr]{2}/, 'tb-rl') + value;\n        // horizontal(-)tb\n\n        case 45:\n          return WEBKIT + value + MS + replace(value, /[svh]\\w+-[tblr]{2}/, 'lr') + value;\n      }\n\n      return WEBKIT + value + MS + value + value;\n  }\n\n  return value;\n}\n\nvar prefixer = function prefixer(element, index, children, callback) {\n  if (element.length > -1) if (!element[\"return\"]) switch (element.type) {\n    case DECLARATION:\n      element[\"return\"] = prefix(element.value, element.length);\n      break;\n\n    case KEYFRAMES:\n      return serialize([copy(element, {\n        value: replace(element.value, '@', '@' + WEBKIT)\n      })], callback);\n\n    case RULESET:\n      if (element.length) return combine(element.props, function (value) {\n        switch (match(value, /(::plac\\w+|:read-\\w+)/)) {\n          // :read-(only|write)\n          case ':read-only':\n          case ':read-write':\n            return serialize([copy(element, {\n              props: [replace(value, /:(read-\\w+)/, ':' + MOZ + '$1')]\n            })], callback);\n          // :placeholder\n\n          case '::placeholder':\n            return serialize([copy(element, {\n              props: [replace(value, /:(plac\\w+)/, ':' + WEBKIT + 'input-$1')]\n            }), copy(element, {\n              props: [replace(value, /:(plac\\w+)/, ':' + MOZ + '$1')]\n            }), copy(element, {\n              props: [replace(value, /:(plac\\w+)/, MS + 'input-$1')]\n            })], callback);\n        }\n\n        return '';\n      });\n  }\n};\n\nvar defaultStylisPlugins = [prefixer];\n\nvar createCache = function createCache(options) {\n  var key = options.key;\n\n  if (key === 'css') {\n    var ssrStyles = document.querySelectorAll(\"style[data-emotion]:not([data-s])\"); // get SSRed styles out of the way of React's hydration\n    // document.head is a safe place to move them to(though note document.head is not necessarily the last place they will be)\n    // note this very very intentionally targets all style elements regardless of the key to ensure\n    // that creating a cache works inside of render of a React component\n\n    Array.prototype.forEach.call(ssrStyles, function (node) {\n      // we want to only move elements which have a space in the data-emotion attribute value\n      // because that indicates that it is an Emotion 11 server-side rendered style elements\n      // while we will already ignore Emotion 11 client-side inserted styles because of the :not([data-s]) part in the selector\n      // Emotion 10 client-side inserted styles did not have data-s (but importantly did not have a space in their data-emotion attributes)\n      // so checking for the space ensures that loading Emotion 11 after Emotion 10 has inserted some styles\n      // will not result in the Emotion 10 styles being destroyed\n      var dataEmotionAttribute = node.getAttribute('data-emotion');\n\n      if (dataEmotionAttribute.indexOf(' ') === -1) {\n        return;\n      }\n\n      document.head.appendChild(node);\n      node.setAttribute('data-s', '');\n    });\n  }\n\n  var stylisPlugins = options.stylisPlugins || defaultStylisPlugins;\n\n  var inserted = {};\n  var container;\n  var nodesToHydrate = [];\n\n  {\n    container = options.container || document.head;\n    Array.prototype.forEach.call( // this means we will ignore elements which don't have a space in them which\n    // means that the style elements we're looking at are only Emotion 11 server-rendered style elements\n    document.querySelectorAll(\"style[data-emotion^=\\\"\" + key + \" \\\"]\"), function (node) {\n      var attrib = node.getAttribute(\"data-emotion\").split(' ');\n\n      for (var i = 1; i < attrib.length; i++) {\n        inserted[attrib[i]] = true;\n      }\n\n      nodesToHydrate.push(node);\n    });\n  }\n\n  var _insert;\n\n  var omnipresentPlugins = [compat, removeLabel];\n\n  {\n    var currentSheet;\n    var finalizingPlugins = [stringify, rulesheet(function (rule) {\n      currentSheet.insert(rule);\n    })];\n    var serializer = middleware(omnipresentPlugins.concat(stylisPlugins, finalizingPlugins));\n\n    var stylis = function stylis(styles) {\n      return serialize(compile(styles), serializer);\n    };\n\n    _insert = function insert(selector, serialized, sheet, shouldCache) {\n      currentSheet = sheet;\n\n      stylis(selector ? selector + \"{\" + serialized.styles + \"}\" : serialized.styles);\n\n      if (shouldCache) {\n        cache.inserted[serialized.name] = true;\n      }\n    };\n  }\n\n  var cache = {\n    key: key,\n    sheet: new StyleSheet({\n      key: key,\n      container: container,\n      nonce: options.nonce,\n      speedy: options.speedy,\n      prepend: options.prepend,\n      insertionPoint: options.insertionPoint\n    }),\n    nonce: options.nonce,\n    inserted: inserted,\n    registered: {},\n    insert: _insert\n  };\n  cache.sheet.hydrate(nodesToHydrate);\n  return cache;\n};\n\nexport { createCache as default };\n","/** @license React v16.13.1\n * react-is.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';var b=\"function\"===typeof Symbol&&Symbol.for,c=b?Symbol.for(\"react.element\"):60103,d=b?Symbol.for(\"react.portal\"):60106,e=b?Symbol.for(\"react.fragment\"):60107,f=b?Symbol.for(\"react.strict_mode\"):60108,g=b?Symbol.for(\"react.profiler\"):60114,h=b?Symbol.for(\"react.provider\"):60109,k=b?Symbol.for(\"react.context\"):60110,l=b?Symbol.for(\"react.async_mode\"):60111,m=b?Symbol.for(\"react.concurrent_mode\"):60111,n=b?Symbol.for(\"react.forward_ref\"):60112,p=b?Symbol.for(\"react.suspense\"):60113,q=b?\nSymbol.for(\"react.suspense_list\"):60120,r=b?Symbol.for(\"react.memo\"):60115,t=b?Symbol.for(\"react.lazy\"):60116,v=b?Symbol.for(\"react.block\"):60121,w=b?Symbol.for(\"react.fundamental\"):60117,x=b?Symbol.for(\"react.responder\"):60118,y=b?Symbol.for(\"react.scope\"):60119;\nfunction z(a){if(\"object\"===typeof a&&null!==a){var u=a.$$typeof;switch(u){case c:switch(a=a.type,a){case l:case m:case e:case g:case f:case p:return a;default:switch(a=a&&a.$$typeof,a){case k:case n:case t:case r:case h:return a;default:return u}}case d:return u}}}function A(a){return z(a)===m}exports.AsyncMode=l;exports.ConcurrentMode=m;exports.ContextConsumer=k;exports.ContextProvider=h;exports.Element=c;exports.ForwardRef=n;exports.Fragment=e;exports.Lazy=t;exports.Memo=r;exports.Portal=d;\nexports.Profiler=g;exports.StrictMode=f;exports.Suspense=p;exports.isAsyncMode=function(a){return A(a)||z(a)===l};exports.isConcurrentMode=A;exports.isContextConsumer=function(a){return z(a)===k};exports.isContextProvider=function(a){return z(a)===h};exports.isElement=function(a){return\"object\"===typeof a&&null!==a&&a.$$typeof===c};exports.isForwardRef=function(a){return z(a)===n};exports.isFragment=function(a){return z(a)===e};exports.isLazy=function(a){return z(a)===t};\nexports.isMemo=function(a){return z(a)===r};exports.isPortal=function(a){return z(a)===d};exports.isProfiler=function(a){return z(a)===g};exports.isStrictMode=function(a){return z(a)===f};exports.isSuspense=function(a){return z(a)===p};\nexports.isValidElementType=function(a){return\"string\"===typeof a||\"function\"===typeof a||a===e||a===m||a===g||a===f||a===p||a===q||\"object\"===typeof a&&null!==a&&(a.$$typeof===t||a.$$typeof===r||a.$$typeof===h||a.$$typeof===k||a.$$typeof===n||a.$$typeof===w||a.$$typeof===x||a.$$typeof===y||a.$$typeof===v)};exports.typeOf=z;\n","/** @license React v16.13.1\n * react-is.development.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\n\n\nif (process.env.NODE_ENV !== \"production\") {\n  (function() {\n'use strict';\n\n// The Symbol used to tag the ReactElement-like types. If there is no native Symbol\n// nor polyfill, then a plain number is used for performance.\nvar hasSymbol = typeof Symbol === 'function' && Symbol.for;\nvar REACT_ELEMENT_TYPE = hasSymbol ? Symbol.for('react.element') : 0xeac7;\nvar REACT_PORTAL_TYPE = hasSymbol ? Symbol.for('react.portal') : 0xeaca;\nvar REACT_FRAGMENT_TYPE = hasSymbol ? Symbol.for('react.fragment') : 0xeacb;\nvar REACT_STRICT_MODE_TYPE = hasSymbol ? Symbol.for('react.strict_mode') : 0xeacc;\nvar REACT_PROFILER_TYPE = hasSymbol ? Symbol.for('react.profiler') : 0xead2;\nvar REACT_PROVIDER_TYPE = hasSymbol ? Symbol.for('react.provider') : 0xeacd;\nvar REACT_CONTEXT_TYPE = hasSymbol ? Symbol.for('react.context') : 0xeace; // TODO: We don't use AsyncMode or ConcurrentMode anymore. They were temporary\n// (unstable) APIs that have been removed. Can we remove the symbols?\n\nvar REACT_ASYNC_MODE_TYPE = hasSymbol ? Symbol.for('react.async_mode') : 0xeacf;\nvar REACT_CONCURRENT_MODE_TYPE = hasSymbol ? Symbol.for('react.concurrent_mode') : 0xeacf;\nvar REACT_FORWARD_REF_TYPE = hasSymbol ? Symbol.for('react.forward_ref') : 0xead0;\nvar REACT_SUSPENSE_TYPE = hasSymbol ? Symbol.for('react.suspense') : 0xead1;\nvar REACT_SUSPENSE_LIST_TYPE = hasSymbol ? Symbol.for('react.suspense_list') : 0xead8;\nvar REACT_MEMO_TYPE = hasSymbol ? Symbol.for('react.memo') : 0xead3;\nvar REACT_LAZY_TYPE = hasSymbol ? Symbol.for('react.lazy') : 0xead4;\nvar REACT_BLOCK_TYPE = hasSymbol ? Symbol.for('react.block') : 0xead9;\nvar REACT_FUNDAMENTAL_TYPE = hasSymbol ? Symbol.for('react.fundamental') : 0xead5;\nvar REACT_RESPONDER_TYPE = hasSymbol ? Symbol.for('react.responder') : 0xead6;\nvar REACT_SCOPE_TYPE = hasSymbol ? Symbol.for('react.scope') : 0xead7;\n\nfunction isValidElementType(type) {\n  return typeof type === 'string' || typeof type === 'function' || // Note: its typeof might be other than 'symbol' or 'number' if it's a polyfill.\n  type === REACT_FRAGMENT_TYPE || type === REACT_CONCURRENT_MODE_TYPE || type === REACT_PROFILER_TYPE || type === REACT_STRICT_MODE_TYPE || type === REACT_SUSPENSE_TYPE || type === REACT_SUSPENSE_LIST_TYPE || typeof type === 'object' && type !== null && (type.$$typeof === REACT_LAZY_TYPE || type.$$typeof === REACT_MEMO_TYPE || type.$$typeof === REACT_PROVIDER_TYPE || type.$$typeof === REACT_CONTEXT_TYPE || type.$$typeof === REACT_FORWARD_REF_TYPE || type.$$typeof === REACT_FUNDAMENTAL_TYPE || type.$$typeof === REACT_RESPONDER_TYPE || type.$$typeof === REACT_SCOPE_TYPE || type.$$typeof === REACT_BLOCK_TYPE);\n}\n\nfunction typeOf(object) {\n  if (typeof object === 'object' && object !== null) {\n    var $$typeof = object.$$typeof;\n\n    switch ($$typeof) {\n      case REACT_ELEMENT_TYPE:\n        var type = object.type;\n\n        switch (type) {\n          case REACT_ASYNC_MODE_TYPE:\n          case REACT_CONCURRENT_MODE_TYPE:\n          case REACT_FRAGMENT_TYPE:\n          case REACT_PROFILER_TYPE:\n          case REACT_STRICT_MODE_TYPE:\n          case REACT_SUSPENSE_TYPE:\n            return type;\n\n          default:\n            var $$typeofType = type && type.$$typeof;\n\n            switch ($$typeofType) {\n              case REACT_CONTEXT_TYPE:\n              case REACT_FORWARD_REF_TYPE:\n              case REACT_LAZY_TYPE:\n              case REACT_MEMO_TYPE:\n              case REACT_PROVIDER_TYPE:\n                return $$typeofType;\n\n              default:\n                return $$typeof;\n            }\n\n        }\n\n      case REACT_PORTAL_TYPE:\n        return $$typeof;\n    }\n  }\n\n  return undefined;\n} // AsyncMode is deprecated along with isAsyncMode\n\nvar AsyncMode = REACT_ASYNC_MODE_TYPE;\nvar ConcurrentMode = REACT_CONCURRENT_MODE_TYPE;\nvar ContextConsumer = REACT_CONTEXT_TYPE;\nvar ContextProvider = REACT_PROVIDER_TYPE;\nvar Element = REACT_ELEMENT_TYPE;\nvar ForwardRef = REACT_FORWARD_REF_TYPE;\nvar Fragment = REACT_FRAGMENT_TYPE;\nvar Lazy = REACT_LAZY_TYPE;\nvar Memo = REACT_MEMO_TYPE;\nvar Portal = REACT_PORTAL_TYPE;\nvar Profiler = REACT_PROFILER_TYPE;\nvar StrictMode = REACT_STRICT_MODE_TYPE;\nvar Suspense = REACT_SUSPENSE_TYPE;\nvar hasWarnedAboutDeprecatedIsAsyncMode = false; // AsyncMode should be deprecated\n\nfunction isAsyncMode(object) {\n  {\n    if (!hasWarnedAboutDeprecatedIsAsyncMode) {\n      hasWarnedAboutDeprecatedIsAsyncMode = true; // Using console['warn'] to evade Babel and ESLint\n\n      console['warn']('The ReactIs.isAsyncMode() alias has been deprecated, ' + 'and will be removed in React 17+. Update your code to use ' + 'ReactIs.isConcurrentMode() instead. It has the exact same API.');\n    }\n  }\n\n  return isConcurrentMode(object) || typeOf(object) === REACT_ASYNC_MODE_TYPE;\n}\nfunction isConcurrentMode(object) {\n  return typeOf(object) === REACT_CONCURRENT_MODE_TYPE;\n}\nfunction isContextConsumer(object) {\n  return typeOf(object) === REACT_CONTEXT_TYPE;\n}\nfunction isContextProvider(object) {\n  return typeOf(object) === REACT_PROVIDER_TYPE;\n}\nfunction isElement(object) {\n  return typeof object === 'object' && object !== null && object.$$typeof === REACT_ELEMENT_TYPE;\n}\nfunction isForwardRef(object) {\n  return typeOf(object) === REACT_FORWARD_REF_TYPE;\n}\nfunction isFragment(object) {\n  return typeOf(object) === REACT_FRAGMENT_TYPE;\n}\nfunction isLazy(object) {\n  return typeOf(object) === REACT_LAZY_TYPE;\n}\nfunction isMemo(object) {\n  return typeOf(object) === REACT_MEMO_TYPE;\n}\nfunction isPortal(object) {\n  return typeOf(object) === REACT_PORTAL_TYPE;\n}\nfunction isProfiler(object) {\n  return typeOf(object) === REACT_PROFILER_TYPE;\n}\nfunction isStrictMode(object) {\n  return typeOf(object) === REACT_STRICT_MODE_TYPE;\n}\nfunction isSuspense(object) {\n  return typeOf(object) === REACT_SUSPENSE_TYPE;\n}\n\nexports.AsyncMode = AsyncMode;\nexports.ConcurrentMode = ConcurrentMode;\nexports.ContextConsumer = ContextConsumer;\nexports.ContextProvider = ContextProvider;\nexports.Element = Element;\nexports.ForwardRef = ForwardRef;\nexports.Fragment = Fragment;\nexports.Lazy = Lazy;\nexports.Memo = Memo;\nexports.Portal = Portal;\nexports.Profiler = Profiler;\nexports.StrictMode = StrictMode;\nexports.Suspense = Suspense;\nexports.isAsyncMode = isAsyncMode;\nexports.isConcurrentMode = isConcurrentMode;\nexports.isContextConsumer = isContextConsumer;\nexports.isContextProvider = isContextProvider;\nexports.isElement = isElement;\nexports.isForwardRef = isForwardRef;\nexports.isFragment = isFragment;\nexports.isLazy = isLazy;\nexports.isMemo = isMemo;\nexports.isPortal = isPortal;\nexports.isProfiler = isProfiler;\nexports.isStrictMode = isStrictMode;\nexports.isSuspense = isSuspense;\nexports.isValidElementType = isValidElementType;\nexports.typeOf = typeOf;\n  })();\n}\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n  module.exports = require('./cjs/react-is.production.min.js');\n} else {\n  module.exports = require('./cjs/react-is.development.js');\n}\n","'use strict';\n\nvar reactIs = require('react-is');\n\n/**\n * Copyright 2015, Yahoo! Inc.\n * Copyrights licensed under the New BSD License. See the accompanying LICENSE file for terms.\n */\nvar REACT_STATICS = {\n  childContextTypes: true,\n  contextType: true,\n  contextTypes: true,\n  defaultProps: true,\n  displayName: true,\n  getDefaultProps: true,\n  getDerivedStateFromError: true,\n  getDerivedStateFromProps: true,\n  mixins: true,\n  propTypes: true,\n  type: true\n};\nvar KNOWN_STATICS = {\n  name: true,\n  length: true,\n  prototype: true,\n  caller: true,\n  callee: true,\n  arguments: true,\n  arity: true\n};\nvar FORWARD_REF_STATICS = {\n  '$$typeof': true,\n  render: true,\n  defaultProps: true,\n  displayName: true,\n  propTypes: true\n};\nvar MEMO_STATICS = {\n  '$$typeof': true,\n  compare: true,\n  defaultProps: true,\n  displayName: true,\n  propTypes: true,\n  type: true\n};\nvar TYPE_STATICS = {};\nTYPE_STATICS[reactIs.ForwardRef] = FORWARD_REF_STATICS;\nTYPE_STATICS[reactIs.Memo] = MEMO_STATICS;\n\nfunction getStatics(component) {\n  // React v16.11 and below\n  if (reactIs.isMemo(component)) {\n    return MEMO_STATICS;\n  } // React v16.12 and above\n\n\n  return TYPE_STATICS[component['$$typeof']] || REACT_STATICS;\n}\n\nvar defineProperty = Object.defineProperty;\nvar getOwnPropertyNames = Object.getOwnPropertyNames;\nvar getOwnPropertySymbols = Object.getOwnPropertySymbols;\nvar getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\nvar getPrototypeOf = Object.getPrototypeOf;\nvar objectPrototype = Object.prototype;\nfunction hoistNonReactStatics(targetComponent, sourceComponent, blacklist) {\n  if (typeof sourceComponent !== 'string') {\n    // don't hoist over string (html) components\n    if (objectPrototype) {\n      var inheritedComponent = getPrototypeOf(sourceComponent);\n\n      if (inheritedComponent && inheritedComponent !== objectPrototype) {\n        hoistNonReactStatics(targetComponent, inheritedComponent, blacklist);\n      }\n    }\n\n    var keys = getOwnPropertyNames(sourceComponent);\n\n    if (getOwnPropertySymbols) {\n      keys = keys.concat(getOwnPropertySymbols(sourceComponent));\n    }\n\n    var targetStatics = getStatics(targetComponent);\n    var sourceStatics = getStatics(sourceComponent);\n\n    for (var i = 0; i < keys.length; ++i) {\n      var key = keys[i];\n\n      if (!KNOWN_STATICS[key] && !(blacklist && blacklist[key]) && !(sourceStatics && sourceStatics[key]) && !(targetStatics && targetStatics[key])) {\n        var descriptor = getOwnPropertyDescriptor(sourceComponent, key);\n\n        try {\n          // Avoid failures from read-only properties\n          defineProperty(targetComponent, key, descriptor);\n        } catch (e) {}\n      }\n    }\n  }\n\n  return targetComponent;\n}\n\nmodule.exports = hoistNonReactStatics;\n","var isBrowser = true;\n\nfunction getRegisteredStyles(registered, registeredStyles, classNames) {\n  var rawClassName = '';\n  classNames.split(' ').forEach(function (className) {\n    if (registered[className] !== undefined) {\n      registeredStyles.push(registered[className] + \";\");\n    } else if (className) {\n      rawClassName += className + \" \";\n    }\n  });\n  return rawClassName;\n}\nvar registerStyles = function registerStyles(cache, serialized, isStringTag) {\n  var className = cache.key + \"-\" + serialized.name;\n\n  if ( // we only need to add the styles to the registered cache if the\n  // class name could be used further down\n  // the tree but if it's a string tag, we know it won't\n  // so we don't have to add it to registered cache.\n  // this improves memory usage since we can avoid storing the whole style string\n  (isStringTag === false || // we need to always store it if we're in compat mode and\n  // in node since emotion-server relies on whether a style is in\n  // the registered cache to know whether a style is global or not\n  // also, note that this check will be dead code eliminated in the browser\n  isBrowser === false ) && cache.registered[className] === undefined) {\n    cache.registered[className] = serialized.styles;\n  }\n};\nvar insertStyles = function insertStyles(cache, serialized, isStringTag) {\n  registerStyles(cache, serialized, isStringTag);\n  var className = cache.key + \"-\" + serialized.name;\n\n  if (cache.inserted[serialized.name] === undefined) {\n    var current = serialized;\n\n    do {\n      cache.insert(serialized === current ? \".\" + className : '', current, cache.sheet, true);\n\n      current = current.next;\n    } while (current !== undefined);\n  }\n};\n\nexport { getRegisteredStyles, insertStyles, registerStyles };\n","/* eslint-disable */\n// Inspired by https://github.com/garycourt/murmurhash-js\n// Ported from https://github.com/aappleby/smhasher/blob/61a0530f28277f2e850bfc39600ce61d02b518de/src/MurmurHash2.cpp#L37-L86\nfunction murmur2(str) {\n  // 'm' and 'r' are mixing constants generated offline.\n  // They're not really 'magic', they just happen to work well.\n  // const m = 0x5bd1e995;\n  // const r = 24;\n  // Initialize the hash\n  var h = 0; // Mix 4 bytes at a time into the hash\n\n  var k,\n      i = 0,\n      len = str.length;\n\n  for (; len >= 4; ++i, len -= 4) {\n    k = str.charCodeAt(i) & 0xff | (str.charCodeAt(++i) & 0xff) << 8 | (str.charCodeAt(++i) & 0xff) << 16 | (str.charCodeAt(++i) & 0xff) << 24;\n    k =\n    /* Math.imul(k, m): */\n    (k & 0xffff) * 0x5bd1e995 + ((k >>> 16) * 0xe995 << 16);\n    k ^=\n    /* k >>> r: */\n    k >>> 24;\n    h =\n    /* Math.imul(k, m): */\n    (k & 0xffff) * 0x5bd1e995 + ((k >>> 16) * 0xe995 << 16) ^\n    /* Math.imul(h, m): */\n    (h & 0xffff) * 0x5bd1e995 + ((h >>> 16) * 0xe995 << 16);\n  } // Handle the last few bytes of the input array\n\n\n  switch (len) {\n    case 3:\n      h ^= (str.charCodeAt(i + 2) & 0xff) << 16;\n\n    case 2:\n      h ^= (str.charCodeAt(i + 1) & 0xff) << 8;\n\n    case 1:\n      h ^= str.charCodeAt(i) & 0xff;\n      h =\n      /* Math.imul(h, m): */\n      (h & 0xffff) * 0x5bd1e995 + ((h >>> 16) * 0xe995 << 16);\n  } // Do a few final mixes of the hash to ensure the last few\n  // bytes are well-incorporated.\n\n\n  h ^= h >>> 13;\n  h =\n  /* Math.imul(h, m): */\n  (h & 0xffff) * 0x5bd1e995 + ((h >>> 16) * 0xe995 << 16);\n  return ((h ^ h >>> 15) >>> 0).toString(36);\n}\n\nexport { murmur2 as default };\n","var unitlessKeys = {\n  animationIterationCount: 1,\n  aspectRatio: 1,\n  borderImageOutset: 1,\n  borderImageSlice: 1,\n  borderImageWidth: 1,\n  boxFlex: 1,\n  boxFlexGroup: 1,\n  boxOrdinalGroup: 1,\n  columnCount: 1,\n  columns: 1,\n  flex: 1,\n  flexGrow: 1,\n  flexPositive: 1,\n  flexShrink: 1,\n  flexNegative: 1,\n  flexOrder: 1,\n  gridRow: 1,\n  gridRowEnd: 1,\n  gridRowSpan: 1,\n  gridRowStart: 1,\n  gridColumn: 1,\n  gridColumnEnd: 1,\n  gridColumnSpan: 1,\n  gridColumnStart: 1,\n  msGridRow: 1,\n  msGridRowSpan: 1,\n  msGridColumn: 1,\n  msGridColumnSpan: 1,\n  fontWeight: 1,\n  lineHeight: 1,\n  opacity: 1,\n  order: 1,\n  orphans: 1,\n  scale: 1,\n  tabSize: 1,\n  widows: 1,\n  zIndex: 1,\n  zoom: 1,\n  WebkitLineClamp: 1,\n  // SVG-related properties\n  fillOpacity: 1,\n  floodOpacity: 1,\n  stopOpacity: 1,\n  strokeDasharray: 1,\n  strokeDashoffset: 1,\n  strokeMiterlimit: 1,\n  strokeOpacity: 1,\n  strokeWidth: 1\n};\n\nexport { unitlessKeys as default };\n","import hashString from '@emotion/hash';\nimport unitless from '@emotion/unitless';\nimport memoize from '@emotion/memoize';\n\nvar isDevelopment = false;\n\nvar hyphenateRegex = /[A-Z]|^ms/g;\nvar animationRegex = /_EMO_([^_]+?)_([^]*?)_EMO_/g;\n\nvar isCustomProperty = function isCustomProperty(property) {\n  return property.charCodeAt(1) === 45;\n};\n\nvar isProcessableValue = function isProcessableValue(value) {\n  return value != null && typeof value !== 'boolean';\n};\n\nvar processStyleName = /* #__PURE__ */memoize(function (styleName) {\n  return isCustomProperty(styleName) ? styleName : styleName.replace(hyphenateRegex, '-$&').toLowerCase();\n});\n\nvar processStyleValue = function processStyleValue(key, value) {\n  switch (key) {\n    case 'animation':\n    case 'animationName':\n      {\n        if (typeof value === 'string') {\n          return value.replace(animationRegex, function (match, p1, p2) {\n            cursor = {\n              name: p1,\n              styles: p2,\n              next: cursor\n            };\n            return p1;\n          });\n        }\n      }\n  }\n\n  if (unitless[key] !== 1 && !isCustomProperty(key) && typeof value === 'number' && value !== 0) {\n    return value + 'px';\n  }\n\n  return value;\n};\n\nvar noComponentSelectorMessage = 'Component selectors can only be used in conjunction with ' + '@emotion/babel-plugin, the swc Emotion plugin, or another Emotion-aware ' + 'compiler transform.';\n\nfunction handleInterpolation(mergedProps, registered, interpolation) {\n  if (interpolation == null) {\n    return '';\n  }\n\n  var componentSelector = interpolation;\n\n  if (componentSelector.__emotion_styles !== undefined) {\n\n    return componentSelector;\n  }\n\n  switch (typeof interpolation) {\n    case 'boolean':\n      {\n        return '';\n      }\n\n    case 'object':\n      {\n        var keyframes = interpolation;\n\n        if (keyframes.anim === 1) {\n          cursor = {\n            name: keyframes.name,\n            styles: keyframes.styles,\n            next: cursor\n          };\n          return keyframes.name;\n        }\n\n        var serializedStyles = interpolation;\n\n        if (serializedStyles.styles !== undefined) {\n          var next = serializedStyles.next;\n\n          if (next !== undefined) {\n            // not the most efficient thing ever but this is a pretty rare case\n            // and there will be very few iterations of this generally\n            while (next !== undefined) {\n              cursor = {\n                name: next.name,\n                styles: next.styles,\n                next: cursor\n              };\n              next = next.next;\n            }\n          }\n\n          var styles = serializedStyles.styles + \";\";\n          return styles;\n        }\n\n        return createStringFromObject(mergedProps, registered, interpolation);\n      }\n\n    case 'function':\n      {\n        if (mergedProps !== undefined) {\n          var previousCursor = cursor;\n          var result = interpolation(mergedProps);\n          cursor = previousCursor;\n          return handleInterpolation(mergedProps, registered, result);\n        }\n\n        break;\n      }\n  } // finalize string values (regular strings and functions interpolated into css calls)\n\n\n  var asString = interpolation;\n\n  if (registered == null) {\n    return asString;\n  }\n\n  var cached = registered[asString];\n  return cached !== undefined ? cached : asString;\n}\n\nfunction createStringFromObject(mergedProps, registered, obj) {\n  var string = '';\n\n  if (Array.isArray(obj)) {\n    for (var i = 0; i < obj.length; i++) {\n      string += handleInterpolation(mergedProps, registered, obj[i]) + \";\";\n    }\n  } else {\n    for (var key in obj) {\n      var value = obj[key];\n\n      if (typeof value !== 'object') {\n        var asString = value;\n\n        if (registered != null && registered[asString] !== undefined) {\n          string += key + \"{\" + registered[asString] + \"}\";\n        } else if (isProcessableValue(asString)) {\n          string += processStyleName(key) + \":\" + processStyleValue(key, asString) + \";\";\n        }\n      } else {\n        if (key === 'NO_COMPONENT_SELECTOR' && isDevelopment) {\n          throw new Error(noComponentSelectorMessage);\n        }\n\n        if (Array.isArray(value) && typeof value[0] === 'string' && (registered == null || registered[value[0]] === undefined)) {\n          for (var _i = 0; _i < value.length; _i++) {\n            if (isProcessableValue(value[_i])) {\n              string += processStyleName(key) + \":\" + processStyleValue(key, value[_i]) + \";\";\n            }\n          }\n        } else {\n          var interpolated = handleInterpolation(mergedProps, registered, value);\n\n          switch (key) {\n            case 'animation':\n            case 'animationName':\n              {\n                string += processStyleName(key) + \":\" + interpolated + \";\";\n                break;\n              }\n\n            default:\n              {\n\n                string += key + \"{\" + interpolated + \"}\";\n              }\n          }\n        }\n      }\n    }\n  }\n\n  return string;\n}\n\nvar labelPattern = /label:\\s*([^\\s;{]+)\\s*(;|$)/g; // this is the cursor for keyframes\n// keyframes are stored on the SerializedStyles object as a linked list\n\nvar cursor;\nfunction serializeStyles(args, registered, mergedProps) {\n  if (args.length === 1 && typeof args[0] === 'object' && args[0] !== null && args[0].styles !== undefined) {\n    return args[0];\n  }\n\n  var stringMode = true;\n  var styles = '';\n  cursor = undefined;\n  var strings = args[0];\n\n  if (strings == null || strings.raw === undefined) {\n    stringMode = false;\n    styles += handleInterpolation(mergedProps, registered, strings);\n  } else {\n    var asTemplateStringsArr = strings;\n\n    styles += asTemplateStringsArr[0];\n  } // we start at 1 since we've already handled the first arg\n\n\n  for (var i = 1; i < args.length; i++) {\n    styles += handleInterpolation(mergedProps, registered, args[i]);\n\n    if (stringMode) {\n      var templateStringsArr = strings;\n\n      styles += templateStringsArr[i];\n    }\n  } // using a global regex with .exec is stateful so lastIndex has to be reset each time\n\n\n  labelPattern.lastIndex = 0;\n  var identifierName = '';\n  var match; // https://esbench.com/bench/5b809c2cf2949800a0f61fb5\n\n  while ((match = labelPattern.exec(styles)) !== null) {\n    identifierName += '-' + match[1];\n  }\n\n  var name = hashString(styles) + identifierName;\n\n  return {\n    name: name,\n    styles: styles,\n    next: cursor\n  };\n}\n\nexport { serializeStyles };\n","import * as React from 'react';\n\nvar syncFallback = function syncFallback(create) {\n  return create();\n};\n\nvar useInsertionEffect = React['useInsertion' + 'Effect'] ? React['useInsertion' + 'Effect'] : false;\nvar useInsertionEffectAlwaysWithSyncFallback = useInsertionEffect || syncFallback;\nvar useInsertionEffectWithLayoutFallback = useInsertionEffect || React.useLayoutEffect;\n\nexport { useInsertionEffectAlwaysWithSyncFallback, useInsertionEffectWithLayoutFallback };\n","import * as React from 'react';\nimport { useContext, forwardRef } from 'react';\nimport createCache from '@emotion/cache';\nimport _extends from '@babel/runtime/helpers/esm/extends';\nimport weakMemoize from '@emotion/weak-memoize';\nimport hoistNonReactStatics from '../_isolated-hnrs/dist/emotion-react-_isolated-hnrs.browser.esm.js';\nimport { getRegisteredStyles, registerStyles, insertStyles } from '@emotion/utils';\nimport { serializeStyles } from '@emotion/serialize';\nimport { useInsertionEffectAlwaysWithSyncFallback } from '@emotion/use-insertion-effect-with-fallbacks';\n\nvar isDevelopment = false;\n\nvar EmotionCacheContext = /* #__PURE__ */React.createContext( // we're doing this to avoid preconstruct's dead code elimination in this one case\n// because this module is primarily intended for the browser and node\n// but it's also required in react native and similar environments sometimes\n// and we could have a special build just for that\n// but this is much easier and the native packages\n// might use a different theme context in the future anyway\ntypeof HTMLElement !== 'undefined' ? /* #__PURE__ */createCache({\n  key: 'css'\n}) : null);\n\nvar CacheProvider = EmotionCacheContext.Provider;\nvar __unsafe_useEmotionCache = function useEmotionCache() {\n  return useContext(EmotionCacheContext);\n};\n\nvar withEmotionCache = function withEmotionCache(func) {\n  return /*#__PURE__*/forwardRef(function (props, ref) {\n    // the cache will never be null in the browser\n    var cache = useContext(EmotionCacheContext);\n    return func(props, cache, ref);\n  });\n};\n\nvar ThemeContext = /* #__PURE__ */React.createContext({});\n\nvar useTheme = function useTheme() {\n  return React.useContext(ThemeContext);\n};\n\nvar getTheme = function getTheme(outerTheme, theme) {\n  if (typeof theme === 'function') {\n    var mergedTheme = theme(outerTheme);\n\n    return mergedTheme;\n  }\n\n  return _extends({}, outerTheme, theme);\n};\n\nvar createCacheWithTheme = /* #__PURE__ */weakMemoize(function (outerTheme) {\n  return weakMemoize(function (theme) {\n    return getTheme(outerTheme, theme);\n  });\n});\nvar ThemeProvider = function ThemeProvider(props) {\n  var theme = React.useContext(ThemeContext);\n\n  if (props.theme !== theme) {\n    theme = createCacheWithTheme(theme)(props.theme);\n  }\n\n  return /*#__PURE__*/React.createElement(ThemeContext.Provider, {\n    value: theme\n  }, props.children);\n};\nfunction withTheme(Component) {\n  var componentName = Component.displayName || Component.name || 'Component';\n  var WithTheme = /*#__PURE__*/React.forwardRef(function render(props, ref) {\n    var theme = React.useContext(ThemeContext);\n    return /*#__PURE__*/React.createElement(Component, _extends({\n      theme: theme,\n      ref: ref\n    }, props));\n  });\n  WithTheme.displayName = \"WithTheme(\" + componentName + \")\";\n  return hoistNonReactStatics(WithTheme, Component);\n}\n\nvar hasOwn = {}.hasOwnProperty;\n\nvar typePropName = '__EMOTION_TYPE_PLEASE_DO_NOT_USE__';\nvar createEmotionProps = function createEmotionProps(type, props) {\n\n  var newProps = {};\n\n  for (var _key in props) {\n    if (hasOwn.call(props, _key)) {\n      newProps[_key] = props[_key];\n    }\n  }\n\n  newProps[typePropName] = type; // Runtime labeling is an opt-in feature because:\n\n  return newProps;\n};\n\nvar Insertion = function Insertion(_ref) {\n  var cache = _ref.cache,\n      serialized = _ref.serialized,\n      isStringTag = _ref.isStringTag;\n  registerStyles(cache, serialized, isStringTag);\n  useInsertionEffectAlwaysWithSyncFallback(function () {\n    return insertStyles(cache, serialized, isStringTag);\n  });\n\n  return null;\n};\n\nvar Emotion = /* #__PURE__ */withEmotionCache(function (props, cache, ref) {\n  var cssProp = props.css; // so that using `css` from `emotion` and passing the result to the css prop works\n  // not passing the registered cache to serializeStyles because it would\n  // make certain babel optimisations not possible\n\n  if (typeof cssProp === 'string' && cache.registered[cssProp] !== undefined) {\n    cssProp = cache.registered[cssProp];\n  }\n\n  var WrappedComponent = props[typePropName];\n  var registeredStyles = [cssProp];\n  var className = '';\n\n  if (typeof props.className === 'string') {\n    className = getRegisteredStyles(cache.registered, registeredStyles, props.className);\n  } else if (props.className != null) {\n    className = props.className + \" \";\n  }\n\n  var serialized = serializeStyles(registeredStyles, undefined, React.useContext(ThemeContext));\n\n  className += cache.key + \"-\" + serialized.name;\n  var newProps = {};\n\n  for (var _key2 in props) {\n    if (hasOwn.call(props, _key2) && _key2 !== 'css' && _key2 !== typePropName && (!isDevelopment )) {\n      newProps[_key2] = props[_key2];\n    }\n  }\n\n  newProps.className = className;\n\n  if (ref) {\n    newProps.ref = ref;\n  }\n\n  return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(Insertion, {\n    cache: cache,\n    serialized: serialized,\n    isStringTag: typeof WrappedComponent === 'string'\n  }), /*#__PURE__*/React.createElement(WrappedComponent, newProps));\n});\n\nvar Emotion$1 = Emotion;\n\nexport { CacheProvider as C, Emotion$1 as E, ThemeContext as T, __unsafe_useEmotionCache as _, ThemeProvider as a, withTheme as b, createEmotionProps as c, hasOwn as h, isDevelopment as i, useTheme as u, withEmotionCache as w };\n","import { h as hasOwn, E as Emotion, c as createEmotionProps, w as withEmotionCache, T as ThemeContext, i as isDevelopment } from './emotion-element-f0de968e.browser.esm.js';\nexport { C as CacheProvider, T as ThemeContext, a as ThemeProvider, _ as __unsafe_useEmotionCache, u as useTheme, w as withEmotionCache, b as withTheme } from './emotion-element-f0de968e.browser.esm.js';\nimport * as React from 'react';\nimport { insertStyles, registerStyles, getRegisteredStyles } from '@emotion/utils';\nimport { useInsertionEffectWithLayoutFallback, useInsertionEffectAlwaysWithSyncFallback } from '@emotion/use-insertion-effect-with-fallbacks';\nimport { serializeStyles } from '@emotion/serialize';\nimport '@emotion/cache';\nimport '@babel/runtime/helpers/extends';\nimport '@emotion/weak-memoize';\nimport '../_isolated-hnrs/dist/emotion-react-_isolated-hnrs.browser.esm.js';\nimport 'hoist-non-react-statics';\n\nvar jsx = function jsx(type, props) {\n  // eslint-disable-next-line prefer-rest-params\n  var args = arguments;\n\n  if (props == null || !hasOwn.call(props, 'css')) {\n    return React.createElement.apply(undefined, args);\n  }\n\n  var argsLength = args.length;\n  var createElementArgArray = new Array(argsLength);\n  createElementArgArray[0] = Emotion;\n  createElementArgArray[1] = createEmotionProps(type, props);\n\n  for (var i = 2; i < argsLength; i++) {\n    createElementArgArray[i] = args[i];\n  }\n\n  return React.createElement.apply(null, createElementArgArray);\n};\n\n(function (_jsx) {\n  var JSX;\n\n  (function (_JSX) {})(JSX || (JSX = _jsx.JSX || (_jsx.JSX = {})));\n})(jsx || (jsx = {}));\n\n// initial render from browser, insertBefore context.sheet.tags[0] or if a style hasn't been inserted there yet, appendChild\n// initial client-side render from SSR, use place of hydrating tag\n\nvar Global = /* #__PURE__ */withEmotionCache(function (props, cache) {\n\n  var styles = props.styles;\n  var serialized = serializeStyles([styles], undefined, React.useContext(ThemeContext));\n  // but it is based on a constant that will never change at runtime\n  // it's effectively like having two implementations and switching them out\n  // so it's not actually breaking anything\n\n\n  var sheetRef = React.useRef();\n  useInsertionEffectWithLayoutFallback(function () {\n    var key = cache.key + \"-global\"; // use case of https://github.com/emotion-js/emotion/issues/2675\n\n    var sheet = new cache.sheet.constructor({\n      key: key,\n      nonce: cache.sheet.nonce,\n      container: cache.sheet.container,\n      speedy: cache.sheet.isSpeedy\n    });\n    var rehydrating = false;\n    var node = document.querySelector(\"style[data-emotion=\\\"\" + key + \" \" + serialized.name + \"\\\"]\");\n\n    if (cache.sheet.tags.length) {\n      sheet.before = cache.sheet.tags[0];\n    }\n\n    if (node !== null) {\n      rehydrating = true; // clear the hash so this node won't be recognizable as rehydratable by other <Global/>s\n\n      node.setAttribute('data-emotion', key);\n      sheet.hydrate([node]);\n    }\n\n    sheetRef.current = [sheet, rehydrating];\n    return function () {\n      sheet.flush();\n    };\n  }, [cache]);\n  useInsertionEffectWithLayoutFallback(function () {\n    var sheetRefCurrent = sheetRef.current;\n    var sheet = sheetRefCurrent[0],\n        rehydrating = sheetRefCurrent[1];\n\n    if (rehydrating) {\n      sheetRefCurrent[1] = false;\n      return;\n    }\n\n    if (serialized.next !== undefined) {\n      // insert keyframes\n      insertStyles(cache, serialized.next, true);\n    }\n\n    if (sheet.tags.length) {\n      // if this doesn't exist then it will be null so the style element will be appended\n      var element = sheet.tags[sheet.tags.length - 1].nextElementSibling;\n      sheet.before = element;\n      sheet.flush();\n    }\n\n    cache.insert(\"\", serialized, sheet, false);\n  }, [cache, serialized.name]);\n  return null;\n});\n\nfunction css() {\n  for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n    args[_key] = arguments[_key];\n  }\n\n  return serializeStyles(args);\n}\n\nfunction keyframes() {\n  var insertable = css.apply(void 0, arguments);\n  var name = \"animation-\" + insertable.name;\n  return {\n    name: name,\n    styles: \"@keyframes \" + name + \"{\" + insertable.styles + \"}\",\n    anim: 1,\n    toString: function toString() {\n      return \"_EMO_\" + this.name + \"_\" + this.styles + \"_EMO_\";\n    }\n  };\n}\n\nvar classnames = function classnames(args) {\n  var len = args.length;\n  var i = 0;\n  var cls = '';\n\n  for (; i < len; i++) {\n    var arg = args[i];\n    if (arg == null) continue;\n    var toAdd = void 0;\n\n    switch (typeof arg) {\n      case 'boolean':\n        break;\n\n      case 'object':\n        {\n          if (Array.isArray(arg)) {\n            toAdd = classnames(arg);\n          } else {\n\n            toAdd = '';\n\n            for (var k in arg) {\n              if (arg[k] && k) {\n                toAdd && (toAdd += ' ');\n                toAdd += k;\n              }\n            }\n          }\n\n          break;\n        }\n\n      default:\n        {\n          toAdd = arg;\n        }\n    }\n\n    if (toAdd) {\n      cls && (cls += ' ');\n      cls += toAdd;\n    }\n  }\n\n  return cls;\n};\n\nfunction merge(registered, css, className) {\n  var registeredStyles = [];\n  var rawClassName = getRegisteredStyles(registered, registeredStyles, className);\n\n  if (registeredStyles.length < 2) {\n    return className;\n  }\n\n  return rawClassName + css(registeredStyles);\n}\n\nvar Insertion = function Insertion(_ref) {\n  var cache = _ref.cache,\n      serializedArr = _ref.serializedArr;\n  useInsertionEffectAlwaysWithSyncFallback(function () {\n\n    for (var i = 0; i < serializedArr.length; i++) {\n      insertStyles(cache, serializedArr[i], false);\n    }\n  });\n\n  return null;\n};\n\nvar ClassNames = /* #__PURE__ */withEmotionCache(function (props, cache) {\n  var hasRendered = false;\n  var serializedArr = [];\n\n  var css = function css() {\n    if (hasRendered && isDevelopment) {\n      throw new Error('css can only be used during render');\n    }\n\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    var serialized = serializeStyles(args, cache.registered);\n    serializedArr.push(serialized); // registration has to happen here as the result of this might get consumed by `cx`\n\n    registerStyles(cache, serialized, false);\n    return cache.key + \"-\" + serialized.name;\n  };\n\n  var cx = function cx() {\n    if (hasRendered && isDevelopment) {\n      throw new Error('cx can only be used during render');\n    }\n\n    for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n      args[_key2] = arguments[_key2];\n    }\n\n    return merge(cache.registered, css, classnames(args));\n  };\n\n  var content = {\n    css: css,\n    cx: cx,\n    theme: React.useContext(ThemeContext)\n  };\n  var ele = props.children(content);\n  hasRendered = true;\n  return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(Insertion, {\n    cache: cache,\n    serializedArr: serializedArr\n  }), ele);\n});\n\nexport { ClassNames, Global, jsx as createElement, css, jsx, keyframes };\n","import memoize from '@emotion/memoize';\n\n// eslint-disable-next-line no-undef\nvar reactPropsRegex = /^((children|dangerouslySetInnerHTML|key|ref|autoFocus|defaultValue|defaultChecked|innerHTML|suppressContentEditableWarning|suppressHydrationWarning|valueLink|abbr|accept|acceptCharset|accessKey|action|allow|allowUserMedia|allowPaymentRequest|allowFullScreen|allowTransparency|alt|async|autoComplete|autoPlay|capture|cellPadding|cellSpacing|challenge|charSet|checked|cite|classID|className|cols|colSpan|content|contentEditable|contextMenu|controls|controlsList|coords|crossOrigin|data|dateTime|decoding|default|defer|dir|disabled|disablePictureInPicture|disableRemotePlayback|download|draggable|encType|enterKeyHint|fetchpriority|fetchPriority|form|formAction|formEncType|formMethod|formNoValidate|formTarget|frameBorder|headers|height|hidden|high|href|hrefLang|htmlFor|httpEquiv|id|inputMode|integrity|is|keyParams|keyType|kind|label|lang|list|loading|loop|low|marginHeight|marginWidth|max|maxLength|media|mediaGroup|method|min|minLength|multiple|muted|name|nonce|noValidate|open|optimum|pattern|placeholder|playsInline|popover|popoverTarget|popoverTargetAction|poster|preload|profile|radioGroup|readOnly|referrerPolicy|rel|required|reversed|role|rows|rowSpan|sandbox|scope|scoped|scrolling|seamless|selected|shape|size|sizes|slot|span|spellCheck|src|srcDoc|srcLang|srcSet|start|step|style|summary|tabIndex|target|title|translate|type|useMap|value|width|wmode|wrap|about|datatype|inlist|prefix|property|resource|typeof|vocab|autoCapitalize|autoCorrect|autoSave|color|incremental|fallback|inert|itemProp|itemScope|itemType|itemID|itemRef|on|option|results|security|unselectable|accentHeight|accumulate|additive|alignmentBaseline|allowReorder|alphabetic|amplitude|arabicForm|ascent|attributeName|attributeType|autoReverse|azimuth|baseFrequency|baselineShift|baseProfile|bbox|begin|bias|by|calcMode|capHeight|clip|clipPathUnits|clipPath|clipRule|colorInterpolation|colorInterpolationFilters|colorProfile|colorRendering|contentScriptType|contentStyleType|cursor|cx|cy|d|decelerate|descent|diffuseConstant|direction|display|divisor|dominantBaseline|dur|dx|dy|edgeMode|elevation|enableBackground|end|exponent|externalResourcesRequired|fill|fillOpacity|fillRule|filter|filterRes|filterUnits|floodColor|floodOpacity|focusable|fontFamily|fontSize|fontSizeAdjust|fontStretch|fontStyle|fontVariant|fontWeight|format|from|fr|fx|fy|g1|g2|glyphName|glyphOrientationHorizontal|glyphOrientationVertical|glyphRef|gradientTransform|gradientUnits|hanging|horizAdvX|horizOriginX|ideographic|imageRendering|in|in2|intercept|k|k1|k2|k3|k4|kernelMatrix|kernelUnitLength|kerning|keyPoints|keySplines|keyTimes|lengthAdjust|letterSpacing|lightingColor|limitingConeAngle|local|markerEnd|markerMid|markerStart|markerHeight|markerUnits|markerWidth|mask|maskContentUnits|maskUnits|mathematical|mode|numOctaves|offset|opacity|operator|order|orient|orientation|origin|overflow|overlinePosition|overlineThickness|panose1|paintOrder|pathLength|patternContentUnits|patternTransform|patternUnits|pointerEvents|points|pointsAtX|pointsAtY|pointsAtZ|preserveAlpha|preserveAspectRatio|primitiveUnits|r|radius|refX|refY|renderingIntent|repeatCount|repeatDur|requiredExtensions|requiredFeatures|restart|result|rotate|rx|ry|scale|seed|shapeRendering|slope|spacing|specularConstant|specularExponent|speed|spreadMethod|startOffset|stdDeviation|stemh|stemv|stitchTiles|stopColor|stopOpacity|strikethroughPosition|strikethroughThickness|string|stroke|strokeDasharray|strokeDashoffset|strokeLinecap|strokeLinejoin|strokeMiterlimit|strokeOpacity|strokeWidth|surfaceScale|systemLanguage|tableValues|targetX|targetY|textAnchor|textDecoration|textRendering|textLength|to|transform|u1|u2|underlinePosition|underlineThickness|unicode|unicodeBidi|unicodeRange|unitsPerEm|vAlphabetic|vHanging|vIdeographic|vMathematical|values|vectorEffect|version|vertAdvY|vertOriginX|vertOriginY|viewBox|viewTarget|visibility|widths|wordSpacing|writingMode|x|xHeight|x1|x2|xChannelSelector|xlinkActuate|xlinkArcrole|xlinkHref|xlinkRole|xlinkShow|xlinkTitle|xlinkType|xmlBase|xmlns|xmlnsXlink|xmlLang|xmlSpace|y|y1|y2|yChannelSelector|z|zoomAndPan|for|class|autofocus)|(([Dd][Aa][Tt][Aa]|[Aa][Rr][Ii][Aa]|x)-.*))$/; // https://esbench.com/bench/5bfee68a4cd7e6009ef61d23\n\nvar isPropValid = /* #__PURE__ */memoize(function (prop) {\n  return reactPropsRegex.test(prop) || prop.charCodeAt(0) === 111\n  /* o */\n  && prop.charCodeAt(1) === 110\n  /* n */\n  && prop.charCodeAt(2) < 91;\n}\n/* Z+1 */\n);\n\nexport { isPropValid as default };\n","import _extends from '@babel/runtime/helpers/esm/extends';\nimport { withEmotionCache, ThemeContext } from '@emotion/react';\nimport { serializeStyles } from '@emotion/serialize';\nimport { useInsertionEffectAlwaysWithSyncFallback } from '@emotion/use-insertion-effect-with-fallbacks';\nimport { getRegisteredStyles, registerStyles, insertStyles } from '@emotion/utils';\nimport * as React from 'react';\nimport isPropValid from '@emotion/is-prop-valid';\n\nvar isDevelopment = false;\n\nvar testOmitPropsOnStringTag = isPropValid;\n\nvar testOmitPropsOnComponent = function testOmitPropsOnComponent(key) {\n  return key !== 'theme';\n};\n\nvar getDefaultShouldForwardProp = function getDefaultShouldForwardProp(tag) {\n  return typeof tag === 'string' && // 96 is one less than the char code\n  // for \"a\" so this is checking that\n  // it's a lowercase character\n  tag.charCodeAt(0) > 96 ? testOmitPropsOnStringTag : testOmitPropsOnComponent;\n};\nvar composeShouldForwardProps = function composeShouldForwardProps(tag, options, isReal) {\n  var shouldForwardProp;\n\n  if (options) {\n    var optionsShouldForwardProp = options.shouldForwardProp;\n    shouldForwardProp = tag.__emotion_forwardProp && optionsShouldForwardProp ? function (propName) {\n      return tag.__emotion_forwardProp(propName) && optionsShouldForwardProp(propName);\n    } : optionsShouldForwardProp;\n  }\n\n  if (typeof shouldForwardProp !== 'function' && isReal) {\n    shouldForwardProp = tag.__emotion_forwardProp;\n  }\n\n  return shouldForwardProp;\n};\n\nvar Insertion = function Insertion(_ref) {\n  var cache = _ref.cache,\n      serialized = _ref.serialized,\n      isStringTag = _ref.isStringTag;\n  registerStyles(cache, serialized, isStringTag);\n  useInsertionEffectAlwaysWithSyncFallback(function () {\n    return insertStyles(cache, serialized, isStringTag);\n  });\n\n  return null;\n};\n\nvar createStyled = function createStyled(tag, options) {\n\n  var isReal = tag.__emotion_real === tag;\n  var baseTag = isReal && tag.__emotion_base || tag;\n  var identifierName;\n  var targetClassName;\n\n  if (options !== undefined) {\n    identifierName = options.label;\n    targetClassName = options.target;\n  }\n\n  var shouldForwardProp = composeShouldForwardProps(tag, options, isReal);\n  var defaultShouldForwardProp = shouldForwardProp || getDefaultShouldForwardProp(baseTag);\n  var shouldUseAs = !defaultShouldForwardProp('as');\n  return function () {\n    // eslint-disable-next-line prefer-rest-params\n    var args = arguments;\n    var styles = isReal && tag.__emotion_styles !== undefined ? tag.__emotion_styles.slice(0) : [];\n\n    if (identifierName !== undefined) {\n      styles.push(\"label:\" + identifierName + \";\");\n    }\n\n    if (args[0] == null || args[0].raw === undefined) {\n      // eslint-disable-next-line prefer-spread\n      styles.push.apply(styles, args);\n    } else {\n      var templateStringsArr = args[0];\n\n      styles.push(templateStringsArr[0]);\n      var len = args.length;\n      var i = 1;\n\n      for (; i < len; i++) {\n\n        styles.push(args[i], templateStringsArr[i]);\n      }\n    }\n\n    var Styled = withEmotionCache(function (props, cache, ref) {\n      var FinalTag = shouldUseAs && props.as || baseTag;\n      var className = '';\n      var classInterpolations = [];\n      var mergedProps = props;\n\n      if (props.theme == null) {\n        mergedProps = {};\n\n        for (var key in props) {\n          mergedProps[key] = props[key];\n        }\n\n        mergedProps.theme = React.useContext(ThemeContext);\n      }\n\n      if (typeof props.className === 'string') {\n        className = getRegisteredStyles(cache.registered, classInterpolations, props.className);\n      } else if (props.className != null) {\n        className = props.className + \" \";\n      }\n\n      var serialized = serializeStyles(styles.concat(classInterpolations), cache.registered, mergedProps);\n      className += cache.key + \"-\" + serialized.name;\n\n      if (targetClassName !== undefined) {\n        className += \" \" + targetClassName;\n      }\n\n      var finalShouldForwardProp = shouldUseAs && shouldForwardProp === undefined ? getDefaultShouldForwardProp(FinalTag) : defaultShouldForwardProp;\n      var newProps = {};\n\n      for (var _key in props) {\n        if (shouldUseAs && _key === 'as') continue;\n\n        if (finalShouldForwardProp(_key)) {\n          newProps[_key] = props[_key];\n        }\n      }\n\n      newProps.className = className;\n\n      if (ref) {\n        newProps.ref = ref;\n      }\n\n      return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(Insertion, {\n        cache: cache,\n        serialized: serialized,\n        isStringTag: typeof FinalTag === 'string'\n      }), /*#__PURE__*/React.createElement(FinalTag, newProps));\n    });\n    Styled.displayName = identifierName !== undefined ? identifierName : \"Styled(\" + (typeof baseTag === 'string' ? baseTag : baseTag.displayName || baseTag.name || 'Component') + \")\";\n    Styled.defaultProps = tag.defaultProps;\n    Styled.__emotion_real = Styled;\n    Styled.__emotion_base = baseTag;\n    Styled.__emotion_styles = styles;\n    Styled.__emotion_forwardProp = shouldForwardProp;\n    Object.defineProperty(Styled, 'toString', {\n      value: function value() {\n        if (targetClassName === undefined && isDevelopment) {\n          return 'NO_COMPONENT_SELECTOR';\n        }\n\n        return \".\" + targetClassName;\n      }\n    });\n\n    Styled.withComponent = function (nextTag, nextOptions) {\n      var newStyled = createStyled(nextTag, _extends({}, options, nextOptions, {\n        shouldForwardProp: composeShouldForwardProps(Styled, nextOptions, true)\n      }));\n      return newStyled.apply(void 0, styles);\n    };\n\n    return Styled;\n  };\n};\n\nexport { createStyled as default };\n","import createStyled from '../base/dist/emotion-styled-base.browser.esm.js';\nimport '@babel/runtime/helpers/extends';\nimport '@emotion/react';\nimport '@emotion/serialize';\nimport '@emotion/use-insertion-effect-with-fallbacks';\nimport '@emotion/utils';\nimport 'react';\nimport '@emotion/is-prop-valid';\n\nvar tags = ['a', 'abbr', 'address', 'area', 'article', 'aside', 'audio', 'b', 'base', 'bdi', 'bdo', 'big', 'blockquote', 'body', 'br', 'button', 'canvas', 'caption', 'cite', 'code', 'col', 'colgroup', 'data', 'datalist', 'dd', 'del', 'details', 'dfn', 'dialog', 'div', 'dl', 'dt', 'em', 'embed', 'fieldset', 'figcaption', 'figure', 'footer', 'form', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'head', 'header', 'hgroup', 'hr', 'html', 'i', 'iframe', 'img', 'input', 'ins', 'kbd', 'keygen', 'label', 'legend', 'li', 'link', 'main', 'map', 'mark', 'marquee', 'menu', 'menuitem', 'meta', 'meter', 'nav', 'noscript', 'object', 'ol', 'optgroup', 'option', 'output', 'p', 'param', 'picture', 'pre', 'progress', 'q', 'rp', 'rt', 'ruby', 's', 'samp', 'script', 'section', 'select', 'small', 'source', 'span', 'strong', 'style', 'sub', 'summary', 'sup', 'table', 'tbody', 'td', 'textarea', 'tfoot', 'th', 'thead', 'time', 'title', 'tr', 'track', 'u', 'ul', 'var', 'video', 'wbr', // SVG\n'circle', 'clipPath', 'defs', 'ellipse', 'foreignObject', 'g', 'image', 'line', 'linearGradient', 'mask', 'path', 'pattern', 'polygon', 'polyline', 'radialGradient', 'rect', 'stop', 'svg', 'text', 'tspan'];\n\n// bind it to avoid mutating the original function\nvar styled = createStyled.bind(null);\ntags.forEach(function (tagName) {\n  styled[tagName] = styled(tagName);\n});\n\nexport { styled as default };\n","'use client';\n\nimport PropTypes from 'prop-types';\nimport { Global } from '@emotion/react';\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nfunction isEmpty(obj) {\n  return obj === undefined || obj === null || Object.keys(obj).length === 0;\n}\nexport default function GlobalStyles(props) {\n  const {\n    styles,\n    defaultTheme = {}\n  } = props;\n  const globalStyles = typeof styles === 'function' ? themeInput => styles(isEmpty(themeInput) ? defaultTheme : themeInput) : styles;\n  return /*#__PURE__*/_jsx(Global, {\n    styles: globalStyles\n  });\n}\nprocess.env.NODE_ENV !== \"production\" ? GlobalStyles.propTypes = {\n  defaultTheme: PropTypes.object,\n  styles: PropTypes.oneOfType([PropTypes.array, PropTypes.string, PropTypes.object, PropTypes.func])\n} : void 0;","/**\n * @mui/styled-engine v7.3.10\n *\n * @license MIT\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n'use client';\n\n/* eslint-disable no-underscore-dangle */\nimport emStyled from '@emotion/styled';\nimport { serializeStyles as emSerializeStyles } from '@emotion/serialize';\nexport default function styled(tag, options) {\n  const stylesFactory = emStyled(tag, options);\n  if (process.env.NODE_ENV !== 'production') {\n    return (...styles) => {\n      const component = typeof tag === 'string' ? `\"${tag}\"` : 'component';\n      if (styles.length === 0) {\n        console.error([`MUI: Seems like you called \\`styled(${component})()\\` without a \\`style\\` argument.`, 'You must provide a `styles` argument: `styled(\"div\")(styleYouForgotToPass)`.'].join('\\n'));\n      } else if (styles.some(style => style === undefined)) {\n        console.error(`MUI: the styled(${component})(...args) API requires all its args to be defined.`);\n      }\n      return stylesFactory(...styles);\n    };\n  }\n  return stylesFactory;\n}\n\n// eslint-disable-next-line @typescript-eslint/naming-convention\nexport function internal_mutateStyles(tag, processor) {\n  // Emotion attaches all the styles as `__emotion_styles`.\n  // Ref: https://github.com/emotion-js/emotion/blob/16d971d0da229596d6bcc39d282ba9753c9ee7cf/packages/styled/src/base.js#L186\n  if (Array.isArray(tag.__emotion_styles)) {\n    tag.__emotion_styles = processor(tag.__emotion_styles);\n  }\n}\n\n// Emotion only accepts an array, but we want to avoid allocations\nconst wrapper = [];\n// eslint-disable-next-line @typescript-eslint/naming-convention\nexport function internal_serializeStyles(styles) {\n  wrapper[0] = styles;\n  return emSerializeStyles(wrapper);\n}\nexport { ThemeContext, keyframes, css } from '@emotion/react';\nexport { default as StyledEngineProvider } from \"./StyledEngineProvider/index.js\";\nexport { default as GlobalStyles } from \"./GlobalStyles/index.js\";","// Sorted ASC by size. That's important.\n// It can't be configured as it's used statically for propTypes.\nexport const breakpointKeys = ['xs', 'sm', 'md', 'lg', 'xl'];\nconst sortBreakpointsValues = values => {\n  const breakpointsAsArray = Object.keys(values).map(key => ({\n    key,\n    val: values[key]\n  })) || [];\n  // Sort in ascending order\n  breakpointsAsArray.sort((breakpoint1, breakpoint2) => breakpoint1.val - breakpoint2.val);\n  return breakpointsAsArray.reduce((acc, obj) => {\n    return {\n      ...acc,\n      [obj.key]: obj.val\n    };\n  }, {});\n};\n\n// Keep in mind that @media is inclusive by the CSS specification.\nexport default function createBreakpoints(breakpoints) {\n  const {\n    // The breakpoint **start** at this value.\n    // For instance with the first breakpoint xs: [xs, sm).\n    values = {\n      xs: 0,\n      // phone\n      sm: 600,\n      // tablet\n      md: 900,\n      // small laptop\n      lg: 1200,\n      // desktop\n      xl: 1536 // large screen\n    },\n    unit = 'px',\n    step = 5,\n    ...other\n  } = breakpoints;\n  const sortedValues = sortBreakpointsValues(values);\n  const keys = Object.keys(sortedValues);\n  function up(key) {\n    const value = typeof values[key] === 'number' ? values[key] : key;\n    return `@media (min-width:${value}${unit})`;\n  }\n  function down(key) {\n    const value = typeof values[key] === 'number' ? values[key] : key;\n    return `@media (max-width:${value - step / 100}${unit})`;\n  }\n  function between(start, end) {\n    const endIndex = keys.indexOf(end);\n    return `@media (min-width:${typeof values[start] === 'number' ? values[start] : start}${unit}) and ` + `(max-width:${(endIndex !== -1 && typeof values[keys[endIndex]] === 'number' ? values[keys[endIndex]] : end) - step / 100}${unit})`;\n  }\n  function only(key) {\n    if (keys.indexOf(key) + 1 < keys.length) {\n      return between(key, keys[keys.indexOf(key) + 1]);\n    }\n    return up(key);\n  }\n  function not(key) {\n    // handle first and last key separately, for better readability\n    const keyIndex = keys.indexOf(key);\n    if (keyIndex === 0) {\n      return up(keys[1]);\n    }\n    if (keyIndex === keys.length - 1) {\n      return down(keys[keyIndex]);\n    }\n    return between(key, keys[keys.indexOf(key) + 1]).replace('@media', '@media not all and');\n  }\n  return {\n    keys,\n    values: sortedValues,\n    up,\n    down,\n    between,\n    only,\n    not,\n    unit,\n    ...other\n  };\n}","const shape = {\n  borderRadius: 4\n};\nexport default shape;","import { createUnarySpacing } from \"../spacing/index.js\";\n\n// The different signatures imply different meaning for their arguments that can't be expressed structurally.\n// We express the difference with variable names.\n\nexport default function createSpacing(spacingInput = 8,\n// Material Design layouts are visually balanced. Most measurements align to an 8dp grid, which aligns both spacing and the overall layout.\n// Smaller components, such as icons, can align to a 4dp grid.\n// https://m2.material.io/design/layout/understanding-layout.html\ntransform = createUnarySpacing({\n  spacing: spacingInput\n})) {\n  // Already transformed.\n  if (spacingInput.mui) {\n    return spacingInput;\n  }\n  const spacing = (...argsInput) => {\n    if (process.env.NODE_ENV !== 'production') {\n      if (!(argsInput.length <= 4)) {\n        console.error(`MUI: Too many arguments provided, expected between 0 and 4, got ${argsInput.length}`);\n      }\n    }\n    const args = argsInput.length === 0 ? [1] : argsInput;\n    return args.map(argument => {\n      const output = transform(argument);\n      return typeof output === 'number' ? `${output}px` : output;\n    }).join(' ');\n  };\n  spacing.mui = true;\n  return spacing;\n}","/**\n * A universal utility to style components with multiple color modes. Always use it from the theme object.\n * It works with:\n *  - [Basic theme](https://mui.com/material-ui/customization/dark-mode/)\n *  - [CSS theme variables](https://mui.com/material-ui/customization/css-theme-variables/overview/)\n *  - Zero-runtime engine\n *\n * Tips: Use an array over object spread and place `theme.applyStyles()` last.\n *\n * With the styled function:\n * ✅ [{ background: '#e5e5e5' }, theme.applyStyles('dark', { background: '#1c1c1c' })]\n * 🚫 { background: '#e5e5e5', ...theme.applyStyles('dark', { background: '#1c1c1c' })}\n *\n * With the sx prop:\n * ✅ [{ background: '#e5e5e5' }, theme => theme.applyStyles('dark', { background: '#1c1c1c' })]\n * 🚫 { background: '#e5e5e5', ...theme => theme.applyStyles('dark', { background: '#1c1c1c' })}\n *\n * @example\n * 1. using with `styled`:\n * ```jsx\n *   const Component = styled('div')(({ theme }) => [\n *     { background: '#e5e5e5' },\n *     theme.applyStyles('dark', {\n *       background: '#1c1c1c',\n *       color: '#fff',\n *     }),\n *   ]);\n * ```\n *\n * @example\n * 2. using with `sx` prop:\n * ```jsx\n *   <Box sx={[\n *     { background: '#e5e5e5' },\n *     theme => theme.applyStyles('dark', {\n *        background: '#1c1c1c',\n *        color: '#fff',\n *      }),\n *     ]}\n *   />\n * ```\n *\n * @example\n * 3. theming a component:\n * ```jsx\n *   extendTheme({\n *     components: {\n *       MuiButton: {\n *         styleOverrides: {\n *           root: ({ theme }) => [\n *             { background: '#e5e5e5' },\n *             theme.applyStyles('dark', {\n *               background: '#1c1c1c',\n *               color: '#fff',\n *             }),\n *           ],\n *         },\n *       }\n *     }\n *   })\n *```\n */\nexport default function applyStyles(key, styles) {\n  // @ts-expect-error this is 'any' type\n  const theme = this;\n  if (theme.vars) {\n    if (!theme.colorSchemes?.[key] || typeof theme.getColorSchemeSelector !== 'function') {\n      return {};\n    }\n    // If CssVarsProvider is used as a provider, returns '*:where({selector}) &'\n    let selector = theme.getColorSchemeSelector(key);\n    if (selector === '&') {\n      return styles;\n    }\n    if (selector.includes('data-') || selector.includes('.')) {\n      // '*' is required as a workaround for Emotion issue (https://github.com/emotion-js/emotion/issues/2836)\n      selector = `*:where(${selector.replace(/\\s*&$/, '')}) &`;\n    }\n    return {\n      [selector]: styles\n    };\n  }\n  if (theme.palette.mode === key) {\n    return styles;\n  }\n  return {};\n}","import deepmerge from '@mui/utils/deepmerge';\nimport createBreakpoints from \"../createBreakpoints/createBreakpoints.js\";\nimport cssContainerQueries from \"../cssContainerQueries/index.js\";\nimport shape from \"./shape.js\";\nimport createSpacing from \"./createSpacing.js\";\nimport styleFunctionSx from \"../styleFunctionSx/styleFunctionSx.js\";\nimport defaultSxConfig from \"../styleFunctionSx/defaultSxConfig.js\";\nimport applyStyles from \"./applyStyles.js\";\nfunction createTheme(options = {}, ...args) {\n  const {\n    breakpoints: breakpointsInput = {},\n    palette: paletteInput = {},\n    spacing: spacingInput,\n    shape: shapeInput = {},\n    ...other\n  } = options;\n  const breakpoints = createBreakpoints(breakpointsInput);\n  const spacing = createSpacing(spacingInput);\n  let muiTheme = deepmerge({\n    breakpoints,\n    direction: 'ltr',\n    components: {},\n    // Inject component definitions.\n    palette: {\n      mode: 'light',\n      ...paletteInput\n    },\n    spacing,\n    shape: {\n      ...shape,\n      ...shapeInput\n    }\n  }, other);\n  muiTheme = cssContainerQueries(muiTheme);\n  muiTheme.applyStyles = applyStyles;\n  muiTheme = args.reduce((acc, argument) => deepmerge(acc, argument), muiTheme);\n  muiTheme.unstable_sxConfig = {\n    ...defaultSxConfig,\n    ...other?.unstable_sxConfig\n  };\n  muiTheme.unstable_sx = function sx(props) {\n    return styleFunctionSx({\n      sx: props,\n      theme: this\n    });\n  };\n  return muiTheme;\n}\nexport default createTheme;","'use client';\n\nimport * as React from 'react';\nimport { ThemeContext } from '@mui/styled-engine';\nfunction isObjectEmpty(obj) {\n  return Object.keys(obj).length === 0;\n}\nfunction useTheme(defaultTheme = null) {\n  const contextTheme = React.useContext(ThemeContext);\n  return !contextTheme || isObjectEmpty(contextTheme) ? defaultTheme : contextTheme;\n}\nexport default useTheme;","'use client';\n\nimport createTheme from \"../createTheme/index.js\";\nimport useThemeWithoutDefault from \"../useThemeWithoutDefault/index.js\";\nexport const systemDefaultTheme = createTheme();\nfunction useTheme(defaultTheme = systemDefaultTheme) {\n  return useThemeWithoutDefault(defaultTheme);\n}\nexport default useTheme;","'use client';\n\nimport PropTypes from 'prop-types';\nimport { GlobalStyles as MuiGlobalStyles, internal_serializeStyles as serializeStyles } from '@mui/styled-engine';\nimport useTheme from \"../useTheme/index.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nfunction wrapGlobalLayer(styles) {\n  const serialized = serializeStyles(styles);\n  if (styles !== serialized && serialized.styles) {\n    if (!serialized.styles.match(/^@layer\\s+[^{]*$/)) {\n      // If the styles are not already wrapped in a layer, wrap them in a global layer.\n      serialized.styles = `@layer global{${serialized.styles}}`;\n    }\n    return serialized;\n  }\n  return styles;\n}\nfunction GlobalStyles({\n  styles,\n  themeId,\n  defaultTheme = {}\n}) {\n  const upperTheme = useTheme(defaultTheme);\n  const resolvedTheme = themeId ? upperTheme[themeId] || upperTheme : upperTheme;\n  let globalStyles = typeof styles === 'function' ? styles(resolvedTheme) : styles;\n  if (resolvedTheme.modularCssLayers) {\n    if (Array.isArray(globalStyles)) {\n      globalStyles = globalStyles.map(styleArg => {\n        if (typeof styleArg === 'function') {\n          return wrapGlobalLayer(styleArg(resolvedTheme));\n        }\n        return wrapGlobalLayer(styleArg);\n      });\n    } else {\n      globalStyles = wrapGlobalLayer(globalStyles);\n    }\n  }\n  return /*#__PURE__*/_jsx(MuiGlobalStyles, {\n    styles: globalStyles\n  });\n}\nprocess.env.NODE_ENV !== \"production\" ? GlobalStyles.propTypes /* remove-proptypes */ = {\n  // ┌────────────────────────────── Warning ──────────────────────────────┐\n  // │ These PropTypes are generated from the TypeScript type definitions. │\n  // │ To update them, edit the TypeScript types and run `pnpm proptypes`. │\n  // └─────────────────────────────────────────────────────────────────────┘\n  /**\n   * @ignore\n   */\n  defaultTheme: PropTypes.object,\n  /**\n   * @ignore\n   */\n  styles: PropTypes /* @typescript-to-proptypes-ignore */.oneOfType([PropTypes.array, PropTypes.func, PropTypes.number, PropTypes.object, PropTypes.string, PropTypes.bool]),\n  /**\n   * @ignore\n   */\n  themeId: PropTypes.string\n} : void 0;\nexport default GlobalStyles;","'use client';\n\nimport * as React from 'react';\nimport clsx from 'clsx';\nimport styled from '@mui/styled-engine';\nimport styleFunctionSx, { extendSxProp } from \"../styleFunctionSx/index.js\";\nimport useTheme from \"../useTheme/index.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport default function createBox(options = {}) {\n  const {\n    themeId,\n    defaultTheme,\n    defaultClassName = 'MuiBox-root',\n    generateClassName\n  } = options;\n  const BoxRoot = styled('div', {\n    shouldForwardProp: prop => prop !== 'theme' && prop !== 'sx' && prop !== 'as'\n  })(styleFunctionSx);\n  const Box = /*#__PURE__*/React.forwardRef(function Box(inProps, ref) {\n    const theme = useTheme(defaultTheme);\n    const {\n      className,\n      component = 'div',\n      ...other\n    } = extendSxProp(inProps);\n    return /*#__PURE__*/_jsx(BoxRoot, {\n      as: component,\n      ref: ref,\n      className: clsx(className, generateClassName ? generateClassName(defaultClassName) : defaultClassName),\n      theme: themeId ? theme[themeId] || theme : theme,\n      ...other\n    });\n  });\n  return Box;\n}","import ClassNameGenerator from \"../ClassNameGenerator/index.js\";\nexport const globalStateClasses = {\n  active: 'active',\n  checked: 'checked',\n  completed: 'completed',\n  disabled: 'disabled',\n  error: 'error',\n  expanded: 'expanded',\n  focused: 'focused',\n  focusVisible: 'focusVisible',\n  open: 'open',\n  readOnly: 'readOnly',\n  required: 'required',\n  selected: 'selected'\n};\nexport default function generateUtilityClass(componentName, slot, globalStatePrefix = 'Mui') {\n  const globalStateClass = globalStateClasses[slot];\n  return globalStateClass ? `${globalStatePrefix}-${globalStateClass}` : `${ClassNameGenerator.generate(componentName)}-${slot}`;\n}\nexport function isGlobalState(slot) {\n  return globalStateClasses[slot] !== undefined;\n}","import generateUtilityClass from \"../generateUtilityClass/index.js\";\nexport default function generateUtilityClasses(componentName, slots, globalStatePrefix = 'Mui') {\n  const result = {};\n  slots.forEach(slot => {\n    result[slot] = generateUtilityClass(componentName, slot, globalStatePrefix);\n  });\n  return result;\n}","import { ForwardRef, Memo } from 'react-is';\nfunction getFunctionComponentName(Component, fallback = '') {\n  return Component.displayName || Component.name || fallback;\n}\nfunction getWrappedName(outerType, innerType, wrapperName) {\n  const functionName = getFunctionComponentName(innerType);\n  return outerType.displayName || (functionName !== '' ? `${wrapperName}(${functionName})` : wrapperName);\n}\n\n/**\n * cherry-pick from\n * https://github.com/facebook/react/blob/769b1f270e1251d9dbdce0fcbd9e92e502d059b8/packages/shared/getComponentName.js\n * originally forked from recompose/getDisplayName\n */\nexport default function getDisplayName(Component) {\n  if (Component == null) {\n    return undefined;\n  }\n  if (typeof Component === 'string') {\n    return Component;\n  }\n  if (typeof Component === 'function') {\n    return getFunctionComponentName(Component, 'Component');\n  }\n\n  // TypeScript can't have components as objects but they exist in the form of `memo` or `Suspense`\n  if (typeof Component === 'object') {\n    switch (Component.$$typeof) {\n      case ForwardRef:\n        return getWrappedName(Component, Component.render, 'ForwardRef');\n      case Memo:\n        return getWrappedName(Component, Component.type, 'memo');\n      default:\n        return undefined;\n    }\n  }\n  return undefined;\n}","import { internal_serializeStyles } from '@mui/styled-engine';\nexport default function preprocessStyles(input) {\n  const {\n    variants,\n    ...style\n  } = input;\n  const result = {\n    variants,\n    style: internal_serializeStyles(style),\n    isProcessed: true\n  };\n\n  // Not supported on styled-components\n  if (result.style === style) {\n    return result;\n  }\n  if (variants) {\n    variants.forEach(variant => {\n      if (typeof variant.style !== 'function') {\n        variant.style = internal_serializeStyles(variant.style);\n      }\n    });\n  }\n  return result;\n}","import styledEngineStyled, { internal_mutateStyles as mutateStyles, internal_serializeStyles as serializeStyles } from '@mui/styled-engine';\nimport { isPlainObject } from '@mui/utils/deepmerge';\nimport capitalize from '@mui/utils/capitalize';\nimport getDisplayName from '@mui/utils/getDisplayName';\nimport createTheme from \"../createTheme/index.js\";\nimport styleFunctionSx from \"../styleFunctionSx/index.js\";\nimport preprocessStyles from \"../preprocessStyles.js\";\n\n/* eslint-disable no-underscore-dangle */\n/* eslint-disable no-labels */\n/* eslint-disable no-lone-blocks */\n\nexport const systemDefaultTheme = createTheme();\n\n// Update /system/styled/#api in case if this changes\nexport function shouldForwardProp(prop) {\n  return prop !== 'ownerState' && prop !== 'theme' && prop !== 'sx' && prop !== 'as';\n}\nfunction shallowLayer(serialized, layerName) {\n  if (layerName && serialized && typeof serialized === 'object' && serialized.styles && !serialized.styles.startsWith('@layer') // only add the layer if it is not already there.\n  ) {\n    serialized.styles = `@layer ${layerName}{${String(serialized.styles)}}`;\n  }\n  return serialized;\n}\nfunction defaultOverridesResolver(slot) {\n  if (!slot) {\n    return null;\n  }\n  return (_props, styles) => styles[slot];\n}\nfunction attachTheme(props, themeId, defaultTheme) {\n  props.theme = isObjectEmpty(props.theme) ? defaultTheme : props.theme[themeId] || props.theme;\n}\nfunction processStyle(props, style, layerName) {\n  /*\n   * Style types:\n   *  - null/undefined\n   *  - string\n   *  - CSS style object: { [cssKey]: [cssValue], variants }\n   *  - Processed style object: { style, variants, isProcessed: true }\n   *  - Array of any of the above\n   */\n\n  const resolvedStyle = typeof style === 'function' ? style(props) : style;\n  if (Array.isArray(resolvedStyle)) {\n    return resolvedStyle.flatMap(subStyle => processStyle(props, subStyle, layerName));\n  }\n  if (Array.isArray(resolvedStyle?.variants)) {\n    let rootStyle;\n    if (resolvedStyle.isProcessed) {\n      rootStyle = layerName ? shallowLayer(resolvedStyle.style, layerName) : resolvedStyle.style;\n    } else {\n      const {\n        variants,\n        ...otherStyles\n      } = resolvedStyle;\n      rootStyle = layerName ? shallowLayer(serializeStyles(otherStyles), layerName) : otherStyles;\n    }\n    return processStyleVariants(props, resolvedStyle.variants, [rootStyle], layerName);\n  }\n  if (resolvedStyle?.isProcessed) {\n    return layerName ? shallowLayer(serializeStyles(resolvedStyle.style), layerName) : resolvedStyle.style;\n  }\n  return layerName ? shallowLayer(serializeStyles(resolvedStyle), layerName) : resolvedStyle;\n}\nfunction processStyleVariants(props, variants, results = [], layerName = undefined) {\n  let mergedState; // We might not need it, initialized lazily\n\n  variantLoop: for (let i = 0; i < variants.length; i += 1) {\n    const variant = variants[i];\n    if (typeof variant.props === 'function') {\n      mergedState ??= {\n        ...props,\n        ...props.ownerState,\n        ownerState: props.ownerState\n      };\n      if (!variant.props(mergedState)) {\n        continue;\n      }\n    } else {\n      for (const key in variant.props) {\n        if (props[key] !== variant.props[key] && props.ownerState?.[key] !== variant.props[key]) {\n          continue variantLoop;\n        }\n      }\n    }\n    if (typeof variant.style === 'function') {\n      mergedState ??= {\n        ...props,\n        ...props.ownerState,\n        ownerState: props.ownerState\n      };\n      results.push(layerName ? shallowLayer(serializeStyles(variant.style(mergedState)), layerName) : variant.style(mergedState));\n    } else {\n      results.push(layerName ? shallowLayer(serializeStyles(variant.style), layerName) : variant.style);\n    }\n  }\n  return results;\n}\nexport default function createStyled(input = {}) {\n  const {\n    themeId,\n    defaultTheme = systemDefaultTheme,\n    rootShouldForwardProp = shouldForwardProp,\n    slotShouldForwardProp = shouldForwardProp\n  } = input;\n  function styleAttachTheme(props) {\n    attachTheme(props, themeId, defaultTheme);\n  }\n  const styled = (tag, inputOptions = {}) => {\n    // If `tag` is already a styled component, filter out the `sx` style function\n    // to prevent unnecessary styles generated by the composite components.\n    mutateStyles(tag, styles => styles.filter(style => style !== styleFunctionSx));\n    const {\n      name: componentName,\n      slot: componentSlot,\n      skipVariantsResolver: inputSkipVariantsResolver,\n      skipSx: inputSkipSx,\n      // TODO v6: remove `lowercaseFirstLetter()` in the next major release\n      // For more details: https://github.com/mui/material-ui/pull/37908\n      overridesResolver = defaultOverridesResolver(lowercaseFirstLetter(componentSlot)),\n      ...options\n    } = inputOptions;\n    const layerName = componentName && componentName.startsWith('Mui') || !!componentSlot ? 'components' : 'custom';\n\n    // if skipVariantsResolver option is defined, take the value, otherwise, true for root and false for other slots.\n    const skipVariantsResolver = inputSkipVariantsResolver !== undefined ? inputSkipVariantsResolver :\n    // TODO v6: remove `Root` in the next major release\n    // For more details: https://github.com/mui/material-ui/pull/37908\n    componentSlot && componentSlot !== 'Root' && componentSlot !== 'root' || false;\n    const skipSx = inputSkipSx || false;\n    let shouldForwardPropOption = shouldForwardProp;\n\n    // TODO v6: remove `Root` in the next major release\n    // For more details: https://github.com/mui/material-ui/pull/37908\n    if (componentSlot === 'Root' || componentSlot === 'root') {\n      shouldForwardPropOption = rootShouldForwardProp;\n    } else if (componentSlot) {\n      // any other slot specified\n      shouldForwardPropOption = slotShouldForwardProp;\n    } else if (isStringTag(tag)) {\n      // for string (html) tag, preserve the behavior in emotion & styled-components.\n      shouldForwardPropOption = undefined;\n    }\n    const defaultStyledResolver = styledEngineStyled(tag, {\n      shouldForwardProp: shouldForwardPropOption,\n      label: generateStyledLabel(componentName, componentSlot),\n      ...options\n    });\n    const transformStyle = style => {\n      // - On the server Emotion doesn't use React.forwardRef for creating components, so the created\n      //   component stays as a function. This condition makes sure that we do not interpolate functions\n      //   which are basically components used as a selectors.\n      // - `style` could be a styled component from a babel plugin for component selectors, This condition\n      //   makes sure that we do not interpolate them.\n      if (style.__emotion_real === style) {\n        return style;\n      }\n      if (typeof style === 'function') {\n        return function styleFunctionProcessor(props) {\n          return processStyle(props, style, props.theme.modularCssLayers ? layerName : undefined);\n        };\n      }\n      if (isPlainObject(style)) {\n        const serialized = preprocessStyles(style);\n        return function styleObjectProcessor(props) {\n          if (!serialized.variants) {\n            return props.theme.modularCssLayers ? shallowLayer(serialized.style, layerName) : serialized.style;\n          }\n          return processStyle(props, serialized, props.theme.modularCssLayers ? layerName : undefined);\n        };\n      }\n      return style;\n    };\n    const muiStyledResolver = (...expressionsInput) => {\n      const expressionsHead = [];\n      const expressionsBody = expressionsInput.map(transformStyle);\n      const expressionsTail = [];\n\n      // Preprocess `props` to set the scoped theme value.\n      // This must run before any other expression.\n      expressionsHead.push(styleAttachTheme);\n      if (componentName && overridesResolver) {\n        expressionsTail.push(function styleThemeOverrides(props) {\n          const theme = props.theme;\n          const styleOverrides = theme.components?.[componentName]?.styleOverrides;\n          if (!styleOverrides) {\n            return null;\n          }\n          const resolvedStyleOverrides = {};\n\n          // TODO: v7 remove iteration and use `resolveStyleArg(styleOverrides[slot])` directly\n          // eslint-disable-next-line guard-for-in\n          for (const slotKey in styleOverrides) {\n            resolvedStyleOverrides[slotKey] = processStyle(props, styleOverrides[slotKey], props.theme.modularCssLayers ? 'theme' : undefined);\n          }\n          return overridesResolver(props, resolvedStyleOverrides);\n        });\n      }\n      if (componentName && !skipVariantsResolver) {\n        expressionsTail.push(function styleThemeVariants(props) {\n          const theme = props.theme;\n          const themeVariants = theme?.components?.[componentName]?.variants;\n          if (!themeVariants) {\n            return null;\n          }\n          return processStyleVariants(props, themeVariants, [], props.theme.modularCssLayers ? 'theme' : undefined);\n        });\n      }\n      if (!skipSx) {\n        expressionsTail.push(styleFunctionSx);\n      }\n\n      // This function can be called as a tagged template, so the first argument would contain\n      // CSS `string[]` values.\n      if (Array.isArray(expressionsBody[0])) {\n        const inputStrings = expressionsBody.shift();\n\n        // We need to add placeholders in the tagged template for the custom functions we have\n        // possibly added (attachTheme, overrides, variants, and sx).\n        const placeholdersHead = new Array(expressionsHead.length).fill('');\n        const placeholdersTail = new Array(expressionsTail.length).fill('');\n        let outputStrings;\n        // prettier-ignore\n        {\n          outputStrings = [...placeholdersHead, ...inputStrings, ...placeholdersTail];\n          outputStrings.raw = [...placeholdersHead, ...inputStrings.raw, ...placeholdersTail];\n        }\n\n        // The only case where we put something before `attachTheme`\n        expressionsHead.unshift(outputStrings);\n      }\n      const expressions = [...expressionsHead, ...expressionsBody, ...expressionsTail];\n      const Component = defaultStyledResolver(...expressions);\n      if (tag.muiName) {\n        Component.muiName = tag.muiName;\n      }\n      if (process.env.NODE_ENV !== 'production') {\n        Component.displayName = generateDisplayName(componentName, componentSlot, tag);\n      }\n      return Component;\n    };\n    if (defaultStyledResolver.withConfig) {\n      muiStyledResolver.withConfig = defaultStyledResolver.withConfig;\n    }\n    return muiStyledResolver;\n  };\n  return styled;\n}\nfunction generateDisplayName(componentName, componentSlot, tag) {\n  if (componentName) {\n    return `${componentName}${capitalize(componentSlot || '')}`;\n  }\n  return `Styled(${getDisplayName(tag)})`;\n}\nfunction generateStyledLabel(componentName, componentSlot) {\n  let label;\n  if (process.env.NODE_ENV !== 'production') {\n    if (componentName) {\n      // TODO v6: remove `lowercaseFirstLetter()` in the next major release\n      // For more details: https://github.com/mui/material-ui/pull/37908\n      label = `${componentName}-${lowercaseFirstLetter(componentSlot || 'Root')}`;\n    }\n  }\n  return label;\n}\nfunction isObjectEmpty(object) {\n  // eslint-disable-next-line\n  for (const _ in object) {\n    return false;\n  }\n  return true;\n}\n\n// https://github.com/emotion-js/emotion/blob/26ded6109fcd8ca9875cc2ce4564fee678a3f3c5/packages/styled/src/utils.js#L40\nfunction isStringTag(tag) {\n  return typeof tag === 'string' &&\n  // 96 is one less than the char code\n  // for \"a\" so this is checking that\n  // it's a lowercase character\n  tag.charCodeAt(0) > 96;\n}\nfunction lowercaseFirstLetter(string) {\n  if (!string) {\n    return string;\n  }\n  return string.charAt(0).toLowerCase() + string.slice(1);\n}","import createStyled from \"../createStyled/index.js\";\nconst styled = createStyled();\nexport default styled;","import clsx from 'clsx';\n\n/**\n * Add keys, values of `defaultProps` that does not exist in `props`\n * @param defaultProps\n * @param props\n * @param mergeClassNameAndStyle If `true`, merges `className` and `style` props instead of overriding them.\n *   When `false` (default), props override defaultProps. When `true`, `className` values are concatenated\n *   and `style` objects are merged with props taking precedence.\n * @returns resolved props\n */\nexport default function resolveProps(defaultProps, props, mergeClassNameAndStyle = false) {\n  const output = {\n    ...props\n  };\n  for (const key in defaultProps) {\n    if (Object.prototype.hasOwnProperty.call(defaultProps, key)) {\n      const propName = key;\n      if (propName === 'components' || propName === 'slots') {\n        output[propName] = {\n          ...defaultProps[propName],\n          ...output[propName]\n        };\n      } else if (propName === 'componentsProps' || propName === 'slotProps') {\n        const defaultSlotProps = defaultProps[propName];\n        const slotProps = props[propName];\n        if (!slotProps) {\n          output[propName] = defaultSlotProps || {};\n        } else if (!defaultSlotProps) {\n          output[propName] = slotProps;\n        } else {\n          output[propName] = {\n            ...slotProps\n          };\n          for (const slotKey in defaultSlotProps) {\n            if (Object.prototype.hasOwnProperty.call(defaultSlotProps, slotKey)) {\n              const slotPropName = slotKey;\n              output[propName][slotPropName] = resolveProps(defaultSlotProps[slotPropName], slotProps[slotPropName], mergeClassNameAndStyle);\n            }\n          }\n        }\n      } else if (propName === 'className' && mergeClassNameAndStyle && props.className) {\n        output.className = clsx(defaultProps?.className, props?.className);\n      } else if (propName === 'style' && mergeClassNameAndStyle && props.style) {\n        output.style = {\n          ...defaultProps?.style,\n          ...props?.style\n        };\n      } else if (output[propName] === undefined) {\n        output[propName] = defaultProps[propName];\n      }\n    }\n  }\n  return output;\n}","import resolveProps from '@mui/utils/resolveProps';\nexport default function getThemeProps(params) {\n  const {\n    theme,\n    name,\n    props\n  } = params;\n  if (!theme || !theme.components || !theme.components[name] || !theme.components[name].defaultProps) {\n    return props;\n  }\n  return resolveProps(theme.components[name].defaultProps, props);\n}","'use client';\n\nimport getThemeProps from \"./getThemeProps.js\";\nimport useTheme from \"../useTheme/index.js\";\nexport default function useThemeProps({\n  props,\n  name,\n  defaultTheme,\n  themeId\n}) {\n  let theme = useTheme(defaultTheme);\n  if (themeId) {\n    theme = theme[themeId] || theme;\n  }\n  return getThemeProps({\n    theme,\n    name,\n    props\n  });\n}","'use client';\n\nimport * as React from 'react';\n\n/**\n * A version of `React.useLayoutEffect` that does not show a warning when server-side rendering.\n * This is useful for effects that are only needed for client-side rendering but not for SSR.\n *\n * Before you use this hook, make sure to read https://gist.github.com/gaearon/e7d97cdf38a2907924ea12e4ebdf3c85\n * and confirm it doesn't apply to your use-case.\n */\nconst useEnhancedEffect = typeof window !== 'undefined' ? React.useLayoutEffect : React.useEffect;\nexport default useEnhancedEffect;","function clamp(val, min = Number.MIN_SAFE_INTEGER, max = Number.MAX_SAFE_INTEGER) {\n  return Math.max(min, Math.min(val, max));\n}\nexport default clamp;","import _formatErrorMessage from \"@mui/utils/formatMuiErrorMessage\";\n/* eslint-disable @typescript-eslint/naming-convention */\nimport clamp from '@mui/utils/clamp';\n\n/**\n * Returns a number whose value is limited to the given range.\n * @param {number} value The value to be clamped\n * @param {number} min The lower boundary of the output range\n * @param {number} max The upper boundary of the output range\n * @returns {number} A number in the range [min, max]\n */\nfunction clampWrapper(value, min = 0, max = 1) {\n  if (process.env.NODE_ENV !== 'production') {\n    if (value < min || value > max) {\n      console.error(`MUI: The value provided ${value} is out of range [${min}, ${max}].`);\n    }\n  }\n  return clamp(value, min, max);\n}\n\n/**\n * Converts a color from CSS hex format to CSS rgb format.\n * @param {string} color - Hex color, i.e. #nnn or #nnnnnn\n * @returns {string} A CSS rgb color string\n */\nexport function hexToRgb(color) {\n  color = color.slice(1);\n  const re = new RegExp(`.{1,${color.length >= 6 ? 2 : 1}}`, 'g');\n  let colors = color.match(re);\n  if (colors && colors[0].length === 1) {\n    colors = colors.map(n => n + n);\n  }\n  if (process.env.NODE_ENV !== 'production') {\n    if (color.length !== color.trim().length) {\n      console.error(`MUI: The color: \"${color}\" is invalid. Make sure the color input doesn't contain leading/trailing space.`);\n    }\n  }\n  return colors ? `rgb${colors.length === 4 ? 'a' : ''}(${colors.map((n, index) => {\n    return index < 3 ? parseInt(n, 16) : Math.round(parseInt(n, 16) / 255 * 1000) / 1000;\n  }).join(', ')})` : '';\n}\nfunction intToHex(int) {\n  const hex = int.toString(16);\n  return hex.length === 1 ? `0${hex}` : hex;\n}\n\n/**\n * Returns an object with the type and values of a color.\n *\n * Note: Does not support rgb % values.\n * @param {string} color - CSS color, i.e. one of: #nnn, #nnnnnn, rgb(), rgba(), hsl(), hsla(), color()\n * @returns {object} - A MUI color object: {type: string, values: number[]}\n */\nexport function decomposeColor(color) {\n  // Idempotent\n  if (color.type) {\n    return color;\n  }\n  if (color.charAt(0) === '#') {\n    return decomposeColor(hexToRgb(color));\n  }\n  const marker = color.indexOf('(');\n  const type = color.substring(0, marker);\n  if (!['rgb', 'rgba', 'hsl', 'hsla', 'color'].includes(type)) {\n    throw new Error(process.env.NODE_ENV !== \"production\" ? `MUI: Unsupported \\`${color}\\` color.\\n` + 'The following formats are supported: #nnn, #nnnnnn, rgb(), rgba(), hsl(), hsla(), color().' : _formatErrorMessage(9, color));\n  }\n  let values = color.substring(marker + 1, color.length - 1);\n  let colorSpace;\n  if (type === 'color') {\n    values = values.split(' ');\n    colorSpace = values.shift();\n    if (values.length === 4 && values[3].charAt(0) === '/') {\n      values[3] = values[3].slice(1);\n    }\n    if (!['srgb', 'display-p3', 'a98-rgb', 'prophoto-rgb', 'rec-2020'].includes(colorSpace)) {\n      throw new Error(process.env.NODE_ENV !== \"production\" ? `MUI: unsupported \\`${colorSpace}\\` color space.\\n` + 'The following color spaces are supported: srgb, display-p3, a98-rgb, prophoto-rgb, rec-2020.' : _formatErrorMessage(10, colorSpace));\n    }\n  } else {\n    values = values.split(',');\n  }\n  values = values.map(value => parseFloat(value));\n  return {\n    type,\n    values,\n    colorSpace\n  };\n}\n\n/**\n * Returns a channel created from the input color.\n *\n * @param {string} color - CSS color, i.e. one of: #nnn, #nnnnnn, rgb(), rgba(), hsl(), hsla(), color()\n * @returns {string} - The channel for the color, that can be used in rgba or hsla colors\n */\nexport const colorChannel = color => {\n  const decomposedColor = decomposeColor(color);\n  return decomposedColor.values.slice(0, 3).map((val, idx) => decomposedColor.type.includes('hsl') && idx !== 0 ? `${val}%` : val).join(' ');\n};\nexport const private_safeColorChannel = (color, warning) => {\n  try {\n    return colorChannel(color);\n  } catch (error) {\n    if (warning && process.env.NODE_ENV !== 'production') {\n      console.warn(warning);\n    }\n    return color;\n  }\n};\n\n/**\n * Converts a color object with type and values to a string.\n * @param {object} color - Decomposed color\n * @param {string} color.type - One of: 'rgb', 'rgba', 'hsl', 'hsla', 'color'\n * @param {array} color.values - [n,n,n] or [n,n,n,n]\n * @returns {string} A CSS color string\n */\nexport function recomposeColor(color) {\n  const {\n    type,\n    colorSpace\n  } = color;\n  let {\n    values\n  } = color;\n  if (type.includes('rgb')) {\n    // Only convert the first 3 values to int (i.e. not alpha)\n    values = values.map((n, i) => i < 3 ? parseInt(n, 10) : n);\n  } else if (type.includes('hsl')) {\n    values[1] = `${values[1]}%`;\n    values[2] = `${values[2]}%`;\n  }\n  if (type.includes('color')) {\n    values = `${colorSpace} ${values.join(' ')}`;\n  } else {\n    values = `${values.join(', ')}`;\n  }\n  return `${type}(${values})`;\n}\n\n/**\n * Converts a color from CSS rgb format to CSS hex format.\n * @param {string} color - RGB color, i.e. rgb(n, n, n)\n * @returns {string} A CSS rgb color string, i.e. #nnnnnn\n */\nexport function rgbToHex(color) {\n  // Idempotent\n  if (color.startsWith('#')) {\n    return color;\n  }\n  const {\n    values\n  } = decomposeColor(color);\n  return `#${values.map((n, i) => intToHex(i === 3 ? Math.round(255 * n) : n)).join('')}`;\n}\n\n/**\n * Converts a color from hsl format to rgb format.\n * @param {string} color - HSL color values\n * @returns {string} rgb color values\n */\nexport function hslToRgb(color) {\n  color = decomposeColor(color);\n  const {\n    values\n  } = color;\n  const h = values[0];\n  const s = values[1] / 100;\n  const l = values[2] / 100;\n  const a = s * Math.min(l, 1 - l);\n  const f = (n, k = (n + h / 30) % 12) => l - a * Math.max(Math.min(k - 3, 9 - k, 1), -1);\n  let type = 'rgb';\n  const rgb = [Math.round(f(0) * 255), Math.round(f(8) * 255), Math.round(f(4) * 255)];\n  if (color.type === 'hsla') {\n    type += 'a';\n    rgb.push(values[3]);\n  }\n  return recomposeColor({\n    type,\n    values: rgb\n  });\n}\n/**\n * The relative brightness of any point in a color space,\n * normalized to 0 for darkest black and 1 for lightest white.\n *\n * Formula: https://www.w3.org/TR/WCAG20-TECHS/G17.html#G17-tests\n * @param {string} color - CSS color, i.e. one of: #nnn, #nnnnnn, rgb(), rgba(), hsl(), hsla(), color()\n * @returns {number} The relative brightness of the color in the range 0 - 1\n */\nexport function getLuminance(color) {\n  color = decomposeColor(color);\n  let rgb = color.type === 'hsl' || color.type === 'hsla' ? decomposeColor(hslToRgb(color)).values : color.values;\n  rgb = rgb.map(val => {\n    if (color.type !== 'color') {\n      val /= 255; // normalized\n    }\n    return val <= 0.03928 ? val / 12.92 : ((val + 0.055) / 1.055) ** 2.4;\n  });\n\n  // Truncate at 3 digits\n  return Number((0.2126 * rgb[0] + 0.7152 * rgb[1] + 0.0722 * rgb[2]).toFixed(3));\n}\n\n/**\n * Calculates the contrast ratio between two colors.\n *\n * Formula: https://www.w3.org/TR/WCAG20-TECHS/G17.html#G17-tests\n * @param {string} foreground - CSS color, i.e. one of: #nnn, #nnnnnn, rgb(), rgba(), hsl(), hsla()\n * @param {string} background - CSS color, i.e. one of: #nnn, #nnnnnn, rgb(), rgba(), hsl(), hsla()\n * @returns {number} A contrast ratio value in the range 0 - 21.\n */\nexport function getContrastRatio(foreground, background) {\n  const lumA = getLuminance(foreground);\n  const lumB = getLuminance(background);\n  return (Math.max(lumA, lumB) + 0.05) / (Math.min(lumA, lumB) + 0.05);\n}\n\n/**\n * Sets the absolute transparency of a color.\n * Any existing alpha values are overwritten.\n * @param {string} color - CSS color, i.e. one of: #nnn, #nnnnnn, rgb(), rgba(), hsl(), hsla(), color()\n * @param {number} value - value to set the alpha channel to in the range 0 - 1\n * @returns {string} A CSS color string. Hex input values are returned as rgb\n */\nexport function alpha(color, value) {\n  color = decomposeColor(color);\n  value = clampWrapper(value);\n  if (color.type === 'rgb' || color.type === 'hsl') {\n    color.type += 'a';\n  }\n  if (color.type === 'color') {\n    color.values[3] = `/${value}`;\n  } else {\n    color.values[3] = value;\n  }\n  return recomposeColor(color);\n}\nexport function private_safeAlpha(color, value, warning) {\n  try {\n    return alpha(color, value);\n  } catch (error) {\n    if (warning && process.env.NODE_ENV !== 'production') {\n      console.warn(warning);\n    }\n    return color;\n  }\n}\n\n/**\n * Darkens a color.\n * @param {string} color - CSS color, i.e. one of: #nnn, #nnnnnn, rgb(), rgba(), hsl(), hsla(), color()\n * @param {number} coefficient - multiplier in the range 0 - 1\n * @returns {string} A CSS color string. Hex input values are returned as rgb\n */\nexport function darken(color, coefficient) {\n  color = decomposeColor(color);\n  coefficient = clampWrapper(coefficient);\n  if (color.type.includes('hsl')) {\n    color.values[2] *= 1 - coefficient;\n  } else if (color.type.includes('rgb') || color.type.includes('color')) {\n    for (let i = 0; i < 3; i += 1) {\n      color.values[i] *= 1 - coefficient;\n    }\n  }\n  return recomposeColor(color);\n}\nexport function private_safeDarken(color, coefficient, warning) {\n  try {\n    return darken(color, coefficient);\n  } catch (error) {\n    if (warning && process.env.NODE_ENV !== 'production') {\n      console.warn(warning);\n    }\n    return color;\n  }\n}\n\n/**\n * Lightens a color.\n * @param {string} color - CSS color, i.e. one of: #nnn, #nnnnnn, rgb(), rgba(), hsl(), hsla(), color()\n * @param {number} coefficient - multiplier in the range 0 - 1\n * @returns {string} A CSS color string. Hex input values are returned as rgb\n */\nexport function lighten(color, coefficient) {\n  color = decomposeColor(color);\n  coefficient = clampWrapper(coefficient);\n  if (color.type.includes('hsl')) {\n    color.values[2] += (100 - color.values[2]) * coefficient;\n  } else if (color.type.includes('rgb')) {\n    for (let i = 0; i < 3; i += 1) {\n      color.values[i] += (255 - color.values[i]) * coefficient;\n    }\n  } else if (color.type.includes('color')) {\n    for (let i = 0; i < 3; i += 1) {\n      color.values[i] += (1 - color.values[i]) * coefficient;\n    }\n  }\n  return recomposeColor(color);\n}\nexport function private_safeLighten(color, coefficient, warning) {\n  try {\n    return lighten(color, coefficient);\n  } catch (error) {\n    if (warning && process.env.NODE_ENV !== 'production') {\n      console.warn(warning);\n    }\n    return color;\n  }\n}\n\n/**\n * Darken or lighten a color, depending on its luminance.\n * Light colors are darkened, dark colors are lightened.\n * @param {string} color - CSS color, i.e. one of: #nnn, #nnnnnn, rgb(), rgba(), hsl(), hsla(), color()\n * @param {number} coefficient=0.15 - multiplier in the range 0 - 1\n * @returns {string} A CSS color string. Hex input values are returned as rgb\n */\nexport function emphasize(color, coefficient = 0.15) {\n  return getLuminance(color) > 0.5 ? darken(color, coefficient) : lighten(color, coefficient);\n}\nexport function private_safeEmphasize(color, coefficient, warning) {\n  try {\n    return emphasize(color, coefficient);\n  } catch (error) {\n    if (warning && process.env.NODE_ENV !== 'production') {\n      console.warn(warning);\n    }\n    return color;\n  }\n}\n\n/**\n * Blend a transparent overlay color with a background color, resulting in a single\n * RGB color.\n * @param {string} background - CSS color\n * @param {string} overlay - CSS color\n * @param {number} opacity - Opacity multiplier in the range 0 - 1\n * @param {number} [gamma=1.0] - Gamma correction factor. For gamma-correct blending, 2.2 is usual.\n */\nexport function blend(background, overlay, opacity, gamma = 1.0) {\n  const blendChannel = (b, o) => Math.round((b ** (1 / gamma) * (1 - opacity) + o ** (1 / gamma) * opacity) ** gamma);\n  const backgroundColor = decomposeColor(background);\n  const overlayColor = decomposeColor(overlay);\n  const rgb = [blendChannel(backgroundColor.values[0], overlayColor.values[0]), blendChannel(backgroundColor.values[1], overlayColor.values[1]), blendChannel(backgroundColor.values[2], overlayColor.values[2])];\n  return recomposeColor({\n    type: 'rgb',\n    values: rgb\n  });\n}","// This module is based on https://github.com/airbnb/prop-types-exact repository.\n// However, in order to reduce the number of dependencies and to remove some extra safe checks\n// the module was forked.\n\nconst specialProperty = 'exact-prop: \\u200b';\nexport default function exactProp(propTypes) {\n  if (process.env.NODE_ENV === 'production') {\n    return propTypes;\n  }\n  return {\n    ...propTypes,\n    [specialProperty]: props => {\n      const unsupportedProps = Object.keys(props).filter(prop => !propTypes.hasOwnProperty(prop));\n      if (unsupportedProps.length > 0) {\n        return new Error(`The following props are not supported: ${unsupportedProps.map(prop => `\\`${prop}\\``).join(', ')}. Please remove them.`);\n      }\n      return null;\n    }\n  };\n}","'use client';\n\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nconst RtlContext = /*#__PURE__*/React.createContext();\nfunction RtlProvider({\n  value,\n  ...props\n}) {\n  return /*#__PURE__*/_jsx(RtlContext.Provider, {\n    value: value ?? true,\n    ...props\n  });\n}\nprocess.env.NODE_ENV !== \"production\" ? RtlProvider.propTypes = {\n  children: PropTypes.node,\n  value: PropTypes.bool\n} : void 0;\nexport const useRtl = () => {\n  const value = React.useContext(RtlContext);\n  return value ?? false;\n};\nexport default RtlProvider;","'use client';\n\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport resolveProps from '@mui/utils/resolveProps';\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nconst PropsContext = /*#__PURE__*/React.createContext(undefined);\nfunction DefaultPropsProvider({\n  value,\n  children\n}) {\n  return /*#__PURE__*/_jsx(PropsContext.Provider, {\n    value: value,\n    children: children\n  });\n}\nprocess.env.NODE_ENV !== \"production\" ? DefaultPropsProvider.propTypes /* remove-proptypes */ = {\n  // ┌────────────────────────────── Warning ──────────────────────────────┐\n  // │ These PropTypes are generated from the TypeScript type definitions. │\n  // │ To update them, edit the TypeScript types and run `pnpm proptypes`. │\n  // └─────────────────────────────────────────────────────────────────────┘\n  /**\n   * @ignore\n   */\n  children: PropTypes.node,\n  /**\n   * @ignore\n   */\n  value: PropTypes.object\n} : void 0;\nfunction getThemeProps(params) {\n  const {\n    theme,\n    name,\n    props\n  } = params;\n  if (!theme || !theme.components || !theme.components[name]) {\n    return props;\n  }\n  const config = theme.components[name];\n  if (config.defaultProps) {\n    // compatible with v5 signature\n    return resolveProps(config.defaultProps, props, theme.components.mergeClassNameAndStyle);\n  }\n  if (!config.styleOverrides && !config.variants) {\n    // v6 signature, no property 'defaultProps'\n    return resolveProps(config, props, theme.components.mergeClassNameAndStyle);\n  }\n  return props;\n}\nexport function useDefaultProps({\n  props,\n  name\n}) {\n  const ctx = React.useContext(PropsContext);\n  return getThemeProps({\n    props,\n    name,\n    theme: {\n      components: ctx\n    }\n  });\n}\nexport default DefaultPropsProvider;","'use client';\n\nimport * as React from 'react';\nlet globalId = 0;\n\n// TODO React 17: Remove `useGlobalId` once React 17 support is removed\nfunction useGlobalId(idOverride) {\n  const [defaultId, setDefaultId] = React.useState(idOverride);\n  const id = idOverride || defaultId;\n  React.useEffect(() => {\n    if (defaultId == null) {\n      // Fallback to this default id when possible.\n      // Use the incrementing value for client-side rendering only.\n      // We can't use it server-side.\n      // If you want to use random values please consider the Birthday Problem: https://en.wikipedia.org/wiki/Birthday_problem\n      globalId += 1;\n      setDefaultId(`mui-${globalId}`);\n    }\n  }, [defaultId]);\n  return id;\n}\n\n// See https://github.com/mui/material-ui/issues/41190#issuecomment-2040873379 for why\nconst safeReact = {\n  ...React\n};\nconst maybeReactUseId = safeReact.useId;\n\n/**\n *\n * @example <div id={useId()} />\n * @param idOverride\n * @returns {string}\n */\nexport default function useId(idOverride) {\n  // React.useId() is only available from React 17.0.0.\n  if (maybeReactUseId !== undefined) {\n    const reactId = maybeReactUseId();\n    return idOverride ?? reactId;\n  }\n\n  // TODO: uncomment once we enable eslint-plugin-react-compiler // eslint-disable-next-line react-compiler/react-compiler\n  // eslint-disable-next-line react-hooks/rules-of-hooks -- `React.useId` is invariant at runtime.\n  return useGlobalId(idOverride);\n}","import preprocessStyles from \"./preprocessStyles.js\";\n\n/* eslint-disable @typescript-eslint/naming-convention */\n\n// We need to pass an argument as `{ theme }` for PigmentCSS, but we don't want to\n// allocate more objects.\nconst arg = {\n  theme: undefined\n};\n\n/**\n * Memoize style function on theme.\n * Intended to be used in styled() calls that only need access to the theme.\n */\nexport default function unstable_memoTheme(styleFn) {\n  let lastValue;\n  let lastTheme;\n  return function styleMemoized(props) {\n    let value = lastValue;\n    if (value === undefined || props.theme !== lastTheme) {\n      arg.theme = props.theme;\n      value = preprocessStyles(styleFn(arg));\n      lastValue = value;\n      lastTheme = props.theme;\n    }\n    return value;\n  };\n}","/**\n * The benefit of this function is to help developers get CSS var from theme without specifying the whole variable\n * and they does not need to remember the prefix (defined once).\n */\nexport default function createGetCssVar(prefix = '') {\n  function appendVar(...vars) {\n    if (!vars.length) {\n      return '';\n    }\n    const value = vars[0];\n    if (typeof value === 'string' && !value.match(/(#|\\(|\\)|(-?(\\d*\\.)?\\d+)(px|em|%|ex|ch|rem|vw|vh|vmin|vmax|cm|mm|in|pt|pc))|^(-?(\\d*\\.)?\\d+)$|(\\d+ \\d+ \\d+)/)) {\n      return `, var(--${prefix ? `${prefix}-` : ''}${value}${appendVar(...vars.slice(1))})`;\n    }\n    return `, ${value}`;\n  }\n\n  // AdditionalVars makes `getCssVar` less strict, so it can be use like this `getCssVar('non-mui-variable')` without type error.\n  const getCssVar = (field, ...fallbacks) => {\n    return `var(--${prefix ? `${prefix}-` : ''}${field}${appendVar(...fallbacks)})`;\n  };\n  return getCssVar;\n}","/**\n * This function create an object from keys, value and then assign to target\n *\n * @param {Object} obj : the target object to be assigned\n * @param {string[]} keys\n * @param {string | number} value\n *\n * @example\n * const source = {}\n * assignNestedKeys(source, ['palette', 'primary'], 'var(--palette-primary)')\n * console.log(source) // { palette: { primary: 'var(--palette-primary)' } }\n *\n * @example\n * const source = { palette: { primary: 'var(--palette-primary)' } }\n * assignNestedKeys(source, ['palette', 'secondary'], 'var(--palette-secondary)')\n * console.log(source) // { palette: { primary: 'var(--palette-primary)', secondary: 'var(--palette-secondary)' } }\n */\nexport const assignNestedKeys = (obj, keys, value, arrayKeys = []) => {\n  let temp = obj;\n  keys.forEach((k, index) => {\n    if (index === keys.length - 1) {\n      if (Array.isArray(temp)) {\n        temp[Number(k)] = value;\n      } else if (temp && typeof temp === 'object') {\n        temp[k] = value;\n      }\n    } else if (temp && typeof temp === 'object') {\n      if (!temp[k]) {\n        temp[k] = arrayKeys.includes(k) ? [] : {};\n      }\n      temp = temp[k];\n    }\n  });\n};\n\n/**\n *\n * @param {Object} obj : source object\n * @param {Function} callback : a function that will be called when\n *                   - the deepest key in source object is reached\n *                   - the value of the deepest key is NOT `undefined` | `null`\n *\n * @example\n * walkObjectDeep({ palette: { primary: { main: '#000000' } } }, console.log)\n * // ['palette', 'primary', 'main'] '#000000'\n */\nexport const walkObjectDeep = (obj, callback, shouldSkipPaths) => {\n  function recurse(object, parentKeys = [], arrayKeys = []) {\n    Object.entries(object).forEach(([key, value]) => {\n      if (!shouldSkipPaths || shouldSkipPaths && !shouldSkipPaths([...parentKeys, key])) {\n        if (value !== undefined && value !== null) {\n          if (typeof value === 'object' && Object.keys(value).length > 0) {\n            recurse(value, [...parentKeys, key], Array.isArray(value) ? [...arrayKeys, key] : arrayKeys);\n          } else {\n            callback([...parentKeys, key], value, arrayKeys);\n          }\n        }\n      }\n    });\n  }\n  recurse(obj);\n};\nconst getCssValue = (keys, value) => {\n  if (typeof value === 'number') {\n    if (['lineHeight', 'fontWeight', 'opacity', 'zIndex'].some(prop => keys.includes(prop))) {\n      // CSS property that are unitless\n      return value;\n    }\n    const lastKey = keys[keys.length - 1];\n    if (lastKey.toLowerCase().includes('opacity')) {\n      // opacity values are unitless\n      return value;\n    }\n    return `${value}px`;\n  }\n  return value;\n};\n\n/**\n * a function that parse theme and return { css, vars }\n *\n * @param {Object} theme\n * @param {{\n *  prefix?: string,\n *  shouldSkipGeneratingVar?: (objectPathKeys: Array<string>, value: string | number) => boolean\n * }} options.\n *  `prefix`: The prefix of the generated CSS variables. This function does not change the value.\n *\n * @returns {{ css: Object, vars: Object }} `css` is the stylesheet, `vars` is an object to get css variable (same structure as theme).\n *\n * @example\n * const { css, vars } = parser({\n *   fontSize: 12,\n *   lineHeight: 1.2,\n *   palette: { primary: { 500: 'var(--color)' } }\n * }, { prefix: 'foo' })\n *\n * console.log(css) // { '--foo-fontSize': '12px', '--foo-lineHeight': 1.2, '--foo-palette-primary-500': 'var(--color)' }\n * console.log(vars) // { fontSize: 'var(--foo-fontSize)', lineHeight: 'var(--foo-lineHeight)', palette: { primary: { 500: 'var(--foo-palette-primary-500)' } } }\n */\nexport default function cssVarsParser(theme, options) {\n  const {\n    prefix,\n    shouldSkipGeneratingVar\n  } = options || {};\n  const css = {};\n  const vars = {};\n  const varsWithDefaults = {};\n  walkObjectDeep(theme, (keys, value, arrayKeys) => {\n    if (typeof value === 'string' || typeof value === 'number') {\n      if (!shouldSkipGeneratingVar || !shouldSkipGeneratingVar(keys, value)) {\n        // only create css & var if `shouldSkipGeneratingVar` return false\n        const cssVar = `--${prefix ? `${prefix}-` : ''}${keys.join('-')}`;\n        const resolvedValue = getCssValue(keys, value);\n        Object.assign(css, {\n          [cssVar]: resolvedValue\n        });\n        assignNestedKeys(vars, keys, `var(${cssVar})`, arrayKeys);\n        assignNestedKeys(varsWithDefaults, keys, `var(${cssVar}, ${resolvedValue})`, arrayKeys);\n      }\n    }\n  }, keys => keys[0] === 'vars' // skip 'vars/*' paths\n  );\n  return {\n    css,\n    vars,\n    varsWithDefaults\n  };\n}","import deepmerge from '@mui/utils/deepmerge';\nimport cssVarsParser from \"./cssVarsParser.js\";\nfunction prepareCssVars(theme, parserConfig = {}) {\n  const {\n    getSelector = defaultGetSelector,\n    disableCssColorScheme,\n    colorSchemeSelector: selector,\n    enableContrastVars\n  } = parserConfig;\n  // @ts-ignore - ignore components do not exist\n  const {\n    colorSchemes = {},\n    components,\n    defaultColorScheme = 'light',\n    ...otherTheme\n  } = theme;\n  const {\n    vars: rootVars,\n    css: rootCss,\n    varsWithDefaults: rootVarsWithDefaults\n  } = cssVarsParser(otherTheme, parserConfig);\n  let themeVars = rootVarsWithDefaults;\n  const colorSchemesMap = {};\n  const {\n    [defaultColorScheme]: defaultScheme,\n    ...otherColorSchemes\n  } = colorSchemes;\n  Object.entries(otherColorSchemes || {}).forEach(([key, scheme]) => {\n    const {\n      vars,\n      css,\n      varsWithDefaults\n    } = cssVarsParser(scheme, parserConfig);\n    themeVars = deepmerge(themeVars, varsWithDefaults);\n    colorSchemesMap[key] = {\n      css,\n      vars\n    };\n  });\n  if (defaultScheme) {\n    // default color scheme vars should be merged last to set as default\n    const {\n      css,\n      vars,\n      varsWithDefaults\n    } = cssVarsParser(defaultScheme, parserConfig);\n    themeVars = deepmerge(themeVars, varsWithDefaults);\n    colorSchemesMap[defaultColorScheme] = {\n      css,\n      vars\n    };\n  }\n  function defaultGetSelector(colorScheme, cssObject) {\n    let rule = selector;\n    if (selector === 'class') {\n      rule = '.%s';\n    }\n    if (selector === 'data') {\n      rule = '[data-%s]';\n    }\n    if (selector?.startsWith('data-') && !selector.includes('%s')) {\n      // 'data-joy-color-scheme' -> '[data-joy-color-scheme=\"%s\"]'\n      rule = `[${selector}=\"%s\"]`;\n    }\n    if (colorScheme) {\n      if (rule === 'media') {\n        if (theme.defaultColorScheme === colorScheme) {\n          return ':root';\n        }\n        const mode = colorSchemes[colorScheme]?.palette?.mode || colorScheme;\n        return {\n          [`@media (prefers-color-scheme: ${mode})`]: {\n            ':root': cssObject\n          }\n        };\n      }\n      if (rule) {\n        if (theme.defaultColorScheme === colorScheme) {\n          return `:root, ${rule.replace('%s', String(colorScheme))}`;\n        }\n        return rule.replace('%s', String(colorScheme));\n      }\n    }\n    return ':root';\n  }\n  const generateThemeVars = () => {\n    let vars = {\n      ...rootVars\n    };\n    Object.entries(colorSchemesMap).forEach(([, {\n      vars: schemeVars\n    }]) => {\n      vars = deepmerge(vars, schemeVars);\n    });\n    return vars;\n  };\n  const generateStyleSheets = () => {\n    const stylesheets = [];\n    const colorScheme = theme.defaultColorScheme || 'light';\n    function insertStyleSheet(key, css) {\n      if (Object.keys(css).length) {\n        stylesheets.push(typeof key === 'string' ? {\n          [key]: {\n            ...css\n          }\n        } : key);\n      }\n    }\n    insertStyleSheet(getSelector(undefined, {\n      ...rootCss\n    }), rootCss);\n    const {\n      [colorScheme]: defaultSchemeVal,\n      ...other\n    } = colorSchemesMap;\n    if (defaultSchemeVal) {\n      // default color scheme has to come before other color schemes\n      const {\n        css\n      } = defaultSchemeVal;\n      const cssColorSheme = colorSchemes[colorScheme]?.palette?.mode;\n      const finalCss = !disableCssColorScheme && cssColorSheme ? {\n        colorScheme: cssColorSheme,\n        ...css\n      } : {\n        ...css\n      };\n      insertStyleSheet(getSelector(colorScheme, {\n        ...finalCss\n      }), finalCss);\n    }\n    Object.entries(other).forEach(([key, {\n      css\n    }]) => {\n      const cssColorSheme = colorSchemes[key]?.palette?.mode;\n      const finalCss = !disableCssColorScheme && cssColorSheme ? {\n        colorScheme: cssColorSheme,\n        ...css\n      } : {\n        ...css\n      };\n      insertStyleSheet(getSelector(key, {\n        ...finalCss\n      }), finalCss);\n    });\n    if (enableContrastVars) {\n      stylesheets.push({\n        ':root': {\n          // use double underscore to indicate that these are private variables\n          '--__l-threshold': '0.7',\n          '--__l': 'clamp(0, (l / var(--__l-threshold) - 1) * -infinity, 1)',\n          '--__a': 'clamp(0.87, (l / var(--__l-threshold) - 1) * -infinity, 1)' // 0.87 is the default alpha value for black text.\n        }\n      });\n    }\n    return stylesheets;\n  };\n  return {\n    vars: themeVars,\n    generateThemeVars,\n    generateStyleSheets\n  };\n}\nexport default prepareCssVars;","/* eslint-disable import/prefer-default-export */\nexport function createGetColorSchemeSelector(selector) {\n  return function getColorSchemeSelector(colorScheme) {\n    if (selector === 'media') {\n      if (process.env.NODE_ENV !== 'production') {\n        if (colorScheme !== 'light' && colorScheme !== 'dark') {\n          console.error(`MUI: @media (prefers-color-scheme) supports only 'light' or 'dark', but receive '${colorScheme}'.`);\n        }\n      }\n      return `@media (prefers-color-scheme: ${colorScheme})`;\n    }\n    if (selector) {\n      if (selector.startsWith('data-') && !selector.includes('%s')) {\n        return `[${selector}=\"${colorScheme}\"] &`;\n      }\n      if (selector === 'class') {\n        return `.${colorScheme} &`;\n      }\n      if (selector === 'data') {\n        return `[data-${colorScheme}] &`;\n      }\n      return `${selector.replace('%s', colorScheme)} &`;\n    }\n    return '&';\n  };\n}","import * as React from 'react';\nexport default function isMuiElement(element, muiNames) {\n  return /*#__PURE__*/React.isValidElement(element) && muiNames.indexOf(\n  // For server components `muiName` is available in element.type._payload.value.muiName\n  // relevant info - https://github.com/facebook/react/blob/2807d781a08db8e9873687fccc25c0f12b4fb3d4/packages/react/src/ReactLazy.js#L45\n  // eslint-disable-next-line no-underscore-dangle\n  element.type.muiName ?? element.type?._payload?.value?.muiName) !== -1;\n}","export const filterBreakpointKeys = (breakpointsKeys, responsiveKeys) => breakpointsKeys.filter(key => responsiveKeys.includes(key));\nexport const traverseBreakpoints = (breakpoints, responsive, iterator) => {\n  const smallestBreakpoint = breakpoints.keys[0]; // the keys is sorted from smallest to largest by `createBreakpoints`.\n\n  if (Array.isArray(responsive)) {\n    responsive.forEach((breakpointValue, index) => {\n      iterator((responsiveStyles, style) => {\n        if (index <= breakpoints.keys.length - 1) {\n          if (index === 0) {\n            Object.assign(responsiveStyles, style);\n          } else {\n            responsiveStyles[breakpoints.up(breakpoints.keys[index])] = style;\n          }\n        }\n      }, breakpointValue);\n    });\n  } else if (responsive && typeof responsive === 'object') {\n    // prevent null\n    // responsive could be a very big object, pick the smallest responsive values\n\n    const keys = Object.keys(responsive).length > breakpoints.keys.length ? breakpoints.keys : filterBreakpointKeys(breakpoints.keys, Object.keys(responsive));\n    keys.forEach(key => {\n      if (breakpoints.keys.includes(key)) {\n        // @ts-ignore already checked that responsive is an object\n        const breakpointValue = responsive[key];\n        if (breakpointValue !== undefined) {\n          iterator((responsiveStyles, style) => {\n            if (smallestBreakpoint === key) {\n              Object.assign(responsiveStyles, style);\n            } else {\n              responsiveStyles[breakpoints.up(key)] = style;\n            }\n          }, breakpointValue);\n        }\n      }\n    });\n  } else if (typeof responsive === 'number' || typeof responsive === 'string') {\n    iterator((responsiveStyles, style) => {\n      Object.assign(responsiveStyles, style);\n    }, responsive);\n  }\n};","import { traverseBreakpoints } from \"./traverseBreakpoints.js\";\nfunction getSelfSpacingVar(axis) {\n  return `--Grid-${axis}Spacing`;\n}\nfunction getParentSpacingVar(axis) {\n  return `--Grid-parent-${axis}Spacing`;\n}\nconst selfColumnsVar = '--Grid-columns';\nconst parentColumnsVar = '--Grid-parent-columns';\nexport const generateGridSizeStyles = ({\n  theme,\n  ownerState\n}) => {\n  const styles = {};\n  traverseBreakpoints(theme.breakpoints, ownerState.size, (appendStyle, value) => {\n    let style = {};\n    if (value === 'grow') {\n      style = {\n        flexBasis: 0,\n        flexGrow: 1,\n        maxWidth: '100%'\n      };\n    }\n    if (value === 'auto') {\n      style = {\n        flexBasis: 'auto',\n        flexGrow: 0,\n        flexShrink: 0,\n        maxWidth: 'none',\n        width: 'auto'\n      };\n    }\n    if (typeof value === 'number') {\n      style = {\n        flexGrow: 0,\n        flexBasis: 'auto',\n        width: `calc(100% * ${value} / var(${parentColumnsVar}) - (var(${parentColumnsVar}) - ${value}) * (var(${getParentSpacingVar('column')}) / var(${parentColumnsVar})))`\n      };\n    }\n    appendStyle(styles, style);\n  });\n  return styles;\n};\nexport const generateGridOffsetStyles = ({\n  theme,\n  ownerState\n}) => {\n  const styles = {};\n  traverseBreakpoints(theme.breakpoints, ownerState.offset, (appendStyle, value) => {\n    let style = {};\n    if (value === 'auto') {\n      style = {\n        marginLeft: 'auto'\n      };\n    }\n    if (typeof value === 'number') {\n      style = {\n        marginLeft: value === 0 ? '0px' : `calc(100% * ${value} / var(${parentColumnsVar}) + var(${getParentSpacingVar('column')}) * ${value} / var(${parentColumnsVar}))`\n      };\n    }\n    appendStyle(styles, style);\n  });\n  return styles;\n};\nexport const generateGridColumnsStyles = ({\n  theme,\n  ownerState\n}) => {\n  if (!ownerState.container) {\n    return {};\n  }\n  const styles = {\n    [selfColumnsVar]: 12\n  };\n  traverseBreakpoints(theme.breakpoints, ownerState.columns, (appendStyle, value) => {\n    const columns = value ?? 12;\n    appendStyle(styles, {\n      [selfColumnsVar]: columns,\n      '> *': {\n        [parentColumnsVar]: columns\n      }\n    });\n  });\n  return styles;\n};\nexport const generateGridRowSpacingStyles = ({\n  theme,\n  ownerState\n}) => {\n  if (!ownerState.container) {\n    return {};\n  }\n  const styles = {};\n  traverseBreakpoints(theme.breakpoints, ownerState.rowSpacing, (appendStyle, value) => {\n    const spacing = typeof value === 'string' ? value : theme.spacing?.(value);\n    appendStyle(styles, {\n      [getSelfSpacingVar('row')]: spacing,\n      '> *': {\n        [getParentSpacingVar('row')]: spacing\n      }\n    });\n  });\n  return styles;\n};\nexport const generateGridColumnSpacingStyles = ({\n  theme,\n  ownerState\n}) => {\n  if (!ownerState.container) {\n    return {};\n  }\n  const styles = {};\n  traverseBreakpoints(theme.breakpoints, ownerState.columnSpacing, (appendStyle, value) => {\n    const spacing = typeof value === 'string' ? value : theme.spacing?.(value);\n    appendStyle(styles, {\n      [getSelfSpacingVar('column')]: spacing,\n      '> *': {\n        [getParentSpacingVar('column')]: spacing\n      }\n    });\n  });\n  return styles;\n};\nexport const generateGridDirectionStyles = ({\n  theme,\n  ownerState\n}) => {\n  if (!ownerState.container) {\n    return {};\n  }\n  const styles = {};\n  traverseBreakpoints(theme.breakpoints, ownerState.direction, (appendStyle, value) => {\n    appendStyle(styles, {\n      flexDirection: value\n    });\n  });\n  return styles;\n};\nexport const generateGridStyles = ({\n  ownerState\n}) => {\n  return {\n    minWidth: 0,\n    boxSizing: 'border-box',\n    ...(ownerState.container && {\n      display: 'flex',\n      flexWrap: 'wrap',\n      ...(ownerState.wrap && ownerState.wrap !== 'wrap' && {\n        flexWrap: ownerState.wrap\n      }),\n      gap: `var(${getSelfSpacingVar('row')}) var(${getSelfSpacingVar('column')})`\n    })\n  };\n};\nexport const generateSizeClassNames = size => {\n  const classNames = [];\n  Object.entries(size).forEach(([key, value]) => {\n    if (value !== false && value !== undefined) {\n      classNames.push(`grid-${key}-${String(value)}`);\n    }\n  });\n  return classNames;\n};\nexport const generateSpacingClassNames = (spacing, smallestBreakpoint = 'xs') => {\n  function isValidSpacing(val) {\n    if (val === undefined) {\n      return false;\n    }\n    return typeof val === 'string' && !Number.isNaN(Number(val)) || typeof val === 'number' && val > 0;\n  }\n  if (isValidSpacing(spacing)) {\n    return [`spacing-${smallestBreakpoint}-${String(spacing)}`];\n  }\n  if (typeof spacing === 'object' && !Array.isArray(spacing)) {\n    const classNames = [];\n    Object.entries(spacing).forEach(([key, value]) => {\n      if (isValidSpacing(value)) {\n        classNames.push(`spacing-${key}-${String(value)}`);\n      }\n    });\n    return classNames;\n  }\n  return [];\n};\nexport const generateDirectionClasses = direction => {\n  if (direction === undefined) {\n    return [];\n  }\n  if (typeof direction === 'object') {\n    return Object.entries(direction).map(([key, value]) => `direction-${key}-${value}`);\n  }\n  return [`direction-xs-${String(direction)}`];\n};","const getLegacyGridWarning = propName => {\n  if (['item', 'zeroMinWidth'].includes(propName)) {\n    return `The \\`${propName}\\` prop has been removed and is no longer necessary. You can safely remove it.`;\n  }\n\n  // #host-reference\n  return `The \\`${propName}\\` prop has been removed. See https://v7.mui.com/material-ui/migration/upgrade-to-grid-v2/ for migration instructions.`;\n};\nconst warnedAboutProps = [];\n\n/**\n * Deletes the legacy Grid component props from the `props` object and warns once about them if found.\n *\n * @param {object} props The props object to remove the legacy Grid props from.\n * @param {Breakpoints} breakpoints The breakpoints object.\n */\nexport default function deleteLegacyGridProps(props, breakpoints) {\n  const propsToWarn = [];\n  if (props.item !== undefined) {\n    delete props.item;\n    propsToWarn.push('item');\n  }\n  if (props.zeroMinWidth !== undefined) {\n    delete props.zeroMinWidth;\n    propsToWarn.push('zeroMinWidth');\n  }\n  breakpoints.keys.forEach(breakpoint => {\n    if (props[breakpoint] !== undefined) {\n      propsToWarn.push(breakpoint);\n      delete props[breakpoint];\n    }\n  });\n  if (process.env.NODE_ENV !== 'production') {\n    propsToWarn.forEach(prop => {\n      if (!warnedAboutProps.includes(prop)) {\n        warnedAboutProps.push(prop);\n        console.warn(`MUI Grid: ${getLegacyGridWarning(prop)}\\n`);\n      }\n    });\n  }\n}","'use client';\n\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport isMuiElement from '@mui/utils/isMuiElement';\nimport generateUtilityClass from '@mui/utils/generateUtilityClass';\nimport composeClasses from '@mui/utils/composeClasses';\nimport systemStyled from \"../styled/index.js\";\nimport useThemePropsSystem from \"../useThemeProps/index.js\";\nimport useThemeSystem from \"../useTheme/index.js\";\nimport { extendSxProp } from \"../styleFunctionSx/index.js\";\nimport createTheme from \"../createTheme/index.js\";\nimport { generateGridStyles, generateGridSizeStyles, generateGridColumnsStyles, generateGridColumnSpacingStyles, generateGridRowSpacingStyles, generateGridDirectionStyles, generateGridOffsetStyles, generateSizeClassNames, generateSpacingClassNames, generateDirectionClasses } from \"./gridGenerator.js\";\nimport deleteLegacyGridProps from \"./deleteLegacyGridProps.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nconst defaultTheme = createTheme();\n\n// widening Theme to any so that the consumer can own the theme structure.\nconst defaultCreateStyledComponent = systemStyled('div', {\n  name: 'MuiGrid',\n  slot: 'Root'\n});\nfunction useThemePropsDefault(props) {\n  return useThemePropsSystem({\n    props,\n    name: 'MuiGrid',\n    defaultTheme\n  });\n}\nexport default function createGrid(options = {}) {\n  const {\n    // This will allow adding custom styled fn (for example for custom sx style function)\n    createStyledComponent = defaultCreateStyledComponent,\n    useThemeProps = useThemePropsDefault,\n    useTheme = useThemeSystem,\n    componentName = 'MuiGrid'\n  } = options;\n  const useUtilityClasses = (ownerState, theme) => {\n    const {\n      container,\n      direction,\n      spacing,\n      wrap,\n      size\n    } = ownerState;\n    const slots = {\n      root: ['root', container && 'container', wrap !== 'wrap' && `wrap-xs-${String(wrap)}`, ...generateDirectionClasses(direction), ...generateSizeClassNames(size), ...(container ? generateSpacingClassNames(spacing, theme.breakpoints.keys[0]) : [])]\n    };\n    return composeClasses(slots, slot => generateUtilityClass(componentName, slot), {});\n  };\n  function parseResponsiveProp(propValue, breakpoints, shouldUseValue = () => true) {\n    const parsedProp = {};\n    if (propValue === null) {\n      return parsedProp;\n    }\n    if (Array.isArray(propValue)) {\n      propValue.forEach((value, index) => {\n        if (value !== null && shouldUseValue(value) && breakpoints.keys[index]) {\n          parsedProp[breakpoints.keys[index]] = value;\n        }\n      });\n    } else if (typeof propValue === 'object') {\n      Object.keys(propValue).forEach(key => {\n        const value = propValue[key];\n        if (value !== null && value !== undefined && shouldUseValue(value)) {\n          parsedProp[key] = value;\n        }\n      });\n    } else {\n      parsedProp[breakpoints.keys[0]] = propValue;\n    }\n    return parsedProp;\n  }\n  const GridRoot = createStyledComponent(generateGridColumnsStyles, generateGridColumnSpacingStyles, generateGridRowSpacingStyles, generateGridSizeStyles, generateGridDirectionStyles, generateGridStyles, generateGridOffsetStyles);\n  const Grid = /*#__PURE__*/React.forwardRef(function Grid(inProps, ref) {\n    const theme = useTheme();\n    const themeProps = useThemeProps(inProps);\n    const props = extendSxProp(themeProps); // `color` type conflicts with html color attribute.\n\n    // TODO v8: Remove when removing the legacy Grid component\n    deleteLegacyGridProps(props, theme.breakpoints);\n    const {\n      className,\n      children,\n      columns: columnsProp = 12,\n      container = false,\n      component = 'div',\n      direction = 'row',\n      wrap = 'wrap',\n      size: sizeProp = {},\n      offset: offsetProp = {},\n      spacing: spacingProp = 0,\n      rowSpacing: rowSpacingProp = spacingProp,\n      columnSpacing: columnSpacingProp = spacingProp,\n      unstable_level: level = 0,\n      ...other\n    } = props;\n    const size = parseResponsiveProp(sizeProp, theme.breakpoints, val => val !== false);\n    const offset = parseResponsiveProp(offsetProp, theme.breakpoints);\n    const columns = inProps.columns ?? (level ? undefined : columnsProp);\n    const spacing = inProps.spacing ?? (level ? undefined : spacingProp);\n    const rowSpacing = inProps.rowSpacing ?? inProps.spacing ?? (level ? undefined : rowSpacingProp);\n    const columnSpacing = inProps.columnSpacing ?? inProps.spacing ?? (level ? undefined : columnSpacingProp);\n    const ownerState = {\n      ...props,\n      level,\n      columns,\n      container,\n      direction,\n      wrap,\n      spacing,\n      rowSpacing,\n      columnSpacing,\n      size,\n      offset\n    };\n    const classes = useUtilityClasses(ownerState, theme);\n    return /*#__PURE__*/_jsx(GridRoot, {\n      ref: ref,\n      as: component,\n      ownerState: ownerState,\n      className: clsx(classes.root, className),\n      ...other,\n      children: React.Children.map(children, child => {\n        if (/*#__PURE__*/React.isValidElement(child) && isMuiElement(child, ['Grid']) && container && child.props.container) {\n          return /*#__PURE__*/React.cloneElement(child, {\n            unstable_level: child.props?.unstable_level ?? level + 1\n          });\n        }\n        return child;\n      })\n    });\n  });\n  process.env.NODE_ENV !== \"production\" ? Grid.propTypes /* remove-proptypes */ = {\n    children: PropTypes.node,\n    className: PropTypes.string,\n    columns: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.number), PropTypes.number, PropTypes.object]),\n    columnSpacing: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.number, PropTypes.string])), PropTypes.number, PropTypes.object, PropTypes.string]),\n    component: PropTypes.elementType,\n    container: PropTypes.bool,\n    direction: PropTypes.oneOfType([PropTypes.oneOf(['column-reverse', 'column', 'row-reverse', 'row']), PropTypes.arrayOf(PropTypes.oneOf(['column-reverse', 'column', 'row-reverse', 'row'])), PropTypes.object]),\n    offset: PropTypes.oneOfType([PropTypes.string, PropTypes.number, PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.string, PropTypes.number])), PropTypes.object]),\n    rowSpacing: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.number, PropTypes.string])), PropTypes.number, PropTypes.object, PropTypes.string]),\n    size: PropTypes.oneOfType([PropTypes.string, PropTypes.bool, PropTypes.number, PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.string, PropTypes.bool, PropTypes.number])), PropTypes.object]),\n    spacing: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.number, PropTypes.string])), PropTypes.number, PropTypes.object, PropTypes.string]),\n    sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object]),\n    wrap: PropTypes.oneOf(['nowrap', 'wrap-reverse', 'wrap'])\n  } : void 0;\n\n  // @ts-ignore internal logic for nested grid\n  Grid.muiName = 'Grid';\n  return Grid;\n}","const common = {\n  black: '#000',\n  white: '#fff'\n};\nexport default common;","const grey = {\n  50: '#fafafa',\n  100: '#f5f5f5',\n  200: '#eeeeee',\n  300: '#e0e0e0',\n  400: '#bdbdbd',\n  500: '#9e9e9e',\n  600: '#757575',\n  700: '#616161',\n  800: '#424242',\n  900: '#212121',\n  A100: '#f5f5f5',\n  A200: '#eeeeee',\n  A400: '#bdbdbd',\n  A700: '#616161'\n};\nexport default grey;","const purple = {\n  50: '#f3e5f5',\n  100: '#e1bee7',\n  200: '#ce93d8',\n  300: '#ba68c8',\n  400: '#ab47bc',\n  500: '#9c27b0',\n  600: '#8e24aa',\n  700: '#7b1fa2',\n  800: '#6a1b9a',\n  900: '#4a148c',\n  A100: '#ea80fc',\n  A200: '#e040fb',\n  A400: '#d500f9',\n  A700: '#aa00ff'\n};\nexport default purple;","const red = {\n  50: '#ffebee',\n  100: '#ffcdd2',\n  200: '#ef9a9a',\n  300: '#e57373',\n  400: '#ef5350',\n  500: '#f44336',\n  600: '#e53935',\n  700: '#d32f2f',\n  800: '#c62828',\n  900: '#b71c1c',\n  A100: '#ff8a80',\n  A200: '#ff5252',\n  A400: '#ff1744',\n  A700: '#d50000'\n};\nexport default red;","const orange = {\n  50: '#fff3e0',\n  100: '#ffe0b2',\n  200: '#ffcc80',\n  300: '#ffb74d',\n  400: '#ffa726',\n  500: '#ff9800',\n  600: '#fb8c00',\n  700: '#f57c00',\n  800: '#ef6c00',\n  900: '#e65100',\n  A100: '#ffd180',\n  A200: '#ffab40',\n  A400: '#ff9100',\n  A700: '#ff6d00'\n};\nexport default orange;","const blue = {\n  50: '#e3f2fd',\n  100: '#bbdefb',\n  200: '#90caf9',\n  300: '#64b5f6',\n  400: '#42a5f5',\n  500: '#2196f3',\n  600: '#1e88e5',\n  700: '#1976d2',\n  800: '#1565c0',\n  900: '#0d47a1',\n  A100: '#82b1ff',\n  A200: '#448aff',\n  A400: '#2979ff',\n  A700: '#2962ff'\n};\nexport default blue;","const lightBlue = {\n  50: '#e1f5fe',\n  100: '#b3e5fc',\n  200: '#81d4fa',\n  300: '#4fc3f7',\n  400: '#29b6f6',\n  500: '#03a9f4',\n  600: '#039be5',\n  700: '#0288d1',\n  800: '#0277bd',\n  900: '#01579b',\n  A100: '#80d8ff',\n  A200: '#40c4ff',\n  A400: '#00b0ff',\n  A700: '#0091ea'\n};\nexport default lightBlue;","const green = {\n  50: '#e8f5e9',\n  100: '#c8e6c9',\n  200: '#a5d6a7',\n  300: '#81c784',\n  400: '#66bb6a',\n  500: '#4caf50',\n  600: '#43a047',\n  700: '#388e3c',\n  800: '#2e7d32',\n  900: '#1b5e20',\n  A100: '#b9f6ca',\n  A200: '#69f0ae',\n  A400: '#00e676',\n  A700: '#00c853'\n};\nexport default green;","import _formatErrorMessage from \"@mui/utils/formatMuiErrorMessage\";\nimport deepmerge from '@mui/utils/deepmerge';\nimport { darken, getContrastRatio, lighten } from '@mui/system/colorManipulator';\nimport common from \"../colors/common.js\";\nimport grey from \"../colors/grey.js\";\nimport purple from \"../colors/purple.js\";\nimport red from \"../colors/red.js\";\nimport orange from \"../colors/orange.js\";\nimport blue from \"../colors/blue.js\";\nimport lightBlue from \"../colors/lightBlue.js\";\nimport green from \"../colors/green.js\";\nfunction getLight() {\n  return {\n    // The colors used to style the text.\n    text: {\n      // The most important text.\n      primary: 'rgba(0, 0, 0, 0.87)',\n      // Secondary text.\n      secondary: 'rgba(0, 0, 0, 0.6)',\n      // Disabled text have even lower visual prominence.\n      disabled: 'rgba(0, 0, 0, 0.38)'\n    },\n    // The color used to divide different elements.\n    divider: 'rgba(0, 0, 0, 0.12)',\n    // The background colors used to style the surfaces.\n    // Consistency between these values is important.\n    background: {\n      paper: common.white,\n      default: common.white\n    },\n    // The colors used to style the action elements.\n    action: {\n      // The color of an active action like an icon button.\n      active: 'rgba(0, 0, 0, 0.54)',\n      // The color of an hovered action.\n      hover: 'rgba(0, 0, 0, 0.04)',\n      hoverOpacity: 0.04,\n      // The color of a selected action.\n      selected: 'rgba(0, 0, 0, 0.08)',\n      selectedOpacity: 0.08,\n      // The color of a disabled action.\n      disabled: 'rgba(0, 0, 0, 0.26)',\n      // The background color of a disabled action.\n      disabledBackground: 'rgba(0, 0, 0, 0.12)',\n      disabledOpacity: 0.38,\n      focus: 'rgba(0, 0, 0, 0.12)',\n      focusOpacity: 0.12,\n      activatedOpacity: 0.12\n    }\n  };\n}\nexport const light = getLight();\nfunction getDark() {\n  return {\n    text: {\n      primary: common.white,\n      secondary: 'rgba(255, 255, 255, 0.7)',\n      disabled: 'rgba(255, 255, 255, 0.5)',\n      icon: 'rgba(255, 255, 255, 0.5)'\n    },\n    divider: 'rgba(255, 255, 255, 0.12)',\n    background: {\n      paper: '#121212',\n      default: '#121212'\n    },\n    action: {\n      active: common.white,\n      hover: 'rgba(255, 255, 255, 0.08)',\n      hoverOpacity: 0.08,\n      selected: 'rgba(255, 255, 255, 0.16)',\n      selectedOpacity: 0.16,\n      disabled: 'rgba(255, 255, 255, 0.3)',\n      disabledBackground: 'rgba(255, 255, 255, 0.12)',\n      disabledOpacity: 0.38,\n      focus: 'rgba(255, 255, 255, 0.12)',\n      focusOpacity: 0.12,\n      activatedOpacity: 0.24\n    }\n  };\n}\nexport const dark = getDark();\nfunction addLightOrDark(intent, direction, shade, tonalOffset) {\n  const tonalOffsetLight = tonalOffset.light || tonalOffset;\n  const tonalOffsetDark = tonalOffset.dark || tonalOffset * 1.5;\n  if (!intent[direction]) {\n    if (intent.hasOwnProperty(shade)) {\n      intent[direction] = intent[shade];\n    } else if (direction === 'light') {\n      intent.light = lighten(intent.main, tonalOffsetLight);\n    } else if (direction === 'dark') {\n      intent.dark = darken(intent.main, tonalOffsetDark);\n    }\n  }\n}\nfunction mixLightOrDark(colorSpace, intent, direction, shade, tonalOffset) {\n  const tonalOffsetLight = tonalOffset.light || tonalOffset;\n  const tonalOffsetDark = tonalOffset.dark || tonalOffset * 1.5;\n  if (!intent[direction]) {\n    if (intent.hasOwnProperty(shade)) {\n      intent[direction] = intent[shade];\n    } else if (direction === 'light') {\n      intent.light = `color-mix(in ${colorSpace}, ${intent.main}, #fff ${(tonalOffsetLight * 100).toFixed(0)}%)`;\n    } else if (direction === 'dark') {\n      intent.dark = `color-mix(in ${colorSpace}, ${intent.main}, #000 ${(tonalOffsetDark * 100).toFixed(0)}%)`;\n    }\n  }\n}\nfunction getDefaultPrimary(mode = 'light') {\n  if (mode === 'dark') {\n    return {\n      main: blue[200],\n      light: blue[50],\n      dark: blue[400]\n    };\n  }\n  return {\n    main: blue[700],\n    light: blue[400],\n    dark: blue[800]\n  };\n}\nfunction getDefaultSecondary(mode = 'light') {\n  if (mode === 'dark') {\n    return {\n      main: purple[200],\n      light: purple[50],\n      dark: purple[400]\n    };\n  }\n  return {\n    main: purple[500],\n    light: purple[300],\n    dark: purple[700]\n  };\n}\nfunction getDefaultError(mode = 'light') {\n  if (mode === 'dark') {\n    return {\n      main: red[500],\n      light: red[300],\n      dark: red[700]\n    };\n  }\n  return {\n    main: red[700],\n    light: red[400],\n    dark: red[800]\n  };\n}\nfunction getDefaultInfo(mode = 'light') {\n  if (mode === 'dark') {\n    return {\n      main: lightBlue[400],\n      light: lightBlue[300],\n      dark: lightBlue[700]\n    };\n  }\n  return {\n    main: lightBlue[700],\n    light: lightBlue[500],\n    dark: lightBlue[900]\n  };\n}\nfunction getDefaultSuccess(mode = 'light') {\n  if (mode === 'dark') {\n    return {\n      main: green[400],\n      light: green[300],\n      dark: green[700]\n    };\n  }\n  return {\n    main: green[800],\n    light: green[500],\n    dark: green[900]\n  };\n}\nfunction getDefaultWarning(mode = 'light') {\n  if (mode === 'dark') {\n    return {\n      main: orange[400],\n      light: orange[300],\n      dark: orange[700]\n    };\n  }\n  return {\n    main: '#ed6c02',\n    // closest to orange[800] that pass 3:1.\n    light: orange[500],\n    dark: orange[900]\n  };\n}\n\n// Use the same name as the experimental CSS `contrast-color` function.\nexport function contrastColor(background) {\n  return `oklch(from ${background} var(--__l) 0 h / var(--__a))`;\n}\nexport default function createPalette(palette) {\n  const {\n    mode = 'light',\n    contrastThreshold = 3,\n    tonalOffset = 0.2,\n    colorSpace,\n    ...other\n  } = palette;\n  const primary = palette.primary || getDefaultPrimary(mode);\n  const secondary = palette.secondary || getDefaultSecondary(mode);\n  const error = palette.error || getDefaultError(mode);\n  const info = palette.info || getDefaultInfo(mode);\n  const success = palette.success || getDefaultSuccess(mode);\n  const warning = palette.warning || getDefaultWarning(mode);\n\n  // Use the same logic as\n  // Bootstrap: https://github.com/twbs/bootstrap/blob/1d6e3710dd447de1a200f29e8fa521f8a0908f70/scss/_functions.scss#L59\n  // and material-components-web https://github.com/material-components/material-components-web/blob/ac46b8863c4dab9fc22c4c662dc6bd1b65dd652f/packages/mdc-theme/_functions.scss#L54\n  function getContrastText(background) {\n    if (colorSpace) {\n      return contrastColor(background);\n    }\n    const contrastText = getContrastRatio(background, dark.text.primary) >= contrastThreshold ? dark.text.primary : light.text.primary;\n    if (process.env.NODE_ENV !== 'production') {\n      const contrast = getContrastRatio(background, contrastText);\n      if (contrast < 3) {\n        console.error([`MUI: The contrast ratio of ${contrast}:1 for ${contrastText} on ${background}`, 'falls below the WCAG recommended absolute minimum contrast ratio of 3:1.', 'https://www.w3.org/TR/2008/REC-WCAG20-20081211/#visual-audio-contrast-contrast'].join('\\n'));\n      }\n    }\n    return contrastText;\n  }\n  const augmentColor = ({\n    color,\n    name,\n    mainShade = 500,\n    lightShade = 300,\n    darkShade = 700\n  }) => {\n    color = {\n      ...color\n    };\n    if (!color.main && color[mainShade]) {\n      color.main = color[mainShade];\n    }\n    if (!color.hasOwnProperty('main')) {\n      throw new Error(process.env.NODE_ENV !== \"production\" ? `MUI: The color${name ? ` (${name})` : ''} provided to augmentColor(color) is invalid.\\n` + `The color object needs to have a \\`main\\` property or a \\`${mainShade}\\` property.` : _formatErrorMessage(11, name ? ` (${name})` : '', mainShade));\n    }\n    if (typeof color.main !== 'string') {\n      throw new Error(process.env.NODE_ENV !== \"production\" ? `MUI: The color${name ? ` (${name})` : ''} provided to augmentColor(color) is invalid.\\n` + `\\`color.main\\` should be a string, but \\`${JSON.stringify(color.main)}\\` was provided instead.\\n` + '\\n' + 'Did you intend to use one of the following approaches?\\n' + '\\n' + 'import { green } from \"@mui/material/colors\";\\n' + '\\n' + 'const theme1 = createTheme({ palette: {\\n' + '  primary: green,\\n' + '} });\\n' + '\\n' + 'const theme2 = createTheme({ palette: {\\n' + '  primary: { main: green[500] },\\n' + '} });' : _formatErrorMessage(12, name ? ` (${name})` : '', JSON.stringify(color.main)));\n    }\n    if (colorSpace) {\n      mixLightOrDark(colorSpace, color, 'light', lightShade, tonalOffset);\n      mixLightOrDark(colorSpace, color, 'dark', darkShade, tonalOffset);\n    } else {\n      addLightOrDark(color, 'light', lightShade, tonalOffset);\n      addLightOrDark(color, 'dark', darkShade, tonalOffset);\n    }\n    if (!color.contrastText) {\n      color.contrastText = getContrastText(color.main);\n    }\n    return color;\n  };\n  let modeHydrated;\n  if (mode === 'light') {\n    modeHydrated = getLight();\n  } else if (mode === 'dark') {\n    modeHydrated = getDark();\n  }\n  if (process.env.NODE_ENV !== 'production') {\n    if (!modeHydrated) {\n      console.error(`MUI: The palette mode \\`${mode}\\` is not supported.`);\n    }\n  }\n  const paletteOutput = deepmerge({\n    // A collection of common colors.\n    common: {\n      ...common\n    },\n    // prevent mutable object.\n    // The palette mode, can be light or dark.\n    mode,\n    // The colors used to represent primary interface elements for a user.\n    primary: augmentColor({\n      color: primary,\n      name: 'primary'\n    }),\n    // The colors used to represent secondary interface elements for a user.\n    secondary: augmentColor({\n      color: secondary,\n      name: 'secondary',\n      mainShade: 'A400',\n      lightShade: 'A200',\n      darkShade: 'A700'\n    }),\n    // The colors used to represent interface elements that the user should be made aware of.\n    error: augmentColor({\n      color: error,\n      name: 'error'\n    }),\n    // The colors used to represent potentially dangerous actions or important messages.\n    warning: augmentColor({\n      color: warning,\n      name: 'warning'\n    }),\n    // The colors used to present information to the user that is neutral and not necessarily important.\n    info: augmentColor({\n      color: info,\n      name: 'info'\n    }),\n    // The colors used to indicate the successful completion of an action that user triggered.\n    success: augmentColor({\n      color: success,\n      name: 'success'\n    }),\n    // The grey colors.\n    grey,\n    // Used by `getContrastText()` to maximize the contrast between\n    // the background and the text.\n    contrastThreshold,\n    // Takes a background color and returns the text color that maximizes the contrast.\n    getContrastText,\n    // Generate a rich color object.\n    augmentColor,\n    // Used by the functions below to shift a color's luminance by approximately\n    // two indexes within its tonal palette.\n    // E.g., shift from Red 500 to Red 300 or Red 700.\n    tonalOffset,\n    // The light and dark mode object.\n    ...modeHydrated\n  }, other);\n  return paletteOutput;\n}","export default function prepareTypographyVars(typography) {\n  const vars = {};\n  const entries = Object.entries(typography);\n  entries.forEach(entry => {\n    const [key, value] = entry;\n    if (typeof value === 'object') {\n      vars[key] = `${value.fontStyle ? `${value.fontStyle} ` : ''}${value.fontVariant ? `${value.fontVariant} ` : ''}${value.fontWeight ? `${value.fontWeight} ` : ''}${value.fontStretch ? `${value.fontStretch} ` : ''}${value.fontSize || ''}${value.lineHeight ? `/${value.lineHeight} ` : ''}${value.fontFamily || ''}`;\n    }\n  });\n  return vars;\n}","export default function createMixins(breakpoints, mixins) {\n  return {\n    toolbar: {\n      minHeight: 56,\n      [breakpoints.up('xs')]: {\n        '@media (orientation: landscape)': {\n          minHeight: 48\n        }\n      },\n      [breakpoints.up('sm')]: {\n        minHeight: 64\n      }\n    },\n    ...mixins\n  };\n}","import deepmerge from '@mui/utils/deepmerge';\nfunction round(value) {\n  return Math.round(value * 1e5) / 1e5;\n}\nconst caseAllCaps = {\n  textTransform: 'uppercase'\n};\nconst defaultFontFamily = '\"Roboto\", \"Helvetica\", \"Arial\", sans-serif';\n\n/**\n * @see @link{https://m2.material.io/design/typography/the-type-system.html}\n * @see @link{https://m2.material.io/design/typography/understanding-typography.html}\n */\nexport default function createTypography(palette, typography) {\n  const {\n    fontFamily = defaultFontFamily,\n    // The default font size of the Material Specification.\n    fontSize = 14,\n    // px\n    fontWeightLight = 300,\n    fontWeightRegular = 400,\n    fontWeightMedium = 500,\n    fontWeightBold = 700,\n    // Tell MUI what's the font-size on the html element.\n    // 16px is the default font-size used by browsers.\n    htmlFontSize = 16,\n    // Apply the CSS properties to all the variants.\n    allVariants,\n    pxToRem: pxToRem2,\n    ...other\n  } = typeof typography === 'function' ? typography(palette) : typography;\n  if (process.env.NODE_ENV !== 'production') {\n    if (typeof fontSize !== 'number') {\n      console.error('MUI: `fontSize` is required to be a number.');\n    }\n    if (typeof htmlFontSize !== 'number') {\n      console.error('MUI: `htmlFontSize` is required to be a number.');\n    }\n  }\n  const coef = fontSize / 14;\n  const pxToRem = pxToRem2 || (size => `${size / htmlFontSize * coef}rem`);\n  const buildVariant = (fontWeight, size, lineHeight, letterSpacing, casing) => ({\n    fontFamily,\n    fontWeight,\n    fontSize: pxToRem(size),\n    // Unitless following https://meyerweb.com/eric/thoughts/2006/02/08/unitless-line-heights/\n    lineHeight,\n    // The letter spacing was designed for the Roboto font-family. Using the same letter-spacing\n    // across font-families can cause issues with the kerning.\n    ...(fontFamily === defaultFontFamily ? {\n      letterSpacing: `${round(letterSpacing / size)}em`\n    } : {}),\n    ...casing,\n    ...allVariants\n  });\n  const variants = {\n    h1: buildVariant(fontWeightLight, 96, 1.167, -1.5),\n    h2: buildVariant(fontWeightLight, 60, 1.2, -0.5),\n    h3: buildVariant(fontWeightRegular, 48, 1.167, 0),\n    h4: buildVariant(fontWeightRegular, 34, 1.235, 0.25),\n    h5: buildVariant(fontWeightRegular, 24, 1.334, 0),\n    h6: buildVariant(fontWeightMedium, 20, 1.6, 0.15),\n    subtitle1: buildVariant(fontWeightRegular, 16, 1.75, 0.15),\n    subtitle2: buildVariant(fontWeightMedium, 14, 1.57, 0.1),\n    body1: buildVariant(fontWeightRegular, 16, 1.5, 0.15),\n    body2: buildVariant(fontWeightRegular, 14, 1.43, 0.15),\n    button: buildVariant(fontWeightMedium, 14, 1.75, 0.4, caseAllCaps),\n    caption: buildVariant(fontWeightRegular, 12, 1.66, 0.4),\n    overline: buildVariant(fontWeightRegular, 12, 2.66, 1, caseAllCaps),\n    // TODO v6: Remove handling of 'inherit' variant from the theme as it is already handled in Material UI's Typography component. Also, remember to remove the associated types.\n    inherit: {\n      fontFamily: 'inherit',\n      fontWeight: 'inherit',\n      fontSize: 'inherit',\n      lineHeight: 'inherit',\n      letterSpacing: 'inherit'\n    }\n  };\n  return deepmerge({\n    htmlFontSize,\n    pxToRem,\n    fontFamily,\n    fontSize,\n    fontWeightLight,\n    fontWeightRegular,\n    fontWeightMedium,\n    fontWeightBold,\n    ...variants\n  }, other, {\n    clone: false // No need to clone deep\n  });\n}","const shadowKeyUmbraOpacity = 0.2;\nconst shadowKeyPenumbraOpacity = 0.14;\nconst shadowAmbientShadowOpacity = 0.12;\nfunction createShadow(...px) {\n  return [`${px[0]}px ${px[1]}px ${px[2]}px ${px[3]}px rgba(0,0,0,${shadowKeyUmbraOpacity})`, `${px[4]}px ${px[5]}px ${px[6]}px ${px[7]}px rgba(0,0,0,${shadowKeyPenumbraOpacity})`, `${px[8]}px ${px[9]}px ${px[10]}px ${px[11]}px rgba(0,0,0,${shadowAmbientShadowOpacity})`].join(',');\n}\n\n// Values from https://github.com/material-components/material-components-web/blob/be8747f94574669cb5e7add1a7c54fa41a89cec7/packages/mdc-elevation/_variables.scss\nconst shadows = ['none', createShadow(0, 2, 1, -1, 0, 1, 1, 0, 0, 1, 3, 0), createShadow(0, 3, 1, -2, 0, 2, 2, 0, 0, 1, 5, 0), createShadow(0, 3, 3, -2, 0, 3, 4, 0, 0, 1, 8, 0), createShadow(0, 2, 4, -1, 0, 4, 5, 0, 0, 1, 10, 0), createShadow(0, 3, 5, -1, 0, 5, 8, 0, 0, 1, 14, 0), createShadow(0, 3, 5, -1, 0, 6, 10, 0, 0, 1, 18, 0), createShadow(0, 4, 5, -2, 0, 7, 10, 1, 0, 2, 16, 1), createShadow(0, 5, 5, -3, 0, 8, 10, 1, 0, 3, 14, 2), createShadow(0, 5, 6, -3, 0, 9, 12, 1, 0, 3, 16, 2), createShadow(0, 6, 6, -3, 0, 10, 14, 1, 0, 4, 18, 3), createShadow(0, 6, 7, -4, 0, 11, 15, 1, 0, 4, 20, 3), createShadow(0, 7, 8, -4, 0, 12, 17, 2, 0, 5, 22, 4), createShadow(0, 7, 8, -4, 0, 13, 19, 2, 0, 5, 24, 4), createShadow(0, 7, 9, -4, 0, 14, 21, 2, 0, 5, 26, 4), createShadow(0, 8, 9, -5, 0, 15, 22, 2, 0, 6, 28, 5), createShadow(0, 8, 10, -5, 0, 16, 24, 2, 0, 6, 30, 5), createShadow(0, 8, 11, -5, 0, 17, 26, 2, 0, 6, 32, 5), createShadow(0, 9, 11, -5, 0, 18, 28, 2, 0, 7, 34, 6), createShadow(0, 9, 12, -6, 0, 19, 29, 2, 0, 7, 36, 6), createShadow(0, 10, 13, -6, 0, 20, 31, 3, 0, 8, 38, 7), createShadow(0, 10, 13, -6, 0, 21, 33, 3, 0, 8, 40, 7), createShadow(0, 10, 14, -6, 0, 22, 35, 3, 0, 8, 42, 7), createShadow(0, 11, 14, -7, 0, 23, 36, 3, 0, 9, 44, 8), createShadow(0, 11, 15, -7, 0, 24, 38, 3, 0, 9, 46, 8)];\nexport default shadows;","// Follow https://material.google.com/motion/duration-easing.html#duration-easing-natural-easing-curves\n// to learn the context in which each easing should be used.\nexport const easing = {\n  // This is the most common easing curve.\n  easeInOut: 'cubic-bezier(0.4, 0, 0.2, 1)',\n  // Objects enter the screen at full velocity from off-screen and\n  // slowly decelerate to a resting point.\n  easeOut: 'cubic-bezier(0.0, 0, 0.2, 1)',\n  // Objects leave the screen at full velocity. They do not decelerate when off-screen.\n  easeIn: 'cubic-bezier(0.4, 0, 1, 1)',\n  // The sharp curve is used by objects that may return to the screen at any time.\n  sharp: 'cubic-bezier(0.4, 0, 0.6, 1)'\n};\n\n// Follow https://m2.material.io/guidelines/motion/duration-easing.html#duration-easing-common-durations\n// to learn when use what timing\nexport const duration = {\n  shortest: 150,\n  shorter: 200,\n  short: 250,\n  // most basic recommended timing\n  standard: 300,\n  // this is to be used in complex animations\n  complex: 375,\n  // recommended when something is entering screen\n  enteringScreen: 225,\n  // recommended when something is leaving screen\n  leavingScreen: 195\n};\nfunction formatMs(milliseconds) {\n  return `${Math.round(milliseconds)}ms`;\n}\nfunction getAutoHeightDuration(height) {\n  if (!height) {\n    return 0;\n  }\n  const constant = height / 36;\n\n  // https://www.desmos.com/calculator/vbrp3ggqet\n  return Math.min(Math.round((4 + 15 * constant ** 0.25 + constant / 5) * 10), 3000);\n}\nexport default function createTransitions(inputTransitions) {\n  const mergedEasing = {\n    ...easing,\n    ...inputTransitions.easing\n  };\n  const mergedDuration = {\n    ...duration,\n    ...inputTransitions.duration\n  };\n  const create = (props = ['all'], options = {}) => {\n    const {\n      duration: durationOption = mergedDuration.standard,\n      easing: easingOption = mergedEasing.easeInOut,\n      delay = 0,\n      ...other\n    } = options;\n    if (process.env.NODE_ENV !== 'production') {\n      const isString = value => typeof value === 'string';\n      const isNumber = value => !Number.isNaN(parseFloat(value));\n      if (!isString(props) && !Array.isArray(props)) {\n        console.error('MUI: Argument \"props\" must be a string or Array.');\n      }\n      if (!isNumber(durationOption) && !isString(durationOption)) {\n        console.error(`MUI: Argument \"duration\" must be a number or a string but found ${durationOption}.`);\n      }\n      if (!isString(easingOption)) {\n        console.error('MUI: Argument \"easing\" must be a string.');\n      }\n      if (!isNumber(delay) && !isString(delay)) {\n        console.error('MUI: Argument \"delay\" must be a number or a string.');\n      }\n      if (typeof options !== 'object') {\n        console.error(['MUI: Secong argument of transition.create must be an object.', \"Arguments should be either `create('prop1', options)` or `create(['prop1', 'prop2'], options)`\"].join('\\n'));\n      }\n      if (Object.keys(other).length !== 0) {\n        console.error(`MUI: Unrecognized argument(s) [${Object.keys(other).join(',')}].`);\n      }\n    }\n    return (Array.isArray(props) ? props : [props]).map(animatedProp => `${animatedProp} ${typeof durationOption === 'string' ? durationOption : formatMs(durationOption)} ${easingOption} ${typeof delay === 'string' ? delay : formatMs(delay)}`).join(',');\n  };\n  return {\n    getAutoHeightDuration,\n    create,\n    ...inputTransitions,\n    easing: mergedEasing,\n    duration: mergedDuration\n  };\n}","// We need to centralize the zIndex definitions as they work\n// like global values in the browser.\nconst zIndex = {\n  mobileStepper: 1000,\n  fab: 1050,\n  speedDial: 1050,\n  appBar: 1100,\n  drawer: 1200,\n  modal: 1300,\n  snackbar: 1400,\n  tooltip: 1500\n};\nexport default zIndex;","/* eslint-disable import/prefer-default-export */\nimport { isPlainObject } from '@mui/utils/deepmerge';\nfunction isSerializable(val) {\n  return isPlainObject(val) || typeof val === 'undefined' || typeof val === 'string' || typeof val === 'boolean' || typeof val === 'number' || Array.isArray(val);\n}\n\n/**\n * `baseTheme` usually comes from `createTheme()` or `extendTheme()`.\n *\n * This function is intended to be used with zero-runtime CSS-in-JS like Pigment CSS\n * For example, in a Next.js project:\n *\n * ```js\n * // next.config.js\n * const { extendTheme } = require('@mui/material/styles');\n *\n * const theme = extendTheme();\n * // `.toRuntimeSource` is Pigment CSS specific to create a theme that is available at runtime.\n * theme.toRuntimeSource = stringifyTheme;\n *\n * module.exports = withPigment({\n *  theme,\n * });\n * ```\n */\nexport function stringifyTheme(baseTheme = {}) {\n  const serializableTheme = {\n    ...baseTheme\n  };\n  function serializeTheme(object) {\n    const array = Object.entries(object);\n    // eslint-disable-next-line no-plusplus\n    for (let index = 0; index < array.length; index++) {\n      const [key, value] = array[index];\n      if (!isSerializable(value) || key.startsWith('unstable_')) {\n        delete object[key];\n      } else if (isPlainObject(value)) {\n        object[key] = {\n          ...value\n        };\n        serializeTheme(object[key]);\n      }\n    }\n  }\n  serializeTheme(serializableTheme);\n  return `import { unstable_createBreakpoints as createBreakpoints, createTransitions } from '@mui/material/styles';\n\nconst theme = ${JSON.stringify(serializableTheme, null, 2)};\n\ntheme.breakpoints = createBreakpoints(theme.breakpoints || {});\ntheme.transitions = createTransitions(theme.transitions || {});\n\nexport default theme;`;\n}","import _formatErrorMessage from \"@mui/utils/formatMuiErrorMessage\";\nimport deepmerge from '@mui/utils/deepmerge';\nimport styleFunctionSx, { unstable_defaultSxConfig as defaultSxConfig } from '@mui/system/styleFunctionSx';\nimport systemCreateTheme from '@mui/system/createTheme';\nimport { alpha as systemAlpha, lighten as systemLighten, darken as systemDarken } from '@mui/system/colorManipulator';\nimport generateUtilityClass from '@mui/utils/generateUtilityClass';\nimport createMixins from \"./createMixins.js\";\nimport createPalette from \"./createPalette.js\";\nimport createTypography from \"./createTypography.js\";\nimport shadows from \"./shadows.js\";\nimport createTransitions from \"./createTransitions.js\";\nimport zIndex from \"./zIndex.js\";\nimport { stringifyTheme } from \"./stringifyTheme.js\";\nfunction coefficientToPercentage(coefficient) {\n  if (typeof coefficient === 'number') {\n    return `${(coefficient * 100).toFixed(0)}%`;\n  }\n  return `calc((${coefficient}) * 100%)`;\n}\n\n// This can be removed when moved to `color-mix()` entirely.\nconst parseAddition = str => {\n  if (!Number.isNaN(+str)) {\n    return +str;\n  }\n  const numbers = str.match(/\\d*\\.?\\d+/g);\n  if (!numbers) {\n    return 0;\n  }\n  let sum = 0;\n  for (let i = 0; i < numbers.length; i += 1) {\n    sum += +numbers[i];\n  }\n  return sum;\n};\nfunction attachColorManipulators(theme) {\n  Object.assign(theme, {\n    alpha(color, coefficient) {\n      const obj = this || theme;\n      if (obj.colorSpace) {\n        return `oklch(from ${color} l c h / ${typeof coefficient === 'string' ? `calc(${coefficient})` : coefficient})`;\n      }\n      if (obj.vars) {\n        // To preserve the behavior of the CSS theme variables\n        // In the future, this could be replaced by `color-mix` (when https://caniuse.com/?search=color-mix reaches 95%).\n        return `rgba(${color.replace(/var\\(--([^,\\s)]+)(?:,[^)]+)?\\)+/g, 'var(--$1Channel)')} / ${typeof coefficient === 'string' ? `calc(${coefficient})` : coefficient})`;\n      }\n      return systemAlpha(color, parseAddition(coefficient));\n    },\n    lighten(color, coefficient) {\n      const obj = this || theme;\n      if (obj.colorSpace) {\n        return `color-mix(in ${obj.colorSpace}, ${color}, #fff ${coefficientToPercentage(coefficient)})`;\n      }\n      return systemLighten(color, coefficient);\n    },\n    darken(color, coefficient) {\n      const obj = this || theme;\n      if (obj.colorSpace) {\n        return `color-mix(in ${obj.colorSpace}, ${color}, #000 ${coefficientToPercentage(coefficient)})`;\n      }\n      return systemDarken(color, coefficient);\n    }\n  });\n}\nfunction createThemeNoVars(options = {}, ...args) {\n  const {\n    breakpoints: breakpointsInput,\n    mixins: mixinsInput = {},\n    spacing: spacingInput,\n    palette: paletteInput = {},\n    transitions: transitionsInput = {},\n    typography: typographyInput = {},\n    shape: shapeInput,\n    colorSpace,\n    ...other\n  } = options;\n  if (options.vars &&\n  // The error should throw only for the root theme creation because user is not allowed to use a custom node `vars`.\n  // `generateThemeVars` is the closest identifier for checking that the `options` is a result of `createTheme` with CSS variables so that user can create new theme for nested ThemeProvider.\n  options.generateThemeVars === undefined) {\n    throw new Error(process.env.NODE_ENV !== \"production\" ? 'MUI: `vars` is a private field used for CSS variables support.\\n' +\n    // #host-reference\n    'Please use another name or follow the [docs](https://v7.mui.com/material-ui/customization/css-theme-variables/usage/) to enable the feature.' : _formatErrorMessage(20));\n  }\n  const palette = createPalette({\n    ...paletteInput,\n    colorSpace\n  });\n  const systemTheme = systemCreateTheme(options);\n  let muiTheme = deepmerge(systemTheme, {\n    mixins: createMixins(systemTheme.breakpoints, mixinsInput),\n    palette,\n    // Don't use [...shadows] until you've verified its transpiled code is not invoking the iterator protocol.\n    shadows: shadows.slice(),\n    typography: createTypography(palette, typographyInput),\n    transitions: createTransitions(transitionsInput),\n    zIndex: {\n      ...zIndex\n    }\n  });\n  muiTheme = deepmerge(muiTheme, other);\n  muiTheme = args.reduce((acc, argument) => deepmerge(acc, argument), muiTheme);\n  if (process.env.NODE_ENV !== 'production') {\n    // TODO v6: Refactor to use globalStateClassesMapping from @mui/utils once `readOnly` state class is used in Rating component.\n    const stateClasses = ['active', 'checked', 'completed', 'disabled', 'error', 'expanded', 'focused', 'focusVisible', 'required', 'selected'];\n    const traverse = (node, component) => {\n      let key;\n\n      // eslint-disable-next-line guard-for-in\n      for (key in node) {\n        const child = node[key];\n        if (stateClasses.includes(key) && Object.keys(child).length > 0) {\n          if (process.env.NODE_ENV !== 'production') {\n            const stateClass = generateUtilityClass('', key);\n            console.error([`MUI: The \\`${component}\\` component increases ` + `the CSS specificity of the \\`${key}\\` internal state.`, 'You can not override it like this: ', JSON.stringify(node, null, 2), '', `Instead, you need to use the '&.${stateClass}' syntax:`, JSON.stringify({\n              root: {\n                [`&.${stateClass}`]: child\n              }\n            }, null, 2), '', 'https://mui.com/r/state-classes-guide'].join('\\n'));\n          }\n          // Remove the style to prevent global conflicts.\n          node[key] = {};\n        }\n      }\n    };\n    Object.keys(muiTheme.components).forEach(component => {\n      const styleOverrides = muiTheme.components[component].styleOverrides;\n      if (styleOverrides && component.startsWith('Mui')) {\n        traverse(styleOverrides, component);\n      }\n    });\n  }\n  muiTheme.unstable_sxConfig = {\n    ...defaultSxConfig,\n    ...other?.unstable_sxConfig\n  };\n  muiTheme.unstable_sx = function sx(props) {\n    return styleFunctionSx({\n      sx: props,\n      theme: this\n    });\n  };\n  muiTheme.toRuntimeSource = stringifyTheme; // for Pigment CSS integration\n\n  attachColorManipulators(muiTheme);\n  return muiTheme;\n}\nexport default createThemeNoVars;","// Inspired by https://github.com/material-components/material-components-ios/blob/bca36107405594d5b7b16265a5b0ed698f85a5ee/components/Elevation/src/UIColor%2BMaterialElevation.m#L61\nexport default function getOverlayAlpha(elevation) {\n  let alphaValue;\n  if (elevation < 1) {\n    alphaValue = 5.11916 * elevation ** 2;\n  } else {\n    alphaValue = 4.5 * Math.log(elevation + 1) + 2;\n  }\n  return Math.round(alphaValue * 10) / 1000;\n}","import createPalette from \"./createPalette.js\";\nimport getOverlayAlpha from \"./getOverlayAlpha.js\";\nconst defaultDarkOverlays = [...Array(25)].map((_, index) => {\n  if (index === 0) {\n    return 'none';\n  }\n  const overlay = getOverlayAlpha(index);\n  return `linear-gradient(rgba(255 255 255 / ${overlay}), rgba(255 255 255 / ${overlay}))`;\n});\nexport function getOpacity(mode) {\n  return {\n    inputPlaceholder: mode === 'dark' ? 0.5 : 0.42,\n    inputUnderline: mode === 'dark' ? 0.7 : 0.42,\n    switchTrackDisabled: mode === 'dark' ? 0.2 : 0.12,\n    switchTrack: mode === 'dark' ? 0.3 : 0.38\n  };\n}\nexport function getOverlays(mode) {\n  return mode === 'dark' ? defaultDarkOverlays : [];\n}\nexport default function createColorScheme(options) {\n  const {\n    palette: paletteInput = {\n      mode: 'light'\n    },\n    // need to cast to avoid module augmentation test\n    opacity,\n    overlays,\n    colorSpace,\n    ...other\n  } = options;\n  // need to cast because `colorSpace` is considered internal at the moment.\n  const palette = createPalette({\n    ...paletteInput,\n    colorSpace\n  });\n  return {\n    palette,\n    opacity: {\n      ...getOpacity(palette.mode),\n      ...opacity\n    },\n    overlays: overlays || getOverlays(palette.mode),\n    ...other\n  };\n}","export default function shouldSkipGeneratingVar(keys) {\n  return !!keys[0].match(/(cssVarPrefix|colorSchemeSelector|modularCssLayers|rootSelector|typography|mixins|breakpoints|direction|transitions)/) || !!keys[0].match(/sxConfig$/) ||\n  // ends with sxConfig\n  keys[0] === 'palette' && !!keys[1]?.match(/(mode|contrastThreshold|tonalOffset)/);\n}","/**\n * @internal These variables should not appear in the :root stylesheet when the `defaultColorScheme=\"dark\"`\n */\nconst excludeVariablesFromRoot = cssVarPrefix => [...[...Array(25)].map((_, index) => `--${cssVarPrefix ? `${cssVarPrefix}-` : ''}overlays-${index}`), `--${cssVarPrefix ? `${cssVarPrefix}-` : ''}palette-AppBar-darkBg`, `--${cssVarPrefix ? `${cssVarPrefix}-` : ''}palette-AppBar-darkColor`];\nexport default excludeVariablesFromRoot;","import excludeVariablesFromRoot from \"./excludeVariablesFromRoot.js\";\nexport default theme => (colorScheme, css) => {\n  const root = theme.rootSelector || ':root';\n  const selector = theme.colorSchemeSelector;\n  let rule = selector;\n  if (selector === 'class') {\n    rule = '.%s';\n  }\n  if (selector === 'data') {\n    rule = '[data-%s]';\n  }\n  if (selector?.startsWith('data-') && !selector.includes('%s')) {\n    // 'data-mui-color-scheme' -> '[data-mui-color-scheme=\"%s\"]'\n    rule = `[${selector}=\"%s\"]`;\n  }\n  if (theme.defaultColorScheme === colorScheme) {\n    if (colorScheme === 'dark') {\n      const excludedVariables = {};\n      excludeVariablesFromRoot(theme.cssVarPrefix).forEach(cssVar => {\n        excludedVariables[cssVar] = css[cssVar];\n        delete css[cssVar];\n      });\n      if (rule === 'media') {\n        return {\n          [root]: css,\n          [`@media (prefers-color-scheme: dark)`]: {\n            [root]: excludedVariables\n          }\n        };\n      }\n      if (rule) {\n        return {\n          [rule.replace('%s', colorScheme)]: excludedVariables,\n          [`${root}, ${rule.replace('%s', colorScheme)}`]: css\n        };\n      }\n      return {\n        [root]: {\n          ...css,\n          ...excludedVariables\n        }\n      };\n    }\n    if (rule && rule !== 'media') {\n      return `${root}, ${rule.replace('%s', String(colorScheme))}`;\n    }\n  } else if (colorScheme) {\n    if (rule === 'media') {\n      return {\n        [`@media (prefers-color-scheme: ${String(colorScheme)})`]: {\n          [root]: css\n        }\n      };\n    }\n    if (rule) {\n      return rule.replace('%s', String(colorScheme));\n    }\n  }\n  return root;\n};","import _formatErrorMessage from \"@mui/utils/formatMuiErrorMessage\";\nimport deepmerge from '@mui/utils/deepmerge';\nimport { unstable_createGetCssVar as systemCreateGetCssVar, createSpacing } from '@mui/system';\nimport { createUnarySpacing } from '@mui/system/spacing';\nimport { prepareCssVars, prepareTypographyVars, createGetColorSchemeSelector } from '@mui/system/cssVars';\nimport styleFunctionSx, { unstable_defaultSxConfig as defaultSxConfig } from '@mui/system/styleFunctionSx';\nimport { private_safeColorChannel as safeColorChannel, private_safeAlpha as safeAlpha, private_safeDarken as safeDarken, private_safeLighten as safeLighten, private_safeEmphasize as safeEmphasize, hslToRgb } from '@mui/system/colorManipulator';\nimport createThemeNoVars from \"./createThemeNoVars.js\";\nimport createColorScheme, { getOpacity, getOverlays } from \"./createColorScheme.js\";\nimport defaultShouldSkipGeneratingVar from \"./shouldSkipGeneratingVar.js\";\nimport defaultGetSelector from \"./createGetSelector.js\";\nimport { stringifyTheme } from \"./stringifyTheme.js\";\nimport { light, dark } from \"./createPalette.js\";\nfunction assignNode(obj, keys) {\n  keys.forEach(k => {\n    if (!obj[k]) {\n      obj[k] = {};\n    }\n  });\n}\nfunction setColor(obj, key, defaultValue) {\n  if (!obj[key] && defaultValue) {\n    obj[key] = defaultValue;\n  }\n}\nfunction toRgb(color) {\n  if (typeof color !== 'string' || !color.startsWith('hsl')) {\n    return color;\n  }\n  return hslToRgb(color);\n}\nfunction setColorChannel(obj, key) {\n  if (!(`${key}Channel` in obj)) {\n    // custom channel token is not provided, generate one.\n    // if channel token can't be generated, show a warning.\n    obj[`${key}Channel`] = safeColorChannel(toRgb(obj[key]), `MUI: Can't create \\`palette.${key}Channel\\` because \\`palette.${key}\\` is not one of these formats: #nnn, #nnnnnn, rgb(), rgba(), hsl(), hsla(), color().` + '\\n' + `To suppress this warning, you need to explicitly provide the \\`palette.${key}Channel\\` as a string (in rgb format, for example \"12 12 12\") or undefined if you want to remove the channel token.`);\n  }\n}\nfunction getSpacingVal(spacingInput) {\n  if (typeof spacingInput === 'number') {\n    return `${spacingInput}px`;\n  }\n  if (typeof spacingInput === 'string' || typeof spacingInput === 'function' || Array.isArray(spacingInput)) {\n    return spacingInput;\n  }\n  return '8px';\n}\nconst silent = fn => {\n  try {\n    return fn();\n  } catch (error) {\n    // ignore error\n  }\n  return undefined;\n};\nexport const createGetCssVar = (cssVarPrefix = 'mui') => systemCreateGetCssVar(cssVarPrefix);\nfunction attachColorScheme(colorSpace, colorSchemes, scheme, restTheme, colorScheme) {\n  if (!scheme) {\n    return undefined;\n  }\n  scheme = scheme === true ? {} : scheme;\n  const mode = colorScheme === 'dark' ? 'dark' : 'light';\n  if (!restTheme) {\n    colorSchemes[colorScheme] = createColorScheme({\n      ...scheme,\n      palette: {\n        mode,\n        ...scheme?.palette\n      },\n      colorSpace\n    });\n    return undefined;\n  }\n  const {\n    palette,\n    ...muiTheme\n  } = createThemeNoVars({\n    ...restTheme,\n    palette: {\n      mode,\n      ...scheme?.palette\n    },\n    colorSpace\n  });\n  colorSchemes[colorScheme] = {\n    ...scheme,\n    palette,\n    opacity: {\n      ...getOpacity(mode),\n      ...scheme?.opacity\n    },\n    overlays: scheme?.overlays || getOverlays(mode)\n  };\n  return muiTheme;\n}\n\n/**\n * A default `createThemeWithVars` comes with a single color scheme, either `light` or `dark` based on the `defaultColorScheme`.\n * This is better suited for apps that only need a single color scheme.\n *\n * To enable built-in `light` and `dark` color schemes, either:\n * 1. provide a `colorSchemeSelector` to define how the color schemes will change.\n * 2. provide `colorSchemes.dark` will set `colorSchemeSelector: 'media'` by default.\n */\nexport default function createThemeWithVars(options = {}, ...args) {\n  const {\n    colorSchemes: colorSchemesInput = {\n      light: true\n    },\n    defaultColorScheme: defaultColorSchemeInput,\n    disableCssColorScheme = false,\n    cssVarPrefix = 'mui',\n    nativeColor = false,\n    shouldSkipGeneratingVar = defaultShouldSkipGeneratingVar,\n    colorSchemeSelector: selector = colorSchemesInput.light && colorSchemesInput.dark ? 'media' : undefined,\n    rootSelector = ':root',\n    ...input\n  } = options;\n  const firstColorScheme = Object.keys(colorSchemesInput)[0];\n  const defaultColorScheme = defaultColorSchemeInput || (colorSchemesInput.light && firstColorScheme !== 'light' ? 'light' : firstColorScheme);\n  const getCssVar = createGetCssVar(cssVarPrefix);\n  const {\n    [defaultColorScheme]: defaultSchemeInput,\n    light: builtInLight,\n    dark: builtInDark,\n    ...customColorSchemes\n  } = colorSchemesInput;\n  const colorSchemes = {\n    ...customColorSchemes\n  };\n  let defaultScheme = defaultSchemeInput;\n\n  // For built-in light and dark color schemes, ensure that the value is valid if they are the default color scheme.\n  if (defaultColorScheme === 'dark' && !('dark' in colorSchemesInput) || defaultColorScheme === 'light' && !('light' in colorSchemesInput)) {\n    defaultScheme = true;\n  }\n  if (!defaultScheme) {\n    throw new Error(process.env.NODE_ENV !== \"production\" ? `MUI: The \\`colorSchemes.${defaultColorScheme}\\` option is either missing or invalid.` : _formatErrorMessage(21, defaultColorScheme));\n  }\n\n  // The reason to use `oklch` is that it is the most perceptually uniform color space and widely supported.\n  let colorSpace;\n  if (nativeColor) {\n    colorSpace = 'oklch';\n  }\n\n  // Create the palette for the default color scheme, either `light`, `dark`, or custom color scheme.\n  const muiTheme = attachColorScheme(colorSpace, colorSchemes, defaultScheme, input, defaultColorScheme);\n  if (builtInLight && !colorSchemes.light) {\n    attachColorScheme(colorSpace, colorSchemes, builtInLight, undefined, 'light');\n  }\n  if (builtInDark && !colorSchemes.dark) {\n    attachColorScheme(colorSpace, colorSchemes, builtInDark, undefined, 'dark');\n  }\n  let theme = {\n    defaultColorScheme,\n    ...muiTheme,\n    cssVarPrefix,\n    colorSchemeSelector: selector,\n    rootSelector,\n    getCssVar,\n    colorSchemes,\n    font: {\n      ...prepareTypographyVars(muiTheme.typography),\n      ...muiTheme.font\n    },\n    spacing: getSpacingVal(input.spacing)\n  };\n  Object.keys(theme.colorSchemes).forEach(key => {\n    const palette = theme.colorSchemes[key].palette;\n    const setCssVarColor = cssVar => {\n      const tokens = cssVar.split('-');\n      const color = tokens[1];\n      const colorToken = tokens[2];\n      return getCssVar(cssVar, palette[color][colorToken]);\n    };\n\n    // attach black & white channels to common node\n    if (palette.mode === 'light') {\n      setColor(palette.common, 'background', '#fff');\n      setColor(palette.common, 'onBackground', '#000');\n    }\n    if (palette.mode === 'dark') {\n      setColor(palette.common, 'background', '#000');\n      setColor(palette.common, 'onBackground', '#fff');\n    }\n    function colorMix(method, color, coefficient) {\n      if (colorSpace) {\n        let mixer;\n        if (method === safeAlpha) {\n          mixer = `transparent ${((1 - coefficient) * 100).toFixed(0)}%`;\n        }\n        if (method === safeDarken) {\n          mixer = `#000 ${(coefficient * 100).toFixed(0)}%`;\n        }\n        if (method === safeLighten) {\n          mixer = `#fff ${(coefficient * 100).toFixed(0)}%`;\n        }\n        return `color-mix(in ${colorSpace}, ${color}, ${mixer})`;\n      }\n      return method(color, coefficient);\n    }\n\n    // assign component variables\n    assignNode(palette, ['Alert', 'AppBar', 'Avatar', 'Button', 'Chip', 'FilledInput', 'LinearProgress', 'Skeleton', 'Slider', 'SnackbarContent', 'SpeedDialAction', 'StepConnector', 'StepContent', 'Switch', 'TableCell', 'Tooltip']);\n    if (palette.mode === 'light') {\n      setColor(palette.Alert, 'errorColor', colorMix(safeDarken, nativeColor ? getCssVar('palette-error-light') : palette.error.light, 0.6));\n      setColor(palette.Alert, 'infoColor', colorMix(safeDarken, nativeColor ? getCssVar('palette-info-light') : palette.info.light, 0.6));\n      setColor(palette.Alert, 'successColor', colorMix(safeDarken, nativeColor ? getCssVar('palette-success-light') : palette.success.light, 0.6));\n      setColor(palette.Alert, 'warningColor', colorMix(safeDarken, nativeColor ? getCssVar('palette-warning-light') : palette.warning.light, 0.6));\n      setColor(palette.Alert, 'errorFilledBg', setCssVarColor('palette-error-main'));\n      setColor(palette.Alert, 'infoFilledBg', setCssVarColor('palette-info-main'));\n      setColor(palette.Alert, 'successFilledBg', setCssVarColor('palette-success-main'));\n      setColor(palette.Alert, 'warningFilledBg', setCssVarColor('palette-warning-main'));\n      setColor(palette.Alert, 'errorFilledColor', silent(() => palette.getContrastText(palette.error.main)));\n      setColor(palette.Alert, 'infoFilledColor', silent(() => palette.getContrastText(palette.info.main)));\n      setColor(palette.Alert, 'successFilledColor', silent(() => palette.getContrastText(palette.success.main)));\n      setColor(palette.Alert, 'warningFilledColor', silent(() => palette.getContrastText(palette.warning.main)));\n      setColor(palette.Alert, 'errorStandardBg', colorMix(safeLighten, nativeColor ? getCssVar('palette-error-light') : palette.error.light, 0.9));\n      setColor(palette.Alert, 'infoStandardBg', colorMix(safeLighten, nativeColor ? getCssVar('palette-info-light') : palette.info.light, 0.9));\n      setColor(palette.Alert, 'successStandardBg', colorMix(safeLighten, nativeColor ? getCssVar('palette-success-light') : palette.success.light, 0.9));\n      setColor(palette.Alert, 'warningStandardBg', colorMix(safeLighten, nativeColor ? getCssVar('palette-warning-light') : palette.warning.light, 0.9));\n      setColor(palette.Alert, 'errorIconColor', setCssVarColor('palette-error-main'));\n      setColor(palette.Alert, 'infoIconColor', setCssVarColor('palette-info-main'));\n      setColor(palette.Alert, 'successIconColor', setCssVarColor('palette-success-main'));\n      setColor(palette.Alert, 'warningIconColor', setCssVarColor('palette-warning-main'));\n      setColor(palette.AppBar, 'defaultBg', setCssVarColor('palette-grey-100'));\n      setColor(palette.Avatar, 'defaultBg', setCssVarColor('palette-grey-400'));\n      setColor(palette.Button, 'inheritContainedBg', setCssVarColor('palette-grey-300'));\n      setColor(palette.Button, 'inheritContainedHoverBg', setCssVarColor('palette-grey-A100'));\n      setColor(palette.Chip, 'defaultBorder', setCssVarColor('palette-grey-400'));\n      setColor(palette.Chip, 'defaultAvatarColor', setCssVarColor('palette-grey-700'));\n      setColor(palette.Chip, 'defaultIconColor', setCssVarColor('palette-grey-700'));\n      setColor(palette.FilledInput, 'bg', 'rgba(0, 0, 0, 0.06)');\n      setColor(palette.FilledInput, 'hoverBg', 'rgba(0, 0, 0, 0.09)');\n      setColor(palette.FilledInput, 'disabledBg', 'rgba(0, 0, 0, 0.12)');\n      setColor(palette.LinearProgress, 'primaryBg', colorMix(safeLighten, nativeColor ? getCssVar('palette-primary-main') : palette.primary.main, 0.62));\n      setColor(palette.LinearProgress, 'secondaryBg', colorMix(safeLighten, nativeColor ? getCssVar('palette-secondary-main') : palette.secondary.main, 0.62));\n      setColor(palette.LinearProgress, 'errorBg', colorMix(safeLighten, nativeColor ? getCssVar('palette-error-main') : palette.error.main, 0.62));\n      setColor(palette.LinearProgress, 'infoBg', colorMix(safeLighten, nativeColor ? getCssVar('palette-info-main') : palette.info.main, 0.62));\n      setColor(palette.LinearProgress, 'successBg', colorMix(safeLighten, nativeColor ? getCssVar('palette-success-main') : palette.success.main, 0.62));\n      setColor(palette.LinearProgress, 'warningBg', colorMix(safeLighten, nativeColor ? getCssVar('palette-warning-light') : palette.warning.main, 0.62));\n      setColor(palette.Skeleton, 'bg', colorSpace ? colorMix(safeAlpha, nativeColor ? getCssVar('palette-text-primary') : palette.text.primary, 0.11) : `rgba(${setCssVarColor('palette-text-primaryChannel')} / 0.11)`);\n      setColor(palette.Slider, 'primaryTrack', colorMix(safeLighten, nativeColor ? getCssVar('palette-primary-main') : palette.primary.main, 0.62));\n      setColor(palette.Slider, 'secondaryTrack', colorMix(safeLighten, nativeColor ? getCssVar('palette-secondary-main') : palette.secondary.main, 0.62));\n      setColor(palette.Slider, 'errorTrack', colorMix(safeLighten, nativeColor ? getCssVar('palette-error-main') : palette.error.main, 0.62));\n      setColor(palette.Slider, 'infoTrack', colorMix(safeLighten, nativeColor ? getCssVar('palette-info-main') : palette.info.main, 0.62));\n      setColor(palette.Slider, 'successTrack', colorMix(safeLighten, nativeColor ? getCssVar('palette-success-main') : palette.success.main, 0.62));\n      setColor(palette.Slider, 'warningTrack', colorMix(safeLighten, nativeColor ? getCssVar('palette-warning-main') : palette.warning.main, 0.62));\n      const snackbarContentBackground = colorSpace ? colorMix(safeDarken, nativeColor ? getCssVar('palette-background-default') : palette.background.default, 0.6825) // use `0.6825` instead of `0.8` to match the contrast ratio of JS implementation\n      : safeEmphasize(palette.background.default, 0.8);\n      setColor(palette.SnackbarContent, 'bg', snackbarContentBackground);\n      setColor(palette.SnackbarContent, 'color', silent(() => colorSpace ? dark.text.primary : palette.getContrastText(snackbarContentBackground)));\n      setColor(palette.SpeedDialAction, 'fabHoverBg', safeEmphasize(palette.background.paper, 0.15));\n      setColor(palette.StepConnector, 'border', setCssVarColor('palette-grey-400'));\n      setColor(palette.StepContent, 'border', setCssVarColor('palette-grey-400'));\n      setColor(palette.Switch, 'defaultColor', setCssVarColor('palette-common-white'));\n      setColor(palette.Switch, 'defaultDisabledColor', setCssVarColor('palette-grey-100'));\n      setColor(palette.Switch, 'primaryDisabledColor', colorMix(safeLighten, nativeColor ? getCssVar('palette-primary-main') : palette.primary.main, 0.62));\n      setColor(palette.Switch, 'secondaryDisabledColor', colorMix(safeLighten, nativeColor ? getCssVar('palette-secondary-main') : palette.secondary.main, 0.62));\n      setColor(palette.Switch, 'errorDisabledColor', colorMix(safeLighten, nativeColor ? getCssVar('palette-error-main') : palette.error.main, 0.62));\n      setColor(palette.Switch, 'infoDisabledColor', colorMix(safeLighten, nativeColor ? getCssVar('palette-info-main') : palette.info.main, 0.62));\n      setColor(palette.Switch, 'successDisabledColor', colorMix(safeLighten, nativeColor ? getCssVar('palette-success-main') : palette.success.main, 0.62));\n      setColor(palette.Switch, 'warningDisabledColor', colorMix(safeLighten, nativeColor ? getCssVar('palette-warning-main') : palette.warning.main, 0.62));\n      setColor(palette.TableCell, 'border', colorMix(safeLighten, safeAlpha(nativeColor ? getCssVar('palette-divider') : palette.divider, 1), 0.88));\n      setColor(palette.Tooltip, 'bg', colorMix(safeAlpha, nativeColor ? getCssVar('palette-grey-700') : palette.grey[700], 0.92));\n    }\n    if (palette.mode === 'dark') {\n      setColor(palette.Alert, 'errorColor', colorMix(safeLighten, nativeColor ? getCssVar('palette-error-light') : palette.error.light, 0.6));\n      setColor(palette.Alert, 'infoColor', colorMix(safeLighten, nativeColor ? getCssVar('palette-info-light') : palette.info.light, 0.6));\n      setColor(palette.Alert, 'successColor', colorMix(safeLighten, nativeColor ? getCssVar('palette-success-light') : palette.success.light, 0.6));\n      setColor(palette.Alert, 'warningColor', colorMix(safeLighten, nativeColor ? getCssVar('palette-warning-light') : palette.warning.light, 0.6));\n      setColor(palette.Alert, 'errorFilledBg', setCssVarColor('palette-error-dark'));\n      setColor(palette.Alert, 'infoFilledBg', setCssVarColor('palette-info-dark'));\n      setColor(palette.Alert, 'successFilledBg', setCssVarColor('palette-success-dark'));\n      setColor(palette.Alert, 'warningFilledBg', setCssVarColor('palette-warning-dark'));\n      setColor(palette.Alert, 'errorFilledColor', silent(() => palette.getContrastText(palette.error.dark)));\n      setColor(palette.Alert, 'infoFilledColor', silent(() => palette.getContrastText(palette.info.dark)));\n      setColor(palette.Alert, 'successFilledColor', silent(() => palette.getContrastText(palette.success.dark)));\n      setColor(palette.Alert, 'warningFilledColor', silent(() => palette.getContrastText(palette.warning.dark)));\n      setColor(palette.Alert, 'errorStandardBg', colorMix(safeDarken, nativeColor ? getCssVar('palette-error-light') : palette.error.light, 0.9));\n      setColor(palette.Alert, 'infoStandardBg', colorMix(safeDarken, nativeColor ? getCssVar('palette-info-light') : palette.info.light, 0.9));\n      setColor(palette.Alert, 'successStandardBg', colorMix(safeDarken, nativeColor ? getCssVar('palette-success-light') : palette.success.light, 0.9));\n      setColor(palette.Alert, 'warningStandardBg', colorMix(safeDarken, nativeColor ? getCssVar('palette-warning-light') : palette.warning.light, 0.9));\n      setColor(palette.Alert, 'errorIconColor', setCssVarColor('palette-error-main'));\n      setColor(palette.Alert, 'infoIconColor', setCssVarColor('palette-info-main'));\n      setColor(palette.Alert, 'successIconColor', setCssVarColor('palette-success-main'));\n      setColor(palette.Alert, 'warningIconColor', setCssVarColor('palette-warning-main'));\n      setColor(palette.AppBar, 'defaultBg', setCssVarColor('palette-grey-900'));\n      setColor(palette.AppBar, 'darkBg', setCssVarColor('palette-background-paper')); // specific for dark mode\n      setColor(palette.AppBar, 'darkColor', setCssVarColor('palette-text-primary')); // specific for dark mode\n      setColor(palette.Avatar, 'defaultBg', setCssVarColor('palette-grey-600'));\n      setColor(palette.Button, 'inheritContainedBg', setCssVarColor('palette-grey-800'));\n      setColor(palette.Button, 'inheritContainedHoverBg', setCssVarColor('palette-grey-700'));\n      setColor(palette.Chip, 'defaultBorder', setCssVarColor('palette-grey-700'));\n      setColor(palette.Chip, 'defaultAvatarColor', setCssVarColor('palette-grey-300'));\n      setColor(palette.Chip, 'defaultIconColor', setCssVarColor('palette-grey-300'));\n      setColor(palette.FilledInput, 'bg', 'rgba(255, 255, 255, 0.09)');\n      setColor(palette.FilledInput, 'hoverBg', 'rgba(255, 255, 255, 0.13)');\n      setColor(palette.FilledInput, 'disabledBg', 'rgba(255, 255, 255, 0.12)');\n      setColor(palette.LinearProgress, 'primaryBg', colorMix(safeDarken, nativeColor ? getCssVar('palette-primary-main') : palette.primary.main, 0.5));\n      setColor(palette.LinearProgress, 'secondaryBg', colorMix(safeDarken, nativeColor ? getCssVar('palette-secondary-main') : palette.secondary.main, 0.5));\n      setColor(palette.LinearProgress, 'errorBg', colorMix(safeDarken, nativeColor ? getCssVar('palette-error-main') : palette.error.main, 0.5));\n      setColor(palette.LinearProgress, 'infoBg', colorMix(safeDarken, nativeColor ? getCssVar('palette-info-main') : palette.info.main, 0.5));\n      setColor(palette.LinearProgress, 'successBg', colorMix(safeDarken, nativeColor ? getCssVar('palette-success-main') : palette.success.main, 0.5));\n      setColor(palette.LinearProgress, 'warningBg', colorMix(safeDarken, nativeColor ? getCssVar('palette-warning-main') : palette.warning.main, 0.5));\n      setColor(palette.Skeleton, 'bg', colorSpace ? colorMix(safeAlpha, nativeColor ? getCssVar('palette-text-primary') : palette.text.primary, 0.13) : `rgba(${setCssVarColor('palette-text-primaryChannel')} / 0.13)`);\n      setColor(palette.Slider, 'primaryTrack', colorMix(safeDarken, nativeColor ? getCssVar('palette-primary-main') : palette.primary.main, 0.5));\n      setColor(palette.Slider, 'secondaryTrack', colorMix(safeDarken, nativeColor ? getCssVar('palette-secondary-main') : palette.secondary.main, 0.5));\n      setColor(palette.Slider, 'errorTrack', colorMix(safeDarken, nativeColor ? getCssVar('palette-error-main') : palette.error.main, 0.5));\n      setColor(palette.Slider, 'infoTrack', colorMix(safeDarken, nativeColor ? getCssVar('palette-info-main') : palette.info.main, 0.5));\n      setColor(palette.Slider, 'successTrack', colorMix(safeDarken, nativeColor ? getCssVar('palette-success-main') : palette.success.main, 0.5));\n      setColor(palette.Slider, 'warningTrack', colorMix(safeDarken, nativeColor ? getCssVar('palette-warning-light') : palette.warning.main, 0.5));\n      const snackbarContentBackground = colorSpace ? colorMix(safeLighten, nativeColor ? getCssVar('palette-background-default') : palette.background.default, 0.985) // use `0.985` instead of `0.98` to match the contrast ratio of JS implementation\n      : safeEmphasize(palette.background.default, 0.98);\n      setColor(palette.SnackbarContent, 'bg', snackbarContentBackground);\n      setColor(palette.SnackbarContent, 'color', silent(() => colorSpace ? light.text.primary : palette.getContrastText(snackbarContentBackground)));\n      setColor(palette.SpeedDialAction, 'fabHoverBg', safeEmphasize(palette.background.paper, 0.15));\n      setColor(palette.StepConnector, 'border', setCssVarColor('palette-grey-600'));\n      setColor(palette.StepContent, 'border', setCssVarColor('palette-grey-600'));\n      setColor(palette.Switch, 'defaultColor', setCssVarColor('palette-grey-300'));\n      setColor(palette.Switch, 'defaultDisabledColor', setCssVarColor('palette-grey-600'));\n      setColor(palette.Switch, 'primaryDisabledColor', colorMix(safeDarken, nativeColor ? getCssVar('palette-primary-main') : palette.primary.main, 0.55));\n      setColor(palette.Switch, 'secondaryDisabledColor', colorMix(safeDarken, nativeColor ? getCssVar('palette-secondary-main') : palette.secondary.main, 0.55));\n      setColor(palette.Switch, 'errorDisabledColor', colorMix(safeDarken, nativeColor ? getCssVar('palette-error-main') : palette.error.main, 0.55));\n      setColor(palette.Switch, 'infoDisabledColor', colorMix(safeDarken, nativeColor ? getCssVar('palette-info-main') : palette.info.main, 0.55));\n      setColor(palette.Switch, 'successDisabledColor', colorMix(safeDarken, nativeColor ? getCssVar('palette-success-main') : palette.success.main, 0.55));\n      setColor(palette.Switch, 'warningDisabledColor', colorMix(safeDarken, nativeColor ? getCssVar('palette-warning-light') : palette.warning.main, 0.55));\n      setColor(palette.TableCell, 'border', colorMix(safeDarken, safeAlpha(nativeColor ? getCssVar('palette-divider') : palette.divider, 1), 0.68));\n      setColor(palette.Tooltip, 'bg', colorMix(safeAlpha, nativeColor ? getCssVar('palette-grey-700') : palette.grey[700], 0.92));\n    }\n    if (!nativeColor) {\n      setColorChannel(palette.background, 'default');\n\n      // added for consistency with the `background.default` token\n      setColorChannel(palette.background, 'paper');\n      setColorChannel(palette.common, 'background');\n      setColorChannel(palette.common, 'onBackground');\n      setColorChannel(palette, 'divider');\n    }\n    Object.keys(palette).forEach(color => {\n      const colors = palette[color];\n\n      // The default palettes (primary, secondary, error, info, success, and warning) errors are handled by the above `createTheme(...)`.\n\n      if (color !== 'tonalOffset' && !nativeColor && colors && typeof colors === 'object') {\n        // Silent the error for custom palettes.\n        if (colors.main) {\n          setColor(palette[color], 'mainChannel', safeColorChannel(toRgb(colors.main)));\n        }\n        if (colors.light) {\n          setColor(palette[color], 'lightChannel', safeColorChannel(toRgb(colors.light)));\n        }\n        if (colors.dark) {\n          setColor(palette[color], 'darkChannel', safeColorChannel(toRgb(colors.dark)));\n        }\n        if (colors.contrastText) {\n          setColor(palette[color], 'contrastTextChannel', safeColorChannel(toRgb(colors.contrastText)));\n        }\n        if (color === 'text') {\n          // Text colors: text.primary, text.secondary\n          setColorChannel(palette[color], 'primary');\n          setColorChannel(palette[color], 'secondary');\n        }\n        if (color === 'action') {\n          // Action colors: action.active, action.selected\n          if (colors.active) {\n            setColorChannel(palette[color], 'active');\n          }\n          if (colors.selected) {\n            setColorChannel(palette[color], 'selected');\n          }\n        }\n      }\n    });\n  });\n  theme = args.reduce((acc, argument) => deepmerge(acc, argument), theme);\n  const parserConfig = {\n    prefix: cssVarPrefix,\n    disableCssColorScheme,\n    shouldSkipGeneratingVar,\n    getSelector: defaultGetSelector(theme),\n    enableContrastVars: nativeColor\n  };\n  const {\n    vars,\n    generateThemeVars,\n    generateStyleSheets\n  } = prepareCssVars(theme, parserConfig);\n  theme.vars = vars;\n  Object.entries(theme.colorSchemes[theme.defaultColorScheme]).forEach(([key, value]) => {\n    theme[key] = value;\n  });\n  theme.generateThemeVars = generateThemeVars;\n  theme.generateStyleSheets = generateStyleSheets;\n  theme.generateSpacing = function generateSpacing() {\n    return createSpacing(input.spacing, createUnarySpacing(this));\n  };\n  theme.getColorSchemeSelector = createGetColorSchemeSelector(selector);\n  theme.spacing = theme.generateSpacing();\n  theme.shouldSkipGeneratingVar = shouldSkipGeneratingVar;\n  theme.unstable_sxConfig = {\n    ...defaultSxConfig,\n    ...input?.unstable_sxConfig\n  };\n  theme.unstable_sx = function sx(props) {\n    return styleFunctionSx({\n      sx: props,\n      theme: this\n    });\n  };\n  theme.toRuntimeSource = stringifyTheme; // for Pigment CSS integration\n\n  return theme;\n}","import createPalette from \"./createPalette.js\";\nimport createThemeWithVars from \"./createThemeWithVars.js\";\nimport createThemeNoVars from \"./createThemeNoVars.js\";\n// eslint-disable-next-line consistent-return\nfunction attachColorScheme(theme, scheme, colorScheme) {\n  if (!theme.colorSchemes) {\n    return undefined;\n  }\n  if (colorScheme) {\n    theme.colorSchemes[scheme] = {\n      ...(colorScheme !== true && colorScheme),\n      palette: createPalette({\n        ...(colorScheme === true ? {} : colorScheme.palette),\n        mode: scheme\n      }) // cast type to skip module augmentation test\n    };\n  }\n}\n\n/**\n * Generate a theme base on the options received.\n * @param options Takes an incomplete theme object and adds the missing parts.\n * @param args Deep merge the arguments with the about to be returned theme.\n * @returns A complete, ready-to-use theme object.\n */\nexport default function createTheme(options = {},\n// cast type to skip module augmentation test\n...args) {\n  const {\n    palette,\n    cssVariables = false,\n    colorSchemes: initialColorSchemes = !palette ? {\n      light: true\n    } : undefined,\n    defaultColorScheme: initialDefaultColorScheme = palette?.mode,\n    ...other\n  } = options;\n  const defaultColorSchemeInput = initialDefaultColorScheme || 'light';\n  const defaultScheme = initialColorSchemes?.[defaultColorSchemeInput];\n  const colorSchemesInput = {\n    ...initialColorSchemes,\n    ...(palette ? {\n      [defaultColorSchemeInput]: {\n        ...(typeof defaultScheme !== 'boolean' && defaultScheme),\n        palette\n      }\n    } : undefined)\n  };\n  if (cssVariables === false) {\n    if (!('colorSchemes' in options)) {\n      // Behaves exactly as v5\n      return createThemeNoVars(options, ...args);\n    }\n    let paletteOptions = palette;\n    if (!('palette' in options)) {\n      if (colorSchemesInput[defaultColorSchemeInput]) {\n        if (colorSchemesInput[defaultColorSchemeInput] !== true) {\n          paletteOptions = colorSchemesInput[defaultColorSchemeInput].palette;\n        } else if (defaultColorSchemeInput === 'dark') {\n          // @ts-ignore to prevent the module augmentation test from failing\n          paletteOptions = {\n            mode: 'dark'\n          };\n        }\n      }\n    }\n    const theme = createThemeNoVars({\n      ...options,\n      palette: paletteOptions\n    }, ...args);\n    theme.defaultColorScheme = defaultColorSchemeInput;\n    theme.colorSchemes = colorSchemesInput;\n    if (theme.palette.mode === 'light') {\n      theme.colorSchemes.light = {\n        ...(colorSchemesInput.light !== true && colorSchemesInput.light),\n        palette: theme.palette\n      };\n      attachColorScheme(theme, 'dark', colorSchemesInput.dark);\n    }\n    if (theme.palette.mode === 'dark') {\n      theme.colorSchemes.dark = {\n        ...(colorSchemesInput.dark !== true && colorSchemesInput.dark),\n        palette: theme.palette\n      };\n      attachColorScheme(theme, 'light', colorSchemesInput.light);\n    }\n    return theme;\n  }\n  if (!palette && !('light' in colorSchemesInput) && defaultColorSchemeInput === 'light') {\n    colorSchemesInput.light = true;\n  }\n  return createThemeWithVars({\n    ...other,\n    colorSchemes: colorSchemesInput,\n    defaultColorScheme: defaultColorSchemeInput,\n    ...(typeof cssVariables !== 'boolean' && cssVariables)\n  }, ...args);\n}","'use client';\n\nimport createTheme from \"./createTheme.js\";\nconst defaultTheme = createTheme();\nexport default defaultTheme;","export default '$$material';","'use client';\n\nimport * as React from 'react';\nimport { useTheme as useThemeSystem } from '@mui/system';\nimport defaultTheme from \"./defaultTheme.js\";\nimport THEME_ID from \"./identifier.js\";\nexport default function useTheme() {\n  const theme = useThemeSystem(defaultTheme);\n  if (process.env.NODE_ENV !== 'production') {\n    // TODO: uncomment once we enable eslint-plugin-react-compiler // eslint-disable-next-line react-compiler/react-compiler\n    // eslint-disable-next-line react-hooks/rules-of-hooks\n    React.useDebugValue(theme);\n  }\n  return theme[THEME_ID] || theme;\n}","'use client';\n\nimport PropTypes from 'prop-types';\nimport { GlobalStyles as SystemGlobalStyles } from '@mui/system';\nimport defaultTheme from \"../styles/defaultTheme.js\";\nimport THEME_ID from \"../styles/identifier.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nfunction GlobalStyles(props) {\n  return /*#__PURE__*/_jsx(SystemGlobalStyles, {\n    ...props,\n    defaultTheme: defaultTheme,\n    themeId: THEME_ID\n  });\n}\nprocess.env.NODE_ENV !== \"production\" ? GlobalStyles.propTypes /* remove-proptypes */ = {\n  // ┌────────────────────────────── Warning ──────────────────────────────┐\n  // │ These PropTypes are generated from the TypeScript type definitions. │\n  // │    To update them, edit the d.ts file and run `pnpm proptypes`.     │\n  // └─────────────────────────────────────────────────────────────────────┘\n  /**\n   * The styles you want to apply globally.\n   */\n  styles: PropTypes /* @typescript-to-proptypes-ignore */.oneOfType([PropTypes.array, PropTypes.func, PropTypes.number, PropTypes.object, PropTypes.string, PropTypes.bool])\n} : void 0;\nexport default GlobalStyles;","// copied from @mui/system/createStyled\nfunction slotShouldForwardProp(prop) {\n  return prop !== 'ownerState' && prop !== 'theme' && prop !== 'sx' && prop !== 'as';\n}\nexport default slotShouldForwardProp;","import slotShouldForwardProp from \"./slotShouldForwardProp.js\";\nconst rootShouldForwardProp = prop => slotShouldForwardProp(prop) && prop !== 'classes';\nexport default rootShouldForwardProp;","'use client';\n\nimport createStyled from '@mui/system/createStyled';\nimport defaultTheme from \"./defaultTheme.js\";\nimport THEME_ID from \"./identifier.js\";\nimport rootShouldForwardProp from \"./rootShouldForwardProp.js\";\nexport { default as slotShouldForwardProp } from \"./slotShouldForwardProp.js\";\nexport { default as rootShouldForwardProp } from \"./rootShouldForwardProp.js\";\nconst styled = createStyled({\n  themeId: THEME_ID,\n  defaultTheme,\n  rootShouldForwardProp\n});\nexport default styled;","import { extendSxProp } from '@mui/system/styleFunctionSx';\nimport useTheme from \"../styles/useTheme.js\";\nimport GlobalStyles from \"../GlobalStyles/index.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport { css, keyframes } from '@mui/system';\nexport { default as styled } from \"../styles/styled.js\";\nexport function globalCss(styles) {\n  return function GlobalStylesWrapper(props) {\n    return (\n      /*#__PURE__*/\n      // Pigment CSS `globalCss` support callback with theme inside an object but `GlobalStyles` support theme as a callback value.\n      _jsx(GlobalStyles, {\n        styles: typeof styles === 'function' ? theme => styles({\n          theme,\n          ...props\n        }) : styles\n      })\n    );\n  };\n}\n\n// eslint-disable-next-line @typescript-eslint/naming-convention\nexport function internal_createExtendSxProp() {\n  return extendSxProp;\n}\nexport { useTheme };","import { unstable_memoTheme } from '@mui/system';\nconst memoTheme = unstable_memoTheme;\nexport default memoTheme;","'use client';\n\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport SystemDefaultPropsProvider, { useDefaultProps as useSystemDefaultProps } from '@mui/system/DefaultPropsProvider';\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nfunction DefaultPropsProvider(props) {\n  return /*#__PURE__*/_jsx(SystemDefaultPropsProvider, {\n    ...props\n  });\n}\nprocess.env.NODE_ENV !== \"production\" ? DefaultPropsProvider.propTypes /* remove-proptypes */ = {\n  // ┌────────────────────────────── Warning ──────────────────────────────┐\n  // │ These PropTypes are generated from the TypeScript type definitions. │\n  // │ To update them, edit the TypeScript types and run `pnpm proptypes`. │\n  // └─────────────────────────────────────────────────────────────────────┘\n  /**\n   * @ignore\n   */\n  children: PropTypes.node,\n  /**\n   * @ignore\n   */\n  value: PropTypes.object.isRequired\n} : void 0;\nexport default DefaultPropsProvider;\nexport function useDefaultProps(params) {\n  return useSystemDefaultProps(params);\n}","import generateUtilityClasses from '@mui/utils/generateUtilityClasses';\nimport generateUtilityClass from '@mui/utils/generateUtilityClass';\nexport function getSvgIconUtilityClass(slot) {\n  return generateUtilityClass('MuiSvgIcon', slot);\n}\nconst svgIconClasses = generateUtilityClasses('MuiSvgIcon', ['root', 'colorPrimary', 'colorSecondary', 'colorAction', 'colorError', 'colorDisabled', 'fontSizeInherit', 'fontSizeSmall', 'fontSizeMedium', 'fontSizeLarge']);\nexport default svgIconClasses;","'use client';\n\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport composeClasses from '@mui/utils/composeClasses';\nimport capitalize from \"../utils/capitalize.js\";\nimport { styled } from \"../zero-styled/index.js\";\nimport memoTheme from \"../utils/memoTheme.js\";\nimport { useDefaultProps } from \"../DefaultPropsProvider/index.js\";\nimport { getSvgIconUtilityClass } from \"./svgIconClasses.js\";\nimport { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nconst useUtilityClasses = ownerState => {\n  const {\n    color,\n    fontSize,\n    classes\n  } = ownerState;\n  const slots = {\n    root: ['root', color !== 'inherit' && `color${capitalize(color)}`, `fontSize${capitalize(fontSize)}`]\n  };\n  return composeClasses(slots, getSvgIconUtilityClass, classes);\n};\nconst SvgIconRoot = styled('svg', {\n  name: 'MuiSvgIcon',\n  slot: 'Root',\n  overridesResolver: (props, styles) => {\n    const {\n      ownerState\n    } = props;\n    return [styles.root, ownerState.color !== 'inherit' && styles[`color${capitalize(ownerState.color)}`], styles[`fontSize${capitalize(ownerState.fontSize)}`]];\n  }\n})(memoTheme(({\n  theme\n}) => ({\n  userSelect: 'none',\n  width: '1em',\n  height: '1em',\n  display: 'inline-block',\n  flexShrink: 0,\n  transition: theme.transitions?.create?.('fill', {\n    duration: (theme.vars ?? theme).transitions?.duration?.shorter\n  }),\n  variants: [{\n    props: props => !props.hasSvgAsChild,\n    style: {\n      // the <svg> will define the property that has `currentColor`\n      // for example heroicons uses fill=\"none\" and stroke=\"currentColor\"\n      fill: 'currentColor'\n    }\n  }, {\n    props: {\n      fontSize: 'inherit'\n    },\n    style: {\n      fontSize: 'inherit'\n    }\n  }, {\n    props: {\n      fontSize: 'small'\n    },\n    style: {\n      fontSize: theme.typography?.pxToRem?.(20) || '1.25rem'\n    }\n  }, {\n    props: {\n      fontSize: 'medium'\n    },\n    style: {\n      fontSize: theme.typography?.pxToRem?.(24) || '1.5rem'\n    }\n  }, {\n    props: {\n      fontSize: 'large'\n    },\n    style: {\n      fontSize: theme.typography?.pxToRem?.(35) || '2.1875rem'\n    }\n  },\n  // TODO v5 deprecate color prop, v6 remove for sx\n  ...Object.entries((theme.vars ?? theme).palette).filter(([, value]) => value && value.main).map(([color]) => ({\n    props: {\n      color\n    },\n    style: {\n      color: (theme.vars ?? theme).palette?.[color]?.main\n    }\n  })), {\n    props: {\n      color: 'action'\n    },\n    style: {\n      color: (theme.vars ?? theme).palette?.action?.active\n    }\n  }, {\n    props: {\n      color: 'disabled'\n    },\n    style: {\n      color: (theme.vars ?? theme).palette?.action?.disabled\n    }\n  }, {\n    props: {\n      color: 'inherit'\n    },\n    style: {\n      color: undefined\n    }\n  }]\n})));\nconst SvgIcon = /*#__PURE__*/React.forwardRef(function SvgIcon(inProps, ref) {\n  const props = useDefaultProps({\n    props: inProps,\n    name: 'MuiSvgIcon'\n  });\n  const {\n    children,\n    className,\n    color = 'inherit',\n    component = 'svg',\n    fontSize = 'medium',\n    htmlColor,\n    inheritViewBox = false,\n    titleAccess,\n    viewBox = '0 0 24 24',\n    ...other\n  } = props;\n  const hasSvgAsChild = /*#__PURE__*/React.isValidElement(children) && children.type === 'svg';\n  const ownerState = {\n    ...props,\n    color,\n    component,\n    fontSize,\n    instanceFontSize: inProps.fontSize,\n    inheritViewBox,\n    viewBox,\n    hasSvgAsChild\n  };\n  const more = {};\n  if (!inheritViewBox) {\n    more.viewBox = viewBox;\n  }\n  const classes = useUtilityClasses(ownerState);\n  return /*#__PURE__*/_jsxs(SvgIconRoot, {\n    as: component,\n    className: clsx(classes.root, className),\n    focusable: \"false\",\n    color: htmlColor,\n    \"aria-hidden\": titleAccess ? undefined : true,\n    role: titleAccess ? 'img' : undefined,\n    ref: ref,\n    ...more,\n    ...other,\n    ...(hasSvgAsChild && children.props),\n    ownerState: ownerState,\n    children: [hasSvgAsChild ? children.props.children : children, titleAccess ? /*#__PURE__*/_jsx(\"title\", {\n      children: titleAccess\n    }) : null]\n  });\n});\nprocess.env.NODE_ENV !== \"production\" ? SvgIcon.propTypes /* remove-proptypes */ = {\n  // ┌────────────────────────────── Warning ──────────────────────────────┐\n  // │ These PropTypes are generated from the TypeScript type definitions. │\n  // │    To update them, edit the d.ts file and run `pnpm proptypes`.     │\n  // └─────────────────────────────────────────────────────────────────────┘\n  /**\n   * Node passed into the SVG element.\n   */\n  children: PropTypes.node,\n  /**\n   * Override or extend the styles applied to the component.\n   */\n  classes: PropTypes.object,\n  /**\n   * @ignore\n   */\n  className: PropTypes.string,\n  /**\n   * The color of the component.\n   * It supports both default and custom theme colors, which can be added as shown in the\n   * [palette customization guide](https://mui.com/material-ui/customization/palette/#custom-colors).\n   * You can use the `htmlColor` prop to apply a color attribute to the SVG element.\n   * @default 'inherit'\n   */\n  color: PropTypes /* @typescript-to-proptypes-ignore */.oneOfType([PropTypes.oneOf(['inherit', 'action', 'disabled', 'primary', 'secondary', 'error', 'info', 'success', 'warning']), PropTypes.string]),\n  /**\n   * The component used for the root node.\n   * Either a string to use a HTML element or a component.\n   */\n  component: PropTypes.elementType,\n  /**\n   * The fontSize applied to the icon. Defaults to 24px, but can be configure to inherit font size.\n   * @default 'medium'\n   */\n  fontSize: PropTypes /* @typescript-to-proptypes-ignore */.oneOfType([PropTypes.oneOf(['inherit', 'large', 'medium', 'small']), PropTypes.string]),\n  /**\n   * Applies a color attribute to the SVG element.\n   */\n  htmlColor: PropTypes.string,\n  /**\n   * If `true`, the root node will inherit the custom `component`'s viewBox and the `viewBox`\n   * prop will be ignored.\n   * Useful when you want to reference a custom `component` and have `SvgIcon` pass that\n   * `component`'s viewBox to the root node.\n   * @default false\n   */\n  inheritViewBox: PropTypes.bool,\n  /**\n   * The shape-rendering attribute. The behavior of the different options is described on the\n   * [MDN Web Docs](https://developer.mozilla.org/en-US/docs/Web/SVG/Reference/Attribute/shape-rendering).\n   * If you are having issues with blurry icons you should investigate this prop.\n   */\n  shapeRendering: PropTypes.string,\n  /**\n   * The system prop that allows defining system overrides as well as additional CSS styles.\n   */\n  sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object]),\n  /**\n   * Provides a human-readable title for the element that contains it.\n   * https://www.w3.org/TR/SVG-access/#Equivalent\n   */\n  titleAccess: PropTypes.string,\n  /**\n   * Allows you to redefine what the coordinates without units mean inside an SVG element.\n   * For example, if the SVG element is 500 (width) by 200 (height),\n   * and you pass viewBox=\"0 0 50 20\",\n   * this means that the coordinates inside the SVG will go from the top left corner (0,0)\n   * to bottom right (50,20) and each unit will be worth 10px.\n   * @default '0 0 24 24'\n   */\n  viewBox: PropTypes.string\n} : void 0;\nSvgIcon.muiName = 'SvgIcon';\nexport default SvgIcon;","'use client';\n\nimport * as React from 'react';\nimport SvgIcon from \"../SvgIcon/index.js\";\n\n/**\n * Private module reserved for @mui packages.\n */\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport default function createSvgIcon(path, displayName) {\n  function Component(props, ref) {\n    return /*#__PURE__*/_jsx(SvgIcon, {\n      \"data-testid\": process.env.NODE_ENV !== 'production' ? `${displayName}Icon` : undefined,\n      ref: ref,\n      ...props,\n      children: path\n    });\n  }\n  if (process.env.NODE_ENV !== 'production') {\n    // Need to set `displayName` on the inner component for React.memo.\n    // React prior to 16.14 ignores `displayName` on the wrapper.\n    Component.displayName = `${displayName}Icon`;\n  }\n  Component.muiName = SvgIcon.muiName;\n  return /*#__PURE__*/React.memo(/*#__PURE__*/React.forwardRef(Component));\n}","// Corresponds to 10 frames at 60 Hz.\n// A few bytes payload overhead when lodash/debounce is ~3 kB and debounce ~300 B.\nexport default function debounce(func, wait = 166) {\n  let timeout;\n  function debounced(...args) {\n    const later = () => {\n      // @ts-ignore\n      func.apply(this, args);\n    };\n    clearTimeout(timeout);\n    timeout = setTimeout(later, wait);\n  }\n  debounced.clear = () => {\n    clearTimeout(timeout);\n  };\n  return debounced;\n}","export default function ownerDocument(node) {\n  return node && node.ownerDocument || document;\n}","import ownerDocument from \"../ownerDocument/index.js\";\nexport default function ownerWindow(node) {\n  const doc = ownerDocument(node);\n  return doc.defaultView || window;\n}","export default function requirePropFactory(componentNameInError, Component) {\n  if (process.env.NODE_ENV === 'production') {\n    return () => () => null;\n  }\n\n  // eslint-disable-next-line react/forbid-foreign-prop-types\n  const prevPropTypes = Component ? {\n    ...Component.propTypes\n  } : null;\n  const requireProp = requiredProp => (props, propName, componentName, location, propFullName, ...args) => {\n    const propFullNameSafe = propFullName || propName;\n    const defaultTypeChecker = prevPropTypes?.[propFullNameSafe];\n    if (defaultTypeChecker) {\n      const typeCheckerResult = defaultTypeChecker(props, propName, componentName, location, propFullName, ...args);\n      if (typeCheckerResult) {\n        return typeCheckerResult;\n      }\n    }\n    if (typeof props[propName] !== 'undefined' && !props[requiredProp]) {\n      return new Error(`The prop \\`${propFullNameSafe}\\` of ` + `\\`${componentNameInError}\\` can only be used together with the \\`${requiredProp}\\` prop.`);\n    }\n    return null;\n  };\n  return requireProp;\n}","/**\n * TODO v5: consider making it private\n *\n * passes {value} to {ref}\n *\n * WARNING: Be sure to only call this inside a callback that is passed as a ref.\n * Otherwise, make sure to cleanup the previous {ref} if it changes. See\n * https://github.com/mui/material-ui/issues/13539\n *\n * Useful if you want to expose the ref of an inner component to the public API\n * while still using it inside the component.\n * @param ref A ref callback or ref object. If anything falsy, this is a no-op.\n */\nexport default function setRef(ref, value) {\n  if (typeof ref === 'function') {\n    ref(value);\n  } else if (ref) {\n    ref.current = value;\n  }\n}","export default function unsupportedProp(props, propName, componentName, location, propFullName) {\n  if (process.env.NODE_ENV === 'production') {\n    return null;\n  }\n  const propFullNameSafe = propFullName || propName;\n  if (typeof props[propName] !== 'undefined') {\n    return new Error(`The prop \\`${propFullNameSafe}\\` is not supported. Please remove it.`);\n  }\n  return null;\n}","'use client';\n\n// TODO: uncomment once we enable eslint-plugin-react-compiler // eslint-disable-next-line react-compiler/react-compiler -- process.env never changes, dependency arrays are intentionally ignored\n/* eslint-disable react-hooks/rules-of-hooks, react-hooks/exhaustive-deps */\nimport * as React from 'react';\nexport default function useControlled(props) {\n  const {\n    controlled,\n    default: defaultProp,\n    name,\n    state = 'value'\n  } = props;\n  // isControlled is ignored in the hook dependency lists as it should never change.\n  const {\n    current: isControlled\n  } = React.useRef(controlled !== undefined);\n  const [valueState, setValue] = React.useState(defaultProp);\n  const value = isControlled ? controlled : valueState;\n  if (process.env.NODE_ENV !== 'production') {\n    React.useEffect(() => {\n      if (isControlled !== (controlled !== undefined)) {\n        console.error([`MUI: A component is changing the ${isControlled ? '' : 'un'}controlled ${state} state of ${name} to be ${isControlled ? 'un' : ''}controlled.`, 'Elements should not switch from uncontrolled to controlled (or vice versa).', `Decide between using a controlled or uncontrolled ${name} ` + 'element for the lifetime of the component.', \"The nature of the state is determined during the first render. It's considered controlled if the value is not `undefined`.\", 'More info: https://fb.me/react-controlled-components'].join('\\n'));\n      }\n    }, [state, name, controlled]);\n    const {\n      current: defaultValue\n    } = React.useRef(defaultProp);\n    React.useEffect(() => {\n      if (!isControlled && JSON.stringify(defaultProp) !== JSON.stringify(defaultValue)) {\n        console.error([`MUI: A component is changing the default ${state} state of an uncontrolled ${name} after being initialized. ` + `To suppress this warning opt to use a controlled ${name}.`].join('\\n'));\n      }\n    }, [JSON.stringify(defaultProp)]);\n  }\n  const setValueIfUncontrolled = React.useCallback(newValue => {\n    if (!isControlled) {\n      setValue(newValue);\n    }\n  }, []);\n\n  // TODO: provide overloads for the useControlled function to account for the case where either\n  // controlled or default is not undefined.\n  // In that case the return type should be [T, React.Dispatch<React.SetStateAction<T>>]\n  // otherwise it should be [T | undefined, React.Dispatch<React.SetStateAction<T | undefined>>]\n  return [value, setValueIfUncontrolled];\n}","'use client';\n\nimport * as React from 'react';\nimport useEnhancedEffect from \"../useEnhancedEffect/index.js\";\n\n/**\n * Inspired by https://github.com/facebook/react/issues/14099#issuecomment-440013892\n * See RFC in https://github.com/reactjs/rfcs/pull/220\n */\n\nfunction useEventCallback(fn) {\n  const ref = React.useRef(fn);\n  useEnhancedEffect(() => {\n    ref.current = fn;\n  });\n  return React.useRef((...args) =>\n  // @ts-expect-error hide `this`\n  (0, ref.current)(...args)).current;\n}\nexport default useEventCallback;","'use client';\n\nimport * as React from 'react';\n\n/**\n * Merges refs into a single memoized callback ref or `null`.\n *\n * ```tsx\n * const rootRef = React.useRef<Instance>(null);\n * const refFork = useForkRef(rootRef, props.ref);\n *\n * return (\n *   <Root {...props} ref={refFork} />\n * );\n * ```\n *\n * @param {Array<React.Ref<Instance> | undefined>} refs The ref array.\n * @returns {React.RefCallback<Instance> | null} The new ref callback.\n */\nexport default function useForkRef(...refs) {\n  const cleanupRef = React.useRef(undefined);\n  const refEffect = React.useCallback(instance => {\n    const cleanups = refs.map(ref => {\n      if (ref == null) {\n        return null;\n      }\n      if (typeof ref === 'function') {\n        const refCallback = ref;\n        const refCleanup = refCallback(instance);\n        return typeof refCleanup === 'function' ? refCleanup : () => {\n          refCallback(null);\n        };\n      }\n      ref.current = instance;\n      return () => {\n        ref.current = null;\n      };\n    });\n    return () => {\n      cleanups.forEach(refCleanup => refCleanup?.());\n    };\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, refs);\n  return React.useMemo(() => {\n    if (refs.every(ref => ref == null)) {\n      return null;\n    }\n    return value => {\n      if (cleanupRef.current) {\n        cleanupRef.current();\n        cleanupRef.current = undefined;\n      }\n      if (value != null) {\n        cleanupRef.current = refEffect(value);\n      }\n    };\n    // TODO: uncomment once we enable eslint-plugin-react-compiler // eslint-disable-next-line react-compiler/react-compiler -- intentionally ignoring that the dependency array must be an array literal\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, refs);\n}","import clsx from 'clsx';\n\n// Brought from [Base UI](https://github.com/mui/base-ui/blob/master/packages/react/src/merge-props/mergeProps.ts#L119)\n// Use it directly from Base UI once it's a package dependency.\nfunction isEventHandler(key, value) {\n  // This approach is more efficient than using a regex.\n  const thirdCharCode = key.charCodeAt(2);\n  return key[0] === 'o' && key[1] === 'n' && thirdCharCode >= 65 /* A */ && thirdCharCode <= 90 /* Z */ && typeof value === 'function';\n}\nexport default function mergeSlotProps(externalSlotProps, defaultSlotProps) {\n  if (!externalSlotProps) {\n    return defaultSlotProps;\n  }\n  function extractHandlers(externalSlotPropsValue, defaultSlotPropsValue) {\n    const handlers = {};\n    Object.keys(defaultSlotPropsValue).forEach(key => {\n      if (isEventHandler(key, defaultSlotPropsValue[key]) && typeof externalSlotPropsValue[key] === 'function') {\n        // only compose the handlers if both default and external slot props match the event handler\n        handlers[key] = (...args) => {\n          externalSlotPropsValue[key](...args);\n          defaultSlotPropsValue[key](...args);\n        };\n      }\n    });\n    return handlers;\n  }\n  if (typeof externalSlotProps === 'function' || typeof defaultSlotProps === 'function') {\n    return ownerState => {\n      const defaultSlotPropsValue = typeof defaultSlotProps === 'function' ? defaultSlotProps(ownerState) : defaultSlotProps;\n      const externalSlotPropsValue = typeof externalSlotProps === 'function' ? externalSlotProps({\n        ...ownerState,\n        ...defaultSlotPropsValue\n      }) : externalSlotProps;\n      const className = clsx(ownerState?.className, defaultSlotPropsValue?.className, externalSlotPropsValue?.className);\n      const handlers = extractHandlers(externalSlotPropsValue, defaultSlotPropsValue);\n      return {\n        ...defaultSlotPropsValue,\n        ...externalSlotPropsValue,\n        ...handlers,\n        ...(!!className && {\n          className\n        }),\n        ...(defaultSlotPropsValue?.style && externalSlotPropsValue?.style && {\n          style: {\n            ...defaultSlotPropsValue.style,\n            ...externalSlotPropsValue.style\n          }\n        }),\n        ...(defaultSlotPropsValue?.sx && externalSlotPropsValue?.sx && {\n          sx: [...(Array.isArray(defaultSlotPropsValue.sx) ? defaultSlotPropsValue.sx : [defaultSlotPropsValue.sx]), ...(Array.isArray(externalSlotPropsValue.sx) ? externalSlotPropsValue.sx : [externalSlotPropsValue.sx])]\n        })\n      };\n    };\n  }\n  const typedDefaultSlotProps = defaultSlotProps;\n  const handlers = extractHandlers(externalSlotProps, typedDefaultSlotProps);\n  const className = clsx(typedDefaultSlotProps?.className, externalSlotProps?.className);\n  return {\n    ...defaultSlotProps,\n    ...externalSlotProps,\n    ...handlers,\n    ...(!!className && {\n      className\n    }),\n    ...(typedDefaultSlotProps?.style && externalSlotProps?.style && {\n      style: {\n        ...typedDefaultSlotProps.style,\n        ...externalSlotProps.style\n      }\n    }),\n    ...(typedDefaultSlotProps?.sx && externalSlotProps?.sx && {\n      sx: [...(Array.isArray(typedDefaultSlotProps.sx) ? typedDefaultSlotProps.sx : [typedDefaultSlotProps.sx]), ...(Array.isArray(externalSlotProps.sx) ? externalSlotProps.sx : [externalSlotProps.sx])]\n    })\n  };\n}","\"use client\";\n\nimport createSvgIcon from \"./utils/createSvgIcon.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport default createSvgIcon(/*#__PURE__*/_jsx(\"path\", {\n  d: \"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2m0 4c1.93 0 3.5 1.57 3.5 3.5S13.93 13 12 13s-3.5-1.57-3.5-3.5S10.07 6 12 6m0 14c-2.03 0-4.43-.82-6.14-2.88C7.55 15.8 9.68 15 12 15s4.45.8 6.14 2.12C16.43 19.18 14.03 20 12 20\"\n}), 'AccountCircle');","\"use client\";\n\nimport createSvgIcon from \"./utils/createSvgIcon.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport default createSvgIcon(/*#__PURE__*/_jsx(\"path\", {\n  d: \"M9 16.17 4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41z\"\n}), 'Check');","\"use client\";\n\nimport createSvgIcon from \"./utils/createSvgIcon.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport default createSvgIcon(/*#__PURE__*/_jsx(\"path\", {\n  d: \"M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z\"\n}), 'Close');","\"use client\";\n\nimport createSvgIcon from \"./utils/createSvgIcon.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport default createSvgIcon(/*#__PURE__*/_jsx(\"path\", {\n  d: \"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2m1 15h-2v-2h2zm0-4h-2V7h2z\"\n}), 'Error');","\"use client\";\n\nimport createSvgIcon from \"./utils/createSvgIcon.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport default createSvgIcon(/*#__PURE__*/_jsx(\"path\", {\n  d: \"M7.41 8.59 12 13.17l4.59-4.58L18 10l-6 6-6-6z\"\n}), 'KeyboardArrowDown');","\"use client\";\n\nimport createSvgIcon from \"./utils/createSvgIcon.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport default createSvgIcon(/*#__PURE__*/_jsx(\"path\", {\n  d: \"M2.01 21 23 12 2.01 3 2 10l15 2-15 2z\"\n}), 'Send');","\"use client\";\n\nimport createSvgIcon from \"./utils/createSvgIcon.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport default createSvgIcon(/*#__PURE__*/_jsx(\"path\", {\n  d: \"M20 9V7c0-1.1-.9-2-2-2h-3c0-1.66-1.34-3-3-3S9 3.34 9 5H6c-1.1 0-2 .9-2 2v2c-1.66 0-3 1.34-3 3s1.34 3 3 3v4c0 1.1.9 2 2 2h12c1.1 0 2-.9 2-2v-4c1.66 0 3-1.34 3-3s-1.34-3-3-3M7.5 11.5c0-.83.67-1.5 1.5-1.5s1.5.67 1.5 1.5S9.83 13 9 13s-1.5-.67-1.5-1.5M16 17H8v-2h8zm-1-4c-.83 0-1.5-.67-1.5-1.5S14.17 10 15 10s1.5.67 1.5 1.5S15.83 13 15 13\"\n}), 'SmartToy');","export default function chainPropTypes(propType1, propType2) {\n  if (process.env.NODE_ENV === 'production') {\n    return () => null;\n  }\n  return function validate(...args) {\n    return propType1(...args) || propType2(...args);\n  };\n}","function _objectWithoutPropertiesLoose(r, e) {\n  if (null == r) return {};\n  var t = {};\n  for (var n in r) if ({}.hasOwnProperty.call(r, n)) {\n    if (-1 !== e.indexOf(n)) continue;\n    t[n] = r[n];\n  }\n  return t;\n}\nexport { _objectWithoutPropertiesLoose as default };","function _setPrototypeOf(t, e) {\n  return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) {\n    return t.__proto__ = e, t;\n  }, _setPrototypeOf(t, e);\n}\nexport { _setPrototypeOf as default };","import setPrototypeOf from \"./setPrototypeOf.js\";\nfunction _inheritsLoose(t, o) {\n  t.prototype = Object.create(o.prototype), t.prototype.constructor = t, setPrototypeOf(t, o);\n}\nexport { _inheritsLoose as default };","export default {\n  disabled: false\n};","import PropTypes from 'prop-types';\nexport var timeoutsShape = process.env.NODE_ENV !== 'production' ? PropTypes.oneOfType([PropTypes.number, PropTypes.shape({\n  enter: PropTypes.number,\n  exit: PropTypes.number,\n  appear: PropTypes.number\n}).isRequired]) : null;\nexport var classNamesShape = process.env.NODE_ENV !== 'production' ? PropTypes.oneOfType([PropTypes.string, PropTypes.shape({\n  enter: PropTypes.string,\n  exit: PropTypes.string,\n  active: PropTypes.string\n}), PropTypes.shape({\n  enter: PropTypes.string,\n  enterDone: PropTypes.string,\n  enterActive: PropTypes.string,\n  exit: PropTypes.string,\n  exitDone: PropTypes.string,\n  exitActive: PropTypes.string\n})]) : null;","import React from 'react';\nexport default React.createContext(null);","export var forceReflow = function forceReflow(node) {\n  return node.scrollTop;\n};","import _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/esm/objectWithoutPropertiesLoose\";\nimport _inheritsLoose from \"@babel/runtime/helpers/esm/inheritsLoose\";\nimport PropTypes from 'prop-types';\nimport React from 'react';\nimport ReactDOM from 'react-dom';\nimport config from './config';\nimport { timeoutsShape } from './utils/PropTypes';\nimport TransitionGroupContext from './TransitionGroupContext';\nimport { forceReflow } from './utils/reflow';\nexport var UNMOUNTED = 'unmounted';\nexport var EXITED = 'exited';\nexport var ENTERING = 'entering';\nexport var ENTERED = 'entered';\nexport var EXITING = 'exiting';\n/**\n * The Transition component lets you describe a transition from one component\n * state to another _over time_ with a simple declarative API. Most commonly\n * it's used to animate the mounting and unmounting of a component, but can also\n * be used to describe in-place transition states as well.\n *\n * ---\n *\n * **Note**: `Transition` is a platform-agnostic base component. If you're using\n * transitions in CSS, you'll probably want to use\n * [`CSSTransition`](https://reactcommunity.org/react-transition-group/css-transition)\n * instead. It inherits all the features of `Transition`, but contains\n * additional features necessary to play nice with CSS transitions (hence the\n * name of the component).\n *\n * ---\n *\n * By default the `Transition` component does not alter the behavior of the\n * component it renders, it only tracks \"enter\" and \"exit\" states for the\n * components. It's up to you to give meaning and effect to those states. For\n * example we can add styles to a component when it enters or exits:\n *\n * ```jsx\n * import { Transition } from 'react-transition-group';\n *\n * const duration = 300;\n *\n * const defaultStyle = {\n *   transition: `opacity ${duration}ms ease-in-out`,\n *   opacity: 0,\n * }\n *\n * const transitionStyles = {\n *   entering: { opacity: 1 },\n *   entered:  { opacity: 1 },\n *   exiting:  { opacity: 0 },\n *   exited:  { opacity: 0 },\n * };\n *\n * const Fade = ({ in: inProp }) => (\n *   <Transition in={inProp} timeout={duration}>\n *     {state => (\n *       <div style={{\n *         ...defaultStyle,\n *         ...transitionStyles[state]\n *       }}>\n *         I'm a fade Transition!\n *       </div>\n *     )}\n *   </Transition>\n * );\n * ```\n *\n * There are 4 main states a Transition can be in:\n *  - `'entering'`\n *  - `'entered'`\n *  - `'exiting'`\n *  - `'exited'`\n *\n * Transition state is toggled via the `in` prop. When `true` the component\n * begins the \"Enter\" stage. During this stage, the component will shift from\n * its current transition state, to `'entering'` for the duration of the\n * transition and then to the `'entered'` stage once it's complete. Let's take\n * the following example (we'll use the\n * [useState](https://reactjs.org/docs/hooks-reference.html#usestate) hook):\n *\n * ```jsx\n * function App() {\n *   const [inProp, setInProp] = useState(false);\n *   return (\n *     <div>\n *       <Transition in={inProp} timeout={500}>\n *         {state => (\n *           // ...\n *         )}\n *       </Transition>\n *       <button onClick={() => setInProp(true)}>\n *         Click to Enter\n *       </button>\n *     </div>\n *   );\n * }\n * ```\n *\n * When the button is clicked the component will shift to the `'entering'` state\n * and stay there for 500ms (the value of `timeout`) before it finally switches\n * to `'entered'`.\n *\n * When `in` is `false` the same thing happens except the state moves from\n * `'exiting'` to `'exited'`.\n */\n\nvar Transition = /*#__PURE__*/function (_React$Component) {\n  _inheritsLoose(Transition, _React$Component);\n\n  function Transition(props, context) {\n    var _this;\n\n    _this = _React$Component.call(this, props, context) || this;\n    var parentGroup = context; // In the context of a TransitionGroup all enters are really appears\n\n    var appear = parentGroup && !parentGroup.isMounting ? props.enter : props.appear;\n    var initialStatus;\n    _this.appearStatus = null;\n\n    if (props.in) {\n      if (appear) {\n        initialStatus = EXITED;\n        _this.appearStatus = ENTERING;\n      } else {\n        initialStatus = ENTERED;\n      }\n    } else {\n      if (props.unmountOnExit || props.mountOnEnter) {\n        initialStatus = UNMOUNTED;\n      } else {\n        initialStatus = EXITED;\n      }\n    }\n\n    _this.state = {\n      status: initialStatus\n    };\n    _this.nextCallback = null;\n    return _this;\n  }\n\n  Transition.getDerivedStateFromProps = function getDerivedStateFromProps(_ref, prevState) {\n    var nextIn = _ref.in;\n\n    if (nextIn && prevState.status === UNMOUNTED) {\n      return {\n        status: EXITED\n      };\n    }\n\n    return null;\n  } // getSnapshotBeforeUpdate(prevProps) {\n  //   let nextStatus = null\n  //   if (prevProps !== this.props) {\n  //     const { status } = this.state\n  //     if (this.props.in) {\n  //       if (status !== ENTERING && status !== ENTERED) {\n  //         nextStatus = ENTERING\n  //       }\n  //     } else {\n  //       if (status === ENTERING || status === ENTERED) {\n  //         nextStatus = EXITING\n  //       }\n  //     }\n  //   }\n  //   return { nextStatus }\n  // }\n  ;\n\n  var _proto = Transition.prototype;\n\n  _proto.componentDidMount = function componentDidMount() {\n    this.updateStatus(true, this.appearStatus);\n  };\n\n  _proto.componentDidUpdate = function componentDidUpdate(prevProps) {\n    var nextStatus = null;\n\n    if (prevProps !== this.props) {\n      var status = this.state.status;\n\n      if (this.props.in) {\n        if (status !== ENTERING && status !== ENTERED) {\n          nextStatus = ENTERING;\n        }\n      } else {\n        if (status === ENTERING || status === ENTERED) {\n          nextStatus = EXITING;\n        }\n      }\n    }\n\n    this.updateStatus(false, nextStatus);\n  };\n\n  _proto.componentWillUnmount = function componentWillUnmount() {\n    this.cancelNextCallback();\n  };\n\n  _proto.getTimeouts = function getTimeouts() {\n    var timeout = this.props.timeout;\n    var exit, enter, appear;\n    exit = enter = appear = timeout;\n\n    if (timeout != null && typeof timeout !== 'number') {\n      exit = timeout.exit;\n      enter = timeout.enter; // TODO: remove fallback for next major\n\n      appear = timeout.appear !== undefined ? timeout.appear : enter;\n    }\n\n    return {\n      exit: exit,\n      enter: enter,\n      appear: appear\n    };\n  };\n\n  _proto.updateStatus = function updateStatus(mounting, nextStatus) {\n    if (mounting === void 0) {\n      mounting = false;\n    }\n\n    if (nextStatus !== null) {\n      // nextStatus will always be ENTERING or EXITING.\n      this.cancelNextCallback();\n\n      if (nextStatus === ENTERING) {\n        if (this.props.unmountOnExit || this.props.mountOnEnter) {\n          var node = this.props.nodeRef ? this.props.nodeRef.current : ReactDOM.findDOMNode(this); // https://github.com/reactjs/react-transition-group/pull/749\n          // With unmountOnExit or mountOnEnter, the enter animation should happen at the transition between `exited` and `entering`.\n          // To make the animation happen,  we have to separate each rendering and avoid being processed as batched.\n\n          if (node) forceReflow(node);\n        }\n\n        this.performEnter(mounting);\n      } else {\n        this.performExit();\n      }\n    } else if (this.props.unmountOnExit && this.state.status === EXITED) {\n      this.setState({\n        status: UNMOUNTED\n      });\n    }\n  };\n\n  _proto.performEnter = function performEnter(mounting) {\n    var _this2 = this;\n\n    var enter = this.props.enter;\n    var appearing = this.context ? this.context.isMounting : mounting;\n\n    var _ref2 = this.props.nodeRef ? [appearing] : [ReactDOM.findDOMNode(this), appearing],\n        maybeNode = _ref2[0],\n        maybeAppearing = _ref2[1];\n\n    var timeouts = this.getTimeouts();\n    var enterTimeout = appearing ? timeouts.appear : timeouts.enter; // no enter animation skip right to ENTERED\n    // if we are mounting and running this it means appear _must_ be set\n\n    if (!mounting && !enter || config.disabled) {\n      this.safeSetState({\n        status: ENTERED\n      }, function () {\n        _this2.props.onEntered(maybeNode);\n      });\n      return;\n    }\n\n    this.props.onEnter(maybeNode, maybeAppearing);\n    this.safeSetState({\n      status: ENTERING\n    }, function () {\n      _this2.props.onEntering(maybeNode, maybeAppearing);\n\n      _this2.onTransitionEnd(enterTimeout, function () {\n        _this2.safeSetState({\n          status: ENTERED\n        }, function () {\n          _this2.props.onEntered(maybeNode, maybeAppearing);\n        });\n      });\n    });\n  };\n\n  _proto.performExit = function performExit() {\n    var _this3 = this;\n\n    var exit = this.props.exit;\n    var timeouts = this.getTimeouts();\n    var maybeNode = this.props.nodeRef ? undefined : ReactDOM.findDOMNode(this); // no exit animation skip right to EXITED\n\n    if (!exit || config.disabled) {\n      this.safeSetState({\n        status: EXITED\n      }, function () {\n        _this3.props.onExited(maybeNode);\n      });\n      return;\n    }\n\n    this.props.onExit(maybeNode);\n    this.safeSetState({\n      status: EXITING\n    }, function () {\n      _this3.props.onExiting(maybeNode);\n\n      _this3.onTransitionEnd(timeouts.exit, function () {\n        _this3.safeSetState({\n          status: EXITED\n        }, function () {\n          _this3.props.onExited(maybeNode);\n        });\n      });\n    });\n  };\n\n  _proto.cancelNextCallback = function cancelNextCallback() {\n    if (this.nextCallback !== null) {\n      this.nextCallback.cancel();\n      this.nextCallback = null;\n    }\n  };\n\n  _proto.safeSetState = function safeSetState(nextState, callback) {\n    // This shouldn't be necessary, but there are weird race conditions with\n    // setState callbacks and unmounting in testing, so always make sure that\n    // we can cancel any pending setState callbacks after we unmount.\n    callback = this.setNextCallback(callback);\n    this.setState(nextState, callback);\n  };\n\n  _proto.setNextCallback = function setNextCallback(callback) {\n    var _this4 = this;\n\n    var active = true;\n\n    this.nextCallback = function (event) {\n      if (active) {\n        active = false;\n        _this4.nextCallback = null;\n        callback(event);\n      }\n    };\n\n    this.nextCallback.cancel = function () {\n      active = false;\n    };\n\n    return this.nextCallback;\n  };\n\n  _proto.onTransitionEnd = function onTransitionEnd(timeout, handler) {\n    this.setNextCallback(handler);\n    var node = this.props.nodeRef ? this.props.nodeRef.current : ReactDOM.findDOMNode(this);\n    var doesNotHaveTimeoutOrListener = timeout == null && !this.props.addEndListener;\n\n    if (!node || doesNotHaveTimeoutOrListener) {\n      setTimeout(this.nextCallback, 0);\n      return;\n    }\n\n    if (this.props.addEndListener) {\n      var _ref3 = this.props.nodeRef ? [this.nextCallback] : [node, this.nextCallback],\n          maybeNode = _ref3[0],\n          maybeNextCallback = _ref3[1];\n\n      this.props.addEndListener(maybeNode, maybeNextCallback);\n    }\n\n    if (timeout != null) {\n      setTimeout(this.nextCallback, timeout);\n    }\n  };\n\n  _proto.render = function render() {\n    var status = this.state.status;\n\n    if (status === UNMOUNTED) {\n      return null;\n    }\n\n    var _this$props = this.props,\n        children = _this$props.children,\n        _in = _this$props.in,\n        _mountOnEnter = _this$props.mountOnEnter,\n        _unmountOnExit = _this$props.unmountOnExit,\n        _appear = _this$props.appear,\n        _enter = _this$props.enter,\n        _exit = _this$props.exit,\n        _timeout = _this$props.timeout,\n        _addEndListener = _this$props.addEndListener,\n        _onEnter = _this$props.onEnter,\n        _onEntering = _this$props.onEntering,\n        _onEntered = _this$props.onEntered,\n        _onExit = _this$props.onExit,\n        _onExiting = _this$props.onExiting,\n        _onExited = _this$props.onExited,\n        _nodeRef = _this$props.nodeRef,\n        childProps = _objectWithoutPropertiesLoose(_this$props, [\"children\", \"in\", \"mountOnEnter\", \"unmountOnExit\", \"appear\", \"enter\", \"exit\", \"timeout\", \"addEndListener\", \"onEnter\", \"onEntering\", \"onEntered\", \"onExit\", \"onExiting\", \"onExited\", \"nodeRef\"]);\n\n    return (\n      /*#__PURE__*/\n      // allows for nested Transitions\n      React.createElement(TransitionGroupContext.Provider, {\n        value: null\n      }, typeof children === 'function' ? children(status, childProps) : React.cloneElement(React.Children.only(children), childProps))\n    );\n  };\n\n  return Transition;\n}(React.Component);\n\nTransition.contextType = TransitionGroupContext;\nTransition.propTypes = process.env.NODE_ENV !== \"production\" ? {\n  /**\n   * A React reference to DOM element that need to transition:\n   * https://stackoverflow.com/a/51127130/4671932\n   *\n   *   - When `nodeRef` prop is used, `node` is not passed to callback functions\n   *      (e.g. `onEnter`) because user already has direct access to the node.\n   *   - When changing `key` prop of `Transition` in a `TransitionGroup` a new\n   *     `nodeRef` need to be provided to `Transition` with changed `key` prop\n   *     (see\n   *     [test/CSSTransition-test.js](https://github.com/reactjs/react-transition-group/blob/13435f897b3ab71f6e19d724f145596f5910581c/test/CSSTransition-test.js#L362-L437)).\n   */\n  nodeRef: PropTypes.shape({\n    current: typeof Element === 'undefined' ? PropTypes.any : function (propValue, key, componentName, location, propFullName, secret) {\n      var value = propValue[key];\n      return PropTypes.instanceOf(value && 'ownerDocument' in value ? value.ownerDocument.defaultView.Element : Element)(propValue, key, componentName, location, propFullName, secret);\n    }\n  }),\n\n  /**\n   * A `function` child can be used instead of a React element. This function is\n   * called with the current transition status (`'entering'`, `'entered'`,\n   * `'exiting'`, `'exited'`), which can be used to apply context\n   * specific props to a component.\n   *\n   * ```jsx\n   * <Transition in={this.state.in} timeout={150}>\n   *   {state => (\n   *     <MyComponent className={`fade fade-${state}`} />\n   *   )}\n   * </Transition>\n   * ```\n   */\n  children: PropTypes.oneOfType([PropTypes.func.isRequired, PropTypes.element.isRequired]).isRequired,\n\n  /**\n   * Show the component; triggers the enter or exit states\n   */\n  in: PropTypes.bool,\n\n  /**\n   * By default the child component is mounted immediately along with\n   * the parent `Transition` component. If you want to \"lazy mount\" the component on the\n   * first `in={true}` you can set `mountOnEnter`. After the first enter transition the component will stay\n   * mounted, even on \"exited\", unless you also specify `unmountOnExit`.\n   */\n  mountOnEnter: PropTypes.bool,\n\n  /**\n   * By default the child component stays mounted after it reaches the `'exited'` state.\n   * Set `unmountOnExit` if you'd prefer to unmount the component after it finishes exiting.\n   */\n  unmountOnExit: PropTypes.bool,\n\n  /**\n   * By default the child component does not perform the enter transition when\n   * it first mounts, regardless of the value of `in`. If you want this\n   * behavior, set both `appear` and `in` to `true`.\n   *\n   * > **Note**: there are no special appear states like `appearing`/`appeared`, this prop\n   * > only adds an additional enter transition. However, in the\n   * > `<CSSTransition>` component that first enter transition does result in\n   * > additional `.appear-*` classes, that way you can choose to style it\n   * > differently.\n   */\n  appear: PropTypes.bool,\n\n  /**\n   * Enable or disable enter transitions.\n   */\n  enter: PropTypes.bool,\n\n  /**\n   * Enable or disable exit transitions.\n   */\n  exit: PropTypes.bool,\n\n  /**\n   * The duration of the transition, in milliseconds.\n   * Required unless `addEndListener` is provided.\n   *\n   * You may specify a single timeout for all transitions:\n   *\n   * ```jsx\n   * timeout={500}\n   * ```\n   *\n   * or individually:\n   *\n   * ```jsx\n   * timeout={{\n   *  appear: 500,\n   *  enter: 300,\n   *  exit: 500,\n   * }}\n   * ```\n   *\n   * - `appear` defaults to the value of `enter`\n   * - `enter` defaults to `0`\n   * - `exit` defaults to `0`\n   *\n   * @type {number | { enter?: number, exit?: number, appear?: number }}\n   */\n  timeout: function timeout(props) {\n    var pt = timeoutsShape;\n    if (!props.addEndListener) pt = pt.isRequired;\n\n    for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n      args[_key - 1] = arguments[_key];\n    }\n\n    return pt.apply(void 0, [props].concat(args));\n  },\n\n  /**\n   * Add a custom transition end trigger. Called with the transitioning\n   * DOM node and a `done` callback. Allows for more fine grained transition end\n   * logic. Timeouts are still used as a fallback if provided.\n   *\n   * **Note**: when `nodeRef` prop is passed, `node` is not passed.\n   *\n   * ```jsx\n   * addEndListener={(node, done) => {\n   *   // use the css transitionend event to mark the finish of a transition\n   *   node.addEventListener('transitionend', done, false);\n   * }}\n   * ```\n   */\n  addEndListener: PropTypes.func,\n\n  /**\n   * Callback fired before the \"entering\" status is applied. An extra parameter\n   * `isAppearing` is supplied to indicate if the enter stage is occurring on the initial mount\n   *\n   * **Note**: when `nodeRef` prop is passed, `node` is not passed.\n   *\n   * @type Function(node: HtmlElement, isAppearing: bool) -> void\n   */\n  onEnter: PropTypes.func,\n\n  /**\n   * Callback fired after the \"entering\" status is applied. An extra parameter\n   * `isAppearing` is supplied to indicate if the enter stage is occurring on the initial mount\n   *\n   * **Note**: when `nodeRef` prop is passed, `node` is not passed.\n   *\n   * @type Function(node: HtmlElement, isAppearing: bool)\n   */\n  onEntering: PropTypes.func,\n\n  /**\n   * Callback fired after the \"entered\" status is applied. An extra parameter\n   * `isAppearing` is supplied to indicate if the enter stage is occurring on the initial mount\n   *\n   * **Note**: when `nodeRef` prop is passed, `node` is not passed.\n   *\n   * @type Function(node: HtmlElement, isAppearing: bool) -> void\n   */\n  onEntered: PropTypes.func,\n\n  /**\n   * Callback fired before the \"exiting\" status is applied.\n   *\n   * **Note**: when `nodeRef` prop is passed, `node` is not passed.\n   *\n   * @type Function(node: HtmlElement) -> void\n   */\n  onExit: PropTypes.func,\n\n  /**\n   * Callback fired after the \"exiting\" status is applied.\n   *\n   * **Note**: when `nodeRef` prop is passed, `node` is not passed.\n   *\n   * @type Function(node: HtmlElement) -> void\n   */\n  onExiting: PropTypes.func,\n\n  /**\n   * Callback fired after the \"exited\" status is applied.\n   *\n   * **Note**: when `nodeRef` prop is passed, `node` is not passed\n   *\n   * @type Function(node: HtmlElement) -> void\n   */\n  onExited: PropTypes.func\n} : {}; // Name the function so it is clearer in the documentation\n\nfunction noop() {}\n\nTransition.defaultProps = {\n  in: false,\n  mountOnEnter: false,\n  unmountOnExit: false,\n  appear: false,\n  enter: true,\n  exit: true,\n  onEnter: noop,\n  onEntering: noop,\n  onEntered: noop,\n  onExit: noop,\n  onExiting: noop,\n  onExited: noop\n};\nTransition.UNMOUNTED = UNMOUNTED;\nTransition.EXITED = EXITED;\nTransition.ENTERING = ENTERING;\nTransition.ENTERED = ENTERED;\nTransition.EXITING = EXITING;\nexport default Transition;","function _assertThisInitialized(e) {\n  if (void 0 === e) throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n  return e;\n}\nexport { _assertThisInitialized as default };","import { Children, cloneElement, isValidElement } from 'react';\n/**\n * Given `this.props.children`, return an object mapping key to child.\n *\n * @param {*} children `this.props.children`\n * @return {object} Mapping of key to child\n */\n\nexport function getChildMapping(children, mapFn) {\n  var mapper = function mapper(child) {\n    return mapFn && isValidElement(child) ? mapFn(child) : child;\n  };\n\n  var result = Object.create(null);\n  if (children) Children.map(children, function (c) {\n    return c;\n  }).forEach(function (child) {\n    // run the map function here instead so that the key is the computed one\n    result[child.key] = mapper(child);\n  });\n  return result;\n}\n/**\n * When you're adding or removing children some may be added or removed in the\n * same render pass. We want to show *both* since we want to simultaneously\n * animate elements in and out. This function takes a previous set of keys\n * and a new set of keys and merges them with its best guess of the correct\n * ordering. In the future we may expose some of the utilities in\n * ReactMultiChild to make this easy, but for now React itself does not\n * directly have this concept of the union of prevChildren and nextChildren\n * so we implement it here.\n *\n * @param {object} prev prev children as returned from\n * `ReactTransitionChildMapping.getChildMapping()`.\n * @param {object} next next children as returned from\n * `ReactTransitionChildMapping.getChildMapping()`.\n * @return {object} a key set that contains all keys in `prev` and all keys\n * in `next` in a reasonable order.\n */\n\nexport function mergeChildMappings(prev, next) {\n  prev = prev || {};\n  next = next || {};\n\n  function getValueForKey(key) {\n    return key in next ? next[key] : prev[key];\n  } // For each key of `next`, the list of keys to insert before that key in\n  // the combined list\n\n\n  var nextKeysPending = Object.create(null);\n  var pendingKeys = [];\n\n  for (var prevKey in prev) {\n    if (prevKey in next) {\n      if (pendingKeys.length) {\n        nextKeysPending[prevKey] = pendingKeys;\n        pendingKeys = [];\n      }\n    } else {\n      pendingKeys.push(prevKey);\n    }\n  }\n\n  var i;\n  var childMapping = {};\n\n  for (var nextKey in next) {\n    if (nextKeysPending[nextKey]) {\n      for (i = 0; i < nextKeysPending[nextKey].length; i++) {\n        var pendingNextKey = nextKeysPending[nextKey][i];\n        childMapping[nextKeysPending[nextKey][i]] = getValueForKey(pendingNextKey);\n      }\n    }\n\n    childMapping[nextKey] = getValueForKey(nextKey);\n  } // Finally, add the keys which didn't appear before any key in `next`\n\n\n  for (i = 0; i < pendingKeys.length; i++) {\n    childMapping[pendingKeys[i]] = getValueForKey(pendingKeys[i]);\n  }\n\n  return childMapping;\n}\n\nfunction getProp(child, prop, props) {\n  return props[prop] != null ? props[prop] : child.props[prop];\n}\n\nexport function getInitialChildMapping(props, onExited) {\n  return getChildMapping(props.children, function (child) {\n    return cloneElement(child, {\n      onExited: onExited.bind(null, child),\n      in: true,\n      appear: getProp(child, 'appear', props),\n      enter: getProp(child, 'enter', props),\n      exit: getProp(child, 'exit', props)\n    });\n  });\n}\nexport function getNextChildMapping(nextProps, prevChildMapping, onExited) {\n  var nextChildMapping = getChildMapping(nextProps.children);\n  var children = mergeChildMappings(prevChildMapping, nextChildMapping);\n  Object.keys(children).forEach(function (key) {\n    var child = children[key];\n    if (!isValidElement(child)) return;\n    var hasPrev = (key in prevChildMapping);\n    var hasNext = (key in nextChildMapping);\n    var prevChild = prevChildMapping[key];\n    var isLeaving = isValidElement(prevChild) && !prevChild.props.in; // item is new (entering)\n\n    if (hasNext && (!hasPrev || isLeaving)) {\n      // console.log('entering', key)\n      children[key] = cloneElement(child, {\n        onExited: onExited.bind(null, child),\n        in: true,\n        exit: getProp(child, 'exit', nextProps),\n        enter: getProp(child, 'enter', nextProps)\n      });\n    } else if (!hasNext && hasPrev && !isLeaving) {\n      // item is old (exiting)\n      // console.log('leaving', key)\n      children[key] = cloneElement(child, {\n        in: false\n      });\n    } else if (hasNext && hasPrev && isValidElement(prevChild)) {\n      // item hasn't changed transition states\n      // copy over the last transition props;\n      // console.log('unchanged', key)\n      children[key] = cloneElement(child, {\n        onExited: onExited.bind(null, child),\n        in: prevChild.props.in,\n        exit: getProp(child, 'exit', nextProps),\n        enter: getProp(child, 'enter', nextProps)\n      });\n    }\n  });\n  return children;\n}","import _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/esm/objectWithoutPropertiesLoose\";\nimport _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _assertThisInitialized from \"@babel/runtime/helpers/esm/assertThisInitialized\";\nimport _inheritsLoose from \"@babel/runtime/helpers/esm/inheritsLoose\";\nimport PropTypes from 'prop-types';\nimport React from 'react';\nimport TransitionGroupContext from './TransitionGroupContext';\nimport { getChildMapping, getInitialChildMapping, getNextChildMapping } from './utils/ChildMapping';\n\nvar values = Object.values || function (obj) {\n  return Object.keys(obj).map(function (k) {\n    return obj[k];\n  });\n};\n\nvar defaultProps = {\n  component: 'div',\n  childFactory: function childFactory(child) {\n    return child;\n  }\n};\n/**\n * The `<TransitionGroup>` component manages a set of transition components\n * (`<Transition>` and `<CSSTransition>`) in a list. Like with the transition\n * components, `<TransitionGroup>` is a state machine for managing the mounting\n * and unmounting of components over time.\n *\n * Consider the example below. As items are removed or added to the TodoList the\n * `in` prop is toggled automatically by the `<TransitionGroup>`.\n *\n * Note that `<TransitionGroup>`  does not define any animation behavior!\n * Exactly _how_ a list item animates is up to the individual transition\n * component. This means you can mix and match animations across different list\n * items.\n */\n\nvar TransitionGroup = /*#__PURE__*/function (_React$Component) {\n  _inheritsLoose(TransitionGroup, _React$Component);\n\n  function TransitionGroup(props, context) {\n    var _this;\n\n    _this = _React$Component.call(this, props, context) || this;\n\n    var handleExited = _this.handleExited.bind(_assertThisInitialized(_this)); // Initial children should all be entering, dependent on appear\n\n\n    _this.state = {\n      contextValue: {\n        isMounting: true\n      },\n      handleExited: handleExited,\n      firstRender: true\n    };\n    return _this;\n  }\n\n  var _proto = TransitionGroup.prototype;\n\n  _proto.componentDidMount = function componentDidMount() {\n    this.mounted = true;\n    this.setState({\n      contextValue: {\n        isMounting: false\n      }\n    });\n  };\n\n  _proto.componentWillUnmount = function componentWillUnmount() {\n    this.mounted = false;\n  };\n\n  TransitionGroup.getDerivedStateFromProps = function getDerivedStateFromProps(nextProps, _ref) {\n    var prevChildMapping = _ref.children,\n        handleExited = _ref.handleExited,\n        firstRender = _ref.firstRender;\n    return {\n      children: firstRender ? getInitialChildMapping(nextProps, handleExited) : getNextChildMapping(nextProps, prevChildMapping, handleExited),\n      firstRender: false\n    };\n  } // node is `undefined` when user provided `nodeRef` prop\n  ;\n\n  _proto.handleExited = function handleExited(child, node) {\n    var currentChildMapping = getChildMapping(this.props.children);\n    if (child.key in currentChildMapping) return;\n\n    if (child.props.onExited) {\n      child.props.onExited(node);\n    }\n\n    if (this.mounted) {\n      this.setState(function (state) {\n        var children = _extends({}, state.children);\n\n        delete children[child.key];\n        return {\n          children: children\n        };\n      });\n    }\n  };\n\n  _proto.render = function render() {\n    var _this$props = this.props,\n        Component = _this$props.component,\n        childFactory = _this$props.childFactory,\n        props = _objectWithoutPropertiesLoose(_this$props, [\"component\", \"childFactory\"]);\n\n    var contextValue = this.state.contextValue;\n    var children = values(this.state.children).map(childFactory);\n    delete props.appear;\n    delete props.enter;\n    delete props.exit;\n\n    if (Component === null) {\n      return /*#__PURE__*/React.createElement(TransitionGroupContext.Provider, {\n        value: contextValue\n      }, children);\n    }\n\n    return /*#__PURE__*/React.createElement(TransitionGroupContext.Provider, {\n      value: contextValue\n    }, /*#__PURE__*/React.createElement(Component, props, children));\n  };\n\n  return TransitionGroup;\n}(React.Component);\n\nTransitionGroup.propTypes = process.env.NODE_ENV !== \"production\" ? {\n  /**\n   * `<TransitionGroup>` renders a `<div>` by default. You can change this\n   * behavior by providing a `component` prop.\n   * If you use React v16+ and would like to avoid a wrapping `<div>` element\n   * you can pass in `component={null}`. This is useful if the wrapping div\n   * borks your css styles.\n   */\n  component: PropTypes.any,\n\n  /**\n   * A set of `<Transition>` components, that are toggled `in` and out as they\n   * leave. the `<TransitionGroup>` will inject specific transition props, so\n   * remember to spread them through if you are wrapping the `<Transition>` as\n   * with our `<Fade>` example.\n   *\n   * While this component is meant for multiple `Transition` or `CSSTransition`\n   * children, sometimes you may want to have a single transition child with\n   * content that you want to be transitioned out and in when you change it\n   * (e.g. routes, images etc.) In that case you can change the `key` prop of\n   * the transition child as you change its content, this will cause\n   * `TransitionGroup` to transition the child out and back in.\n   */\n  children: PropTypes.node,\n\n  /**\n   * A convenience prop that enables or disables appear animations\n   * for all children. Note that specifying this will override any defaults set\n   * on individual children Transitions.\n   */\n  appear: PropTypes.bool,\n\n  /**\n   * A convenience prop that enables or disables enter animations\n   * for all children. Note that specifying this will override any defaults set\n   * on individual children Transitions.\n   */\n  enter: PropTypes.bool,\n\n  /**\n   * A convenience prop that enables or disables exit animations\n   * for all children. Note that specifying this will override any defaults set\n   * on individual children Transitions.\n   */\n  exit: PropTypes.bool,\n\n  /**\n   * You may need to apply reactive updates to a child as it is exiting.\n   * This is generally done by using `cloneElement` however in the case of an exiting\n   * child the element has already been removed and not accessible to the consumer.\n   *\n   * If you do need to update a child as it leaves you can provide a `childFactory`\n   * to wrap every child, even the ones that are leaving.\n   *\n   * @type Function(child: ReactElement) -> ReactElement\n   */\n  childFactory: PropTypes.func\n} : {};\nTransitionGroup.defaultProps = defaultProps;\nexport default TransitionGroup;","'use client';\n\nimport * as React from 'react';\nconst UNINITIALIZED = {};\n\n/**\n * A React.useRef() that is initialized lazily with a function. Note that it accepts an optional\n * initialization argument, so the initialization function doesn't need to be an inline closure.\n *\n * @usage\n *   const ref = useLazyRef(sortColumns, columns)\n */\nexport default function useLazyRef(init, initArg) {\n  const ref = React.useRef(UNINITIALIZED);\n  if (ref.current === UNINITIALIZED) {\n    ref.current = init(initArg);\n  }\n  return ref;\n}","'use client';\n\nimport * as React from 'react';\nconst EMPTY = [];\n\n/**\n * A React.useEffect equivalent that runs once, when the component is mounted.\n */\nexport default function useOnMount(fn) {\n  // TODO: uncomment once we enable eslint-plugin-react-compiler // eslint-disable-next-line react-compiler/react-compiler -- no need to put `fn` in the dependency array\n  /* eslint-disable react-hooks/exhaustive-deps */\n  React.useEffect(fn, EMPTY);\n  /* eslint-enable react-hooks/exhaustive-deps */\n}","'use client';\n\nimport useLazyRef from \"../useLazyRef/useLazyRef.js\";\nimport useOnMount from \"../useOnMount/useOnMount.js\";\nexport class Timeout {\n  static create() {\n    return new Timeout();\n  }\n  currentId = null;\n\n  /**\n   * Executes `fn` after `delay`, clearing any previously scheduled call.\n   */\n  start(delay, fn) {\n    this.clear();\n    this.currentId = setTimeout(() => {\n      this.currentId = null;\n      fn();\n    }, delay);\n  }\n  clear = () => {\n    if (this.currentId !== null) {\n      clearTimeout(this.currentId);\n      this.currentId = null;\n    }\n  };\n  disposeEffect = () => {\n    return this.clear;\n  };\n}\nexport default function useTimeout() {\n  const timeout = useLazyRef(Timeout.create).current;\n  useOnMount(timeout.disposeEffect);\n  return timeout;\n}","import PropTypes from 'prop-types';\nimport * as React from 'react';\nimport chainPropTypes from \"../chainPropTypes/index.js\";\nfunction isClassComponent(elementType) {\n  // elementType.prototype?.isReactComponent\n  const {\n    prototype = {}\n  } = elementType;\n  return Boolean(prototype.isReactComponent);\n}\nfunction elementTypeAcceptingRef(props, propName, componentName, location, propFullName) {\n  const propValue = props[propName];\n  const safePropName = propFullName || propName;\n  if (propValue == null ||\n  // When server-side rendering React doesn't warn either.\n  // This is not an accurate check for SSR.\n  // This is only in place for emotion compat.\n  // TODO: Revisit once https://github.com/facebook/react/issues/20047 is resolved.\n  typeof window === 'undefined') {\n    return null;\n  }\n  let warningHint;\n\n  /**\n   * Blacklisting instead of whitelisting\n   *\n   * Blacklisting will miss some components, such as React.Fragment. Those will at least\n   * trigger a warning in React.\n   * We can't whitelist because there is no safe way to detect React.forwardRef\n   * or class components. \"Safe\" means there's no public API.\n   *\n   */\n  if (typeof propValue === 'function' && !isClassComponent(propValue)) {\n    warningHint = 'Did you accidentally provide a plain function component instead?';\n  }\n  if (propValue === React.Fragment) {\n    warningHint = 'Did you accidentally provide a React.Fragment instead?';\n  }\n  if (warningHint !== undefined) {\n    return new Error(`Invalid ${location} \\`${safePropName}\\` supplied to \\`${componentName}\\`. ` + `Expected an element type that can hold a ref. ${warningHint} ` + 'For more information see https://mui.com/r/caveat-with-refs-guide');\n  }\n  return null;\n}\nexport default chainPropTypes(PropTypes.elementType, elementTypeAcceptingRef);","export const reflow = node => node.scrollTop;\nexport function normalizedTransitionCallback(nodeRef, callback) {\n  return maybeIsAppearing => {\n    if (callback) {\n      const node = nodeRef.current;\n      // onEnterXxx and onExitXxx callbacks have a different arguments.length value.\n      if (maybeIsAppearing === undefined) {\n        callback(node);\n      } else {\n        callback(node, maybeIsAppearing);\n      }\n    }\n  };\n}\n/**\n * Computes the child style for a transition component, reusing existing\n * references when possible to preserve referential equality for React.memo.\n */\nexport function getTransitionChildStyle(state, inProp, baseStyles, hiddenStyles, styleProp, childStyle) {\n  const base = state === 'exited' && !inProp ? hiddenStyles : baseStyles[state] || baseStyles.exited;\n  return styleProp || childStyle ? {\n    ...base,\n    ...styleProp,\n    ...childStyle\n  } : base;\n}\nexport function getTransitionProps(props, options) {\n  const {\n    timeout,\n    easing,\n    style = {}\n  } = props;\n  return {\n    duration: style.transitionDuration ?? (typeof timeout === 'number' ? timeout : timeout[options.mode] || 0),\n    easing: style.transitionTimingFunction ?? (typeof easing === 'object' ? easing[options.mode] : easing),\n    delay: style.transitionDelay\n  };\n}","/**\n * Determines if a given element is a DOM element name (i.e. not a React component).\n */\nfunction isHostComponent(element) {\n  return typeof element === 'string';\n}\nexport default isHostComponent;","import isHostComponent from \"../isHostComponent/index.js\";\n\n/**\n * Type of the ownerState based on the type of an element it applies to.\n * This resolves to the provided OwnerState for React components and `undefined` for host components.\n * Falls back to `OwnerState | undefined` when the exact type can't be determined in development time.\n */\n\n/**\n * Appends the ownerState object to the props, merging with the existing one if necessary.\n *\n * @param elementType Type of the element that owns the `existingProps`. If the element is a DOM node or undefined, `ownerState` is not applied.\n * @param otherProps Props of the element.\n * @param ownerState\n */\nfunction appendOwnerState(elementType, otherProps, ownerState) {\n  if (elementType === undefined || isHostComponent(elementType)) {\n    return otherProps;\n  }\n  return {\n    ...otherProps,\n    ownerState: {\n      ...otherProps.ownerState,\n      ...ownerState\n    }\n  };\n}\nexport default appendOwnerState;","/**\n * If `componentProps` is a function, calls it with the provided `ownerState`.\n * Otherwise, just returns `componentProps`.\n */\nfunction resolveComponentProps(componentProps, ownerState, slotState) {\n  if (typeof componentProps === 'function') {\n    return componentProps(ownerState, slotState);\n  }\n  return componentProps;\n}\nexport default resolveComponentProps;","/**\n * Extracts event handlers from a given object.\n * A prop is considered an event handler if it is a function and its name starts with `on`.\n *\n * @param object An object to extract event handlers from.\n * @param excludeKeys An array of keys to exclude from the returned object.\n */\nfunction extractEventHandlers(object, excludeKeys = []) {\n  if (object === undefined) {\n    return {};\n  }\n  const result = {};\n  Object.keys(object).filter(prop => prop.match(/^on[A-Z]/) && typeof object[prop] === 'function' && !excludeKeys.includes(prop)).forEach(prop => {\n    result[prop] = object[prop];\n  });\n  return result;\n}\nexport default extractEventHandlers;","/**\n * Removes event handlers from the given object.\n * A field is considered an event handler if it is a function with a name beginning with `on`.\n *\n * @param object Object to remove event handlers from.\n * @returns Object with event handlers removed.\n */\nfunction omitEventHandlers(object) {\n  if (object === undefined) {\n    return {};\n  }\n  const result = {};\n  Object.keys(object).filter(prop => !(prop.match(/^on[A-Z]/) && typeof object[prop] === 'function')).forEach(prop => {\n    result[prop] = object[prop];\n  });\n  return result;\n}\nexport default omitEventHandlers;","import clsx from 'clsx';\nimport extractEventHandlers from \"../extractEventHandlers/index.js\";\nimport omitEventHandlers from \"../omitEventHandlers/index.js\";\n/**\n * Merges the slot component internal props (usually coming from a hook)\n * with the externally provided ones.\n *\n * The merge order is (the latter overrides the former):\n * 1. The internal props (specified as a getter function to work with get*Props hook result)\n * 2. Additional props (specified internally on a Base UI component)\n * 3. External props specified on the owner component. These should only be used on a root slot.\n * 4. External props specified in the `slotProps.*` prop.\n * 5. The `className` prop - combined from all the above.\n * @param parameters\n * @returns\n */\nfunction mergeSlotProps(parameters) {\n  const {\n    getSlotProps,\n    additionalProps,\n    externalSlotProps,\n    externalForwardedProps,\n    className\n  } = parameters;\n  if (!getSlotProps) {\n    // The simpler case - getSlotProps is not defined, so no internal event handlers are defined,\n    // so we can simply merge all the props without having to worry about extracting event handlers.\n    const joinedClasses = clsx(additionalProps?.className, className, externalForwardedProps?.className, externalSlotProps?.className);\n    const mergedStyle = {\n      ...additionalProps?.style,\n      ...externalForwardedProps?.style,\n      ...externalSlotProps?.style\n    };\n    const props = {\n      ...additionalProps,\n      ...externalForwardedProps,\n      ...externalSlotProps\n    };\n    if (joinedClasses.length > 0) {\n      props.className = joinedClasses;\n    }\n    if (Object.keys(mergedStyle).length > 0) {\n      props.style = mergedStyle;\n    }\n    return {\n      props,\n      internalRef: undefined\n    };\n  }\n\n  // In this case, getSlotProps is responsible for calling the external event handlers.\n  // We don't need to include them in the merged props because of this.\n\n  const eventHandlers = extractEventHandlers({\n    ...externalForwardedProps,\n    ...externalSlotProps\n  });\n  const componentsPropsWithoutEventHandlers = omitEventHandlers(externalSlotProps);\n  const otherPropsWithoutEventHandlers = omitEventHandlers(externalForwardedProps);\n  const internalSlotProps = getSlotProps(eventHandlers);\n\n  // The order of classes is important here.\n  // Emotion (that we use in libraries consuming Base UI) depends on this order\n  // to properly override style. It requires the most important classes to be last\n  // (see https://github.com/mui/material-ui/pull/33205) for the related discussion.\n  const joinedClasses = clsx(internalSlotProps?.className, additionalProps?.className, className, externalForwardedProps?.className, externalSlotProps?.className);\n  const mergedStyle = {\n    ...internalSlotProps?.style,\n    ...additionalProps?.style,\n    ...externalForwardedProps?.style,\n    ...externalSlotProps?.style\n  };\n  const props = {\n    ...internalSlotProps,\n    ...additionalProps,\n    ...otherPropsWithoutEventHandlers,\n    ...componentsPropsWithoutEventHandlers\n  };\n  if (joinedClasses.length > 0) {\n    props.className = joinedClasses;\n  }\n  if (Object.keys(mergedStyle).length > 0) {\n    props.style = mergedStyle;\n  }\n  return {\n    props,\n    internalRef: internalSlotProps.ref\n  };\n}\nexport default mergeSlotProps;","'use client';\n\nimport useForkRef from '@mui/utils/useForkRef';\nimport appendOwnerState from '@mui/utils/appendOwnerState';\nimport resolveComponentProps from '@mui/utils/resolveComponentProps';\nimport mergeSlotProps from '@mui/utils/mergeSlotProps';\n/**\n * An internal function to create a Material UI slot.\n *\n * This is an advanced version of Base UI `useSlotProps` because Material UI allows leaf component to be customized via `component` prop\n * while Base UI does not need to support leaf component customization.\n *\n * @param {string} name: name of the slot\n * @param {object} parameters\n * @returns {[Slot, slotProps]} The slot's React component and the slot's props\n *\n * Note: the returned slot's props\n * - will never contain `component` prop.\n * - might contain `as` prop.\n */\nexport default function useSlot(\n/**\n * The slot's name. All Material UI components should have `root` slot.\n *\n * If the name is `root`, the logic behaves differently from other slots,\n * e.g. the `externalForwardedProps` are spread to `root` slot but not other slots.\n */\nname, parameters) {\n  const {\n    className,\n    elementType: initialElementType,\n    ownerState,\n    externalForwardedProps,\n    internalForwardedProps,\n    shouldForwardComponentProp = false,\n    ...useSlotPropsParams\n  } = parameters;\n  const {\n    component: rootComponent,\n    slots = {\n      [name]: undefined\n    },\n    slotProps = {\n      [name]: undefined\n    },\n    ...other\n  } = externalForwardedProps;\n  const elementType = slots[name] || initialElementType;\n\n  // `slotProps[name]` can be a callback that receives the component's ownerState.\n  // `resolvedComponentsProps` is always a plain object.\n  const resolvedComponentsProps = resolveComponentProps(slotProps[name], ownerState);\n  const {\n    props: {\n      component: slotComponent,\n      ...mergedProps\n    },\n    internalRef\n  } = mergeSlotProps({\n    className,\n    ...useSlotPropsParams,\n    externalForwardedProps: name === 'root' ? other : undefined,\n    externalSlotProps: resolvedComponentsProps\n  });\n  const ref = useForkRef(internalRef, resolvedComponentsProps?.ref, parameters.ref);\n  const LeafComponent = name === 'root' ? slotComponent || rootComponent : slotComponent;\n  const props = appendOwnerState(elementType, {\n    ...(name === 'root' && !rootComponent && !slots[name] && internalForwardedProps),\n    ...(name !== 'root' && !slots[name] && internalForwardedProps),\n    ...mergedProps,\n    ...(LeafComponent && !shouldForwardComponentProp && {\n      as: LeafComponent\n    }),\n    ...(LeafComponent && shouldForwardComponentProp && {\n      component: LeafComponent\n    }),\n    ref\n  }, ownerState);\n  return [elementType, props];\n}","export function getTypeByValue(value) {\n  const valueType = typeof value;\n  switch (valueType) {\n    case 'number':\n      if (Number.isNaN(value)) {\n        return 'NaN';\n      }\n      if (!Number.isFinite(value)) {\n        return 'Infinity';\n      }\n      if (value !== Math.floor(value)) {\n        return 'float';\n      }\n      return 'number';\n    case 'object':\n      if (value === null) {\n        return 'null';\n      }\n      return value.constructor.name;\n    default:\n      return valueType;\n  }\n}\nfunction requiredInteger(props, propName, componentName, location) {\n  const propValue = props[propName];\n  if (propValue == null || !Number.isInteger(propValue)) {\n    const propType = getTypeByValue(propValue);\n    return new RangeError(`Invalid ${location} \\`${propName}\\` of type \\`${propType}\\` supplied to \\`${componentName}\\`, expected \\`integer\\`.`);\n  }\n  return null;\n}\nfunction validator(props, propName, componentName, location) {\n  const propValue = props[propName];\n  if (propValue === undefined) {\n    return null;\n  }\n  return requiredInteger(props, propName, componentName, location);\n}\nfunction validatorNoop() {\n  return null;\n}\nvalidator.isRequired = requiredInteger;\nvalidatorNoop.isRequired = validatorNoop;\nconst integerPropType = process.env.NODE_ENV === 'production' ? validatorNoop : validator;\nexport default integerPropType;","import generateUtilityClasses from '@mui/utils/generateUtilityClasses';\nimport generateUtilityClass from '@mui/utils/generateUtilityClass';\nexport function getPaperUtilityClass(slot) {\n  return generateUtilityClass('MuiPaper', slot);\n}\nconst paperClasses = generateUtilityClasses('MuiPaper', ['root', 'rounded', 'outlined', 'elevation', 'elevation0', 'elevation1', 'elevation2', 'elevation3', 'elevation4', 'elevation5', 'elevation6', 'elevation7', 'elevation8', 'elevation9', 'elevation10', 'elevation11', 'elevation12', 'elevation13', 'elevation14', 'elevation15', 'elevation16', 'elevation17', 'elevation18', 'elevation19', 'elevation20', 'elevation21', 'elevation22', 'elevation23', 'elevation24']);\nexport default paperClasses;","'use client';\n\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport integerPropType from '@mui/utils/integerPropType';\nimport chainPropTypes from '@mui/utils/chainPropTypes';\nimport composeClasses from '@mui/utils/composeClasses';\nimport { alpha } from '@mui/system/colorManipulator';\nimport { styled, useTheme } from \"../zero-styled/index.js\";\nimport memoTheme from \"../utils/memoTheme.js\";\nimport { useDefaultProps } from \"../DefaultPropsProvider/index.js\";\nimport getOverlayAlpha from \"../styles/getOverlayAlpha.js\";\nimport { getPaperUtilityClass } from \"./paperClasses.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nconst useUtilityClasses = ownerState => {\n  const {\n    square,\n    elevation,\n    variant,\n    classes\n  } = ownerState;\n  const slots = {\n    root: ['root', variant, !square && 'rounded', variant === 'elevation' && `elevation${elevation}`]\n  };\n  return composeClasses(slots, getPaperUtilityClass, classes);\n};\nconst PaperRoot = styled('div', {\n  name: 'MuiPaper',\n  slot: 'Root',\n  overridesResolver: (props, styles) => {\n    const {\n      ownerState\n    } = props;\n    return [styles.root, styles[ownerState.variant], !ownerState.square && styles.rounded, ownerState.variant === 'elevation' && styles[`elevation${ownerState.elevation}`]];\n  }\n})(memoTheme(({\n  theme\n}) => ({\n  backgroundColor: (theme.vars || theme).palette.background.paper,\n  color: (theme.vars || theme).palette.text.primary,\n  transition: theme.transitions.create('box-shadow'),\n  variants: [{\n    props: ({\n      ownerState\n    }) => !ownerState.square,\n    style: {\n      borderRadius: theme.shape.borderRadius\n    }\n  }, {\n    props: {\n      variant: 'outlined'\n    },\n    style: {\n      border: `1px solid ${(theme.vars || theme).palette.divider}`\n    }\n  }, {\n    props: {\n      variant: 'elevation'\n    },\n    style: {\n      boxShadow: 'var(--Paper-shadow)',\n      backgroundImage: 'var(--Paper-overlay)'\n    }\n  }]\n})));\nconst Paper = /*#__PURE__*/React.forwardRef(function Paper(inProps, ref) {\n  const props = useDefaultProps({\n    props: inProps,\n    name: 'MuiPaper'\n  });\n  const theme = useTheme();\n  const {\n    className,\n    component = 'div',\n    elevation = 1,\n    square = false,\n    variant = 'elevation',\n    ...other\n  } = props;\n  const ownerState = {\n    ...props,\n    component,\n    elevation,\n    square,\n    variant\n  };\n  const classes = useUtilityClasses(ownerState);\n  if (process.env.NODE_ENV !== 'production') {\n    if (theme.shadows[elevation] === undefined) {\n      console.error([`MUI: The elevation provided <Paper elevation={${elevation}}> is not available in the theme.`, `Please make sure that \\`theme.shadows[${elevation}]\\` is defined.`].join('\\n'));\n    }\n  }\n  return /*#__PURE__*/_jsx(PaperRoot, {\n    as: component,\n    ownerState: ownerState,\n    className: clsx(classes.root, className),\n    ref: ref,\n    ...other,\n    style: {\n      ...(variant === 'elevation' && {\n        '--Paper-shadow': (theme.vars || theme).shadows[elevation],\n        ...(theme.vars && {\n          '--Paper-overlay': theme.vars.overlays?.[elevation]\n        }),\n        ...(!theme.vars && theme.palette.mode === 'dark' && {\n          '--Paper-overlay': `linear-gradient(${alpha('#fff', getOverlayAlpha(elevation))}, ${alpha('#fff', getOverlayAlpha(elevation))})`\n        })\n      }),\n      ...other.style\n    }\n  });\n});\nprocess.env.NODE_ENV !== \"production\" ? Paper.propTypes /* remove-proptypes */ = {\n  // ┌────────────────────────────── Warning ──────────────────────────────┐\n  // │ These PropTypes are generated from the TypeScript type definitions. │\n  // │    To update them, edit the d.ts file and run `pnpm proptypes`.     │\n  // └─────────────────────────────────────────────────────────────────────┘\n  /**\n   * The content of the component.\n   */\n  children: PropTypes.node,\n  /**\n   * Override or extend the styles applied to the component.\n   */\n  classes: PropTypes.object,\n  /**\n   * @ignore\n   */\n  className: PropTypes.string,\n  /**\n   * The component used for the root node.\n   * Either a string to use a HTML element or a component.\n   */\n  component: PropTypes.elementType,\n  /**\n   * Shadow depth, corresponds to `dp` in the spec.\n   * It accepts values between 0 and 24 inclusive.\n   * @default 1\n   */\n  elevation: chainPropTypes(integerPropType, props => {\n    const {\n      elevation,\n      variant\n    } = props;\n    if (elevation > 0 && variant === 'outlined') {\n      return new Error(`MUI: Combining \\`elevation={${elevation}}\\` with \\`variant=\"${variant}\"\\` has no effect. Either use \\`elevation={0}\\` or use a different \\`variant\\`.`);\n    }\n    return null;\n  }),\n  /**\n   * If `true`, rounded corners are disabled.\n   * @default false\n   */\n  square: PropTypes.bool,\n  /**\n   * @ignore\n   */\n  style: PropTypes.object,\n  /**\n   * The system prop that allows defining system overrides as well as additional CSS styles.\n   */\n  sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object]),\n  /**\n   * The variant to use.\n   * @default 'elevation'\n   */\n  variant: PropTypes /* @typescript-to-proptypes-ignore */.oneOfType([PropTypes.oneOf(['elevation', 'outlined']), PropTypes.string])\n} : void 0;\nexport default Paper;","import PropTypes from 'prop-types';\nconst refType = PropTypes.oneOfType([PropTypes.func, PropTypes.object]);\nexport default refType;","/**\n * Returns a boolean indicating if the event's target has :focus-visible\n */\nexport default function isFocusVisible(element) {\n  try {\n    return element.matches(':focus-visible');\n  } catch (error) {\n    // Do not warn on jsdom tests, otherwise all tests that rely on focus have to be skipped\n    // Tests that rely on `:focus-visible` will still have to be skipped in jsdom\n    if (process.env.NODE_ENV !== 'production' && !window.navigator.userAgent.includes('jsdom')) {\n      console.warn(['MUI: The `:focus-visible` pseudo class is not supported in this browser.', 'Some components rely on this feature to work properly.'].join('\\n'));\n    }\n  }\n  return false;\n}","'use client';\n\nimport * as React from 'react';\nimport useLazyRef from '@mui/utils/useLazyRef';\n/**\n * Lazy initialization container for the Ripple instance. This improves\n * performance by delaying mounting the ripple until it's needed.\n */\nexport class LazyRipple {\n  /** React ref to the ripple instance */\n\n  /** If the ripple component should be mounted */\n\n  /** Promise that resolves when the ripple component is mounted */\n\n  /** If the ripple component has been mounted */\n\n  /** React state hook setter */\n\n  static create() {\n    return new LazyRipple();\n  }\n  static use() {\n    /* eslint-disable */\n    const ripple = useLazyRef(LazyRipple.create).current;\n    const [shouldMount, setShouldMount] = React.useState(false);\n    ripple.shouldMount = shouldMount;\n    ripple.setShouldMount = setShouldMount;\n    React.useEffect(ripple.mountEffect, [shouldMount]);\n    /* eslint-enable */\n\n    return ripple;\n  }\n  constructor() {\n    this.ref = {\n      current: null\n    };\n    this.mounted = null;\n    this.didMount = false;\n    this.shouldMount = false;\n    this.setShouldMount = null;\n  }\n  mount() {\n    if (!this.mounted) {\n      this.mounted = createControlledPromise();\n      this.shouldMount = true;\n      this.setShouldMount(this.shouldMount);\n    }\n    return this.mounted;\n  }\n  mountEffect = () => {\n    if (this.shouldMount && !this.didMount) {\n      if (this.ref.current !== null) {\n        this.didMount = true;\n        this.mounted.resolve();\n      }\n    }\n  };\n\n  /* Ripple API */\n\n  start(...args) {\n    this.mount().then(() => this.ref.current?.start(...args));\n  }\n  stop(...args) {\n    this.mount().then(() => this.ref.current?.stop(...args));\n  }\n  pulsate(...args) {\n    this.mount().then(() => this.ref.current?.pulsate(...args));\n  }\n}\nexport default function useLazyRipple() {\n  return LazyRipple.use();\n}\nfunction createControlledPromise() {\n  let resolve;\n  let reject;\n  const p = new Promise((resolveFn, rejectFn) => {\n    resolve = resolveFn;\n    reject = rejectFn;\n  });\n  p.resolve = resolve;\n  p.reject = reject;\n  return p;\n}","'use client';\n\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\n\n/**\n * @ignore - internal component.\n */\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nfunction Ripple(props) {\n  const {\n    className,\n    classes,\n    pulsate = false,\n    rippleX,\n    rippleY,\n    rippleSize,\n    in: inProp,\n    onExited,\n    timeout\n  } = props;\n  const [leaving, setLeaving] = React.useState(false);\n  const rippleClassName = clsx(className, classes.ripple, classes.rippleVisible, pulsate && classes.ripplePulsate);\n  const rippleStyles = {\n    width: rippleSize,\n    height: rippleSize,\n    top: -(rippleSize / 2) + rippleY,\n    left: -(rippleSize / 2) + rippleX\n  };\n  const childClassName = clsx(classes.child, leaving && classes.childLeaving, pulsate && classes.childPulsate);\n  if (!inProp && !leaving) {\n    setLeaving(true);\n  }\n  React.useEffect(() => {\n    if (!inProp && onExited != null) {\n      // react-transition-group#onExited\n      const timeoutId = setTimeout(onExited, timeout);\n      return () => {\n        clearTimeout(timeoutId);\n      };\n    }\n    return undefined;\n  }, [onExited, inProp, timeout]);\n  return /*#__PURE__*/_jsx(\"span\", {\n    className: rippleClassName,\n    style: rippleStyles,\n    children: /*#__PURE__*/_jsx(\"span\", {\n      className: childClassName\n    })\n  });\n}\nprocess.env.NODE_ENV !== \"production\" ? Ripple.propTypes /* remove-proptypes */ = {\n  /**\n   * Override or extend the styles applied to the component.\n   */\n  classes: PropTypes.object.isRequired,\n  className: PropTypes.string,\n  /**\n   * @ignore - injected from TransitionGroup\n   */\n  in: PropTypes.bool,\n  /**\n   * @ignore - injected from TransitionGroup\n   */\n  onExited: PropTypes.func,\n  /**\n   * If `true`, the ripple pulsates, typically indicating the keyboard focus state of an element.\n   */\n  pulsate: PropTypes.bool,\n  /**\n   * Diameter of the ripple.\n   */\n  rippleSize: PropTypes.number,\n  /**\n   * Horizontal position of the ripple center.\n   */\n  rippleX: PropTypes.number,\n  /**\n   * Vertical position of the ripple center.\n   */\n  rippleY: PropTypes.number,\n  /**\n   * exit delay\n   */\n  timeout: PropTypes.number.isRequired\n} : void 0;\nexport default Ripple;","import generateUtilityClasses from '@mui/utils/generateUtilityClasses';\nimport generateUtilityClass from '@mui/utils/generateUtilityClass';\nexport function getTouchRippleUtilityClass(slot) {\n  return generateUtilityClass('MuiTouchRipple', slot);\n}\nconst touchRippleClasses = generateUtilityClasses('MuiTouchRipple', ['root', 'ripple', 'rippleVisible', 'ripplePulsate', 'child', 'childLeaving', 'childPulsate']);\nexport default touchRippleClasses;","'use client';\n\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport { TransitionGroup } from 'react-transition-group';\nimport clsx from 'clsx';\nimport useTimeout from '@mui/utils/useTimeout';\nimport { keyframes, styled } from \"../zero-styled/index.js\";\nimport { useDefaultProps } from \"../DefaultPropsProvider/index.js\";\nimport Ripple from \"./Ripple.js\";\nimport touchRippleClasses from \"./touchRippleClasses.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nconst DURATION = 550;\nexport const DELAY_RIPPLE = 80;\nconst enterKeyframe = keyframes`\n  0% {\n    transform: scale(0);\n    opacity: 0.1;\n  }\n\n  100% {\n    transform: scale(1);\n    opacity: 0.3;\n  }\n`;\nconst exitKeyframe = keyframes`\n  0% {\n    opacity: 1;\n  }\n\n  100% {\n    opacity: 0;\n  }\n`;\nconst pulsateKeyframe = keyframes`\n  0% {\n    transform: scale(1);\n  }\n\n  50% {\n    transform: scale(0.92);\n  }\n\n  100% {\n    transform: scale(1);\n  }\n`;\nexport const TouchRippleRoot = styled('span', {\n  name: 'MuiTouchRipple',\n  slot: 'Root'\n})({\n  overflow: 'hidden',\n  pointerEvents: 'none',\n  position: 'absolute',\n  zIndex: 0,\n  top: 0,\n  right: 0,\n  bottom: 0,\n  left: 0,\n  borderRadius: 'inherit'\n});\n\n// This `styled()` function invokes keyframes. `styled-components` only supports keyframes\n// in string templates. Do not convert these styles in JS object as it will break.\nexport const TouchRippleRipple = styled(Ripple, {\n  name: 'MuiTouchRipple',\n  slot: 'Ripple'\n})`\n  opacity: 0;\n  position: absolute;\n\n  &.${touchRippleClasses.rippleVisible} {\n    opacity: 0.3;\n    transform: scale(1);\n    animation-name: ${enterKeyframe};\n    animation-duration: ${DURATION}ms;\n    animation-timing-function: ${({\n  theme\n}) => theme.transitions.easing.easeInOut};\n  }\n\n  &.${touchRippleClasses.ripplePulsate} {\n    animation-duration: ${({\n  theme\n}) => theme.transitions.duration.shorter}ms;\n  }\n\n  & .${touchRippleClasses.child} {\n    opacity: 1;\n    display: block;\n    width: 100%;\n    height: 100%;\n    border-radius: 50%;\n    background-color: currentColor;\n  }\n\n  & .${touchRippleClasses.childLeaving} {\n    opacity: 0;\n    animation-name: ${exitKeyframe};\n    animation-duration: ${DURATION}ms;\n    animation-timing-function: ${({\n  theme\n}) => theme.transitions.easing.easeInOut};\n  }\n\n  & .${touchRippleClasses.childPulsate} {\n    position: absolute;\n    /* @noflip */\n    left: 0px;\n    top: 0;\n    animation-name: ${pulsateKeyframe};\n    animation-duration: 2500ms;\n    animation-timing-function: ${({\n  theme\n}) => theme.transitions.easing.easeInOut};\n    animation-iteration-count: infinite;\n    animation-delay: 200ms;\n  }\n`;\n\n/**\n * @ignore - internal component.\n *\n * TODO v5: Make private\n */\nconst TouchRipple = /*#__PURE__*/React.forwardRef(function TouchRipple(inProps, ref) {\n  const props = useDefaultProps({\n    props: inProps,\n    name: 'MuiTouchRipple'\n  });\n  const {\n    center: centerProp = false,\n    classes = {},\n    className,\n    ...other\n  } = props;\n  const [ripples, setRipples] = React.useState([]);\n  const nextKey = React.useRef(0);\n  const rippleCallback = React.useRef(null);\n  React.useEffect(() => {\n    if (rippleCallback.current) {\n      rippleCallback.current();\n      rippleCallback.current = null;\n    }\n  }, [ripples]);\n\n  // Used to filter out mouse emulated events on mobile.\n  const ignoringMouseDown = React.useRef(false);\n  // We use a timer in order to only show the ripples for touch \"click\" like events.\n  // We don't want to display the ripple for touch scroll events.\n  const startTimer = useTimeout();\n\n  // This is the hook called once the previous timeout is ready.\n  const startTimerCommit = React.useRef(null);\n  const container = React.useRef(null);\n  const startCommit = React.useCallback(params => {\n    const {\n      pulsate,\n      rippleX,\n      rippleY,\n      rippleSize,\n      cb\n    } = params;\n    setRipples(oldRipples => [...oldRipples, /*#__PURE__*/_jsx(TouchRippleRipple, {\n      classes: {\n        ripple: clsx(classes.ripple, touchRippleClasses.ripple),\n        rippleVisible: clsx(classes.rippleVisible, touchRippleClasses.rippleVisible),\n        ripplePulsate: clsx(classes.ripplePulsate, touchRippleClasses.ripplePulsate),\n        child: clsx(classes.child, touchRippleClasses.child),\n        childLeaving: clsx(classes.childLeaving, touchRippleClasses.childLeaving),\n        childPulsate: clsx(classes.childPulsate, touchRippleClasses.childPulsate)\n      },\n      timeout: DURATION,\n      pulsate: pulsate,\n      rippleX: rippleX,\n      rippleY: rippleY,\n      rippleSize: rippleSize\n    }, nextKey.current)]);\n    nextKey.current += 1;\n    rippleCallback.current = cb;\n  }, [classes]);\n  const start = React.useCallback((event = {}, options = {}, cb = () => {}) => {\n    const {\n      pulsate = false,\n      center = centerProp || options.pulsate,\n      fakeElement = false // For test purposes\n    } = options;\n    if (event?.type === 'mousedown' && ignoringMouseDown.current) {\n      ignoringMouseDown.current = false;\n      return;\n    }\n    if (event?.type === 'touchstart') {\n      ignoringMouseDown.current = true;\n    }\n    const element = fakeElement ? null : container.current;\n    const rect = element ? element.getBoundingClientRect() : {\n      width: 0,\n      height: 0,\n      left: 0,\n      top: 0\n    };\n\n    // Get the size of the ripple\n    let rippleX;\n    let rippleY;\n    let rippleSize;\n    if (center || event === undefined || event.clientX === 0 && event.clientY === 0 || !event.clientX && !event.touches) {\n      rippleX = Math.round(rect.width / 2);\n      rippleY = Math.round(rect.height / 2);\n    } else {\n      const {\n        clientX,\n        clientY\n      } = event.touches && event.touches.length > 0 ? event.touches[0] : event;\n      rippleX = Math.round(clientX - rect.left);\n      rippleY = Math.round(clientY - rect.top);\n    }\n    if (center) {\n      rippleSize = Math.sqrt((2 * rect.width ** 2 + rect.height ** 2) / 3);\n\n      // For some reason the animation is broken on Mobile Chrome if the size is even.\n      if (rippleSize % 2 === 0) {\n        rippleSize += 1;\n      }\n    } else {\n      const sizeX = Math.max(Math.abs((element ? element.clientWidth : 0) - rippleX), rippleX) * 2 + 2;\n      const sizeY = Math.max(Math.abs((element ? element.clientHeight : 0) - rippleY), rippleY) * 2 + 2;\n      rippleSize = Math.sqrt(sizeX ** 2 + sizeY ** 2);\n    }\n\n    // Touch devices\n    if (event?.touches) {\n      // check that this isn't another touchstart due to multitouch\n      // otherwise we will only clear a single timer when unmounting while two\n      // are running\n      if (startTimerCommit.current === null) {\n        // Prepare the ripple effect.\n        startTimerCommit.current = () => {\n          startCommit({\n            pulsate,\n            rippleX,\n            rippleY,\n            rippleSize,\n            cb\n          });\n        };\n        // Delay the execution of the ripple effect.\n        // We have to make a tradeoff with this delay value.\n        startTimer.start(DELAY_RIPPLE, () => {\n          if (startTimerCommit.current) {\n            startTimerCommit.current();\n            startTimerCommit.current = null;\n          }\n        });\n      }\n    } else {\n      startCommit({\n        pulsate,\n        rippleX,\n        rippleY,\n        rippleSize,\n        cb\n      });\n    }\n  }, [centerProp, startCommit, startTimer]);\n  const pulsate = React.useCallback(() => {\n    start({}, {\n      pulsate: true\n    });\n  }, [start]);\n  const stop = React.useCallback((event, cb) => {\n    startTimer.clear();\n\n    // The touch interaction occurs too quickly.\n    // We still want to show ripple effect.\n    if (event?.type === 'touchend' && startTimerCommit.current) {\n      startTimerCommit.current();\n      startTimerCommit.current = null;\n      startTimer.start(0, () => {\n        stop(event, cb);\n      });\n      return;\n    }\n    startTimerCommit.current = null;\n    setRipples(oldRipples => {\n      if (oldRipples.length > 0) {\n        return oldRipples.slice(1);\n      }\n      return oldRipples;\n    });\n    rippleCallback.current = cb;\n  }, [startTimer]);\n  React.useImperativeHandle(ref, () => ({\n    pulsate,\n    start,\n    stop\n  }), [pulsate, start, stop]);\n  return /*#__PURE__*/_jsx(TouchRippleRoot, {\n    className: clsx(touchRippleClasses.root, classes.root, className),\n    ref: container,\n    ...other,\n    children: /*#__PURE__*/_jsx(TransitionGroup, {\n      component: null,\n      exit: true,\n      children: ripples\n    })\n  });\n});\nprocess.env.NODE_ENV !== \"production\" ? TouchRipple.propTypes /* remove-proptypes */ = {\n  /**\n   * If `true`, the ripple starts at the center of the component\n   * rather than at the point of interaction.\n   */\n  center: PropTypes.bool,\n  /**\n   * Override or extend the styles applied to the component.\n   */\n  classes: PropTypes.object,\n  /**\n   * @ignore\n   */\n  className: PropTypes.string\n} : void 0;\nexport default TouchRipple;","import generateUtilityClasses from '@mui/utils/generateUtilityClasses';\nimport generateUtilityClass from '@mui/utils/generateUtilityClass';\nexport function getButtonBaseUtilityClass(slot) {\n  return generateUtilityClass('MuiButtonBase', slot);\n}\nconst buttonBaseClasses = generateUtilityClasses('MuiButtonBase', ['root', 'disabled', 'focusVisible']);\nexport default buttonBaseClasses;","'use client';\n\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport refType from '@mui/utils/refType';\nimport elementTypeAcceptingRef from '@mui/utils/elementTypeAcceptingRef';\nimport composeClasses from '@mui/utils/composeClasses';\nimport isFocusVisible from '@mui/utils/isFocusVisible';\nimport { styled } from \"../zero-styled/index.js\";\nimport { useDefaultProps } from \"../DefaultPropsProvider/index.js\";\nimport useForkRef from \"../utils/useForkRef.js\";\nimport useEventCallback from \"../utils/useEventCallback.js\";\nimport useLazyRipple from \"../useLazyRipple/index.js\";\nimport TouchRipple from \"./TouchRipple.js\";\nimport buttonBaseClasses, { getButtonBaseUtilityClass } from \"./buttonBaseClasses.js\";\nimport { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nconst useUtilityClasses = ownerState => {\n  const {\n    disabled,\n    focusVisible,\n    focusVisibleClassName,\n    classes\n  } = ownerState;\n  const slots = {\n    root: ['root', disabled && 'disabled', focusVisible && 'focusVisible']\n  };\n  const composedClasses = composeClasses(slots, getButtonBaseUtilityClass, classes);\n  if (focusVisible && focusVisibleClassName) {\n    composedClasses.root += ` ${focusVisibleClassName}`;\n  }\n  return composedClasses;\n};\nexport const ButtonBaseRoot = styled('button', {\n  name: 'MuiButtonBase',\n  slot: 'Root'\n})({\n  display: 'inline-flex',\n  alignItems: 'center',\n  justifyContent: 'center',\n  position: 'relative',\n  boxSizing: 'border-box',\n  WebkitTapHighlightColor: 'transparent',\n  backgroundColor: 'transparent',\n  // Reset default value\n  // We disable the focus ring for mouse, touch and keyboard users.\n  outline: 0,\n  border: 0,\n  margin: 0,\n  // Remove the margin in Safari\n  borderRadius: 0,\n  padding: 0,\n  // Remove the padding in Firefox\n  cursor: 'pointer',\n  userSelect: 'none',\n  verticalAlign: 'middle',\n  MozAppearance: 'none',\n  // Reset\n  WebkitAppearance: 'none',\n  // Reset\n  textDecoration: 'none',\n  // So we take precedent over the style of a native <a /> element.\n  color: 'inherit',\n  '&::-moz-focus-inner': {\n    borderStyle: 'none' // Remove Firefox dotted outline.\n  },\n  [`&.${buttonBaseClasses.disabled}`]: {\n    pointerEvents: 'none',\n    // Disable link interactions\n    cursor: 'default'\n  },\n  '@media print': {\n    colorAdjust: 'exact'\n  }\n});\n\n/**\n * `ButtonBase` contains as few styles as possible.\n * It aims to be a simple building block for creating a button.\n * It contains a load of style reset and some focus/ripple logic.\n */\nconst ButtonBase = /*#__PURE__*/React.forwardRef(function ButtonBase(inProps, ref) {\n  const props = useDefaultProps({\n    props: inProps,\n    name: 'MuiButtonBase'\n  });\n  const {\n    action,\n    centerRipple = false,\n    children,\n    className,\n    component = 'button',\n    disabled = false,\n    disableRipple = false,\n    disableTouchRipple = false,\n    focusRipple = false,\n    focusVisibleClassName,\n    LinkComponent = 'a',\n    onBlur,\n    onClick,\n    onContextMenu,\n    onDragLeave,\n    onFocus,\n    onFocusVisible,\n    onKeyDown,\n    onKeyUp,\n    onMouseDown,\n    onMouseLeave,\n    onMouseUp,\n    onTouchEnd,\n    onTouchMove,\n    onTouchStart,\n    tabIndex = 0,\n    TouchRippleProps,\n    touchRippleRef,\n    type,\n    ...other\n  } = props;\n  const buttonRef = React.useRef(null);\n  const ripple = useLazyRipple();\n  const handleRippleRef = useForkRef(ripple.ref, touchRippleRef);\n  const [focusVisible, setFocusVisible] = React.useState(false);\n  if (disabled && focusVisible) {\n    setFocusVisible(false);\n  }\n  React.useImperativeHandle(action, () => ({\n    focusVisible: () => {\n      setFocusVisible(true);\n      buttonRef.current.focus();\n    }\n  }), []);\n  const enableTouchRipple = ripple.shouldMount && !disableRipple && !disabled;\n  React.useEffect(() => {\n    if (focusVisible && focusRipple && !disableRipple) {\n      ripple.pulsate();\n    }\n  }, [disableRipple, focusRipple, focusVisible, ripple]);\n  const handleMouseDown = useRippleHandler(ripple, 'start', onMouseDown, disableTouchRipple);\n  const handleContextMenu = useRippleHandler(ripple, 'stop', onContextMenu, disableTouchRipple);\n  const handleDragLeave = useRippleHandler(ripple, 'stop', onDragLeave, disableTouchRipple);\n  const handleMouseUp = useRippleHandler(ripple, 'stop', onMouseUp, disableTouchRipple);\n  const handleMouseLeave = useRippleHandler(ripple, 'stop', event => {\n    if (focusVisible) {\n      event.preventDefault();\n    }\n    if (onMouseLeave) {\n      onMouseLeave(event);\n    }\n  }, disableTouchRipple);\n  const handleTouchStart = useRippleHandler(ripple, 'start', onTouchStart, disableTouchRipple);\n  const handleTouchEnd = useRippleHandler(ripple, 'stop', onTouchEnd, disableTouchRipple);\n  const handleTouchMove = useRippleHandler(ripple, 'stop', onTouchMove, disableTouchRipple);\n  const handleBlur = useRippleHandler(ripple, 'stop', event => {\n    if (!isFocusVisible(event.target)) {\n      setFocusVisible(false);\n    }\n    if (onBlur) {\n      onBlur(event);\n    }\n  }, false);\n  const handleFocus = useEventCallback(event => {\n    // Fix for https://github.com/facebook/react/issues/7769\n    if (!buttonRef.current) {\n      buttonRef.current = event.currentTarget;\n    }\n    if (isFocusVisible(event.target)) {\n      setFocusVisible(true);\n      if (onFocusVisible) {\n        onFocusVisible(event);\n      }\n    }\n    if (onFocus) {\n      onFocus(event);\n    }\n  });\n  const isNonNativeButton = () => {\n    const button = buttonRef.current;\n    if (!button) {\n      return component && component !== 'button';\n    }\n    if (button.tagName === 'BUTTON') {\n      return false;\n    }\n    return !(button.tagName === 'A' && button.href);\n  };\n  const handleKeyDown = useEventCallback(event => {\n    // Check if key is already down to avoid repeats being counted as multiple activations\n    if (focusRipple && !event.repeat && focusVisible && event.key === ' ') {\n      ripple.stop(event, () => {\n        ripple.start(event);\n      });\n    }\n    if (event.target === event.currentTarget && isNonNativeButton() && event.key === ' ') {\n      event.preventDefault();\n    }\n    if (onKeyDown) {\n      onKeyDown(event);\n    }\n\n    // Keyboard accessibility for non interactive elements\n    if (event.target === event.currentTarget && isNonNativeButton() && event.key === 'Enter' && !disabled) {\n      event.preventDefault();\n      if (onClick) {\n        onClick(event);\n      }\n    }\n  });\n  const handleKeyUp = useEventCallback(event => {\n    // calling preventDefault in keyUp on a <button> will not dispatch a click event if Space is pressed\n    // https://codesandbox.io/p/sandbox/button-keyup-preventdefault-dn7f0\n    if (focusRipple && event.key === ' ' && focusVisible && !event.defaultPrevented) {\n      ripple.stop(event, () => {\n        ripple.pulsate(event);\n      });\n    }\n    if (onKeyUp) {\n      onKeyUp(event);\n    }\n\n    // Keyboard accessibility for non interactive elements\n    if (onClick && event.target === event.currentTarget && isNonNativeButton() && event.key === ' ' && !event.defaultPrevented && !disabled) {\n      onClick(event);\n    }\n  });\n  let ComponentProp = component;\n  if (ComponentProp === 'button' && (other.href || other.to)) {\n    ComponentProp = LinkComponent;\n  }\n  const buttonProps = {};\n  if (ComponentProp === 'button') {\n    const hasFormAttributes = !!other.formAction;\n    // ButtonBase was defaulting to type=\"button\" when no type prop was provided, which prevented form submission and broke formAction functionality.\n    // The fix checks for form-related attributes and skips the default type to allow the browser's natural submit behavior (type=\"submit\").\n    buttonProps.type = type === undefined && !hasFormAttributes ? 'button' : type;\n    buttonProps.disabled = disabled;\n  } else {\n    if (!other.href && !other.to) {\n      buttonProps.role = 'button';\n    }\n    if (disabled) {\n      buttonProps['aria-disabled'] = disabled;\n    }\n  }\n  const handleRef = useForkRef(ref, buttonRef);\n  const ownerState = {\n    ...props,\n    centerRipple,\n    component,\n    disabled,\n    disableRipple,\n    disableTouchRipple,\n    focusRipple,\n    tabIndex,\n    focusVisible\n  };\n  const classes = useUtilityClasses(ownerState);\n  return /*#__PURE__*/_jsxs(ButtonBaseRoot, {\n    as: ComponentProp,\n    className: clsx(classes.root, className),\n    ownerState: ownerState,\n    onBlur: handleBlur,\n    onClick: onClick,\n    onContextMenu: handleContextMenu,\n    onFocus: handleFocus,\n    onKeyDown: handleKeyDown,\n    onKeyUp: handleKeyUp,\n    onMouseDown: handleMouseDown,\n    onMouseLeave: handleMouseLeave,\n    onMouseUp: handleMouseUp,\n    onDragLeave: handleDragLeave,\n    onTouchEnd: handleTouchEnd,\n    onTouchMove: handleTouchMove,\n    onTouchStart: handleTouchStart,\n    ref: handleRef,\n    tabIndex: disabled ? -1 : tabIndex,\n    type: type,\n    ...buttonProps,\n    ...other,\n    children: [children, enableTouchRipple ? /*#__PURE__*/_jsx(TouchRipple, {\n      ref: handleRippleRef,\n      center: centerRipple,\n      ...TouchRippleProps\n    }) : null]\n  });\n});\nfunction useRippleHandler(ripple, rippleAction, eventCallback, skipRippleAction = false) {\n  return useEventCallback(event => {\n    if (eventCallback) {\n      eventCallback(event);\n    }\n    if (!skipRippleAction) {\n      ripple[rippleAction](event);\n    }\n    return true;\n  });\n}\nprocess.env.NODE_ENV !== \"production\" ? ButtonBase.propTypes /* remove-proptypes */ = {\n  // ┌────────────────────────────── Warning ──────────────────────────────┐\n  // │ These PropTypes are generated from the TypeScript type definitions. │\n  // │    To update them, edit the d.ts file and run `pnpm proptypes`.     │\n  // └─────────────────────────────────────────────────────────────────────┘\n  /**\n   * A ref for imperative actions.\n   * It currently only supports `focusVisible()` action.\n   */\n  action: refType,\n  /**\n   * If `true`, the ripples are centered.\n   * They won't start at the cursor interaction position.\n   * @default false\n   */\n  centerRipple: PropTypes.bool,\n  /**\n   * The content of the component.\n   */\n  children: PropTypes.node,\n  /**\n   * Override or extend the styles applied to the component.\n   */\n  classes: PropTypes.object,\n  /**\n   * @ignore\n   */\n  className: PropTypes.string,\n  /**\n   * The component used for the root node.\n   * Either a string to use a HTML element or a component.\n   */\n  component: elementTypeAcceptingRef,\n  /**\n   * If `true`, the component is disabled.\n   * @default false\n   */\n  disabled: PropTypes.bool,\n  /**\n   * If `true`, the ripple effect is disabled.\n   *\n   * ⚠️ Without a ripple there is no styling for :focus-visible by default. Be sure\n   * to highlight the element by applying separate styles with the `.Mui-focusVisible` class.\n   * @default false\n   */\n  disableRipple: PropTypes.bool,\n  /**\n   * If `true`, the touch ripple effect is disabled.\n   * @default false\n   */\n  disableTouchRipple: PropTypes.bool,\n  /**\n   * If `true`, the base button will have a keyboard focus ripple.\n   * @default false\n   */\n  focusRipple: PropTypes.bool,\n  /**\n   * This prop can help identify which element has keyboard focus.\n   * The class name will be applied when the element gains the focus through keyboard interaction.\n   * It's a polyfill for the [CSS :focus-visible selector](https://drafts.csswg.org/selectors-4/#the-focus-visible-pseudo).\n   * The rationale for using this feature [is explained here](https://github.com/WICG/focus-visible/blob/HEAD/explainer.md).\n   * A [polyfill can be used](https://github.com/WICG/focus-visible) to apply a `focus-visible` class to other components\n   * if needed.\n   */\n  focusVisibleClassName: PropTypes.string,\n  /**\n   * @ignore\n   */\n  formAction: PropTypes.oneOfType([PropTypes.func, PropTypes.string]),\n  /**\n   * @ignore\n   */\n  href: PropTypes /* @typescript-to-proptypes-ignore */.any,\n  /**\n   * The component used to render a link when the `href` prop is provided.\n   * @default 'a'\n   */\n  LinkComponent: PropTypes.elementType,\n  /**\n   * @ignore\n   */\n  onBlur: PropTypes.func,\n  /**\n   * @ignore\n   */\n  onClick: PropTypes.func,\n  /**\n   * @ignore\n   */\n  onContextMenu: PropTypes.func,\n  /**\n   * @ignore\n   */\n  onDragLeave: PropTypes.func,\n  /**\n   * @ignore\n   */\n  onFocus: PropTypes.func,\n  /**\n   * Callback fired when the component is focused with a keyboard.\n   * We trigger a `onFocus` callback too.\n   */\n  onFocusVisible: PropTypes.func,\n  /**\n   * @ignore\n   */\n  onKeyDown: PropTypes.func,\n  /**\n   * @ignore\n   */\n  onKeyUp: PropTypes.func,\n  /**\n   * @ignore\n   */\n  onMouseDown: PropTypes.func,\n  /**\n   * @ignore\n   */\n  onMouseLeave: PropTypes.func,\n  /**\n   * @ignore\n   */\n  onMouseUp: PropTypes.func,\n  /**\n   * @ignore\n   */\n  onTouchEnd: PropTypes.func,\n  /**\n   * @ignore\n   */\n  onTouchMove: PropTypes.func,\n  /**\n   * @ignore\n   */\n  onTouchStart: PropTypes.func,\n  /**\n   * The system prop that allows defining system overrides as well as additional CSS styles.\n   */\n  sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object]),\n  /**\n   * @default 0\n   */\n  tabIndex: PropTypes.number,\n  /**\n   * Props applied to the `TouchRipple` element.\n   */\n  TouchRippleProps: PropTypes.object,\n  /**\n   * A ref that points to the `TouchRipple` element.\n   */\n  touchRippleRef: PropTypes.oneOfType([PropTypes.func, PropTypes.shape({\n    current: PropTypes.shape({\n      pulsate: PropTypes.func.isRequired,\n      start: PropTypes.func.isRequired,\n      stop: PropTypes.func.isRequired\n    })\n  })]),\n  /**\n   * @ignore\n   */\n  type: PropTypes.oneOfType([PropTypes.oneOf(['button', 'reset', 'submit']), PropTypes.string])\n} : void 0;\nexport default ButtonBase;","/**\n * Type guard to check if the object has a \"main\" property of type string.\n *\n * @param obj - the object to check\n * @returns boolean\n */\nfunction hasCorrectMainProperty(obj) {\n  return typeof obj.main === 'string';\n}\n/**\n * Checks if the object conforms to the SimplePaletteColorOptions type.\n * The minimum requirement is that the object has a \"main\" property of type string, this is always checked.\n * Optionally, you can pass additional properties to check.\n *\n * @param obj - The object to check\n * @param additionalPropertiesToCheck - Array containing \"light\", \"dark\", and/or \"contrastText\"\n * @returns boolean\n */\nfunction checkSimplePaletteColorValues(obj, additionalPropertiesToCheck = []) {\n  if (!hasCorrectMainProperty(obj)) {\n    return false;\n  }\n  for (const value of additionalPropertiesToCheck) {\n    if (!obj.hasOwnProperty(value) || typeof obj[value] !== 'string') {\n      return false;\n    }\n  }\n  return true;\n}\n\n/**\n * Creates a filter function used to filter simple palette color options.\n * The minimum requirement is that the object has a \"main\" property of type string, this is always checked.\n * Optionally, you can pass additional properties to check.\n *\n * @param additionalPropertiesToCheck - Array containing \"light\", \"dark\", and/or \"contrastText\"\n * @returns ([, value]: [any, PaletteColorOptions]) => boolean\n */\nexport default function createSimplePaletteValueFilter(additionalPropertiesToCheck = []) {\n  return ([, value]) => value && checkSimplePaletteColorValues(value, additionalPropertiesToCheck);\n}","import generateUtilityClasses from '@mui/utils/generateUtilityClasses';\nimport generateUtilityClass from '@mui/utils/generateUtilityClass';\nexport function getAlertUtilityClass(slot) {\n  return generateUtilityClass('MuiAlert', slot);\n}\nconst alertClasses = generateUtilityClasses('MuiAlert', ['root', 'action', 'icon', 'message', 'filled', 'colorSuccess', 'colorInfo', 'colorWarning', 'colorError', 'filledSuccess', 'filledInfo', 'filledWarning', 'filledError', 'outlined', 'outlinedSuccess', 'outlinedInfo', 'outlinedWarning', 'outlinedError', 'standard', 'standardSuccess', 'standardInfo', 'standardWarning', 'standardError']);\nexport default alertClasses;","import generateUtilityClasses from '@mui/utils/generateUtilityClasses';\nimport generateUtilityClass from '@mui/utils/generateUtilityClass';\nexport function getCircularProgressUtilityClass(slot) {\n  return generateUtilityClass('MuiCircularProgress', slot);\n}\nconst circularProgressClasses = generateUtilityClasses('MuiCircularProgress', ['root', 'determinate', 'indeterminate', 'colorPrimary', 'colorSecondary', 'svg', 'track', 'circle', 'circleDeterminate', 'circleIndeterminate', 'circleDisableShrink']);\nexport default circularProgressClasses;","'use client';\n\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport chainPropTypes from '@mui/utils/chainPropTypes';\nimport composeClasses from '@mui/utils/composeClasses';\nimport { keyframes, css, styled } from \"../zero-styled/index.js\";\nimport memoTheme from \"../utils/memoTheme.js\";\nimport { useDefaultProps } from \"../DefaultPropsProvider/index.js\";\nimport capitalize from \"../utils/capitalize.js\";\nimport createSimplePaletteValueFilter from \"../utils/createSimplePaletteValueFilter.js\";\nimport { getCircularProgressUtilityClass } from \"./circularProgressClasses.js\";\nimport { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nconst SIZE = 44;\nconst circularRotateKeyframe = keyframes`\n  0% {\n    transform: rotate(0deg);\n  }\n\n  100% {\n    transform: rotate(360deg);\n  }\n`;\nconst circularDashKeyframe = keyframes`\n  0% {\n    stroke-dasharray: 1px, 200px;\n    stroke-dashoffset: 0;\n  }\n\n  50% {\n    stroke-dasharray: 100px, 200px;\n    stroke-dashoffset: -15px;\n  }\n\n  100% {\n    stroke-dasharray: 1px, 200px;\n    stroke-dashoffset: -126px;\n  }\n`;\n\n// This implementation is for supporting both Styled-components v4+ and Pigment CSS.\n// A global animation has to be created here for Styled-components v4+ (https://github.com/styled-components/styled-components/blob/main/packages/styled-components/src/utils/errors.md#12).\n// which can be done by checking typeof indeterminate1Keyframe !== 'string' (at runtime, Pigment CSS transform keyframes`` to a string).\nconst rotateAnimation = typeof circularRotateKeyframe !== 'string' ? css`\n        animation: ${circularRotateKeyframe} 1.4s linear infinite;\n      ` : null;\nconst dashAnimation = typeof circularDashKeyframe !== 'string' ? css`\n        animation: ${circularDashKeyframe} 1.4s ease-in-out infinite;\n      ` : null;\nconst useUtilityClasses = ownerState => {\n  const {\n    classes,\n    variant,\n    color,\n    disableShrink\n  } = ownerState;\n  const slots = {\n    root: ['root', variant, `color${capitalize(color)}`],\n    svg: ['svg'],\n    track: ['track'],\n    circle: ['circle', `circle${capitalize(variant)}`, disableShrink && 'circleDisableShrink']\n  };\n  return composeClasses(slots, getCircularProgressUtilityClass, classes);\n};\nconst CircularProgressRoot = styled('span', {\n  name: 'MuiCircularProgress',\n  slot: 'Root',\n  overridesResolver: (props, styles) => {\n    const {\n      ownerState\n    } = props;\n    return [styles.root, styles[ownerState.variant], styles[`color${capitalize(ownerState.color)}`]];\n  }\n})(memoTheme(({\n  theme\n}) => ({\n  display: 'inline-block',\n  variants: [{\n    props: {\n      variant: 'determinate'\n    },\n    style: {\n      transition: theme.transitions.create('transform')\n    }\n  }, {\n    props: {\n      variant: 'indeterminate'\n    },\n    style: rotateAnimation || {\n      animation: `${circularRotateKeyframe} 1.4s linear infinite`\n    }\n  }, ...Object.entries(theme.palette).filter(createSimplePaletteValueFilter()).map(([color]) => ({\n    props: {\n      color\n    },\n    style: {\n      color: (theme.vars || theme).palette[color].main\n    }\n  }))]\n})));\nconst CircularProgressSVG = styled('svg', {\n  name: 'MuiCircularProgress',\n  slot: 'Svg'\n})({\n  display: 'block' // Keeps the progress centered\n});\nconst CircularProgressCircle = styled('circle', {\n  name: 'MuiCircularProgress',\n  slot: 'Circle',\n  overridesResolver: (props, styles) => {\n    const {\n      ownerState\n    } = props;\n    return [styles.circle, styles[`circle${capitalize(ownerState.variant)}`], ownerState.disableShrink && styles.circleDisableShrink];\n  }\n})(memoTheme(({\n  theme\n}) => ({\n  stroke: 'currentColor',\n  variants: [{\n    props: {\n      variant: 'determinate'\n    },\n    style: {\n      transition: theme.transitions.create('stroke-dashoffset')\n    }\n  }, {\n    props: {\n      variant: 'indeterminate'\n    },\n    style: {\n      // Some default value that looks fine waiting for the animation to kicks in.\n      strokeDasharray: '80px, 200px',\n      strokeDashoffset: 0 // Add the unit to fix a Edge 16 and below bug.\n    }\n  }, {\n    props: ({\n      ownerState\n    }) => ownerState.variant === 'indeterminate' && !ownerState.disableShrink,\n    style: dashAnimation || {\n      // At runtime for Pigment CSS, `bufferAnimation` will be null and the generated keyframe will be used.\n      animation: `${circularDashKeyframe} 1.4s ease-in-out infinite`\n    }\n  }]\n})));\nconst CircularProgressTrack = styled('circle', {\n  name: 'MuiCircularProgress',\n  slot: 'Track'\n})(memoTheme(({\n  theme\n}) => ({\n  stroke: 'currentColor',\n  opacity: (theme.vars || theme).palette.action.activatedOpacity\n})));\n\n/**\n * ## ARIA\n *\n * If the progress bar is describing the loading progress of a particular region of a page,\n * you should use `aria-describedby` to point to the progress bar, and set the `aria-busy`\n * attribute to `true` on that region until it has finished loading.\n */\nconst CircularProgress = /*#__PURE__*/React.forwardRef(function CircularProgress(inProps, ref) {\n  const props = useDefaultProps({\n    props: inProps,\n    name: 'MuiCircularProgress'\n  });\n  const {\n    className,\n    color = 'primary',\n    disableShrink = false,\n    enableTrackSlot = false,\n    size = 40,\n    style,\n    thickness = 3.6,\n    value = 0,\n    variant = 'indeterminate',\n    ...other\n  } = props;\n  const ownerState = {\n    ...props,\n    color,\n    disableShrink,\n    size,\n    thickness,\n    value,\n    variant,\n    enableTrackSlot\n  };\n  const classes = useUtilityClasses(ownerState);\n  const circleStyle = {};\n  const rootStyle = {};\n  const rootProps = {};\n  if (variant === 'determinate') {\n    const circumference = 2 * Math.PI * ((SIZE - thickness) / 2);\n    circleStyle.strokeDasharray = circumference.toFixed(3);\n    rootProps['aria-valuenow'] = Math.round(value);\n    circleStyle.strokeDashoffset = `${((100 - value) / 100 * circumference).toFixed(3)}px`;\n    rootStyle.transform = 'rotate(-90deg)';\n  }\n  return /*#__PURE__*/_jsx(CircularProgressRoot, {\n    className: clsx(classes.root, className),\n    style: {\n      width: size,\n      height: size,\n      ...rootStyle,\n      ...style\n    },\n    ownerState: ownerState,\n    ref: ref,\n    role: \"progressbar\",\n    ...rootProps,\n    ...other,\n    children: /*#__PURE__*/_jsxs(CircularProgressSVG, {\n      className: classes.svg,\n      ownerState: ownerState,\n      viewBox: `${SIZE / 2} ${SIZE / 2} ${SIZE} ${SIZE}`,\n      children: [enableTrackSlot ? /*#__PURE__*/_jsx(CircularProgressTrack, {\n        className: classes.track,\n        ownerState: ownerState,\n        cx: SIZE,\n        cy: SIZE,\n        r: (SIZE - thickness) / 2,\n        fill: \"none\",\n        strokeWidth: thickness,\n        \"aria-hidden\": \"true\"\n      }) : null, /*#__PURE__*/_jsx(CircularProgressCircle, {\n        className: classes.circle,\n        style: circleStyle,\n        ownerState: ownerState,\n        cx: SIZE,\n        cy: SIZE,\n        r: (SIZE - thickness) / 2,\n        fill: \"none\",\n        strokeWidth: thickness\n      })]\n    })\n  });\n});\nprocess.env.NODE_ENV !== \"production\" ? CircularProgress.propTypes /* remove-proptypes */ = {\n  // ┌────────────────────────────── Warning ──────────────────────────────┐\n  // │ These PropTypes are generated from the TypeScript type definitions. │\n  // │    To update them, edit the d.ts file and run `pnpm proptypes`.     │\n  // └─────────────────────────────────────────────────────────────────────┘\n  /**\n   * Override or extend the styles applied to the component.\n   */\n  classes: PropTypes.object,\n  /**\n   * @ignore\n   */\n  className: PropTypes.string,\n  /**\n   * The color of the component.\n   * It supports both default and custom theme colors, which can be added as shown in the\n   * [palette customization guide](https://mui.com/material-ui/customization/palette/#custom-colors).\n   * @default 'primary'\n   */\n  color: PropTypes /* @typescript-to-proptypes-ignore */.oneOfType([PropTypes.oneOf(['inherit', 'primary', 'secondary', 'error', 'info', 'success', 'warning']), PropTypes.string]),\n  /**\n   * If `true`, the shrink animation is disabled.\n   * This only works if variant is `indeterminate`.\n   * @default false\n   */\n  disableShrink: chainPropTypes(PropTypes.bool, props => {\n    if (props.disableShrink && props.variant && props.variant !== 'indeterminate') {\n      return new Error('MUI: You have provided the `disableShrink` prop ' + 'with a variant other than `indeterminate`. This will have no effect.');\n    }\n    return null;\n  }),\n  /**\n   * If `true`, a track circle slot is mounted to show a subtle background for the progress.\n   * The `size` and `thickness` apply to the track slot to be consistent with the progress circle.\n   * @default false\n   */\n  enableTrackSlot: PropTypes.bool,\n  /**\n   * The size of the component.\n   * If using a number, the pixel unit is assumed.\n   * If using a string, you need to provide the CSS unit, for example '3rem'.\n   * @default 40\n   */\n  size: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n  /**\n   * @ignore\n   */\n  style: PropTypes.object,\n  /**\n   * The system prop that allows defining system overrides as well as additional CSS styles.\n   */\n  sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object]),\n  /**\n   * The thickness of the circle.\n   * @default 3.6\n   */\n  thickness: PropTypes.number,\n  /**\n   * The value of the progress indicator for the determinate variant.\n   * Value between 0 and 100.\n   * @default 0\n   */\n  value: PropTypes.number,\n  /**\n   * The variant to use.\n   * Use indeterminate when there is no progress value.\n   * @default 'indeterminate'\n   */\n  variant: PropTypes.oneOf(['determinate', 'indeterminate'])\n} : void 0;\nexport default CircularProgress;","import generateUtilityClasses from '@mui/utils/generateUtilityClasses';\nimport generateUtilityClass from '@mui/utils/generateUtilityClass';\nexport function getIconButtonUtilityClass(slot) {\n  return generateUtilityClass('MuiIconButton', slot);\n}\nconst iconButtonClasses = generateUtilityClasses('MuiIconButton', ['root', 'disabled', 'colorInherit', 'colorPrimary', 'colorSecondary', 'colorError', 'colorInfo', 'colorSuccess', 'colorWarning', 'edgeStart', 'edgeEnd', 'sizeSmall', 'sizeMedium', 'sizeLarge', 'loading', 'loadingIndicator', 'loadingWrapper']);\nexport default iconButtonClasses;","'use client';\n\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport chainPropTypes from '@mui/utils/chainPropTypes';\nimport composeClasses from '@mui/utils/composeClasses';\nimport { unstable_useId as useId } from \"../utils/index.js\";\nimport { styled } from \"../zero-styled/index.js\";\nimport memoTheme from \"../utils/memoTheme.js\";\nimport createSimplePaletteValueFilter from \"../utils/createSimplePaletteValueFilter.js\";\nimport { useDefaultProps } from \"../DefaultPropsProvider/index.js\";\nimport ButtonBase from \"../ButtonBase/index.js\";\nimport CircularProgress from \"../CircularProgress/index.js\";\nimport capitalize from \"../utils/capitalize.js\";\nimport iconButtonClasses, { getIconButtonUtilityClass } from \"./iconButtonClasses.js\";\nimport { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nconst useUtilityClasses = ownerState => {\n  const {\n    classes,\n    disabled,\n    color,\n    edge,\n    size,\n    loading\n  } = ownerState;\n  const slots = {\n    root: ['root', loading && 'loading', disabled && 'disabled', color !== 'default' && `color${capitalize(color)}`, edge && `edge${capitalize(edge)}`, `size${capitalize(size)}`],\n    loadingIndicator: ['loadingIndicator'],\n    loadingWrapper: ['loadingWrapper']\n  };\n  return composeClasses(slots, getIconButtonUtilityClass, classes);\n};\nconst IconButtonRoot = styled(ButtonBase, {\n  name: 'MuiIconButton',\n  slot: 'Root',\n  overridesResolver: (props, styles) => {\n    const {\n      ownerState\n    } = props;\n    return [styles.root, ownerState.loading && styles.loading, ownerState.color !== 'default' && styles[`color${capitalize(ownerState.color)}`], ownerState.edge && styles[`edge${capitalize(ownerState.edge)}`], styles[`size${capitalize(ownerState.size)}`]];\n  }\n})(memoTheme(({\n  theme\n}) => ({\n  textAlign: 'center',\n  flex: '0 0 auto',\n  fontSize: theme.typography.pxToRem(24),\n  padding: 8,\n  borderRadius: '50%',\n  color: (theme.vars || theme).palette.action.active,\n  transition: theme.transitions.create('background-color', {\n    duration: theme.transitions.duration.shortest\n  }),\n  variants: [{\n    props: props => !props.disableRipple,\n    style: {\n      '--IconButton-hoverBg': theme.alpha((theme.vars || theme).palette.action.active, (theme.vars || theme).palette.action.hoverOpacity),\n      '&:hover': {\n        backgroundColor: 'var(--IconButton-hoverBg)',\n        // Reset on touch devices, it doesn't add specificity\n        '@media (hover: none)': {\n          backgroundColor: 'transparent'\n        }\n      }\n    }\n  }, {\n    props: {\n      edge: 'start'\n    },\n    style: {\n      marginLeft: -12\n    }\n  }, {\n    props: {\n      edge: 'start',\n      size: 'small'\n    },\n    style: {\n      marginLeft: -3\n    }\n  }, {\n    props: {\n      edge: 'end'\n    },\n    style: {\n      marginRight: -12\n    }\n  }, {\n    props: {\n      edge: 'end',\n      size: 'small'\n    },\n    style: {\n      marginRight: -3\n    }\n  }]\n})), memoTheme(({\n  theme\n}) => ({\n  variants: [{\n    props: {\n      color: 'inherit'\n    },\n    style: {\n      color: 'inherit'\n    }\n  }, ...Object.entries(theme.palette).filter(createSimplePaletteValueFilter()) // check all the used fields in the style below\n  .map(([color]) => ({\n    props: {\n      color\n    },\n    style: {\n      color: (theme.vars || theme).palette[color].main\n    }\n  })), ...Object.entries(theme.palette).filter(createSimplePaletteValueFilter()) // check all the used fields in the style below\n  .map(([color]) => ({\n    props: {\n      color\n    },\n    style: {\n      '--IconButton-hoverBg': theme.alpha((theme.vars || theme).palette[color].main, (theme.vars || theme).palette.action.hoverOpacity)\n    }\n  })), {\n    props: {\n      size: 'small'\n    },\n    style: {\n      padding: 5,\n      fontSize: theme.typography.pxToRem(18)\n    }\n  }, {\n    props: {\n      size: 'large'\n    },\n    style: {\n      padding: 12,\n      fontSize: theme.typography.pxToRem(28)\n    }\n  }],\n  [`&.${iconButtonClasses.disabled}`]: {\n    backgroundColor: 'transparent',\n    color: (theme.vars || theme).palette.action.disabled\n  },\n  [`&.${iconButtonClasses.loading}`]: {\n    color: 'transparent'\n  }\n})));\nconst IconButtonLoadingIndicator = styled('span', {\n  name: 'MuiIconButton',\n  slot: 'LoadingIndicator'\n})(({\n  theme\n}) => ({\n  display: 'none',\n  position: 'absolute',\n  visibility: 'visible',\n  top: '50%',\n  left: '50%',\n  transform: 'translate(-50%, -50%)',\n  color: (theme.vars || theme).palette.action.disabled,\n  variants: [{\n    props: {\n      loading: true\n    },\n    style: {\n      display: 'flex'\n    }\n  }]\n}));\n\n/**\n * Refer to the [Icons](/material-ui/icons/) section of the documentation\n * regarding the available icon options.\n */\nconst IconButton = /*#__PURE__*/React.forwardRef(function IconButton(inProps, ref) {\n  const props = useDefaultProps({\n    props: inProps,\n    name: 'MuiIconButton'\n  });\n  const {\n    edge = false,\n    children,\n    className,\n    color = 'default',\n    disabled = false,\n    disableFocusRipple = false,\n    size = 'medium',\n    id: idProp,\n    loading = null,\n    loadingIndicator: loadingIndicatorProp,\n    ...other\n  } = props;\n  const loadingId = useId(idProp);\n  const loadingIndicator = loadingIndicatorProp ?? /*#__PURE__*/_jsx(CircularProgress, {\n    \"aria-labelledby\": loadingId,\n    color: \"inherit\",\n    size: 16\n  });\n  const ownerState = {\n    ...props,\n    edge,\n    color,\n    disabled,\n    disableFocusRipple,\n    loading,\n    loadingIndicator,\n    size\n  };\n  const classes = useUtilityClasses(ownerState);\n  return /*#__PURE__*/_jsxs(IconButtonRoot, {\n    id: loading ? loadingId : idProp,\n    className: clsx(classes.root, className),\n    centerRipple: true,\n    focusRipple: !disableFocusRipple,\n    disabled: disabled || loading,\n    ref: ref,\n    ...other,\n    ownerState: ownerState,\n    children: [typeof loading === 'boolean' &&\n    /*#__PURE__*/\n    // use plain HTML span to minimize the runtime overhead\n    _jsx(\"span\", {\n      className: classes.loadingWrapper,\n      style: {\n        display: 'contents'\n      },\n      children: /*#__PURE__*/_jsx(IconButtonLoadingIndicator, {\n        className: classes.loadingIndicator,\n        ownerState: ownerState,\n        children: loading && loadingIndicator\n      })\n    }), children]\n  });\n});\nprocess.env.NODE_ENV !== \"production\" ? IconButton.propTypes /* remove-proptypes */ = {\n  // ┌────────────────────────────── Warning ──────────────────────────────┐\n  // │ These PropTypes are generated from the TypeScript type definitions. │\n  // │    To update them, edit the d.ts file and run `pnpm proptypes`.     │\n  // └─────────────────────────────────────────────────────────────────────┘\n  /**\n   * The icon to display.\n   */\n  children: chainPropTypes(PropTypes.node, props => {\n    const found = React.Children.toArray(props.children).some(child => /*#__PURE__*/React.isValidElement(child) && child.props.onClick);\n    if (found) {\n      return new Error(['MUI: You are providing an onClick event listener to a child of a button element.', 'Prefer applying it to the IconButton directly.', 'This guarantees that the whole <button> will be responsive to click events.'].join('\\n'));\n    }\n    return null;\n  }),\n  /**\n   * Override or extend the styles applied to the component.\n   */\n  classes: PropTypes.object,\n  /**\n   * @ignore\n   */\n  className: PropTypes.string,\n  /**\n   * The color of the component.\n   * It supports both default and custom theme colors, which can be added as shown in the\n   * [palette customization guide](https://mui.com/material-ui/customization/palette/#custom-colors).\n   * @default 'default'\n   */\n  color: PropTypes /* @typescript-to-proptypes-ignore */.oneOfType([PropTypes.oneOf(['inherit', 'default', 'primary', 'secondary', 'error', 'info', 'success', 'warning']), PropTypes.string]),\n  /**\n   * If `true`, the component is disabled.\n   * @default false\n   */\n  disabled: PropTypes.bool,\n  /**\n   * If `true`, the  keyboard focus ripple is disabled.\n   * @default false\n   */\n  disableFocusRipple: PropTypes.bool,\n  /**\n   * If `true`, the ripple effect is disabled.\n   *\n   * ⚠️ Without a ripple there is no styling for :focus-visible by default. Be sure\n   * to highlight the element by applying separate styles with the `.Mui-focusVisible` class.\n   * @default false\n   */\n  disableRipple: PropTypes.bool,\n  /**\n   * If given, uses a negative margin to counteract the padding on one\n   * side (this is often helpful for aligning the left or right\n   * side of the icon with content above or below, without ruining the border\n   * size and shape).\n   * @default false\n   */\n  edge: PropTypes.oneOf(['end', 'start', false]),\n  /**\n   * @ignore\n   */\n  id: PropTypes.string,\n  /**\n   * If `true`, the loading indicator is visible and the button is disabled.\n   * If `true | false`, the loading wrapper is always rendered before the children to prevent [Google Translation Crash](https://github.com/mui/material-ui/issues/27853).\n   * @default null\n   */\n  loading: PropTypes.bool,\n  /**\n   * Element placed before the children if the button is in loading state.\n   * The node should contain an element with `role=\"progressbar\"` with an accessible name.\n   * By default, it renders a `CircularProgress` that is labeled by the button itself.\n   * @default <CircularProgress color=\"inherit\" size={16} />\n   */\n  loadingIndicator: PropTypes.node,\n  /**\n   * The size of the component.\n   * `small` is equivalent to the dense button styling.\n   * @default 'medium'\n   */\n  size: PropTypes /* @typescript-to-proptypes-ignore */.oneOfType([PropTypes.oneOf(['small', 'medium', 'large']), PropTypes.string]),\n  /**\n   * The system prop that allows defining system overrides as well as additional CSS styles.\n   */\n  sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object])\n} : void 0;\nexport default IconButton;","'use client';\n\nimport createSvgIcon from \"../../utils/createSvgIcon.js\";\n\n/**\n * @ignore - internal component.\n */\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport default createSvgIcon(/*#__PURE__*/_jsx(\"path\", {\n  d: \"M20,12A8,8 0 0,1 12,20A8,8 0 0,1 4,12A8,8 0 0,1 12,4C12.76,4 13.5,4.11 14.2, 4.31L15.77,2.74C14.61,2.26 13.34,2 12,2A10,10 0 0,0 2,12A10,10 0 0,0 12,22A10,10 0 0, 0 22,12M7.91,10.08L6.5,11.5L11,16L21,6L19.59,4.58L11,13.17L7.91,10.08Z\"\n}), 'SuccessOutlined');","'use client';\n\nimport createSvgIcon from \"../../utils/createSvgIcon.js\";\n\n/**\n * @ignore - internal component.\n */\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport default createSvgIcon(/*#__PURE__*/_jsx(\"path\", {\n  d: \"M12 5.99L19.53 19H4.47L12 5.99M12 2L1 21h22L12 2zm1 14h-2v2h2v-2zm0-6h-2v4h2v-4z\"\n}), 'ReportProblemOutlined');","'use client';\n\nimport createSvgIcon from \"../../utils/createSvgIcon.js\";\n\n/**\n * @ignore - internal component.\n */\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport default createSvgIcon(/*#__PURE__*/_jsx(\"path\", {\n  d: \"M11 15h2v2h-2zm0-8h2v6h-2zm.99-5C6.47 2 2 6.48 2 12s4.47 10 9.99 10C17.52 22 22 17.52 22 12S17.52 2 11.99 2zM12 20c-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8-3.58 8-8 8z\"\n}), 'ErrorOutline');","'use client';\n\nimport createSvgIcon from \"../../utils/createSvgIcon.js\";\n\n/**\n * @ignore - internal component.\n */\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport default createSvgIcon(/*#__PURE__*/_jsx(\"path\", {\n  d: \"M11,9H13V7H11M12,20C7.59,20 4,16.41 4,12C4,7.59 7.59,4 12,4C16.41,4 20,7.59 20, 12C20,16.41 16.41,20 12,20M12,2A10,10 0 0,0 2,12A10,10 0 0,0 12,22A10,10 0 0,0 22,12A10, 10 0 0,0 12,2M11,17H13V11H11V17Z\"\n}), 'InfoOutlined');","'use client';\n\nimport createSvgIcon from \"../../utils/createSvgIcon.js\";\n\n/**\n * @ignore - internal component.\n *\n * Alias to `Clear`.\n */\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport default createSvgIcon(/*#__PURE__*/_jsx(\"path\", {\n  d: \"M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z\"\n}), 'Close');","'use client';\n\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport composeClasses from '@mui/utils/composeClasses';\nimport { styled } from \"../zero-styled/index.js\";\nimport memoTheme from \"../utils/memoTheme.js\";\nimport { useDefaultProps } from \"../DefaultPropsProvider/index.js\";\nimport useSlot from \"../utils/useSlot.js\";\nimport capitalize from \"../utils/capitalize.js\";\nimport createSimplePaletteValueFilter from \"../utils/createSimplePaletteValueFilter.js\";\nimport Paper from \"../Paper/index.js\";\nimport alertClasses, { getAlertUtilityClass } from \"./alertClasses.js\";\nimport IconButton from \"../IconButton/index.js\";\nimport SuccessOutlinedIcon from \"../internal/svg-icons/SuccessOutlined.js\";\nimport ReportProblemOutlinedIcon from \"../internal/svg-icons/ReportProblemOutlined.js\";\nimport ErrorOutlineIcon from \"../internal/svg-icons/ErrorOutline.js\";\nimport InfoOutlinedIcon from \"../internal/svg-icons/InfoOutlined.js\";\nimport CloseIcon from \"../internal/svg-icons/Close.js\";\nimport { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nconst useUtilityClasses = ownerState => {\n  const {\n    variant,\n    color,\n    severity,\n    classes\n  } = ownerState;\n  const slots = {\n    root: ['root', `color${capitalize(color || severity)}`, `${variant}${capitalize(color || severity)}`, `${variant}`],\n    icon: ['icon'],\n    message: ['message'],\n    action: ['action']\n  };\n  return composeClasses(slots, getAlertUtilityClass, classes);\n};\nconst AlertRoot = styled(Paper, {\n  name: 'MuiAlert',\n  slot: 'Root',\n  overridesResolver: (props, styles) => {\n    const {\n      ownerState\n    } = props;\n    return [styles.root, styles[ownerState.variant], styles[`${ownerState.variant}${capitalize(ownerState.color || ownerState.severity)}`]];\n  }\n})(memoTheme(({\n  theme\n}) => {\n  const getColor = theme.palette.mode === 'light' ? theme.darken : theme.lighten;\n  const getBackgroundColor = theme.palette.mode === 'light' ? theme.lighten : theme.darken;\n  return {\n    ...theme.typography.body2,\n    backgroundColor: 'transparent',\n    display: 'flex',\n    padding: '6px 16px',\n    variants: [...Object.entries(theme.palette).filter(createSimplePaletteValueFilter(['light'])).map(([color]) => ({\n      props: {\n        colorSeverity: color,\n        variant: 'standard'\n      },\n      style: {\n        color: theme.vars ? theme.vars.palette.Alert[`${color}Color`] : getColor(theme.palette[color].light, 0.6),\n        backgroundColor: theme.vars ? theme.vars.palette.Alert[`${color}StandardBg`] : getBackgroundColor(theme.palette[color].light, 0.9),\n        [`& .${alertClasses.icon}`]: theme.vars ? {\n          color: theme.vars.palette.Alert[`${color}IconColor`]\n        } : {\n          color: theme.palette[color].main\n        }\n      }\n    })), ...Object.entries(theme.palette).filter(createSimplePaletteValueFilter(['light'])).map(([color]) => ({\n      props: {\n        colorSeverity: color,\n        variant: 'outlined'\n      },\n      style: {\n        color: theme.vars ? theme.vars.palette.Alert[`${color}Color`] : getColor(theme.palette[color].light, 0.6),\n        border: `1px solid ${(theme.vars || theme).palette[color].light}`,\n        [`& .${alertClasses.icon}`]: theme.vars ? {\n          color: theme.vars.palette.Alert[`${color}IconColor`]\n        } : {\n          color: theme.palette[color].main\n        }\n      }\n    })), ...Object.entries(theme.palette).filter(createSimplePaletteValueFilter(['dark'])).map(([color]) => ({\n      props: {\n        colorSeverity: color,\n        variant: 'filled'\n      },\n      style: {\n        fontWeight: theme.typography.fontWeightMedium,\n        ...(theme.vars ? {\n          color: theme.vars.palette.Alert[`${color}FilledColor`],\n          backgroundColor: theme.vars.palette.Alert[`${color}FilledBg`]\n        } : {\n          backgroundColor: theme.palette.mode === 'dark' ? theme.palette[color].dark : theme.palette[color].main,\n          color: theme.palette.getContrastText(theme.palette[color].main)\n        })\n      }\n    }))]\n  };\n}));\nconst AlertIcon = styled('div', {\n  name: 'MuiAlert',\n  slot: 'Icon'\n})({\n  marginRight: 12,\n  padding: '7px 0',\n  display: 'flex',\n  fontSize: 22,\n  opacity: 0.9\n});\nconst AlertMessage = styled('div', {\n  name: 'MuiAlert',\n  slot: 'Message'\n})({\n  padding: '8px 0',\n  minWidth: 0,\n  overflow: 'auto'\n});\nconst AlertAction = styled('div', {\n  name: 'MuiAlert',\n  slot: 'Action'\n})({\n  display: 'flex',\n  alignItems: 'flex-start',\n  padding: '4px 0 0 16px',\n  marginLeft: 'auto',\n  marginRight: -8\n});\nconst defaultIconMapping = {\n  success: /*#__PURE__*/_jsx(SuccessOutlinedIcon, {\n    fontSize: \"inherit\"\n  }),\n  warning: /*#__PURE__*/_jsx(ReportProblemOutlinedIcon, {\n    fontSize: \"inherit\"\n  }),\n  error: /*#__PURE__*/_jsx(ErrorOutlineIcon, {\n    fontSize: \"inherit\"\n  }),\n  info: /*#__PURE__*/_jsx(InfoOutlinedIcon, {\n    fontSize: \"inherit\"\n  })\n};\nconst Alert = /*#__PURE__*/React.forwardRef(function Alert(inProps, ref) {\n  const props = useDefaultProps({\n    props: inProps,\n    name: 'MuiAlert'\n  });\n  const {\n    action,\n    children,\n    className,\n    closeText = 'Close',\n    color,\n    components = {},\n    componentsProps = {},\n    icon,\n    iconMapping = defaultIconMapping,\n    onClose,\n    role = 'alert',\n    severity = 'success',\n    slotProps = {},\n    slots = {},\n    variant = 'standard',\n    ...other\n  } = props;\n  const ownerState = {\n    ...props,\n    color,\n    severity,\n    variant,\n    colorSeverity: color || severity\n  };\n  const classes = useUtilityClasses(ownerState);\n  const externalForwardedProps = {\n    slots: {\n      closeButton: components.CloseButton,\n      closeIcon: components.CloseIcon,\n      ...slots\n    },\n    slotProps: {\n      ...componentsProps,\n      ...slotProps\n    }\n  };\n  const [RootSlot, rootSlotProps] = useSlot('root', {\n    ref,\n    shouldForwardComponentProp: true,\n    className: clsx(classes.root, className),\n    elementType: AlertRoot,\n    externalForwardedProps: {\n      ...externalForwardedProps,\n      ...other\n    },\n    ownerState,\n    additionalProps: {\n      role,\n      elevation: 0\n    }\n  });\n  const [IconSlot, iconSlotProps] = useSlot('icon', {\n    className: classes.icon,\n    elementType: AlertIcon,\n    externalForwardedProps,\n    ownerState\n  });\n  const [MessageSlot, messageSlotProps] = useSlot('message', {\n    className: classes.message,\n    elementType: AlertMessage,\n    externalForwardedProps,\n    ownerState\n  });\n  const [ActionSlot, actionSlotProps] = useSlot('action', {\n    className: classes.action,\n    elementType: AlertAction,\n    externalForwardedProps,\n    ownerState\n  });\n  const [CloseButtonSlot, closeButtonProps] = useSlot('closeButton', {\n    elementType: IconButton,\n    externalForwardedProps,\n    ownerState\n  });\n  const [CloseIconSlot, closeIconProps] = useSlot('closeIcon', {\n    elementType: CloseIcon,\n    externalForwardedProps,\n    ownerState\n  });\n  return /*#__PURE__*/_jsxs(RootSlot, {\n    ...rootSlotProps,\n    children: [icon !== false ? /*#__PURE__*/_jsx(IconSlot, {\n      ...iconSlotProps,\n      children: icon || iconMapping[severity] || defaultIconMapping[severity]\n    }) : null, /*#__PURE__*/_jsx(MessageSlot, {\n      ...messageSlotProps,\n      children: children\n    }), action != null ? /*#__PURE__*/_jsx(ActionSlot, {\n      ...actionSlotProps,\n      children: action\n    }) : null, action == null && onClose ? /*#__PURE__*/_jsx(ActionSlot, {\n      ...actionSlotProps,\n      children: /*#__PURE__*/_jsx(CloseButtonSlot, {\n        size: \"small\",\n        \"aria-label\": closeText,\n        title: closeText,\n        color: \"inherit\",\n        onClick: onClose,\n        ...closeButtonProps,\n        children: /*#__PURE__*/_jsx(CloseIconSlot, {\n          fontSize: \"small\",\n          ...closeIconProps\n        })\n      })\n    }) : null]\n  });\n});\nprocess.env.NODE_ENV !== \"production\" ? Alert.propTypes /* remove-proptypes */ = {\n  // ┌────────────────────────────── Warning ──────────────────────────────┐\n  // │ These PropTypes are generated from the TypeScript type definitions. │\n  // │    To update them, edit the d.ts file and run `pnpm proptypes`.     │\n  // └─────────────────────────────────────────────────────────────────────┘\n  /**\n   * The action to display. It renders after the message, at the end of the alert.\n   */\n  action: PropTypes.node,\n  /**\n   * The content of the component.\n   */\n  children: PropTypes.node,\n  /**\n   * Override or extend the styles applied to the component.\n   */\n  classes: PropTypes.object,\n  /**\n   * @ignore\n   */\n  className: PropTypes.string,\n  /**\n   * Override the default label for the *close popup* icon button.\n   *\n   * For localization purposes, you can use the provided [translations](https://mui.com/material-ui/guides/localization/).\n   * @default 'Close'\n   */\n  closeText: PropTypes.string,\n  /**\n   * The color of the component. Unless provided, the value is taken from the `severity` prop.\n   * It supports both default and custom theme colors, which can be added as shown in the\n   * [palette customization guide](https://mui.com/material-ui/customization/palette/#custom-colors).\n   */\n  color: PropTypes /* @typescript-to-proptypes-ignore */.oneOfType([PropTypes.oneOf(['error', 'info', 'success', 'warning']), PropTypes.string]),\n  /**\n   * The components used for each slot inside.\n   *\n   * @deprecated use the `slots` prop instead. This prop will be removed in a future major release. See [Migrating from deprecated APIs](https://mui.com/material-ui/migration/migrating-from-deprecated-apis/) for more details.\n   *\n   * @default {}\n   */\n  components: PropTypes.shape({\n    CloseButton: PropTypes.elementType,\n    CloseIcon: PropTypes.elementType\n  }),\n  /**\n   * The extra props for the slot components.\n   * You can override the existing props or add new ones.\n   *\n   * @deprecated use the `slotProps` prop instead. This prop will be removed in a future major release. See [Migrating from deprecated APIs](https://mui.com/material-ui/migration/migrating-from-deprecated-apis/) for more details.\n   *\n   * @default {}\n   */\n  componentsProps: PropTypes.shape({\n    closeButton: PropTypes.object,\n    closeIcon: PropTypes.object\n  }),\n  /**\n   * Override the icon displayed before the children.\n   * Unless provided, the icon is mapped to the value of the `severity` prop.\n   * Set to `false` to remove the `icon`.\n   */\n  icon: PropTypes.node,\n  /**\n   * The component maps the `severity` prop to a range of different icons,\n   * for instance success to `<SuccessOutlined>`.\n   * If you wish to change this mapping, you can provide your own.\n   * Alternatively, you can use the `icon` prop to override the icon displayed.\n   */\n  iconMapping: PropTypes.shape({\n    error: PropTypes.node,\n    info: PropTypes.node,\n    success: PropTypes.node,\n    warning: PropTypes.node\n  }),\n  /**\n   * Callback fired when the component requests to be closed.\n   * When provided and no `action` prop is set, a close icon button is displayed that triggers the callback when clicked.\n   * @param {React.SyntheticEvent} event The event source of the callback.\n   */\n  onClose: PropTypes.func,\n  /**\n   * The ARIA role attribute of the element.\n   * @default 'alert'\n   */\n  role: PropTypes.string,\n  /**\n   * The severity of the alert. This defines the color and icon used.\n   * @default 'success'\n   */\n  severity: PropTypes /* @typescript-to-proptypes-ignore */.oneOfType([PropTypes.oneOf(['error', 'info', 'success', 'warning']), PropTypes.string]),\n  /**\n   * The props used for each slot inside.\n   * @default {}\n   */\n  slotProps: PropTypes.shape({\n    action: PropTypes.oneOfType([PropTypes.func, PropTypes.object]),\n    closeButton: PropTypes.oneOfType([PropTypes.func, PropTypes.object]),\n    closeIcon: PropTypes.oneOfType([PropTypes.func, PropTypes.object]),\n    icon: PropTypes.oneOfType([PropTypes.func, PropTypes.object]),\n    message: PropTypes.oneOfType([PropTypes.func, PropTypes.object]),\n    root: PropTypes.oneOfType([PropTypes.func, PropTypes.object])\n  }),\n  /**\n   * The components used for each slot inside.\n   * @default {}\n   */\n  slots: PropTypes.shape({\n    action: PropTypes.elementType,\n    closeButton: PropTypes.elementType,\n    closeIcon: PropTypes.elementType,\n    icon: PropTypes.elementType,\n    message: PropTypes.elementType,\n    root: PropTypes.elementType\n  }),\n  /**\n   * The system prop that allows defining system overrides as well as additional CSS styles.\n   */\n  sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object]),\n  /**\n   * The variant to use.\n   * @default 'standard'\n   */\n  variant: PropTypes /* @typescript-to-proptypes-ignore */.oneOfType([PropTypes.oneOf(['filled', 'outlined', 'standard']), PropTypes.string])\n} : void 0;\nexport default Alert;","import generateUtilityClasses from '@mui/utils/generateUtilityClasses';\nimport generateUtilityClass from '@mui/utils/generateUtilityClass';\nexport function getTypographyUtilityClass(slot) {\n  return generateUtilityClass('MuiTypography', slot);\n}\nconst typographyClasses = generateUtilityClasses('MuiTypography', ['root', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'subtitle1', 'subtitle2', 'body1', 'body2', 'inherit', 'button', 'caption', 'overline', 'alignLeft', 'alignRight', 'alignCenter', 'alignJustify', 'noWrap', 'gutterBottom', 'paragraph']);\nexport default typographyClasses;","'use client';\n\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport composeClasses from '@mui/utils/composeClasses';\nimport { styled, internal_createExtendSxProp } from \"../zero-styled/index.js\";\nimport memoTheme from \"../utils/memoTheme.js\";\nimport { useDefaultProps } from \"../DefaultPropsProvider/index.js\";\nimport capitalize from \"../utils/capitalize.js\";\nimport createSimplePaletteValueFilter from \"../utils/createSimplePaletteValueFilter.js\";\nimport { getTypographyUtilityClass } from \"./typographyClasses.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nconst v6Colors = {\n  primary: true,\n  secondary: true,\n  error: true,\n  info: true,\n  success: true,\n  warning: true,\n  textPrimary: true,\n  textSecondary: true,\n  textDisabled: true\n};\nconst extendSxProp = internal_createExtendSxProp();\nconst useUtilityClasses = ownerState => {\n  const {\n    align,\n    gutterBottom,\n    noWrap,\n    paragraph,\n    variant,\n    classes\n  } = ownerState;\n  const slots = {\n    root: ['root', variant, ownerState.align !== 'inherit' && `align${capitalize(align)}`, gutterBottom && 'gutterBottom', noWrap && 'noWrap', paragraph && 'paragraph']\n  };\n  return composeClasses(slots, getTypographyUtilityClass, classes);\n};\nexport const TypographyRoot = styled('span', {\n  name: 'MuiTypography',\n  slot: 'Root',\n  overridesResolver: (props, styles) => {\n    const {\n      ownerState\n    } = props;\n    return [styles.root, ownerState.variant && styles[ownerState.variant], ownerState.align !== 'inherit' && styles[`align${capitalize(ownerState.align)}`], ownerState.noWrap && styles.noWrap, ownerState.gutterBottom && styles.gutterBottom, ownerState.paragraph && styles.paragraph];\n  }\n})(memoTheme(({\n  theme\n}) => ({\n  margin: 0,\n  variants: [{\n    props: {\n      variant: 'inherit'\n    },\n    style: {\n      // Some elements, like <button> on Chrome have default font that doesn't inherit, reset this.\n      font: 'inherit',\n      lineHeight: 'inherit',\n      letterSpacing: 'inherit'\n    }\n  }, ...Object.entries(theme.typography).filter(([variant, value]) => variant !== 'inherit' && value && typeof value === 'object').map(([variant, value]) => ({\n    props: {\n      variant\n    },\n    style: value\n  })), ...Object.entries(theme.palette).filter(createSimplePaletteValueFilter()).map(([color]) => ({\n    props: {\n      color\n    },\n    style: {\n      color: (theme.vars || theme).palette[color].main\n    }\n  })), ...Object.entries(theme.palette?.text || {}).filter(([, value]) => typeof value === 'string').map(([color]) => ({\n    props: {\n      color: `text${capitalize(color)}`\n    },\n    style: {\n      color: (theme.vars || theme).palette.text[color]\n    }\n  })), {\n    props: ({\n      ownerState\n    }) => ownerState.align !== 'inherit',\n    style: {\n      textAlign: 'var(--Typography-textAlign)'\n    }\n  }, {\n    props: ({\n      ownerState\n    }) => ownerState.noWrap,\n    style: {\n      overflow: 'hidden',\n      textOverflow: 'ellipsis',\n      whiteSpace: 'nowrap'\n    }\n  }, {\n    props: ({\n      ownerState\n    }) => ownerState.gutterBottom,\n    style: {\n      marginBottom: '0.35em'\n    }\n  }, {\n    props: ({\n      ownerState\n    }) => ownerState.paragraph,\n    style: {\n      marginBottom: 16\n    }\n  }]\n})));\nconst defaultVariantMapping = {\n  h1: 'h1',\n  h2: 'h2',\n  h3: 'h3',\n  h4: 'h4',\n  h5: 'h5',\n  h6: 'h6',\n  subtitle1: 'h6',\n  subtitle2: 'h6',\n  body1: 'p',\n  body2: 'p',\n  inherit: 'p'\n};\nconst Typography = /*#__PURE__*/React.forwardRef(function Typography(inProps, ref) {\n  const {\n    color,\n    ...themeProps\n  } = useDefaultProps({\n    props: inProps,\n    name: 'MuiTypography'\n  });\n  const isSxColor = !v6Colors[color];\n  // TODO: Remove `extendSxProp` in v7\n  const props = extendSxProp({\n    ...themeProps,\n    ...(isSxColor && {\n      color\n    })\n  });\n  const {\n    align = 'inherit',\n    className,\n    component,\n    gutterBottom = false,\n    noWrap = false,\n    paragraph = false,\n    variant = 'body1',\n    variantMapping = defaultVariantMapping,\n    ...other\n  } = props;\n  const ownerState = {\n    ...props,\n    align,\n    color,\n    className,\n    component,\n    gutterBottom,\n    noWrap,\n    paragraph,\n    variant,\n    variantMapping\n  };\n  const Component = component || (paragraph ? 'p' : variantMapping[variant] || defaultVariantMapping[variant]) || 'span';\n  const classes = useUtilityClasses(ownerState);\n  return /*#__PURE__*/_jsx(TypographyRoot, {\n    as: Component,\n    ref: ref,\n    className: clsx(classes.root, className),\n    ...other,\n    ownerState: ownerState,\n    style: {\n      ...(align !== 'inherit' && {\n        '--Typography-textAlign': align\n      }),\n      ...other.style\n    }\n  });\n});\nprocess.env.NODE_ENV !== \"production\" ? Typography.propTypes /* remove-proptypes */ = {\n  // ┌────────────────────────────── Warning ──────────────────────────────┐\n  // │ These PropTypes are generated from the TypeScript type definitions. │\n  // │    To update them, edit the d.ts file and run `pnpm proptypes`.     │\n  // └─────────────────────────────────────────────────────────────────────┘\n  /**\n   * Set the text-align on the component.\n   * @default 'inherit'\n   */\n  align: PropTypes.oneOf(['center', 'inherit', 'justify', 'left', 'right']),\n  /**\n   * The content of the component.\n   */\n  children: PropTypes.node,\n  /**\n   * Override or extend the styles applied to the component.\n   */\n  classes: PropTypes.object,\n  /**\n   * @ignore\n   */\n  className: PropTypes.string,\n  /**\n   * The color of the component.\n   * It supports both default and custom theme colors, which can be added as shown in the\n   * [palette customization guide](https://mui.com/material-ui/customization/palette/#custom-colors).\n   */\n  color: PropTypes /* @typescript-to-proptypes-ignore */.oneOfType([PropTypes.oneOf(['primary', 'secondary', 'success', 'error', 'info', 'warning', 'textPrimary', 'textSecondary', 'textDisabled']), PropTypes.string]),\n  /**\n   * The component used for the root node.\n   * Either a string to use a HTML element or a component.\n   */\n  component: PropTypes.elementType,\n  /**\n   * If `true`, the text will have a bottom margin.\n   * @default false\n   */\n  gutterBottom: PropTypes.bool,\n  /**\n   * If `true`, the text will not wrap, but instead will truncate with a text overflow ellipsis.\n   *\n   * Note that text overflow can only happen with block or inline-block level elements\n   * (the element needs to have a width in order to overflow).\n   * @default false\n   */\n  noWrap: PropTypes.bool,\n  /**\n   * If `true`, the element will be a paragraph element.\n   * @default false\n   * @deprecated Use the `component` prop instead. This prop will be removed in a future major release. See [Migrating from deprecated APIs](https://mui.com/material-ui/migration/migrating-from-deprecated-apis/) for more details.\n   */\n  paragraph: PropTypes.bool,\n  /**\n   * @ignore\n   */\n  style: PropTypes.object,\n  /**\n   * The system prop that allows defining system overrides as well as additional CSS styles.\n   */\n  sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object]),\n  /**\n   * Applies the theme typography styles.\n   * @default 'body1'\n   */\n  variant: PropTypes /* @typescript-to-proptypes-ignore */.oneOfType([PropTypes.oneOf(['body1', 'body2', 'button', 'caption', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'inherit', 'overline', 'subtitle1', 'subtitle2']), PropTypes.string]),\n  /**\n   * The component maps the variant prop to a range of different HTML element types.\n   * For instance, subtitle1 to `<h6>`.\n   * If you wish to change that mapping, you can provide your own.\n   * Alternatively, you can use the `component` prop.\n   * @default {\n   *   h1: 'h1',\n   *   h2: 'h2',\n   *   h3: 'h3',\n   *   h4: 'h4',\n   *   h5: 'h5',\n   *   h6: 'h6',\n   *   subtitle1: 'h6',\n   *   subtitle2: 'h6',\n   *   body1: 'p',\n   *   body2: 'p',\n   *   inherit: 'p',\n   * }\n   */\n  variantMapping: PropTypes /* @typescript-to-proptypes-ignore */.object\n} : void 0;\nexport default Typography;","export default function HTMLElementType(props, propName, componentName, location, propFullName) {\n  if (process.env.NODE_ENV === 'production') {\n    return null;\n  }\n  const propValue = props[propName];\n  const safePropName = propFullName || propName;\n  if (propValue == null) {\n    return null;\n  }\n  if (propValue && propValue.nodeType !== 1) {\n    return new Error(`Invalid ${location} \\`${safePropName}\\` supplied to \\`${componentName}\\`. ` + `Expected an HTMLElement.`);\n  }\n  return null;\n}","export var top = 'top';\nexport var bottom = 'bottom';\nexport var right = 'right';\nexport var left = 'left';\nexport var auto = 'auto';\nexport var basePlacements = [top, bottom, right, left];\nexport var start = 'start';\nexport var end = 'end';\nexport var clippingParents = 'clippingParents';\nexport var viewport = 'viewport';\nexport var popper = 'popper';\nexport var reference = 'reference';\nexport var variationPlacements = /*#__PURE__*/basePlacements.reduce(function (acc, placement) {\n  return acc.concat([placement + \"-\" + start, placement + \"-\" + end]);\n}, []);\nexport var placements = /*#__PURE__*/[].concat(basePlacements, [auto]).reduce(function (acc, placement) {\n  return acc.concat([placement, placement + \"-\" + start, placement + \"-\" + end]);\n}, []); // modifiers that need to read the DOM\n\nexport var beforeRead = 'beforeRead';\nexport var read = 'read';\nexport var afterRead = 'afterRead'; // pure-logic modifiers\n\nexport var beforeMain = 'beforeMain';\nexport var main = 'main';\nexport var afterMain = 'afterMain'; // modifier with the purpose to write to the DOM (or write into a framework state)\n\nexport var beforeWrite = 'beforeWrite';\nexport var write = 'write';\nexport var afterWrite = 'afterWrite';\nexport var modifierPhases = [beforeRead, read, afterRead, beforeMain, main, afterMain, beforeWrite, write, afterWrite];","export default function getNodeName(element) {\n  return element ? (element.nodeName || '').toLowerCase() : null;\n}","export default function getWindow(node) {\n  if (node == null) {\n    return window;\n  }\n\n  if (node.toString() !== '[object Window]') {\n    var ownerDocument = node.ownerDocument;\n    return ownerDocument ? ownerDocument.defaultView || window : window;\n  }\n\n  return node;\n}","import getWindow from \"./getWindow.js\";\n\nfunction isElement(node) {\n  var OwnElement = getWindow(node).Element;\n  return node instanceof OwnElement || node instanceof Element;\n}\n\nfunction isHTMLElement(node) {\n  var OwnElement = getWindow(node).HTMLElement;\n  return node instanceof OwnElement || node instanceof HTMLElement;\n}\n\nfunction isShadowRoot(node) {\n  // IE 11 has no ShadowRoot\n  if (typeof ShadowRoot === 'undefined') {\n    return false;\n  }\n\n  var OwnElement = getWindow(node).ShadowRoot;\n  return node instanceof OwnElement || node instanceof ShadowRoot;\n}\n\nexport { isElement, isHTMLElement, isShadowRoot };","import getNodeName from \"../dom-utils/getNodeName.js\";\nimport { isHTMLElement } from \"../dom-utils/instanceOf.js\"; // This modifier takes the styles prepared by the `computeStyles` modifier\n// and applies them to the HTMLElements such as popper and arrow\n\nfunction applyStyles(_ref) {\n  var state = _ref.state;\n  Object.keys(state.elements).forEach(function (name) {\n    var style = state.styles[name] || {};\n    var attributes = state.attributes[name] || {};\n    var element = state.elements[name]; // arrow is optional + virtual elements\n\n    if (!isHTMLElement(element) || !getNodeName(element)) {\n      return;\n    } // Flow doesn't support to extend this property, but it's the most\n    // effective way to apply styles to an HTMLElement\n    // $FlowFixMe[cannot-write]\n\n\n    Object.assign(element.style, style);\n    Object.keys(attributes).forEach(function (name) {\n      var value = attributes[name];\n\n      if (value === false) {\n        element.removeAttribute(name);\n      } else {\n        element.setAttribute(name, value === true ? '' : value);\n      }\n    });\n  });\n}\n\nfunction effect(_ref2) {\n  var state = _ref2.state;\n  var initialStyles = {\n    popper: {\n      position: state.options.strategy,\n      left: '0',\n      top: '0',\n      margin: '0'\n    },\n    arrow: {\n      position: 'absolute'\n    },\n    reference: {}\n  };\n  Object.assign(state.elements.popper.style, initialStyles.popper);\n  state.styles = initialStyles;\n\n  if (state.elements.arrow) {\n    Object.assign(state.elements.arrow.style, initialStyles.arrow);\n  }\n\n  return function () {\n    Object.keys(state.elements).forEach(function (name) {\n      var element = state.elements[name];\n      var attributes = state.attributes[name] || {};\n      var styleProperties = Object.keys(state.styles.hasOwnProperty(name) ? state.styles[name] : initialStyles[name]); // Set all values to an empty string to unset them\n\n      var style = styleProperties.reduce(function (style, property) {\n        style[property] = '';\n        return style;\n      }, {}); // arrow is optional + virtual elements\n\n      if (!isHTMLElement(element) || !getNodeName(element)) {\n        return;\n      }\n\n      Object.assign(element.style, style);\n      Object.keys(attributes).forEach(function (attribute) {\n        element.removeAttribute(attribute);\n      });\n    });\n  };\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n  name: 'applyStyles',\n  enabled: true,\n  phase: 'write',\n  fn: applyStyles,\n  effect: effect,\n  requires: ['computeStyles']\n};","import { auto } from \"../enums.js\";\nexport default function getBasePlacement(placement) {\n  return placement.split('-')[0];\n}","export var max = Math.max;\nexport var min = Math.min;\nexport var round = Math.round;","export default function getUAString() {\n  var uaData = navigator.userAgentData;\n\n  if (uaData != null && uaData.brands && Array.isArray(uaData.brands)) {\n    return uaData.brands.map(function (item) {\n      return item.brand + \"/\" + item.version;\n    }).join(' ');\n  }\n\n  return navigator.userAgent;\n}","import getUAString from \"../utils/userAgent.js\";\nexport default function isLayoutViewport() {\n  return !/^((?!chrome|android).)*safari/i.test(getUAString());\n}","import { isElement, isHTMLElement } from \"./instanceOf.js\";\nimport { round } from \"../utils/math.js\";\nimport getWindow from \"./getWindow.js\";\nimport isLayoutViewport from \"./isLayoutViewport.js\";\nexport default function getBoundingClientRect(element, includeScale, isFixedStrategy) {\n  if (includeScale === void 0) {\n    includeScale = false;\n  }\n\n  if (isFixedStrategy === void 0) {\n    isFixedStrategy = false;\n  }\n\n  var clientRect = element.getBoundingClientRect();\n  var scaleX = 1;\n  var scaleY = 1;\n\n  if (includeScale && isHTMLElement(element)) {\n    scaleX = element.offsetWidth > 0 ? round(clientRect.width) / element.offsetWidth || 1 : 1;\n    scaleY = element.offsetHeight > 0 ? round(clientRect.height) / element.offsetHeight || 1 : 1;\n  }\n\n  var _ref = isElement(element) ? getWindow(element) : window,\n      visualViewport = _ref.visualViewport;\n\n  var addVisualOffsets = !isLayoutViewport() && isFixedStrategy;\n  var x = (clientRect.left + (addVisualOffsets && visualViewport ? visualViewport.offsetLeft : 0)) / scaleX;\n  var y = (clientRect.top + (addVisualOffsets && visualViewport ? visualViewport.offsetTop : 0)) / scaleY;\n  var width = clientRect.width / scaleX;\n  var height = clientRect.height / scaleY;\n  return {\n    width: width,\n    height: height,\n    top: y,\n    right: x + width,\n    bottom: y + height,\n    left: x,\n    x: x,\n    y: y\n  };\n}","import getBoundingClientRect from \"./getBoundingClientRect.js\"; // Returns the layout rect of an element relative to its offsetParent. Layout\n// means it doesn't take into account transforms.\n\nexport default function getLayoutRect(element) {\n  var clientRect = getBoundingClientRect(element); // Use the clientRect sizes if it's not been transformed.\n  // Fixes https://github.com/popperjs/popper-core/issues/1223\n\n  var width = element.offsetWidth;\n  var height = element.offsetHeight;\n\n  if (Math.abs(clientRect.width - width) <= 1) {\n    width = clientRect.width;\n  }\n\n  if (Math.abs(clientRect.height - height) <= 1) {\n    height = clientRect.height;\n  }\n\n  return {\n    x: element.offsetLeft,\n    y: element.offsetTop,\n    width: width,\n    height: height\n  };\n}","import { isShadowRoot } from \"./instanceOf.js\";\nexport default function contains(parent, child) {\n  var rootNode = child.getRootNode && child.getRootNode(); // First, attempt with faster native method\n\n  if (parent.contains(child)) {\n    return true;\n  } // then fallback to custom implementation with Shadow DOM support\n  else if (rootNode && isShadowRoot(rootNode)) {\n      var next = child;\n\n      do {\n        if (next && parent.isSameNode(next)) {\n          return true;\n        } // $FlowFixMe[prop-missing]: need a better way to handle this...\n\n\n        next = next.parentNode || next.host;\n      } while (next);\n    } // Give up, the result is false\n\n\n  return false;\n}","import getWindow from \"./getWindow.js\";\nexport default function getComputedStyle(element) {\n  return getWindow(element).getComputedStyle(element);\n}","import getNodeName from \"./getNodeName.js\";\nexport default function isTableElement(element) {\n  return ['table', 'td', 'th'].indexOf(getNodeName(element)) >= 0;\n}","import { isElement } from \"./instanceOf.js\";\nexport default function getDocumentElement(element) {\n  // $FlowFixMe[incompatible-return]: assume body is always available\n  return ((isElement(element) ? element.ownerDocument : // $FlowFixMe[prop-missing]\n  element.document) || window.document).documentElement;\n}","import getNodeName from \"./getNodeName.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport { isShadowRoot } from \"./instanceOf.js\";\nexport default function getParentNode(element) {\n  if (getNodeName(element) === 'html') {\n    return element;\n  }\n\n  return (// this is a quicker (but less type safe) way to save quite some bytes from the bundle\n    // $FlowFixMe[incompatible-return]\n    // $FlowFixMe[prop-missing]\n    element.assignedSlot || // step into the shadow DOM of the parent of a slotted node\n    element.parentNode || ( // DOM Element detected\n    isShadowRoot(element) ? element.host : null) || // ShadowRoot detected\n    // $FlowFixMe[incompatible-call]: HTMLElement is a Node\n    getDocumentElement(element) // fallback\n\n  );\n}","import getWindow from \"./getWindow.js\";\nimport getNodeName from \"./getNodeName.js\";\nimport getComputedStyle from \"./getComputedStyle.js\";\nimport { isHTMLElement, isShadowRoot } from \"./instanceOf.js\";\nimport isTableElement from \"./isTableElement.js\";\nimport getParentNode from \"./getParentNode.js\";\nimport getUAString from \"../utils/userAgent.js\";\n\nfunction getTrueOffsetParent(element) {\n  if (!isHTMLElement(element) || // https://github.com/popperjs/popper-core/issues/837\n  getComputedStyle(element).position === 'fixed') {\n    return null;\n  }\n\n  return element.offsetParent;\n} // `.offsetParent` reports `null` for fixed elements, while absolute elements\n// return the containing block\n\n\nfunction getContainingBlock(element) {\n  var isFirefox = /firefox/i.test(getUAString());\n  var isIE = /Trident/i.test(getUAString());\n\n  if (isIE && isHTMLElement(element)) {\n    // In IE 9, 10 and 11 fixed elements containing block is always established by the viewport\n    var elementCss = getComputedStyle(element);\n\n    if (elementCss.position === 'fixed') {\n      return null;\n    }\n  }\n\n  var currentNode = getParentNode(element);\n\n  if (isShadowRoot(currentNode)) {\n    currentNode = currentNode.host;\n  }\n\n  while (isHTMLElement(currentNode) && ['html', 'body'].indexOf(getNodeName(currentNode)) < 0) {\n    var css = getComputedStyle(currentNode); // This is non-exhaustive but covers the most common CSS properties that\n    // create a containing block.\n    // https://developer.mozilla.org/en-US/docs/Web/CSS/Containing_block#identifying_the_containing_block\n\n    if (css.transform !== 'none' || css.perspective !== 'none' || css.contain === 'paint' || ['transform', 'perspective'].indexOf(css.willChange) !== -1 || isFirefox && css.willChange === 'filter' || isFirefox && css.filter && css.filter !== 'none') {\n      return currentNode;\n    } else {\n      currentNode = currentNode.parentNode;\n    }\n  }\n\n  return null;\n} // Gets the closest ancestor positioned element. Handles some edge cases,\n// such as table ancestors and cross browser bugs.\n\n\nexport default function getOffsetParent(element) {\n  var window = getWindow(element);\n  var offsetParent = getTrueOffsetParent(element);\n\n  while (offsetParent && isTableElement(offsetParent) && getComputedStyle(offsetParent).position === 'static') {\n    offsetParent = getTrueOffsetParent(offsetParent);\n  }\n\n  if (offsetParent && (getNodeName(offsetParent) === 'html' || getNodeName(offsetParent) === 'body' && getComputedStyle(offsetParent).position === 'static')) {\n    return window;\n  }\n\n  return offsetParent || getContainingBlock(element) || window;\n}","export default function getMainAxisFromPlacement(placement) {\n  return ['top', 'bottom'].indexOf(placement) >= 0 ? 'x' : 'y';\n}","import { max as mathMax, min as mathMin } from \"./math.js\";\nexport function within(min, value, max) {\n  return mathMax(min, mathMin(value, max));\n}\nexport function withinMaxClamp(min, value, max) {\n  var v = within(min, value, max);\n  return v > max ? max : v;\n}","export default function getFreshSideObject() {\n  return {\n    top: 0,\n    right: 0,\n    bottom: 0,\n    left: 0\n  };\n}","import getFreshSideObject from \"./getFreshSideObject.js\";\nexport default function mergePaddingObject(paddingObject) {\n  return Object.assign({}, getFreshSideObject(), paddingObject);\n}","export default function expandToHashMap(value, keys) {\n  return keys.reduce(function (hashMap, key) {\n    hashMap[key] = value;\n    return hashMap;\n  }, {});\n}","import getBasePlacement from \"../utils/getBasePlacement.js\";\nimport getLayoutRect from \"../dom-utils/getLayoutRect.js\";\nimport contains from \"../dom-utils/contains.js\";\nimport getOffsetParent from \"../dom-utils/getOffsetParent.js\";\nimport getMainAxisFromPlacement from \"../utils/getMainAxisFromPlacement.js\";\nimport { within } from \"../utils/within.js\";\nimport mergePaddingObject from \"../utils/mergePaddingObject.js\";\nimport expandToHashMap from \"../utils/expandToHashMap.js\";\nimport { left, right, basePlacements, top, bottom } from \"../enums.js\"; // eslint-disable-next-line import/no-unused-modules\n\nvar toPaddingObject = function toPaddingObject(padding, state) {\n  padding = typeof padding === 'function' ? padding(Object.assign({}, state.rects, {\n    placement: state.placement\n  })) : padding;\n  return mergePaddingObject(typeof padding !== 'number' ? padding : expandToHashMap(padding, basePlacements));\n};\n\nfunction arrow(_ref) {\n  var _state$modifiersData$;\n\n  var state = _ref.state,\n      name = _ref.name,\n      options = _ref.options;\n  var arrowElement = state.elements.arrow;\n  var popperOffsets = state.modifiersData.popperOffsets;\n  var basePlacement = getBasePlacement(state.placement);\n  var axis = getMainAxisFromPlacement(basePlacement);\n  var isVertical = [left, right].indexOf(basePlacement) >= 0;\n  var len = isVertical ? 'height' : 'width';\n\n  if (!arrowElement || !popperOffsets) {\n    return;\n  }\n\n  var paddingObject = toPaddingObject(options.padding, state);\n  var arrowRect = getLayoutRect(arrowElement);\n  var minProp = axis === 'y' ? top : left;\n  var maxProp = axis === 'y' ? bottom : right;\n  var endDiff = state.rects.reference[len] + state.rects.reference[axis] - popperOffsets[axis] - state.rects.popper[len];\n  var startDiff = popperOffsets[axis] - state.rects.reference[axis];\n  var arrowOffsetParent = getOffsetParent(arrowElement);\n  var clientSize = arrowOffsetParent ? axis === 'y' ? arrowOffsetParent.clientHeight || 0 : arrowOffsetParent.clientWidth || 0 : 0;\n  var centerToReference = endDiff / 2 - startDiff / 2; // Make sure the arrow doesn't overflow the popper if the center point is\n  // outside of the popper bounds\n\n  var min = paddingObject[minProp];\n  var max = clientSize - arrowRect[len] - paddingObject[maxProp];\n  var center = clientSize / 2 - arrowRect[len] / 2 + centerToReference;\n  var offset = within(min, center, max); // Prevents breaking syntax highlighting...\n\n  var axisProp = axis;\n  state.modifiersData[name] = (_state$modifiersData$ = {}, _state$modifiersData$[axisProp] = offset, _state$modifiersData$.centerOffset = offset - center, _state$modifiersData$);\n}\n\nfunction effect(_ref2) {\n  var state = _ref2.state,\n      options = _ref2.options;\n  var _options$element = options.element,\n      arrowElement = _options$element === void 0 ? '[data-popper-arrow]' : _options$element;\n\n  if (arrowElement == null) {\n    return;\n  } // CSS selector\n\n\n  if (typeof arrowElement === 'string') {\n    arrowElement = state.elements.popper.querySelector(arrowElement);\n\n    if (!arrowElement) {\n      return;\n    }\n  }\n\n  if (!contains(state.elements.popper, arrowElement)) {\n    return;\n  }\n\n  state.elements.arrow = arrowElement;\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n  name: 'arrow',\n  enabled: true,\n  phase: 'main',\n  fn: arrow,\n  effect: effect,\n  requires: ['popperOffsets'],\n  requiresIfExists: ['preventOverflow']\n};","export default function getVariation(placement) {\n  return placement.split('-')[1];\n}","import { top, left, right, bottom, end } from \"../enums.js\";\nimport getOffsetParent from \"../dom-utils/getOffsetParent.js\";\nimport getWindow from \"../dom-utils/getWindow.js\";\nimport getDocumentElement from \"../dom-utils/getDocumentElement.js\";\nimport getComputedStyle from \"../dom-utils/getComputedStyle.js\";\nimport getBasePlacement from \"../utils/getBasePlacement.js\";\nimport getVariation from \"../utils/getVariation.js\";\nimport { round } from \"../utils/math.js\"; // eslint-disable-next-line import/no-unused-modules\n\nvar unsetSides = {\n  top: 'auto',\n  right: 'auto',\n  bottom: 'auto',\n  left: 'auto'\n}; // Round the offsets to the nearest suitable subpixel based on the DPR.\n// Zooming can change the DPR, but it seems to report a value that will\n// cleanly divide the values into the appropriate subpixels.\n\nfunction roundOffsetsByDPR(_ref, win) {\n  var x = _ref.x,\n      y = _ref.y;\n  var dpr = win.devicePixelRatio || 1;\n  return {\n    x: round(x * dpr) / dpr || 0,\n    y: round(y * dpr) / dpr || 0\n  };\n}\n\nexport function mapToStyles(_ref2) {\n  var _Object$assign2;\n\n  var popper = _ref2.popper,\n      popperRect = _ref2.popperRect,\n      placement = _ref2.placement,\n      variation = _ref2.variation,\n      offsets = _ref2.offsets,\n      position = _ref2.position,\n      gpuAcceleration = _ref2.gpuAcceleration,\n      adaptive = _ref2.adaptive,\n      roundOffsets = _ref2.roundOffsets,\n      isFixed = _ref2.isFixed;\n  var _offsets$x = offsets.x,\n      x = _offsets$x === void 0 ? 0 : _offsets$x,\n      _offsets$y = offsets.y,\n      y = _offsets$y === void 0 ? 0 : _offsets$y;\n\n  var _ref3 = typeof roundOffsets === 'function' ? roundOffsets({\n    x: x,\n    y: y\n  }) : {\n    x: x,\n    y: y\n  };\n\n  x = _ref3.x;\n  y = _ref3.y;\n  var hasX = offsets.hasOwnProperty('x');\n  var hasY = offsets.hasOwnProperty('y');\n  var sideX = left;\n  var sideY = top;\n  var win = window;\n\n  if (adaptive) {\n    var offsetParent = getOffsetParent(popper);\n    var heightProp = 'clientHeight';\n    var widthProp = 'clientWidth';\n\n    if (offsetParent === getWindow(popper)) {\n      offsetParent = getDocumentElement(popper);\n\n      if (getComputedStyle(offsetParent).position !== 'static' && position === 'absolute') {\n        heightProp = 'scrollHeight';\n        widthProp = 'scrollWidth';\n      }\n    } // $FlowFixMe[incompatible-cast]: force type refinement, we compare offsetParent with window above, but Flow doesn't detect it\n\n\n    offsetParent = offsetParent;\n\n    if (placement === top || (placement === left || placement === right) && variation === end) {\n      sideY = bottom;\n      var offsetY = isFixed && offsetParent === win && win.visualViewport ? win.visualViewport.height : // $FlowFixMe[prop-missing]\n      offsetParent[heightProp];\n      y -= offsetY - popperRect.height;\n      y *= gpuAcceleration ? 1 : -1;\n    }\n\n    if (placement === left || (placement === top || placement === bottom) && variation === end) {\n      sideX = right;\n      var offsetX = isFixed && offsetParent === win && win.visualViewport ? win.visualViewport.width : // $FlowFixMe[prop-missing]\n      offsetParent[widthProp];\n      x -= offsetX - popperRect.width;\n      x *= gpuAcceleration ? 1 : -1;\n    }\n  }\n\n  var commonStyles = Object.assign({\n    position: position\n  }, adaptive && unsetSides);\n\n  var _ref4 = roundOffsets === true ? roundOffsetsByDPR({\n    x: x,\n    y: y\n  }, getWindow(popper)) : {\n    x: x,\n    y: y\n  };\n\n  x = _ref4.x;\n  y = _ref4.y;\n\n  if (gpuAcceleration) {\n    var _Object$assign;\n\n    return Object.assign({}, commonStyles, (_Object$assign = {}, _Object$assign[sideY] = hasY ? '0' : '', _Object$assign[sideX] = hasX ? '0' : '', _Object$assign.transform = (win.devicePixelRatio || 1) <= 1 ? \"translate(\" + x + \"px, \" + y + \"px)\" : \"translate3d(\" + x + \"px, \" + y + \"px, 0)\", _Object$assign));\n  }\n\n  return Object.assign({}, commonStyles, (_Object$assign2 = {}, _Object$assign2[sideY] = hasY ? y + \"px\" : '', _Object$assign2[sideX] = hasX ? x + \"px\" : '', _Object$assign2.transform = '', _Object$assign2));\n}\n\nfunction computeStyles(_ref5) {\n  var state = _ref5.state,\n      options = _ref5.options;\n  var _options$gpuAccelerat = options.gpuAcceleration,\n      gpuAcceleration = _options$gpuAccelerat === void 0 ? true : _options$gpuAccelerat,\n      _options$adaptive = options.adaptive,\n      adaptive = _options$adaptive === void 0 ? true : _options$adaptive,\n      _options$roundOffsets = options.roundOffsets,\n      roundOffsets = _options$roundOffsets === void 0 ? true : _options$roundOffsets;\n  var commonStyles = {\n    placement: getBasePlacement(state.placement),\n    variation: getVariation(state.placement),\n    popper: state.elements.popper,\n    popperRect: state.rects.popper,\n    gpuAcceleration: gpuAcceleration,\n    isFixed: state.options.strategy === 'fixed'\n  };\n\n  if (state.modifiersData.popperOffsets != null) {\n    state.styles.popper = Object.assign({}, state.styles.popper, mapToStyles(Object.assign({}, commonStyles, {\n      offsets: state.modifiersData.popperOffsets,\n      position: state.options.strategy,\n      adaptive: adaptive,\n      roundOffsets: roundOffsets\n    })));\n  }\n\n  if (state.modifiersData.arrow != null) {\n    state.styles.arrow = Object.assign({}, state.styles.arrow, mapToStyles(Object.assign({}, commonStyles, {\n      offsets: state.modifiersData.arrow,\n      position: 'absolute',\n      adaptive: false,\n      roundOffsets: roundOffsets\n    })));\n  }\n\n  state.attributes.popper = Object.assign({}, state.attributes.popper, {\n    'data-popper-placement': state.placement\n  });\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n  name: 'computeStyles',\n  enabled: true,\n  phase: 'beforeWrite',\n  fn: computeStyles,\n  data: {}\n};","import getWindow from \"../dom-utils/getWindow.js\"; // eslint-disable-next-line import/no-unused-modules\n\nvar passive = {\n  passive: true\n};\n\nfunction effect(_ref) {\n  var state = _ref.state,\n      instance = _ref.instance,\n      options = _ref.options;\n  var _options$scroll = options.scroll,\n      scroll = _options$scroll === void 0 ? true : _options$scroll,\n      _options$resize = options.resize,\n      resize = _options$resize === void 0 ? true : _options$resize;\n  var window = getWindow(state.elements.popper);\n  var scrollParents = [].concat(state.scrollParents.reference, state.scrollParents.popper);\n\n  if (scroll) {\n    scrollParents.forEach(function (scrollParent) {\n      scrollParent.addEventListener('scroll', instance.update, passive);\n    });\n  }\n\n  if (resize) {\n    window.addEventListener('resize', instance.update, passive);\n  }\n\n  return function () {\n    if (scroll) {\n      scrollParents.forEach(function (scrollParent) {\n        scrollParent.removeEventListener('scroll', instance.update, passive);\n      });\n    }\n\n    if (resize) {\n      window.removeEventListener('resize', instance.update, passive);\n    }\n  };\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n  name: 'eventListeners',\n  enabled: true,\n  phase: 'write',\n  fn: function fn() {},\n  effect: effect,\n  data: {}\n};","var hash = {\n  left: 'right',\n  right: 'left',\n  bottom: 'top',\n  top: 'bottom'\n};\nexport default function getOppositePlacement(placement) {\n  return placement.replace(/left|right|bottom|top/g, function (matched) {\n    return hash[matched];\n  });\n}","var hash = {\n  start: 'end',\n  end: 'start'\n};\nexport default function getOppositeVariationPlacement(placement) {\n  return placement.replace(/start|end/g, function (matched) {\n    return hash[matched];\n  });\n}","import getWindow from \"./getWindow.js\";\nexport default function getWindowScroll(node) {\n  var win = getWindow(node);\n  var scrollLeft = win.pageXOffset;\n  var scrollTop = win.pageYOffset;\n  return {\n    scrollLeft: scrollLeft,\n    scrollTop: scrollTop\n  };\n}","import getBoundingClientRect from \"./getBoundingClientRect.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport getWindowScroll from \"./getWindowScroll.js\";\nexport default function getWindowScrollBarX(element) {\n  // If <html> has a CSS width greater than the viewport, then this will be\n  // incorrect for RTL.\n  // Popper 1 is broken in this case and never had a bug report so let's assume\n  // it's not an issue. I don't think anyone ever specifies width on <html>\n  // anyway.\n  // Browsers where the left scrollbar doesn't cause an issue report `0` for\n  // this (e.g. Edge 2019, IE11, Safari)\n  return getBoundingClientRect(getDocumentElement(element)).left + getWindowScroll(element).scrollLeft;\n}","import getWindow from \"./getWindow.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport getWindowScrollBarX from \"./getWindowScrollBarX.js\";\nimport isLayoutViewport from \"./isLayoutViewport.js\";\nexport default function getViewportRect(element, strategy) {\n  var win = getWindow(element);\n  var html = getDocumentElement(element);\n  var visualViewport = win.visualViewport;\n  var width = html.clientWidth;\n  var height = html.clientHeight;\n  var x = 0;\n  var y = 0;\n\n  if (visualViewport) {\n    width = visualViewport.width;\n    height = visualViewport.height;\n    var layoutViewport = isLayoutViewport();\n\n    if (layoutViewport || !layoutViewport && strategy === 'fixed') {\n      x = visualViewport.offsetLeft;\n      y = visualViewport.offsetTop;\n    }\n  }\n\n  return {\n    width: width,\n    height: height,\n    x: x + getWindowScrollBarX(element),\n    y: y\n  };\n}","import getDocumentElement from \"./getDocumentElement.js\";\nimport getComputedStyle from \"./getComputedStyle.js\";\nimport getWindowScrollBarX from \"./getWindowScrollBarX.js\";\nimport getWindowScroll from \"./getWindowScroll.js\";\nimport { max } from \"../utils/math.js\"; // Gets the entire size of the scrollable document area, even extending outside\n// of the `<html>` and `<body>` rect bounds if horizontally scrollable\n\nexport default function getDocumentRect(element) {\n  var _element$ownerDocumen;\n\n  var html = getDocumentElement(element);\n  var winScroll = getWindowScroll(element);\n  var body = (_element$ownerDocumen = element.ownerDocument) == null ? void 0 : _element$ownerDocumen.body;\n  var width = max(html.scrollWidth, html.clientWidth, body ? body.scrollWidth : 0, body ? body.clientWidth : 0);\n  var height = max(html.scrollHeight, html.clientHeight, body ? body.scrollHeight : 0, body ? body.clientHeight : 0);\n  var x = -winScroll.scrollLeft + getWindowScrollBarX(element);\n  var y = -winScroll.scrollTop;\n\n  if (getComputedStyle(body || html).direction === 'rtl') {\n    x += max(html.clientWidth, body ? body.clientWidth : 0) - width;\n  }\n\n  return {\n    width: width,\n    height: height,\n    x: x,\n    y: y\n  };\n}","import getComputedStyle from \"./getComputedStyle.js\";\nexport default function isScrollParent(element) {\n  // Firefox wants us to check `-x` and `-y` variations as well\n  var _getComputedStyle = getComputedStyle(element),\n      overflow = _getComputedStyle.overflow,\n      overflowX = _getComputedStyle.overflowX,\n      overflowY = _getComputedStyle.overflowY;\n\n  return /auto|scroll|overlay|hidden/.test(overflow + overflowY + overflowX);\n}","import getParentNode from \"./getParentNode.js\";\nimport isScrollParent from \"./isScrollParent.js\";\nimport getNodeName from \"./getNodeName.js\";\nimport { isHTMLElement } from \"./instanceOf.js\";\nexport default function getScrollParent(node) {\n  if (['html', 'body', '#document'].indexOf(getNodeName(node)) >= 0) {\n    // $FlowFixMe[incompatible-return]: assume body is always available\n    return node.ownerDocument.body;\n  }\n\n  if (isHTMLElement(node) && isScrollParent(node)) {\n    return node;\n  }\n\n  return getScrollParent(getParentNode(node));\n}","import getScrollParent from \"./getScrollParent.js\";\nimport getParentNode from \"./getParentNode.js\";\nimport getWindow from \"./getWindow.js\";\nimport isScrollParent from \"./isScrollParent.js\";\n/*\ngiven a DOM element, return the list of all scroll parents, up the list of ancesors\nuntil we get to the top window object. This list is what we attach scroll listeners\nto, because if any of these parent elements scroll, we'll need to re-calculate the\nreference element's position.\n*/\n\nexport default function listScrollParents(element, list) {\n  var _element$ownerDocumen;\n\n  if (list === void 0) {\n    list = [];\n  }\n\n  var scrollParent = getScrollParent(element);\n  var isBody = scrollParent === ((_element$ownerDocumen = element.ownerDocument) == null ? void 0 : _element$ownerDocumen.body);\n  var win = getWindow(scrollParent);\n  var target = isBody ? [win].concat(win.visualViewport || [], isScrollParent(scrollParent) ? scrollParent : []) : scrollParent;\n  var updatedList = list.concat(target);\n  return isBody ? updatedList : // $FlowFixMe[incompatible-call]: isBody tells us target will be an HTMLElement here\n  updatedList.concat(listScrollParents(getParentNode(target)));\n}","export default function rectToClientRect(rect) {\n  return Object.assign({}, rect, {\n    left: rect.x,\n    top: rect.y,\n    right: rect.x + rect.width,\n    bottom: rect.y + rect.height\n  });\n}","import { viewport } from \"../enums.js\";\nimport getViewportRect from \"./getViewportRect.js\";\nimport getDocumentRect from \"./getDocumentRect.js\";\nimport listScrollParents from \"./listScrollParents.js\";\nimport getOffsetParent from \"./getOffsetParent.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport getComputedStyle from \"./getComputedStyle.js\";\nimport { isElement, isHTMLElement } from \"./instanceOf.js\";\nimport getBoundingClientRect from \"./getBoundingClientRect.js\";\nimport getParentNode from \"./getParentNode.js\";\nimport contains from \"./contains.js\";\nimport getNodeName from \"./getNodeName.js\";\nimport rectToClientRect from \"../utils/rectToClientRect.js\";\nimport { max, min } from \"../utils/math.js\";\n\nfunction getInnerBoundingClientRect(element, strategy) {\n  var rect = getBoundingClientRect(element, false, strategy === 'fixed');\n  rect.top = rect.top + element.clientTop;\n  rect.left = rect.left + element.clientLeft;\n  rect.bottom = rect.top + element.clientHeight;\n  rect.right = rect.left + element.clientWidth;\n  rect.width = element.clientWidth;\n  rect.height = element.clientHeight;\n  rect.x = rect.left;\n  rect.y = rect.top;\n  return rect;\n}\n\nfunction getClientRectFromMixedType(element, clippingParent, strategy) {\n  return clippingParent === viewport ? rectToClientRect(getViewportRect(element, strategy)) : isElement(clippingParent) ? getInnerBoundingClientRect(clippingParent, strategy) : rectToClientRect(getDocumentRect(getDocumentElement(element)));\n} // A \"clipping parent\" is an overflowable container with the characteristic of\n// clipping (or hiding) overflowing elements with a position different from\n// `initial`\n\n\nfunction getClippingParents(element) {\n  var clippingParents = listScrollParents(getParentNode(element));\n  var canEscapeClipping = ['absolute', 'fixed'].indexOf(getComputedStyle(element).position) >= 0;\n  var clipperElement = canEscapeClipping && isHTMLElement(element) ? getOffsetParent(element) : element;\n\n  if (!isElement(clipperElement)) {\n    return [];\n  } // $FlowFixMe[incompatible-return]: https://github.com/facebook/flow/issues/1414\n\n\n  return clippingParents.filter(function (clippingParent) {\n    return isElement(clippingParent) && contains(clippingParent, clipperElement) && getNodeName(clippingParent) !== 'body';\n  });\n} // Gets the maximum area that the element is visible in due to any number of\n// clipping parents\n\n\nexport default function getClippingRect(element, boundary, rootBoundary, strategy) {\n  var mainClippingParents = boundary === 'clippingParents' ? getClippingParents(element) : [].concat(boundary);\n  var clippingParents = [].concat(mainClippingParents, [rootBoundary]);\n  var firstClippingParent = clippingParents[0];\n  var clippingRect = clippingParents.reduce(function (accRect, clippingParent) {\n    var rect = getClientRectFromMixedType(element, clippingParent, strategy);\n    accRect.top = max(rect.top, accRect.top);\n    accRect.right = min(rect.right, accRect.right);\n    accRect.bottom = min(rect.bottom, accRect.bottom);\n    accRect.left = max(rect.left, accRect.left);\n    return accRect;\n  }, getClientRectFromMixedType(element, firstClippingParent, strategy));\n  clippingRect.width = clippingRect.right - clippingRect.left;\n  clippingRect.height = clippingRect.bottom - clippingRect.top;\n  clippingRect.x = clippingRect.left;\n  clippingRect.y = clippingRect.top;\n  return clippingRect;\n}","import getBasePlacement from \"./getBasePlacement.js\";\nimport getVariation from \"./getVariation.js\";\nimport getMainAxisFromPlacement from \"./getMainAxisFromPlacement.js\";\nimport { top, right, bottom, left, start, end } from \"../enums.js\";\nexport default function computeOffsets(_ref) {\n  var reference = _ref.reference,\n      element = _ref.element,\n      placement = _ref.placement;\n  var basePlacement = placement ? getBasePlacement(placement) : null;\n  var variation = placement ? getVariation(placement) : null;\n  var commonX = reference.x + reference.width / 2 - element.width / 2;\n  var commonY = reference.y + reference.height / 2 - element.height / 2;\n  var offsets;\n\n  switch (basePlacement) {\n    case top:\n      offsets = {\n        x: commonX,\n        y: reference.y - element.height\n      };\n      break;\n\n    case bottom:\n      offsets = {\n        x: commonX,\n        y: reference.y + reference.height\n      };\n      break;\n\n    case right:\n      offsets = {\n        x: reference.x + reference.width,\n        y: commonY\n      };\n      break;\n\n    case left:\n      offsets = {\n        x: reference.x - element.width,\n        y: commonY\n      };\n      break;\n\n    default:\n      offsets = {\n        x: reference.x,\n        y: reference.y\n      };\n  }\n\n  var mainAxis = basePlacement ? getMainAxisFromPlacement(basePlacement) : null;\n\n  if (mainAxis != null) {\n    var len = mainAxis === 'y' ? 'height' : 'width';\n\n    switch (variation) {\n      case start:\n        offsets[mainAxis] = offsets[mainAxis] - (reference[len] / 2 - element[len] / 2);\n        break;\n\n      case end:\n        offsets[mainAxis] = offsets[mainAxis] + (reference[len] / 2 - element[len] / 2);\n        break;\n\n      default:\n    }\n  }\n\n  return offsets;\n}","import getClippingRect from \"../dom-utils/getClippingRect.js\";\nimport getDocumentElement from \"../dom-utils/getDocumentElement.js\";\nimport getBoundingClientRect from \"../dom-utils/getBoundingClientRect.js\";\nimport computeOffsets from \"./computeOffsets.js\";\nimport rectToClientRect from \"./rectToClientRect.js\";\nimport { clippingParents, reference, popper, bottom, top, right, basePlacements, viewport } from \"../enums.js\";\nimport { isElement } from \"../dom-utils/instanceOf.js\";\nimport mergePaddingObject from \"./mergePaddingObject.js\";\nimport expandToHashMap from \"./expandToHashMap.js\"; // eslint-disable-next-line import/no-unused-modules\n\nexport default function detectOverflow(state, options) {\n  if (options === void 0) {\n    options = {};\n  }\n\n  var _options = options,\n      _options$placement = _options.placement,\n      placement = _options$placement === void 0 ? state.placement : _options$placement,\n      _options$strategy = _options.strategy,\n      strategy = _options$strategy === void 0 ? state.strategy : _options$strategy,\n      _options$boundary = _options.boundary,\n      boundary = _options$boundary === void 0 ? clippingParents : _options$boundary,\n      _options$rootBoundary = _options.rootBoundary,\n      rootBoundary = _options$rootBoundary === void 0 ? viewport : _options$rootBoundary,\n      _options$elementConte = _options.elementContext,\n      elementContext = _options$elementConte === void 0 ? popper : _options$elementConte,\n      _options$altBoundary = _options.altBoundary,\n      altBoundary = _options$altBoundary === void 0 ? false : _options$altBoundary,\n      _options$padding = _options.padding,\n      padding = _options$padding === void 0 ? 0 : _options$padding;\n  var paddingObject = mergePaddingObject(typeof padding !== 'number' ? padding : expandToHashMap(padding, basePlacements));\n  var altContext = elementContext === popper ? reference : popper;\n  var popperRect = state.rects.popper;\n  var element = state.elements[altBoundary ? altContext : elementContext];\n  var clippingClientRect = getClippingRect(isElement(element) ? element : element.contextElement || getDocumentElement(state.elements.popper), boundary, rootBoundary, strategy);\n  var referenceClientRect = getBoundingClientRect(state.elements.reference);\n  var popperOffsets = computeOffsets({\n    reference: referenceClientRect,\n    element: popperRect,\n    strategy: 'absolute',\n    placement: placement\n  });\n  var popperClientRect = rectToClientRect(Object.assign({}, popperRect, popperOffsets));\n  var elementClientRect = elementContext === popper ? popperClientRect : referenceClientRect; // positive = overflowing the clipping rect\n  // 0 or negative = within the clipping rect\n\n  var overflowOffsets = {\n    top: clippingClientRect.top - elementClientRect.top + paddingObject.top,\n    bottom: elementClientRect.bottom - clippingClientRect.bottom + paddingObject.bottom,\n    left: clippingClientRect.left - elementClientRect.left + paddingObject.left,\n    right: elementClientRect.right - clippingClientRect.right + paddingObject.right\n  };\n  var offsetData = state.modifiersData.offset; // Offsets can be applied only to the popper element\n\n  if (elementContext === popper && offsetData) {\n    var offset = offsetData[placement];\n    Object.keys(overflowOffsets).forEach(function (key) {\n      var multiply = [right, bottom].indexOf(key) >= 0 ? 1 : -1;\n      var axis = [top, bottom].indexOf(key) >= 0 ? 'y' : 'x';\n      overflowOffsets[key] += offset[axis] * multiply;\n    });\n  }\n\n  return overflowOffsets;\n}","import getVariation from \"./getVariation.js\";\nimport { variationPlacements, basePlacements, placements as allPlacements } from \"../enums.js\";\nimport detectOverflow from \"./detectOverflow.js\";\nimport getBasePlacement from \"./getBasePlacement.js\";\nexport default function computeAutoPlacement(state, options) {\n  if (options === void 0) {\n    options = {};\n  }\n\n  var _options = options,\n      placement = _options.placement,\n      boundary = _options.boundary,\n      rootBoundary = _options.rootBoundary,\n      padding = _options.padding,\n      flipVariations = _options.flipVariations,\n      _options$allowedAutoP = _options.allowedAutoPlacements,\n      allowedAutoPlacements = _options$allowedAutoP === void 0 ? allPlacements : _options$allowedAutoP;\n  var variation = getVariation(placement);\n  var placements = variation ? flipVariations ? variationPlacements : variationPlacements.filter(function (placement) {\n    return getVariation(placement) === variation;\n  }) : basePlacements;\n  var allowedPlacements = placements.filter(function (placement) {\n    return allowedAutoPlacements.indexOf(placement) >= 0;\n  });\n\n  if (allowedPlacements.length === 0) {\n    allowedPlacements = placements;\n  } // $FlowFixMe[incompatible-type]: Flow seems to have problems with two array unions...\n\n\n  var overflows = allowedPlacements.reduce(function (acc, placement) {\n    acc[placement] = detectOverflow(state, {\n      placement: placement,\n      boundary: boundary,\n      rootBoundary: rootBoundary,\n      padding: padding\n    })[getBasePlacement(placement)];\n    return acc;\n  }, {});\n  return Object.keys(overflows).sort(function (a, b) {\n    return overflows[a] - overflows[b];\n  });\n}","import getOppositePlacement from \"../utils/getOppositePlacement.js\";\nimport getBasePlacement from \"../utils/getBasePlacement.js\";\nimport getOppositeVariationPlacement from \"../utils/getOppositeVariationPlacement.js\";\nimport detectOverflow from \"../utils/detectOverflow.js\";\nimport computeAutoPlacement from \"../utils/computeAutoPlacement.js\";\nimport { bottom, top, start, right, left, auto } from \"../enums.js\";\nimport getVariation from \"../utils/getVariation.js\"; // eslint-disable-next-line import/no-unused-modules\n\nfunction getExpandedFallbackPlacements(placement) {\n  if (getBasePlacement(placement) === auto) {\n    return [];\n  }\n\n  var oppositePlacement = getOppositePlacement(placement);\n  return [getOppositeVariationPlacement(placement), oppositePlacement, getOppositeVariationPlacement(oppositePlacement)];\n}\n\nfunction flip(_ref) {\n  var state = _ref.state,\n      options = _ref.options,\n      name = _ref.name;\n\n  if (state.modifiersData[name]._skip) {\n    return;\n  }\n\n  var _options$mainAxis = options.mainAxis,\n      checkMainAxis = _options$mainAxis === void 0 ? true : _options$mainAxis,\n      _options$altAxis = options.altAxis,\n      checkAltAxis = _options$altAxis === void 0 ? true : _options$altAxis,\n      specifiedFallbackPlacements = options.fallbackPlacements,\n      padding = options.padding,\n      boundary = options.boundary,\n      rootBoundary = options.rootBoundary,\n      altBoundary = options.altBoundary,\n      _options$flipVariatio = options.flipVariations,\n      flipVariations = _options$flipVariatio === void 0 ? true : _options$flipVariatio,\n      allowedAutoPlacements = options.allowedAutoPlacements;\n  var preferredPlacement = state.options.placement;\n  var basePlacement = getBasePlacement(preferredPlacement);\n  var isBasePlacement = basePlacement === preferredPlacement;\n  var fallbackPlacements = specifiedFallbackPlacements || (isBasePlacement || !flipVariations ? [getOppositePlacement(preferredPlacement)] : getExpandedFallbackPlacements(preferredPlacement));\n  var placements = [preferredPlacement].concat(fallbackPlacements).reduce(function (acc, placement) {\n    return acc.concat(getBasePlacement(placement) === auto ? computeAutoPlacement(state, {\n      placement: placement,\n      boundary: boundary,\n      rootBoundary: rootBoundary,\n      padding: padding,\n      flipVariations: flipVariations,\n      allowedAutoPlacements: allowedAutoPlacements\n    }) : placement);\n  }, []);\n  var referenceRect = state.rects.reference;\n  var popperRect = state.rects.popper;\n  var checksMap = new Map();\n  var makeFallbackChecks = true;\n  var firstFittingPlacement = placements[0];\n\n  for (var i = 0; i < placements.length; i++) {\n    var placement = placements[i];\n\n    var _basePlacement = getBasePlacement(placement);\n\n    var isStartVariation = getVariation(placement) === start;\n    var isVertical = [top, bottom].indexOf(_basePlacement) >= 0;\n    var len = isVertical ? 'width' : 'height';\n    var overflow = detectOverflow(state, {\n      placement: placement,\n      boundary: boundary,\n      rootBoundary: rootBoundary,\n      altBoundary: altBoundary,\n      padding: padding\n    });\n    var mainVariationSide = isVertical ? isStartVariation ? right : left : isStartVariation ? bottom : top;\n\n    if (referenceRect[len] > popperRect[len]) {\n      mainVariationSide = getOppositePlacement(mainVariationSide);\n    }\n\n    var altVariationSide = getOppositePlacement(mainVariationSide);\n    var checks = [];\n\n    if (checkMainAxis) {\n      checks.push(overflow[_basePlacement] <= 0);\n    }\n\n    if (checkAltAxis) {\n      checks.push(overflow[mainVariationSide] <= 0, overflow[altVariationSide] <= 0);\n    }\n\n    if (checks.every(function (check) {\n      return check;\n    })) {\n      firstFittingPlacement = placement;\n      makeFallbackChecks = false;\n      break;\n    }\n\n    checksMap.set(placement, checks);\n  }\n\n  if (makeFallbackChecks) {\n    // `2` may be desired in some cases – research later\n    var numberOfChecks = flipVariations ? 3 : 1;\n\n    var _loop = function _loop(_i) {\n      var fittingPlacement = placements.find(function (placement) {\n        var checks = checksMap.get(placement);\n\n        if (checks) {\n          return checks.slice(0, _i).every(function (check) {\n            return check;\n          });\n        }\n      });\n\n      if (fittingPlacement) {\n        firstFittingPlacement = fittingPlacement;\n        return \"break\";\n      }\n    };\n\n    for (var _i = numberOfChecks; _i > 0; _i--) {\n      var _ret = _loop(_i);\n\n      if (_ret === \"break\") break;\n    }\n  }\n\n  if (state.placement !== firstFittingPlacement) {\n    state.modifiersData[name]._skip = true;\n    state.placement = firstFittingPlacement;\n    state.reset = true;\n  }\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n  name: 'flip',\n  enabled: true,\n  phase: 'main',\n  fn: flip,\n  requiresIfExists: ['offset'],\n  data: {\n    _skip: false\n  }\n};","import { top, bottom, left, right } from \"../enums.js\";\nimport detectOverflow from \"../utils/detectOverflow.js\";\n\nfunction getSideOffsets(overflow, rect, preventedOffsets) {\n  if (preventedOffsets === void 0) {\n    preventedOffsets = {\n      x: 0,\n      y: 0\n    };\n  }\n\n  return {\n    top: overflow.top - rect.height - preventedOffsets.y,\n    right: overflow.right - rect.width + preventedOffsets.x,\n    bottom: overflow.bottom - rect.height + preventedOffsets.y,\n    left: overflow.left - rect.width - preventedOffsets.x\n  };\n}\n\nfunction isAnySideFullyClipped(overflow) {\n  return [top, right, bottom, left].some(function (side) {\n    return overflow[side] >= 0;\n  });\n}\n\nfunction hide(_ref) {\n  var state = _ref.state,\n      name = _ref.name;\n  var referenceRect = state.rects.reference;\n  var popperRect = state.rects.popper;\n  var preventedOffsets = state.modifiersData.preventOverflow;\n  var referenceOverflow = detectOverflow(state, {\n    elementContext: 'reference'\n  });\n  var popperAltOverflow = detectOverflow(state, {\n    altBoundary: true\n  });\n  var referenceClippingOffsets = getSideOffsets(referenceOverflow, referenceRect);\n  var popperEscapeOffsets = getSideOffsets(popperAltOverflow, popperRect, preventedOffsets);\n  var isReferenceHidden = isAnySideFullyClipped(referenceClippingOffsets);\n  var hasPopperEscaped = isAnySideFullyClipped(popperEscapeOffsets);\n  state.modifiersData[name] = {\n    referenceClippingOffsets: referenceClippingOffsets,\n    popperEscapeOffsets: popperEscapeOffsets,\n    isReferenceHidden: isReferenceHidden,\n    hasPopperEscaped: hasPopperEscaped\n  };\n  state.attributes.popper = Object.assign({}, state.attributes.popper, {\n    'data-popper-reference-hidden': isReferenceHidden,\n    'data-popper-escaped': hasPopperEscaped\n  });\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n  name: 'hide',\n  enabled: true,\n  phase: 'main',\n  requiresIfExists: ['preventOverflow'],\n  fn: hide\n};","import getBasePlacement from \"../utils/getBasePlacement.js\";\nimport { top, left, right, placements } from \"../enums.js\"; // eslint-disable-next-line import/no-unused-modules\n\nexport function distanceAndSkiddingToXY(placement, rects, offset) {\n  var basePlacement = getBasePlacement(placement);\n  var invertDistance = [left, top].indexOf(basePlacement) >= 0 ? -1 : 1;\n\n  var _ref = typeof offset === 'function' ? offset(Object.assign({}, rects, {\n    placement: placement\n  })) : offset,\n      skidding = _ref[0],\n      distance = _ref[1];\n\n  skidding = skidding || 0;\n  distance = (distance || 0) * invertDistance;\n  return [left, right].indexOf(basePlacement) >= 0 ? {\n    x: distance,\n    y: skidding\n  } : {\n    x: skidding,\n    y: distance\n  };\n}\n\nfunction offset(_ref2) {\n  var state = _ref2.state,\n      options = _ref2.options,\n      name = _ref2.name;\n  var _options$offset = options.offset,\n      offset = _options$offset === void 0 ? [0, 0] : _options$offset;\n  var data = placements.reduce(function (acc, placement) {\n    acc[placement] = distanceAndSkiddingToXY(placement, state.rects, offset);\n    return acc;\n  }, {});\n  var _data$state$placement = data[state.placement],\n      x = _data$state$placement.x,\n      y = _data$state$placement.y;\n\n  if (state.modifiersData.popperOffsets != null) {\n    state.modifiersData.popperOffsets.x += x;\n    state.modifiersData.popperOffsets.y += y;\n  }\n\n  state.modifiersData[name] = data;\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n  name: 'offset',\n  enabled: true,\n  phase: 'main',\n  requires: ['popperOffsets'],\n  fn: offset\n};","import computeOffsets from \"../utils/computeOffsets.js\";\n\nfunction popperOffsets(_ref) {\n  var state = _ref.state,\n      name = _ref.name;\n  // Offsets are the actual position the popper needs to have to be\n  // properly positioned near its reference element\n  // This is the most basic placement, and will be adjusted by\n  // the modifiers in the next step\n  state.modifiersData[name] = computeOffsets({\n    reference: state.rects.reference,\n    element: state.rects.popper,\n    strategy: 'absolute',\n    placement: state.placement\n  });\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n  name: 'popperOffsets',\n  enabled: true,\n  phase: 'read',\n  fn: popperOffsets,\n  data: {}\n};","export default function getAltAxis(axis) {\n  return axis === 'x' ? 'y' : 'x';\n}","import { top, left, right, bottom, start } from \"../enums.js\";\nimport getBasePlacement from \"../utils/getBasePlacement.js\";\nimport getMainAxisFromPlacement from \"../utils/getMainAxisFromPlacement.js\";\nimport getAltAxis from \"../utils/getAltAxis.js\";\nimport { within, withinMaxClamp } from \"../utils/within.js\";\nimport getLayoutRect from \"../dom-utils/getLayoutRect.js\";\nimport getOffsetParent from \"../dom-utils/getOffsetParent.js\";\nimport detectOverflow from \"../utils/detectOverflow.js\";\nimport getVariation from \"../utils/getVariation.js\";\nimport getFreshSideObject from \"../utils/getFreshSideObject.js\";\nimport { min as mathMin, max as mathMax } from \"../utils/math.js\";\n\nfunction preventOverflow(_ref) {\n  var state = _ref.state,\n      options = _ref.options,\n      name = _ref.name;\n  var _options$mainAxis = options.mainAxis,\n      checkMainAxis = _options$mainAxis === void 0 ? true : _options$mainAxis,\n      _options$altAxis = options.altAxis,\n      checkAltAxis = _options$altAxis === void 0 ? false : _options$altAxis,\n      boundary = options.boundary,\n      rootBoundary = options.rootBoundary,\n      altBoundary = options.altBoundary,\n      padding = options.padding,\n      _options$tether = options.tether,\n      tether = _options$tether === void 0 ? true : _options$tether,\n      _options$tetherOffset = options.tetherOffset,\n      tetherOffset = _options$tetherOffset === void 0 ? 0 : _options$tetherOffset;\n  var overflow = detectOverflow(state, {\n    boundary: boundary,\n    rootBoundary: rootBoundary,\n    padding: padding,\n    altBoundary: altBoundary\n  });\n  var basePlacement = getBasePlacement(state.placement);\n  var variation = getVariation(state.placement);\n  var isBasePlacement = !variation;\n  var mainAxis = getMainAxisFromPlacement(basePlacement);\n  var altAxis = getAltAxis(mainAxis);\n  var popperOffsets = state.modifiersData.popperOffsets;\n  var referenceRect = state.rects.reference;\n  var popperRect = state.rects.popper;\n  var tetherOffsetValue = typeof tetherOffset === 'function' ? tetherOffset(Object.assign({}, state.rects, {\n    placement: state.placement\n  })) : tetherOffset;\n  var normalizedTetherOffsetValue = typeof tetherOffsetValue === 'number' ? {\n    mainAxis: tetherOffsetValue,\n    altAxis: tetherOffsetValue\n  } : Object.assign({\n    mainAxis: 0,\n    altAxis: 0\n  }, tetherOffsetValue);\n  var offsetModifierState = state.modifiersData.offset ? state.modifiersData.offset[state.placement] : null;\n  var data = {\n    x: 0,\n    y: 0\n  };\n\n  if (!popperOffsets) {\n    return;\n  }\n\n  if (checkMainAxis) {\n    var _offsetModifierState$;\n\n    var mainSide = mainAxis === 'y' ? top : left;\n    var altSide = mainAxis === 'y' ? bottom : right;\n    var len = mainAxis === 'y' ? 'height' : 'width';\n    var offset = popperOffsets[mainAxis];\n    var min = offset + overflow[mainSide];\n    var max = offset - overflow[altSide];\n    var additive = tether ? -popperRect[len] / 2 : 0;\n    var minLen = variation === start ? referenceRect[len] : popperRect[len];\n    var maxLen = variation === start ? -popperRect[len] : -referenceRect[len]; // We need to include the arrow in the calculation so the arrow doesn't go\n    // outside the reference bounds\n\n    var arrowElement = state.elements.arrow;\n    var arrowRect = tether && arrowElement ? getLayoutRect(arrowElement) : {\n      width: 0,\n      height: 0\n    };\n    var arrowPaddingObject = state.modifiersData['arrow#persistent'] ? state.modifiersData['arrow#persistent'].padding : getFreshSideObject();\n    var arrowPaddingMin = arrowPaddingObject[mainSide];\n    var arrowPaddingMax = arrowPaddingObject[altSide]; // If the reference length is smaller than the arrow length, we don't want\n    // to include its full size in the calculation. If the reference is small\n    // and near the edge of a boundary, the popper can overflow even if the\n    // reference is not overflowing as well (e.g. virtual elements with no\n    // width or height)\n\n    var arrowLen = within(0, referenceRect[len], arrowRect[len]);\n    var minOffset = isBasePlacement ? referenceRect[len] / 2 - additive - arrowLen - arrowPaddingMin - normalizedTetherOffsetValue.mainAxis : minLen - arrowLen - arrowPaddingMin - normalizedTetherOffsetValue.mainAxis;\n    var maxOffset = isBasePlacement ? -referenceRect[len] / 2 + additive + arrowLen + arrowPaddingMax + normalizedTetherOffsetValue.mainAxis : maxLen + arrowLen + arrowPaddingMax + normalizedTetherOffsetValue.mainAxis;\n    var arrowOffsetParent = state.elements.arrow && getOffsetParent(state.elements.arrow);\n    var clientOffset = arrowOffsetParent ? mainAxis === 'y' ? arrowOffsetParent.clientTop || 0 : arrowOffsetParent.clientLeft || 0 : 0;\n    var offsetModifierValue = (_offsetModifierState$ = offsetModifierState == null ? void 0 : offsetModifierState[mainAxis]) != null ? _offsetModifierState$ : 0;\n    var tetherMin = offset + minOffset - offsetModifierValue - clientOffset;\n    var tetherMax = offset + maxOffset - offsetModifierValue;\n    var preventedOffset = within(tether ? mathMin(min, tetherMin) : min, offset, tether ? mathMax(max, tetherMax) : max);\n    popperOffsets[mainAxis] = preventedOffset;\n    data[mainAxis] = preventedOffset - offset;\n  }\n\n  if (checkAltAxis) {\n    var _offsetModifierState$2;\n\n    var _mainSide = mainAxis === 'x' ? top : left;\n\n    var _altSide = mainAxis === 'x' ? bottom : right;\n\n    var _offset = popperOffsets[altAxis];\n\n    var _len = altAxis === 'y' ? 'height' : 'width';\n\n    var _min = _offset + overflow[_mainSide];\n\n    var _max = _offset - overflow[_altSide];\n\n    var isOriginSide = [top, left].indexOf(basePlacement) !== -1;\n\n    var _offsetModifierValue = (_offsetModifierState$2 = offsetModifierState == null ? void 0 : offsetModifierState[altAxis]) != null ? _offsetModifierState$2 : 0;\n\n    var _tetherMin = isOriginSide ? _min : _offset - referenceRect[_len] - popperRect[_len] - _offsetModifierValue + normalizedTetherOffsetValue.altAxis;\n\n    var _tetherMax = isOriginSide ? _offset + referenceRect[_len] + popperRect[_len] - _offsetModifierValue - normalizedTetherOffsetValue.altAxis : _max;\n\n    var _preventedOffset = tether && isOriginSide ? withinMaxClamp(_tetherMin, _offset, _tetherMax) : within(tether ? _tetherMin : _min, _offset, tether ? _tetherMax : _max);\n\n    popperOffsets[altAxis] = _preventedOffset;\n    data[altAxis] = _preventedOffset - _offset;\n  }\n\n  state.modifiersData[name] = data;\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n  name: 'preventOverflow',\n  enabled: true,\n  phase: 'main',\n  fn: preventOverflow,\n  requiresIfExists: ['offset']\n};","export default function getHTMLElementScroll(element) {\n  return {\n    scrollLeft: element.scrollLeft,\n    scrollTop: element.scrollTop\n  };\n}","import getWindowScroll from \"./getWindowScroll.js\";\nimport getWindow from \"./getWindow.js\";\nimport { isHTMLElement } from \"./instanceOf.js\";\nimport getHTMLElementScroll from \"./getHTMLElementScroll.js\";\nexport default function getNodeScroll(node) {\n  if (node === getWindow(node) || !isHTMLElement(node)) {\n    return getWindowScroll(node);\n  } else {\n    return getHTMLElementScroll(node);\n  }\n}","import getBoundingClientRect from \"./getBoundingClientRect.js\";\nimport getNodeScroll from \"./getNodeScroll.js\";\nimport getNodeName from \"./getNodeName.js\";\nimport { isHTMLElement } from \"./instanceOf.js\";\nimport getWindowScrollBarX from \"./getWindowScrollBarX.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport isScrollParent from \"./isScrollParent.js\";\nimport { round } from \"../utils/math.js\";\n\nfunction isElementScaled(element) {\n  var rect = element.getBoundingClientRect();\n  var scaleX = round(rect.width) / element.offsetWidth || 1;\n  var scaleY = round(rect.height) / element.offsetHeight || 1;\n  return scaleX !== 1 || scaleY !== 1;\n} // Returns the composite rect of an element relative to its offsetParent.\n// Composite means it takes into account transforms as well as layout.\n\n\nexport default function getCompositeRect(elementOrVirtualElement, offsetParent, isFixed) {\n  if (isFixed === void 0) {\n    isFixed = false;\n  }\n\n  var isOffsetParentAnElement = isHTMLElement(offsetParent);\n  var offsetParentIsScaled = isHTMLElement(offsetParent) && isElementScaled(offsetParent);\n  var documentElement = getDocumentElement(offsetParent);\n  var rect = getBoundingClientRect(elementOrVirtualElement, offsetParentIsScaled, isFixed);\n  var scroll = {\n    scrollLeft: 0,\n    scrollTop: 0\n  };\n  var offsets = {\n    x: 0,\n    y: 0\n  };\n\n  if (isOffsetParentAnElement || !isOffsetParentAnElement && !isFixed) {\n    if (getNodeName(offsetParent) !== 'body' || // https://github.com/popperjs/popper-core/issues/1078\n    isScrollParent(documentElement)) {\n      scroll = getNodeScroll(offsetParent);\n    }\n\n    if (isHTMLElement(offsetParent)) {\n      offsets = getBoundingClientRect(offsetParent, true);\n      offsets.x += offsetParent.clientLeft;\n      offsets.y += offsetParent.clientTop;\n    } else if (documentElement) {\n      offsets.x = getWindowScrollBarX(documentElement);\n    }\n  }\n\n  return {\n    x: rect.left + scroll.scrollLeft - offsets.x,\n    y: rect.top + scroll.scrollTop - offsets.y,\n    width: rect.width,\n    height: rect.height\n  };\n}","import { modifierPhases } from \"../enums.js\"; // source: https://stackoverflow.com/questions/49875255\n\nfunction order(modifiers) {\n  var map = new Map();\n  var visited = new Set();\n  var result = [];\n  modifiers.forEach(function (modifier) {\n    map.set(modifier.name, modifier);\n  }); // On visiting object, check for its dependencies and visit them recursively\n\n  function sort(modifier) {\n    visited.add(modifier.name);\n    var requires = [].concat(modifier.requires || [], modifier.requiresIfExists || []);\n    requires.forEach(function (dep) {\n      if (!visited.has(dep)) {\n        var depModifier = map.get(dep);\n\n        if (depModifier) {\n          sort(depModifier);\n        }\n      }\n    });\n    result.push(modifier);\n  }\n\n  modifiers.forEach(function (modifier) {\n    if (!visited.has(modifier.name)) {\n      // check for visited object\n      sort(modifier);\n    }\n  });\n  return result;\n}\n\nexport default function orderModifiers(modifiers) {\n  // order based on dependencies\n  var orderedModifiers = order(modifiers); // order based on phase\n\n  return modifierPhases.reduce(function (acc, phase) {\n    return acc.concat(orderedModifiers.filter(function (modifier) {\n      return modifier.phase === phase;\n    }));\n  }, []);\n}","export default function debounce(fn) {\n  var pending;\n  return function () {\n    if (!pending) {\n      pending = new Promise(function (resolve) {\n        Promise.resolve().then(function () {\n          pending = undefined;\n          resolve(fn());\n        });\n      });\n    }\n\n    return pending;\n  };\n}","export default function mergeByName(modifiers) {\n  var merged = modifiers.reduce(function (merged, current) {\n    var existing = merged[current.name];\n    merged[current.name] = existing ? Object.assign({}, existing, current, {\n      options: Object.assign({}, existing.options, current.options),\n      data: Object.assign({}, existing.data, current.data)\n    }) : current;\n    return merged;\n  }, {}); // IE11 does not support Object.values\n\n  return Object.keys(merged).map(function (key) {\n    return merged[key];\n  });\n}","import getCompositeRect from \"./dom-utils/getCompositeRect.js\";\nimport getLayoutRect from \"./dom-utils/getLayoutRect.js\";\nimport listScrollParents from \"./dom-utils/listScrollParents.js\";\nimport getOffsetParent from \"./dom-utils/getOffsetParent.js\";\nimport orderModifiers from \"./utils/orderModifiers.js\";\nimport debounce from \"./utils/debounce.js\";\nimport mergeByName from \"./utils/mergeByName.js\";\nimport detectOverflow from \"./utils/detectOverflow.js\";\nimport { isElement } from \"./dom-utils/instanceOf.js\";\nvar DEFAULT_OPTIONS = {\n  placement: 'bottom',\n  modifiers: [],\n  strategy: 'absolute'\n};\n\nfunction areValidElements() {\n  for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n    args[_key] = arguments[_key];\n  }\n\n  return !args.some(function (element) {\n    return !(element && typeof element.getBoundingClientRect === 'function');\n  });\n}\n\nexport function popperGenerator(generatorOptions) {\n  if (generatorOptions === void 0) {\n    generatorOptions = {};\n  }\n\n  var _generatorOptions = generatorOptions,\n      _generatorOptions$def = _generatorOptions.defaultModifiers,\n      defaultModifiers = _generatorOptions$def === void 0 ? [] : _generatorOptions$def,\n      _generatorOptions$def2 = _generatorOptions.defaultOptions,\n      defaultOptions = _generatorOptions$def2 === void 0 ? DEFAULT_OPTIONS : _generatorOptions$def2;\n  return function createPopper(reference, popper, options) {\n    if (options === void 0) {\n      options = defaultOptions;\n    }\n\n    var state = {\n      placement: 'bottom',\n      orderedModifiers: [],\n      options: Object.assign({}, DEFAULT_OPTIONS, defaultOptions),\n      modifiersData: {},\n      elements: {\n        reference: reference,\n        popper: popper\n      },\n      attributes: {},\n      styles: {}\n    };\n    var effectCleanupFns = [];\n    var isDestroyed = false;\n    var instance = {\n      state: state,\n      setOptions: function setOptions(setOptionsAction) {\n        var options = typeof setOptionsAction === 'function' ? setOptionsAction(state.options) : setOptionsAction;\n        cleanupModifierEffects();\n        state.options = Object.assign({}, defaultOptions, state.options, options);\n        state.scrollParents = {\n          reference: isElement(reference) ? listScrollParents(reference) : reference.contextElement ? listScrollParents(reference.contextElement) : [],\n          popper: listScrollParents(popper)\n        }; // Orders the modifiers based on their dependencies and `phase`\n        // properties\n\n        var orderedModifiers = orderModifiers(mergeByName([].concat(defaultModifiers, state.options.modifiers))); // Strip out disabled modifiers\n\n        state.orderedModifiers = orderedModifiers.filter(function (m) {\n          return m.enabled;\n        });\n        runModifierEffects();\n        return instance.update();\n      },\n      // Sync update – it will always be executed, even if not necessary. This\n      // is useful for low frequency updates where sync behavior simplifies the\n      // logic.\n      // For high frequency updates (e.g. `resize` and `scroll` events), always\n      // prefer the async Popper#update method\n      forceUpdate: function forceUpdate() {\n        if (isDestroyed) {\n          return;\n        }\n\n        var _state$elements = state.elements,\n            reference = _state$elements.reference,\n            popper = _state$elements.popper; // Don't proceed if `reference` or `popper` are not valid elements\n        // anymore\n\n        if (!areValidElements(reference, popper)) {\n          return;\n        } // Store the reference and popper rects to be read by modifiers\n\n\n        state.rects = {\n          reference: getCompositeRect(reference, getOffsetParent(popper), state.options.strategy === 'fixed'),\n          popper: getLayoutRect(popper)\n        }; // Modifiers have the ability to reset the current update cycle. The\n        // most common use case for this is the `flip` modifier changing the\n        // placement, which then needs to re-run all the modifiers, because the\n        // logic was previously ran for the previous placement and is therefore\n        // stale/incorrect\n\n        state.reset = false;\n        state.placement = state.options.placement; // On each update cycle, the `modifiersData` property for each modifier\n        // is filled with the initial data specified by the modifier. This means\n        // it doesn't persist and is fresh on each update.\n        // To ensure persistent data, use `${name}#persistent`\n\n        state.orderedModifiers.forEach(function (modifier) {\n          return state.modifiersData[modifier.name] = Object.assign({}, modifier.data);\n        });\n\n        for (var index = 0; index < state.orderedModifiers.length; index++) {\n          if (state.reset === true) {\n            state.reset = false;\n            index = -1;\n            continue;\n          }\n\n          var _state$orderedModifie = state.orderedModifiers[index],\n              fn = _state$orderedModifie.fn,\n              _state$orderedModifie2 = _state$orderedModifie.options,\n              _options = _state$orderedModifie2 === void 0 ? {} : _state$orderedModifie2,\n              name = _state$orderedModifie.name;\n\n          if (typeof fn === 'function') {\n            state = fn({\n              state: state,\n              options: _options,\n              name: name,\n              instance: instance\n            }) || state;\n          }\n        }\n      },\n      // Async and optimistically optimized update – it will not be executed if\n      // not necessary (debounced to run at most once-per-tick)\n      update: debounce(function () {\n        return new Promise(function (resolve) {\n          instance.forceUpdate();\n          resolve(state);\n        });\n      }),\n      destroy: function destroy() {\n        cleanupModifierEffects();\n        isDestroyed = true;\n      }\n    };\n\n    if (!areValidElements(reference, popper)) {\n      return instance;\n    }\n\n    instance.setOptions(options).then(function (state) {\n      if (!isDestroyed && options.onFirstUpdate) {\n        options.onFirstUpdate(state);\n      }\n    }); // Modifiers have the ability to execute arbitrary code before the first\n    // update cycle runs. They will be executed in the same order as the update\n    // cycle. This is useful when a modifier adds some persistent data that\n    // other modifiers need to use, but the modifier is run after the dependent\n    // one.\n\n    function runModifierEffects() {\n      state.orderedModifiers.forEach(function (_ref) {\n        var name = _ref.name,\n            _ref$options = _ref.options,\n            options = _ref$options === void 0 ? {} : _ref$options,\n            effect = _ref.effect;\n\n        if (typeof effect === 'function') {\n          var cleanupFn = effect({\n            state: state,\n            name: name,\n            instance: instance,\n            options: options\n          });\n\n          var noopFn = function noopFn() {};\n\n          effectCleanupFns.push(cleanupFn || noopFn);\n        }\n      });\n    }\n\n    function cleanupModifierEffects() {\n      effectCleanupFns.forEach(function (fn) {\n        return fn();\n      });\n      effectCleanupFns = [];\n    }\n\n    return instance;\n  };\n}\nexport var createPopper = /*#__PURE__*/popperGenerator(); // eslint-disable-next-line import/no-unused-modules\n\nexport { detectOverflow };","import { popperGenerator, detectOverflow } from \"./createPopper.js\";\nimport eventListeners from \"./modifiers/eventListeners.js\";\nimport popperOffsets from \"./modifiers/popperOffsets.js\";\nimport computeStyles from \"./modifiers/computeStyles.js\";\nimport applyStyles from \"./modifiers/applyStyles.js\";\nimport offset from \"./modifiers/offset.js\";\nimport flip from \"./modifiers/flip.js\";\nimport preventOverflow from \"./modifiers/preventOverflow.js\";\nimport arrow from \"./modifiers/arrow.js\";\nimport hide from \"./modifiers/hide.js\";\nvar defaultModifiers = [eventListeners, popperOffsets, computeStyles, applyStyles, offset, flip, preventOverflow, arrow, hide];\nvar createPopper = /*#__PURE__*/popperGenerator({\n  defaultModifiers: defaultModifiers\n}); // eslint-disable-next-line import/no-unused-modules\n\nexport { createPopper, popperGenerator, defaultModifiers, detectOverflow }; // eslint-disable-next-line import/no-unused-modules\n\nexport { createPopper as createPopperLite } from \"./popper-lite.js\"; // eslint-disable-next-line import/no-unused-modules\n\nexport * from \"./modifiers/index.js\";","'use client';\n\nimport useForkRef from \"../useForkRef/index.js\";\nimport appendOwnerState from \"../appendOwnerState/index.js\";\nimport mergeSlotProps from \"../mergeSlotProps/index.js\";\nimport resolveComponentProps from \"../resolveComponentProps/index.js\";\n/**\n * @ignore - do not document.\n * Builds the props to be passed into the slot of an unstyled component.\n * It merges the internal props of the component with the ones supplied by the user, allowing to customize the behavior.\n * If the slot component is not a host component, it also merges in the `ownerState`.\n *\n * @param parameters.getSlotProps - A function that returns the props to be passed to the slot component.\n */\nfunction useSlotProps(parameters) {\n  const {\n    elementType,\n    externalSlotProps,\n    ownerState,\n    skipResolvingSlotProps = false,\n    ...other\n  } = parameters;\n  const resolvedComponentsProps = skipResolvingSlotProps ? {} : resolveComponentProps(externalSlotProps, ownerState);\n  const {\n    props: mergedProps,\n    internalRef\n  } = mergeSlotProps({\n    ...other,\n    externalSlotProps: resolvedComponentsProps\n  });\n  const ref = useForkRef(internalRef, resolvedComponentsProps?.ref, parameters.additionalProps?.ref);\n  const props = appendOwnerState(elementType, {\n    ...mergedProps,\n    ref\n  }, ownerState);\n  return props;\n}\nexport default useSlotProps;","export default function isLayoutSupported() {\n  return !(/jsdom|HappyDOM/.test(window.navigator.userAgent) ||\n  // TODO(v9): Remove the test environment check\n  // eslint-disable-next-line mui/consistent-production-guard\n  process.env.NODE_ENV === 'test');\n}","import * as React from 'react';\n\n/**\n * Returns the ref of a React element handling differences between React 19 and older versions.\n * It will throw runtime error if the element is not a valid React element.\n *\n * @param element React.ReactElement\n * @returns React.Ref<any> | null\n */\nexport default function getReactElementRef(element) {\n  // 'ref' is passed as prop in React 19, whereas 'ref' is directly attached to children in older versions\n  if (parseInt(React.version, 10) >= 19) {\n    return element?.props?.ref || null;\n  }\n  // @ts-expect-error element.ref is not included in the ReactElement type\n  // https://github.com/DefinitelyTyped/DefinitelyTyped/discussions/70189\n  return element?.ref || null;\n}","'use client';\n\nimport * as React from 'react';\nimport * as ReactDOM from 'react-dom';\nimport PropTypes from 'prop-types';\nimport useEnhancedEffect from '@mui/utils/useEnhancedEffect';\nimport useForkRef from '@mui/utils/useForkRef';\nimport setRef from '@mui/utils/setRef';\nimport getReactElementRef from '@mui/utils/getReactElementRef';\nimport exactProp from '@mui/utils/exactProp';\nimport HTMLElementType from '@mui/utils/HTMLElementType';\nfunction getContainer(container) {\n  return typeof container === 'function' ? container() : container;\n}\n\n/**\n * Portals provide a first-class way to render children into a DOM node\n * that exists outside the DOM hierarchy of the parent component.\n *\n * Demos:\n *\n * - [Portal](https://v7.mui.com/material-ui/react-portal/)\n *\n * API:\n *\n * - [Portal API](https://v7.mui.com/material-ui/api/portal/)\n */\nconst Portal = /*#__PURE__*/React.forwardRef(function Portal(props, forwardedRef) {\n  const {\n    children,\n    container,\n    disablePortal = false\n  } = props;\n  const [mountNode, setMountNode] = React.useState(null);\n  const handleRef = useForkRef(/*#__PURE__*/React.isValidElement(children) ? getReactElementRef(children) : null, forwardedRef);\n  useEnhancedEffect(() => {\n    if (!disablePortal) {\n      setMountNode(getContainer(container) || document.body);\n    }\n  }, [container, disablePortal]);\n  useEnhancedEffect(() => {\n    if (mountNode && !disablePortal) {\n      setRef(forwardedRef, mountNode);\n      return () => {\n        setRef(forwardedRef, null);\n      };\n    }\n    return undefined;\n  }, [forwardedRef, mountNode, disablePortal]);\n  if (disablePortal) {\n    if (/*#__PURE__*/React.isValidElement(children)) {\n      const newProps = {\n        ref: handleRef\n      };\n      return /*#__PURE__*/React.cloneElement(children, newProps);\n    }\n    return children;\n  }\n  return mountNode ? /*#__PURE__*/ReactDOM.createPortal(children, mountNode) : mountNode;\n});\nprocess.env.NODE_ENV !== \"production\" ? Portal.propTypes /* remove-proptypes */ = {\n  // ┌────────────────────────────── Warning ──────────────────────────────┐\n  // │ These PropTypes are generated from the TypeScript type definitions. │\n  // │ To update them, edit the TypeScript types and run `pnpm proptypes`. │\n  // └─────────────────────────────────────────────────────────────────────┘\n  /**\n   * The children to render into the `container`.\n   */\n  children: PropTypes.node,\n  /**\n   * An HTML element or function that returns one.\n   * The `container` will have the portal children appended to it.\n   *\n   * You can also provide a callback, which is called in a React layout effect.\n   * This lets you set the container from a ref, and also makes server-side rendering possible.\n   *\n   * By default, it uses the body of the top-level document object,\n   * so it's simply `document.body` most of the time.\n   */\n  container: PropTypes /* @typescript-to-proptypes-ignore */.oneOfType([HTMLElementType, PropTypes.func]),\n  /**\n   * The `children` will be under the DOM hierarchy of the parent component.\n   * @default false\n   */\n  disablePortal: PropTypes.bool\n} : void 0;\nif (process.env.NODE_ENV !== 'production') {\n  // eslint-disable-next-line\n  Portal['propTypes' + ''] = exactProp(Portal.propTypes);\n}\nexport default Portal;","import generateUtilityClasses from '@mui/utils/generateUtilityClasses';\nimport generateUtilityClass from '@mui/utils/generateUtilityClass';\nexport function getPopperUtilityClass(slot) {\n  return generateUtilityClass('MuiPopper', slot);\n}\nconst popperClasses = generateUtilityClasses('MuiPopper', ['root']);\nexport default popperClasses;","'use client';\n\nimport * as React from 'react';\nimport ownerDocument from '@mui/utils/ownerDocument';\nimport useEnhancedEffect from '@mui/utils/useEnhancedEffect';\nimport useForkRef from '@mui/utils/useForkRef';\nimport chainPropTypes from '@mui/utils/chainPropTypes';\nimport HTMLElementType from '@mui/utils/HTMLElementType';\nimport refType from '@mui/utils/refType';\nimport { createPopper } from '@popperjs/core';\nimport PropTypes from 'prop-types';\nimport composeClasses from '@mui/utils/composeClasses';\nimport useSlotProps from '@mui/utils/useSlotProps';\nimport isLayoutSupported from \"../utils/isLayoutSupported.js\";\nimport Portal from \"../Portal/index.js\";\nimport { getPopperUtilityClass } from \"./popperClasses.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nfunction flipPlacement(placement, direction) {\n  if (direction === 'ltr') {\n    return placement;\n  }\n  switch (placement) {\n    case 'bottom-end':\n      return 'bottom-start';\n    case 'bottom-start':\n      return 'bottom-end';\n    case 'top-end':\n      return 'top-start';\n    case 'top-start':\n      return 'top-end';\n    default:\n      return placement;\n  }\n}\nfunction resolveAnchorEl(anchorEl) {\n  return typeof anchorEl === 'function' ? anchorEl() : anchorEl;\n}\nfunction isHTMLElement(element) {\n  return element.nodeType !== undefined;\n}\nfunction isVirtualElement(element) {\n  return !isHTMLElement(element);\n}\nconst useUtilityClasses = ownerState => {\n  const {\n    classes\n  } = ownerState;\n  const slots = {\n    root: ['root']\n  };\n  return composeClasses(slots, getPopperUtilityClass, classes);\n};\nconst defaultPopperOptions = {};\nconst PopperTooltip = /*#__PURE__*/React.forwardRef(function PopperTooltip(props, forwardedRef) {\n  const {\n    anchorEl,\n    children,\n    direction,\n    disablePortal,\n    modifiers,\n    open,\n    placement: initialPlacement,\n    popperOptions,\n    popperRef: popperRefProp,\n    slotProps = {},\n    slots = {},\n    TransitionProps,\n    // @ts-ignore internal logic\n    ownerState: ownerStateProp,\n    // prevent from spreading to DOM, it can come from the parent component e.g. Select.\n    ...other\n  } = props;\n  const tooltipRef = React.useRef(null);\n  const ownRef = useForkRef(tooltipRef, forwardedRef);\n  const popperRef = React.useRef(null);\n  const handlePopperRef = useForkRef(popperRef, popperRefProp);\n  const handlePopperRefRef = React.useRef(handlePopperRef);\n  useEnhancedEffect(() => {\n    handlePopperRefRef.current = handlePopperRef;\n  }, [handlePopperRef]);\n  React.useImperativeHandle(popperRefProp, () => popperRef.current, []);\n  const rtlPlacement = flipPlacement(initialPlacement, direction);\n  /**\n   * placement initialized from prop but can change during lifetime if modifiers.flip.\n   * modifiers.flip is essentially a flip for controlled/uncontrolled behavior\n   */\n  const [placement, setPlacement] = React.useState(rtlPlacement);\n  const [resolvedAnchorElement, setResolvedAnchorElement] = React.useState(resolveAnchorEl(anchorEl));\n  React.useEffect(() => {\n    if (popperRef.current) {\n      popperRef.current.forceUpdate();\n    }\n  });\n  React.useEffect(() => {\n    if (anchorEl) {\n      setResolvedAnchorElement(resolveAnchorEl(anchorEl));\n    }\n  }, [anchorEl]);\n  useEnhancedEffect(() => {\n    if (!resolvedAnchorElement || !open) {\n      return undefined;\n    }\n    const handlePopperUpdate = data => {\n      setPlacement(data.placement);\n    };\n    if (process.env.NODE_ENV !== 'production') {\n      if (resolvedAnchorElement && isHTMLElement(resolvedAnchorElement) && resolvedAnchorElement.nodeType === 1) {\n        const box = resolvedAnchorElement.getBoundingClientRect();\n        if (isLayoutSupported() && box.top === 0 && box.left === 0 && box.right === 0 && box.bottom === 0) {\n          console.warn(['MUI: The `anchorEl` prop provided to the component is invalid.', 'The anchor element should be part of the document layout.', \"Make sure the element is present in the document or that it's not display none.\"].join('\\n'));\n        }\n      }\n    }\n    let popperModifiers = [{\n      name: 'preventOverflow',\n      options: {\n        altBoundary: disablePortal\n      }\n    }, {\n      name: 'flip',\n      options: {\n        altBoundary: disablePortal\n      }\n    }, {\n      name: 'onUpdate',\n      enabled: true,\n      phase: 'afterWrite',\n      fn: ({\n        state\n      }) => {\n        handlePopperUpdate(state);\n      }\n    }];\n    if (modifiers != null) {\n      popperModifiers = popperModifiers.concat(modifiers);\n    }\n    if (popperOptions && popperOptions.modifiers != null) {\n      popperModifiers = popperModifiers.concat(popperOptions.modifiers);\n    }\n    const popper = createPopper(resolvedAnchorElement, tooltipRef.current, {\n      placement: rtlPlacement,\n      ...popperOptions,\n      modifiers: popperModifiers\n    });\n    handlePopperRefRef.current(popper);\n    return () => {\n      popper.destroy();\n      handlePopperRefRef.current(null);\n    };\n  }, [resolvedAnchorElement, disablePortal, modifiers, open, popperOptions, rtlPlacement]);\n  const childProps = {\n    placement: placement\n  };\n  if (TransitionProps !== null) {\n    childProps.TransitionProps = TransitionProps;\n  }\n  const classes = useUtilityClasses(props);\n  const Root = slots.root ?? 'div';\n  const rootProps = useSlotProps({\n    elementType: Root,\n    externalSlotProps: slotProps.root,\n    externalForwardedProps: other,\n    additionalProps: {\n      role: 'tooltip',\n      ref: ownRef\n    },\n    ownerState: props,\n    className: classes.root\n  });\n  return /*#__PURE__*/_jsx(Root, {\n    ...rootProps,\n    children: typeof children === 'function' ? children(childProps) : children\n  });\n});\n\n/**\n * @ignore - internal component.\n */\nconst Popper = /*#__PURE__*/React.forwardRef(function Popper(props, forwardedRef) {\n  const {\n    anchorEl,\n    children,\n    container: containerProp,\n    direction = 'ltr',\n    disablePortal = false,\n    keepMounted = false,\n    modifiers,\n    open,\n    placement = 'bottom',\n    popperOptions = defaultPopperOptions,\n    popperRef,\n    style,\n    transition = false,\n    slotProps = {},\n    slots = {},\n    ...other\n  } = props;\n  const [exited, setExited] = React.useState(true);\n  const handleEnter = () => {\n    setExited(false);\n  };\n  const handleExited = () => {\n    setExited(true);\n  };\n  if (!keepMounted && !open && (!transition || exited)) {\n    return null;\n  }\n\n  // If the container prop is provided, use that\n  // If the anchorEl prop is provided, use its parent body element as the container\n  // If neither are provided let the Modal take care of choosing the container\n  let container;\n  if (containerProp) {\n    container = containerProp;\n  } else if (anchorEl) {\n    const resolvedAnchorEl = resolveAnchorEl(anchorEl);\n    container = resolvedAnchorEl && isHTMLElement(resolvedAnchorEl) ? ownerDocument(resolvedAnchorEl).body : ownerDocument(null).body;\n  }\n  const display = !open && keepMounted && (!transition || exited) ? 'none' : undefined;\n  const transitionProps = transition ? {\n    in: open,\n    onEnter: handleEnter,\n    onExited: handleExited\n  } : undefined;\n  return /*#__PURE__*/_jsx(Portal, {\n    disablePortal: disablePortal,\n    container: container,\n    children: /*#__PURE__*/_jsx(PopperTooltip, {\n      anchorEl: anchorEl,\n      direction: direction,\n      disablePortal: disablePortal,\n      modifiers: modifiers,\n      ref: forwardedRef,\n      open: transition ? !exited : open,\n      placement: placement,\n      popperOptions: popperOptions,\n      popperRef: popperRef,\n      slotProps: slotProps,\n      slots: slots,\n      ...other,\n      style: {\n        // Prevents scroll issue, waiting for Popper.js to add this style once initiated.\n        position: 'fixed',\n        // Fix Popper.js display issue\n        top: 0,\n        left: 0,\n        display,\n        ...style\n      },\n      TransitionProps: transitionProps,\n      children: children\n    })\n  });\n});\nprocess.env.NODE_ENV !== \"production\" ? Popper.propTypes /* remove-proptypes */ = {\n  // ┌────────────────────────────── Warning ──────────────────────────────┐\n  // │ These PropTypes are generated from the TypeScript type definitions. │\n  // │ To update them, edit the TypeScript types and run `pnpm proptypes`. │\n  // └─────────────────────────────────────────────────────────────────────┘\n  /**\n   * An HTML element, [virtualElement](https://popper.js.org/docs/v2/virtual-elements/),\n   * or a function that returns either.\n   * It's used to set the position of the popper.\n   * The return value will passed as the reference object of the Popper instance.\n   */\n  anchorEl: chainPropTypes(PropTypes.oneOfType([HTMLElementType, PropTypes.object, PropTypes.func]), props => {\n    if (props.open) {\n      const resolvedAnchorEl = resolveAnchorEl(props.anchorEl);\n      if (resolvedAnchorEl && isHTMLElement(resolvedAnchorEl) && resolvedAnchorEl.nodeType === 1) {\n        const box = resolvedAnchorEl.getBoundingClientRect();\n        if (process.env.NODE_ENV !== 'production') {\n          if (isLayoutSupported() && box.top === 0 && box.left === 0 && box.right === 0 && box.bottom === 0) {\n            return new Error(['MUI: The `anchorEl` prop provided to the component is invalid.', 'The anchor element should be part of the document layout.', \"Make sure the element is present in the document or that it's not display none.\"].join('\\n'));\n          }\n        }\n      } else if (!resolvedAnchorEl || typeof resolvedAnchorEl.getBoundingClientRect !== 'function' || isVirtualElement(resolvedAnchorEl) && resolvedAnchorEl.contextElement != null && resolvedAnchorEl.contextElement.nodeType !== 1) {\n        return new Error(['MUI: The `anchorEl` prop provided to the component is invalid.', 'It should be an HTML element instance or a virtualElement ', '(https://popper.js.org/docs/v2/virtual-elements/).'].join('\\n'));\n      }\n    }\n    return null;\n  }),\n  /**\n   * Popper render function or node.\n   */\n  children: PropTypes /* @typescript-to-proptypes-ignore */.oneOfType([PropTypes.node, PropTypes.func]),\n  /**\n   * An HTML element or function that returns one.\n   * The `container` will have the portal children appended to it.\n   *\n   * You can also provide a callback, which is called in a React layout effect.\n   * This lets you set the container from a ref, and also makes server-side rendering possible.\n   *\n   * By default, it uses the body of the top-level document object,\n   * so it's simply `document.body` most of the time.\n   */\n  container: PropTypes /* @typescript-to-proptypes-ignore */.oneOfType([HTMLElementType, PropTypes.func]),\n  /**\n   * Direction of the text.\n   * @default 'ltr'\n   */\n  direction: PropTypes.oneOf(['ltr', 'rtl']),\n  /**\n   * The `children` will be under the DOM hierarchy of the parent component.\n   * @default false\n   */\n  disablePortal: PropTypes.bool,\n  /**\n   * Always keep the children in the DOM.\n   * This prop can be useful in SEO situation or\n   * when you want to maximize the responsiveness of the Popper.\n   * @default false\n   */\n  keepMounted: PropTypes.bool,\n  /**\n   * Popper.js is based on a \"plugin-like\" architecture,\n   * most of its features are fully encapsulated \"modifiers\".\n   *\n   * A modifier is a function that is called each time Popper.js needs to\n   * compute the position of the popper.\n   * For this reason, modifiers should be very performant to avoid bottlenecks.\n   * To learn how to create a modifier, [read the modifiers documentation](https://popper.js.org/docs/v2/modifiers/).\n   */\n  modifiers: PropTypes.arrayOf(PropTypes.shape({\n    data: PropTypes.object,\n    effect: PropTypes.func,\n    enabled: PropTypes.bool,\n    fn: PropTypes.func,\n    name: PropTypes.any,\n    options: PropTypes.object,\n    phase: PropTypes.oneOf(['afterMain', 'afterRead', 'afterWrite', 'beforeMain', 'beforeRead', 'beforeWrite', 'main', 'read', 'write']),\n    requires: PropTypes.arrayOf(PropTypes.string),\n    requiresIfExists: PropTypes.arrayOf(PropTypes.string)\n  })),\n  /**\n   * If `true`, the component is shown.\n   */\n  open: PropTypes.bool.isRequired,\n  /**\n   * Popper placement.\n   * @default 'bottom'\n   */\n  placement: PropTypes.oneOf(['auto-end', 'auto-start', 'auto', 'bottom-end', 'bottom-start', 'bottom', 'left-end', 'left-start', 'left', 'right-end', 'right-start', 'right', 'top-end', 'top-start', 'top']),\n  /**\n   * Options provided to the [`Popper.js`](https://popper.js.org/docs/v2/constructors/#options) instance.\n   * @default {}\n   */\n  popperOptions: PropTypes.shape({\n    modifiers: PropTypes.array,\n    onFirstUpdate: PropTypes.func,\n    placement: PropTypes.oneOf(['auto-end', 'auto-start', 'auto', 'bottom-end', 'bottom-start', 'bottom', 'left-end', 'left-start', 'left', 'right-end', 'right-start', 'right', 'top-end', 'top-start', 'top']),\n    strategy: PropTypes.oneOf(['absolute', 'fixed'])\n  }),\n  /**\n   * A ref that points to the used popper instance.\n   */\n  popperRef: refType,\n  /**\n   * The props used for each slot inside the Popper.\n   * @default {}\n   */\n  slotProps: PropTypes.shape({\n    root: PropTypes.oneOfType([PropTypes.func, PropTypes.object])\n  }),\n  /**\n   * The components used for each slot inside the Popper.\n   * Either a string to use a HTML element or a component.\n   * @default {}\n   */\n  slots: PropTypes.shape({\n    root: PropTypes.elementType\n  }),\n  /**\n   * Help supporting a react-transition-group/Transition component.\n   * @default false\n   */\n  transition: PropTypes.bool\n} : void 0;\nexport default Popper;","'use client';\n\nimport { useRtl } from '@mui/system/RtlProvider';\nimport refType from '@mui/utils/refType';\nimport HTMLElementType from '@mui/utils/HTMLElementType';\nimport PropTypes from 'prop-types';\nimport * as React from 'react';\nimport BasePopper from \"./BasePopper.js\";\nimport { styled } from \"../zero-styled/index.js\";\nimport { useDefaultProps } from \"../DefaultPropsProvider/index.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nconst PopperRoot = styled(BasePopper, {\n  name: 'MuiPopper',\n  slot: 'Root'\n})({});\n\n/**\n *\n * Demos:\n *\n * - [Autocomplete](https://v7.mui.com/material-ui/react-autocomplete/)\n * - [Menu](https://v7.mui.com/material-ui/react-menu/)\n * - [Popper](https://v7.mui.com/material-ui/react-popper/)\n *\n * API:\n *\n * - [Popper API](https://v7.mui.com/material-ui/api/popper/)\n */\nconst Popper = /*#__PURE__*/React.forwardRef(function Popper(inProps, ref) {\n  const isRtl = useRtl();\n  const props = useDefaultProps({\n    props: inProps,\n    name: 'MuiPopper'\n  });\n  const {\n    anchorEl,\n    component,\n    components,\n    componentsProps,\n    container,\n    disablePortal,\n    keepMounted,\n    modifiers,\n    open,\n    placement,\n    popperOptions,\n    popperRef,\n    transition,\n    slots,\n    slotProps,\n    ...other\n  } = props;\n  const RootComponent = slots?.root ?? components?.Root;\n  const otherProps = {\n    anchorEl,\n    container,\n    disablePortal,\n    keepMounted,\n    modifiers,\n    open,\n    placement,\n    popperOptions,\n    popperRef,\n    transition,\n    ...other\n  };\n  return /*#__PURE__*/_jsx(PopperRoot, {\n    as: component,\n    direction: isRtl ? 'rtl' : 'ltr',\n    slots: {\n      root: RootComponent\n    },\n    slotProps: slotProps ?? componentsProps,\n    ...otherProps,\n    ref: ref\n  });\n});\nprocess.env.NODE_ENV !== \"production\" ? Popper.propTypes /* remove-proptypes */ = {\n  // ┌────────────────────────────── Warning ──────────────────────────────┐\n  // │ These PropTypes are generated from the TypeScript type definitions. │\n  // │ To update them, edit the TypeScript types and run `pnpm proptypes`. │\n  // └─────────────────────────────────────────────────────────────────────┘\n  /**\n   * An HTML element, [virtualElement](https://popper.js.org/docs/v2/virtual-elements/),\n   * or a function that returns either.\n   * It's used to set the position of the popper.\n   * The return value will passed as the reference object of the Popper instance.\n   */\n  anchorEl: PropTypes /* @typescript-to-proptypes-ignore */.oneOfType([HTMLElementType, PropTypes.object, PropTypes.func]),\n  /**\n   * Popper render function or node.\n   */\n  children: PropTypes /* @typescript-to-proptypes-ignore */.oneOfType([PropTypes.node, PropTypes.func]),\n  /**\n   * The component used for the root node.\n   * Either a string to use a HTML element or a component.\n   */\n  component: PropTypes.elementType,\n  /**\n   * The components used for each slot inside the Popper.\n   * Either a string to use a HTML element or a component.\n   *\n   * @deprecated use the `slots` prop instead. This prop will be removed in a future major release. [How to migrate](/material-ui/migration/migrating-from-deprecated-apis/).\n   * @default {}\n   */\n  components: PropTypes.shape({\n    Root: PropTypes.elementType\n  }),\n  /**\n   * The props used for each slot inside the Popper.\n   *\n   * @deprecated use the `slotProps` prop instead. This prop will be removed in a future major release. [How to migrate](/material-ui/migration/migrating-from-deprecated-apis/).\n   * @default {}\n   */\n  componentsProps: PropTypes.shape({\n    root: PropTypes.oneOfType([PropTypes.func, PropTypes.object])\n  }),\n  /**\n   * An HTML element or function that returns one.\n   * The `container` will have the portal children appended to it.\n   *\n   * You can also provide a callback, which is called in a React layout effect.\n   * This lets you set the container from a ref, and also makes server-side rendering possible.\n   *\n   * By default, it uses the body of the top-level document object,\n   * so it's simply `document.body` most of the time.\n   */\n  container: PropTypes /* @typescript-to-proptypes-ignore */.oneOfType([HTMLElementType, PropTypes.func]),\n  /**\n   * The `children` will be under the DOM hierarchy of the parent component.\n   * @default false\n   */\n  disablePortal: PropTypes.bool,\n  /**\n   * Always keep the children in the DOM.\n   * This prop can be useful in SEO situation or\n   * when you want to maximize the responsiveness of the Popper.\n   * @default false\n   */\n  keepMounted: PropTypes.bool,\n  /**\n   * Popper.js is based on a \"plugin-like\" architecture,\n   * most of its features are fully encapsulated \"modifiers\".\n   *\n   * A modifier is a function that is called each time Popper.js needs to\n   * compute the position of the popper.\n   * For this reason, modifiers should be very performant to avoid bottlenecks.\n   * To learn how to create a modifier, [read the modifiers documentation](https://popper.js.org/docs/v2/modifiers/).\n   */\n  modifiers: PropTypes.arrayOf(PropTypes.shape({\n    data: PropTypes.object,\n    effect: PropTypes.func,\n    enabled: PropTypes.bool,\n    fn: PropTypes.func,\n    name: PropTypes.any,\n    options: PropTypes.object,\n    phase: PropTypes.oneOf(['afterMain', 'afterRead', 'afterWrite', 'beforeMain', 'beforeRead', 'beforeWrite', 'main', 'read', 'write']),\n    requires: PropTypes.arrayOf(PropTypes.string),\n    requiresIfExists: PropTypes.arrayOf(PropTypes.string)\n  })),\n  /**\n   * If `true`, the component is shown.\n   */\n  open: PropTypes.bool.isRequired,\n  /**\n   * Popper placement.\n   * @default 'bottom'\n   */\n  placement: PropTypes.oneOf(['auto-end', 'auto-start', 'auto', 'bottom-end', 'bottom-start', 'bottom', 'left-end', 'left-start', 'left', 'right-end', 'right-start', 'right', 'top-end', 'top-start', 'top']),\n  /**\n   * Options provided to the [`Popper.js`](https://popper.js.org/docs/v2/constructors/#options) instance.\n   * @default {}\n   */\n  popperOptions: PropTypes.shape({\n    modifiers: PropTypes.array,\n    onFirstUpdate: PropTypes.func,\n    placement: PropTypes.oneOf(['auto-end', 'auto-start', 'auto', 'bottom-end', 'bottom-start', 'bottom', 'left-end', 'left-start', 'left', 'right-end', 'right-start', 'right', 'top-end', 'top-start', 'top']),\n    strategy: PropTypes.oneOf(['absolute', 'fixed'])\n  }),\n  /**\n   * A ref that points to the used popper instance.\n   */\n  popperRef: refType,\n  /**\n   * The props used for each slot inside the Popper.\n   * @default {}\n   */\n  slotProps: PropTypes.shape({\n    root: PropTypes.oneOfType([PropTypes.func, PropTypes.object])\n  }),\n  /**\n   * The components used for each slot inside the Popper.\n   * Either a string to use a HTML element or a component.\n   * @default {}\n   */\n  slots: PropTypes.shape({\n    root: PropTypes.elementType\n  }),\n  /**\n   * The system prop that allows defining system overrides as well as additional CSS styles.\n   */\n  sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object]),\n  /**\n   * Help supporting a react-transition-group/Transition component.\n   * @default false\n   */\n  transition: PropTypes.bool\n} : void 0;\nexport default Popper;","'use client';\n\nimport createSvgIcon from \"../../utils/createSvgIcon.js\";\n\n/**\n * @ignore - internal component.\n */\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport default createSvgIcon(/*#__PURE__*/_jsx(\"path\", {\n  d: \"M12 2C6.47 2 2 6.47 2 12s4.47 10 10 10 10-4.47 10-10S17.53 2 12 2zm5 13.59L15.59 17 12 13.41 8.41 17 7 15.59 10.59 12 7 8.41 8.41 7 12 10.59 15.59 7 17 8.41 13.41 12 17 15.59z\"\n}), 'Cancel');","import generateUtilityClasses from '@mui/utils/generateUtilityClasses';\nimport generateUtilityClass from '@mui/utils/generateUtilityClass';\nexport function getChipUtilityClass(slot) {\n  return generateUtilityClass('MuiChip', slot);\n}\nconst chipClasses = generateUtilityClasses('MuiChip', ['root', 'sizeSmall', 'sizeMedium', 'colorDefault', 'colorError', 'colorInfo', 'colorPrimary', 'colorSecondary', 'colorSuccess', 'colorWarning', 'disabled', 'clickable', 'clickableColorPrimary', 'clickableColorSecondary', 'deletable', 'deletableColorPrimary', 'deletableColorSecondary', 'outlined', 'filled', 'outlinedPrimary', 'outlinedSecondary', 'filledPrimary', 'filledSecondary', 'avatar', 'avatarSmall', 'avatarMedium', 'avatarColorPrimary', 'avatarColorSecondary', 'icon', 'iconSmall', 'iconMedium', 'iconColorPrimary', 'iconColorSecondary', 'label', 'labelSmall', 'labelMedium', 'deleteIcon', 'deleteIconSmall', 'deleteIconMedium', 'deleteIconColorPrimary', 'deleteIconColorSecondary', 'deleteIconOutlinedColorPrimary', 'deleteIconOutlinedColorSecondary', 'deleteIconFilledColorPrimary', 'deleteIconFilledColorSecondary', 'focusVisible']);\nexport default chipClasses;","'use client';\n\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport composeClasses from '@mui/utils/composeClasses';\nimport CancelIcon from \"../internal/svg-icons/Cancel.js\";\nimport useForkRef from \"../utils/useForkRef.js\";\nimport unsupportedProp from \"../utils/unsupportedProp.js\";\nimport capitalize from \"../utils/capitalize.js\";\nimport ButtonBase from \"../ButtonBase/index.js\";\nimport { styled } from \"../zero-styled/index.js\";\nimport memoTheme from \"../utils/memoTheme.js\";\nimport createSimplePaletteValueFilter from \"../utils/createSimplePaletteValueFilter.js\";\nimport { useDefaultProps } from \"../DefaultPropsProvider/index.js\";\nimport chipClasses, { getChipUtilityClass } from \"./chipClasses.js\";\nimport useSlot from \"../utils/useSlot.js\";\nimport { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nconst useUtilityClasses = ownerState => {\n  const {\n    classes,\n    disabled,\n    size,\n    color,\n    iconColor,\n    onDelete,\n    clickable,\n    variant\n  } = ownerState;\n  const slots = {\n    root: ['root', variant, disabled && 'disabled', `size${capitalize(size)}`, `color${capitalize(color)}`, clickable && 'clickable', clickable && `clickableColor${capitalize(color)}`, onDelete && 'deletable', onDelete && `deletableColor${capitalize(color)}`, `${variant}${capitalize(color)}`],\n    label: ['label', `label${capitalize(size)}`],\n    avatar: ['avatar', `avatar${capitalize(size)}`, `avatarColor${capitalize(color)}`],\n    icon: ['icon', `icon${capitalize(size)}`, `iconColor${capitalize(iconColor)}`],\n    deleteIcon: ['deleteIcon', `deleteIcon${capitalize(size)}`, `deleteIconColor${capitalize(color)}`, `deleteIcon${capitalize(variant)}Color${capitalize(color)}`]\n  };\n  return composeClasses(slots, getChipUtilityClass, classes);\n};\nconst ChipRoot = styled('div', {\n  name: 'MuiChip',\n  slot: 'Root',\n  overridesResolver: (props, styles) => {\n    const {\n      ownerState\n    } = props;\n    const {\n      color,\n      iconColor,\n      clickable,\n      onDelete,\n      size,\n      variant\n    } = ownerState;\n    return [{\n      [`& .${chipClasses.avatar}`]: styles.avatar\n    }, {\n      [`& .${chipClasses.avatar}`]: styles[`avatar${capitalize(size)}`]\n    }, {\n      [`& .${chipClasses.avatar}`]: styles[`avatarColor${capitalize(color)}`]\n    }, {\n      [`& .${chipClasses.icon}`]: styles.icon\n    }, {\n      [`& .${chipClasses.icon}`]: styles[`icon${capitalize(size)}`]\n    }, {\n      [`& .${chipClasses.icon}`]: styles[`iconColor${capitalize(iconColor)}`]\n    }, {\n      [`& .${chipClasses.deleteIcon}`]: styles.deleteIcon\n    }, {\n      [`& .${chipClasses.deleteIcon}`]: styles[`deleteIcon${capitalize(size)}`]\n    }, {\n      [`& .${chipClasses.deleteIcon}`]: styles[`deleteIconColor${capitalize(color)}`]\n    }, {\n      [`& .${chipClasses.deleteIcon}`]: styles[`deleteIcon${capitalize(variant)}Color${capitalize(color)}`]\n    }, styles.root, styles[`size${capitalize(size)}`], styles[`color${capitalize(color)}`], clickable && styles.clickable, clickable && color !== 'default' && styles[`clickableColor${capitalize(color)}`], onDelete && styles.deletable, onDelete && color !== 'default' && styles[`deletableColor${capitalize(color)}`], styles[variant], styles[`${variant}${capitalize(color)}`]];\n  }\n})(memoTheme(({\n  theme\n}) => {\n  const textColor = theme.palette.mode === 'light' ? theme.palette.grey[700] : theme.palette.grey[300];\n  return {\n    maxWidth: '100%',\n    fontFamily: theme.typography.fontFamily,\n    fontSize: theme.typography.pxToRem(13),\n    display: 'inline-flex',\n    alignItems: 'center',\n    justifyContent: 'center',\n    height: 32,\n    lineHeight: 1.5,\n    color: (theme.vars || theme).palette.text.primary,\n    backgroundColor: (theme.vars || theme).palette.action.selected,\n    borderRadius: 32 / 2,\n    whiteSpace: 'nowrap',\n    transition: theme.transitions.create(['background-color', 'box-shadow']),\n    // reset cursor explicitly in case ButtonBase is used\n    cursor: 'unset',\n    // We disable the focus ring for mouse, touch and keyboard users.\n    outline: 0,\n    textDecoration: 'none',\n    border: 0,\n    // Remove `button` border\n    padding: 0,\n    // Remove `button` padding\n    verticalAlign: 'middle',\n    boxSizing: 'border-box',\n    [`&.${chipClasses.disabled}`]: {\n      opacity: (theme.vars || theme).palette.action.disabledOpacity,\n      pointerEvents: 'none'\n    },\n    [`& .${chipClasses.avatar}`]: {\n      marginLeft: 5,\n      marginRight: -6,\n      width: 24,\n      height: 24,\n      color: theme.vars ? theme.vars.palette.Chip.defaultAvatarColor : textColor,\n      fontSize: theme.typography.pxToRem(12)\n    },\n    [`& .${chipClasses.avatarColorPrimary}`]: {\n      color: (theme.vars || theme).palette.primary.contrastText,\n      backgroundColor: (theme.vars || theme).palette.primary.dark\n    },\n    [`& .${chipClasses.avatarColorSecondary}`]: {\n      color: (theme.vars || theme).palette.secondary.contrastText,\n      backgroundColor: (theme.vars || theme).palette.secondary.dark\n    },\n    [`& .${chipClasses.avatarSmall}`]: {\n      marginLeft: 4,\n      marginRight: -4,\n      width: 18,\n      height: 18,\n      fontSize: theme.typography.pxToRem(10)\n    },\n    [`& .${chipClasses.icon}`]: {\n      marginLeft: 5,\n      marginRight: -6\n    },\n    [`& .${chipClasses.deleteIcon}`]: {\n      WebkitTapHighlightColor: 'transparent',\n      color: theme.alpha((theme.vars || theme).palette.text.primary, 0.26),\n      fontSize: 22,\n      cursor: 'pointer',\n      margin: '0 5px 0 -6px',\n      '&:hover': {\n        color: theme.alpha((theme.vars || theme).palette.text.primary, 0.4)\n      }\n    },\n    variants: [{\n      props: {\n        size: 'small'\n      },\n      style: {\n        height: 24,\n        [`& .${chipClasses.icon}`]: {\n          fontSize: 18,\n          marginLeft: 4,\n          marginRight: -4\n        },\n        [`& .${chipClasses.deleteIcon}`]: {\n          fontSize: 16,\n          marginRight: 4,\n          marginLeft: -4\n        }\n      }\n    }, ...Object.entries(theme.palette).filter(createSimplePaletteValueFilter(['contrastText'])).map(([color]) => {\n      return {\n        props: {\n          color\n        },\n        style: {\n          backgroundColor: (theme.vars || theme).palette[color].main,\n          color: (theme.vars || theme).palette[color].contrastText,\n          [`& .${chipClasses.deleteIcon}`]: {\n            color: theme.alpha((theme.vars || theme).palette[color].contrastText, 0.7),\n            '&:hover, &:active': {\n              color: (theme.vars || theme).palette[color].contrastText\n            }\n          }\n        }\n      };\n    }), {\n      props: props => props.iconColor === props.color,\n      style: {\n        [`& .${chipClasses.icon}`]: {\n          color: theme.vars ? theme.vars.palette.Chip.defaultIconColor : textColor\n        }\n      }\n    }, {\n      props: props => props.iconColor === props.color && props.color !== 'default',\n      style: {\n        [`& .${chipClasses.icon}`]: {\n          color: 'inherit'\n        }\n      }\n    }, {\n      props: {\n        onDelete: true\n      },\n      style: {\n        [`&.${chipClasses.focusVisible}`]: {\n          backgroundColor: theme.alpha((theme.vars || theme).palette.action.selected, `${(theme.vars || theme).palette.action.selectedOpacity} + ${(theme.vars || theme).palette.action.focusOpacity}`)\n        }\n      }\n    }, ...Object.entries(theme.palette).filter(createSimplePaletteValueFilter(['dark'])).map(([color]) => {\n      return {\n        props: {\n          color,\n          onDelete: true\n        },\n        style: {\n          [`&.${chipClasses.focusVisible}`]: {\n            background: (theme.vars || theme).palette[color].dark\n          }\n        }\n      };\n    }), {\n      props: {\n        clickable: true\n      },\n      style: {\n        userSelect: 'none',\n        WebkitTapHighlightColor: 'transparent',\n        cursor: 'pointer',\n        '&:hover': {\n          backgroundColor: theme.alpha((theme.vars || theme).palette.action.selected, `${(theme.vars || theme).palette.action.selectedOpacity} + ${(theme.vars || theme).palette.action.hoverOpacity}`)\n        },\n        [`&.${chipClasses.focusVisible}`]: {\n          backgroundColor: theme.alpha((theme.vars || theme).palette.action.selected, `${(theme.vars || theme).palette.action.selectedOpacity} + ${(theme.vars || theme).palette.action.focusOpacity}`)\n        },\n        '&:active': {\n          boxShadow: (theme.vars || theme).shadows[1]\n        }\n      }\n    }, ...Object.entries(theme.palette).filter(createSimplePaletteValueFilter(['dark'])).map(([color]) => ({\n      props: {\n        color,\n        clickable: true\n      },\n      style: {\n        [`&:hover, &.${chipClasses.focusVisible}`]: {\n          backgroundColor: (theme.vars || theme).palette[color].dark\n        }\n      }\n    })), {\n      props: {\n        variant: 'outlined'\n      },\n      style: {\n        backgroundColor: 'transparent',\n        border: theme.vars ? `1px solid ${theme.vars.palette.Chip.defaultBorder}` : `1px solid ${theme.palette.mode === 'light' ? theme.palette.grey[400] : theme.palette.grey[700]}`,\n        [`&.${chipClasses.clickable}:hover`]: {\n          backgroundColor: (theme.vars || theme).palette.action.hover\n        },\n        [`&.${chipClasses.focusVisible}`]: {\n          backgroundColor: (theme.vars || theme).palette.action.focus\n        },\n        [`& .${chipClasses.avatar}`]: {\n          marginLeft: 4\n        },\n        [`& .${chipClasses.avatarSmall}`]: {\n          marginLeft: 2\n        },\n        [`& .${chipClasses.icon}`]: {\n          marginLeft: 4\n        },\n        [`& .${chipClasses.iconSmall}`]: {\n          marginLeft: 2\n        },\n        [`& .${chipClasses.deleteIcon}`]: {\n          marginRight: 5\n        },\n        [`& .${chipClasses.deleteIconSmall}`]: {\n          marginRight: 3\n        }\n      }\n    }, ...Object.entries(theme.palette).filter(createSimplePaletteValueFilter()) // no need to check for mainChannel as it's calculated from main\n    .map(([color]) => ({\n      props: {\n        variant: 'outlined',\n        color\n      },\n      style: {\n        color: (theme.vars || theme).palette[color].main,\n        border: `1px solid ${theme.alpha((theme.vars || theme).palette[color].main, 0.7)}`,\n        [`&.${chipClasses.clickable}:hover`]: {\n          backgroundColor: theme.alpha((theme.vars || theme).palette[color].main, (theme.vars || theme).palette.action.hoverOpacity)\n        },\n        [`&.${chipClasses.focusVisible}`]: {\n          backgroundColor: theme.alpha((theme.vars || theme).palette[color].main, (theme.vars || theme).palette.action.focusOpacity)\n        },\n        [`& .${chipClasses.deleteIcon}`]: {\n          color: theme.alpha((theme.vars || theme).palette[color].main, 0.7),\n          '&:hover, &:active': {\n            color: (theme.vars || theme).palette[color].main\n          }\n        }\n      }\n    }))]\n  };\n}));\nconst ChipLabel = styled('span', {\n  name: 'MuiChip',\n  slot: 'Label',\n  overridesResolver: (props, styles) => {\n    const {\n      ownerState\n    } = props;\n    const {\n      size\n    } = ownerState;\n    return [styles.label, styles[`label${capitalize(size)}`]];\n  }\n})({\n  overflow: 'hidden',\n  textOverflow: 'ellipsis',\n  paddingLeft: 12,\n  paddingRight: 12,\n  whiteSpace: 'nowrap',\n  variants: [{\n    props: {\n      variant: 'outlined'\n    },\n    style: {\n      paddingLeft: 11,\n      paddingRight: 11\n    }\n  }, {\n    props: {\n      size: 'small'\n    },\n    style: {\n      paddingLeft: 8,\n      paddingRight: 8\n    }\n  }, {\n    props: {\n      size: 'small',\n      variant: 'outlined'\n    },\n    style: {\n      paddingLeft: 7,\n      paddingRight: 7\n    }\n  }]\n});\nfunction isDeleteKeyboardEvent(keyboardEvent) {\n  return keyboardEvent.key === 'Backspace' || keyboardEvent.key === 'Delete';\n}\n\n/**\n * Chips represent complex entities in small blocks, such as a contact.\n */\nconst Chip = /*#__PURE__*/React.forwardRef(function Chip(inProps, ref) {\n  const props = useDefaultProps({\n    props: inProps,\n    name: 'MuiChip'\n  });\n  const {\n    avatar: avatarProp,\n    className,\n    clickable: clickableProp,\n    color = 'default',\n    component: ComponentProp,\n    deleteIcon: deleteIconProp,\n    disabled = false,\n    icon: iconProp,\n    label,\n    onClick,\n    onDelete,\n    onKeyDown,\n    onKeyUp,\n    size = 'medium',\n    variant = 'filled',\n    tabIndex,\n    skipFocusWhenDisabled = false,\n    // TODO v6: Rename to `focusableWhenDisabled`.\n    slots = {},\n    slotProps = {},\n    ...other\n  } = props;\n  const chipRef = React.useRef(null);\n  const handleRef = useForkRef(chipRef, ref);\n  const handleDeleteIconClick = event => {\n    // Stop the event from bubbling up to the `Chip`\n    event.stopPropagation();\n    onDelete(event);\n  };\n  const handleKeyDown = event => {\n    // Ignore events from children of `Chip`.\n    if (event.currentTarget === event.target && isDeleteKeyboardEvent(event)) {\n      // Will be handled in keyUp, otherwise some browsers\n      // might init navigation\n      event.preventDefault();\n    }\n    if (onKeyDown) {\n      onKeyDown(event);\n    }\n  };\n  const handleKeyUp = event => {\n    // Ignore events from children of `Chip`.\n    if (event.currentTarget === event.target) {\n      if (onDelete && isDeleteKeyboardEvent(event)) {\n        onDelete(event);\n      }\n    }\n    if (onKeyUp) {\n      onKeyUp(event);\n    }\n  };\n  const clickable = clickableProp !== false && onClick ? true : clickableProp;\n  const component = clickable || onDelete ? ButtonBase : ComponentProp || 'div';\n  const ownerState = {\n    ...props,\n    component,\n    disabled,\n    size,\n    color,\n    iconColor: /*#__PURE__*/React.isValidElement(iconProp) ? iconProp.props.color || color : color,\n    onDelete: !!onDelete,\n    clickable,\n    variant\n  };\n  const classes = useUtilityClasses(ownerState);\n  const moreProps = component === ButtonBase ? {\n    component: ComponentProp || 'div',\n    focusVisibleClassName: classes.focusVisible,\n    ...(onDelete && {\n      disableRipple: true\n    })\n  } : {};\n  let deleteIcon = null;\n  if (onDelete) {\n    deleteIcon = deleteIconProp && /*#__PURE__*/React.isValidElement(deleteIconProp) ? (/*#__PURE__*/React.cloneElement(deleteIconProp, {\n      className: clsx(deleteIconProp.props.className, classes.deleteIcon),\n      onClick: handleDeleteIconClick\n    })) : /*#__PURE__*/_jsx(CancelIcon, {\n      className: classes.deleteIcon,\n      onClick: handleDeleteIconClick\n    });\n  }\n  let avatar = null;\n  if (avatarProp && /*#__PURE__*/React.isValidElement(avatarProp)) {\n    avatar = /*#__PURE__*/React.cloneElement(avatarProp, {\n      className: clsx(classes.avatar, avatarProp.props.className)\n    });\n  }\n  let icon = null;\n  if (iconProp && /*#__PURE__*/React.isValidElement(iconProp)) {\n    icon = /*#__PURE__*/React.cloneElement(iconProp, {\n      className: clsx(classes.icon, iconProp.props.className)\n    });\n  }\n  if (process.env.NODE_ENV !== 'production') {\n    if (avatar && icon) {\n      console.error('MUI: The Chip component can not handle the avatar ' + 'and the icon prop at the same time. Pick one.');\n    }\n  }\n  const externalForwardedProps = {\n    slots,\n    slotProps\n  };\n  const [RootSlot, rootProps] = useSlot('root', {\n    elementType: ChipRoot,\n    externalForwardedProps: {\n      ...externalForwardedProps,\n      ...other\n    },\n    ownerState,\n    // The `component` prop is preserved because `Chip` relies on it for internal logic. If `shouldForwardComponentProp` were `false`, `useSlot` would remove the `component` prop, potentially breaking the component's behavior.\n    shouldForwardComponentProp: true,\n    ref: handleRef,\n    className: clsx(classes.root, className),\n    additionalProps: {\n      disabled: clickable && disabled ? true : undefined,\n      tabIndex: skipFocusWhenDisabled && disabled ? -1 : tabIndex,\n      ...moreProps\n    },\n    getSlotProps: handlers => ({\n      ...handlers,\n      onClick: event => {\n        handlers.onClick?.(event);\n        onClick?.(event);\n      },\n      onKeyDown: event => {\n        handlers.onKeyDown?.(event);\n        handleKeyDown(event);\n      },\n      onKeyUp: event => {\n        handlers.onKeyUp?.(event);\n        handleKeyUp(event);\n      }\n    })\n  });\n  const [LabelSlot, labelProps] = useSlot('label', {\n    elementType: ChipLabel,\n    externalForwardedProps,\n    ownerState,\n    className: classes.label\n  });\n  return /*#__PURE__*/_jsxs(RootSlot, {\n    as: component,\n    ...rootProps,\n    children: [avatar || icon, /*#__PURE__*/_jsx(LabelSlot, {\n      ...labelProps,\n      children: label\n    }), deleteIcon]\n  });\n});\nprocess.env.NODE_ENV !== \"production\" ? Chip.propTypes /* remove-proptypes */ = {\n  // ┌────────────────────────────── Warning ──────────────────────────────┐\n  // │ These PropTypes are generated from the TypeScript type definitions. │\n  // │    To update them, edit the d.ts file and run `pnpm proptypes`.     │\n  // └─────────────────────────────────────────────────────────────────────┘\n  /**\n   * The Avatar element to display.\n   */\n  avatar: PropTypes.element,\n  /**\n   * This prop isn't supported.\n   * Use the `component` prop if you need to change the children structure.\n   */\n  children: unsupportedProp,\n  /**\n   * Override or extend the styles applied to the component.\n   */\n  classes: PropTypes.object,\n  /**\n   * @ignore\n   */\n  className: PropTypes.string,\n  /**\n   * If `true`, the chip will appear clickable, and will raise when pressed,\n   * even if the onClick prop is not defined.\n   * If `false`, the chip will not appear clickable, even if onClick prop is defined.\n   * This can be used, for example,\n   * along with the component prop to indicate an anchor Chip is clickable.\n   * Note: this controls the UI and does not affect the onClick event.\n   */\n  clickable: PropTypes.bool,\n  /**\n   * The color of the component.\n   * It supports both default and custom theme colors, which can be added as shown in the\n   * [palette customization guide](https://mui.com/material-ui/customization/palette/#custom-colors).\n   * @default 'default'\n   */\n  color: PropTypes /* @typescript-to-proptypes-ignore */.oneOfType([PropTypes.oneOf(['default', 'primary', 'secondary', 'error', 'info', 'success', 'warning']), PropTypes.string]),\n  /**\n   * The component used for the root node.\n   * Either a string to use a HTML element or a component.\n   */\n  component: PropTypes.elementType,\n  /**\n   * Override the default delete icon element. Shown only if `onDelete` is set.\n   */\n  deleteIcon: PropTypes.element,\n  /**\n   * If `true`, the component is disabled.\n   * @default false\n   */\n  disabled: PropTypes.bool,\n  /**\n   * Icon element.\n   */\n  icon: PropTypes.element,\n  /**\n   * The content of the component.\n   */\n  label: PropTypes.node,\n  /**\n   * @ignore\n   */\n  onClick: PropTypes.func,\n  /**\n   * Callback fired when the delete icon is clicked.\n   * If set, the delete icon will be shown.\n   */\n  onDelete: PropTypes.func,\n  /**\n   * @ignore\n   */\n  onKeyDown: PropTypes.func,\n  /**\n   * @ignore\n   */\n  onKeyUp: PropTypes.func,\n  /**\n   * The size of the component.\n   * @default 'medium'\n   */\n  size: PropTypes /* @typescript-to-proptypes-ignore */.oneOfType([PropTypes.oneOf(['medium', 'small']), PropTypes.string]),\n  /**\n   * If `true`, allows the disabled chip to escape focus.\n   * If `false`, allows the disabled chip to receive focus.\n   * @default false\n   */\n  skipFocusWhenDisabled: PropTypes.bool,\n  /**\n   * The props used for each slot inside.\n   * @default {}\n   */\n  slotProps: PropTypes.shape({\n    label: PropTypes.oneOfType([PropTypes.func, PropTypes.object]),\n    root: PropTypes.oneOfType([PropTypes.func, PropTypes.object])\n  }),\n  /**\n   * The components used for each slot inside.\n   * @default {}\n   */\n  slots: PropTypes.shape({\n    label: PropTypes.elementType,\n    root: PropTypes.elementType\n  }),\n  /**\n   * The system prop that allows defining system overrides as well as additional CSS styles.\n   */\n  sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object]),\n  /**\n   * @ignore\n   */\n  tabIndex: PropTypes.number,\n  /**\n   * The variant to use.\n   * @default 'filled'\n   */\n  variant: PropTypes /* @typescript-to-proptypes-ignore */.oneOfType([PropTypes.oneOf(['filled', 'outlined']), PropTypes.string])\n} : void 0;\nexport default Chip;","'use client';\n\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport debounce from '@mui/utils/debounce';\nimport useForkRef from '@mui/utils/useForkRef';\nimport useEnhancedEffect from '@mui/utils/useEnhancedEffect';\nimport useEventCallback from '@mui/utils/useEventCallback';\nimport ownerWindow from '@mui/utils/ownerWindow';\nimport { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nfunction getStyleValue(value) {\n  return parseInt(value, 10) || 0;\n}\nconst styles = {\n  shadow: {\n    // Visibility needed to hide the extra text area on iPads\n    visibility: 'hidden',\n    // Remove from the content flow\n    position: 'absolute',\n    // Ignore the scrollbar width\n    overflow: 'hidden',\n    height: 0,\n    top: 0,\n    left: 0,\n    // Create a new layer, increase the isolation of the computed values\n    transform: 'translateZ(0)'\n  }\n};\nfunction isObjectEmpty(object) {\n  // eslint-disable-next-line\n  for (const _ in object) {\n    return false;\n  }\n  return true;\n}\nfunction isEmpty(obj) {\n  return isObjectEmpty(obj) || obj.outerHeightStyle === 0 && !obj.overflowing;\n}\n\n/**\n *\n * Demos:\n *\n * - [Textarea Autosize](https://v7.mui.com/material-ui/react-textarea-autosize/)\n *\n * API:\n *\n * - [TextareaAutosize API](https://v7.mui.com/material-ui/api/textarea-autosize/)\n */\nconst TextareaAutosize = /*#__PURE__*/React.forwardRef(function TextareaAutosize(props, forwardedRef) {\n  const {\n    onChange,\n    maxRows,\n    minRows = 1,\n    style,\n    value,\n    ...other\n  } = props;\n  const {\n    current: isControlled\n  } = React.useRef(value != null);\n  const textareaRef = React.useRef(null);\n  const handleRef = useForkRef(forwardedRef, textareaRef);\n  const heightRef = React.useRef(null);\n  const hiddenTextareaRef = React.useRef(null);\n  const calculateTextareaStyles = React.useCallback(() => {\n    const textarea = textareaRef.current;\n    const hiddenTextarea = hiddenTextareaRef.current;\n    if (!textarea || !hiddenTextarea) {\n      return undefined;\n    }\n    const containerWindow = ownerWindow(textarea);\n    const computedStyle = containerWindow.getComputedStyle(textarea);\n\n    // If input's width is shrunk and it's not visible, don't sync height.\n    if (computedStyle.width === '0px') {\n      return {\n        outerHeightStyle: 0,\n        overflowing: false\n      };\n    }\n    hiddenTextarea.style.width = computedStyle.width;\n    hiddenTextarea.value = textarea.value || props.placeholder || 'x';\n    if (hiddenTextarea.value.slice(-1) === '\\n') {\n      // Certain fonts which overflow the line height will cause the textarea\n      // to report a different scrollHeight depending on whether the last line\n      // is empty. Make it non-empty to avoid this issue.\n      hiddenTextarea.value += ' ';\n    }\n    const boxSizing = computedStyle.boxSizing;\n    const padding = getStyleValue(computedStyle.paddingBottom) + getStyleValue(computedStyle.paddingTop);\n    const border = getStyleValue(computedStyle.borderBottomWidth) + getStyleValue(computedStyle.borderTopWidth);\n\n    // The height of the inner content\n    const innerHeight = hiddenTextarea.scrollHeight;\n\n    // Measure height of a textarea with a single row\n    hiddenTextarea.value = 'x';\n    const singleRowHeight = hiddenTextarea.scrollHeight;\n\n    // The height of the outer content\n    let outerHeight = innerHeight;\n    if (minRows) {\n      outerHeight = Math.max(Number(minRows) * singleRowHeight, outerHeight);\n    }\n    if (maxRows) {\n      outerHeight = Math.min(Number(maxRows) * singleRowHeight, outerHeight);\n    }\n    outerHeight = Math.max(outerHeight, singleRowHeight);\n\n    // Take the box sizing into account for applying this value as a style.\n    const outerHeightStyle = outerHeight + (boxSizing === 'border-box' ? padding + border : 0);\n    const overflowing = Math.abs(outerHeight - innerHeight) <= 1;\n    return {\n      outerHeightStyle,\n      overflowing\n    };\n  }, [maxRows, minRows, props.placeholder]);\n  const didHeightChange = useEventCallback(() => {\n    const textarea = textareaRef.current;\n    const textareaStyles = calculateTextareaStyles();\n    if (!textarea || !textareaStyles || isEmpty(textareaStyles)) {\n      return false;\n    }\n    const outerHeightStyle = textareaStyles.outerHeightStyle;\n    return heightRef.current != null && heightRef.current !== outerHeightStyle;\n  });\n  const syncHeight = React.useCallback(() => {\n    const textarea = textareaRef.current;\n    const textareaStyles = calculateTextareaStyles();\n    if (!textarea || !textareaStyles || isEmpty(textareaStyles)) {\n      return;\n    }\n    const outerHeightStyle = textareaStyles.outerHeightStyle;\n    if (heightRef.current !== outerHeightStyle) {\n      heightRef.current = outerHeightStyle;\n      textarea.style.height = `${outerHeightStyle}px`;\n    }\n    textarea.style.overflow = textareaStyles.overflowing ? 'hidden' : '';\n  }, [calculateTextareaStyles]);\n  const frameRef = React.useRef(-1);\n  useEnhancedEffect(() => {\n    const debouncedHandleResize = debounce(syncHeight);\n    const textarea = textareaRef?.current;\n    if (!textarea) {\n      return undefined;\n    }\n    const containerWindow = ownerWindow(textarea);\n    containerWindow.addEventListener('resize', debouncedHandleResize);\n    let resizeObserver;\n    if (typeof ResizeObserver !== 'undefined') {\n      resizeObserver = new ResizeObserver(() => {\n        if (didHeightChange()) {\n          // avoid \"ResizeObserver loop completed with undelivered notifications\" error\n          // by temporarily unobserving the textarea element while manipulating the height\n          // and reobserving one frame later\n          resizeObserver.unobserve(textarea);\n          cancelAnimationFrame(frameRef.current);\n          syncHeight();\n          frameRef.current = requestAnimationFrame(() => {\n            resizeObserver.observe(textarea);\n          });\n        }\n      });\n      resizeObserver.observe(textarea);\n    }\n    return () => {\n      debouncedHandleResize.clear();\n      cancelAnimationFrame(frameRef.current);\n      containerWindow.removeEventListener('resize', debouncedHandleResize);\n      if (resizeObserver) {\n        resizeObserver.disconnect();\n      }\n    };\n  }, [calculateTextareaStyles, syncHeight, didHeightChange]);\n  useEnhancedEffect(() => {\n    syncHeight();\n  });\n  const handleChange = event => {\n    if (!isControlled) {\n      syncHeight();\n    }\n    const textarea = event.target;\n    const countOfCharacters = textarea.value.length;\n    const isLastCharacterNewLine = textarea.value.endsWith('\\n');\n    const isEndOfTheLine = textarea.selectionStart === countOfCharacters;\n\n    // Set the cursor position to the very end of the text.\n    if (isLastCharacterNewLine && isEndOfTheLine) {\n      textarea.setSelectionRange(countOfCharacters, countOfCharacters);\n    }\n    if (onChange) {\n      onChange(event);\n    }\n  };\n  return /*#__PURE__*/_jsxs(React.Fragment, {\n    children: [/*#__PURE__*/_jsx(\"textarea\", {\n      value: value,\n      onChange: handleChange,\n      ref: handleRef\n      // Apply the rows prop to get a \"correct\" first SSR paint\n      ,\n      rows: minRows,\n      style: style,\n      ...other\n    }), /*#__PURE__*/_jsx(\"textarea\", {\n      \"aria-hidden\": true,\n      className: props.className,\n      readOnly: true,\n      ref: hiddenTextareaRef,\n      tabIndex: -1,\n      style: {\n        ...styles.shadow,\n        ...style,\n        paddingTop: 0,\n        paddingBottom: 0\n      }\n    })]\n  });\n});\nprocess.env.NODE_ENV !== \"production\" ? TextareaAutosize.propTypes /* remove-proptypes */ = {\n  // ┌────────────────────────────── Warning ──────────────────────────────┐\n  // │ These PropTypes are generated from the TypeScript type definitions. │\n  // │ To update them, edit the TypeScript types and run `pnpm proptypes`. │\n  // └─────────────────────────────────────────────────────────────────────┘\n  /**\n   * @ignore\n   */\n  className: PropTypes.string,\n  /**\n   * Maximum number of rows to display.\n   */\n  maxRows: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n  /**\n   * Minimum number of rows to display.\n   * @default 1\n   */\n  minRows: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n  /**\n   * @ignore\n   */\n  onChange: PropTypes.func,\n  /**\n   * @ignore\n   */\n  placeholder: PropTypes.string,\n  /**\n   * @ignore\n   */\n  style: PropTypes.object,\n  /**\n   * @ignore\n   */\n  value: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.string), PropTypes.number, PropTypes.string])\n} : void 0;\nexport default TextareaAutosize;","export default function formControlState({\n  props,\n  states,\n  muiFormControl\n}) {\n  return states.reduce((acc, state) => {\n    acc[state] = props[state];\n    if (muiFormControl) {\n      if (typeof props[state] === 'undefined') {\n        acc[state] = muiFormControl[state];\n      }\n    }\n    return acc;\n  }, {});\n}","'use client';\n\nimport * as React from 'react';\n/**\n * @ignore - internal component.\n */\nconst FormControlContext = /*#__PURE__*/React.createContext(undefined);\nif (process.env.NODE_ENV !== 'production') {\n  FormControlContext.displayName = 'FormControlContext';\n}\nexport default FormControlContext;","'use client';\n\nimport * as React from 'react';\nimport FormControlContext from \"./FormControlContext.js\";\nexport default function useFormControl() {\n  return React.useContext(FormControlContext);\n}","// Supports determination of isControlled().\n// Controlled input accepts its current value as a prop.\n//\n// @see https://facebook.github.io/react/docs/forms.html#controlled-components\n// @param value\n// @returns {boolean} true if string (including '') or number (including zero)\nexport function hasValue(value) {\n  return value != null && !(Array.isArray(value) && value.length === 0);\n}\n\n// Determine if field is empty or filled.\n// Response determines if label is presented above field or as placeholder.\n//\n// @param obj\n// @param SSR\n// @returns {boolean} False when not present or empty string.\n//                    True when any number or string with length.\nexport function isFilled(obj, SSR = false) {\n  return obj && (hasValue(obj.value) && obj.value !== '' || SSR && hasValue(obj.defaultValue) && obj.defaultValue !== '');\n}\n\n// Determine if an Input is adorned on start.\n// It's corresponding to the left with LTR.\n//\n// @param obj\n// @returns {boolean} False when no adornments.\n//                    True when adorned at the start.\nexport function isAdornedStart(obj) {\n  return obj.startAdornment;\n}","import generateUtilityClasses from '@mui/utils/generateUtilityClasses';\nimport generateUtilityClass from '@mui/utils/generateUtilityClass';\nexport function getInputBaseUtilityClass(slot) {\n  return generateUtilityClass('MuiInputBase', slot);\n}\nconst inputBaseClasses = generateUtilityClasses('MuiInputBase', ['root', 'formControl', 'focused', 'disabled', 'adornedStart', 'adornedEnd', 'error', 'sizeSmall', 'multiline', 'colorSecondary', 'fullWidth', 'hiddenLabel', 'readOnly', 'input', 'inputSizeSmall', 'inputMultiline', 'inputTypeSearch', 'inputAdornedStart', 'inputAdornedEnd', 'inputHiddenLabel']);\nexport default inputBaseClasses;","'use client';\n\nimport _formatErrorMessage from \"@mui/utils/formatMuiErrorMessage\";\nvar _InputGlobalStyles;\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport elementTypeAcceptingRef from '@mui/utils/elementTypeAcceptingRef';\nimport refType from '@mui/utils/refType';\nimport composeClasses from '@mui/utils/composeClasses';\nimport isHostComponent from '@mui/utils/isHostComponent';\nimport TextareaAutosize from \"../TextareaAutosize/index.js\";\nimport formControlState from \"../FormControl/formControlState.js\";\nimport FormControlContext from \"../FormControl/FormControlContext.js\";\nimport useFormControl from \"../FormControl/useFormControl.js\";\nimport { styled, globalCss } from \"../zero-styled/index.js\";\nimport memoTheme from \"../utils/memoTheme.js\";\nimport { useDefaultProps } from \"../DefaultPropsProvider/index.js\";\nimport capitalize from \"../utils/capitalize.js\";\nimport useForkRef from \"../utils/useForkRef.js\";\nimport useEnhancedEffect from \"../utils/useEnhancedEffect.js\";\nimport { isFilled } from \"./utils.js\";\nimport inputBaseClasses, { getInputBaseUtilityClass } from \"./inputBaseClasses.js\";\nimport { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nexport const rootOverridesResolver = (props, styles) => {\n  const {\n    ownerState\n  } = props;\n  return [styles.root, ownerState.formControl && styles.formControl, ownerState.startAdornment && styles.adornedStart, ownerState.endAdornment && styles.adornedEnd, ownerState.error && styles.error, ownerState.size === 'small' && styles.sizeSmall, ownerState.multiline && styles.multiline, ownerState.color && styles[`color${capitalize(ownerState.color)}`], ownerState.fullWidth && styles.fullWidth, ownerState.hiddenLabel && styles.hiddenLabel];\n};\nexport const inputOverridesResolver = (props, styles) => {\n  const {\n    ownerState\n  } = props;\n  return [styles.input, ownerState.size === 'small' && styles.inputSizeSmall, ownerState.multiline && styles.inputMultiline, ownerState.type === 'search' && styles.inputTypeSearch, ownerState.startAdornment && styles.inputAdornedStart, ownerState.endAdornment && styles.inputAdornedEnd, ownerState.hiddenLabel && styles.inputHiddenLabel];\n};\nconst useUtilityClasses = ownerState => {\n  const {\n    classes,\n    color,\n    disabled,\n    error,\n    endAdornment,\n    focused,\n    formControl,\n    fullWidth,\n    hiddenLabel,\n    multiline,\n    readOnly,\n    size,\n    startAdornment,\n    type\n  } = ownerState;\n  const slots = {\n    root: ['root', `color${capitalize(color)}`, disabled && 'disabled', error && 'error', fullWidth && 'fullWidth', focused && 'focused', formControl && 'formControl', size && size !== 'medium' && `size${capitalize(size)}`, multiline && 'multiline', startAdornment && 'adornedStart', endAdornment && 'adornedEnd', hiddenLabel && 'hiddenLabel', readOnly && 'readOnly'],\n    input: ['input', disabled && 'disabled', type === 'search' && 'inputTypeSearch', multiline && 'inputMultiline', size === 'small' && 'inputSizeSmall', hiddenLabel && 'inputHiddenLabel', startAdornment && 'inputAdornedStart', endAdornment && 'inputAdornedEnd', readOnly && 'readOnly']\n  };\n  return composeClasses(slots, getInputBaseUtilityClass, classes);\n};\nexport const InputBaseRoot = styled('div', {\n  name: 'MuiInputBase',\n  slot: 'Root',\n  overridesResolver: rootOverridesResolver\n})(memoTheme(({\n  theme\n}) => ({\n  ...theme.typography.body1,\n  color: (theme.vars || theme).palette.text.primary,\n  lineHeight: '1.4375em',\n  // 23px\n  boxSizing: 'border-box',\n  // Prevent padding issue with fullWidth.\n  position: 'relative',\n  cursor: 'text',\n  display: 'inline-flex',\n  alignItems: 'center',\n  [`&.${inputBaseClasses.disabled}`]: {\n    color: (theme.vars || theme).palette.text.disabled,\n    cursor: 'default'\n  },\n  variants: [{\n    props: ({\n      ownerState\n    }) => ownerState.multiline,\n    style: {\n      padding: '4px 0 5px'\n    }\n  }, {\n    props: ({\n      ownerState,\n      size\n    }) => ownerState.multiline && size === 'small',\n    style: {\n      paddingTop: 1\n    }\n  }, {\n    props: ({\n      ownerState\n    }) => ownerState.fullWidth,\n    style: {\n      width: '100%'\n    }\n  }]\n})));\nexport const InputBaseInput = styled('input', {\n  name: 'MuiInputBase',\n  slot: 'Input',\n  overridesResolver: inputOverridesResolver\n})(memoTheme(({\n  theme\n}) => {\n  const light = theme.palette.mode === 'light';\n  const placeholder = {\n    color: 'currentColor',\n    ...(theme.vars ? {\n      opacity: theme.vars.opacity.inputPlaceholder\n    } : {\n      opacity: light ? 0.42 : 0.5\n    }),\n    transition: theme.transitions.create('opacity', {\n      duration: theme.transitions.duration.shorter\n    })\n  };\n  const placeholderHidden = {\n    opacity: '0 !important'\n  };\n  const placeholderVisible = theme.vars ? {\n    opacity: theme.vars.opacity.inputPlaceholder\n  } : {\n    opacity: light ? 0.42 : 0.5\n  };\n  return {\n    font: 'inherit',\n    letterSpacing: 'inherit',\n    color: 'currentColor',\n    padding: '4px 0 5px',\n    border: 0,\n    boxSizing: 'content-box',\n    background: 'none',\n    height: '1.4375em',\n    // Reset 23pxthe native input line-height\n    margin: 0,\n    // Reset for Safari\n    WebkitTapHighlightColor: 'transparent',\n    display: 'block',\n    // Make the flex item shrink with Firefox\n    minWidth: 0,\n    width: '100%',\n    '&::-webkit-input-placeholder': placeholder,\n    '&::-moz-placeholder': placeholder,\n    // Firefox 19+\n    '&::-ms-input-placeholder': placeholder,\n    // Edge\n    '&:focus': {\n      outline: 0\n    },\n    // Reset Firefox invalid required input style\n    '&:invalid': {\n      boxShadow: 'none'\n    },\n    '&::-webkit-search-decoration': {\n      // Remove the padding when type=search.\n      WebkitAppearance: 'none'\n    },\n    // Show and hide the placeholder logic\n    [`label[data-shrink=false] + .${inputBaseClasses.formControl} &`]: {\n      '&::-webkit-input-placeholder': placeholderHidden,\n      '&::-moz-placeholder': placeholderHidden,\n      // Firefox 19+\n      '&::-ms-input-placeholder': placeholderHidden,\n      // Edge\n      '&:focus::-webkit-input-placeholder': placeholderVisible,\n      '&:focus::-moz-placeholder': placeholderVisible,\n      // Firefox 19+\n      '&:focus::-ms-input-placeholder': placeholderVisible // Edge\n    },\n    [`&.${inputBaseClasses.disabled}`]: {\n      opacity: 1,\n      // Reset iOS opacity\n      WebkitTextFillColor: (theme.vars || theme).palette.text.disabled // Fix opacity Safari bug\n    },\n    variants: [{\n      props: ({\n        ownerState\n      }) => !ownerState.disableInjectingGlobalStyles,\n      style: {\n        animationName: 'mui-auto-fill-cancel',\n        animationDuration: '10ms',\n        '&:-webkit-autofill': {\n          animationDuration: '5000s',\n          animationName: 'mui-auto-fill'\n        }\n      }\n    }, {\n      props: {\n        size: 'small'\n      },\n      style: {\n        paddingTop: 1\n      }\n    }, {\n      props: ({\n        ownerState\n      }) => ownerState.multiline,\n      style: {\n        height: 'auto',\n        resize: 'none',\n        padding: 0,\n        paddingTop: 0\n      }\n    }, {\n      props: {\n        type: 'search'\n      },\n      style: {\n        MozAppearance: 'textfield' // Improve type search style.\n      }\n    }]\n  };\n}));\nconst InputGlobalStyles = globalCss({\n  '@keyframes mui-auto-fill': {\n    from: {\n      display: 'block'\n    }\n  },\n  '@keyframes mui-auto-fill-cancel': {\n    from: {\n      display: 'block'\n    }\n  }\n});\n\n/**\n * `InputBase` contains as few styles as possible.\n * It aims to be a simple building block for creating an input.\n * It contains a load of style reset and some state logic.\n */\nconst InputBase = /*#__PURE__*/React.forwardRef(function InputBase(inProps, ref) {\n  const props = useDefaultProps({\n    props: inProps,\n    name: 'MuiInputBase'\n  });\n  const {\n    'aria-describedby': ariaDescribedby,\n    autoComplete,\n    autoFocus,\n    className,\n    color,\n    components = {},\n    componentsProps = {},\n    defaultValue,\n    disabled,\n    disableInjectingGlobalStyles,\n    endAdornment,\n    error,\n    fullWidth = false,\n    id,\n    inputComponent = 'input',\n    inputProps: inputPropsProp = {},\n    inputRef: inputRefProp,\n    margin,\n    maxRows,\n    minRows,\n    multiline = false,\n    name,\n    onBlur,\n    onChange,\n    onClick,\n    onFocus,\n    onKeyDown,\n    onKeyUp,\n    placeholder,\n    readOnly,\n    renderSuffix,\n    rows,\n    size,\n    slotProps = {},\n    slots = {},\n    startAdornment,\n    type = 'text',\n    value: valueProp,\n    ...other\n  } = props;\n  const value = inputPropsProp.value != null ? inputPropsProp.value : valueProp;\n  const {\n    current: isControlled\n  } = React.useRef(value != null);\n  const inputRef = React.useRef();\n  const handleInputRefWarning = React.useCallback(instance => {\n    if (process.env.NODE_ENV !== 'production') {\n      if (instance && instance.nodeName !== 'INPUT' && !instance.focus) {\n        console.error(['MUI: You have provided a `inputComponent` to the input component', 'that does not correctly handle the `ref` prop.', 'Make sure the `ref` prop is called with a HTMLInputElement.'].join('\\n'));\n      }\n    }\n  }, []);\n  const handleInputRef = useForkRef(inputRef, inputRefProp, inputPropsProp.ref, handleInputRefWarning);\n  const [focused, setFocused] = React.useState(false);\n  const muiFormControl = useFormControl();\n  if (process.env.NODE_ENV !== 'production') {\n    // TODO: uncomment once we enable eslint-plugin-react-compiler // eslint-disable-next-line react-compiler/react-compiler\n    // eslint-disable-next-line react-hooks/rules-of-hooks\n    React.useEffect(() => {\n      if (muiFormControl) {\n        return muiFormControl.registerEffect();\n      }\n      return undefined;\n    }, [muiFormControl]);\n  }\n  const fcs = formControlState({\n    props,\n    muiFormControl,\n    states: ['color', 'disabled', 'error', 'hiddenLabel', 'size', 'required', 'filled']\n  });\n  fcs.focused = muiFormControl ? muiFormControl.focused : focused;\n\n  // The blur won't fire when the disabled state is set on a focused input.\n  // We need to book keep the focused state manually.\n  React.useEffect(() => {\n    if (!muiFormControl && disabled && focused) {\n      setFocused(false);\n      if (onBlur) {\n        onBlur();\n      }\n    }\n  }, [muiFormControl, disabled, focused, onBlur]);\n  const onFilled = muiFormControl && muiFormControl.onFilled;\n  const onEmpty = muiFormControl && muiFormControl.onEmpty;\n  const checkDirty = React.useCallback(obj => {\n    if (isFilled(obj)) {\n      if (onFilled) {\n        onFilled();\n      }\n    } else if (onEmpty) {\n      onEmpty();\n    }\n  }, [onFilled, onEmpty]);\n  useEnhancedEffect(() => {\n    if (isControlled) {\n      checkDirty({\n        value\n      });\n    }\n  }, [value, checkDirty, isControlled]);\n  const handleFocus = event => {\n    if (onFocus) {\n      onFocus(event);\n    }\n    if (inputPropsProp.onFocus) {\n      inputPropsProp.onFocus(event);\n    }\n    if (muiFormControl && muiFormControl.onFocus) {\n      muiFormControl.onFocus(event);\n    } else {\n      setFocused(true);\n    }\n  };\n  const handleBlur = event => {\n    if (onBlur) {\n      onBlur(event);\n    }\n    if (inputPropsProp.onBlur) {\n      inputPropsProp.onBlur(event);\n    }\n    if (muiFormControl && muiFormControl.onBlur) {\n      muiFormControl.onBlur(event);\n    } else {\n      setFocused(false);\n    }\n  };\n  const handleChange = (event, ...args) => {\n    if (!isControlled) {\n      const element = event.target || inputRef.current;\n      if (element == null) {\n        throw new Error(process.env.NODE_ENV !== \"production\" ? 'MUI: Expected valid input target. ' + 'Did you use a custom `inputComponent` and forget to forward refs? ' + 'See https://mui.com/r/input-component-ref-interface for more info.' : _formatErrorMessage(1));\n      }\n      checkDirty({\n        value: element.value\n      });\n    }\n    if (inputPropsProp.onChange) {\n      inputPropsProp.onChange(event, ...args);\n    }\n\n    // Perform in the willUpdate\n    if (onChange) {\n      onChange(event, ...args);\n    }\n  };\n\n  // Check the input state on mount, in case it was filled by the user\n  // or auto filled by the browser before the hydration (for SSR).\n  React.useEffect(() => {\n    checkDirty(inputRef.current);\n    // TODO: uncomment once we enable eslint-plugin-react-compiler // eslint-disable-next-line react-compiler/react-compiler\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, []);\n  const handleClick = event => {\n    if (inputRef.current && event.currentTarget === event.target) {\n      inputRef.current.focus();\n    }\n    if (onClick) {\n      onClick(event);\n    }\n  };\n  let InputComponent = inputComponent;\n  let inputProps = inputPropsProp;\n  if (multiline && InputComponent === 'input') {\n    if (rows) {\n      if (process.env.NODE_ENV !== 'production') {\n        if (minRows || maxRows) {\n          console.warn('MUI: You can not use the `minRows` or `maxRows` props when the input `rows` prop is set.');\n        }\n      }\n      inputProps = {\n        type: undefined,\n        minRows: rows,\n        maxRows: rows,\n        ...inputProps\n      };\n    } else {\n      inputProps = {\n        type: undefined,\n        maxRows,\n        minRows,\n        ...inputProps\n      };\n    }\n    InputComponent = TextareaAutosize;\n  }\n  const handleAutoFill = event => {\n    // Provide a fake value as Chrome might not let you access it for security reasons.\n    checkDirty(event.animationName === 'mui-auto-fill-cancel' ? inputRef.current : {\n      value: 'x'\n    });\n  };\n  React.useEffect(() => {\n    if (muiFormControl) {\n      muiFormControl.setAdornedStart(Boolean(startAdornment));\n    }\n  }, [muiFormControl, startAdornment]);\n  const ownerState = {\n    ...props,\n    color: fcs.color || 'primary',\n    disabled: fcs.disabled,\n    endAdornment,\n    error: fcs.error,\n    focused: fcs.focused,\n    formControl: muiFormControl,\n    fullWidth,\n    hiddenLabel: fcs.hiddenLabel,\n    multiline,\n    size: fcs.size,\n    startAdornment,\n    type\n  };\n  const classes = useUtilityClasses(ownerState);\n  const Root = slots.root || components.Root || InputBaseRoot;\n  const rootProps = slotProps.root || componentsProps.root || {};\n  const Input = slots.input || components.Input || InputBaseInput;\n  inputProps = {\n    ...inputProps,\n    ...(slotProps.input ?? componentsProps.input)\n  };\n  return /*#__PURE__*/_jsxs(React.Fragment, {\n    children: [!disableInjectingGlobalStyles && typeof InputGlobalStyles === 'function' && (// For Emotion/Styled-components, InputGlobalStyles will be a function\n    // For Pigment CSS, this has no effect because the InputGlobalStyles will be null.\n    _InputGlobalStyles || (_InputGlobalStyles = /*#__PURE__*/_jsx(InputGlobalStyles, {}))), /*#__PURE__*/_jsxs(Root, {\n      ...rootProps,\n      ref: ref,\n      onClick: handleClick,\n      ...other,\n      ...(!isHostComponent(Root) && {\n        ownerState: {\n          ...ownerState,\n          ...rootProps.ownerState\n        }\n      }),\n      className: clsx(classes.root, rootProps.className, className, readOnly && 'MuiInputBase-readOnly'),\n      children: [startAdornment, /*#__PURE__*/_jsx(FormControlContext.Provider, {\n        value: null,\n        children: /*#__PURE__*/_jsx(Input, {\n          \"aria-invalid\": fcs.error,\n          \"aria-describedby\": ariaDescribedby,\n          autoComplete: autoComplete,\n          autoFocus: autoFocus,\n          defaultValue: defaultValue,\n          disabled: fcs.disabled,\n          id: id,\n          onAnimationStart: handleAutoFill,\n          name: name,\n          placeholder: placeholder,\n          readOnly: readOnly,\n          required: fcs.required,\n          rows: rows,\n          value: value,\n          onKeyDown: onKeyDown,\n          onKeyUp: onKeyUp,\n          type: type,\n          ...inputProps,\n          ...(!isHostComponent(Input) && {\n            as: InputComponent,\n            ownerState: {\n              ...ownerState,\n              ...inputProps.ownerState\n            }\n          }),\n          ref: handleInputRef,\n          className: clsx(classes.input, inputProps.className, readOnly && 'MuiInputBase-readOnly'),\n          onBlur: handleBlur,\n          onChange: handleChange,\n          onFocus: handleFocus\n        })\n      }), endAdornment, renderSuffix ? renderSuffix({\n        ...fcs,\n        startAdornment\n      }) : null]\n    })]\n  });\n});\nprocess.env.NODE_ENV !== \"production\" ? InputBase.propTypes /* remove-proptypes */ = {\n  // ┌────────────────────────────── Warning ──────────────────────────────┐\n  // │ These PropTypes are generated from the TypeScript type definitions. │\n  // │    To update them, edit the d.ts file and run `pnpm proptypes`.     │\n  // └─────────────────────────────────────────────────────────────────────┘\n  /**\n   * @ignore\n   */\n  'aria-describedby': PropTypes.string,\n  /**\n   * This prop helps users to fill forms faster, especially on mobile devices.\n   * The name can be confusing, as it's more like an autofill.\n   * You can learn more about it [following the specification](https://html.spec.whatwg.org/multipage/form-control-infrastructure.html#autofill).\n   */\n  autoComplete: PropTypes.string,\n  /**\n   * If `true`, the `input` element is focused during the first mount.\n   */\n  autoFocus: PropTypes.bool,\n  /**\n   * Override or extend the styles applied to the component.\n   */\n  classes: PropTypes.object,\n  /**\n   * @ignore\n   */\n  className: PropTypes.string,\n  /**\n   * The color of the component.\n   * It supports both default and custom theme colors, which can be added as shown in the\n   * [palette customization guide](https://mui.com/material-ui/customization/palette/#custom-colors).\n   * The prop defaults to the value (`'primary'`) inherited from the parent FormControl component.\n   */\n  color: PropTypes /* @typescript-to-proptypes-ignore */.oneOfType([PropTypes.oneOf(['primary', 'secondary', 'error', 'info', 'success', 'warning']), PropTypes.string]),\n  /**\n   * The components used for each slot inside.\n   *\n   * @deprecated use the `slots` prop instead. This prop will be removed in a future major release. See [Migrating from deprecated APIs](https://mui.com/material-ui/migration/migrating-from-deprecated-apis/) for more details.\n   *\n   * @default {}\n   */\n  components: PropTypes.shape({\n    Input: PropTypes.elementType,\n    Root: PropTypes.elementType\n  }),\n  /**\n   * The extra props for the slot components.\n   * You can override the existing props or add new ones.\n   *\n   * @deprecated use the `slotProps` prop instead. This prop will be removed in a future major release. See [Migrating from deprecated APIs](https://mui.com/material-ui/migration/migrating-from-deprecated-apis/) for more details.\n   *\n   * @default {}\n   */\n  componentsProps: PropTypes.shape({\n    input: PropTypes.object,\n    root: PropTypes.object\n  }),\n  /**\n   * The default value. Use when the component is not controlled.\n   */\n  defaultValue: PropTypes.any,\n  /**\n   * If `true`, the component is disabled.\n   * The prop defaults to the value (`false`) inherited from the parent FormControl component.\n   */\n  disabled: PropTypes.bool,\n  /**\n   * If `true`, GlobalStyles for the auto-fill keyframes will not be injected/removed on mount/unmount. Make sure to inject them at the top of your application.\n   * This option is intended to help with boosting the initial rendering performance if you are loading a big amount of Input components at once.\n   * @default false\n   */\n  disableInjectingGlobalStyles: PropTypes.bool,\n  /**\n   * End `InputAdornment` for this component.\n   */\n  endAdornment: PropTypes.node,\n  /**\n   * If `true`, the `input` will indicate an error.\n   * The prop defaults to the value (`false`) inherited from the parent FormControl component.\n   */\n  error: PropTypes.bool,\n  /**\n   * If `true`, the `input` will take up the full width of its container.\n   * @default false\n   */\n  fullWidth: PropTypes.bool,\n  /**\n   * The id of the `input` element.\n   */\n  id: PropTypes.string,\n  /**\n   * The component used for the `input` element.\n   * Either a string to use a HTML element or a component.\n   * @default 'input'\n   */\n  inputComponent: elementTypeAcceptingRef,\n  /**\n   * [Attributes](https://developer.mozilla.org/en-US/docs/Web/HTML/Reference/Elements/input#attributes) applied to the `input` element.\n   * @default {}\n   */\n  inputProps: PropTypes.object,\n  /**\n   * Pass a ref to the `input` element.\n   */\n  inputRef: refType,\n  /**\n   * If `dense`, will adjust vertical spacing. This is normally obtained via context from\n   * FormControl.\n   * The prop defaults to the value (`'none'`) inherited from the parent FormControl component.\n   */\n  margin: PropTypes.oneOf(['dense', 'none']),\n  /**\n   * Maximum number of rows to display when multiline option is set to true.\n   */\n  maxRows: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n  /**\n   * Minimum number of rows to display when multiline option is set to true.\n   */\n  minRows: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n  /**\n   * If `true`, a [TextareaAutosize](https://mui.com/material-ui/react-textarea-autosize/) element is rendered.\n   * @default false\n   */\n  multiline: PropTypes.bool,\n  /**\n   * Name attribute of the `input` element.\n   */\n  name: PropTypes.string,\n  /**\n   * Callback fired when the `input` is blurred.\n   *\n   * Notice that the first argument (event) might be undefined.\n   */\n  onBlur: PropTypes.func,\n  /**\n   * Callback fired when the value is changed.\n   *\n   * @param {React.ChangeEvent<HTMLTextAreaElement | HTMLInputElement>} event The event source of the callback.\n   * You can pull out the new value by accessing `event.target.value` (string).\n   */\n  onChange: PropTypes.func,\n  /**\n   * @ignore\n   */\n  onClick: PropTypes.func,\n  /**\n   * @ignore\n   */\n  onFocus: PropTypes.func,\n  /**\n   * Callback fired when the `input` doesn't satisfy its constraints.\n   */\n  onInvalid: PropTypes.func,\n  /**\n   * @ignore\n   */\n  onKeyDown: PropTypes.func,\n  /**\n   * @ignore\n   */\n  onKeyUp: PropTypes.func,\n  /**\n   * The short hint displayed in the `input` before the user enters a value.\n   */\n  placeholder: PropTypes.string,\n  /**\n   * It prevents the user from changing the value of the field\n   * (not from interacting with the field).\n   */\n  readOnly: PropTypes.bool,\n  /**\n   * @ignore\n   */\n  renderSuffix: PropTypes.func,\n  /**\n   * If `true`, the `input` element is required.\n   * The prop defaults to the value (`false`) inherited from the parent FormControl component.\n   */\n  required: PropTypes.bool,\n  /**\n   * Number of rows to display when multiline option is set to true.\n   */\n  rows: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n  /**\n   * The size of the component.\n   */\n  size: PropTypes /* @typescript-to-proptypes-ignore */.oneOfType([PropTypes.oneOf(['medium', 'small']), PropTypes.string]),\n  /**\n   * The extra props for the slot components.\n   * You can override the existing props or add new ones.\n   *\n   * This prop is an alias for the `componentsProps` prop, which will be deprecated in the future.\n   *\n   * @default {}\n   */\n  slotProps: PropTypes.shape({\n    input: PropTypes.object,\n    root: PropTypes.object\n  }),\n  /**\n   * The components used for each slot inside.\n   *\n   * This prop is an alias for the `components` prop, which will be deprecated in the future.\n   *\n   * @default {}\n   */\n  slots: PropTypes.shape({\n    input: PropTypes.elementType,\n    root: PropTypes.elementType\n  }),\n  /**\n   * Start `InputAdornment` for this component.\n   */\n  startAdornment: PropTypes.node,\n  /**\n   * The system prop that allows defining system overrides as well as additional CSS styles.\n   */\n  sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object]),\n  /**\n   * Type of the `input` element. It should be [a valid HTML5 input type](https://developer.mozilla.org/en-US/docs/Web/HTML/Reference/Elements/input#input_types).\n   * @default 'text'\n   */\n  type: PropTypes.string,\n  /**\n   * The value of the `input` element, required for a controlled component.\n   */\n  value: PropTypes.any\n} : void 0;\nexport default InputBase;","import generateUtilityClasses from '@mui/utils/generateUtilityClasses';\nimport generateUtilityClass from '@mui/utils/generateUtilityClass';\nimport { inputBaseClasses } from \"../InputBase/index.js\";\nexport function getInputUtilityClass(slot) {\n  return generateUtilityClass('MuiInput', slot);\n}\nconst inputClasses = {\n  ...inputBaseClasses,\n  ...generateUtilityClasses('MuiInput', ['root', 'underline', 'input'])\n};\nexport default inputClasses;","import generateUtilityClasses from '@mui/utils/generateUtilityClasses';\nimport generateUtilityClass from '@mui/utils/generateUtilityClass';\nimport { inputBaseClasses } from \"../InputBase/index.js\";\nexport function getOutlinedInputUtilityClass(slot) {\n  return generateUtilityClass('MuiOutlinedInput', slot);\n}\nconst outlinedInputClasses = {\n  ...inputBaseClasses,\n  ...generateUtilityClasses('MuiOutlinedInput', ['root', 'notchedOutline', 'input'])\n};\nexport default outlinedInputClasses;","import generateUtilityClasses from '@mui/utils/generateUtilityClasses';\nimport generateUtilityClass from '@mui/utils/generateUtilityClass';\nimport { inputBaseClasses } from \"../InputBase/index.js\";\nexport function getFilledInputUtilityClass(slot) {\n  return generateUtilityClass('MuiFilledInput', slot);\n}\nconst filledInputClasses = {\n  ...inputBaseClasses,\n  ...generateUtilityClasses('MuiFilledInput', ['root', 'underline', 'input', 'adornedStart', 'adornedEnd', 'sizeSmall', 'multiline', 'hiddenLabel'])\n};\nexport default filledInputClasses;","'use client';\n\nimport createSvgIcon from \"../../utils/createSvgIcon.js\";\n\n/**\n * @ignore - internal component.\n */\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport default createSvgIcon(/*#__PURE__*/_jsx(\"path\", {\n  d: \"M7 10l5 5 5-5z\"\n}), 'ArrowDropDown');","'use client';\n\nimport createSvgIcon from \"../../utils/createSvgIcon.js\";\n\n/**\n * @ignore - internal component.\n */\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport default createSvgIcon(/*#__PURE__*/_jsx(\"path\", {\n  d: \"M12 12c2.21 0 4-1.79 4-4s-1.79-4-4-4-4 1.79-4 4 1.79 4 4 4zm0 2c-2.67 0-8 1.34-8 4v2h16v-2c0-2.66-5.33-4-8-4z\"\n}), 'Person');","import generateUtilityClasses from '@mui/utils/generateUtilityClasses';\nimport generateUtilityClass from '@mui/utils/generateUtilityClass';\nexport function getAvatarUtilityClass(slot) {\n  return generateUtilityClass('MuiAvatar', slot);\n}\nconst avatarClasses = generateUtilityClasses('MuiAvatar', ['root', 'colorDefault', 'circular', 'rounded', 'square', 'img', 'fallback']);\nexport default avatarClasses;","'use client';\n\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport composeClasses from '@mui/utils/composeClasses';\nimport { styled } from \"../zero-styled/index.js\";\nimport memoTheme from \"../utils/memoTheme.js\";\nimport { useDefaultProps } from \"../DefaultPropsProvider/index.js\";\nimport Person from \"../internal/svg-icons/Person.js\";\nimport { getAvatarUtilityClass } from \"./avatarClasses.js\";\nimport useSlot from \"../utils/useSlot.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nconst useUtilityClasses = ownerState => {\n  const {\n    classes,\n    variant,\n    colorDefault\n  } = ownerState;\n  const slots = {\n    root: ['root', variant, colorDefault && 'colorDefault'],\n    img: ['img'],\n    fallback: ['fallback']\n  };\n  return composeClasses(slots, getAvatarUtilityClass, classes);\n};\nconst AvatarRoot = styled('div', {\n  name: 'MuiAvatar',\n  slot: 'Root',\n  overridesResolver: (props, styles) => {\n    const {\n      ownerState\n    } = props;\n    return [styles.root, styles[ownerState.variant], ownerState.colorDefault && styles.colorDefault];\n  }\n})(memoTheme(({\n  theme\n}) => ({\n  position: 'relative',\n  display: 'flex',\n  alignItems: 'center',\n  justifyContent: 'center',\n  flexShrink: 0,\n  width: 40,\n  height: 40,\n  fontFamily: theme.typography.fontFamily,\n  fontSize: theme.typography.pxToRem(20),\n  lineHeight: 1,\n  borderRadius: '50%',\n  overflow: 'hidden',\n  userSelect: 'none',\n  variants: [{\n    props: {\n      variant: 'rounded'\n    },\n    style: {\n      borderRadius: (theme.vars || theme).shape.borderRadius\n    }\n  }, {\n    props: {\n      variant: 'square'\n    },\n    style: {\n      borderRadius: 0\n    }\n  }, {\n    props: {\n      colorDefault: true\n    },\n    style: {\n      color: (theme.vars || theme).palette.background.default,\n      ...(theme.vars ? {\n        backgroundColor: theme.vars.palette.Avatar.defaultBg\n      } : {\n        backgroundColor: theme.palette.grey[400],\n        ...theme.applyStyles('dark', {\n          backgroundColor: theme.palette.grey[600]\n        })\n      })\n    }\n  }]\n})));\nconst AvatarImg = styled('img', {\n  name: 'MuiAvatar',\n  slot: 'Img'\n})({\n  width: '100%',\n  height: '100%',\n  textAlign: 'center',\n  // Handle non-square image.\n  objectFit: 'cover',\n  // Hide alt text.\n  color: 'transparent',\n  // Hide the image broken icon, only works on Chrome.\n  textIndent: 10000\n});\nconst AvatarFallback = styled(Person, {\n  name: 'MuiAvatar',\n  slot: 'Fallback'\n})({\n  width: '75%',\n  height: '75%'\n});\nfunction useLoaded({\n  crossOrigin,\n  referrerPolicy,\n  src,\n  srcSet\n}) {\n  const [loaded, setLoaded] = React.useState(false);\n  React.useEffect(() => {\n    if (!src && !srcSet) {\n      return undefined;\n    }\n    setLoaded(false);\n    let active = true;\n    const image = new Image();\n    image.onload = () => {\n      if (!active) {\n        return;\n      }\n      setLoaded('loaded');\n    };\n    image.onerror = () => {\n      if (!active) {\n        return;\n      }\n      setLoaded('error');\n    };\n    image.crossOrigin = crossOrigin;\n    image.referrerPolicy = referrerPolicy;\n    image.src = src;\n    if (srcSet) {\n      image.srcset = srcSet;\n    }\n    return () => {\n      active = false;\n    };\n  }, [crossOrigin, referrerPolicy, src, srcSet]);\n  return loaded;\n}\nconst Avatar = /*#__PURE__*/React.forwardRef(function Avatar(inProps, ref) {\n  const props = useDefaultProps({\n    props: inProps,\n    name: 'MuiAvatar'\n  });\n  const {\n    alt,\n    children: childrenProp,\n    className,\n    component = 'div',\n    slots = {},\n    slotProps = {},\n    imgProps,\n    sizes,\n    src,\n    srcSet,\n    variant = 'circular',\n    ...other\n  } = props;\n  let children = null;\n  const ownerState = {\n    ...props,\n    component,\n    variant\n  };\n\n  // Use a hook instead of onError on the img element to support server-side rendering.\n  const loaded = useLoaded({\n    ...imgProps,\n    ...(typeof slotProps.img === 'function' ? slotProps.img(ownerState) : slotProps.img),\n    src,\n    srcSet\n  });\n  const hasImg = src || srcSet;\n  const hasImgNotFailing = hasImg && loaded !== 'error';\n  ownerState.colorDefault = !hasImgNotFailing;\n  // This issue explains why this is required: https://github.com/mui/material-ui/issues/42184\n  delete ownerState.ownerState;\n  const classes = useUtilityClasses(ownerState);\n  const [RootSlot, rootSlotProps] = useSlot('root', {\n    ref,\n    className: clsx(classes.root, className),\n    elementType: AvatarRoot,\n    externalForwardedProps: {\n      slots,\n      slotProps,\n      component,\n      ...other\n    },\n    ownerState\n  });\n  const [ImgSlot, imgSlotProps] = useSlot('img', {\n    className: classes.img,\n    elementType: AvatarImg,\n    externalForwardedProps: {\n      slots,\n      slotProps: {\n        img: {\n          ...imgProps,\n          ...slotProps.img\n        }\n      }\n    },\n    additionalProps: {\n      alt,\n      src,\n      srcSet,\n      sizes\n    },\n    ownerState\n  });\n  const [FallbackSlot, fallbackSlotProps] = useSlot('fallback', {\n    className: classes.fallback,\n    elementType: AvatarFallback,\n    externalForwardedProps: {\n      slots,\n      slotProps\n    },\n    shouldForwardComponentProp: true,\n    ownerState\n  });\n  if (hasImgNotFailing) {\n    children = /*#__PURE__*/_jsx(ImgSlot, {\n      ...imgSlotProps\n    });\n    // We only render valid children, non valid children are rendered with a fallback\n    // We consider that invalid children are all falsy values, except 0, which is valid.\n  } else if (!!childrenProp || childrenProp === 0) {\n    children = childrenProp;\n  } else if (hasImg && alt) {\n    children = alt[0];\n  } else {\n    children = /*#__PURE__*/_jsx(FallbackSlot, {\n      ...fallbackSlotProps\n    });\n  }\n  return /*#__PURE__*/_jsx(RootSlot, {\n    ...rootSlotProps,\n    children: children\n  });\n});\nprocess.env.NODE_ENV !== \"production\" ? Avatar.propTypes /* remove-proptypes */ = {\n  // ┌────────────────────────────── Warning ──────────────────────────────┐\n  // │ These PropTypes are generated from the TypeScript type definitions. │\n  // │    To update them, edit the d.ts file and run `pnpm proptypes`.     │\n  // └─────────────────────────────────────────────────────────────────────┘\n  /**\n   * Used in combination with `src` or `srcSet` to\n   * provide an alt attribute for the rendered `img` element.\n   */\n  alt: PropTypes.string,\n  /**\n   * Used to render icon or text elements inside the Avatar if `src` is not set.\n   * This can be an element, or just a string.\n   */\n  children: PropTypes.node,\n  /**\n   * Override or extend the styles applied to the component.\n   */\n  classes: PropTypes.object,\n  /**\n   * @ignore\n   */\n  className: PropTypes.string,\n  /**\n   * The component used for the root node.\n   * Either a string to use a HTML element or a component.\n   */\n  component: PropTypes.elementType,\n  /**\n   * [Attributes](https://developer.mozilla.org/en-US/docs/Web/HTML/Reference/Elements/img#attributes) applied to the `img` element if the component is used to display an image.\n   * It can be used to listen for the loading error event.\n   * @deprecated Use `slotProps.img` instead. This prop will be removed in a future major release. See [Migrating from deprecated APIs](/material-ui/migration/migrating-from-deprecated-apis/) for more details.\n   */\n  imgProps: PropTypes.object,\n  /**\n   * The `sizes` attribute for the `img` element.\n   */\n  sizes: PropTypes.string,\n  /**\n   * The props used for each slot inside.\n   * @default {}\n   */\n  slotProps: PropTypes.shape({\n    fallback: PropTypes.oneOfType([PropTypes.func, PropTypes.object]),\n    img: PropTypes.oneOfType([PropTypes.func, PropTypes.object]),\n    root: PropTypes.oneOfType([PropTypes.func, PropTypes.object])\n  }),\n  /**\n   * The components used for each slot inside.\n   * @default {}\n   */\n  slots: PropTypes.shape({\n    fallback: PropTypes.elementType,\n    img: PropTypes.elementType,\n    root: PropTypes.elementType\n  }),\n  /**\n   * The `src` attribute for the `img` element.\n   */\n  src: PropTypes.string,\n  /**\n   * The `srcSet` attribute for the `img` element.\n   * Use this attribute for responsive image display.\n   */\n  srcSet: PropTypes.string,\n  /**\n   * The system prop that allows defining system overrides as well as additional CSS styles.\n   */\n  sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object]),\n  /**\n   * The shape of the avatar.\n   * @default 'circular'\n   */\n  variant: PropTypes /* @typescript-to-proptypes-ignore */.oneOfType([PropTypes.oneOf(['circular', 'rounded', 'square']), PropTypes.string])\n} : void 0;\nexport default Avatar;","import PropTypes from 'prop-types';\nimport chainPropTypes from \"../chainPropTypes/index.js\";\nfunction isClassComponent(elementType) {\n  // elementType.prototype?.isReactComponent\n  const {\n    prototype = {}\n  } = elementType;\n  return Boolean(prototype.isReactComponent);\n}\nfunction acceptingRef(props, propName, componentName, location, propFullName) {\n  const element = props[propName];\n  const safePropName = propFullName || propName;\n  if (element == null ||\n  // When server-side rendering React doesn't warn either.\n  // This is not an accurate check for SSR.\n  // This is only in place for Emotion compat.\n  // TODO: Revisit once https://github.com/facebook/react/issues/20047 is resolved.\n  typeof window === 'undefined') {\n    return null;\n  }\n  let warningHint;\n  const elementType = element.type;\n  /**\n   * Blacklisting instead of whitelisting\n   *\n   * Blacklisting will miss some components, such as React.Fragment. Those will at least\n   * trigger a warning in React.\n   * We can't whitelist because there is no safe way to detect React.forwardRef\n   * or class components. \"Safe\" means there's no public API.\n   *\n   */\n  if (typeof elementType === 'function' && !isClassComponent(elementType)) {\n    warningHint = 'Did you accidentally use a plain function component for an element instead?';\n  }\n  if (warningHint !== undefined) {\n    return new Error(`Invalid ${location} \\`${safePropName}\\` supplied to \\`${componentName}\\`. ` + `Expected an element that can hold a ref. ${warningHint} ` + 'For more information see https://mui.com/r/caveat-with-refs-guide');\n  }\n  return null;\n}\nconst elementAcceptingRef = chainPropTypes(PropTypes.element, acceptingRef);\nelementAcceptingRef.isRequired = chainPropTypes(PropTypes.element.isRequired, acceptingRef);\nexport default elementAcceptingRef;","'use client';\n\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport { Transition } from 'react-transition-group';\nimport elementAcceptingRef from '@mui/utils/elementAcceptingRef';\nimport getReactElementRef from '@mui/utils/getReactElementRef';\nimport { useTheme } from \"../zero-styled/index.js\";\nimport { normalizedTransitionCallback, reflow, getTransitionProps, getTransitionChildStyle } from \"../transitions/utils.js\";\nimport useForkRef from \"../utils/useForkRef.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nconst styles = {\n  entering: {\n    opacity: 1\n  },\n  entered: {\n    opacity: 1\n  },\n  exiting: {\n    opacity: 0\n  },\n  exited: {\n    opacity: 0\n  }\n};\nconst hiddenStyles = {\n  opacity: 0,\n  visibility: 'hidden'\n};\n\n/**\n * The Fade transition is used by the [Modal](/material-ui/react-modal/) component.\n * It uses [react-transition-group](https://github.com/reactjs/react-transition-group) internally.\n */\nconst Fade = /*#__PURE__*/React.forwardRef(function Fade(props, ref) {\n  const theme = useTheme();\n  const defaultTimeout = {\n    enter: theme.transitions.duration.enteringScreen,\n    exit: theme.transitions.duration.leavingScreen\n  };\n  const {\n    addEndListener,\n    appear = true,\n    children,\n    easing,\n    in: inProp,\n    onEnter,\n    onEntered,\n    onEntering,\n    onExit,\n    onExited,\n    onExiting,\n    style,\n    timeout = defaultTimeout,\n    ...other\n  } = props;\n  const nodeRef = React.useRef(null);\n  const handleRef = useForkRef(nodeRef, getReactElementRef(children), ref);\n  const handleEntering = normalizedTransitionCallback(nodeRef, onEntering);\n  const handleEnter = normalizedTransitionCallback(nodeRef, (node, isAppearing) => {\n    reflow(node); // So the animation always start from the start.\n\n    const transitionProps = getTransitionProps({\n      style,\n      timeout,\n      easing\n    }, {\n      mode: 'enter'\n    });\n    node.style.transition = theme.transitions.create('opacity', transitionProps);\n    if (onEnter) {\n      onEnter(node, isAppearing);\n    }\n  });\n  const handleEntered = normalizedTransitionCallback(nodeRef, onEntered);\n  const handleExiting = normalizedTransitionCallback(nodeRef, onExiting);\n  const handleExit = normalizedTransitionCallback(nodeRef, node => {\n    const transitionProps = getTransitionProps({\n      style,\n      timeout,\n      easing\n    }, {\n      mode: 'exit'\n    });\n    node.style.transition = theme.transitions.create('opacity', transitionProps);\n    if (onExit) {\n      onExit(node);\n    }\n  });\n  const handleExited = normalizedTransitionCallback(nodeRef, node => {\n    // Clear the transition CSS to release the compositor layer when the\n    // element is fully exited (prevents idle CPU usage on fixed elements\n    // like Backdrop). handleEnter re-sets it on the next open.\n    node.style.transition = '';\n    if (onExited) {\n      onExited(node);\n    }\n  });\n  const handleAddEndListener = next => {\n    if (addEndListener) {\n      // Old call signature before `react-transition-group` implemented `nodeRef`\n      addEndListener(nodeRef.current, next);\n    }\n  };\n  return /*#__PURE__*/_jsx(Transition, {\n    appear: appear,\n    in: inProp,\n    nodeRef: nodeRef,\n    onEnter: handleEnter,\n    onEntered: handleEntered,\n    onEntering: handleEntering,\n    onExit: handleExit,\n    onExited: handleExited,\n    onExiting: handleExiting,\n    addEndListener: handleAddEndListener,\n    timeout: timeout,\n    ...other,\n    children: (state, {\n      ownerState,\n      ...restChildProps\n    }) => {\n      const childStyle = getTransitionChildStyle(state, inProp, styles, hiddenStyles, style, children.props.style);\n      return /*#__PURE__*/React.cloneElement(children, {\n        style: childStyle,\n        ref: handleRef,\n        ...restChildProps\n      });\n    }\n  });\n});\nprocess.env.NODE_ENV !== \"production\" ? Fade.propTypes /* remove-proptypes */ = {\n  // ┌────────────────────────────── Warning ──────────────────────────────┐\n  // │ These PropTypes are generated from the TypeScript type definitions. │\n  // │    To update them, edit the d.ts file and run `pnpm proptypes`.     │\n  // └─────────────────────────────────────────────────────────────────────┘\n  /**\n   * Add a custom transition end trigger. Called with the transitioning DOM\n   * node and a done callback. Allows for more fine grained transition end\n   * logic. Note: Timeouts are still used as a fallback if provided.\n   */\n  addEndListener: PropTypes.func,\n  /**\n   * Perform the enter transition when it first mounts if `in` is also `true`.\n   * Set this to `false` to disable this behavior.\n   * @default true\n   */\n  appear: PropTypes.bool,\n  /**\n   * A single child content element.\n   */\n  children: elementAcceptingRef.isRequired,\n  /**\n   * The transition timing function.\n   * You may specify a single easing or a object containing enter and exit values.\n   */\n  easing: PropTypes.oneOfType([PropTypes.shape({\n    enter: PropTypes.string,\n    exit: PropTypes.string\n  }), PropTypes.string]),\n  /**\n   * If `true`, the component will transition in.\n   */\n  in: PropTypes.bool,\n  /**\n   * @ignore\n   */\n  onEnter: PropTypes.func,\n  /**\n   * @ignore\n   */\n  onEntered: PropTypes.func,\n  /**\n   * @ignore\n   */\n  onEntering: PropTypes.func,\n  /**\n   * @ignore\n   */\n  onExit: PropTypes.func,\n  /**\n   * @ignore\n   */\n  onExited: PropTypes.func,\n  /**\n   * @ignore\n   */\n  onExiting: PropTypes.func,\n  /**\n   * @ignore\n   */\n  style: PropTypes.object,\n  /**\n   * The duration for the transition, in milliseconds.\n   * You may specify a single timeout for all transitions, or individually with an object.\n   * @default {\n   *   enter: theme.transitions.duration.enteringScreen,\n   *   exit: theme.transitions.duration.leavingScreen,\n   * }\n   */\n  timeout: PropTypes.oneOfType([PropTypes.number, PropTypes.shape({\n    appear: PropTypes.number,\n    enter: PropTypes.number,\n    exit: PropTypes.number\n  })])\n} : void 0;\nexport default Fade;","import generateUtilityClasses from '@mui/utils/generateUtilityClasses';\nimport generateUtilityClass from '@mui/utils/generateUtilityClass';\nexport function getBackdropUtilityClass(slot) {\n  return generateUtilityClass('MuiBackdrop', slot);\n}\nconst backdropClasses = generateUtilityClasses('MuiBackdrop', ['root', 'invisible']);\nexport default backdropClasses;","'use client';\n\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport composeClasses from '@mui/utils/composeClasses';\nimport { styled } from \"../zero-styled/index.js\";\nimport { useDefaultProps } from \"../DefaultPropsProvider/index.js\";\nimport useSlot from \"../utils/useSlot.js\";\nimport Fade from \"../Fade/index.js\";\nimport { getBackdropUtilityClass } from \"./backdropClasses.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nconst useUtilityClasses = ownerState => {\n  const {\n    classes,\n    invisible\n  } = ownerState;\n  const slots = {\n    root: ['root', invisible && 'invisible']\n  };\n  return composeClasses(slots, getBackdropUtilityClass, classes);\n};\nconst BackdropRoot = styled('div', {\n  name: 'MuiBackdrop',\n  slot: 'Root',\n  overridesResolver: (props, styles) => {\n    const {\n      ownerState\n    } = props;\n    return [styles.root, ownerState.invisible && styles.invisible];\n  }\n})({\n  position: 'fixed',\n  display: 'flex',\n  alignItems: 'center',\n  justifyContent: 'center',\n  right: 0,\n  bottom: 0,\n  top: 0,\n  left: 0,\n  backgroundColor: 'rgba(0, 0, 0, 0.5)',\n  WebkitTapHighlightColor: 'transparent',\n  variants: [{\n    props: {\n      invisible: true\n    },\n    style: {\n      backgroundColor: 'transparent'\n    }\n  }]\n});\nconst Backdrop = /*#__PURE__*/React.forwardRef(function Backdrop(inProps, ref) {\n  const props = useDefaultProps({\n    props: inProps,\n    name: 'MuiBackdrop'\n  });\n  const {\n    children,\n    className,\n    component = 'div',\n    invisible = false,\n    open,\n    components = {},\n    componentsProps = {},\n    slotProps = {},\n    slots = {},\n    TransitionComponent: TransitionComponentProp,\n    transitionDuration,\n    ...other\n  } = props;\n  const ownerState = {\n    ...props,\n    component,\n    invisible\n  };\n  const classes = useUtilityClasses(ownerState);\n  const backwardCompatibleSlots = {\n    transition: TransitionComponentProp,\n    root: components.Root,\n    ...slots\n  };\n  const backwardCompatibleSlotProps = {\n    ...componentsProps,\n    ...slotProps\n  };\n  const externalForwardedProps = {\n    component,\n    slots: backwardCompatibleSlots,\n    slotProps: backwardCompatibleSlotProps\n  };\n  const [RootSlot, rootProps] = useSlot('root', {\n    elementType: BackdropRoot,\n    externalForwardedProps,\n    className: clsx(classes.root, className),\n    ownerState\n  });\n  const [TransitionSlot, transitionProps] = useSlot('transition', {\n    elementType: Fade,\n    externalForwardedProps,\n    ownerState\n  });\n  return /*#__PURE__*/_jsx(TransitionSlot, {\n    in: open,\n    timeout: transitionDuration,\n    ...other,\n    ...transitionProps,\n    children: /*#__PURE__*/_jsx(RootSlot, {\n      \"aria-hidden\": true,\n      ...rootProps,\n      ref: ref,\n      children: children\n    })\n  });\n});\nprocess.env.NODE_ENV !== \"production\" ? Backdrop.propTypes /* remove-proptypes */ = {\n  // ┌────────────────────────────── Warning ──────────────────────────────┐\n  // │ These PropTypes are generated from the TypeScript type definitions. │\n  // │    To update them, edit the d.ts file and run `pnpm proptypes`.     │\n  // └─────────────────────────────────────────────────────────────────────┘\n  /**\n   * The content of the component.\n   */\n  children: PropTypes.node,\n  /**\n   * Override or extend the styles applied to the component.\n   */\n  classes: PropTypes.object,\n  /**\n   * @ignore\n   */\n  className: PropTypes.string,\n  /**\n   * The component used for the root node.\n   * Either a string to use a HTML element or a component.\n   */\n  component: PropTypes.elementType,\n  /**\n   * The components used for each slot inside.\n   *\n   * @deprecated Use the `slots` prop instead. This prop will be removed in a future major release. See [Migrating from deprecated APIs](https://mui.com/material-ui/migration/migrating-from-deprecated-apis/) for more details.\n   *\n   * @default {}\n   */\n  components: PropTypes.shape({\n    Root: PropTypes.elementType\n  }),\n  /**\n   * The extra props for the slot components.\n   * You can override the existing props or add new ones.\n   *\n   * @deprecated Use the `slotProps` prop instead. This prop will be removed in a future major release. See [Migrating from deprecated APIs](https://mui.com/material-ui/migration/migrating-from-deprecated-apis/) for more details.\n   *\n   * @default {}\n   */\n  componentsProps: PropTypes.shape({\n    root: PropTypes.object\n  }),\n  /**\n   * If `true`, the backdrop is invisible.\n   * It can be used when rendering a popover or a custom select component.\n   * @default false\n   */\n  invisible: PropTypes.bool,\n  /**\n   * If `true`, the component is shown.\n   */\n  open: PropTypes.bool.isRequired,\n  /**\n   * The props used for each slot inside.\n   * @default {}\n   */\n  slotProps: PropTypes.shape({\n    root: PropTypes.oneOfType([PropTypes.func, PropTypes.object]),\n    transition: PropTypes.oneOfType([PropTypes.func, PropTypes.object])\n  }),\n  /**\n   * The components used for each slot inside.\n   * @default {}\n   */\n  slots: PropTypes.shape({\n    root: PropTypes.elementType,\n    transition: PropTypes.elementType\n  }),\n  /**\n   * The system prop that allows defining system overrides as well as additional CSS styles.\n   */\n  sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object]),\n  /**\n   * The component used for the transition.\n   * [Follow this guide](https://mui.com/material-ui/transitions/#transitioncomponent-prop) to learn more about the requirements for this component.\n   * @default Fade\n   * @deprecated Use `slots.transition` instead. This prop will be removed in a future major release. See [Migrating from deprecated APIs](/material-ui/migration/migrating-from-deprecated-apis/) for more details.\n   */\n  TransitionComponent: PropTypes.elementType,\n  /**\n   * The duration for the transition, in milliseconds.\n   * You may specify a single timeout for all transitions, or individually with an object.\n   */\n  transitionDuration: PropTypes.oneOfType([PropTypes.number, PropTypes.shape({\n    appear: PropTypes.number,\n    enter: PropTypes.number,\n    exit: PropTypes.number\n  })])\n} : void 0;\nexport default Backdrop;","import generateUtilityClasses from '@mui/utils/generateUtilityClasses';\nconst boxClasses = generateUtilityClasses('MuiBox', ['root']);\nexport default boxClasses;","'use client';\n\nimport { createBox } from '@mui/system';\nimport PropTypes from 'prop-types';\nimport { unstable_ClassNameGenerator as ClassNameGenerator } from \"../className/index.js\";\nimport { createTheme } from \"../styles/index.js\";\nimport THEME_ID from \"../styles/identifier.js\";\nimport boxClasses from \"./boxClasses.js\";\nconst defaultTheme = createTheme();\nconst Box = createBox({\n  themeId: THEME_ID,\n  defaultTheme,\n  defaultClassName: boxClasses.root,\n  generateClassName: ClassNameGenerator.generate\n});\nprocess.env.NODE_ENV !== \"production\" ? Box.propTypes /* remove-proptypes */ = {\n  // ┌────────────────────────────── Warning ──────────────────────────────┐\n  // │ These PropTypes are generated from the TypeScript type definitions. │\n  // │    To update them, edit the d.ts file and run `pnpm proptypes`.     │\n  // └─────────────────────────────────────────────────────────────────────┘\n  /**\n   * @ignore\n   */\n  children: PropTypes.node,\n  /**\n   * The component used for the root node.\n   * Either a string to use a HTML element or a component.\n   */\n  component: PropTypes.elementType,\n  /**\n   * The system prop that allows defining system overrides as well as additional CSS styles.\n   */\n  sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object])\n} : void 0;\nexport default Box;","import generateUtilityClasses from '@mui/utils/generateUtilityClasses';\nimport generateUtilityClass from '@mui/utils/generateUtilityClass';\nexport function getButtonUtilityClass(slot) {\n  return generateUtilityClass('MuiButton', slot);\n}\nconst buttonClasses = generateUtilityClasses('MuiButton', ['root', 'text', 'textInherit', 'textPrimary', 'textSecondary', 'textSuccess', 'textError', 'textInfo', 'textWarning', 'outlined', 'outlinedInherit', 'outlinedPrimary', 'outlinedSecondary', 'outlinedSuccess', 'outlinedError', 'outlinedInfo', 'outlinedWarning', 'contained', 'containedInherit', 'containedPrimary', 'containedSecondary', 'containedSuccess', 'containedError', 'containedInfo', 'containedWarning', 'disableElevation', 'focusVisible', 'disabled', 'colorInherit', 'colorPrimary', 'colorSecondary', 'colorSuccess', 'colorError', 'colorInfo', 'colorWarning', 'textSizeSmall', 'textSizeMedium', 'textSizeLarge', 'outlinedSizeSmall', 'outlinedSizeMedium', 'outlinedSizeLarge', 'containedSizeSmall', 'containedSizeMedium', 'containedSizeLarge', 'sizeMedium', 'sizeSmall', 'sizeLarge', 'fullWidth', 'startIcon', 'endIcon', 'icon', 'iconSizeSmall', 'iconSizeMedium', 'iconSizeLarge', 'loading', 'loadingWrapper', 'loadingIconPlaceholder', 'loadingIndicator', 'loadingPositionCenter', 'loadingPositionStart', 'loadingPositionEnd']);\nexport default buttonClasses;","'use client';\n\nimport * as React from 'react';\n/**\n * @ignore - internal component.\n */\nconst ButtonGroupContext = /*#__PURE__*/React.createContext({});\nif (process.env.NODE_ENV !== 'production') {\n  ButtonGroupContext.displayName = 'ButtonGroupContext';\n}\nexport default ButtonGroupContext;","'use client';\n\nimport * as React from 'react';\n/**\n * @ignore - internal component.\n */\nconst ButtonGroupButtonContext = /*#__PURE__*/React.createContext(undefined);\nif (process.env.NODE_ENV !== 'production') {\n  ButtonGroupButtonContext.displayName = 'ButtonGroupButtonContext';\n}\nexport default ButtonGroupButtonContext;","'use client';\n\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport resolveProps from '@mui/utils/resolveProps';\nimport composeClasses from '@mui/utils/composeClasses';\nimport { unstable_useId as useId } from \"../utils/index.js\";\nimport rootShouldForwardProp from \"../styles/rootShouldForwardProp.js\";\nimport { styled } from \"../zero-styled/index.js\";\nimport memoTheme from \"../utils/memoTheme.js\";\nimport { useDefaultProps } from \"../DefaultPropsProvider/index.js\";\nimport ButtonBase from \"../ButtonBase/index.js\";\nimport CircularProgress from \"../CircularProgress/index.js\";\nimport capitalize from \"../utils/capitalize.js\";\nimport createSimplePaletteValueFilter from \"../utils/createSimplePaletteValueFilter.js\";\nimport buttonClasses, { getButtonUtilityClass } from \"./buttonClasses.js\";\nimport ButtonGroupContext from \"../ButtonGroup/ButtonGroupContext.js\";\nimport ButtonGroupButtonContext from \"../ButtonGroup/ButtonGroupButtonContext.js\";\nimport { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nconst useUtilityClasses = ownerState => {\n  const {\n    color,\n    disableElevation,\n    fullWidth,\n    size,\n    variant,\n    loading,\n    loadingPosition,\n    classes\n  } = ownerState;\n  const slots = {\n    root: ['root', loading && 'loading', variant, `${variant}${capitalize(color)}`, `size${capitalize(size)}`, `${variant}Size${capitalize(size)}`, `color${capitalize(color)}`, disableElevation && 'disableElevation', fullWidth && 'fullWidth', loading && `loadingPosition${capitalize(loadingPosition)}`],\n    startIcon: ['icon', 'startIcon', `iconSize${capitalize(size)}`],\n    endIcon: ['icon', 'endIcon', `iconSize${capitalize(size)}`],\n    loadingIndicator: ['loadingIndicator'],\n    loadingWrapper: ['loadingWrapper']\n  };\n  const composedClasses = composeClasses(slots, getButtonUtilityClass, classes);\n  return {\n    ...classes,\n    // forward the focused, disabled, etc. classes to the ButtonBase\n    ...composedClasses\n  };\n};\nconst commonIconStyles = [{\n  props: {\n    size: 'small'\n  },\n  style: {\n    '& > *:nth-of-type(1)': {\n      fontSize: 18\n    }\n  }\n}, {\n  props: {\n    size: 'medium'\n  },\n  style: {\n    '& > *:nth-of-type(1)': {\n      fontSize: 20\n    }\n  }\n}, {\n  props: {\n    size: 'large'\n  },\n  style: {\n    '& > *:nth-of-type(1)': {\n      fontSize: 22\n    }\n  }\n}];\nconst ButtonRoot = styled(ButtonBase, {\n  shouldForwardProp: prop => rootShouldForwardProp(prop) || prop === 'classes',\n  name: 'MuiButton',\n  slot: 'Root',\n  overridesResolver: (props, styles) => {\n    const {\n      ownerState\n    } = props;\n    return [styles.root, styles[ownerState.variant], styles[`${ownerState.variant}${capitalize(ownerState.color)}`], styles[`size${capitalize(ownerState.size)}`], styles[`${ownerState.variant}Size${capitalize(ownerState.size)}`], ownerState.color === 'inherit' && styles.colorInherit, ownerState.disableElevation && styles.disableElevation, ownerState.fullWidth && styles.fullWidth, ownerState.loading && styles.loading];\n  }\n})(memoTheme(({\n  theme\n}) => {\n  const inheritContainedBackgroundColor = theme.palette.mode === 'light' ? theme.palette.grey[300] : theme.palette.grey[800];\n  const inheritContainedHoverBackgroundColor = theme.palette.mode === 'light' ? theme.palette.grey.A100 : theme.palette.grey[700];\n  return {\n    ...theme.typography.button,\n    minWidth: 64,\n    padding: '6px 16px',\n    border: 0,\n    borderRadius: (theme.vars || theme).shape.borderRadius,\n    transition: theme.transitions.create(['background-color', 'box-shadow', 'border-color', 'color'], {\n      duration: theme.transitions.duration.short\n    }),\n    '&:hover': {\n      textDecoration: 'none'\n    },\n    [`&.${buttonClasses.disabled}`]: {\n      color: (theme.vars || theme).palette.action.disabled\n    },\n    variants: [{\n      props: {\n        variant: 'contained'\n      },\n      style: {\n        color: `var(--variant-containedColor)`,\n        backgroundColor: `var(--variant-containedBg)`,\n        boxShadow: (theme.vars || theme).shadows[2],\n        '&:hover': {\n          boxShadow: (theme.vars || theme).shadows[4],\n          // Reset on touch devices, it doesn't add specificity\n          '@media (hover: none)': {\n            boxShadow: (theme.vars || theme).shadows[2]\n          }\n        },\n        '&:active': {\n          boxShadow: (theme.vars || theme).shadows[8]\n        },\n        [`&.${buttonClasses.focusVisible}`]: {\n          boxShadow: (theme.vars || theme).shadows[6]\n        },\n        [`&.${buttonClasses.disabled}`]: {\n          color: (theme.vars || theme).palette.action.disabled,\n          boxShadow: (theme.vars || theme).shadows[0],\n          backgroundColor: (theme.vars || theme).palette.action.disabledBackground\n        }\n      }\n    }, {\n      props: {\n        variant: 'outlined'\n      },\n      style: {\n        padding: '5px 15px',\n        border: '1px solid currentColor',\n        borderColor: `var(--variant-outlinedBorder, currentColor)`,\n        backgroundColor: `var(--variant-outlinedBg)`,\n        color: `var(--variant-outlinedColor)`,\n        [`&.${buttonClasses.disabled}`]: {\n          border: `1px solid ${(theme.vars || theme).palette.action.disabledBackground}`\n        }\n      }\n    }, {\n      props: {\n        variant: 'text'\n      },\n      style: {\n        padding: '6px 8px',\n        color: `var(--variant-textColor)`,\n        backgroundColor: `var(--variant-textBg)`\n      }\n    }, ...Object.entries(theme.palette).filter(createSimplePaletteValueFilter()).map(([color]) => ({\n      props: {\n        color\n      },\n      style: {\n        '--variant-textColor': (theme.vars || theme).palette[color].main,\n        '--variant-outlinedColor': (theme.vars || theme).palette[color].main,\n        '--variant-outlinedBorder': theme.alpha((theme.vars || theme).palette[color].main, 0.5),\n        '--variant-containedColor': (theme.vars || theme).palette[color].contrastText,\n        '--variant-containedBg': (theme.vars || theme).palette[color].main,\n        '@media (hover: hover)': {\n          '&:hover': {\n            '--variant-containedBg': (theme.vars || theme).palette[color].dark,\n            '--variant-textBg': theme.alpha((theme.vars || theme).palette[color].main, (theme.vars || theme).palette.action.hoverOpacity),\n            '--variant-outlinedBorder': (theme.vars || theme).palette[color].main,\n            '--variant-outlinedBg': theme.alpha((theme.vars || theme).palette[color].main, (theme.vars || theme).palette.action.hoverOpacity)\n          }\n        }\n      }\n    })), {\n      props: {\n        color: 'inherit'\n      },\n      style: {\n        color: 'inherit',\n        borderColor: 'currentColor',\n        '--variant-containedBg': theme.vars ? theme.vars.palette.Button.inheritContainedBg : inheritContainedBackgroundColor,\n        '@media (hover: hover)': {\n          '&:hover': {\n            '--variant-containedBg': theme.vars ? theme.vars.palette.Button.inheritContainedHoverBg : inheritContainedHoverBackgroundColor,\n            '--variant-textBg': theme.alpha((theme.vars || theme).palette.text.primary, (theme.vars || theme).palette.action.hoverOpacity),\n            '--variant-outlinedBg': theme.alpha((theme.vars || theme).palette.text.primary, (theme.vars || theme).palette.action.hoverOpacity)\n          }\n        }\n      }\n    }, {\n      props: {\n        size: 'small',\n        variant: 'text'\n      },\n      style: {\n        padding: '4px 5px',\n        fontSize: theme.typography.pxToRem(13)\n      }\n    }, {\n      props: {\n        size: 'large',\n        variant: 'text'\n      },\n      style: {\n        padding: '8px 11px',\n        fontSize: theme.typography.pxToRem(15)\n      }\n    }, {\n      props: {\n        size: 'small',\n        variant: 'outlined'\n      },\n      style: {\n        padding: '3px 9px',\n        fontSize: theme.typography.pxToRem(13)\n      }\n    }, {\n      props: {\n        size: 'large',\n        variant: 'outlined'\n      },\n      style: {\n        padding: '7px 21px',\n        fontSize: theme.typography.pxToRem(15)\n      }\n    }, {\n      props: {\n        size: 'small',\n        variant: 'contained'\n      },\n      style: {\n        padding: '4px 10px',\n        fontSize: theme.typography.pxToRem(13)\n      }\n    }, {\n      props: {\n        size: 'large',\n        variant: 'contained'\n      },\n      style: {\n        padding: '8px 22px',\n        fontSize: theme.typography.pxToRem(15)\n      }\n    }, {\n      props: {\n        disableElevation: true\n      },\n      style: {\n        boxShadow: 'none',\n        '&:hover': {\n          boxShadow: 'none'\n        },\n        [`&.${buttonClasses.focusVisible}`]: {\n          boxShadow: 'none'\n        },\n        '&:active': {\n          boxShadow: 'none'\n        },\n        [`&.${buttonClasses.disabled}`]: {\n          boxShadow: 'none'\n        }\n      }\n    }, {\n      props: {\n        fullWidth: true\n      },\n      style: {\n        width: '100%'\n      }\n    }, {\n      props: {\n        loadingPosition: 'center'\n      },\n      style: {\n        transition: theme.transitions.create(['background-color', 'box-shadow', 'border-color'], {\n          duration: theme.transitions.duration.short\n        }),\n        [`&.${buttonClasses.loading}`]: {\n          color: 'transparent'\n        }\n      }\n    }]\n  };\n}));\nconst ButtonStartIcon = styled('span', {\n  name: 'MuiButton',\n  slot: 'StartIcon',\n  overridesResolver: (props, styles) => {\n    const {\n      ownerState\n    } = props;\n    return [styles.startIcon, ownerState.loading && styles.startIconLoadingStart, styles[`iconSize${capitalize(ownerState.size)}`]];\n  }\n})(({\n  theme\n}) => ({\n  display: 'inherit',\n  marginRight: 8,\n  marginLeft: -4,\n  variants: [{\n    props: {\n      size: 'small'\n    },\n    style: {\n      marginLeft: -2\n    }\n  }, {\n    props: {\n      loadingPosition: 'start',\n      loading: true\n    },\n    style: {\n      transition: theme.transitions.create(['opacity'], {\n        duration: theme.transitions.duration.short\n      }),\n      opacity: 0\n    }\n  }, {\n    props: {\n      loadingPosition: 'start',\n      loading: true,\n      fullWidth: true\n    },\n    style: {\n      marginRight: -8\n    }\n  }, ...commonIconStyles]\n}));\nconst ButtonEndIcon = styled('span', {\n  name: 'MuiButton',\n  slot: 'EndIcon',\n  overridesResolver: (props, styles) => {\n    const {\n      ownerState\n    } = props;\n    return [styles.endIcon, ownerState.loading && styles.endIconLoadingEnd, styles[`iconSize${capitalize(ownerState.size)}`]];\n  }\n})(({\n  theme\n}) => ({\n  display: 'inherit',\n  marginRight: -4,\n  marginLeft: 8,\n  variants: [{\n    props: {\n      size: 'small'\n    },\n    style: {\n      marginRight: -2\n    }\n  }, {\n    props: {\n      loadingPosition: 'end',\n      loading: true\n    },\n    style: {\n      transition: theme.transitions.create(['opacity'], {\n        duration: theme.transitions.duration.short\n      }),\n      opacity: 0\n    }\n  }, {\n    props: {\n      loadingPosition: 'end',\n      loading: true,\n      fullWidth: true\n    },\n    style: {\n      marginLeft: -8\n    }\n  }, ...commonIconStyles]\n}));\nconst ButtonLoadingIndicator = styled('span', {\n  name: 'MuiButton',\n  slot: 'LoadingIndicator'\n})(({\n  theme\n}) => ({\n  display: 'none',\n  position: 'absolute',\n  visibility: 'visible',\n  variants: [{\n    props: {\n      loading: true\n    },\n    style: {\n      display: 'flex'\n    }\n  }, {\n    props: {\n      loadingPosition: 'start'\n    },\n    style: {\n      left: 14\n    }\n  }, {\n    props: {\n      loadingPosition: 'start',\n      size: 'small'\n    },\n    style: {\n      left: 10\n    }\n  }, {\n    props: {\n      variant: 'text',\n      loadingPosition: 'start'\n    },\n    style: {\n      left: 6\n    }\n  }, {\n    props: {\n      loadingPosition: 'center'\n    },\n    style: {\n      left: '50%',\n      transform: 'translate(-50%)',\n      color: (theme.vars || theme).palette.action.disabled\n    }\n  }, {\n    props: {\n      loadingPosition: 'end'\n    },\n    style: {\n      right: 14\n    }\n  }, {\n    props: {\n      loadingPosition: 'end',\n      size: 'small'\n    },\n    style: {\n      right: 10\n    }\n  }, {\n    props: {\n      variant: 'text',\n      loadingPosition: 'end'\n    },\n    style: {\n      right: 6\n    }\n  }, {\n    props: {\n      loadingPosition: 'start',\n      fullWidth: true\n    },\n    style: {\n      position: 'relative',\n      left: -10\n    }\n  }, {\n    props: {\n      loadingPosition: 'end',\n      fullWidth: true\n    },\n    style: {\n      position: 'relative',\n      right: -10\n    }\n  }]\n}));\nconst ButtonLoadingIconPlaceholder = styled('span', {\n  name: 'MuiButton',\n  slot: 'LoadingIconPlaceholder'\n})({\n  display: 'inline-block',\n  width: '1em',\n  height: '1em'\n});\nconst Button = /*#__PURE__*/React.forwardRef(function Button(inProps, ref) {\n  // props priority: `inProps` > `contextProps` > `themeDefaultProps`\n  const contextProps = React.useContext(ButtonGroupContext);\n  const buttonGroupButtonContextPositionClassName = React.useContext(ButtonGroupButtonContext);\n  const resolvedProps = resolveProps(contextProps, inProps);\n  const props = useDefaultProps({\n    props: resolvedProps,\n    name: 'MuiButton'\n  });\n  const {\n    children,\n    color = 'primary',\n    component = 'button',\n    className,\n    disabled = false,\n    disableElevation = false,\n    disableFocusRipple = false,\n    endIcon: endIconProp,\n    focusVisibleClassName,\n    fullWidth = false,\n    id: idProp,\n    loading = null,\n    loadingIndicator: loadingIndicatorProp,\n    loadingPosition = 'center',\n    size = 'medium',\n    startIcon: startIconProp,\n    type,\n    variant = 'text',\n    ...other\n  } = props;\n  const loadingId = useId(idProp);\n  const loadingIndicator = loadingIndicatorProp ?? /*#__PURE__*/_jsx(CircularProgress, {\n    \"aria-labelledby\": loadingId,\n    color: \"inherit\",\n    size: 16\n  });\n  const ownerState = {\n    ...props,\n    color,\n    component,\n    disabled,\n    disableElevation,\n    disableFocusRipple,\n    fullWidth,\n    loading,\n    loadingIndicator,\n    loadingPosition,\n    size,\n    type,\n    variant\n  };\n  const classes = useUtilityClasses(ownerState);\n  const startIcon = (startIconProp || loading && loadingPosition === 'start') && /*#__PURE__*/_jsx(ButtonStartIcon, {\n    className: classes.startIcon,\n    ownerState: ownerState,\n    children: startIconProp || /*#__PURE__*/_jsx(ButtonLoadingIconPlaceholder, {\n      className: classes.loadingIconPlaceholder,\n      ownerState: ownerState\n    })\n  });\n  const endIcon = (endIconProp || loading && loadingPosition === 'end') && /*#__PURE__*/_jsx(ButtonEndIcon, {\n    className: classes.endIcon,\n    ownerState: ownerState,\n    children: endIconProp || /*#__PURE__*/_jsx(ButtonLoadingIconPlaceholder, {\n      className: classes.loadingIconPlaceholder,\n      ownerState: ownerState\n    })\n  });\n  const positionClassName = buttonGroupButtonContextPositionClassName || '';\n  const loader = typeof loading === 'boolean' ?\n  /*#__PURE__*/\n  // use plain HTML span to minimize the runtime overhead\n  _jsx(\"span\", {\n    className: classes.loadingWrapper,\n    style: {\n      display: 'contents'\n    },\n    children: loading && /*#__PURE__*/_jsx(ButtonLoadingIndicator, {\n      className: classes.loadingIndicator,\n      ownerState: ownerState,\n      children: loadingIndicator\n    })\n  }) : null;\n  return /*#__PURE__*/_jsxs(ButtonRoot, {\n    ownerState: ownerState,\n    className: clsx(contextProps.className, classes.root, className, positionClassName),\n    component: component,\n    disabled: disabled || loading,\n    focusRipple: !disableFocusRipple,\n    focusVisibleClassName: clsx(classes.focusVisible, focusVisibleClassName),\n    ref: ref,\n    type: type,\n    id: loading ? loadingId : idProp,\n    ...other,\n    classes: classes,\n    children: [startIcon, loadingPosition !== 'end' && loader, children, loadingPosition === 'end' && loader, endIcon]\n  });\n});\nprocess.env.NODE_ENV !== \"production\" ? Button.propTypes /* remove-proptypes */ = {\n  // ┌────────────────────────────── Warning ──────────────────────────────┐\n  // │ These PropTypes are generated from the TypeScript type definitions. │\n  // │    To update them, edit the d.ts file and run `pnpm proptypes`.     │\n  // └─────────────────────────────────────────────────────────────────────┘\n  /**\n   * The content of the component.\n   */\n  children: PropTypes.node,\n  /**\n   * Override or extend the styles applied to the component.\n   */\n  classes: PropTypes.object,\n  /**\n   * @ignore\n   */\n  className: PropTypes.string,\n  /**\n   * The color of the component.\n   * It supports both default and custom theme colors, which can be added as shown in the\n   * [palette customization guide](https://mui.com/material-ui/customization/palette/#custom-colors).\n   * @default 'primary'\n   */\n  color: PropTypes /* @typescript-to-proptypes-ignore */.oneOfType([PropTypes.oneOf(['inherit', 'primary', 'secondary', 'success', 'error', 'info', 'warning']), PropTypes.string]),\n  /**\n   * The component used for the root node.\n   * Either a string to use a HTML element or a component.\n   */\n  component: PropTypes.elementType,\n  /**\n   * If `true`, the component is disabled.\n   * @default false\n   */\n  disabled: PropTypes.bool,\n  /**\n   * If `true`, no elevation is used.\n   * @default false\n   */\n  disableElevation: PropTypes.bool,\n  /**\n   * If `true`, the  keyboard focus ripple is disabled.\n   * @default false\n   */\n  disableFocusRipple: PropTypes.bool,\n  /**\n   * If `true`, the ripple effect is disabled.\n   *\n   * ⚠️ Without a ripple there is no styling for :focus-visible by default. Be sure\n   * to highlight the element by applying separate styles with the `.Mui-focusVisible` class.\n   * @default false\n   */\n  disableRipple: PropTypes.bool,\n  /**\n   * Element placed after the children.\n   */\n  endIcon: PropTypes.node,\n  /**\n   * @ignore\n   */\n  focusVisibleClassName: PropTypes.string,\n  /**\n   * If `true`, the button will take up the full width of its container.\n   * @default false\n   */\n  fullWidth: PropTypes.bool,\n  /**\n   * The URL to link to when the button is clicked.\n   * If defined, an `a` element will be used as the root node.\n   */\n  href: PropTypes.string,\n  /**\n   * @ignore\n   */\n  id: PropTypes.string,\n  /**\n   * If `true`, the loading indicator is visible and the button is disabled.\n   * If `true | false`, the loading wrapper is always rendered before the children to prevent [Google Translation Crash](https://github.com/mui/material-ui/issues/27853).\n   * @default null\n   */\n  loading: PropTypes.bool,\n  /**\n   * Element placed before the children if the button is in loading state.\n   * The node should contain an element with `role=\"progressbar\"` with an accessible name.\n   * By default, it renders a `CircularProgress` that is labeled by the button itself.\n   * @default <CircularProgress color=\"inherit\" size={16} />\n   */\n  loadingIndicator: PropTypes.node,\n  /**\n   * The loading indicator can be positioned on the start, end, or the center of the button.\n   * @default 'center'\n   */\n  loadingPosition: PropTypes.oneOf(['center', 'end', 'start']),\n  /**\n   * The size of the component.\n   * `small` is equivalent to the dense button styling.\n   * @default 'medium'\n   */\n  size: PropTypes /* @typescript-to-proptypes-ignore */.oneOfType([PropTypes.oneOf(['small', 'medium', 'large']), PropTypes.string]),\n  /**\n   * Element placed before the children.\n   */\n  startIcon: PropTypes.node,\n  /**\n   * The system prop that allows defining system overrides as well as additional CSS styles.\n   */\n  sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object]),\n  /**\n   * @ignore\n   */\n  type: PropTypes.oneOfType([PropTypes.oneOf(['button', 'reset', 'submit']), PropTypes.string]),\n  /**\n   * The variant to use.\n   * @default 'text'\n   */\n  variant: PropTypes /* @typescript-to-proptypes-ignore */.oneOfType([PropTypes.oneOf(['contained', 'outlined', 'text']), PropTypes.string])\n} : void 0;\nexport default Button;","import generateUtilityClasses from '@mui/utils/generateUtilityClasses';\nimport generateUtilityClass from '@mui/utils/generateUtilityClass';\nexport function getSwitchBaseUtilityClass(slot) {\n  return generateUtilityClass('PrivateSwitchBase', slot);\n}\nconst switchBaseClasses = generateUtilityClasses('PrivateSwitchBase', ['root', 'checked', 'disabled', 'input', 'edgeStart', 'edgeEnd']);\nexport default switchBaseClasses;","'use client';\n\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport refType from '@mui/utils/refType';\nimport composeClasses from '@mui/utils/composeClasses';\nimport capitalize from \"../utils/capitalize.js\";\nimport rootShouldForwardProp from \"../styles/rootShouldForwardProp.js\";\nimport { styled } from \"../zero-styled/index.js\";\nimport useControlled from \"../utils/useControlled.js\";\nimport useFormControl from \"../FormControl/useFormControl.js\";\nimport ButtonBase from \"../ButtonBase/index.js\";\nimport { getSwitchBaseUtilityClass } from \"./switchBaseClasses.js\";\nimport useSlot from \"../utils/useSlot.js\";\nimport { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nconst useUtilityClasses = ownerState => {\n  const {\n    classes,\n    checked,\n    disabled,\n    edge\n  } = ownerState;\n  const slots = {\n    root: ['root', checked && 'checked', disabled && 'disabled', edge && `edge${capitalize(edge)}`],\n    input: ['input']\n  };\n  return composeClasses(slots, getSwitchBaseUtilityClass, classes);\n};\nconst SwitchBaseRoot = styled(ButtonBase, {\n  name: 'MuiSwitchBase'\n})({\n  padding: 9,\n  borderRadius: '50%',\n  variants: [{\n    props: {\n      edge: 'start',\n      size: 'small'\n    },\n    style: {\n      marginLeft: -3\n    }\n  }, {\n    props: ({\n      edge,\n      ownerState\n    }) => edge === 'start' && ownerState.size !== 'small',\n    style: {\n      marginLeft: -12\n    }\n  }, {\n    props: {\n      edge: 'end',\n      size: 'small'\n    },\n    style: {\n      marginRight: -3\n    }\n  }, {\n    props: ({\n      edge,\n      ownerState\n    }) => edge === 'end' && ownerState.size !== 'small',\n    style: {\n      marginRight: -12\n    }\n  }]\n});\nconst SwitchBaseInput = styled('input', {\n  name: 'MuiSwitchBase',\n  shouldForwardProp: rootShouldForwardProp\n})({\n  cursor: 'inherit',\n  position: 'absolute',\n  opacity: 0,\n  width: '100%',\n  height: '100%',\n  top: 0,\n  left: 0,\n  margin: 0,\n  padding: 0,\n  zIndex: 1\n});\n\n/**\n * @ignore - internal component.\n */\nconst SwitchBase = /*#__PURE__*/React.forwardRef(function SwitchBase(props, ref) {\n  const {\n    autoFocus,\n    checked: checkedProp,\n    checkedIcon,\n    defaultChecked,\n    disabled: disabledProp,\n    disableFocusRipple = false,\n    edge = false,\n    icon,\n    id,\n    inputProps,\n    inputRef,\n    name,\n    onBlur,\n    onChange,\n    onFocus,\n    readOnly,\n    required = false,\n    tabIndex,\n    type,\n    value,\n    slots = {},\n    slotProps = {},\n    ...other\n  } = props;\n  const [checked, setCheckedState] = useControlled({\n    controlled: checkedProp,\n    default: Boolean(defaultChecked),\n    name: 'SwitchBase',\n    state: 'checked'\n  });\n  const muiFormControl = useFormControl();\n  const handleFocus = event => {\n    if (onFocus) {\n      onFocus(event);\n    }\n    if (muiFormControl && muiFormControl.onFocus) {\n      muiFormControl.onFocus(event);\n    }\n  };\n  const handleBlur = event => {\n    if (onBlur) {\n      onBlur(event);\n    }\n    if (muiFormControl && muiFormControl.onBlur) {\n      muiFormControl.onBlur(event);\n    }\n  };\n  const handleInputChange = event => {\n    // Workaround for https://github.com/facebook/react/issues/9023\n    if (event.nativeEvent.defaultPrevented || readOnly) {\n      return;\n    }\n    const newChecked = event.target.checked;\n    setCheckedState(newChecked);\n    if (onChange) {\n      // TODO v6: remove the second argument.\n      onChange(event, newChecked);\n    }\n  };\n  let disabled = disabledProp;\n  if (muiFormControl) {\n    if (typeof disabled === 'undefined') {\n      disabled = muiFormControl.disabled;\n    }\n  }\n  const hasLabelFor = type === 'checkbox' || type === 'radio';\n  const ownerState = {\n    ...props,\n    checked,\n    disabled,\n    disableFocusRipple,\n    edge\n  };\n  const classes = useUtilityClasses(ownerState);\n  const externalForwardedProps = {\n    slots,\n    slotProps: {\n      input: inputProps,\n      ...slotProps\n    }\n  };\n  const [RootSlot, rootSlotProps] = useSlot('root', {\n    ref,\n    elementType: SwitchBaseRoot,\n    className: classes.root,\n    shouldForwardComponentProp: true,\n    externalForwardedProps: {\n      ...externalForwardedProps,\n      component: 'span',\n      ...other\n    },\n    getSlotProps: handlers => ({\n      ...handlers,\n      onFocus: event => {\n        handlers.onFocus?.(event);\n        handleFocus(event);\n      },\n      onBlur: event => {\n        handlers.onBlur?.(event);\n        handleBlur(event);\n      }\n    }),\n    ownerState,\n    additionalProps: {\n      centerRipple: true,\n      focusRipple: !disableFocusRipple,\n      role: undefined,\n      tabIndex: null\n    }\n  });\n  const [InputSlot, inputSlotProps] = useSlot('input', {\n    ref: inputRef,\n    elementType: SwitchBaseInput,\n    className: classes.input,\n    externalForwardedProps,\n    getSlotProps: handlers => ({\n      ...handlers,\n      onChange: event => {\n        handlers.onChange?.(event);\n        handleInputChange(event);\n      }\n    }),\n    ownerState,\n    additionalProps: {\n      autoFocus,\n      checked: checkedProp,\n      defaultChecked,\n      disabled,\n      id: hasLabelFor ? id : undefined,\n      name,\n      readOnly,\n      required,\n      tabIndex,\n      type,\n      ...(type === 'checkbox' && value === undefined ? {} : {\n        value\n      })\n    }\n  });\n  return /*#__PURE__*/_jsxs(RootSlot, {\n    ...rootSlotProps,\n    children: [/*#__PURE__*/_jsx(InputSlot, {\n      ...inputSlotProps\n    }), checked ? checkedIcon : icon]\n  });\n});\n\n// NB: If changed, please update Checkbox, Switch and Radio\n// so that the API documentation is updated.\nprocess.env.NODE_ENV !== \"production\" ? SwitchBase.propTypes = {\n  /**\n   * If `true`, the `input` element is focused during the first mount.\n   */\n  autoFocus: PropTypes.bool,\n  /**\n   * If `true`, the component is checked.\n   */\n  checked: PropTypes.bool,\n  /**\n   * The icon to display when the component is checked.\n   */\n  checkedIcon: PropTypes.node.isRequired,\n  /**\n   * Override or extend the styles applied to the component.\n   */\n  classes: PropTypes.object,\n  /**\n   * @ignore\n   */\n  className: PropTypes.string,\n  /**\n   * @ignore\n   */\n  defaultChecked: PropTypes.bool,\n  /**\n   * If `true`, the component is disabled.\n   */\n  disabled: PropTypes.bool,\n  /**\n   * If `true`, the  keyboard focus ripple is disabled.\n   * @default false\n   */\n  disableFocusRipple: PropTypes.bool,\n  /**\n   * If given, uses a negative margin to counteract the padding on one\n   * side (this is often helpful for aligning the left or right\n   * side of the icon with content above or below, without ruining the border\n   * size and shape).\n   * @default false\n   */\n  edge: PropTypes.oneOf(['end', 'start', false]),\n  /**\n   * The icon to display when the component is unchecked.\n   */\n  icon: PropTypes.node.isRequired,\n  /**\n   * The id of the `input` element.\n   */\n  id: PropTypes.string,\n  /**\n   * [Attributes](https://developer.mozilla.org/en-US/docs/Web/HTML/Reference/Elements/input#attributes) applied to the `input` element.\n   */\n  inputProps: PropTypes.object,\n  /**\n   * Pass a ref to the `input` element.\n   */\n  inputRef: refType,\n  /*\n   * @ignore\n   */\n  name: PropTypes.string,\n  /**\n   * @ignore\n   */\n  onBlur: PropTypes.func,\n  /**\n   * Callback fired when the state is changed.\n   *\n   * @param {object} event The event source of the callback.\n   * You can pull out the new checked state by accessing `event.target.checked` (boolean).\n   */\n  onChange: PropTypes.func,\n  /**\n   * @ignore\n   */\n  onFocus: PropTypes.func,\n  /**\n   * It prevents the user from changing the value of the field\n   * (not from interacting with the field).\n   */\n  readOnly: PropTypes.bool,\n  /**\n   * If `true`, the `input` element is required.\n   */\n  required: PropTypes.bool,\n  /**\n   * The props used for each slot inside.\n   * @default {}\n   */\n  slotProps: PropTypes.shape({\n    input: PropTypes.oneOfType([PropTypes.func, PropTypes.object]),\n    root: PropTypes.oneOfType([PropTypes.func, PropTypes.object])\n  }),\n  /**\n   * The components used for each slot inside.\n   * @default {}\n   */\n  slots: PropTypes.shape({\n    input: PropTypes.elementType,\n    root: PropTypes.elementType\n  }),\n  /**\n   * The system prop that allows defining system overrides as well as additional CSS styles.\n   */\n  sx: PropTypes.object,\n  /**\n   * @ignore\n   */\n  tabIndex: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n  /**\n   * The input component prop `type`.\n   */\n  type: PropTypes.string.isRequired,\n  /**\n   * The value of the component.\n   */\n  value: PropTypes.any\n} : void 0;\nexport default SwitchBase;","'use client';\n\nimport createSvgIcon from \"../../utils/createSvgIcon.js\";\n\n/**\n * @ignore - internal component.\n */\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport default createSvgIcon(/*#__PURE__*/_jsx(\"path\", {\n  d: \"M19 5v14H5V5h14m0-2H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2z\"\n}), 'CheckBoxOutlineBlank');","'use client';\n\nimport createSvgIcon from \"../../utils/createSvgIcon.js\";\n\n/**\n * @ignore - internal component.\n */\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport default createSvgIcon(/*#__PURE__*/_jsx(\"path\", {\n  d: \"M19 3H5c-1.11 0-2 .9-2 2v14c0 1.1.89 2 2 2h14c1.11 0 2-.9 2-2V5c0-1.1-.89-2-2-2zm-9 14l-5-5 1.41-1.41L10 14.17l7.59-7.59L19 8l-9 9z\"\n}), 'CheckBox');","'use client';\n\nimport createSvgIcon from \"../../utils/createSvgIcon.js\";\n\n/**\n * @ignore - internal component.\n */\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport default createSvgIcon(/*#__PURE__*/_jsx(\"path\", {\n  d: \"M19 3H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm-2 10H7v-2h10v2z\"\n}), 'IndeterminateCheckBox');","import generateUtilityClasses from '@mui/utils/generateUtilityClasses';\nimport generateUtilityClass from '@mui/utils/generateUtilityClass';\nexport function getCheckboxUtilityClass(slot) {\n  return generateUtilityClass('MuiCheckbox', slot);\n}\nconst checkboxClasses = generateUtilityClasses('MuiCheckbox', ['root', 'checked', 'disabled', 'indeterminate', 'colorPrimary', 'colorSecondary', 'sizeSmall', 'sizeMedium']);\nexport default checkboxClasses;","'use client';\n\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport composeClasses from '@mui/utils/composeClasses';\nimport SwitchBase from \"../internal/SwitchBase.js\";\nimport CheckBoxOutlineBlankIcon from \"../internal/svg-icons/CheckBoxOutlineBlank.js\";\nimport CheckBoxIcon from \"../internal/svg-icons/CheckBox.js\";\nimport IndeterminateCheckBoxIcon from \"../internal/svg-icons/IndeterminateCheckBox.js\";\nimport capitalize from \"../utils/capitalize.js\";\nimport rootShouldForwardProp from \"../styles/rootShouldForwardProp.js\";\nimport checkboxClasses, { getCheckboxUtilityClass } from \"./checkboxClasses.js\";\nimport { styled } from \"../zero-styled/index.js\";\nimport memoTheme from \"../utils/memoTheme.js\";\nimport createSimplePaletteValueFilter from \"../utils/createSimplePaletteValueFilter.js\";\nimport { useDefaultProps } from \"../DefaultPropsProvider/index.js\";\nimport { mergeSlotProps } from \"../utils/index.js\";\nimport useSlot from \"../utils/useSlot.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nconst useUtilityClasses = ownerState => {\n  const {\n    classes,\n    indeterminate,\n    color,\n    size\n  } = ownerState;\n  const slots = {\n    root: ['root', indeterminate && 'indeterminate', `color${capitalize(color)}`, `size${capitalize(size)}`]\n  };\n  const composedClasses = composeClasses(slots, getCheckboxUtilityClass, classes);\n  return {\n    ...classes,\n    // forward the disabled and checked classes to the SwitchBase\n    ...composedClasses\n  };\n};\nconst CheckboxRoot = styled(SwitchBase, {\n  shouldForwardProp: prop => rootShouldForwardProp(prop) || prop === 'classes',\n  name: 'MuiCheckbox',\n  slot: 'Root',\n  overridesResolver: (props, styles) => {\n    const {\n      ownerState\n    } = props;\n    return [styles.root, ownerState.indeterminate && styles.indeterminate, styles[`size${capitalize(ownerState.size)}`], ownerState.color !== 'default' && styles[`color${capitalize(ownerState.color)}`]];\n  }\n})(memoTheme(({\n  theme\n}) => ({\n  color: (theme.vars || theme).palette.text.secondary,\n  variants: [{\n    props: {\n      color: 'default',\n      disableRipple: false\n    },\n    style: {\n      '&:hover': {\n        backgroundColor: theme.alpha((theme.vars || theme).palette.action.active, (theme.vars || theme).palette.action.hoverOpacity)\n      }\n    }\n  }, ...Object.entries(theme.palette).filter(createSimplePaletteValueFilter()).map(([color]) => ({\n    props: {\n      color,\n      disableRipple: false\n    },\n    style: {\n      '&:hover': {\n        backgroundColor: theme.alpha((theme.vars || theme).palette[color].main, (theme.vars || theme).palette.action.hoverOpacity)\n      }\n    }\n  })), ...Object.entries(theme.palette).filter(createSimplePaletteValueFilter()).map(([color]) => ({\n    props: {\n      color\n    },\n    style: {\n      [`&.${checkboxClasses.checked}, &.${checkboxClasses.indeterminate}`]: {\n        color: (theme.vars || theme).palette[color].main\n      },\n      [`&.${checkboxClasses.disabled}`]: {\n        color: (theme.vars || theme).palette.action.disabled\n      }\n    }\n  })), {\n    // Should be last to override other colors\n    props: {\n      disableRipple: false\n    },\n    style: {\n      // Reset on touch devices, it doesn't add specificity\n      '&:hover': {\n        '@media (hover: none)': {\n          backgroundColor: 'transparent'\n        }\n      }\n    }\n  }]\n})));\nconst defaultCheckedIcon = /*#__PURE__*/_jsx(CheckBoxIcon, {});\nconst defaultIcon = /*#__PURE__*/_jsx(CheckBoxOutlineBlankIcon, {});\nconst defaultIndeterminateIcon = /*#__PURE__*/_jsx(IndeterminateCheckBoxIcon, {});\nconst Checkbox = /*#__PURE__*/React.forwardRef(function Checkbox(inProps, ref) {\n  const props = useDefaultProps({\n    props: inProps,\n    name: 'MuiCheckbox'\n  });\n  const {\n    checkedIcon = defaultCheckedIcon,\n    color = 'primary',\n    icon: iconProp = defaultIcon,\n    indeterminate = false,\n    indeterminateIcon: indeterminateIconProp = defaultIndeterminateIcon,\n    inputProps,\n    size = 'medium',\n    disableRipple = false,\n    className,\n    slots = {},\n    slotProps = {},\n    ...other\n  } = props;\n  const icon = indeterminate ? indeterminateIconProp : iconProp;\n  const indeterminateIcon = indeterminate ? indeterminateIconProp : checkedIcon;\n  const ownerState = {\n    ...props,\n    disableRipple,\n    color,\n    indeterminate,\n    size\n  };\n  const classes = useUtilityClasses(ownerState);\n  const externalInputProps = slotProps.input ?? inputProps;\n  const [RootSlot, rootSlotProps] = useSlot('root', {\n    ref,\n    elementType: CheckboxRoot,\n    className: clsx(classes.root, className),\n    shouldForwardComponentProp: true,\n    externalForwardedProps: {\n      slots,\n      slotProps,\n      ...other\n    },\n    ownerState,\n    additionalProps: {\n      type: 'checkbox',\n      icon: /*#__PURE__*/React.cloneElement(icon, {\n        fontSize: icon.props.fontSize ?? size\n      }),\n      checkedIcon: /*#__PURE__*/React.cloneElement(indeterminateIcon, {\n        fontSize: indeterminateIcon.props.fontSize ?? size\n      }),\n      disableRipple,\n      slots,\n      slotProps: {\n        input: mergeSlotProps(typeof externalInputProps === 'function' ? externalInputProps(ownerState) : externalInputProps, {\n          'data-indeterminate': indeterminate\n        })\n      }\n    }\n  });\n  return /*#__PURE__*/_jsx(RootSlot, {\n    ...rootSlotProps,\n    classes: classes\n  });\n});\nprocess.env.NODE_ENV !== \"production\" ? Checkbox.propTypes /* remove-proptypes */ = {\n  // ┌────────────────────────────── Warning ──────────────────────────────┐\n  // │ These PropTypes are generated from the TypeScript type definitions. │\n  // │    To update them, edit the d.ts file and run `pnpm proptypes`.     │\n  // └─────────────────────────────────────────────────────────────────────┘\n  /**\n   * If `true`, the component is checked.\n   */\n  checked: PropTypes.bool,\n  /**\n   * The icon to display when the component is checked.\n   * @default <CheckBoxIcon />\n   */\n  checkedIcon: PropTypes.node,\n  /**\n   * Override or extend the styles applied to the component.\n   */\n  classes: PropTypes.object,\n  /**\n   * @ignore\n   */\n  className: PropTypes.string,\n  /**\n   * The color of the component.\n   * It supports both default and custom theme colors, which can be added as shown in the\n   * [palette customization guide](https://mui.com/material-ui/customization/palette/#custom-colors).\n   * @default 'primary'\n   */\n  color: PropTypes /* @typescript-to-proptypes-ignore */.oneOfType([PropTypes.oneOf(['default', 'primary', 'secondary', 'error', 'info', 'success', 'warning']), PropTypes.string]),\n  /**\n   * The default checked state. Use when the component is not controlled.\n   */\n  defaultChecked: PropTypes.bool,\n  /**\n   * If `true`, the component is disabled.\n   * @default false\n   */\n  disabled: PropTypes.bool,\n  /**\n   * If `true`, the ripple effect is disabled.\n   * @default false\n   */\n  disableRipple: PropTypes.bool,\n  /**\n   * The icon to display when the component is unchecked.\n   * @default <CheckBoxOutlineBlankIcon />\n   */\n  icon: PropTypes.node,\n  /**\n   * The id of the `input` element.\n   */\n  id: PropTypes.string,\n  /**\n   * If `true`, the component appears indeterminate.\n   * This does not set the native input element to indeterminate due\n   * to inconsistent behavior across browsers.\n   * However, we set a `data-indeterminate` attribute on the `input`.\n   * @default false\n   */\n  indeterminate: PropTypes.bool,\n  /**\n   * The icon to display when the component is indeterminate.\n   * @default <IndeterminateCheckBoxIcon />\n   */\n  indeterminateIcon: PropTypes.node,\n  /**\n   * [Attributes](https://developer.mozilla.org/en-US/docs/Web/HTML/Reference/Elements/input#attributes) applied to the `input` element.\n   * @deprecated Use `slotProps.input` instead. This prop will be removed in a future major release. See [Migrating from deprecated APIs](/material-ui/migration/migrating-from-deprecated-apis/) for more details.\n   */\n  inputProps: PropTypes.object,\n  /**\n   * Callback fired when the state is changed.\n   *\n   * @param {React.ChangeEvent<HTMLInputElement>} event The event source of the callback.\n   * You can pull out the new checked state by accessing `event.target.checked` (boolean).\n   */\n  onChange: PropTypes.func,\n  /**\n   * If `true`, the `input` element is required.\n   * @default false\n   */\n  required: PropTypes.bool,\n  /**\n   * The size of the component.\n   * `small` is equivalent to the dense checkbox styling.\n   * @default 'medium'\n   */\n  size: PropTypes /* @typescript-to-proptypes-ignore */.oneOfType([PropTypes.oneOf(['medium', 'small']), PropTypes.string]),\n  /**\n   * The props used for each slot inside.\n   * @default {}\n   */\n  slotProps: PropTypes.shape({\n    input: PropTypes.oneOfType([PropTypes.func, PropTypes.object]),\n    root: PropTypes.oneOfType([PropTypes.func, PropTypes.object])\n  }),\n  /**\n   * The components used for each slot inside.\n   * @default {}\n   */\n  slots: PropTypes.shape({\n    input: PropTypes.elementType,\n    root: PropTypes.elementType\n  }),\n  /**\n   * The system prop that allows defining system overrides as well as additional CSS styles.\n   */\n  sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object]),\n  /**\n   * The value of the component. The DOM API casts this to a string.\n   * The browser uses \"on\" as the default value.\n   */\n  value: PropTypes.any\n} : void 0;\nexport default Checkbox;","// A change of the browser zoom change the scrollbar size.\n// Credit https://github.com/twbs/bootstrap/blob/488fd8afc535ca3a6ad4dc581f5e89217b6a36ac/js/src/util/scrollbar.js#L14-L18\nexport default function getScrollbarSize(win = window) {\n  // https://developer.mozilla.org/en-US/docs/Web/API/Window/innerWidth#usage_notes\n  const documentWidth = win.document.documentElement.clientWidth;\n  return win.innerWidth - documentWidth;\n}","import ownerWindow from '@mui/utils/ownerWindow';\nimport ownerDocument from '@mui/utils/ownerDocument';\nimport getScrollbarSize from '@mui/utils/getScrollbarSize';\n// Is a vertical scrollbar displayed?\nfunction isOverflowing(container) {\n  const doc = ownerDocument(container);\n  if (doc.body === container) {\n    return ownerWindow(container).innerWidth > doc.documentElement.clientWidth;\n  }\n  return container.scrollHeight > container.clientHeight;\n}\nexport function ariaHidden(element, hide) {\n  if (hide) {\n    element.setAttribute('aria-hidden', 'true');\n  } else {\n    element.removeAttribute('aria-hidden');\n  }\n}\nfunction getPaddingRight(element) {\n  return parseFloat(ownerWindow(element).getComputedStyle(element).paddingRight) || 0;\n}\nfunction isAriaHiddenForbiddenOnElement(element) {\n  // The forbidden HTML tags are the ones from ARIA specification that\n  // can be children of body and can't have aria-hidden attribute.\n  // cf. https://www.w3.org/TR/html-aria/#docconformance\n  const forbiddenTagNames = ['TEMPLATE', 'SCRIPT', 'STYLE', 'LINK', 'MAP', 'META', 'NOSCRIPT', 'PICTURE', 'COL', 'COLGROUP', 'PARAM', 'SLOT', 'SOURCE', 'TRACK'];\n  const isForbiddenTagName = forbiddenTagNames.includes(element.tagName);\n  const isInputHidden = element.tagName === 'INPUT' && element.getAttribute('type') === 'hidden';\n  return isForbiddenTagName || isInputHidden;\n}\nfunction ariaHiddenSiblings(container, mountElement, currentElement, elementsToExclude, hide) {\n  const blacklist = [mountElement, currentElement, ...elementsToExclude];\n  [].forEach.call(container.children, element => {\n    const isNotExcludedElement = !blacklist.includes(element);\n    const isNotForbiddenElement = !isAriaHiddenForbiddenOnElement(element);\n    if (isNotExcludedElement && isNotForbiddenElement) {\n      ariaHidden(element, hide);\n    }\n  });\n}\nfunction findIndexOf(items, callback) {\n  let idx = -1;\n  items.some((item, index) => {\n    if (callback(item)) {\n      idx = index;\n      return true;\n    }\n    return false;\n  });\n  return idx;\n}\nfunction handleContainer(containerInfo, props) {\n  const restoreStyle = [];\n  const container = containerInfo.container;\n  if (!props.disableScrollLock) {\n    if (isOverflowing(container)) {\n      // Compute the size before applying overflow hidden to avoid any scroll jumps.\n      const scrollbarSize = getScrollbarSize(ownerWindow(container));\n      restoreStyle.push({\n        value: container.style.paddingRight,\n        property: 'padding-right',\n        el: container\n      });\n      // Use computed style, here to get the real padding to add our scrollbar width.\n      container.style.paddingRight = `${getPaddingRight(container) + scrollbarSize}px`;\n\n      // .mui-fixed is a global helper.\n      const fixedElements = ownerDocument(container).querySelectorAll('.mui-fixed');\n      [].forEach.call(fixedElements, element => {\n        restoreStyle.push({\n          value: element.style.paddingRight,\n          property: 'padding-right',\n          el: element\n        });\n        element.style.paddingRight = `${getPaddingRight(element) + scrollbarSize}px`;\n      });\n    }\n    let scrollContainer;\n    if (container.parentNode instanceof DocumentFragment) {\n      scrollContainer = ownerDocument(container).body;\n    } else {\n      // Support html overflow-y: auto for scroll stability between pages\n      // https://css-tricks.com/snippets/css/force-vertical-scrollbar/\n      const parent = container.parentElement;\n      const containerWindow = ownerWindow(container);\n      scrollContainer = parent?.nodeName === 'HTML' && containerWindow.getComputedStyle(parent).overflowY === 'scroll' ? parent : container;\n    }\n\n    // Block the scroll even if no scrollbar is visible to account for mobile keyboard\n    // screensize shrink.\n    restoreStyle.push({\n      value: scrollContainer.style.overflow,\n      property: 'overflow',\n      el: scrollContainer\n    }, {\n      value: scrollContainer.style.overflowX,\n      property: 'overflow-x',\n      el: scrollContainer\n    }, {\n      value: scrollContainer.style.overflowY,\n      property: 'overflow-y',\n      el: scrollContainer\n    });\n    scrollContainer.style.overflow = 'hidden';\n  }\n  const restore = () => {\n    restoreStyle.forEach(({\n      value,\n      el,\n      property\n    }) => {\n      if (value) {\n        el.style.setProperty(property, value);\n      } else {\n        el.style.removeProperty(property);\n      }\n    });\n  };\n  return restore;\n}\nfunction getHiddenSiblings(container) {\n  const hiddenSiblings = [];\n  [].forEach.call(container.children, element => {\n    if (element.getAttribute('aria-hidden') === 'true') {\n      hiddenSiblings.push(element);\n    }\n  });\n  return hiddenSiblings;\n}\n/**\n * @ignore - do not document.\n *\n * Proper state management for containers and the modals in those containers.\n * Simplified, but inspired by react-overlay's ModalManager class.\n * Used by the Modal to ensure proper styling of containers.\n */\nexport class ModalManager {\n  constructor() {\n    this.modals = [];\n    this.containers = [];\n  }\n  add(modal, container) {\n    let modalIndex = this.modals.indexOf(modal);\n    if (modalIndex !== -1) {\n      return modalIndex;\n    }\n    modalIndex = this.modals.length;\n    this.modals.push(modal);\n\n    // If the modal we are adding is already in the DOM.\n    if (modal.modalRef) {\n      ariaHidden(modal.modalRef, false);\n    }\n    const hiddenSiblings = getHiddenSiblings(container);\n    ariaHiddenSiblings(container, modal.mount, modal.modalRef, hiddenSiblings, true);\n    const containerIndex = findIndexOf(this.containers, item => item.container === container);\n    if (containerIndex !== -1) {\n      this.containers[containerIndex].modals.push(modal);\n      return modalIndex;\n    }\n    this.containers.push({\n      modals: [modal],\n      container,\n      restore: null,\n      hiddenSiblings\n    });\n    return modalIndex;\n  }\n  mount(modal, props) {\n    const containerIndex = findIndexOf(this.containers, item => item.modals.includes(modal));\n    const containerInfo = this.containers[containerIndex];\n    if (!containerInfo.restore) {\n      containerInfo.restore = handleContainer(containerInfo, props);\n    }\n  }\n  remove(modal, ariaHiddenState = true) {\n    const modalIndex = this.modals.indexOf(modal);\n    if (modalIndex === -1) {\n      return modalIndex;\n    }\n    const containerIndex = findIndexOf(this.containers, item => item.modals.includes(modal));\n    const containerInfo = this.containers[containerIndex];\n    containerInfo.modals.splice(containerInfo.modals.indexOf(modal), 1);\n    this.modals.splice(modalIndex, 1);\n\n    // If that was the last modal in a container, clean up the container.\n    if (containerInfo.modals.length === 0) {\n      // The modal might be closed before it had the chance to be mounted in the DOM.\n      if (containerInfo.restore) {\n        containerInfo.restore();\n      }\n      if (modal.modalRef) {\n        // In case the modal wasn't in the DOM yet.\n        ariaHidden(modal.modalRef, ariaHiddenState);\n      }\n      ariaHiddenSiblings(containerInfo.container, modal.mount, modal.modalRef, containerInfo.hiddenSiblings, false);\n      this.containers.splice(containerIndex, 1);\n    } else {\n      // Otherwise make sure the next top modal is visible to a screen reader.\n      const nextTop = containerInfo.modals[containerInfo.modals.length - 1];\n      // as soon as a modal is adding its modalRef is undefined. it can't set\n      // aria-hidden because the dom element doesn't exist either\n      // when modal was unmounted before modalRef gets null\n      if (nextTop.modalRef) {\n        ariaHidden(nextTop.modalRef, false);\n      }\n    }\n    return modalIndex;\n  }\n  isTopModal(modal) {\n    return this.modals.length > 0 && this.modals[this.modals.length - 1] === modal;\n  }\n}","/**\n * Gets the actual active element, traversing through shadow roots if necessary.\n *\n * When an element inside a shadow root has focus, `document.activeElement` returns\n * the shadow host element. This function recursively traverses shadow roots to find\n * the actual focused element.\n *\n * @param root - The document or shadow root to start the search from.\n * @returns The actual focused element, or null if no element has focus.\n *\n * @example\n * // In a shadow DOM context\n * const activeElement = getActiveElement(document);\n * // Returns the actual focused element inside the shadow root\n *\n * @example\n * // Starting from a specific document\n * const activeElement = getActiveElement(ownerDocument(element));\n */\nexport default function activeElement(doc) {\n  let element = doc.activeElement;\n  while (element?.shadowRoot?.activeElement != null) {\n    element = element.shadowRoot.activeElement;\n  }\n  return element;\n}","'use client';\n\n/* eslint-disable consistent-return, jsx-a11y/no-noninteractive-tabindex */\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport useForkRef from '@mui/utils/useForkRef';\nimport ownerDocument from '@mui/utils/ownerDocument';\nimport getReactElementRef from '@mui/utils/getReactElementRef';\nimport exactProp from '@mui/utils/exactProp';\nimport elementAcceptingRef from '@mui/utils/elementAcceptingRef';\nimport getActiveElement from \"../utils/getActiveElement.js\";\nimport { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\n// Inspired by https://github.com/focus-trap/tabbable\nconst candidatesSelector = ['input', 'select', 'textarea', 'a[href]', 'button', '[tabindex]', 'audio[controls]', 'video[controls]', '[contenteditable]:not([contenteditable=\"false\"])'].join(',');\nfunction getTabIndex(node) {\n  const tabindexAttr = parseInt(node.getAttribute('tabindex') || '', 10);\n  if (!Number.isNaN(tabindexAttr)) {\n    return tabindexAttr;\n  }\n\n  // Browsers do not return `tabIndex` correctly for contentEditable nodes;\n  // https://issues.chromium.org/issues/41283952\n  // so if they don't have a tabindex attribute specifically set, assume it's 0.\n  // in Chrome, <details/>, <audio controls/> and <video controls/> elements get a default\n  //  `tabIndex` of -1 when the 'tabindex' attribute isn't specified in the DOM,\n  //  yet they are still part of the regular tab order; in FF, they get a default\n  //  `tabIndex` of 0; since Chrome still puts those elements in the regular tab\n  //  order, consider their tab index to be 0.\n  if (node.contentEditable === 'true' || (node.nodeName === 'AUDIO' || node.nodeName === 'VIDEO' || node.nodeName === 'DETAILS') && node.getAttribute('tabindex') === null) {\n    return 0;\n  }\n  return node.tabIndex;\n}\nfunction isNonTabbableRadio(node) {\n  if (node.tagName !== 'INPUT' || node.type !== 'radio') {\n    return false;\n  }\n  if (!node.name) {\n    return false;\n  }\n  const getRadio = selector => node.ownerDocument.querySelector(`input[type=\"radio\"]${selector}`);\n  let roving = getRadio(`[name=\"${node.name}\"]:checked`);\n  if (!roving) {\n    roving = getRadio(`[name=\"${node.name}\"]`);\n  }\n  return roving !== node;\n}\nfunction isNodeMatchingSelectorFocusable(node) {\n  if (node.disabled || node.tagName === 'INPUT' && node.type === 'hidden' || isNonTabbableRadio(node)) {\n    return false;\n  }\n  return true;\n}\nfunction defaultGetTabbable(root) {\n  const regularTabNodes = [];\n  const orderedTabNodes = [];\n  Array.from(root.querySelectorAll(candidatesSelector)).forEach((node, i) => {\n    const nodeTabIndex = getTabIndex(node);\n    if (nodeTabIndex === -1 || !isNodeMatchingSelectorFocusable(node)) {\n      return;\n    }\n    if (nodeTabIndex === 0) {\n      regularTabNodes.push(node);\n    } else {\n      orderedTabNodes.push({\n        documentOrder: i,\n        tabIndex: nodeTabIndex,\n        node: node\n      });\n    }\n  });\n  return orderedTabNodes.sort((a, b) => a.tabIndex === b.tabIndex ? a.documentOrder - b.documentOrder : a.tabIndex - b.tabIndex).map(a => a.node).concat(regularTabNodes);\n}\nfunction defaultIsEnabled() {\n  return true;\n}\n\n/**\n * @ignore - internal component.\n */\nfunction FocusTrap(props) {\n  const {\n    children,\n    disableAutoFocus = false,\n    disableEnforceFocus = false,\n    disableRestoreFocus = false,\n    getTabbable = defaultGetTabbable,\n    isEnabled = defaultIsEnabled,\n    open\n  } = props;\n  const ignoreNextEnforceFocus = React.useRef(false);\n  const sentinelStart = React.useRef(null);\n  const sentinelEnd = React.useRef(null);\n  const nodeToRestore = React.useRef(null);\n  const reactFocusEventTarget = React.useRef(null);\n  // This variable is useful when disableAutoFocus is true.\n  // It waits for the active element to move into the component to activate.\n  const activated = React.useRef(false);\n  const rootRef = React.useRef(null);\n  const handleRef = useForkRef(getReactElementRef(children), rootRef);\n  const lastKeydown = React.useRef(null);\n  React.useEffect(() => {\n    // We might render an empty child.\n    if (!open || !rootRef.current) {\n      return;\n    }\n    activated.current = !disableAutoFocus;\n  }, [disableAutoFocus, open]);\n  React.useEffect(() => {\n    // We might render an empty child.\n    if (!open || !rootRef.current) {\n      return;\n    }\n    const doc = ownerDocument(rootRef.current);\n    const activeElement = getActiveElement(doc);\n    if (!rootRef.current.contains(activeElement)) {\n      if (!rootRef.current.hasAttribute('tabIndex')) {\n        if (process.env.NODE_ENV !== 'production') {\n          console.error(['MUI: The modal content node does not accept focus.', 'For the benefit of assistive technologies, ' + 'the tabIndex of the node is being set to \"-1\".'].join('\\n'));\n        }\n        rootRef.current.setAttribute('tabIndex', '-1');\n      }\n      if (activated.current) {\n        rootRef.current.focus();\n      }\n    }\n    return () => {\n      // restoreLastFocus()\n      if (!disableRestoreFocus) {\n        // In IE11 it is possible for document.activeElement to be null resulting\n        // in nodeToRestore.current being null.\n        // Not all elements in IE11 have a focus method.\n        // Once IE11 support is dropped the focus() call can be unconditional.\n        if (nodeToRestore.current && nodeToRestore.current.focus) {\n          ignoreNextEnforceFocus.current = true;\n          nodeToRestore.current.focus();\n        }\n        nodeToRestore.current = null;\n      }\n    };\n    // Missing `disableRestoreFocus` which is fine.\n    // We don't support changing that prop on an open FocusTrap\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [open]);\n  React.useEffect(() => {\n    // We might render an empty child.\n    if (!open || !rootRef.current) {\n      return;\n    }\n    const doc = ownerDocument(rootRef.current);\n    const loopFocus = nativeEvent => {\n      lastKeydown.current = nativeEvent;\n      if (disableEnforceFocus || !isEnabled() || nativeEvent.key !== 'Tab') {\n        return;\n      }\n      const activeElement = getActiveElement(doc);\n\n      // Make sure the next tab starts from the right place.\n      // activeElement refers to the origin.\n      if (activeElement === rootRef.current && nativeEvent.shiftKey) {\n        // We need to ignore the next contain as\n        // it will try to move the focus back to the rootRef element.\n        ignoreNextEnforceFocus.current = true;\n        if (sentinelEnd.current) {\n          sentinelEnd.current.focus();\n        }\n      }\n    };\n    const contain = () => {\n      const rootElement = rootRef.current;\n\n      // Cleanup functions are executed lazily in React 17.\n      // Contain can be called between the component being unmounted and its cleanup function being run.\n      if (rootElement === null) {\n        return;\n      }\n      const activeEl = getActiveElement(doc);\n      if (!doc.hasFocus() || !isEnabled() || ignoreNextEnforceFocus.current) {\n        ignoreNextEnforceFocus.current = false;\n        return;\n      }\n\n      // The focus is already inside\n      if (rootElement.contains(activeEl)) {\n        return;\n      }\n\n      // The disableEnforceFocus is set and the focus is outside of the focus trap (and sentinel nodes)\n      if (disableEnforceFocus && activeEl !== sentinelStart.current && activeEl !== sentinelEnd.current) {\n        return;\n      }\n\n      // if the focus event is not coming from inside the children's react tree, reset the refs\n      if (activeEl !== reactFocusEventTarget.current) {\n        reactFocusEventTarget.current = null;\n      } else if (reactFocusEventTarget.current !== null) {\n        return;\n      }\n      if (!activated.current) {\n        return;\n      }\n      let tabbable = [];\n      if (activeEl === sentinelStart.current || activeEl === sentinelEnd.current) {\n        tabbable = getTabbable(rootRef.current);\n      }\n\n      // one of the sentinel nodes was focused, so move the focus\n      // to the first/last tabbable element inside the focus trap\n      if (tabbable.length > 0) {\n        const isShiftTab = Boolean(lastKeydown.current?.shiftKey && lastKeydown.current?.key === 'Tab');\n        const focusNext = tabbable[0];\n        const focusPrevious = tabbable[tabbable.length - 1];\n        if (typeof focusNext !== 'string' && typeof focusPrevious !== 'string') {\n          if (isShiftTab) {\n            focusPrevious.focus();\n          } else {\n            focusNext.focus();\n          }\n        }\n        // no tabbable elements in the trap focus or the focus was outside of the focus trap\n      } else {\n        rootElement.focus();\n      }\n    };\n    doc.addEventListener('focusin', contain);\n    doc.addEventListener('keydown', loopFocus, true);\n\n    // With Edge, Safari and Firefox, no focus related events are fired when the focused area stops being a focused area.\n    // for example https://bugzilla.mozilla.org/show_bug.cgi?id=559561.\n    // Instead, we can look if the active element was restored on the BODY element.\n    //\n    // The whatwg spec defines how the browser should behave but does not explicitly mention any events:\n    // https://html.spec.whatwg.org/multipage/interaction.html#focus-fixup-rule.\n    const interval = setInterval(() => {\n      const activeEl = getActiveElement(doc);\n      if (activeEl && activeEl.tagName === 'BODY') {\n        contain();\n      }\n    }, 50);\n    return () => {\n      clearInterval(interval);\n      doc.removeEventListener('focusin', contain);\n      doc.removeEventListener('keydown', loopFocus, true);\n    };\n  }, [disableAutoFocus, disableEnforceFocus, disableRestoreFocus, isEnabled, open, getTabbable]);\n  const onFocus = event => {\n    if (nodeToRestore.current === null) {\n      nodeToRestore.current = event.relatedTarget;\n    }\n    activated.current = true;\n    reactFocusEventTarget.current = event.target;\n    const childrenPropsHandler = children.props.onFocus;\n    if (childrenPropsHandler) {\n      childrenPropsHandler(event);\n    }\n  };\n  const handleFocusSentinel = event => {\n    if (nodeToRestore.current === null) {\n      nodeToRestore.current = event.relatedTarget;\n    }\n    activated.current = true;\n  };\n  return /*#__PURE__*/_jsxs(React.Fragment, {\n    children: [/*#__PURE__*/_jsx(\"div\", {\n      tabIndex: open ? 0 : -1,\n      onFocus: handleFocusSentinel,\n      ref: sentinelStart,\n      \"data-testid\": \"sentinelStart\"\n    }), /*#__PURE__*/React.cloneElement(children, {\n      ref: handleRef,\n      onFocus\n    }), /*#__PURE__*/_jsx(\"div\", {\n      tabIndex: open ? 0 : -1,\n      onFocus: handleFocusSentinel,\n      ref: sentinelEnd,\n      \"data-testid\": \"sentinelEnd\"\n    })]\n  });\n}\nprocess.env.NODE_ENV !== \"production\" ? FocusTrap.propTypes /* remove-proptypes */ = {\n  // ┌────────────────────────────── Warning ──────────────────────────────┐\n  // │ These PropTypes are generated from the TypeScript type definitions. │\n  // │ To update them, edit the TypeScript types and run `pnpm proptypes`. │\n  // └─────────────────────────────────────────────────────────────────────┘\n  /**\n   * A single child content element.\n   */\n  children: elementAcceptingRef,\n  /**\n   * If `true`, the focus trap will not automatically shift focus to itself when it opens, and\n   * replace it to the last focused element when it closes.\n   * This also works correctly with any focus trap children that have the `disableAutoFocus` prop.\n   *\n   * Generally this should never be set to `true` as it makes the focus trap less\n   * accessible to assistive technologies, like screen readers.\n   * @default false\n   */\n  disableAutoFocus: PropTypes.bool,\n  /**\n   * If `true`, the focus trap will not prevent focus from leaving the focus trap while open.\n   *\n   * Generally this should never be set to `true` as it makes the focus trap less\n   * accessible to assistive technologies, like screen readers.\n   * @default false\n   */\n  disableEnforceFocus: PropTypes.bool,\n  /**\n   * If `true`, the focus trap will not restore focus to previously focused element once\n   * focus trap is hidden or unmounted.\n   * @default false\n   */\n  disableRestoreFocus: PropTypes.bool,\n  /**\n   * Returns an array of ordered tabbable nodes (i.e. in tab order) within the root.\n   * For instance, you can provide the \"tabbable\" npm dependency.\n   * @param {HTMLElement} root\n   */\n  getTabbable: PropTypes.func,\n  /**\n   * This prop extends the `open` prop.\n   * It allows to toggle the open state without having to wait for a rerender when changing the `open` prop.\n   * This prop should be memoized.\n   * It can be used to support multiple focus trap mounted at the same time.\n   * @default function defaultIsEnabled(): boolean {\n   *   return true;\n   * }\n   */\n  isEnabled: PropTypes.func,\n  /**\n   * If `true`, focus is locked.\n   */\n  open: PropTypes.bool.isRequired\n} : void 0;\nif (process.env.NODE_ENV !== 'production') {\n  // eslint-disable-next-line\n  FocusTrap['propTypes' + ''] = exactProp(FocusTrap.propTypes);\n}\nexport default FocusTrap;","'use client';\n\nimport * as React from 'react';\nimport ownerDocument from '@mui/utils/ownerDocument';\nimport useForkRef from '@mui/utils/useForkRef';\nimport useEventCallback from '@mui/utils/useEventCallback';\nimport createChainedFunction from '@mui/utils/createChainedFunction';\nimport extractEventHandlers from '@mui/utils/extractEventHandlers';\nimport { ModalManager, ariaHidden } from \"./ModalManager.js\";\nfunction getContainer(container) {\n  return typeof container === 'function' ? container() : container;\n}\nfunction getHasTransition(children) {\n  return children ? children.props.hasOwnProperty('in') : false;\n}\nconst noop = () => {};\n\n// A modal manager used to track and manage the state of open Modals.\n// Modals don't open on the server so this won't conflict with concurrent requests.\nconst manager = new ModalManager();\nfunction useModal(parameters) {\n  const {\n    container,\n    disableEscapeKeyDown = false,\n    disableScrollLock = false,\n    closeAfterTransition = false,\n    onTransitionEnter,\n    onTransitionExited,\n    children,\n    onClose,\n    open,\n    rootRef\n  } = parameters;\n\n  // @ts-ignore internal logic\n  const modal = React.useRef({});\n  const mountNodeRef = React.useRef(null);\n  const modalRef = React.useRef(null);\n  const handleRef = useForkRef(modalRef, rootRef);\n  const [exited, setExited] = React.useState(!open);\n  const hasTransition = getHasTransition(children);\n  let ariaHiddenProp = true;\n  if (parameters['aria-hidden'] === 'false' || parameters['aria-hidden'] === false) {\n    ariaHiddenProp = false;\n  }\n  const getDoc = () => ownerDocument(mountNodeRef.current);\n  const getModal = () => {\n    modal.current.modalRef = modalRef.current;\n    modal.current.mount = mountNodeRef.current;\n    return modal.current;\n  };\n  const handleMounted = () => {\n    manager.mount(getModal(), {\n      disableScrollLock\n    });\n\n    // Fix a bug on Chrome where the scroll isn't initially 0.\n    if (modalRef.current) {\n      modalRef.current.scrollTop = 0;\n    }\n  };\n  const handleOpen = useEventCallback(() => {\n    const resolvedContainer = getContainer(container) || getDoc().body;\n    manager.add(getModal(), resolvedContainer);\n\n    // The element was already mounted.\n    if (modalRef.current) {\n      handleMounted();\n    }\n  });\n  const isTopModal = () => manager.isTopModal(getModal());\n  const handlePortalRef = useEventCallback(node => {\n    mountNodeRef.current = node;\n    if (!node) {\n      return;\n    }\n    if (open && isTopModal()) {\n      handleMounted();\n    } else if (modalRef.current) {\n      ariaHidden(modalRef.current, ariaHiddenProp);\n    }\n  });\n  const handleClose = React.useCallback(() => {\n    manager.remove(getModal(), ariaHiddenProp);\n  }, [ariaHiddenProp]);\n  React.useEffect(() => {\n    return () => {\n      handleClose();\n    };\n  }, [handleClose]);\n  React.useEffect(() => {\n    if (open) {\n      handleOpen();\n    } else if (!hasTransition || !closeAfterTransition) {\n      handleClose();\n    }\n  }, [open, handleClose, hasTransition, closeAfterTransition, handleOpen]);\n  const createHandleKeyDown = otherHandlers => event => {\n    otherHandlers.onKeyDown?.(event);\n\n    // The handler doesn't take event.defaultPrevented into account:\n    //\n    // event.preventDefault() is meant to stop default behaviors like\n    // clicking a checkbox to check it, hitting a button to submit a form,\n    // and hitting left arrow to move the cursor in a text input etc.\n    // Only special HTML elements have these default behaviors.\n    if (event.key !== 'Escape' || event.which === 229 ||\n    // Wait until IME is settled.\n    !isTopModal()) {\n      return;\n    }\n    if (!disableEscapeKeyDown) {\n      // Swallow the event, in case someone is listening for the escape key on the body.\n      event.stopPropagation();\n      if (onClose) {\n        onClose(event, 'escapeKeyDown');\n      }\n    }\n  };\n  const createHandleBackdropClick = otherHandlers => event => {\n    otherHandlers.onClick?.(event);\n    if (event.target !== event.currentTarget) {\n      return;\n    }\n    if (onClose) {\n      onClose(event, 'backdropClick');\n    }\n  };\n  const getRootProps = (otherHandlers = {}) => {\n    const propsEventHandlers = extractEventHandlers(parameters);\n\n    // The custom event handlers shouldn't be spread on the root element\n    delete propsEventHandlers.onTransitionEnter;\n    delete propsEventHandlers.onTransitionExited;\n    const externalEventHandlers = {\n      ...propsEventHandlers,\n      ...otherHandlers\n    };\n    return {\n      /*\n       * Marking an element with the role presentation indicates to assistive technology\n       * that this element should be ignored; it exists to support the web application and\n       * is not meant for humans to interact with directly.\n       * https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/no-static-element-interactions.md\n       */\n      role: 'presentation',\n      ...externalEventHandlers,\n      onKeyDown: createHandleKeyDown(externalEventHandlers),\n      ref: handleRef\n    };\n  };\n  const getBackdropProps = (otherHandlers = {}) => {\n    const externalEventHandlers = otherHandlers;\n    return {\n      'aria-hidden': true,\n      ...externalEventHandlers,\n      onClick: createHandleBackdropClick(externalEventHandlers),\n      open\n    };\n  };\n  const getTransitionProps = () => {\n    const handleEnter = () => {\n      setExited(false);\n      if (onTransitionEnter) {\n        onTransitionEnter();\n      }\n    };\n    const handleExited = () => {\n      setExited(true);\n      if (onTransitionExited) {\n        onTransitionExited();\n      }\n      if (closeAfterTransition) {\n        handleClose();\n      }\n    };\n    return {\n      onEnter: createChainedFunction(handleEnter, children?.props.onEnter ?? noop),\n      onExited: createChainedFunction(handleExited, children?.props.onExited ?? noop)\n    };\n  };\n  return {\n    getRootProps,\n    getBackdropProps,\n    getTransitionProps,\n    rootRef: handleRef,\n    portalRef: handlePortalRef,\n    isTopModal,\n    exited,\n    hasTransition\n  };\n}\nexport default useModal;","import generateUtilityClasses from '@mui/utils/generateUtilityClasses';\nimport generateUtilityClass from '@mui/utils/generateUtilityClass';\nexport function getModalUtilityClass(slot) {\n  return generateUtilityClass('MuiModal', slot);\n}\nconst modalClasses = generateUtilityClasses('MuiModal', ['root', 'hidden', 'backdrop']);\nexport default modalClasses;","'use client';\n\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport HTMLElementType from '@mui/utils/HTMLElementType';\nimport elementAcceptingRef from '@mui/utils/elementAcceptingRef';\nimport composeClasses from '@mui/utils/composeClasses';\nimport FocusTrap from \"../Unstable_TrapFocus/index.js\";\nimport Portal from \"../Portal/index.js\";\nimport { styled } from \"../zero-styled/index.js\";\nimport memoTheme from \"../utils/memoTheme.js\";\nimport { useDefaultProps } from \"../DefaultPropsProvider/index.js\";\nimport Backdrop from \"../Backdrop/index.js\";\nimport useModal from \"./useModal.js\";\nimport { getModalUtilityClass } from \"./modalClasses.js\";\nimport useSlot from \"../utils/useSlot.js\";\nimport { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nconst useUtilityClasses = ownerState => {\n  const {\n    open,\n    exited,\n    classes\n  } = ownerState;\n  const slots = {\n    root: ['root', !open && exited && 'hidden'],\n    backdrop: ['backdrop']\n  };\n  return composeClasses(slots, getModalUtilityClass, classes);\n};\nconst ModalRoot = styled('div', {\n  name: 'MuiModal',\n  slot: 'Root',\n  overridesResolver: (props, styles) => {\n    const {\n      ownerState\n    } = props;\n    return [styles.root, !ownerState.open && ownerState.exited && styles.hidden];\n  }\n})(memoTheme(({\n  theme\n}) => ({\n  position: 'fixed',\n  zIndex: (theme.vars || theme).zIndex.modal,\n  right: 0,\n  bottom: 0,\n  top: 0,\n  left: 0,\n  variants: [{\n    props: ({\n      ownerState\n    }) => !ownerState.open && ownerState.exited,\n    style: {\n      visibility: 'hidden'\n    }\n  }]\n})));\nconst ModalBackdrop = styled(Backdrop, {\n  name: 'MuiModal',\n  slot: 'Backdrop'\n})({\n  zIndex: -1\n});\n\n/**\n * Modal is a lower-level construct that is leveraged by the following components:\n *\n * - [Dialog](/material-ui/api/dialog/)\n * - [Drawer](/material-ui/api/drawer/)\n * - [Menu](/material-ui/api/menu/)\n * - [Popover](/material-ui/api/popover/)\n *\n * If you are creating a modal dialog, you probably want to use the [Dialog](/material-ui/api/dialog/) component\n * rather than directly using Modal.\n *\n * This component shares many concepts with [react-overlays](https://react-bootstrap.github.io/react-overlays/#modals).\n */\nconst Modal = /*#__PURE__*/React.forwardRef(function Modal(inProps, ref) {\n  const props = useDefaultProps({\n    name: 'MuiModal',\n    props: inProps\n  });\n  const {\n    BackdropComponent = ModalBackdrop,\n    BackdropProps,\n    classes: classesProp,\n    className,\n    closeAfterTransition = false,\n    children,\n    container,\n    component,\n    components = {},\n    componentsProps = {},\n    disableAutoFocus = false,\n    disableEnforceFocus = false,\n    disableEscapeKeyDown = false,\n    disablePortal = false,\n    disableRestoreFocus = false,\n    disableScrollLock = false,\n    hideBackdrop = false,\n    keepMounted = false,\n    onClose,\n    onTransitionEnter,\n    onTransitionExited,\n    open,\n    slotProps = {},\n    slots = {},\n    // eslint-disable-next-line react/prop-types\n    theme,\n    ...other\n  } = props;\n  const propsWithDefaults = {\n    ...props,\n    closeAfterTransition,\n    disableAutoFocus,\n    disableEnforceFocus,\n    disableEscapeKeyDown,\n    disablePortal,\n    disableRestoreFocus,\n    disableScrollLock,\n    hideBackdrop,\n    keepMounted\n  };\n  const {\n    getRootProps,\n    getBackdropProps,\n    getTransitionProps,\n    portalRef,\n    isTopModal,\n    exited,\n    hasTransition\n  } = useModal({\n    ...propsWithDefaults,\n    rootRef: ref\n  });\n  const ownerState = {\n    ...propsWithDefaults,\n    exited\n  };\n  const classes = useUtilityClasses(ownerState);\n  const childProps = {};\n  if (children.props.tabIndex === undefined) {\n    childProps.tabIndex = '-1';\n  }\n\n  // It's a Transition like component\n  if (hasTransition) {\n    const {\n      onEnter,\n      onExited\n    } = getTransitionProps();\n    childProps.onEnter = onEnter;\n    childProps.onExited = onExited;\n  }\n  const externalForwardedProps = {\n    slots: {\n      root: components.Root,\n      backdrop: components.Backdrop,\n      ...slots\n    },\n    slotProps: {\n      ...componentsProps,\n      ...slotProps\n    }\n  };\n  const [RootSlot, rootProps] = useSlot('root', {\n    ref,\n    elementType: ModalRoot,\n    externalForwardedProps: {\n      ...externalForwardedProps,\n      ...other,\n      component\n    },\n    getSlotProps: getRootProps,\n    ownerState,\n    className: clsx(className, classes?.root, !ownerState.open && ownerState.exited && classes?.hidden)\n  });\n  const [BackdropSlot, backdropProps] = useSlot('backdrop', {\n    ref: BackdropProps?.ref,\n    elementType: BackdropComponent,\n    externalForwardedProps,\n    shouldForwardComponentProp: true,\n    additionalProps: BackdropProps,\n    getSlotProps: otherHandlers => {\n      return getBackdropProps({\n        ...otherHandlers,\n        onClick: event => {\n          if (otherHandlers?.onClick) {\n            otherHandlers.onClick(event);\n          }\n        }\n      });\n    },\n    className: clsx(BackdropProps?.className, classes?.backdrop),\n    ownerState\n  });\n  if (!keepMounted && !open && (!hasTransition || exited)) {\n    return null;\n  }\n  return /*#__PURE__*/_jsx(Portal, {\n    ref: portalRef,\n    container: container,\n    disablePortal: disablePortal,\n    children: /*#__PURE__*/_jsxs(RootSlot, {\n      ...rootProps,\n      children: [!hideBackdrop && BackdropComponent ? /*#__PURE__*/_jsx(BackdropSlot, {\n        ...backdropProps\n      }) : null, /*#__PURE__*/_jsx(FocusTrap, {\n        disableEnforceFocus: disableEnforceFocus,\n        disableAutoFocus: disableAutoFocus,\n        disableRestoreFocus: disableRestoreFocus,\n        isEnabled: isTopModal,\n        open: open,\n        children: /*#__PURE__*/React.cloneElement(children, childProps)\n      })]\n    })\n  });\n});\nprocess.env.NODE_ENV !== \"production\" ? Modal.propTypes /* remove-proptypes */ = {\n  // ┌────────────────────────────── Warning ──────────────────────────────┐\n  // │ These PropTypes are generated from the TypeScript type definitions. │\n  // │    To update them, edit the d.ts file and run `pnpm proptypes`.     │\n  // └─────────────────────────────────────────────────────────────────────┘\n  /**\n   * A backdrop component. This prop enables custom backdrop rendering.\n   * @deprecated Use `slots.backdrop` instead. While this prop currently works, it will be removed in the next major version.\n   * Use the `slots.backdrop` prop to make your application ready for the next version of Material UI.\n   * @default styled(Backdrop, {\n   *   name: 'MuiModal',\n   *   slot: 'Backdrop',\n   * })({\n   *   zIndex: -1,\n   * })\n   */\n  BackdropComponent: PropTypes.elementType,\n  /**\n   * Props applied to the [`Backdrop`](https://mui.com/material-ui/api/backdrop/) element.\n   * @deprecated Use `slotProps.backdrop` instead.\n   */\n  BackdropProps: PropTypes.object,\n  /**\n   * A single child content element.\n   */\n  children: elementAcceptingRef.isRequired,\n  /**\n   * Override or extend the styles applied to the component.\n   */\n  classes: PropTypes.object,\n  /**\n   * @ignore\n   */\n  className: PropTypes.string,\n  /**\n   * When set to true the Modal waits until a nested Transition is completed before closing.\n   * @default false\n   */\n  closeAfterTransition: PropTypes.bool,\n  /**\n   * The component used for the root node.\n   * Either a string to use a HTML element or a component.\n   */\n  component: PropTypes.elementType,\n  /**\n   * The components used for each slot inside.\n   *\n   * @deprecated Use the `slots` prop instead. This prop will be removed in a future major release. See [Migrating from deprecated APIs](https://mui.com/material-ui/migration/migrating-from-deprecated-apis/) for more details.\n   *\n   * @default {}\n   */\n  components: PropTypes.shape({\n    Backdrop: PropTypes.elementType,\n    Root: PropTypes.elementType\n  }),\n  /**\n   * The extra props for the slot components.\n   * You can override the existing props or add new ones.\n   *\n   * @deprecated Use the `slotProps` prop instead. This prop will be removed in a future major release. See [Migrating from deprecated APIs](https://mui.com/material-ui/migration/migrating-from-deprecated-apis/) for more details.\n   *\n   * @default {}\n   */\n  componentsProps: PropTypes.shape({\n    backdrop: PropTypes.oneOfType([PropTypes.func, PropTypes.object]),\n    root: PropTypes.oneOfType([PropTypes.func, PropTypes.object])\n  }),\n  /**\n   * An HTML element or function that returns one.\n   * The `container` will have the portal children appended to it.\n   *\n   * You can also provide a callback, which is called in a React layout effect.\n   * This lets you set the container from a ref, and also makes server-side rendering possible.\n   *\n   * By default, it uses the body of the top-level document object,\n   * so it's simply `document.body` most of the time.\n   */\n  container: PropTypes /* @typescript-to-proptypes-ignore */.oneOfType([HTMLElementType, PropTypes.func]),\n  /**\n   * If `true`, the modal will not automatically shift focus to itself when it opens, and\n   * replace it to the last focused element when it closes.\n   * This also works correctly with any modal children that have the `disableAutoFocus` prop.\n   *\n   * Generally this should never be set to `true` as it makes the modal less\n   * accessible to assistive technologies, like screen readers.\n   * @default false\n   */\n  disableAutoFocus: PropTypes.bool,\n  /**\n   * If `true`, the modal will not prevent focus from leaving the modal while open.\n   *\n   * Generally this should never be set to `true` as it makes the modal less\n   * accessible to assistive technologies, like screen readers.\n   * @default false\n   */\n  disableEnforceFocus: PropTypes.bool,\n  /**\n   * If `true`, hitting escape will not fire the `onClose` callback.\n   * @default false\n   */\n  disableEscapeKeyDown: PropTypes.bool,\n  /**\n   * The `children` will be under the DOM hierarchy of the parent component.\n   * @default false\n   */\n  disablePortal: PropTypes.bool,\n  /**\n   * If `true`, the modal will not restore focus to previously focused element once\n   * modal is hidden or unmounted.\n   * @default false\n   */\n  disableRestoreFocus: PropTypes.bool,\n  /**\n   * Disable the scroll lock behavior.\n   * @default false\n   */\n  disableScrollLock: PropTypes.bool,\n  /**\n   * If `true`, the backdrop is not rendered.\n   * @default false\n   */\n  hideBackdrop: PropTypes.bool,\n  /**\n   * Always keep the children in the DOM.\n   * This prop can be useful in SEO situation or\n   * when you want to maximize the responsiveness of the Modal.\n   * @default false\n   */\n  keepMounted: PropTypes.bool,\n  /**\n   * Callback fired when the component requests to be closed.\n   * The `reason` parameter can optionally be used to control the response to `onClose`.\n   *\n   * @param {object} event The event source of the callback.\n   * @param {string} reason Can be: `\"escapeKeyDown\"`, `\"backdropClick\"`.\n   */\n  onClose: PropTypes.func,\n  /**\n   * A function called when a transition enters.\n   */\n  onTransitionEnter: PropTypes.func,\n  /**\n   * A function called when a transition has exited.\n   */\n  onTransitionExited: PropTypes.func,\n  /**\n   * If `true`, the component is shown.\n   */\n  open: PropTypes.bool.isRequired,\n  /**\n   * The props used for each slot inside the Modal.\n   * @default {}\n   */\n  slotProps: PropTypes.shape({\n    backdrop: PropTypes.oneOfType([PropTypes.func, PropTypes.object]),\n    root: PropTypes.oneOfType([PropTypes.func, PropTypes.object])\n  }),\n  /**\n   * The components used for each slot inside the Modal.\n   * Either a string to use a HTML element or a component.\n   * @default {}\n   */\n  slots: PropTypes.shape({\n    backdrop: PropTypes.elementType,\n    root: PropTypes.elementType\n  }),\n  /**\n   * The system prop that allows defining system overrides as well as additional CSS styles.\n   */\n  sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object])\n} : void 0;\nexport default Modal;","import generateUtilityClasses from '@mui/utils/generateUtilityClasses';\nimport generateUtilityClass from '@mui/utils/generateUtilityClass';\nexport function getDialogUtilityClass(slot) {\n  return generateUtilityClass('MuiDialog', slot);\n}\nconst dialogClasses = generateUtilityClasses('MuiDialog', ['root', 'backdrop', 'scrollPaper', 'scrollBody', 'container', 'paper', 'paperScrollPaper', 'paperScrollBody', 'paperWidthFalse', 'paperWidthXs', 'paperWidthSm', 'paperWidthMd', 'paperWidthLg', 'paperWidthXl', 'paperFullWidth', 'paperFullScreen']);\nexport default dialogClasses;","'use client';\n\nimport * as React from 'react';\nconst DialogContext = /*#__PURE__*/React.createContext({});\nif (process.env.NODE_ENV !== 'production') {\n  DialogContext.displayName = 'DialogContext';\n}\nexport default DialogContext;","'use client';\n\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport composeClasses from '@mui/utils/composeClasses';\nimport useId from '@mui/utils/useId';\nimport capitalize from \"../utils/capitalize.js\";\nimport Modal from \"../Modal/index.js\";\nimport Fade from \"../Fade/index.js\";\nimport Paper from \"../Paper/index.js\";\nimport dialogClasses, { getDialogUtilityClass } from \"./dialogClasses.js\";\nimport DialogContext from \"./DialogContext.js\";\nimport Backdrop from \"../Backdrop/index.js\";\nimport { styled, useTheme } from \"../zero-styled/index.js\";\nimport memoTheme from \"../utils/memoTheme.js\";\nimport { useDefaultProps } from \"../DefaultPropsProvider/index.js\";\nimport useSlot from \"../utils/useSlot.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nconst DialogBackdrop = styled(Backdrop, {\n  name: 'MuiDialog',\n  slot: 'Backdrop'\n})({\n  // Improve scrollable dialog support.\n  zIndex: -1\n});\nconst useUtilityClasses = ownerState => {\n  const {\n    classes,\n    scroll,\n    maxWidth,\n    fullWidth,\n    fullScreen\n  } = ownerState;\n  const slots = {\n    root: ['root'],\n    backdrop: ['backdrop'],\n    container: ['container', `scroll${capitalize(scroll)}`],\n    paper: ['paper', `paperScroll${capitalize(scroll)}`, `paperWidth${capitalize(String(maxWidth))}`, fullWidth && 'paperFullWidth', fullScreen && 'paperFullScreen']\n  };\n  return composeClasses(slots, getDialogUtilityClass, classes);\n};\nconst DialogRoot = styled(Modal, {\n  name: 'MuiDialog',\n  slot: 'Root'\n})({\n  '@media print': {\n    // Use !important to override the Modal inline-style.\n    position: 'absolute !important'\n  }\n});\nconst DialogContainer = styled('div', {\n  name: 'MuiDialog',\n  slot: 'Container',\n  overridesResolver: (props, styles) => {\n    const {\n      ownerState\n    } = props;\n    return [styles.container, styles[`scroll${capitalize(ownerState.scroll)}`]];\n  }\n})({\n  height: '100%',\n  '@media print': {\n    height: 'auto'\n  },\n  // We disable the focus ring for mouse, touch and keyboard users.\n  outline: 0,\n  variants: [{\n    props: {\n      scroll: 'paper'\n    },\n    style: {\n      display: 'flex',\n      justifyContent: 'center',\n      alignItems: 'center'\n    }\n  }, {\n    props: {\n      scroll: 'body'\n    },\n    style: {\n      overflowY: 'auto',\n      overflowX: 'hidden',\n      textAlign: 'center',\n      '&::after': {\n        content: '\"\"',\n        display: 'inline-block',\n        verticalAlign: 'middle',\n        height: '100%',\n        width: '0'\n      }\n    }\n  }]\n});\nconst DialogPaper = styled(Paper, {\n  name: 'MuiDialog',\n  slot: 'Paper',\n  overridesResolver: (props, styles) => {\n    const {\n      ownerState\n    } = props;\n    return [styles.paper, styles[`scrollPaper${capitalize(ownerState.scroll)}`], styles[`paperWidth${capitalize(String(ownerState.maxWidth))}`], ownerState.fullWidth && styles.paperFullWidth, ownerState.fullScreen && styles.paperFullScreen];\n  }\n})(memoTheme(({\n  theme\n}) => ({\n  margin: 32,\n  position: 'relative',\n  overflowY: 'auto',\n  '@media print': {\n    overflowY: 'visible',\n    boxShadow: 'none'\n  },\n  variants: [{\n    props: {\n      scroll: 'paper'\n    },\n    style: {\n      display: 'flex',\n      flexDirection: 'column',\n      maxHeight: 'calc(100% - 64px)'\n    }\n  }, {\n    props: {\n      scroll: 'body'\n    },\n    style: {\n      display: 'inline-block',\n      verticalAlign: 'middle',\n      textAlign: 'initial'\n    }\n  }, {\n    props: ({\n      ownerState\n    }) => !ownerState.maxWidth,\n    style: {\n      maxWidth: 'calc(100% - 64px)'\n    }\n  }, {\n    props: {\n      maxWidth: 'xs'\n    },\n    style: {\n      maxWidth: theme.breakpoints.unit === 'px' ? Math.max(theme.breakpoints.values.xs, 444) : `max(${theme.breakpoints.values.xs}${theme.breakpoints.unit}, 444px)`,\n      [`&.${dialogClasses.paperScrollBody}`]: {\n        [theme.breakpoints.down(Math.max(theme.breakpoints.values.xs, 444) + 32 * 2)]: {\n          maxWidth: 'calc(100% - 64px)'\n        }\n      }\n    }\n  }, ...Object.keys(theme.breakpoints.values).filter(maxWidth => maxWidth !== 'xs').map(maxWidth => ({\n    props: {\n      maxWidth\n    },\n    style: {\n      maxWidth: `${theme.breakpoints.values[maxWidth]}${theme.breakpoints.unit}`,\n      [`&.${dialogClasses.paperScrollBody}`]: {\n        [theme.breakpoints.down(theme.breakpoints.values[maxWidth] + 32 * 2)]: {\n          maxWidth: 'calc(100% - 64px)'\n        }\n      }\n    }\n  })), {\n    props: ({\n      ownerState\n    }) => ownerState.fullWidth,\n    style: {\n      width: 'calc(100% - 64px)'\n    }\n  }, {\n    props: ({\n      ownerState\n    }) => ownerState.fullScreen,\n    style: {\n      margin: 0,\n      width: '100%',\n      maxWidth: '100%',\n      height: '100%',\n      maxHeight: 'none',\n      borderRadius: 0,\n      [`&.${dialogClasses.paperScrollBody}`]: {\n        margin: 0,\n        maxWidth: '100%'\n      }\n    }\n  }]\n})));\n\n/**\n * Dialogs are overlaid modal paper based components with a backdrop.\n */\nconst Dialog = /*#__PURE__*/React.forwardRef(function Dialog(inProps, ref) {\n  const props = useDefaultProps({\n    props: inProps,\n    name: 'MuiDialog'\n  });\n  const theme = useTheme();\n  const defaultTransitionDuration = {\n    enter: theme.transitions.duration.enteringScreen,\n    exit: theme.transitions.duration.leavingScreen\n  };\n  const {\n    'aria-describedby': ariaDescribedby,\n    'aria-labelledby': ariaLabelledbyProp,\n    'aria-modal': ariaModal = true,\n    BackdropComponent,\n    BackdropProps,\n    children,\n    className,\n    disableEscapeKeyDown = false,\n    fullScreen = false,\n    fullWidth = false,\n    maxWidth = 'sm',\n    onClick,\n    onClose,\n    open,\n    PaperComponent = Paper,\n    PaperProps = {},\n    role = 'dialog',\n    scroll = 'paper',\n    slots = {},\n    slotProps = {},\n    TransitionComponent = Fade,\n    transitionDuration = defaultTransitionDuration,\n    TransitionProps,\n    ...other\n  } = props;\n  const ownerState = {\n    ...props,\n    disableEscapeKeyDown,\n    fullScreen,\n    fullWidth,\n    maxWidth,\n    scroll\n  };\n  const classes = useUtilityClasses(ownerState);\n  const backdropClick = React.useRef();\n  const handleMouseDown = event => {\n    // We don't want to close the dialog when clicking the dialog content.\n    // Make sure the event starts and ends on the same DOM element.\n    backdropClick.current = event.target === event.currentTarget;\n  };\n  const handleBackdropClick = event => {\n    if (onClick) {\n      onClick(event);\n    }\n\n    // Ignore the events not coming from the \"backdrop\".\n    if (!backdropClick.current) {\n      return;\n    }\n    backdropClick.current = null;\n    if (onClose) {\n      onClose(event, 'backdropClick');\n    }\n  };\n  const ariaLabelledby = useId(ariaLabelledbyProp);\n  const dialogContextValue = React.useMemo(() => {\n    return {\n      titleId: ariaLabelledby\n    };\n  }, [ariaLabelledby]);\n  const backwardCompatibleSlots = {\n    transition: TransitionComponent,\n    ...slots\n  };\n  const backwardCompatibleSlotProps = {\n    transition: TransitionProps,\n    paper: PaperProps,\n    backdrop: BackdropProps,\n    ...slotProps\n  };\n  const externalForwardedProps = {\n    slots: backwardCompatibleSlots,\n    slotProps: backwardCompatibleSlotProps\n  };\n  const [RootSlot, rootSlotProps] = useSlot('root', {\n    elementType: DialogRoot,\n    shouldForwardComponentProp: true,\n    externalForwardedProps,\n    ownerState,\n    className: clsx(classes.root, className),\n    ref\n  });\n  const [BackdropSlot, backdropSlotProps] = useSlot('backdrop', {\n    elementType: DialogBackdrop,\n    shouldForwardComponentProp: true,\n    externalForwardedProps,\n    ownerState,\n    className: classes.backdrop\n  });\n  const [PaperSlot, paperSlotProps] = useSlot('paper', {\n    elementType: DialogPaper,\n    shouldForwardComponentProp: true,\n    externalForwardedProps,\n    ownerState,\n    className: clsx(classes.paper, PaperProps.className)\n  });\n  const [ContainerSlot, containerSlotProps] = useSlot('container', {\n    elementType: DialogContainer,\n    externalForwardedProps,\n    ownerState,\n    className: classes.container\n  });\n  const [TransitionSlot, transitionSlotProps] = useSlot('transition', {\n    elementType: Fade,\n    externalForwardedProps,\n    ownerState,\n    additionalProps: {\n      appear: true,\n      in: open,\n      timeout: transitionDuration,\n      role: 'presentation'\n    }\n  });\n  return /*#__PURE__*/_jsx(RootSlot, {\n    closeAfterTransition: true,\n    slots: {\n      backdrop: BackdropSlot\n    },\n    slotProps: {\n      backdrop: {\n        transitionDuration,\n        as: BackdropComponent,\n        ...backdropSlotProps\n      }\n    },\n    disableEscapeKeyDown: disableEscapeKeyDown,\n    onClose: onClose,\n    open: open,\n    onClick: handleBackdropClick,\n    ...rootSlotProps,\n    ...other,\n    children: /*#__PURE__*/_jsx(TransitionSlot, {\n      ...transitionSlotProps,\n      children: /*#__PURE__*/_jsx(ContainerSlot, {\n        onMouseDown: handleMouseDown,\n        ...containerSlotProps,\n        children: /*#__PURE__*/_jsx(PaperSlot, {\n          as: PaperComponent,\n          elevation: 24,\n          role: role,\n          \"aria-describedby\": ariaDescribedby,\n          \"aria-labelledby\": ariaLabelledby,\n          \"aria-modal\": ariaModal,\n          ...paperSlotProps,\n          children: /*#__PURE__*/_jsx(DialogContext.Provider, {\n            value: dialogContextValue,\n            children: children\n          })\n        })\n      })\n    })\n  });\n});\nprocess.env.NODE_ENV !== \"production\" ? Dialog.propTypes /* remove-proptypes */ = {\n  // ┌────────────────────────────── Warning ──────────────────────────────┐\n  // │ These PropTypes are generated from the TypeScript type definitions. │\n  // │    To update them, edit the d.ts file and run `pnpm proptypes`.     │\n  // └─────────────────────────────────────────────────────────────────────┘\n  /**\n   * The id(s) of the element(s) that describe the dialog.\n   */\n  'aria-describedby': PropTypes.string,\n  /**\n   * The id(s) of the element(s) that label the dialog.\n   */\n  'aria-labelledby': PropTypes.string,\n  /**\n   * Informs assistive technologies that the element is modal.\n   * It's added on the element with role=\"dialog\".\n   * @default true\n   */\n  'aria-modal': PropTypes.oneOfType([PropTypes.oneOf(['false', 'true']), PropTypes.bool]),\n  /**\n   * A backdrop component. This prop enables custom backdrop rendering.\n   * @deprecated Use `slots.backdrop` instead. While this prop currently works, it will be removed in the next major version.\n   * Use the `slots.backdrop` prop to make your application ready for the next version of Material UI.\n   * @default styled(Backdrop, {\n   *   name: 'MuiModal',\n   *   slot: 'Backdrop',\n   * })({\n   *   zIndex: -1,\n   * })\n   */\n  BackdropComponent: PropTypes.elementType,\n  /**\n   * @ignore\n   */\n  BackdropProps: PropTypes.object,\n  /**\n   * Dialog children, usually the included sub-components.\n   */\n  children: PropTypes.node,\n  /**\n   * Override or extend the styles applied to the component.\n   */\n  classes: PropTypes.object,\n  /**\n   * @ignore\n   */\n  className: PropTypes.string,\n  /**\n   * If `true`, hitting escape will not fire the `onClose` callback.\n   * @default false\n   */\n  disableEscapeKeyDown: PropTypes.bool,\n  /**\n   * If `true`, the dialog is full-screen.\n   * @default false\n   */\n  fullScreen: PropTypes.bool,\n  /**\n   * If `true`, the dialog stretches to `maxWidth`.\n   *\n   * Notice that the dialog width grow is limited by the default margin.\n   * @default false\n   */\n  fullWidth: PropTypes.bool,\n  /**\n   * Determine the max-width of the dialog.\n   * The dialog width grows with the size of the screen.\n   * Set to `false` to disable `maxWidth`.\n   * @default 'sm'\n   */\n  maxWidth: PropTypes /* @typescript-to-proptypes-ignore */.oneOfType([PropTypes.oneOf(['xs', 'sm', 'md', 'lg', 'xl', false]), PropTypes.string]),\n  /**\n   * @ignore\n   */\n  onClick: PropTypes.func,\n  /**\n   * Callback fired when the component requests to be closed.\n   *\n   * @param {object} event The event source of the callback.\n   * @param {string} reason Can be: `\"escapeKeyDown\"`, `\"backdropClick\"`.\n   */\n  onClose: PropTypes.func,\n  /**\n   * If `true`, the component is shown.\n   */\n  open: PropTypes.bool.isRequired,\n  /**\n   * The component used to render the body of the dialog.\n   * @default Paper\n   */\n  PaperComponent: PropTypes.elementType,\n  /**\n   * Props applied to the [`Paper`](https://mui.com/material-ui/api/paper/) element.\n   * @default {}\n   * @deprecated Use `slotProps.paper` instead. This prop will be removed in a future major release. See [Migrating from deprecated APIs](/material-ui/migration/migrating-from-deprecated-apis/) for more details.\n   */\n  PaperProps: PropTypes.object,\n  /**\n   * The ARIA role for the dialog element.\n   * The main dialog role is `dialog`, but `alertdialog` can be used if the content of the dialog requires immediate attention.\n   * See https://www.w3.org/TR/wai-aria-1.2/#dialog and https://www.w3.org/TR/wai-aria-1.2/#alertdialog for more details.\n   * @default 'dialog'\n   */\n  role: PropTypes.oneOf(['alertdialog', 'dialog']),\n  /**\n   * Determine the container for scrolling the dialog.\n   * @default 'paper'\n   */\n  scroll: PropTypes.oneOf(['body', 'paper']),\n  /**\n   * The props used for each slot inside.\n   * @default {}\n   */\n  slotProps: PropTypes.shape({\n    backdrop: PropTypes.oneOfType([PropTypes.func, PropTypes.object]),\n    container: PropTypes.oneOfType([PropTypes.func, PropTypes.object]),\n    paper: PropTypes.oneOfType([PropTypes.func, PropTypes.object]),\n    root: PropTypes.oneOfType([PropTypes.func, PropTypes.object]),\n    transition: PropTypes.oneOfType([PropTypes.func, PropTypes.object])\n  }),\n  /**\n   * The components used for each slot inside.\n   * @default {}\n   */\n  slots: PropTypes.shape({\n    backdrop: PropTypes.elementType,\n    container: PropTypes.elementType,\n    paper: PropTypes.elementType,\n    root: PropTypes.elementType,\n    transition: PropTypes.elementType\n  }),\n  /**\n   * The system prop that allows defining system overrides as well as additional CSS styles.\n   */\n  sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object]),\n  /**\n   * The component used for the transition.\n   * [Follow this guide](https://mui.com/material-ui/transitions/#transitioncomponent-prop) to learn more about the requirements for this component.\n   * @default Fade\n   * @deprecated Use `slots.transition` instead. This prop will be removed in a future major release. See [Migrating from deprecated APIs](/material-ui/migration/migrating-from-deprecated-apis/) for more details.\n   */\n  TransitionComponent: PropTypes.elementType,\n  /**\n   * The duration for the transition, in milliseconds.\n   * You may specify a single timeout for all transitions, or individually with an object.\n   * @default {\n   *   enter: theme.transitions.duration.enteringScreen,\n   *   exit: theme.transitions.duration.leavingScreen,\n   * }\n   */\n  transitionDuration: PropTypes.oneOfType([PropTypes.number, PropTypes.shape({\n    appear: PropTypes.number,\n    enter: PropTypes.number,\n    exit: PropTypes.number\n  })]),\n  /**\n   * Props applied to the transition element.\n   * By default, the element is based on this [`Transition`](https://reactcommunity.org/react-transition-group/transition/) component.\n   * @deprecated Use `slotProps.transition` instead. This prop will be removed in a future major release. See [Migrating from deprecated APIs](/material-ui/migration/migrating-from-deprecated-apis/) for more details.\n   */\n  TransitionProps: PropTypes.object\n} : void 0;\nexport default Dialog;","import generateUtilityClasses from '@mui/utils/generateUtilityClasses';\nimport generateUtilityClass from '@mui/utils/generateUtilityClass';\nexport function getDialogActionsUtilityClass(slot) {\n  return generateUtilityClass('MuiDialogActions', slot);\n}\nconst dialogActionsClasses = generateUtilityClasses('MuiDialogActions', ['root', 'spacing']);\nexport default dialogActionsClasses;","'use client';\n\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport composeClasses from '@mui/utils/composeClasses';\nimport { styled } from \"../zero-styled/index.js\";\nimport { useDefaultProps } from \"../DefaultPropsProvider/index.js\";\nimport { getDialogActionsUtilityClass } from \"./dialogActionsClasses.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nconst useUtilityClasses = ownerState => {\n  const {\n    classes,\n    disableSpacing\n  } = ownerState;\n  const slots = {\n    root: ['root', !disableSpacing && 'spacing']\n  };\n  return composeClasses(slots, getDialogActionsUtilityClass, classes);\n};\nconst DialogActionsRoot = styled('div', {\n  name: 'MuiDialogActions',\n  slot: 'Root',\n  overridesResolver: (props, styles) => {\n    const {\n      ownerState\n    } = props;\n    return [styles.root, !ownerState.disableSpacing && styles.spacing];\n  }\n})({\n  display: 'flex',\n  alignItems: 'center',\n  padding: 8,\n  justifyContent: 'flex-end',\n  flex: '0 0 auto',\n  variants: [{\n    props: ({\n      ownerState\n    }) => !ownerState.disableSpacing,\n    style: {\n      '& > :not(style) ~ :not(style)': {\n        marginLeft: 8\n      }\n    }\n  }]\n});\nconst DialogActions = /*#__PURE__*/React.forwardRef(function DialogActions(inProps, ref) {\n  const props = useDefaultProps({\n    props: inProps,\n    name: 'MuiDialogActions'\n  });\n  const {\n    className,\n    disableSpacing = false,\n    ...other\n  } = props;\n  const ownerState = {\n    ...props,\n    disableSpacing\n  };\n  const classes = useUtilityClasses(ownerState);\n  return /*#__PURE__*/_jsx(DialogActionsRoot, {\n    className: clsx(classes.root, className),\n    ownerState: ownerState,\n    ref: ref,\n    ...other\n  });\n});\nprocess.env.NODE_ENV !== \"production\" ? DialogActions.propTypes /* remove-proptypes */ = {\n  // ┌────────────────────────────── Warning ──────────────────────────────┐\n  // │ These PropTypes are generated from the TypeScript type definitions. │\n  // │    To update them, edit the d.ts file and run `pnpm proptypes`.     │\n  // └─────────────────────────────────────────────────────────────────────┘\n  /**\n   * The content of the component.\n   */\n  children: PropTypes.node,\n  /**\n   * Override or extend the styles applied to the component.\n   */\n  classes: PropTypes.object,\n  /**\n   * @ignore\n   */\n  className: PropTypes.string,\n  /**\n   * If `true`, the actions do not have additional margin.\n   * @default false\n   */\n  disableSpacing: PropTypes.bool,\n  /**\n   * The system prop that allows defining system overrides as well as additional CSS styles.\n   */\n  sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object])\n} : void 0;\nexport default DialogActions;","import generateUtilityClasses from '@mui/utils/generateUtilityClasses';\nimport generateUtilityClass from '@mui/utils/generateUtilityClass';\nexport function getDialogContentUtilityClass(slot) {\n  return generateUtilityClass('MuiDialogContent', slot);\n}\nconst dialogContentClasses = generateUtilityClasses('MuiDialogContent', ['root', 'dividers']);\nexport default dialogContentClasses;","import generateUtilityClasses from '@mui/utils/generateUtilityClasses';\nimport generateUtilityClass from '@mui/utils/generateUtilityClass';\nexport function getDialogTitleUtilityClass(slot) {\n  return generateUtilityClass('MuiDialogTitle', slot);\n}\nconst dialogTitleClasses = generateUtilityClasses('MuiDialogTitle', ['root']);\nexport default dialogTitleClasses;","'use client';\n\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport composeClasses from '@mui/utils/composeClasses';\nimport { styled } from \"../zero-styled/index.js\";\nimport memoTheme from \"../utils/memoTheme.js\";\nimport { useDefaultProps } from \"../DefaultPropsProvider/index.js\";\nimport { getDialogContentUtilityClass } from \"./dialogContentClasses.js\";\nimport dialogTitleClasses from \"../DialogTitle/dialogTitleClasses.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nconst useUtilityClasses = ownerState => {\n  const {\n    classes,\n    dividers\n  } = ownerState;\n  const slots = {\n    root: ['root', dividers && 'dividers']\n  };\n  return composeClasses(slots, getDialogContentUtilityClass, classes);\n};\nconst DialogContentRoot = styled('div', {\n  name: 'MuiDialogContent',\n  slot: 'Root',\n  overridesResolver: (props, styles) => {\n    const {\n      ownerState\n    } = props;\n    return [styles.root, ownerState.dividers && styles.dividers];\n  }\n})(memoTheme(({\n  theme\n}) => ({\n  flex: '1 1 auto',\n  // Add iOS momentum scrolling for iOS < 13.0\n  WebkitOverflowScrolling: 'touch',\n  overflowY: 'auto',\n  padding: '20px 24px',\n  variants: [{\n    props: ({\n      ownerState\n    }) => ownerState.dividers,\n    style: {\n      padding: '16px 24px',\n      borderTop: `1px solid ${(theme.vars || theme).palette.divider}`,\n      borderBottom: `1px solid ${(theme.vars || theme).palette.divider}`\n    }\n  }, {\n    props: ({\n      ownerState\n    }) => !ownerState.dividers,\n    style: {\n      [`.${dialogTitleClasses.root} + &`]: {\n        paddingTop: 0\n      }\n    }\n  }]\n})));\nconst DialogContent = /*#__PURE__*/React.forwardRef(function DialogContent(inProps, ref) {\n  const props = useDefaultProps({\n    props: inProps,\n    name: 'MuiDialogContent'\n  });\n  const {\n    className,\n    dividers = false,\n    ...other\n  } = props;\n  const ownerState = {\n    ...props,\n    dividers\n  };\n  const classes = useUtilityClasses(ownerState);\n  return /*#__PURE__*/_jsx(DialogContentRoot, {\n    className: clsx(classes.root, className),\n    ownerState: ownerState,\n    ref: ref,\n    ...other\n  });\n});\nprocess.env.NODE_ENV !== \"production\" ? DialogContent.propTypes /* remove-proptypes */ = {\n  // ┌────────────────────────────── Warning ──────────────────────────────┐\n  // │ These PropTypes are generated from the TypeScript type definitions. │\n  // │    To update them, edit the d.ts file and run `pnpm proptypes`.     │\n  // └─────────────────────────────────────────────────────────────────────┘\n  /**\n   * The content of the component.\n   */\n  children: PropTypes.node,\n  /**\n   * Override or extend the styles applied to the component.\n   */\n  classes: PropTypes.object,\n  /**\n   * @ignore\n   */\n  className: PropTypes.string,\n  /**\n   * Display the top and bottom dividers.\n   * @default false\n   */\n  dividers: PropTypes.bool,\n  /**\n   * The system prop that allows defining system overrides as well as additional CSS styles.\n   */\n  sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object])\n} : void 0;\nexport default DialogContent;","'use client';\n\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport composeClasses from '@mui/utils/composeClasses';\nimport Typography from \"../Typography/index.js\";\nimport { styled } from \"../zero-styled/index.js\";\nimport { useDefaultProps } from \"../DefaultPropsProvider/index.js\";\nimport { getDialogTitleUtilityClass } from \"./dialogTitleClasses.js\";\nimport DialogContext from \"../Dialog/DialogContext.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nconst useUtilityClasses = ownerState => {\n  const {\n    classes\n  } = ownerState;\n  const slots = {\n    root: ['root']\n  };\n  return composeClasses(slots, getDialogTitleUtilityClass, classes);\n};\nconst DialogTitleRoot = styled(Typography, {\n  name: 'MuiDialogTitle',\n  slot: 'Root'\n})({\n  padding: '16px 24px',\n  flex: '0 0 auto'\n});\nconst DialogTitle = /*#__PURE__*/React.forwardRef(function DialogTitle(inProps, ref) {\n  const props = useDefaultProps({\n    props: inProps,\n    name: 'MuiDialogTitle'\n  });\n  const {\n    className,\n    id: idProp,\n    ...other\n  } = props;\n  const ownerState = props;\n  const classes = useUtilityClasses(ownerState);\n  const {\n    titleId = idProp\n  } = React.useContext(DialogContext);\n  return /*#__PURE__*/_jsx(DialogTitleRoot, {\n    component: \"h2\",\n    className: clsx(classes.root, className),\n    ownerState: ownerState,\n    ref: ref,\n    variant: \"h6\",\n    id: idProp ?? titleId,\n    ...other\n  });\n});\nprocess.env.NODE_ENV !== \"production\" ? DialogTitle.propTypes /* remove-proptypes */ = {\n  // ┌────────────────────────────── Warning ──────────────────────────────┐\n  // │ These PropTypes are generated from the TypeScript type definitions. │\n  // │    To update them, edit the d.ts file and run `pnpm proptypes`.     │\n  // └─────────────────────────────────────────────────────────────────────┘\n  /**\n   * The content of the component.\n   */\n  children: PropTypes.node,\n  /**\n   * Override or extend the styles applied to the component.\n   */\n  classes: PropTypes.object,\n  /**\n   * @ignore\n   */\n  className: PropTypes.string,\n  /**\n   * @ignore\n   */\n  id: PropTypes.string,\n  /**\n   * The system prop that allows defining system overrides as well as additional CSS styles.\n   */\n  sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object])\n} : void 0;\nexport default DialogTitle;","import generateUtilityClasses from '@mui/utils/generateUtilityClasses';\nimport generateUtilityClass from '@mui/utils/generateUtilityClass';\nexport function getDividerUtilityClass(slot) {\n  return generateUtilityClass('MuiDivider', slot);\n}\nconst dividerClasses = generateUtilityClasses('MuiDivider', ['root', 'absolute', 'fullWidth', 'inset', 'middle', 'flexItem', 'light', 'vertical', 'withChildren', 'withChildrenVertical', 'textAlignRight', 'textAlignLeft', 'wrapper', 'wrapperVertical']);\nexport default dividerClasses;","'use client';\n\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport composeClasses from '@mui/utils/composeClasses';\nimport { styled } from \"../zero-styled/index.js\";\nimport memoTheme from \"../utils/memoTheme.js\";\nimport { useDefaultProps } from \"../DefaultPropsProvider/index.js\";\nimport { getDividerUtilityClass } from \"./dividerClasses.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nconst useUtilityClasses = ownerState => {\n  const {\n    absolute,\n    children,\n    classes,\n    flexItem,\n    light,\n    orientation,\n    textAlign,\n    variant\n  } = ownerState;\n  const slots = {\n    root: ['root', absolute && 'absolute', variant, light && 'light', orientation === 'vertical' && 'vertical', flexItem && 'flexItem', children && 'withChildren', children && orientation === 'vertical' && 'withChildrenVertical', textAlign === 'right' && orientation !== 'vertical' && 'textAlignRight', textAlign === 'left' && orientation !== 'vertical' && 'textAlignLeft'],\n    wrapper: ['wrapper', orientation === 'vertical' && 'wrapperVertical']\n  };\n  return composeClasses(slots, getDividerUtilityClass, classes);\n};\nconst DividerRoot = styled('div', {\n  name: 'MuiDivider',\n  slot: 'Root',\n  overridesResolver: (props, styles) => {\n    const {\n      ownerState\n    } = props;\n    return [styles.root, ownerState.absolute && styles.absolute, styles[ownerState.variant], ownerState.light && styles.light, ownerState.orientation === 'vertical' && styles.vertical, ownerState.flexItem && styles.flexItem, ownerState.children && styles.withChildren, ownerState.children && ownerState.orientation === 'vertical' && styles.withChildrenVertical, ownerState.textAlign === 'right' && ownerState.orientation !== 'vertical' && styles.textAlignRight, ownerState.textAlign === 'left' && ownerState.orientation !== 'vertical' && styles.textAlignLeft];\n  }\n})(memoTheme(({\n  theme\n}) => ({\n  margin: 0,\n  // Reset browser default style.\n  flexShrink: 0,\n  borderWidth: 0,\n  borderStyle: 'solid',\n  borderColor: (theme.vars || theme).palette.divider,\n  borderBottomWidth: 'thin',\n  variants: [{\n    props: {\n      absolute: true\n    },\n    style: {\n      position: 'absolute',\n      bottom: 0,\n      left: 0,\n      width: '100%'\n    }\n  }, {\n    props: {\n      light: true\n    },\n    style: {\n      borderColor: theme.alpha((theme.vars || theme).palette.divider, 0.08)\n    }\n  }, {\n    props: {\n      variant: 'inset'\n    },\n    style: {\n      marginLeft: 72\n    }\n  }, {\n    props: {\n      variant: 'middle',\n      orientation: 'horizontal'\n    },\n    style: {\n      marginLeft: theme.spacing(2),\n      marginRight: theme.spacing(2)\n    }\n  }, {\n    props: {\n      variant: 'middle',\n      orientation: 'vertical'\n    },\n    style: {\n      marginTop: theme.spacing(1),\n      marginBottom: theme.spacing(1)\n    }\n  }, {\n    props: {\n      orientation: 'vertical'\n    },\n    style: {\n      height: '100%',\n      borderBottomWidth: 0,\n      borderRightWidth: 'thin'\n    }\n  }, {\n    props: {\n      flexItem: true\n    },\n    style: {\n      alignSelf: 'stretch',\n      height: 'auto'\n    }\n  }, {\n    props: ({\n      ownerState\n    }) => !!ownerState.children,\n    style: {\n      display: 'flex',\n      textAlign: 'center',\n      border: 0,\n      borderTopStyle: 'solid',\n      borderLeftStyle: 'solid',\n      '&::before, &::after': {\n        content: '\"\"',\n        alignSelf: 'center'\n      }\n    }\n  }, {\n    props: ({\n      ownerState\n    }) => ownerState.children && ownerState.orientation !== 'vertical',\n    style: {\n      '&::before, &::after': {\n        width: '100%',\n        borderTop: `thin solid ${(theme.vars || theme).palette.divider}`,\n        borderTopStyle: 'inherit'\n      }\n    }\n  }, {\n    props: ({\n      ownerState\n    }) => ownerState.orientation === 'vertical' && ownerState.children,\n    style: {\n      flexDirection: 'column',\n      '&::before, &::after': {\n        height: '100%',\n        borderLeft: `thin solid ${(theme.vars || theme).palette.divider}`,\n        borderLeftStyle: 'inherit'\n      }\n    }\n  }, {\n    props: ({\n      ownerState\n    }) => ownerState.textAlign === 'right' && ownerState.orientation !== 'vertical',\n    style: {\n      '&::before': {\n        width: '90%'\n      },\n      '&::after': {\n        width: '10%'\n      }\n    }\n  }, {\n    props: ({\n      ownerState\n    }) => ownerState.textAlign === 'left' && ownerState.orientation !== 'vertical',\n    style: {\n      '&::before': {\n        width: '10%'\n      },\n      '&::after': {\n        width: '90%'\n      }\n    }\n  }]\n})));\nconst DividerWrapper = styled('span', {\n  name: 'MuiDivider',\n  slot: 'Wrapper',\n  overridesResolver: (props, styles) => {\n    const {\n      ownerState\n    } = props;\n    return [styles.wrapper, ownerState.orientation === 'vertical' && styles.wrapperVertical];\n  }\n})(memoTheme(({\n  theme\n}) => ({\n  display: 'inline-block',\n  paddingLeft: `calc(${theme.spacing(1)} * 1.2)`,\n  paddingRight: `calc(${theme.spacing(1)} * 1.2)`,\n  whiteSpace: 'nowrap',\n  variants: [{\n    props: {\n      orientation: 'vertical'\n    },\n    style: {\n      paddingTop: `calc(${theme.spacing(1)} * 1.2)`,\n      paddingBottom: `calc(${theme.spacing(1)} * 1.2)`\n    }\n  }]\n})));\nconst Divider = /*#__PURE__*/React.forwardRef(function Divider(inProps, ref) {\n  const props = useDefaultProps({\n    props: inProps,\n    name: 'MuiDivider'\n  });\n  const {\n    absolute = false,\n    children,\n    className,\n    orientation = 'horizontal',\n    component = children || orientation === 'vertical' ? 'div' : 'hr',\n    flexItem = false,\n    light = false,\n    role = component !== 'hr' ? 'separator' : undefined,\n    textAlign = 'center',\n    variant = 'fullWidth',\n    ...other\n  } = props;\n  const ownerState = {\n    ...props,\n    absolute,\n    component,\n    flexItem,\n    light,\n    orientation,\n    role,\n    textAlign,\n    variant\n  };\n  const classes = useUtilityClasses(ownerState);\n  return /*#__PURE__*/_jsx(DividerRoot, {\n    as: component,\n    className: clsx(classes.root, className),\n    role: role,\n    ref: ref,\n    ownerState: ownerState,\n    \"aria-orientation\": role === 'separator' && (component !== 'hr' || orientation === 'vertical') ? orientation : undefined,\n    ...other,\n    children: children ? /*#__PURE__*/_jsx(DividerWrapper, {\n      className: classes.wrapper,\n      ownerState: ownerState,\n      children: children\n    }) : null\n  });\n});\n\n/**\n * The following flag is used to ensure that this component isn't tabbable i.e.\n * does not get highlight/focus inside of MUI List.\n */\nif (Divider) {\n  Divider.muiSkipListHighlight = true;\n}\nprocess.env.NODE_ENV !== \"production\" ? Divider.propTypes /* remove-proptypes */ = {\n  // ┌────────────────────────────── Warning ──────────────────────────────┐\n  // │ These PropTypes are generated from the TypeScript type definitions. │\n  // │    To update them, edit the d.ts file and run `pnpm proptypes`.     │\n  // └─────────────────────────────────────────────────────────────────────┘\n  /**\n   * Absolutely position the element.\n   * @default false\n   */\n  absolute: PropTypes.bool,\n  /**\n   * The content of the component.\n   */\n  children: PropTypes.node,\n  /**\n   * Override or extend the styles applied to the component.\n   */\n  classes: PropTypes.object,\n  /**\n   * @ignore\n   */\n  className: PropTypes.string,\n  /**\n   * The component used for the root node.\n   * Either a string to use a HTML element or a component.\n   */\n  component: PropTypes.elementType,\n  /**\n   * If `true`, a vertical divider will have the correct height when used in flex container.\n   * (By default, a vertical divider will have a calculated height of `0px` if it is the child of a flex container.)\n   * @default false\n   */\n  flexItem: PropTypes.bool,\n  /**\n   * If `true`, the divider will have a lighter color.\n   * @default false\n   * @deprecated Use <Divider sx={{ opacity: 0.6 }} /> (or any opacity or color) instead. See [Migrating from deprecated APIs](https://mui.com/material-ui/migration/migrating-from-deprecated-apis/) for more details.\n   */\n  light: PropTypes.bool,\n  /**\n   * The component orientation.\n   * @default 'horizontal'\n   */\n  orientation: PropTypes.oneOf(['horizontal', 'vertical']),\n  /**\n   * @ignore\n   */\n  role: PropTypes.string,\n  /**\n   * The system prop that allows defining system overrides as well as additional CSS styles.\n   */\n  sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object]),\n  /**\n   * The text alignment.\n   * @default 'center'\n   */\n  textAlign: PropTypes.oneOf(['center', 'left', 'right']),\n  /**\n   * The variant to use.\n   * @default 'fullWidth'\n   */\n  variant: PropTypes /* @typescript-to-proptypes-ignore */.oneOfType([PropTypes.oneOf(['fullWidth', 'inset', 'middle']), PropTypes.string])\n} : void 0;\nexport default Divider;","'use client';\n\nimport * as React from 'react';\nimport deepmerge from '@mui/utils/deepmerge';\nimport refType from '@mui/utils/refType';\nimport PropTypes from 'prop-types';\nimport composeClasses from '@mui/utils/composeClasses';\nimport InputBase from \"../InputBase/index.js\";\nimport rootShouldForwardProp from \"../styles/rootShouldForwardProp.js\";\nimport { styled } from \"../zero-styled/index.js\";\nimport memoTheme from \"../utils/memoTheme.js\";\nimport createSimplePaletteValueFilter from \"../utils/createSimplePaletteValueFilter.js\";\nimport { useDefaultProps } from \"../DefaultPropsProvider/index.js\";\nimport filledInputClasses, { getFilledInputUtilityClass } from \"./filledInputClasses.js\";\nimport { rootOverridesResolver as inputBaseRootOverridesResolver, inputOverridesResolver as inputBaseInputOverridesResolver, InputBaseRoot, InputBaseInput } from \"../InputBase/InputBase.js\";\nimport { capitalize } from \"../utils/index.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nconst useUtilityClasses = ownerState => {\n  const {\n    classes,\n    disableUnderline,\n    startAdornment,\n    endAdornment,\n    size,\n    hiddenLabel,\n    multiline\n  } = ownerState;\n  const slots = {\n    root: ['root', !disableUnderline && 'underline', startAdornment && 'adornedStart', endAdornment && 'adornedEnd', size === 'small' && `size${capitalize(size)}`, hiddenLabel && 'hiddenLabel', multiline && 'multiline'],\n    input: ['input']\n  };\n  const composedClasses = composeClasses(slots, getFilledInputUtilityClass, classes);\n  return {\n    ...classes,\n    // forward classes to the InputBase\n    ...composedClasses\n  };\n};\nconst FilledInputRoot = styled(InputBaseRoot, {\n  shouldForwardProp: prop => rootShouldForwardProp(prop) || prop === 'classes',\n  name: 'MuiFilledInput',\n  slot: 'Root',\n  overridesResolver: (props, styles) => {\n    const {\n      ownerState\n    } = props;\n    return [...inputBaseRootOverridesResolver(props, styles), !ownerState.disableUnderline && styles.underline];\n  }\n})(memoTheme(({\n  theme\n}) => {\n  const light = theme.palette.mode === 'light';\n  const bottomLineColor = light ? 'rgba(0, 0, 0, 0.42)' : 'rgba(255, 255, 255, 0.7)';\n  const backgroundColor = light ? 'rgba(0, 0, 0, 0.06)' : 'rgba(255, 255, 255, 0.09)';\n  const hoverBackground = light ? 'rgba(0, 0, 0, 0.09)' : 'rgba(255, 255, 255, 0.13)';\n  const disabledBackground = light ? 'rgba(0, 0, 0, 0.12)' : 'rgba(255, 255, 255, 0.12)';\n  return {\n    position: 'relative',\n    backgroundColor: theme.vars ? theme.vars.palette.FilledInput.bg : backgroundColor,\n    borderTopLeftRadius: (theme.vars || theme).shape.borderRadius,\n    borderTopRightRadius: (theme.vars || theme).shape.borderRadius,\n    transition: theme.transitions.create('background-color', {\n      duration: theme.transitions.duration.shorter,\n      easing: theme.transitions.easing.easeOut\n    }),\n    '&:hover': {\n      backgroundColor: theme.vars ? theme.vars.palette.FilledInput.hoverBg : hoverBackground,\n      // Reset on touch devices, it doesn't add specificity\n      '@media (hover: none)': {\n        backgroundColor: theme.vars ? theme.vars.palette.FilledInput.bg : backgroundColor\n      }\n    },\n    [`&.${filledInputClasses.focused}`]: {\n      backgroundColor: theme.vars ? theme.vars.palette.FilledInput.bg : backgroundColor\n    },\n    [`&.${filledInputClasses.disabled}`]: {\n      backgroundColor: theme.vars ? theme.vars.palette.FilledInput.disabledBg : disabledBackground\n    },\n    variants: [{\n      props: ({\n        ownerState\n      }) => !ownerState.disableUnderline,\n      style: {\n        '&::after': {\n          left: 0,\n          bottom: 0,\n          content: '\"\"',\n          position: 'absolute',\n          right: 0,\n          transform: 'scaleX(0)',\n          transition: theme.transitions.create('transform', {\n            duration: theme.transitions.duration.shorter,\n            easing: theme.transitions.easing.easeOut\n          }),\n          pointerEvents: 'none' // Transparent to the hover style.\n        },\n        [`&.${filledInputClasses.focused}:after`]: {\n          // translateX(0) is a workaround for Safari transform scale bug\n          // See https://github.com/mui/material-ui/issues/31766\n          transform: 'scaleX(1) translateX(0)'\n        },\n        [`&.${filledInputClasses.error}`]: {\n          '&::before, &::after': {\n            borderBottomColor: (theme.vars || theme).palette.error.main\n          }\n        },\n        '&::before': {\n          borderBottom: `1px solid ${theme.vars ? theme.alpha(theme.vars.palette.common.onBackground, theme.vars.opacity.inputUnderline) : bottomLineColor}`,\n          left: 0,\n          bottom: 0,\n          content: '\"\"',\n          position: 'absolute',\n          right: 0,\n          transition: theme.transitions.create('border-bottom-color', {\n            duration: theme.transitions.duration.shorter\n          }),\n          pointerEvents: 'none' // Transparent to the hover style.\n        },\n        [`&:hover:not(.${filledInputClasses.disabled}, .${filledInputClasses.error}):before`]: {\n          borderBottom: `1px solid ${(theme.vars || theme).palette.text.primary}`\n        },\n        [`&.${filledInputClasses.disabled}:before`]: {\n          borderBottomStyle: 'dotted'\n        }\n      }\n    }, ...Object.entries(theme.palette).filter(createSimplePaletteValueFilter()) // check all the used fields in the style below\n    .map(([color]) => ({\n      props: {\n        disableUnderline: false,\n        color\n      },\n      style: {\n        '&::after': {\n          borderBottom: `2px solid ${(theme.vars || theme).palette[color]?.main}`\n        }\n      }\n    })), {\n      props: ({\n        ownerState\n      }) => ownerState.startAdornment,\n      style: {\n        paddingLeft: 12\n      }\n    }, {\n      props: ({\n        ownerState\n      }) => ownerState.endAdornment,\n      style: {\n        paddingRight: 12\n      }\n    }, {\n      props: ({\n        ownerState\n      }) => ownerState.multiline,\n      style: {\n        padding: '25px 12px 8px'\n      }\n    }, {\n      props: ({\n        ownerState,\n        size\n      }) => ownerState.multiline && size === 'small',\n      style: {\n        paddingTop: 21,\n        paddingBottom: 4\n      }\n    }, {\n      props: ({\n        ownerState\n      }) => ownerState.multiline && ownerState.hiddenLabel,\n      style: {\n        paddingTop: 16,\n        paddingBottom: 17\n      }\n    }, {\n      props: ({\n        ownerState\n      }) => ownerState.multiline && ownerState.hiddenLabel && ownerState.size === 'small',\n      style: {\n        paddingTop: 8,\n        paddingBottom: 9\n      }\n    }]\n  };\n}));\nconst FilledInputInput = styled(InputBaseInput, {\n  name: 'MuiFilledInput',\n  slot: 'Input',\n  overridesResolver: inputBaseInputOverridesResolver\n})(memoTheme(({\n  theme\n}) => ({\n  paddingTop: 25,\n  paddingRight: 12,\n  paddingBottom: 8,\n  paddingLeft: 12,\n  ...(!theme.vars && {\n    '&:-webkit-autofill': {\n      WebkitBoxShadow: theme.palette.mode === 'light' ? null : '0 0 0 100px #266798 inset',\n      WebkitTextFillColor: theme.palette.mode === 'light' ? null : '#fff',\n      caretColor: theme.palette.mode === 'light' ? null : '#fff',\n      borderTopLeftRadius: 'inherit',\n      borderTopRightRadius: 'inherit'\n    }\n  }),\n  ...(theme.vars && {\n    '&:-webkit-autofill': {\n      borderTopLeftRadius: 'inherit',\n      borderTopRightRadius: 'inherit'\n    },\n    [theme.getColorSchemeSelector('dark')]: {\n      '&:-webkit-autofill': {\n        WebkitBoxShadow: '0 0 0 100px #266798 inset',\n        WebkitTextFillColor: '#fff',\n        caretColor: '#fff'\n      }\n    }\n  }),\n  variants: [{\n    props: {\n      size: 'small'\n    },\n    style: {\n      paddingTop: 21,\n      paddingBottom: 4\n    }\n  }, {\n    props: ({\n      ownerState\n    }) => ownerState.hiddenLabel,\n    style: {\n      paddingTop: 16,\n      paddingBottom: 17\n    }\n  }, {\n    props: ({\n      ownerState\n    }) => ownerState.startAdornment,\n    style: {\n      paddingLeft: 0\n    }\n  }, {\n    props: ({\n      ownerState\n    }) => ownerState.endAdornment,\n    style: {\n      paddingRight: 0\n    }\n  }, {\n    props: ({\n      ownerState\n    }) => ownerState.hiddenLabel && ownerState.size === 'small',\n    style: {\n      paddingTop: 8,\n      paddingBottom: 9\n    }\n  }, {\n    props: ({\n      ownerState\n    }) => ownerState.multiline,\n    style: {\n      paddingTop: 0,\n      paddingBottom: 0,\n      paddingLeft: 0,\n      paddingRight: 0\n    }\n  }]\n})));\nconst FilledInput = /*#__PURE__*/React.forwardRef(function FilledInput(inProps, ref) {\n  const props = useDefaultProps({\n    props: inProps,\n    name: 'MuiFilledInput'\n  });\n  const {\n    disableUnderline = false,\n    components = {},\n    componentsProps: componentsPropsProp,\n    fullWidth = false,\n    hiddenLabel,\n    // declare here to prevent spreading to DOM\n    inputComponent = 'input',\n    multiline = false,\n    slotProps,\n    slots = {},\n    type = 'text',\n    ...other\n  } = props;\n  const ownerState = {\n    ...props,\n    disableUnderline,\n    fullWidth,\n    inputComponent,\n    multiline,\n    type\n  };\n  const classes = useUtilityClasses(props);\n  const filledInputComponentsProps = {\n    root: {\n      ownerState\n    },\n    input: {\n      ownerState\n    }\n  };\n  const componentsProps = slotProps ?? componentsPropsProp ? deepmerge(filledInputComponentsProps, slotProps ?? componentsPropsProp) : filledInputComponentsProps;\n  const RootSlot = slots.root ?? components.Root ?? FilledInputRoot;\n  const InputSlot = slots.input ?? components.Input ?? FilledInputInput;\n  return /*#__PURE__*/_jsx(InputBase, {\n    slots: {\n      root: RootSlot,\n      input: InputSlot\n    },\n    slotProps: componentsProps,\n    fullWidth: fullWidth,\n    inputComponent: inputComponent,\n    multiline: multiline,\n    ref: ref,\n    type: type,\n    ...other,\n    classes: classes\n  });\n});\nprocess.env.NODE_ENV !== \"production\" ? FilledInput.propTypes /* remove-proptypes */ = {\n  // ┌────────────────────────────── Warning ──────────────────────────────┐\n  // │ These PropTypes are generated from the TypeScript type definitions. │\n  // │    To update them, edit the d.ts file and run `pnpm proptypes`.     │\n  // └─────────────────────────────────────────────────────────────────────┘\n  /**\n   * This prop helps users to fill forms faster, especially on mobile devices.\n   * The name can be confusing, as it's more like an autofill.\n   * You can learn more about it [following the specification](https://html.spec.whatwg.org/multipage/form-control-infrastructure.html#autofill).\n   */\n  autoComplete: PropTypes.string,\n  /**\n   * If `true`, the `input` element is focused during the first mount.\n   */\n  autoFocus: PropTypes.bool,\n  /**\n   * Override or extend the styles applied to the component.\n   */\n  classes: PropTypes.object,\n  /**\n   * The color of the component.\n   * It supports both default and custom theme colors, which can be added as shown in the\n   * [palette customization guide](https://mui.com/material-ui/customization/palette/#custom-colors).\n   * The prop defaults to the value (`'primary'`) inherited from the parent FormControl component.\n   */\n  color: PropTypes /* @typescript-to-proptypes-ignore */.oneOfType([PropTypes.oneOf(['primary', 'secondary']), PropTypes.string]),\n  /**\n   * The components used for each slot inside.\n   *\n   * @deprecated use the `slots` prop instead. This prop will be removed in a future major release. See [Migrating from deprecated APIs](https://mui.com/material-ui/migration/migrating-from-deprecated-apis/) for more details.\n   *\n   * @default {}\n   */\n  components: PropTypes.shape({\n    Input: PropTypes.elementType,\n    Root: PropTypes.elementType\n  }),\n  /**\n   * The extra props for the slot components.\n   * You can override the existing props or add new ones.\n   *\n   * @deprecated use the `slotProps` prop instead. This prop will be removed in a future major release. See [Migrating from deprecated APIs](https://mui.com/material-ui/migration/migrating-from-deprecated-apis/) for more details.\n   *\n   * @default {}\n   */\n  componentsProps: PropTypes.shape({\n    input: PropTypes.object,\n    root: PropTypes.object\n  }),\n  /**\n   * The default value. Use when the component is not controlled.\n   */\n  defaultValue: PropTypes.any,\n  /**\n   * If `true`, the component is disabled.\n   * The prop defaults to the value (`false`) inherited from the parent FormControl component.\n   */\n  disabled: PropTypes.bool,\n  /**\n   * If `true`, the input will not have an underline.\n   * @default false\n   */\n  disableUnderline: PropTypes.bool,\n  /**\n   * End `InputAdornment` for this component.\n   */\n  endAdornment: PropTypes.node,\n  /**\n   * If `true`, the `input` will indicate an error.\n   * The prop defaults to the value (`false`) inherited from the parent FormControl component.\n   */\n  error: PropTypes.bool,\n  /**\n   * If `true`, the `input` will take up the full width of its container.\n   * @default false\n   */\n  fullWidth: PropTypes.bool,\n  /**\n   * If `true`, the label is hidden.\n   * This is used to increase density for a `FilledInput`.\n   * Be sure to add `aria-label` to the `input` element.\n   * @default false\n   */\n  hiddenLabel: PropTypes.bool,\n  /**\n   * The id of the `input` element.\n   */\n  id: PropTypes.string,\n  /**\n   * The component used for the `input` element.\n   * Either a string to use a HTML element or a component.\n   * @default 'input'\n   */\n  inputComponent: PropTypes.elementType,\n  /**\n   * [Attributes](https://developer.mozilla.org/en-US/docs/Web/HTML/Reference/Elements/input#attributes) applied to the `input` element.\n   * @default {}\n   */\n  inputProps: PropTypes.object,\n  /**\n   * Pass a ref to the `input` element.\n   */\n  inputRef: refType,\n  /**\n   * If `dense`, will adjust vertical spacing. This is normally obtained via context from\n   * FormControl.\n   * The prop defaults to the value (`'none'`) inherited from the parent FormControl component.\n   */\n  margin: PropTypes.oneOf(['dense', 'none']),\n  /**\n   * Maximum number of rows to display when multiline option is set to true.\n   */\n  maxRows: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n  /**\n   * Minimum number of rows to display when multiline option is set to true.\n   */\n  minRows: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n  /**\n   * If `true`, a [TextareaAutosize](https://mui.com/material-ui/react-textarea-autosize/) element is rendered.\n   * @default false\n   */\n  multiline: PropTypes.bool,\n  /**\n   * Name attribute of the `input` element.\n   */\n  name: PropTypes.string,\n  /**\n   * Callback fired when the value is changed.\n   *\n   * @param {React.ChangeEvent<HTMLTextAreaElement | HTMLInputElement>} event The event source of the callback.\n   * You can pull out the new value by accessing `event.target.value` (string).\n   */\n  onChange: PropTypes.func,\n  /**\n   * The short hint displayed in the `input` before the user enters a value.\n   */\n  placeholder: PropTypes.string,\n  /**\n   * It prevents the user from changing the value of the field\n   * (not from interacting with the field).\n   */\n  readOnly: PropTypes.bool,\n  /**\n   * If `true`, the `input` element is required.\n   * The prop defaults to the value (`false`) inherited from the parent FormControl component.\n   */\n  required: PropTypes.bool,\n  /**\n   * Number of rows to display when multiline option is set to true.\n   */\n  rows: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n  /**\n   * The extra props for the slot components.\n   * You can override the existing props or add new ones.\n   *\n   * This prop is an alias for the `componentsProps` prop, which will be deprecated in the future.\n   *\n   * @default {}\n   */\n  slotProps: PropTypes.shape({\n    input: PropTypes.object,\n    root: PropTypes.object\n  }),\n  /**\n   * The components used for each slot inside.\n   *\n   * This prop is an alias for the `components` prop, which will be deprecated in the future.\n   *\n   * @default {}\n   */\n  slots: PropTypes.shape({\n    input: PropTypes.elementType,\n    root: PropTypes.elementType\n  }),\n  /**\n   * Start `InputAdornment` for this component.\n   */\n  startAdornment: PropTypes.node,\n  /**\n   * The system prop that allows defining system overrides as well as additional CSS styles.\n   */\n  sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object]),\n  /**\n   * Type of the `input` element. It should be [a valid HTML5 input type](https://developer.mozilla.org/en-US/docs/Web/HTML/Reference/Elements/input#input_types).\n   * @default 'text'\n   */\n  type: PropTypes.string,\n  /**\n   * The value of the `input` element, required for a controlled component.\n   */\n  value: PropTypes.any\n} : void 0;\nFilledInput.muiName = 'Input';\nexport default FilledInput;","import generateUtilityClasses from '@mui/utils/generateUtilityClasses';\nimport generateUtilityClass from '@mui/utils/generateUtilityClass';\nexport function getFormControlUtilityClasses(slot) {\n  return generateUtilityClass('MuiFormControl', slot);\n}\nconst formControlClasses = generateUtilityClasses('MuiFormControl', ['root', 'marginNone', 'marginNormal', 'marginDense', 'fullWidth', 'disabled']);\nexport default formControlClasses;","'use client';\n\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport composeClasses from '@mui/utils/composeClasses';\nimport { styled } from \"../zero-styled/index.js\";\nimport { useDefaultProps } from \"../DefaultPropsProvider/index.js\";\nimport { isFilled, isAdornedStart } from \"../InputBase/utils.js\";\nimport capitalize from \"../utils/capitalize.js\";\nimport isMuiElement from \"../utils/isMuiElement.js\";\nimport FormControlContext from \"./FormControlContext.js\";\nimport { getFormControlUtilityClasses } from \"./formControlClasses.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nconst useUtilityClasses = ownerState => {\n  const {\n    classes,\n    margin,\n    fullWidth\n  } = ownerState;\n  const slots = {\n    root: ['root', margin !== 'none' && `margin${capitalize(margin)}`, fullWidth && 'fullWidth']\n  };\n  return composeClasses(slots, getFormControlUtilityClasses, classes);\n};\nconst FormControlRoot = styled('div', {\n  name: 'MuiFormControl',\n  slot: 'Root',\n  overridesResolver: (props, styles) => {\n    const {\n      ownerState\n    } = props;\n    return [styles.root, styles[`margin${capitalize(ownerState.margin)}`], ownerState.fullWidth && styles.fullWidth];\n  }\n})({\n  display: 'inline-flex',\n  flexDirection: 'column',\n  position: 'relative',\n  // Reset fieldset default style.\n  minWidth: 0,\n  padding: 0,\n  margin: 0,\n  border: 0,\n  verticalAlign: 'top',\n  // Fix alignment issue on Safari.\n  variants: [{\n    props: {\n      margin: 'normal'\n    },\n    style: {\n      marginTop: 16,\n      marginBottom: 8\n    }\n  }, {\n    props: {\n      margin: 'dense'\n    },\n    style: {\n      marginTop: 8,\n      marginBottom: 4\n    }\n  }, {\n    props: {\n      fullWidth: true\n    },\n    style: {\n      width: '100%'\n    }\n  }]\n});\n\n/**\n * Provides context such as filled/focused/error/required for form inputs.\n * Relying on the context provides high flexibility and ensures that the state always stays\n * consistent across the children of the `FormControl`.\n * This context is used by the following components:\n *\n *  - FormLabel\n *  - FormHelperText\n *  - Input\n *  - InputLabel\n *\n * You can find one composition example below and more going to [the demos](/material-ui/react-text-field/#components).\n *\n * ```jsx\n * <FormControl>\n *   <InputLabel htmlFor=\"my-input\">Email address</InputLabel>\n *   <Input id=\"my-input\" aria-describedby=\"my-helper-text\" />\n *   <FormHelperText id=\"my-helper-text\">We'll never share your email.</FormHelperText>\n * </FormControl>\n * ```\n *\n * ⚠️ Only one `InputBase` can be used within a FormControl because it creates visual inconsistencies.\n * For instance, only one input can be focused at the same time, the state shouldn't be shared.\n */\nconst FormControl = /*#__PURE__*/React.forwardRef(function FormControl(inProps, ref) {\n  const props = useDefaultProps({\n    props: inProps,\n    name: 'MuiFormControl'\n  });\n  const {\n    children,\n    className,\n    color = 'primary',\n    component = 'div',\n    disabled = false,\n    error = false,\n    focused: visuallyFocused,\n    fullWidth = false,\n    hiddenLabel = false,\n    margin = 'none',\n    required = false,\n    size = 'medium',\n    variant = 'outlined',\n    ...other\n  } = props;\n  const ownerState = {\n    ...props,\n    color,\n    component,\n    disabled,\n    error,\n    fullWidth,\n    hiddenLabel,\n    margin,\n    required,\n    size,\n    variant\n  };\n  const classes = useUtilityClasses(ownerState);\n  const [adornedStart, setAdornedStart] = React.useState(() => {\n    // We need to iterate through the children and find the Input in order\n    // to fully support server-side rendering.\n    let initialAdornedStart = false;\n    if (children) {\n      React.Children.forEach(children, child => {\n        if (!isMuiElement(child, ['Input', 'Select'])) {\n          return;\n        }\n        const input = isMuiElement(child, ['Select']) ? child.props.input : child;\n        if (input && isAdornedStart(input.props)) {\n          initialAdornedStart = true;\n        }\n      });\n    }\n    return initialAdornedStart;\n  });\n  const [filled, setFilled] = React.useState(() => {\n    // We need to iterate through the children and find the Input in order\n    // to fully support server-side rendering.\n    let initialFilled = false;\n    if (children) {\n      React.Children.forEach(children, child => {\n        if (!isMuiElement(child, ['Input', 'Select'])) {\n          return;\n        }\n        if (isFilled(child.props, true) || isFilled(child.props.inputProps, true)) {\n          initialFilled = true;\n        }\n      });\n    }\n    return initialFilled;\n  });\n  const [focusedState, setFocused] = React.useState(false);\n  if (disabled && focusedState) {\n    setFocused(false);\n  }\n  const focused = visuallyFocused !== undefined && !disabled ? visuallyFocused : focusedState;\n  let registerEffect;\n  const registeredInput = React.useRef(false);\n  if (process.env.NODE_ENV !== 'production') {\n    registerEffect = () => {\n      if (registeredInput.current) {\n        console.error(['MUI: There are multiple `InputBase` components inside a FormControl.', 'This creates visual inconsistencies, only use one `InputBase`.'].join('\\n'));\n      }\n      registeredInput.current = true;\n      return () => {\n        registeredInput.current = false;\n      };\n    };\n  }\n  const onFilled = React.useCallback(() => {\n    setFilled(true);\n  }, []);\n  const onEmpty = React.useCallback(() => {\n    setFilled(false);\n  }, []);\n  const childContext = React.useMemo(() => {\n    return {\n      adornedStart,\n      setAdornedStart,\n      color,\n      disabled,\n      error,\n      filled,\n      focused,\n      fullWidth,\n      hiddenLabel,\n      size,\n      onBlur: () => {\n        setFocused(false);\n      },\n      onFocus: () => {\n        setFocused(true);\n      },\n      onEmpty,\n      onFilled,\n      registerEffect,\n      required,\n      variant\n    };\n  }, [adornedStart, color, disabled, error, filled, focused, fullWidth, hiddenLabel, registerEffect, onEmpty, onFilled, required, size, variant]);\n  return /*#__PURE__*/_jsx(FormControlContext.Provider, {\n    value: childContext,\n    children: /*#__PURE__*/_jsx(FormControlRoot, {\n      as: component,\n      ownerState: ownerState,\n      className: clsx(classes.root, className),\n      ref: ref,\n      ...other,\n      children: children\n    })\n  });\n});\nprocess.env.NODE_ENV !== \"production\" ? FormControl.propTypes /* remove-proptypes */ = {\n  // ┌────────────────────────────── Warning ──────────────────────────────┐\n  // │ These PropTypes are generated from the TypeScript type definitions. │\n  // │    To update them, edit the d.ts file and run `pnpm proptypes`.     │\n  // └─────────────────────────────────────────────────────────────────────┘\n  /**\n   * The content of the component.\n   */\n  children: PropTypes.node,\n  /**\n   * Override or extend the styles applied to the component.\n   */\n  classes: PropTypes.object,\n  /**\n   * @ignore\n   */\n  className: PropTypes.string,\n  /**\n   * The color of the component.\n   * It supports both default and custom theme colors, which can be added as shown in the\n   * [palette customization guide](https://mui.com/material-ui/customization/palette/#custom-colors).\n   * @default 'primary'\n   */\n  color: PropTypes /* @typescript-to-proptypes-ignore */.oneOfType([PropTypes.oneOf(['primary', 'secondary', 'error', 'info', 'success', 'warning']), PropTypes.string]),\n  /**\n   * The component used for the root node.\n   * Either a string to use a HTML element or a component.\n   */\n  component: PropTypes.elementType,\n  /**\n   * If `true`, the label, input and helper text should be displayed in a disabled state.\n   * @default false\n   */\n  disabled: PropTypes.bool,\n  /**\n   * If `true`, the label is displayed in an error state.\n   * @default false\n   */\n  error: PropTypes.bool,\n  /**\n   * If `true`, the component is displayed in focused state.\n   */\n  focused: PropTypes.bool,\n  /**\n   * If `true`, the component will take up the full width of its container.\n   * @default false\n   */\n  fullWidth: PropTypes.bool,\n  /**\n   * If `true`, the label is hidden.\n   * This is used to increase density for a `FilledInput`.\n   * Be sure to add `aria-label` to the `input` element.\n   * @default false\n   */\n  hiddenLabel: PropTypes.bool,\n  /**\n   * If `dense` or `normal`, will adjust vertical spacing of this and contained components.\n   * @default 'none'\n   */\n  margin: PropTypes.oneOf(['dense', 'none', 'normal']),\n  /**\n   * If `true`, the label will indicate that the `input` is required.\n   * @default false\n   */\n  required: PropTypes.bool,\n  /**\n   * The size of the component.\n   * @default 'medium'\n   */\n  size: PropTypes /* @typescript-to-proptypes-ignore */.oneOfType([PropTypes.oneOf(['medium', 'small']), PropTypes.string]),\n  /**\n   * The system prop that allows defining system overrides as well as additional CSS styles.\n   */\n  sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object]),\n  /**\n   * The variant to use.\n   * @default 'outlined'\n   */\n  variant: PropTypes.oneOf(['filled', 'outlined', 'standard'])\n} : void 0;\nexport default FormControl;","import generateUtilityClasses from '@mui/utils/generateUtilityClasses';\nimport generateUtilityClass from '@mui/utils/generateUtilityClass';\nexport function getFormControlLabelUtilityClasses(slot) {\n  return generateUtilityClass('MuiFormControlLabel', slot);\n}\nconst formControlLabelClasses = generateUtilityClasses('MuiFormControlLabel', ['root', 'labelPlacementStart', 'labelPlacementTop', 'labelPlacementBottom', 'disabled', 'label', 'error', 'required', 'asterisk']);\nexport default formControlLabelClasses;","'use client';\n\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport refType from '@mui/utils/refType';\nimport composeClasses from '@mui/utils/composeClasses';\nimport { useFormControl } from \"../FormControl/index.js\";\nimport { styled } from \"../zero-styled/index.js\";\nimport memoTheme from \"../utils/memoTheme.js\";\nimport { useDefaultProps } from \"../DefaultPropsProvider/index.js\";\nimport Typography from \"../Typography/index.js\";\nimport capitalize from \"../utils/capitalize.js\";\nimport formControlLabelClasses, { getFormControlLabelUtilityClasses } from \"./formControlLabelClasses.js\";\nimport formControlState from \"../FormControl/formControlState.js\";\nimport useSlot from \"../utils/useSlot.js\";\nimport { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nconst useUtilityClasses = ownerState => {\n  const {\n    classes,\n    disabled,\n    labelPlacement,\n    error,\n    required\n  } = ownerState;\n  const slots = {\n    root: ['root', disabled && 'disabled', `labelPlacement${capitalize(labelPlacement)}`, error && 'error', required && 'required'],\n    label: ['label', disabled && 'disabled'],\n    asterisk: ['asterisk', error && 'error']\n  };\n  return composeClasses(slots, getFormControlLabelUtilityClasses, classes);\n};\nexport const FormControlLabelRoot = styled('label', {\n  name: 'MuiFormControlLabel',\n  slot: 'Root',\n  overridesResolver: (props, styles) => {\n    const {\n      ownerState\n    } = props;\n    return [{\n      [`& .${formControlLabelClasses.label}`]: styles.label\n    }, styles.root, styles[`labelPlacement${capitalize(ownerState.labelPlacement)}`]];\n  }\n})(memoTheme(({\n  theme\n}) => ({\n  display: 'inline-flex',\n  alignItems: 'center',\n  cursor: 'pointer',\n  // For correct alignment with the text.\n  verticalAlign: 'middle',\n  WebkitTapHighlightColor: 'transparent',\n  marginLeft: -11,\n  marginRight: 16,\n  // used for row presentation of radio/checkbox\n  [`&.${formControlLabelClasses.disabled}`]: {\n    cursor: 'default'\n  },\n  [`& .${formControlLabelClasses.label}`]: {\n    [`&.${formControlLabelClasses.disabled}`]: {\n      color: (theme.vars || theme).palette.text.disabled\n    }\n  },\n  variants: [{\n    props: {\n      labelPlacement: 'start'\n    },\n    style: {\n      flexDirection: 'row-reverse',\n      marginRight: -11\n    }\n  }, {\n    props: {\n      labelPlacement: 'top'\n    },\n    style: {\n      flexDirection: 'column-reverse'\n    }\n  }, {\n    props: {\n      labelPlacement: 'bottom'\n    },\n    style: {\n      flexDirection: 'column'\n    }\n  }, {\n    props: ({\n      labelPlacement\n    }) => labelPlacement === 'start' || labelPlacement === 'top' || labelPlacement === 'bottom',\n    style: {\n      marginLeft: 16 // used for row presentation of radio/checkbox\n    }\n  }]\n})));\nconst AsteriskComponent = styled('span', {\n  name: 'MuiFormControlLabel',\n  slot: 'Asterisk'\n})(memoTheme(({\n  theme\n}) => ({\n  [`&.${formControlLabelClasses.error}`]: {\n    color: (theme.vars || theme).palette.error.main\n  }\n})));\n\n/**\n * Drop-in replacement of the `Radio`, `Switch` and `Checkbox` component.\n * Use this component if you want to display an extra label.\n */\nconst FormControlLabel = /*#__PURE__*/React.forwardRef(function FormControlLabel(inProps, ref) {\n  const props = useDefaultProps({\n    props: inProps,\n    name: 'MuiFormControlLabel'\n  });\n  const {\n    checked,\n    className,\n    componentsProps = {},\n    control,\n    disabled: disabledProp,\n    disableTypography,\n    inputRef,\n    label: labelProp,\n    labelPlacement = 'end',\n    name,\n    onChange,\n    required: requiredProp,\n    slots = {},\n    slotProps = {},\n    value,\n    ...other\n  } = props;\n  const muiFormControl = useFormControl();\n  const disabled = disabledProp ?? control.props.disabled ?? muiFormControl?.disabled;\n  const required = requiredProp ?? control.props.required;\n  const controlProps = {\n    disabled,\n    required\n  };\n  ['checked', 'name', 'onChange', 'value', 'inputRef'].forEach(key => {\n    if (typeof control.props[key] === 'undefined' && typeof props[key] !== 'undefined') {\n      controlProps[key] = props[key];\n    }\n  });\n  const fcs = formControlState({\n    props,\n    muiFormControl,\n    states: ['error']\n  });\n  const ownerState = {\n    ...props,\n    disabled,\n    labelPlacement,\n    required,\n    error: fcs.error\n  };\n  const classes = useUtilityClasses(ownerState);\n  const externalForwardedProps = {\n    slots,\n    slotProps: {\n      ...componentsProps,\n      ...slotProps\n    }\n  };\n  const [TypographySlot, typographySlotProps] = useSlot('typography', {\n    elementType: Typography,\n    externalForwardedProps,\n    ownerState\n  });\n  let label = labelProp;\n  if (label != null && label.type !== Typography && !disableTypography) {\n    label = /*#__PURE__*/_jsx(TypographySlot, {\n      component: \"span\",\n      ...typographySlotProps,\n      className: clsx(classes.label, typographySlotProps?.className),\n      children: label\n    });\n  }\n  return /*#__PURE__*/_jsxs(FormControlLabelRoot, {\n    className: clsx(classes.root, className),\n    ownerState: ownerState,\n    ref: ref,\n    ...other,\n    children: [/*#__PURE__*/React.cloneElement(control, controlProps), required ? /*#__PURE__*/_jsxs(\"div\", {\n      children: [label, /*#__PURE__*/_jsxs(AsteriskComponent, {\n        ownerState: ownerState,\n        \"aria-hidden\": true,\n        className: classes.asterisk,\n        children: [\"\\u2009\", '*']\n      })]\n    }) : label]\n  });\n});\nprocess.env.NODE_ENV !== \"production\" ? FormControlLabel.propTypes /* remove-proptypes */ = {\n  // ┌────────────────────────────── Warning ──────────────────────────────┐\n  // │ These PropTypes are generated from the TypeScript type definitions. │\n  // │    To update them, edit the d.ts file and run `pnpm proptypes`.     │\n  // └─────────────────────────────────────────────────────────────────────┘\n  /**\n   * If `true`, the component appears selected.\n   */\n  checked: PropTypes.bool,\n  /**\n   * Override or extend the styles applied to the component.\n   */\n  classes: PropTypes.object,\n  /**\n   * @ignore\n   */\n  className: PropTypes.string,\n  /**\n   * The props used for each slot inside.\n   * @default {}\n   * @deprecated use the `slotProps` prop instead. This prop will be removed in a future major release. See [Migrating from deprecated APIs](https://mui.com/material-ui/migration/migrating-from-deprecated-apis/) for more details.\n   */\n  componentsProps: PropTypes.shape({\n    typography: PropTypes.object\n  }),\n  /**\n   * A control element. For instance, it can be a `Radio`, a `Switch` or a `Checkbox`.\n   */\n  control: PropTypes.element.isRequired,\n  /**\n   * If `true`, the control is disabled.\n   */\n  disabled: PropTypes.bool,\n  /**\n   * If `true`, the label is rendered as it is passed without an additional typography node.\n   */\n  disableTypography: PropTypes.bool,\n  /**\n   * Pass a ref to the `input` element.\n   */\n  inputRef: refType,\n  /**\n   * A text or an element to be used in an enclosing label element.\n   */\n  label: PropTypes.node,\n  /**\n   * The position of the label.\n   * @default 'end'\n   */\n  labelPlacement: PropTypes.oneOf(['bottom', 'end', 'start', 'top']),\n  /**\n   * @ignore\n   */\n  name: PropTypes.string,\n  /**\n   * Callback fired when the state is changed.\n   *\n   * @param {React.SyntheticEvent} event The event source of the callback.\n   * You can pull out the new checked state by accessing `event.target.checked` (boolean).\n   */\n  onChange: PropTypes.func,\n  /**\n   * If `true`, the label will indicate that the `input` is required.\n   */\n  required: PropTypes.bool,\n  /**\n   * The props used for each slot inside.\n   * @default {}\n   */\n  slotProps: PropTypes.shape({\n    typography: PropTypes.oneOfType([PropTypes.func, PropTypes.object])\n  }),\n  /**\n   * The components used for each slot inside.\n   * @default {}\n   */\n  slots: PropTypes.shape({\n    typography: PropTypes.elementType\n  }),\n  /**\n   * The system prop that allows defining system overrides as well as additional CSS styles.\n   */\n  sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object]),\n  /**\n   * The value of the component.\n   */\n  value: PropTypes.any\n} : void 0;\nexport default FormControlLabel;","import generateUtilityClasses from '@mui/utils/generateUtilityClasses';\nimport generateUtilityClass from '@mui/utils/generateUtilityClass';\nexport function getFormGroupUtilityClass(slot) {\n  return generateUtilityClass('MuiFormGroup', slot);\n}\nconst formGroupClasses = generateUtilityClasses('MuiFormGroup', ['root', 'row', 'error']);\nexport default formGroupClasses;","'use client';\n\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport composeClasses from '@mui/utils/composeClasses';\nimport { styled } from \"../zero-styled/index.js\";\nimport { useDefaultProps } from \"../DefaultPropsProvider/index.js\";\nimport { getFormGroupUtilityClass } from \"./formGroupClasses.js\";\nimport useFormControl from \"../FormControl/useFormControl.js\";\nimport formControlState from \"../FormControl/formControlState.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nconst useUtilityClasses = ownerState => {\n  const {\n    classes,\n    row,\n    error\n  } = ownerState;\n  const slots = {\n    root: ['root', row && 'row', error && 'error']\n  };\n  return composeClasses(slots, getFormGroupUtilityClass, classes);\n};\nconst FormGroupRoot = styled('div', {\n  name: 'MuiFormGroup',\n  slot: 'Root',\n  overridesResolver: (props, styles) => {\n    const {\n      ownerState\n    } = props;\n    return [styles.root, ownerState.row && styles.row];\n  }\n})({\n  display: 'flex',\n  flexDirection: 'column',\n  flexWrap: 'wrap',\n  variants: [{\n    props: {\n      row: true\n    },\n    style: {\n      flexDirection: 'row'\n    }\n  }]\n});\n\n/**\n * `FormGroup` wraps controls such as `Checkbox` and `Switch`.\n * It provides compact row layout.\n * For the `Radio`, you should be using the `RadioGroup` component instead of this one.\n */\nconst FormGroup = /*#__PURE__*/React.forwardRef(function FormGroup(inProps, ref) {\n  const props = useDefaultProps({\n    props: inProps,\n    name: 'MuiFormGroup'\n  });\n  const {\n    className,\n    row = false,\n    ...other\n  } = props;\n  const muiFormControl = useFormControl();\n  const fcs = formControlState({\n    props,\n    muiFormControl,\n    states: ['error']\n  });\n  const ownerState = {\n    ...props,\n    row,\n    error: fcs.error\n  };\n  const classes = useUtilityClasses(ownerState);\n  return /*#__PURE__*/_jsx(FormGroupRoot, {\n    className: clsx(classes.root, className),\n    ownerState: ownerState,\n    ref: ref,\n    ...other\n  });\n});\nprocess.env.NODE_ENV !== \"production\" ? FormGroup.propTypes /* remove-proptypes */ = {\n  // ┌────────────────────────────── Warning ──────────────────────────────┐\n  // │ These PropTypes are generated from the TypeScript type definitions. │\n  // │    To update them, edit the d.ts file and run `pnpm proptypes`.     │\n  // └─────────────────────────────────────────────────────────────────────┘\n  /**\n   * The content of the component.\n   */\n  children: PropTypes.node,\n  /**\n   * Override or extend the styles applied to the component.\n   */\n  classes: PropTypes.object,\n  /**\n   * @ignore\n   */\n  className: PropTypes.string,\n  /**\n   * Display group of elements in a compact row.\n   * @default false\n   */\n  row: PropTypes.bool,\n  /**\n   * The system prop that allows defining system overrides as well as additional CSS styles.\n   */\n  sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object])\n} : void 0;\nexport default FormGroup;","import generateUtilityClasses from '@mui/utils/generateUtilityClasses';\nimport generateUtilityClass from '@mui/utils/generateUtilityClass';\nexport function getFormHelperTextUtilityClasses(slot) {\n  return generateUtilityClass('MuiFormHelperText', slot);\n}\nconst formHelperTextClasses = generateUtilityClasses('MuiFormHelperText', ['root', 'error', 'disabled', 'sizeSmall', 'sizeMedium', 'contained', 'focused', 'filled', 'required']);\nexport default formHelperTextClasses;","'use client';\n\nvar _span;\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport composeClasses from '@mui/utils/composeClasses';\nimport formControlState from \"../FormControl/formControlState.js\";\nimport useFormControl from \"../FormControl/useFormControl.js\";\nimport { styled } from \"../zero-styled/index.js\";\nimport memoTheme from \"../utils/memoTheme.js\";\nimport { useDefaultProps } from \"../DefaultPropsProvider/index.js\";\nimport capitalize from \"../utils/capitalize.js\";\nimport formHelperTextClasses, { getFormHelperTextUtilityClasses } from \"./formHelperTextClasses.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nconst useUtilityClasses = ownerState => {\n  const {\n    classes,\n    contained,\n    size,\n    disabled,\n    error,\n    filled,\n    focused,\n    required\n  } = ownerState;\n  const slots = {\n    root: ['root', disabled && 'disabled', error && 'error', size && `size${capitalize(size)}`, contained && 'contained', focused && 'focused', filled && 'filled', required && 'required']\n  };\n  return composeClasses(slots, getFormHelperTextUtilityClasses, classes);\n};\nconst FormHelperTextRoot = styled('p', {\n  name: 'MuiFormHelperText',\n  slot: 'Root',\n  overridesResolver: (props, styles) => {\n    const {\n      ownerState\n    } = props;\n    return [styles.root, ownerState.size && styles[`size${capitalize(ownerState.size)}`], ownerState.contained && styles.contained, ownerState.filled && styles.filled];\n  }\n})(memoTheme(({\n  theme\n}) => ({\n  color: (theme.vars || theme).palette.text.secondary,\n  ...theme.typography.caption,\n  textAlign: 'left',\n  marginTop: 3,\n  marginRight: 0,\n  marginBottom: 0,\n  marginLeft: 0,\n  [`&.${formHelperTextClasses.disabled}`]: {\n    color: (theme.vars || theme).palette.text.disabled\n  },\n  [`&.${formHelperTextClasses.error}`]: {\n    color: (theme.vars || theme).palette.error.main\n  },\n  variants: [{\n    props: {\n      size: 'small'\n    },\n    style: {\n      marginTop: 4\n    }\n  }, {\n    props: ({\n      ownerState\n    }) => ownerState.contained,\n    style: {\n      marginLeft: 14,\n      marginRight: 14\n    }\n  }]\n})));\nconst FormHelperText = /*#__PURE__*/React.forwardRef(function FormHelperText(inProps, ref) {\n  const props = useDefaultProps({\n    props: inProps,\n    name: 'MuiFormHelperText'\n  });\n  const {\n    children,\n    className,\n    component = 'p',\n    disabled,\n    error,\n    filled,\n    focused,\n    margin,\n    required,\n    variant,\n    ...other\n  } = props;\n  const muiFormControl = useFormControl();\n  const fcs = formControlState({\n    props,\n    muiFormControl,\n    states: ['variant', 'size', 'disabled', 'error', 'filled', 'focused', 'required']\n  });\n  const ownerState = {\n    ...props,\n    component,\n    contained: fcs.variant === 'filled' || fcs.variant === 'outlined',\n    variant: fcs.variant,\n    size: fcs.size,\n    disabled: fcs.disabled,\n    error: fcs.error,\n    filled: fcs.filled,\n    focused: fcs.focused,\n    required: fcs.required\n  };\n\n  // This issue explains why this is required: https://github.com/mui/material-ui/issues/42184\n  delete ownerState.ownerState;\n  const classes = useUtilityClasses(ownerState);\n  return /*#__PURE__*/_jsx(FormHelperTextRoot, {\n    as: component,\n    className: clsx(classes.root, className),\n    ref: ref,\n    ...other,\n    ownerState: ownerState,\n    children: children === ' ' ? // notranslate needed while Google Translate will not fix zero-width space issue\n    _span || (_span = /*#__PURE__*/_jsx(\"span\", {\n      className: \"notranslate\",\n      \"aria-hidden\": true,\n      children: \"\\u200B\"\n    })) : children\n  });\n});\nprocess.env.NODE_ENV !== \"production\" ? FormHelperText.propTypes /* remove-proptypes */ = {\n  // ┌────────────────────────────── Warning ──────────────────────────────┐\n  // │ These PropTypes are generated from the TypeScript type definitions. │\n  // │    To update them, edit the d.ts file and run `pnpm proptypes`.     │\n  // └─────────────────────────────────────────────────────────────────────┘\n  /**\n   * The content of the component.\n   *\n   * If `' '` is provided, the component reserves one line height for displaying a future message.\n   */\n  children: PropTypes.node,\n  /**\n   * Override or extend the styles applied to the component.\n   */\n  classes: PropTypes.object,\n  /**\n   * @ignore\n   */\n  className: PropTypes.string,\n  /**\n   * The component used for the root node.\n   * Either a string to use a HTML element or a component.\n   */\n  component: PropTypes.elementType,\n  /**\n   * If `true`, the helper text should be displayed in a disabled state.\n   */\n  disabled: PropTypes.bool,\n  /**\n   * If `true`, helper text should be displayed in an error state.\n   */\n  error: PropTypes.bool,\n  /**\n   * If `true`, the helper text should use filled classes key.\n   */\n  filled: PropTypes.bool,\n  /**\n   * If `true`, the helper text should use focused classes key.\n   */\n  focused: PropTypes.bool,\n  /**\n   * If `dense`, will adjust vertical spacing. This is normally obtained via context from\n   * FormControl.\n   */\n  margin: PropTypes.oneOf(['dense']),\n  /**\n   * If `true`, the helper text should use required classes key.\n   */\n  required: PropTypes.bool,\n  /**\n   * The system prop that allows defining system overrides as well as additional CSS styles.\n   */\n  sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object]),\n  /**\n   * The variant to use.\n   */\n  variant: PropTypes /* @typescript-to-proptypes-ignore */.oneOfType([PropTypes.oneOf(['filled', 'outlined', 'standard']), PropTypes.string])\n} : void 0;\nexport default FormHelperText;","import generateUtilityClasses from '@mui/utils/generateUtilityClasses';\nimport generateUtilityClass from '@mui/utils/generateUtilityClass';\nexport function getFormLabelUtilityClasses(slot) {\n  return generateUtilityClass('MuiFormLabel', slot);\n}\nconst formLabelClasses = generateUtilityClasses('MuiFormLabel', ['root', 'colorSecondary', 'focused', 'disabled', 'error', 'filled', 'required', 'asterisk']);\nexport default formLabelClasses;","'use client';\n\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport composeClasses from '@mui/utils/composeClasses';\nimport formControlState from \"../FormControl/formControlState.js\";\nimport useFormControl from \"../FormControl/useFormControl.js\";\nimport capitalize from \"../utils/capitalize.js\";\nimport { styled } from \"../zero-styled/index.js\";\nimport memoTheme from \"../utils/memoTheme.js\";\nimport createSimplePaletteValueFilter from \"../utils/createSimplePaletteValueFilter.js\";\nimport { useDefaultProps } from \"../DefaultPropsProvider/index.js\";\nimport formLabelClasses, { getFormLabelUtilityClasses } from \"./formLabelClasses.js\";\nimport { jsxs as _jsxs } from \"react/jsx-runtime\";\nconst useUtilityClasses = ownerState => {\n  const {\n    classes,\n    color,\n    focused,\n    disabled,\n    error,\n    filled,\n    required\n  } = ownerState;\n  const slots = {\n    root: ['root', `color${capitalize(color)}`, disabled && 'disabled', error && 'error', filled && 'filled', focused && 'focused', required && 'required'],\n    asterisk: ['asterisk', error && 'error']\n  };\n  return composeClasses(slots, getFormLabelUtilityClasses, classes);\n};\nexport const FormLabelRoot = styled('label', {\n  name: 'MuiFormLabel',\n  slot: 'Root',\n  overridesResolver: (props, styles) => {\n    const {\n      ownerState\n    } = props;\n    return [styles.root, ownerState.color === 'secondary' && styles.colorSecondary, ownerState.filled && styles.filled];\n  }\n})(memoTheme(({\n  theme\n}) => ({\n  color: (theme.vars || theme).palette.text.secondary,\n  ...theme.typography.body1,\n  lineHeight: '1.4375em',\n  padding: 0,\n  position: 'relative',\n  variants: [...Object.entries(theme.palette).filter(createSimplePaletteValueFilter()).map(([color]) => ({\n    props: {\n      color\n    },\n    style: {\n      [`&.${formLabelClasses.focused}`]: {\n        color: (theme.vars || theme).palette[color].main\n      }\n    }\n  })), {\n    props: {},\n    style: {\n      [`&.${formLabelClasses.disabled}`]: {\n        color: (theme.vars || theme).palette.text.disabled\n      },\n      [`&.${formLabelClasses.error}`]: {\n        color: (theme.vars || theme).palette.error.main\n      }\n    }\n  }]\n})));\nconst AsteriskComponent = styled('span', {\n  name: 'MuiFormLabel',\n  slot: 'Asterisk'\n})(memoTheme(({\n  theme\n}) => ({\n  [`&.${formLabelClasses.error}`]: {\n    color: (theme.vars || theme).palette.error.main\n  }\n})));\nconst FormLabel = /*#__PURE__*/React.forwardRef(function FormLabel(inProps, ref) {\n  const props = useDefaultProps({\n    props: inProps,\n    name: 'MuiFormLabel'\n  });\n  const {\n    children,\n    className,\n    color,\n    component = 'label',\n    disabled,\n    error,\n    filled,\n    focused,\n    required,\n    ...other\n  } = props;\n  const muiFormControl = useFormControl();\n  const fcs = formControlState({\n    props,\n    muiFormControl,\n    states: ['color', 'required', 'focused', 'disabled', 'error', 'filled']\n  });\n  const ownerState = {\n    ...props,\n    color: fcs.color || 'primary',\n    component,\n    disabled: fcs.disabled,\n    error: fcs.error,\n    filled: fcs.filled,\n    focused: fcs.focused,\n    required: fcs.required\n  };\n  const classes = useUtilityClasses(ownerState);\n  return /*#__PURE__*/_jsxs(FormLabelRoot, {\n    as: component,\n    ownerState: ownerState,\n    className: clsx(classes.root, className),\n    ref: ref,\n    ...other,\n    children: [children, fcs.required && /*#__PURE__*/_jsxs(AsteriskComponent, {\n      ownerState: ownerState,\n      \"aria-hidden\": true,\n      className: classes.asterisk,\n      children: [\"\\u2009\", '*']\n    })]\n  });\n});\nprocess.env.NODE_ENV !== \"production\" ? FormLabel.propTypes /* remove-proptypes */ = {\n  // ┌────────────────────────────── Warning ──────────────────────────────┐\n  // │ These PropTypes are generated from the TypeScript type definitions. │\n  // │    To update them, edit the d.ts file and run `pnpm proptypes`.     │\n  // └─────────────────────────────────────────────────────────────────────┘\n  /**\n   * The content of the component.\n   */\n  children: PropTypes.node,\n  /**\n   * Override or extend the styles applied to the component.\n   */\n  classes: PropTypes.object,\n  /**\n   * @ignore\n   */\n  className: PropTypes.string,\n  /**\n   * The color of the component.\n   * It supports both default and custom theme colors, which can be added as shown in the\n   * [palette customization guide](https://mui.com/material-ui/customization/palette/#custom-colors).\n   */\n  color: PropTypes /* @typescript-to-proptypes-ignore */.oneOfType([PropTypes.oneOf(['error', 'info', 'primary', 'secondary', 'success', 'warning']), PropTypes.string]),\n  /**\n   * The component used for the root node.\n   * Either a string to use a HTML element or a component.\n   */\n  component: PropTypes.elementType,\n  /**\n   * If `true`, the label should be displayed in a disabled state.\n   */\n  disabled: PropTypes.bool,\n  /**\n   * If `true`, the label is displayed in an error state.\n   */\n  error: PropTypes.bool,\n  /**\n   * If `true`, the label should use filled classes key.\n   */\n  filled: PropTypes.bool,\n  /**\n   * If `true`, the input of this label is focused (used by `FormGroup` components).\n   */\n  focused: PropTypes.bool,\n  /**\n   * If `true`, the label will indicate that the `input` is required.\n   */\n  required: PropTypes.bool,\n  /**\n   * The system prop that allows defining system overrides as well as additional CSS styles.\n   */\n  sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object])\n} : void 0;\nexport default FormLabel;","'use client';\n\nimport PropTypes from 'prop-types';\nimport { createGrid } from '@mui/system/Grid';\nimport requirePropFactory from \"../utils/requirePropFactory.js\";\nimport { styled } from \"../styles/index.js\";\nimport { useDefaultProps } from \"../DefaultPropsProvider/index.js\";\nimport useTheme from \"../styles/useTheme.js\";\n/**\n *\n * Demos:\n *\n * - [Grid](https://v7.mui.com/material-ui/react-grid/)\n *\n * API:\n *\n * - [Grid API](https://v7.mui.com/material-ui/api/grid/)\n */\nconst Grid = createGrid({\n  createStyledComponent: styled('div', {\n    name: 'MuiGrid',\n    slot: 'Root',\n    overridesResolver: (props, styles) => {\n      const {\n        ownerState\n      } = props;\n      return [styles.root, ownerState.container && styles.container];\n    }\n  }),\n  componentName: 'MuiGrid',\n  useThemeProps: inProps => useDefaultProps({\n    props: inProps,\n    name: 'MuiGrid'\n  }),\n  useTheme\n});\nprocess.env.NODE_ENV !== \"production\" ? Grid.propTypes /* remove-proptypes */ = {\n  // ┌────────────────────────────── Warning ──────────────────────────────┐\n  // │ These PropTypes are generated from the TypeScript type definitions. │\n  // │ To update them, edit the TypeScript types and run `pnpm proptypes`. │\n  // └─────────────────────────────────────────────────────────────────────┘\n  /**\n   * The content of the component.\n   */\n  children: PropTypes.node,\n  /**\n   * The number of columns.\n   * @default 12\n   */\n  columns: PropTypes /* @typescript-to-proptypes-ignore */.oneOfType([PropTypes.arrayOf(PropTypes.number), PropTypes.number, PropTypes.object]),\n  /**\n   * Defines the horizontal space between the type `item` components.\n   * It overrides the value of the `spacing` prop.\n   */\n  columnSpacing: PropTypes /* @typescript-to-proptypes-ignore */.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.number, PropTypes.string])), PropTypes.number, PropTypes.object, PropTypes.string]),\n  /**\n   * If `true`, the component will have the flex *container* behavior.\n   * You should be wrapping *items* with a *container*.\n   * @default false\n   */\n  container: PropTypes.bool,\n  /**\n   * Defines the `flex-direction` style property.\n   * It is applied for all screen sizes.\n   * @default 'row'\n   */\n  direction: PropTypes /* @typescript-to-proptypes-ignore */.oneOfType([PropTypes.oneOf(['column-reverse', 'column', 'row-reverse', 'row']), PropTypes.arrayOf(PropTypes.oneOf(['column-reverse', 'column', 'row-reverse', 'row'])), PropTypes.object]),\n  /**\n   * Defines the offset value for the type `item` components.\n   */\n  offset: PropTypes /* @typescript-to-proptypes-ignore */.oneOfType([PropTypes.string, PropTypes.number, PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.string, PropTypes.number])), PropTypes.object]),\n  /**\n   * Defines the vertical space between the type `item` components.\n   * It overrides the value of the `spacing` prop.\n   */\n  rowSpacing: PropTypes /* @typescript-to-proptypes-ignore */.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.number, PropTypes.string])), PropTypes.number, PropTypes.object, PropTypes.string]),\n  /**\n   * Defines the size of the the type `item` components.\n   */\n  size: PropTypes /* @typescript-to-proptypes-ignore */.oneOfType([PropTypes.string, PropTypes.bool, PropTypes.number, PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.string, PropTypes.bool, PropTypes.number])), PropTypes.object]),\n  /**\n   * Defines the space between the type `item` components.\n   * It can only be used on a type `container` component.\n   * @default 0\n   */\n  spacing: PropTypes /* @typescript-to-proptypes-ignore */.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.number, PropTypes.string])), PropTypes.number, PropTypes.object, PropTypes.string]),\n  /**\n   * @ignore\n   */\n  sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object]),\n  /**\n   * @internal\n   * The level of the grid starts from `0` and increases when the grid nests\n   * inside another grid. Nesting is defined as a container Grid being a direct\n   * child of a container Grid.\n   *\n   * ```js\n   * <Grid container> // level 0\n   *   <Grid container> // level 1\n   *     <Grid container> // level 2\n   * ```\n   *\n   * Only consecutive grid is considered nesting. A grid container will start at\n   * `0` if there are non-Grid container element above it.\n   *\n   * ```js\n   * <Grid container> // level 0\n   *   <div>\n   *     <Grid container> // level 0\n   * ```\n   *\n   * ```js\n   * <Grid container> // level 0\n   *   <Grid>\n   *     <Grid container> // level 0\n   * ```\n   */\n  unstable_level: PropTypes.number,\n  /**\n   * Defines the `flex-wrap` style property.\n   * It's applied for all screen sizes.\n   * @default 'wrap'\n   */\n  wrap: PropTypes.oneOf(['nowrap', 'wrap-reverse', 'wrap'])\n} : void 0;\nif (process.env.NODE_ENV !== 'production') {\n  const Component = Grid;\n  const requireProp = requirePropFactory('Grid', Component);\n  // eslint-disable-next-line no-useless-concat\n  Component['propTypes' + ''] = {\n    // eslint-disable-next-line react/forbid-foreign-prop-types\n    ...Component.propTypes,\n    direction: requireProp('container'),\n    spacing: requireProp('container'),\n    wrap: requireProp('container')\n  };\n}\nexport default Grid;","'use client';\n\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport useTimeout from '@mui/utils/useTimeout';\nimport elementAcceptingRef from '@mui/utils/elementAcceptingRef';\nimport getReactElementRef from '@mui/utils/getReactElementRef';\nimport { Transition } from 'react-transition-group';\nimport { useTheme } from \"../zero-styled/index.js\";\nimport { normalizedTransitionCallback, getTransitionProps, getTransitionChildStyle, reflow } from \"../transitions/utils.js\";\nimport useForkRef from \"../utils/useForkRef.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nfunction getScale(value) {\n  return `scale(${value}, ${value ** 2})`;\n}\nconst styles = {\n  entering: {\n    opacity: 1,\n    transform: getScale(1)\n  },\n  entered: {\n    opacity: 1,\n    transform: 'none'\n  },\n  exiting: {\n    opacity: 0,\n    transform: getScale(0.75)\n  },\n  exited: {\n    opacity: 0,\n    transform: getScale(0.75)\n  }\n};\nconst hiddenStyles = {\n  opacity: 0,\n  transform: getScale(0.75),\n  visibility: 'hidden'\n};\n\n/**\n * The Grow transition is used by the [Tooltip](/material-ui/react-tooltip/) and\n * [Popover](/material-ui/react-popover/) components.\n * It uses [react-transition-group](https://github.com/reactjs/react-transition-group) internally.\n */\nconst Grow = /*#__PURE__*/React.forwardRef(function Grow(props, ref) {\n  const {\n    addEndListener,\n    appear = true,\n    children,\n    easing,\n    in: inProp,\n    onEnter,\n    onEntered,\n    onEntering,\n    onExit,\n    onExited,\n    onExiting,\n    style,\n    timeout = 'auto',\n    ...other\n  } = props;\n  const timer = useTimeout();\n  const autoTimeout = React.useRef();\n  const theme = useTheme();\n  const nodeRef = React.useRef(null);\n  const handleRef = useForkRef(nodeRef, getReactElementRef(children), ref);\n  const handleEntering = normalizedTransitionCallback(nodeRef, onEntering);\n  const handleEnter = normalizedTransitionCallback(nodeRef, (node, isAppearing) => {\n    reflow(node); // So the animation always start from the start.\n\n    const {\n      duration: transitionDuration,\n      delay,\n      easing: transitionTimingFunction\n    } = getTransitionProps({\n      style,\n      timeout,\n      easing\n    }, {\n      mode: 'enter'\n    });\n    let duration;\n    if (timeout === 'auto') {\n      duration = theme.transitions.getAutoHeightDuration(node.clientHeight);\n      autoTimeout.current = duration;\n    } else {\n      duration = transitionDuration;\n    }\n    node.style.transition = [theme.transitions.create('opacity', {\n      duration,\n      delay\n    }), theme.transitions.create('transform', {\n      duration: duration * 0.666,\n      delay,\n      easing: transitionTimingFunction\n    })].join(',');\n    if (onEnter) {\n      onEnter(node, isAppearing);\n    }\n  });\n  const handleEntered = normalizedTransitionCallback(nodeRef, onEntered);\n  const handleExiting = normalizedTransitionCallback(nodeRef, onExiting);\n  const handleExit = normalizedTransitionCallback(nodeRef, node => {\n    const {\n      duration: transitionDuration,\n      delay,\n      easing: transitionTimingFunction\n    } = getTransitionProps({\n      style,\n      timeout,\n      easing\n    }, {\n      mode: 'exit'\n    });\n    let duration;\n    if (timeout === 'auto') {\n      duration = theme.transitions.getAutoHeightDuration(node.clientHeight);\n      autoTimeout.current = duration;\n    } else {\n      duration = transitionDuration;\n    }\n    node.style.transition = [theme.transitions.create('opacity', {\n      duration,\n      delay\n    }), theme.transitions.create('transform', {\n      duration: duration * 0.666,\n      delay: delay || duration * 0.333,\n      easing: transitionTimingFunction\n    })].join(',');\n    node.style.opacity = 0;\n    node.style.transform = getScale(0.75);\n    if (onExit) {\n      onExit(node);\n    }\n  });\n  const handleExited = normalizedTransitionCallback(nodeRef, node => {\n    node.style.transition = '';\n    if (onExited) {\n      onExited(node);\n    }\n  });\n  const handleAddEndListener = next => {\n    if (timeout === 'auto') {\n      timer.start(autoTimeout.current || 0, next);\n    }\n    if (addEndListener) {\n      // Old call signature before `react-transition-group` implemented `nodeRef`\n      addEndListener(nodeRef.current, next);\n    }\n  };\n  return /*#__PURE__*/_jsx(Transition, {\n    appear: appear,\n    in: inProp,\n    nodeRef: nodeRef,\n    onEnter: handleEnter,\n    onEntered: handleEntered,\n    onEntering: handleEntering,\n    onExit: handleExit,\n    onExited: handleExited,\n    onExiting: handleExiting,\n    addEndListener: handleAddEndListener,\n    timeout: timeout === 'auto' ? null : timeout,\n    ...other,\n    children: (state, {\n      ownerState,\n      ...restChildProps\n    }) => {\n      const childStyle = getTransitionChildStyle(state, inProp, styles, hiddenStyles, style, children.props.style);\n      return /*#__PURE__*/React.cloneElement(children, {\n        style: childStyle,\n        ref: handleRef,\n        ...restChildProps\n      });\n    }\n  });\n});\nprocess.env.NODE_ENV !== \"production\" ? Grow.propTypes /* remove-proptypes */ = {\n  // ┌────────────────────────────── Warning ──────────────────────────────┐\n  // │ These PropTypes are generated from the TypeScript type definitions. │\n  // │    To update them, edit the d.ts file and run `pnpm proptypes`.     │\n  // └─────────────────────────────────────────────────────────────────────┘\n  /**\n   * Add a custom transition end trigger. Called with the transitioning DOM\n   * node and a done callback. Allows for more fine grained transition end\n   * logic. Note: Timeouts are still used as a fallback if provided.\n   */\n  addEndListener: PropTypes.func,\n  /**\n   * Perform the enter transition when it first mounts if `in` is also `true`.\n   * Set this to `false` to disable this behavior.\n   * @default true\n   */\n  appear: PropTypes.bool,\n  /**\n   * A single child content element.\n   */\n  children: elementAcceptingRef.isRequired,\n  /**\n   * The transition timing function.\n   * You may specify a single easing or a object containing enter and exit values.\n   */\n  easing: PropTypes.oneOfType([PropTypes.shape({\n    enter: PropTypes.string,\n    exit: PropTypes.string\n  }), PropTypes.string]),\n  /**\n   * If `true`, the component will transition in.\n   */\n  in: PropTypes.bool,\n  /**\n   * @ignore\n   */\n  onEnter: PropTypes.func,\n  /**\n   * @ignore\n   */\n  onEntered: PropTypes.func,\n  /**\n   * @ignore\n   */\n  onEntering: PropTypes.func,\n  /**\n   * @ignore\n   */\n  onExit: PropTypes.func,\n  /**\n   * @ignore\n   */\n  onExited: PropTypes.func,\n  /**\n   * @ignore\n   */\n  onExiting: PropTypes.func,\n  /**\n   * @ignore\n   */\n  style: PropTypes.object,\n  /**\n   * The duration for the transition, in milliseconds.\n   * You may specify a single timeout for all transitions, or individually with an object.\n   *\n   * Set to 'auto' to automatically calculate transition time based on height.\n   * @default 'auto'\n   */\n  timeout: PropTypes.oneOfType([PropTypes.oneOf(['auto']), PropTypes.number, PropTypes.shape({\n    appear: PropTypes.number,\n    enter: PropTypes.number,\n    exit: PropTypes.number\n  })])\n} : void 0;\nif (Grow) {\n  Grow.muiSupportAuto = true;\n}\nexport default Grow;","'use client';\n\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport composeClasses from '@mui/utils/composeClasses';\nimport deepmerge from '@mui/utils/deepmerge';\nimport refType from '@mui/utils/refType';\nimport InputBase from \"../InputBase/index.js\";\nimport rootShouldForwardProp from \"../styles/rootShouldForwardProp.js\";\nimport { styled } from \"../zero-styled/index.js\";\nimport memoTheme from \"../utils/memoTheme.js\";\nimport createSimplePaletteValueFilter from \"../utils/createSimplePaletteValueFilter.js\";\nimport { useDefaultProps } from \"../DefaultPropsProvider/index.js\";\nimport inputClasses, { getInputUtilityClass } from \"./inputClasses.js\";\nimport { rootOverridesResolver as inputBaseRootOverridesResolver, inputOverridesResolver as inputBaseInputOverridesResolver, InputBaseRoot, InputBaseInput } from \"../InputBase/InputBase.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nconst useUtilityClasses = ownerState => {\n  const {\n    classes,\n    disableUnderline\n  } = ownerState;\n  const slots = {\n    root: ['root', !disableUnderline && 'underline'],\n    input: ['input']\n  };\n  const composedClasses = composeClasses(slots, getInputUtilityClass, classes);\n  return {\n    ...classes,\n    // forward classes to the InputBase\n    ...composedClasses\n  };\n};\nconst InputRoot = styled(InputBaseRoot, {\n  shouldForwardProp: prop => rootShouldForwardProp(prop) || prop === 'classes',\n  name: 'MuiInput',\n  slot: 'Root',\n  overridesResolver: (props, styles) => {\n    const {\n      ownerState\n    } = props;\n    return [...inputBaseRootOverridesResolver(props, styles), !ownerState.disableUnderline && styles.underline];\n  }\n})(memoTheme(({\n  theme\n}) => {\n  const light = theme.palette.mode === 'light';\n  let bottomLineColor = light ? 'rgba(0, 0, 0, 0.42)' : 'rgba(255, 255, 255, 0.7)';\n  if (theme.vars) {\n    bottomLineColor = theme.alpha(theme.vars.palette.common.onBackground, theme.vars.opacity.inputUnderline);\n  }\n  return {\n    position: 'relative',\n    variants: [{\n      props: ({\n        ownerState\n      }) => ownerState.formControl,\n      style: {\n        'label + &': {\n          marginTop: 16\n        }\n      }\n    }, {\n      props: ({\n        ownerState\n      }) => !ownerState.disableUnderline,\n      style: {\n        '&::after': {\n          left: 0,\n          bottom: 0,\n          content: '\"\"',\n          position: 'absolute',\n          right: 0,\n          transform: 'scaleX(0)',\n          transition: theme.transitions.create('transform', {\n            duration: theme.transitions.duration.shorter,\n            easing: theme.transitions.easing.easeOut\n          }),\n          pointerEvents: 'none' // Transparent to the hover style.\n        },\n        [`&.${inputClasses.focused}:after`]: {\n          // translateX(0) is a workaround for Safari transform scale bug\n          // See https://github.com/mui/material-ui/issues/31766\n          transform: 'scaleX(1) translateX(0)'\n        },\n        [`&.${inputClasses.error}`]: {\n          '&::before, &::after': {\n            borderBottomColor: (theme.vars || theme).palette.error.main\n          }\n        },\n        '&::before': {\n          borderBottom: `1px solid ${bottomLineColor}`,\n          left: 0,\n          bottom: 0,\n          content: '\"\"',\n          position: 'absolute',\n          right: 0,\n          transition: theme.transitions.create('border-bottom-color', {\n            duration: theme.transitions.duration.shorter\n          }),\n          pointerEvents: 'none' // Transparent to the hover style.\n        },\n        [`&:hover:not(.${inputClasses.disabled}, .${inputClasses.error}):before`]: {\n          borderBottom: `2px solid ${(theme.vars || theme).palette.text.primary}`,\n          // Reset on touch devices, it doesn't add specificity\n          '@media (hover: none)': {\n            borderBottom: `1px solid ${bottomLineColor}`\n          }\n        },\n        [`&.${inputClasses.disabled}:before`]: {\n          borderBottomStyle: 'dotted'\n        }\n      }\n    }, ...Object.entries(theme.palette).filter(createSimplePaletteValueFilter()).map(([color]) => ({\n      props: {\n        color,\n        disableUnderline: false\n      },\n      style: {\n        '&::after': {\n          borderBottom: `2px solid ${(theme.vars || theme).palette[color].main}`\n        }\n      }\n    }))]\n  };\n}));\nconst InputInput = styled(InputBaseInput, {\n  name: 'MuiInput',\n  slot: 'Input',\n  overridesResolver: inputBaseInputOverridesResolver\n})({});\nconst Input = /*#__PURE__*/React.forwardRef(function Input(inProps, ref) {\n  const props = useDefaultProps({\n    props: inProps,\n    name: 'MuiInput'\n  });\n  const {\n    disableUnderline = false,\n    components = {},\n    componentsProps: componentsPropsProp,\n    fullWidth = false,\n    inputComponent = 'input',\n    multiline = false,\n    slotProps,\n    slots = {},\n    type = 'text',\n    ...other\n  } = props;\n  const classes = useUtilityClasses(props);\n  const ownerState = {\n    disableUnderline\n  };\n  const inputComponentsProps = {\n    root: {\n      ownerState\n    }\n  };\n  const componentsProps = slotProps ?? componentsPropsProp ? deepmerge(slotProps ?? componentsPropsProp, inputComponentsProps) : inputComponentsProps;\n  const RootSlot = slots.root ?? components.Root ?? InputRoot;\n  const InputSlot = slots.input ?? components.Input ?? InputInput;\n  return /*#__PURE__*/_jsx(InputBase, {\n    slots: {\n      root: RootSlot,\n      input: InputSlot\n    },\n    slotProps: componentsProps,\n    fullWidth: fullWidth,\n    inputComponent: inputComponent,\n    multiline: multiline,\n    ref: ref,\n    type: type,\n    ...other,\n    classes: classes\n  });\n});\nprocess.env.NODE_ENV !== \"production\" ? Input.propTypes /* remove-proptypes */ = {\n  // ┌────────────────────────────── Warning ──────────────────────────────┐\n  // │ These PropTypes are generated from the TypeScript type definitions. │\n  // │    To update them, edit the d.ts file and run `pnpm proptypes`.     │\n  // └─────────────────────────────────────────────────────────────────────┘\n  /**\n   * This prop helps users to fill forms faster, especially on mobile devices.\n   * The name can be confusing, as it's more like an autofill.\n   * You can learn more about it [following the specification](https://html.spec.whatwg.org/multipage/form-control-infrastructure.html#autofill).\n   */\n  autoComplete: PropTypes.string,\n  /**\n   * If `true`, the `input` element is focused during the first mount.\n   */\n  autoFocus: PropTypes.bool,\n  /**\n   * Override or extend the styles applied to the component.\n   */\n  classes: PropTypes.object,\n  /**\n   * The color of the component.\n   * It supports both default and custom theme colors, which can be added as shown in the\n   * [palette customization guide](https://mui.com/material-ui/customization/palette/#custom-colors).\n   * The prop defaults to the value (`'primary'`) inherited from the parent FormControl component.\n   */\n  color: PropTypes /* @typescript-to-proptypes-ignore */.oneOfType([PropTypes.oneOf(['primary', 'secondary']), PropTypes.string]),\n  /**\n   * The components used for each slot inside.\n   *\n   * @deprecated use the `slots` prop instead. This prop will be removed in a future major release. See [Migrating from deprecated APIs](https://mui.com/material-ui/migration/migrating-from-deprecated-apis/) for more details.\n   *\n   * @default {}\n   */\n  components: PropTypes.shape({\n    Input: PropTypes.elementType,\n    Root: PropTypes.elementType\n  }),\n  /**\n   * The extra props for the slot components.\n   * You can override the existing props or add new ones.\n   *\n   * @deprecated use the `slotProps` prop instead. This prop will be removed in a future major release. See [Migrating from deprecated APIs](https://mui.com/material-ui/migration/migrating-from-deprecated-apis/) for more details.\n   *\n   * @default {}\n   */\n  componentsProps: PropTypes.shape({\n    input: PropTypes.object,\n    root: PropTypes.object\n  }),\n  /**\n   * The default value. Use when the component is not controlled.\n   */\n  defaultValue: PropTypes.any,\n  /**\n   * If `true`, the component is disabled.\n   * The prop defaults to the value (`false`) inherited from the parent FormControl component.\n   */\n  disabled: PropTypes.bool,\n  /**\n   * If `true`, the `input` will not have an underline.\n   * @default false\n   */\n  disableUnderline: PropTypes.bool,\n  /**\n   * End `InputAdornment` for this component.\n   */\n  endAdornment: PropTypes.node,\n  /**\n   * If `true`, the `input` will indicate an error.\n   * The prop defaults to the value (`false`) inherited from the parent FormControl component.\n   */\n  error: PropTypes.bool,\n  /**\n   * If `true`, the `input` will take up the full width of its container.\n   * @default false\n   */\n  fullWidth: PropTypes.bool,\n  /**\n   * The id of the `input` element.\n   */\n  id: PropTypes.string,\n  /**\n   * The component used for the `input` element.\n   * Either a string to use a HTML element or a component.\n   * @default 'input'\n   */\n  inputComponent: PropTypes.elementType,\n  /**\n   * [Attributes](https://developer.mozilla.org/en-US/docs/Web/HTML/Reference/Elements/input#attributes) applied to the `input` element.\n   * @default {}\n   */\n  inputProps: PropTypes.object,\n  /**\n   * Pass a ref to the `input` element.\n   */\n  inputRef: refType,\n  /**\n   * If `dense`, will adjust vertical spacing. This is normally obtained via context from\n   * FormControl.\n   * The prop defaults to the value (`'none'`) inherited from the parent FormControl component.\n   */\n  margin: PropTypes.oneOf(['dense', 'none']),\n  /**\n   * Maximum number of rows to display when multiline option is set to true.\n   */\n  maxRows: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n  /**\n   * Minimum number of rows to display when multiline option is set to true.\n   */\n  minRows: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n  /**\n   * If `true`, a [TextareaAutosize](https://mui.com/material-ui/react-textarea-autosize/) element is rendered.\n   * @default false\n   */\n  multiline: PropTypes.bool,\n  /**\n   * Name attribute of the `input` element.\n   */\n  name: PropTypes.string,\n  /**\n   * Callback fired when the value is changed.\n   *\n   * @param {React.ChangeEvent<HTMLTextAreaElement | HTMLInputElement>} event The event source of the callback.\n   * You can pull out the new value by accessing `event.target.value` (string).\n   */\n  onChange: PropTypes.func,\n  /**\n   * The short hint displayed in the `input` before the user enters a value.\n   */\n  placeholder: PropTypes.string,\n  /**\n   * It prevents the user from changing the value of the field\n   * (not from interacting with the field).\n   */\n  readOnly: PropTypes.bool,\n  /**\n   * If `true`, the `input` element is required.\n   * The prop defaults to the value (`false`) inherited from the parent FormControl component.\n   */\n  required: PropTypes.bool,\n  /**\n   * Number of rows to display when multiline option is set to true.\n   */\n  rows: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n  /**\n   * The extra props for the slot components.\n   * You can override the existing props or add new ones.\n   *\n   * This prop is an alias for the `componentsProps` prop, which will be deprecated in the future.\n   *\n   * @default {}\n   */\n  slotProps: PropTypes.shape({\n    input: PropTypes.object,\n    root: PropTypes.object\n  }),\n  /**\n   * The components used for each slot inside.\n   *\n   * This prop is an alias for the `components` prop, which will be deprecated in the future.\n   *\n   * @default {}\n   */\n  slots: PropTypes.shape({\n    input: PropTypes.elementType,\n    root: PropTypes.elementType\n  }),\n  /**\n   * Start `InputAdornment` for this component.\n   */\n  startAdornment: PropTypes.node,\n  /**\n   * The system prop that allows defining system overrides as well as additional CSS styles.\n   */\n  sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object]),\n  /**\n   * Type of the `input` element. It should be [a valid HTML5 input type](https://developer.mozilla.org/en-US/docs/Web/HTML/Reference/Elements/input#input_types).\n   * @default 'text'\n   */\n  type: PropTypes.string,\n  /**\n   * The value of the `input` element, required for a controlled component.\n   */\n  value: PropTypes.any\n} : void 0;\nInput.muiName = 'Input';\nexport default Input;","import generateUtilityClasses from '@mui/utils/generateUtilityClasses';\nimport generateUtilityClass from '@mui/utils/generateUtilityClass';\nexport function getInputAdornmentUtilityClass(slot) {\n  return generateUtilityClass('MuiInputAdornment', slot);\n}\nconst inputAdornmentClasses = generateUtilityClasses('MuiInputAdornment', ['root', 'filled', 'standard', 'outlined', 'positionStart', 'positionEnd', 'disablePointerEvents', 'hiddenLabel', 'sizeSmall']);\nexport default inputAdornmentClasses;","'use client';\n\nvar _span;\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport composeClasses from '@mui/utils/composeClasses';\nimport capitalize from \"../utils/capitalize.js\";\nimport Typography from \"../Typography/index.js\";\nimport FormControlContext from \"../FormControl/FormControlContext.js\";\nimport useFormControl from \"../FormControl/useFormControl.js\";\nimport { styled } from \"../zero-styled/index.js\";\nimport memoTheme from \"../utils/memoTheme.js\";\nimport { useDefaultProps } from \"../DefaultPropsProvider/index.js\";\nimport inputAdornmentClasses, { getInputAdornmentUtilityClass } from \"./inputAdornmentClasses.js\";\nimport { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nconst overridesResolver = (props, styles) => {\n  const {\n    ownerState\n  } = props;\n  return [styles.root, styles[`position${capitalize(ownerState.position)}`], ownerState.disablePointerEvents === true && styles.disablePointerEvents, styles[ownerState.variant]];\n};\nconst useUtilityClasses = ownerState => {\n  const {\n    classes,\n    disablePointerEvents,\n    hiddenLabel,\n    position,\n    size,\n    variant\n  } = ownerState;\n  const slots = {\n    root: ['root', disablePointerEvents && 'disablePointerEvents', position && `position${capitalize(position)}`, variant, hiddenLabel && 'hiddenLabel', size && `size${capitalize(size)}`]\n  };\n  return composeClasses(slots, getInputAdornmentUtilityClass, classes);\n};\nconst InputAdornmentRoot = styled('div', {\n  name: 'MuiInputAdornment',\n  slot: 'Root',\n  overridesResolver\n})(memoTheme(({\n  theme\n}) => ({\n  display: 'flex',\n  maxHeight: '2em',\n  alignItems: 'center',\n  whiteSpace: 'nowrap',\n  color: (theme.vars || theme).palette.action.active,\n  variants: [{\n    props: {\n      variant: 'filled'\n    },\n    style: {\n      [`&.${inputAdornmentClasses.positionStart}&:not(.${inputAdornmentClasses.hiddenLabel})`]: {\n        marginTop: 16\n      }\n    }\n  }, {\n    props: {\n      position: 'start'\n    },\n    style: {\n      marginRight: 8\n    }\n  }, {\n    props: {\n      position: 'end'\n    },\n    style: {\n      marginLeft: 8\n    }\n  }, {\n    props: {\n      disablePointerEvents: true\n    },\n    style: {\n      pointerEvents: 'none'\n    }\n  }]\n})));\nconst InputAdornment = /*#__PURE__*/React.forwardRef(function InputAdornment(inProps, ref) {\n  const props = useDefaultProps({\n    props: inProps,\n    name: 'MuiInputAdornment'\n  });\n  const {\n    children,\n    className,\n    component = 'div',\n    disablePointerEvents = false,\n    disableTypography = false,\n    position,\n    variant: variantProp,\n    ...other\n  } = props;\n  const muiFormControl = useFormControl() || {};\n  let variant = variantProp;\n  if (variantProp && muiFormControl.variant) {\n    if (process.env.NODE_ENV !== 'production') {\n      if (variantProp === muiFormControl.variant) {\n        console.error('MUI: The `InputAdornment` variant infers the variant prop ' + 'you do not have to provide one.');\n      }\n    }\n  }\n  if (muiFormControl && !variant) {\n    variant = muiFormControl.variant;\n  }\n  const ownerState = {\n    ...props,\n    hiddenLabel: muiFormControl.hiddenLabel,\n    size: muiFormControl.size,\n    disablePointerEvents,\n    position,\n    variant\n  };\n  const classes = useUtilityClasses(ownerState);\n  return /*#__PURE__*/_jsx(FormControlContext.Provider, {\n    value: null,\n    children: /*#__PURE__*/_jsx(InputAdornmentRoot, {\n      as: component,\n      ownerState: ownerState,\n      className: clsx(classes.root, className),\n      ref: ref,\n      ...other,\n      children: typeof children === 'string' && !disableTypography ? /*#__PURE__*/_jsx(Typography, {\n        color: \"textSecondary\",\n        children: children\n      }) : /*#__PURE__*/_jsxs(React.Fragment, {\n        children: [position === 'start' ? (/* notranslate needed while Google Translate will not fix zero-width space issue */_span || (_span = /*#__PURE__*/_jsx(\"span\", {\n          className: \"notranslate\",\n          \"aria-hidden\": true,\n          children: \"\\u200B\"\n        }))) : null, children]\n      })\n    })\n  });\n});\nprocess.env.NODE_ENV !== \"production\" ? InputAdornment.propTypes /* remove-proptypes */ = {\n  // ┌────────────────────────────── Warning ──────────────────────────────┐\n  // │ These PropTypes are generated from the TypeScript type definitions. │\n  // │    To update them, edit the d.ts file and run `pnpm proptypes`.     │\n  // └─────────────────────────────────────────────────────────────────────┘\n  /**\n   * The content of the component, normally an `IconButton` or string.\n   */\n  children: PropTypes.node,\n  /**\n   * Override or extend the styles applied to the component.\n   */\n  classes: PropTypes.object,\n  /**\n   * @ignore\n   */\n  className: PropTypes.string,\n  /**\n   * The component used for the root node.\n   * Either a string to use a HTML element or a component.\n   */\n  component: PropTypes.elementType,\n  /**\n   * Disable pointer events on the root.\n   * This allows for the content of the adornment to focus the `input` on click.\n   * @default false\n   */\n  disablePointerEvents: PropTypes.bool,\n  /**\n   * If children is a string then disable wrapping in a Typography component.\n   * @default false\n   */\n  disableTypography: PropTypes.bool,\n  /**\n   * The position this adornment should appear relative to the `Input`.\n   */\n  position: PropTypes.oneOf(['end', 'start']).isRequired,\n  /**\n   * The system prop that allows defining system overrides as well as additional CSS styles.\n   */\n  sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object]),\n  /**\n   * The variant to use.\n   * Note: If you are using the `TextField` component or the `FormControl` component\n   * you do not have to set this manually.\n   */\n  variant: PropTypes.oneOf(['filled', 'outlined', 'standard'])\n} : void 0;\nexport default InputAdornment;","import generateUtilityClasses from '@mui/utils/generateUtilityClasses';\nimport generateUtilityClass from '@mui/utils/generateUtilityClass';\nexport function getInputLabelUtilityClasses(slot) {\n  return generateUtilityClass('MuiInputLabel', slot);\n}\nconst inputLabelClasses = generateUtilityClasses('MuiInputLabel', ['root', 'focused', 'disabled', 'error', 'required', 'asterisk', 'formControl', 'sizeSmall', 'shrink', 'animated', 'standard', 'filled', 'outlined']);\nexport default inputLabelClasses;","'use client';\n\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport composeClasses from '@mui/utils/composeClasses';\nimport clsx from 'clsx';\nimport formControlState from \"../FormControl/formControlState.js\";\nimport useFormControl from \"../FormControl/useFormControl.js\";\nimport FormLabel, { formLabelClasses } from \"../FormLabel/index.js\";\nimport capitalize from \"../utils/capitalize.js\";\nimport rootShouldForwardProp from \"../styles/rootShouldForwardProp.js\";\nimport { styled } from \"../zero-styled/index.js\";\nimport memoTheme from \"../utils/memoTheme.js\";\nimport { useDefaultProps } from \"../DefaultPropsProvider/index.js\";\nimport { getInputLabelUtilityClasses } from \"./inputLabelClasses.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nconst useUtilityClasses = ownerState => {\n  const {\n    classes,\n    formControl,\n    size,\n    shrink,\n    disableAnimation,\n    variant,\n    required\n  } = ownerState;\n  const slots = {\n    root: ['root', formControl && 'formControl', !disableAnimation && 'animated', shrink && 'shrink', size && size !== 'medium' && `size${capitalize(size)}`, variant],\n    asterisk: [required && 'asterisk']\n  };\n  const composedClasses = composeClasses(slots, getInputLabelUtilityClasses, classes);\n  return {\n    ...classes,\n    // forward the focused, disabled, etc. classes to the FormLabel\n    ...composedClasses\n  };\n};\nconst InputLabelRoot = styled(FormLabel, {\n  shouldForwardProp: prop => rootShouldForwardProp(prop) || prop === 'classes',\n  name: 'MuiInputLabel',\n  slot: 'Root',\n  overridesResolver: (props, styles) => {\n    const {\n      ownerState\n    } = props;\n    return [{\n      [`& .${formLabelClasses.asterisk}`]: styles.asterisk\n    }, styles.root, ownerState.formControl && styles.formControl, ownerState.size === 'small' && styles.sizeSmall, ownerState.shrink && styles.shrink, !ownerState.disableAnimation && styles.animated, ownerState.focused && styles.focused, styles[ownerState.variant]];\n  }\n})(memoTheme(({\n  theme\n}) => ({\n  display: 'block',\n  transformOrigin: 'top left',\n  whiteSpace: 'nowrap',\n  overflow: 'hidden',\n  textOverflow: 'ellipsis',\n  maxWidth: '100%',\n  variants: [{\n    props: ({\n      ownerState\n    }) => ownerState.formControl,\n    style: {\n      position: 'absolute',\n      left: 0,\n      top: 0,\n      // slight alteration to spec spacing to match visual spec result\n      transform: 'translate(0, 20px) scale(1)'\n    }\n  }, {\n    props: {\n      size: 'small'\n    },\n    style: {\n      // Compensation for the `Input.inputSizeSmall` style.\n      transform: 'translate(0, 17px) scale(1)'\n    }\n  }, {\n    props: ({\n      ownerState\n    }) => ownerState.shrink,\n    style: {\n      transform: 'translate(0, -1.5px) scale(0.75)',\n      transformOrigin: 'top left',\n      maxWidth: '133%'\n    }\n  }, {\n    props: ({\n      ownerState\n    }) => !ownerState.disableAnimation,\n    style: {\n      transition: theme.transitions.create(['color', 'transform', 'max-width'], {\n        duration: theme.transitions.duration.shorter,\n        easing: theme.transitions.easing.easeOut\n      })\n    }\n  }, {\n    props: {\n      variant: 'filled'\n    },\n    style: {\n      // Chrome's autofill feature gives the input field a yellow background.\n      // Since the input field is behind the label in the HTML tree,\n      // the input field is drawn last and hides the label with an opaque background color.\n      // zIndex: 1 will raise the label above opaque background-colors of input.\n      zIndex: 1,\n      pointerEvents: 'none',\n      transform: 'translate(12px, 16px) scale(1)',\n      maxWidth: 'calc(100% - 24px)'\n    }\n  }, {\n    props: {\n      variant: 'filled',\n      size: 'small'\n    },\n    style: {\n      transform: 'translate(12px, 13px) scale(1)'\n    }\n  }, {\n    props: ({\n      variant,\n      ownerState\n    }) => variant === 'filled' && ownerState.shrink,\n    style: {\n      userSelect: 'none',\n      pointerEvents: 'auto',\n      transform: 'translate(12px, 7px) scale(0.75)',\n      maxWidth: 'calc(133% - 24px)'\n    }\n  }, {\n    props: ({\n      variant,\n      ownerState,\n      size\n    }) => variant === 'filled' && ownerState.shrink && size === 'small',\n    style: {\n      transform: 'translate(12px, 4px) scale(0.75)'\n    }\n  }, {\n    props: {\n      variant: 'outlined'\n    },\n    style: {\n      // see comment above on filled.zIndex\n      zIndex: 1,\n      pointerEvents: 'none',\n      transform: 'translate(14px, 16px) scale(1)',\n      maxWidth: 'calc(100% - 24px)'\n    }\n  }, {\n    props: {\n      variant: 'outlined',\n      size: 'small'\n    },\n    style: {\n      transform: 'translate(14px, 9px) scale(1)'\n    }\n  }, {\n    props: ({\n      variant,\n      ownerState\n    }) => variant === 'outlined' && ownerState.shrink,\n    style: {\n      userSelect: 'none',\n      pointerEvents: 'auto',\n      // Theoretically, we should have (8+5)*2/0.75 = 34px\n      // but it feels a better when it bleeds a bit on the left, so 32px.\n      maxWidth: 'calc(133% - 32px)',\n      transform: 'translate(14px, -9px) scale(0.75)'\n    }\n  }]\n})));\nconst InputLabel = /*#__PURE__*/React.forwardRef(function InputLabel(inProps, ref) {\n  const props = useDefaultProps({\n    name: 'MuiInputLabel',\n    props: inProps\n  });\n  const {\n    disableAnimation = false,\n    margin,\n    shrink: shrinkProp,\n    variant,\n    className,\n    ...other\n  } = props;\n  const muiFormControl = useFormControl();\n  let shrink = shrinkProp;\n  if (typeof shrink === 'undefined' && muiFormControl) {\n    shrink = muiFormControl.filled || muiFormControl.focused || muiFormControl.adornedStart;\n  }\n  const fcs = formControlState({\n    props,\n    muiFormControl,\n    states: ['size', 'variant', 'required', 'focused']\n  });\n  const ownerState = {\n    ...props,\n    disableAnimation,\n    formControl: muiFormControl,\n    shrink,\n    size: fcs.size,\n    variant: fcs.variant,\n    required: fcs.required,\n    focused: fcs.focused\n  };\n  const classes = useUtilityClasses(ownerState);\n  return /*#__PURE__*/_jsx(InputLabelRoot, {\n    \"data-shrink\": shrink,\n    ref: ref,\n    className: clsx(classes.root, className),\n    ...other,\n    ownerState: ownerState,\n    classes: classes\n  });\n});\nprocess.env.NODE_ENV !== \"production\" ? InputLabel.propTypes /* remove-proptypes */ = {\n  // ┌────────────────────────────── Warning ──────────────────────────────┐\n  // │ These PropTypes are generated from the TypeScript type definitions. │\n  // │    To update them, edit the d.ts file and run `pnpm proptypes`.     │\n  // └─────────────────────────────────────────────────────────────────────┘\n  /**\n   * The content of the component.\n   */\n  children: PropTypes.node,\n  /**\n   * Override or extend the styles applied to the component.\n   */\n  classes: PropTypes.object,\n  /**\n   * @ignore\n   */\n  className: PropTypes.string,\n  /**\n   * The color of the component.\n   * It supports both default and custom theme colors, which can be added as shown in the\n   * [palette customization guide](https://mui.com/material-ui/customization/palette/#custom-colors).\n   */\n  color: PropTypes /* @typescript-to-proptypes-ignore */.oneOfType([PropTypes.oneOf(['error', 'info', 'primary', 'secondary', 'success', 'warning']), PropTypes.string]),\n  /**\n   * If `true`, the transition animation is disabled.\n   * @default false\n   */\n  disableAnimation: PropTypes.bool,\n  /**\n   * If `true`, the component is disabled.\n   */\n  disabled: PropTypes.bool,\n  /**\n   * If `true`, the label is displayed in an error state.\n   */\n  error: PropTypes.bool,\n  /**\n   * If `true`, the `input` of this label is focused.\n   */\n  focused: PropTypes.bool,\n  /**\n   * If `dense`, will adjust vertical spacing. This is normally obtained via context from\n   * FormControl.\n   */\n  margin: PropTypes.oneOf(['dense']),\n  /**\n   * if `true`, the label will indicate that the `input` is required.\n   */\n  required: PropTypes.bool,\n  /**\n   * If `true`, the label is shrunk.\n   */\n  shrink: PropTypes.bool,\n  /**\n   * The size of the component.\n   * @default 'medium'\n   */\n  size: PropTypes /* @typescript-to-proptypes-ignore */.oneOfType([PropTypes.oneOf(['medium', 'small']), PropTypes.string]),\n  /**\n   * The system prop that allows defining system overrides as well as additional CSS styles.\n   */\n  sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object]),\n  /**\n   * The variant to use.\n   */\n  variant: PropTypes.oneOf(['filled', 'outlined', 'standard'])\n} : void 0;\nexport default InputLabel;","'use client';\n\nimport * as React from 'react';\n\n/**\n * @ignore - internal component.\n */\nconst ListContext = /*#__PURE__*/React.createContext({});\nif (process.env.NODE_ENV !== 'production') {\n  ListContext.displayName = 'ListContext';\n}\nexport default ListContext;","import generateUtilityClasses from '@mui/utils/generateUtilityClasses';\nimport generateUtilityClass from '@mui/utils/generateUtilityClass';\nexport function getListUtilityClass(slot) {\n  return generateUtilityClass('MuiList', slot);\n}\nconst listClasses = generateUtilityClasses('MuiList', ['root', 'padding', 'dense', 'subheader']);\nexport default listClasses;","'use client';\n\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport composeClasses from '@mui/utils/composeClasses';\nimport { styled } from \"../zero-styled/index.js\";\nimport { useDefaultProps } from \"../DefaultPropsProvider/index.js\";\nimport ListContext from \"./ListContext.js\";\nimport { getListUtilityClass } from \"./listClasses.js\";\nimport { jsxs as _jsxs, jsx as _jsx } from \"react/jsx-runtime\";\nconst useUtilityClasses = ownerState => {\n  const {\n    classes,\n    disablePadding,\n    dense,\n    subheader\n  } = ownerState;\n  const slots = {\n    root: ['root', !disablePadding && 'padding', dense && 'dense', subheader && 'subheader']\n  };\n  return composeClasses(slots, getListUtilityClass, classes);\n};\nconst ListRoot = styled('ul', {\n  name: 'MuiList',\n  slot: 'Root',\n  overridesResolver: (props, styles) => {\n    const {\n      ownerState\n    } = props;\n    return [styles.root, !ownerState.disablePadding && styles.padding, ownerState.dense && styles.dense, ownerState.subheader && styles.subheader];\n  }\n})({\n  listStyle: 'none',\n  margin: 0,\n  padding: 0,\n  position: 'relative',\n  variants: [{\n    props: ({\n      ownerState\n    }) => !ownerState.disablePadding,\n    style: {\n      paddingTop: 8,\n      paddingBottom: 8\n    }\n  }, {\n    props: ({\n      ownerState\n    }) => ownerState.subheader,\n    style: {\n      paddingTop: 0\n    }\n  }]\n});\nconst List = /*#__PURE__*/React.forwardRef(function List(inProps, ref) {\n  const props = useDefaultProps({\n    props: inProps,\n    name: 'MuiList'\n  });\n  const {\n    children,\n    className,\n    component = 'ul',\n    dense = false,\n    disablePadding = false,\n    subheader,\n    ...other\n  } = props;\n  const context = React.useMemo(() => ({\n    dense\n  }), [dense]);\n  const ownerState = {\n    ...props,\n    component,\n    dense,\n    disablePadding\n  };\n  const classes = useUtilityClasses(ownerState);\n  return /*#__PURE__*/_jsx(ListContext.Provider, {\n    value: context,\n    children: /*#__PURE__*/_jsxs(ListRoot, {\n      as: component,\n      className: clsx(classes.root, className),\n      ref: ref,\n      ownerState: ownerState,\n      ...other,\n      children: [subheader, children]\n    })\n  });\n});\nprocess.env.NODE_ENV !== \"production\" ? List.propTypes /* remove-proptypes */ = {\n  // ┌────────────────────────────── Warning ──────────────────────────────┐\n  // │ These PropTypes are generated from the TypeScript type definitions. │\n  // │    To update them, edit the d.ts file and run `pnpm proptypes`.     │\n  // └─────────────────────────────────────────────────────────────────────┘\n  /**\n   * The content of the component.\n   */\n  children: PropTypes.node,\n  /**\n   * Override or extend the styles applied to the component.\n   */\n  classes: PropTypes.object,\n  /**\n   * @ignore\n   */\n  className: PropTypes.string,\n  /**\n   * The component used for the root node.\n   * Either a string to use a HTML element or a component.\n   */\n  component: PropTypes.elementType,\n  /**\n   * If `true`, compact vertical padding designed for keyboard and mouse input is used for\n   * the list and list items.\n   * The prop is available to descendant components as the `dense` context.\n   * @default false\n   */\n  dense: PropTypes.bool,\n  /**\n   * If `true`, vertical padding is removed from the list.\n   * @default false\n   */\n  disablePadding: PropTypes.bool,\n  /**\n   * The content of the subheader, normally `ListSubheader`.\n   */\n  subheader: PropTypes.node,\n  /**\n   * The system prop that allows defining system overrides as well as additional CSS styles.\n   */\n  sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object])\n} : void 0;\nexport default List;","import generateUtilityClasses from '@mui/utils/generateUtilityClasses';\nimport generateUtilityClass from '@mui/utils/generateUtilityClass';\nexport function getListItemUtilityClass(slot) {\n  return generateUtilityClass('MuiListItem', slot);\n}\nconst listItemClasses = generateUtilityClasses('MuiListItem', ['root', 'container', 'dense', 'alignItemsFlexStart', 'divider', 'gutters', 'padding', 'secondaryAction']);\nexport default listItemClasses;","import generateUtilityClasses from '@mui/utils/generateUtilityClasses';\nimport generateUtilityClass from '@mui/utils/generateUtilityClass';\nexport function getListItemButtonUtilityClass(slot) {\n  return generateUtilityClass('MuiListItemButton', slot);\n}\nconst listItemButtonClasses = generateUtilityClasses('MuiListItemButton', ['root', 'focusVisible', 'dense', 'alignItemsFlexStart', 'disabled', 'divider', 'gutters', 'selected']);\nexport default listItemButtonClasses;","'use client';\n\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport composeClasses from '@mui/utils/composeClasses';\nimport { styled } from \"../zero-styled/index.js\";\nimport memoTheme from \"../utils/memoTheme.js\";\nimport { useDefaultProps } from \"../DefaultPropsProvider/index.js\";\nimport rootShouldForwardProp from \"../styles/rootShouldForwardProp.js\";\nimport ButtonBase from \"../ButtonBase/index.js\";\nimport useEnhancedEffect from \"../utils/useEnhancedEffect.js\";\nimport useForkRef from \"../utils/useForkRef.js\";\nimport ListContext from \"../List/ListContext.js\";\nimport listItemButtonClasses, { getListItemButtonUtilityClass } from \"./listItemButtonClasses.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport const overridesResolver = (props, styles) => {\n  const {\n    ownerState\n  } = props;\n  return [styles.root, ownerState.dense && styles.dense, ownerState.alignItems === 'flex-start' && styles.alignItemsFlexStart, ownerState.divider && styles.divider, !ownerState.disableGutters && styles.gutters];\n};\nconst useUtilityClasses = ownerState => {\n  const {\n    alignItems,\n    classes,\n    dense,\n    disabled,\n    disableGutters,\n    divider,\n    selected\n  } = ownerState;\n  const slots = {\n    root: ['root', dense && 'dense', !disableGutters && 'gutters', divider && 'divider', disabled && 'disabled', alignItems === 'flex-start' && 'alignItemsFlexStart', selected && 'selected']\n  };\n  const composedClasses = composeClasses(slots, getListItemButtonUtilityClass, classes);\n  return {\n    ...classes,\n    ...composedClasses\n  };\n};\nconst ListItemButtonRoot = styled(ButtonBase, {\n  shouldForwardProp: prop => rootShouldForwardProp(prop) || prop === 'classes',\n  name: 'MuiListItemButton',\n  slot: 'Root',\n  overridesResolver\n})(memoTheme(({\n  theme\n}) => ({\n  display: 'flex',\n  flexGrow: 1,\n  justifyContent: 'flex-start',\n  alignItems: 'center',\n  position: 'relative',\n  textDecoration: 'none',\n  minWidth: 0,\n  boxSizing: 'border-box',\n  textAlign: 'left',\n  paddingTop: 8,\n  paddingBottom: 8,\n  transition: theme.transitions.create('background-color', {\n    duration: theme.transitions.duration.shortest\n  }),\n  '&:hover': {\n    textDecoration: 'none',\n    backgroundColor: (theme.vars || theme).palette.action.hover,\n    // Reset on touch devices, it doesn't add specificity\n    '@media (hover: none)': {\n      backgroundColor: 'transparent'\n    }\n  },\n  [`&.${listItemButtonClasses.selected}`]: {\n    backgroundColor: theme.alpha((theme.vars || theme).palette.primary.main, (theme.vars || theme).palette.action.selectedOpacity),\n    [`&.${listItemButtonClasses.focusVisible}`]: {\n      backgroundColor: theme.alpha((theme.vars || theme).palette.primary.main, `${(theme.vars || theme).palette.action.selectedOpacity} + ${(theme.vars || theme).palette.action.focusOpacity}`)\n    }\n  },\n  [`&.${listItemButtonClasses.selected}:hover`]: {\n    backgroundColor: theme.alpha((theme.vars || theme).palette.primary.main, `${(theme.vars || theme).palette.action.selectedOpacity} + ${(theme.vars || theme).palette.action.hoverOpacity}`),\n    // Reset on touch devices, it doesn't add specificity\n    '@media (hover: none)': {\n      backgroundColor: theme.alpha((theme.vars || theme).palette.primary.main, (theme.vars || theme).palette.action.selectedOpacity)\n    }\n  },\n  [`&.${listItemButtonClasses.focusVisible}`]: {\n    backgroundColor: (theme.vars || theme).palette.action.focus\n  },\n  [`&.${listItemButtonClasses.disabled}`]: {\n    opacity: (theme.vars || theme).palette.action.disabledOpacity\n  },\n  variants: [{\n    props: ({\n      ownerState\n    }) => ownerState.divider,\n    style: {\n      borderBottom: `1px solid ${(theme.vars || theme).palette.divider}`,\n      backgroundClip: 'padding-box'\n    }\n  }, {\n    props: {\n      alignItems: 'flex-start'\n    },\n    style: {\n      alignItems: 'flex-start'\n    }\n  }, {\n    props: ({\n      ownerState\n    }) => !ownerState.disableGutters,\n    style: {\n      paddingLeft: 16,\n      paddingRight: 16\n    }\n  }, {\n    props: ({\n      ownerState\n    }) => ownerState.dense,\n    style: {\n      paddingTop: 4,\n      paddingBottom: 4\n    }\n  }]\n})));\nconst ListItemButton = /*#__PURE__*/React.forwardRef(function ListItemButton(inProps, ref) {\n  const props = useDefaultProps({\n    props: inProps,\n    name: 'MuiListItemButton'\n  });\n  const {\n    alignItems = 'center',\n    autoFocus = false,\n    component = 'div',\n    children,\n    dense = false,\n    disableGutters = false,\n    divider = false,\n    focusVisibleClassName,\n    selected = false,\n    className,\n    ...other\n  } = props;\n  const context = React.useContext(ListContext);\n  const childContext = React.useMemo(() => ({\n    dense: dense || context.dense || false,\n    alignItems,\n    disableGutters\n  }), [alignItems, context.dense, dense, disableGutters]);\n  const listItemRef = React.useRef(null);\n  useEnhancedEffect(() => {\n    if (autoFocus) {\n      if (listItemRef.current) {\n        listItemRef.current.focus();\n      } else if (process.env.NODE_ENV !== 'production') {\n        console.error('MUI: Unable to set focus to a ListItemButton whose component has not been rendered.');\n      }\n    }\n  }, [autoFocus]);\n  const ownerState = {\n    ...props,\n    alignItems,\n    dense: childContext.dense,\n    disableGutters,\n    divider,\n    selected\n  };\n  const classes = useUtilityClasses(ownerState);\n  const handleRef = useForkRef(listItemRef, ref);\n  return /*#__PURE__*/_jsx(ListContext.Provider, {\n    value: childContext,\n    children: /*#__PURE__*/_jsx(ListItemButtonRoot, {\n      ref: handleRef,\n      href: other.href || other.to\n      // `ButtonBase` processes `href` or `to` if `component` is set to 'button'\n      ,\n      component: (other.href || other.to) && component === 'div' ? 'button' : component,\n      focusVisibleClassName: clsx(classes.focusVisible, focusVisibleClassName),\n      ownerState: ownerState,\n      className: clsx(classes.root, className),\n      ...other,\n      classes: classes,\n      children: children\n    })\n  });\n});\nprocess.env.NODE_ENV !== \"production\" ? ListItemButton.propTypes /* remove-proptypes */ = {\n  // ┌────────────────────────────── Warning ──────────────────────────────┐\n  // │ These PropTypes are generated from the TypeScript type definitions. │\n  // │    To update them, edit the d.ts file and run `pnpm proptypes`.     │\n  // └─────────────────────────────────────────────────────────────────────┘\n  /**\n   * Defines the `align-items` style property.\n   * @default 'center'\n   */\n  alignItems: PropTypes.oneOf(['center', 'flex-start']),\n  /**\n   * If `true`, the list item is focused during the first mount.\n   * Focus will also be triggered if the value changes from false to true.\n   * @default false\n   */\n  autoFocus: PropTypes.bool,\n  /**\n   * The content of the component if a `ListItemSecondaryAction` is used it must\n   * be the last child.\n   */\n  children: PropTypes.node,\n  /**\n   * Override or extend the styles applied to the component.\n   */\n  classes: PropTypes.object,\n  /**\n   * @ignore\n   */\n  className: PropTypes.string,\n  /**\n   * The component used for the root node.\n   * Either a string to use a HTML element or a component.\n   */\n  component: PropTypes.elementType,\n  /**\n   * If `true`, compact vertical padding designed for keyboard and mouse input is used.\n   * The prop defaults to the value inherited from the parent List component.\n   * @default false\n   */\n  dense: PropTypes.bool,\n  /**\n   * If `true`, the component is disabled.\n   * @default false\n   */\n  disabled: PropTypes.bool,\n  /**\n   * If `true`, the left and right padding is removed.\n   * @default false\n   */\n  disableGutters: PropTypes.bool,\n  /**\n   * If `true`, a 1px light border is added to the bottom of the list item.\n   * @default false\n   */\n  divider: PropTypes.bool,\n  /**\n   * This prop can help identify which element has keyboard focus.\n   * The class name will be applied when the element gains the focus through keyboard interaction.\n   * It's a polyfill for the [CSS :focus-visible selector](https://drafts.csswg.org/selectors-4/#the-focus-visible-pseudo).\n   * The rationale for using this feature [is explained here](https://github.com/WICG/focus-visible/blob/HEAD/explainer.md).\n   * A [polyfill can be used](https://github.com/WICG/focus-visible) to apply a `focus-visible` class to other components\n   * if needed.\n   */\n  focusVisibleClassName: PropTypes.string,\n  /**\n   * @ignore\n   */\n  href: PropTypes.string,\n  /**\n   * Use to apply selected styling.\n   * @default false\n   */\n  selected: PropTypes.bool,\n  /**\n   * The system prop that allows defining system overrides as well as additional CSS styles.\n   */\n  sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object])\n} : void 0;\nexport default ListItemButton;","import generateUtilityClasses from '@mui/utils/generateUtilityClasses';\nimport generateUtilityClass from '@mui/utils/generateUtilityClass';\nexport function getListItemSecondaryActionClassesUtilityClass(slot) {\n  return generateUtilityClass('MuiListItemSecondaryAction', slot);\n}\nconst listItemSecondaryActionClasses = generateUtilityClasses('MuiListItemSecondaryAction', ['root', 'disableGutters']);\nexport default listItemSecondaryActionClasses;","'use client';\n\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport composeClasses from '@mui/utils/composeClasses';\nimport { styled } from \"../zero-styled/index.js\";\nimport { useDefaultProps } from \"../DefaultPropsProvider/index.js\";\nimport ListContext from \"../List/ListContext.js\";\nimport { getListItemSecondaryActionClassesUtilityClass } from \"./listItemSecondaryActionClasses.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nconst useUtilityClasses = ownerState => {\n  const {\n    disableGutters,\n    classes\n  } = ownerState;\n  const slots = {\n    root: ['root', disableGutters && 'disableGutters']\n  };\n  return composeClasses(slots, getListItemSecondaryActionClassesUtilityClass, classes);\n};\nconst ListItemSecondaryActionRoot = styled('div', {\n  name: 'MuiListItemSecondaryAction',\n  slot: 'Root',\n  overridesResolver: (props, styles) => {\n    const {\n      ownerState\n    } = props;\n    return [styles.root, ownerState.disableGutters && styles.disableGutters];\n  }\n})({\n  position: 'absolute',\n  right: 16,\n  top: '50%',\n  transform: 'translateY(-50%)',\n  variants: [{\n    props: ({\n      ownerState\n    }) => ownerState.disableGutters,\n    style: {\n      right: 0\n    }\n  }]\n});\n\n/**\n * Must be used as the last child of ListItem to function properly.\n *\n * @deprecated Use the `secondaryAction` prop in the `ListItem` component instead. This component will be removed in a future major release. See [Migrating from deprecated APIs](https://mui.com/material-ui/migration/migrating-from-deprecated-apis/) for more details.\n */\nconst ListItemSecondaryAction = /*#__PURE__*/React.forwardRef(function ListItemSecondaryAction(inProps, ref) {\n  const props = useDefaultProps({\n    props: inProps,\n    name: 'MuiListItemSecondaryAction'\n  });\n  const {\n    className,\n    ...other\n  } = props;\n  const context = React.useContext(ListContext);\n  const ownerState = {\n    ...props,\n    disableGutters: context.disableGutters\n  };\n  const classes = useUtilityClasses(ownerState);\n  return /*#__PURE__*/_jsx(ListItemSecondaryActionRoot, {\n    className: clsx(classes.root, className),\n    ownerState: ownerState,\n    ref: ref,\n    ...other\n  });\n});\nprocess.env.NODE_ENV !== \"production\" ? ListItemSecondaryAction.propTypes /* remove-proptypes */ = {\n  // ┌────────────────────────────── Warning ──────────────────────────────┐\n  // │ These PropTypes are generated from the TypeScript type definitions. │\n  // │    To update them, edit the d.ts file and run `pnpm proptypes`.     │\n  // └─────────────────────────────────────────────────────────────────────┘\n  /**\n   * The content of the component, normally an `IconButton` or selection control.\n   */\n  children: PropTypes.node,\n  /**\n   * Override or extend the styles applied to the component.\n   */\n  classes: PropTypes.object,\n  /**\n   * @ignore\n   */\n  className: PropTypes.string,\n  /**\n   * The system prop that allows defining system overrides as well as additional CSS styles.\n   */\n  sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object])\n} : void 0;\nListItemSecondaryAction.muiName = 'ListItemSecondaryAction';\nexport default ListItemSecondaryAction;","'use client';\n\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport composeClasses from '@mui/utils/composeClasses';\nimport elementTypeAcceptingRef from '@mui/utils/elementTypeAcceptingRef';\nimport chainPropTypes from '@mui/utils/chainPropTypes';\nimport isHostComponent from '@mui/utils/isHostComponent';\nimport { styled } from \"../zero-styled/index.js\";\nimport memoTheme from \"../utils/memoTheme.js\";\nimport { useDefaultProps } from \"../DefaultPropsProvider/index.js\";\nimport isMuiElement from \"../utils/isMuiElement.js\";\nimport useForkRef from \"../utils/useForkRef.js\";\nimport useSlot from \"../utils/useSlot.js\";\nimport ListContext from \"../List/ListContext.js\";\nimport { getListItemUtilityClass } from \"./listItemClasses.js\";\nimport { listItemButtonClasses } from \"../ListItemButton/index.js\";\nimport ListItemSecondaryAction from \"../ListItemSecondaryAction/index.js\";\nimport { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nexport const overridesResolver = (props, styles) => {\n  const {\n    ownerState\n  } = props;\n  return [styles.root, ownerState.dense && styles.dense, ownerState.alignItems === 'flex-start' && styles.alignItemsFlexStart, ownerState.divider && styles.divider, !ownerState.disableGutters && styles.gutters, !ownerState.disablePadding && styles.padding, ownerState.hasSecondaryAction && styles.secondaryAction];\n};\nconst useUtilityClasses = ownerState => {\n  const {\n    alignItems,\n    classes,\n    dense,\n    disableGutters,\n    disablePadding,\n    divider,\n    hasSecondaryAction\n  } = ownerState;\n  const slots = {\n    root: ['root', dense && 'dense', !disableGutters && 'gutters', !disablePadding && 'padding', divider && 'divider', alignItems === 'flex-start' && 'alignItemsFlexStart', hasSecondaryAction && 'secondaryAction'],\n    container: ['container'],\n    secondaryAction: ['secondaryAction']\n  };\n  return composeClasses(slots, getListItemUtilityClass, classes);\n};\nexport const ListItemRoot = styled('div', {\n  name: 'MuiListItem',\n  slot: 'Root',\n  overridesResolver\n})(memoTheme(({\n  theme\n}) => ({\n  display: 'flex',\n  justifyContent: 'flex-start',\n  alignItems: 'center',\n  position: 'relative',\n  textDecoration: 'none',\n  width: '100%',\n  boxSizing: 'border-box',\n  textAlign: 'left',\n  variants: [{\n    props: ({\n      ownerState\n    }) => !ownerState.disablePadding,\n    style: {\n      paddingTop: 8,\n      paddingBottom: 8\n    }\n  }, {\n    props: ({\n      ownerState\n    }) => !ownerState.disablePadding && ownerState.dense,\n    style: {\n      paddingTop: 4,\n      paddingBottom: 4\n    }\n  }, {\n    props: ({\n      ownerState\n    }) => !ownerState.disablePadding && !ownerState.disableGutters,\n    style: {\n      paddingLeft: 16,\n      paddingRight: 16\n    }\n  }, {\n    props: ({\n      ownerState\n    }) => !ownerState.disablePadding && !!ownerState.secondaryAction,\n    style: {\n      // Add some space to avoid collision as `ListItemSecondaryAction`\n      // is absolutely positioned.\n      paddingRight: 48\n    }\n  }, {\n    props: ({\n      ownerState\n    }) => !!ownerState.secondaryAction,\n    style: {\n      [`& > .${listItemButtonClasses.root}`]: {\n        paddingRight: 48\n      }\n    }\n  }, {\n    props: {\n      alignItems: 'flex-start'\n    },\n    style: {\n      alignItems: 'flex-start'\n    }\n  }, {\n    props: ({\n      ownerState\n    }) => ownerState.divider,\n    style: {\n      borderBottom: `1px solid ${(theme.vars || theme).palette.divider}`,\n      backgroundClip: 'padding-box'\n    }\n  }, {\n    props: ({\n      ownerState\n    }) => ownerState.button,\n    style: {\n      transition: theme.transitions.create('background-color', {\n        duration: theme.transitions.duration.shortest\n      }),\n      '&:hover': {\n        textDecoration: 'none',\n        backgroundColor: (theme.vars || theme).palette.action.hover,\n        // Reset on touch devices, it doesn't add specificity\n        '@media (hover: none)': {\n          backgroundColor: 'transparent'\n        }\n      }\n    }\n  }, {\n    props: ({\n      ownerState\n    }) => ownerState.hasSecondaryAction,\n    style: {\n      // Add some space to avoid collision as `ListItemSecondaryAction`\n      // is absolutely positioned.\n      paddingRight: 48\n    }\n  }]\n})));\nconst ListItemContainer = styled('li', {\n  name: 'MuiListItem',\n  slot: 'Container'\n})({\n  position: 'relative'\n});\n\n/**\n * Uses an additional container component if `ListItemSecondaryAction` is the last child.\n */\nconst ListItem = /*#__PURE__*/React.forwardRef(function ListItem(inProps, ref) {\n  const props = useDefaultProps({\n    props: inProps,\n    name: 'MuiListItem'\n  });\n  const {\n    alignItems = 'center',\n    children: childrenProp,\n    className,\n    component: componentProp,\n    components = {},\n    componentsProps = {},\n    ContainerComponent = 'li',\n    ContainerProps: {\n      className: ContainerClassName,\n      ...ContainerProps\n    } = {},\n    dense = false,\n    disableGutters = false,\n    disablePadding = false,\n    divider = false,\n    secondaryAction,\n    slotProps = {},\n    slots = {},\n    ...other\n  } = props;\n  const context = React.useContext(ListContext);\n  const childContext = React.useMemo(() => ({\n    dense: dense || context.dense || false,\n    alignItems,\n    disableGutters\n  }), [alignItems, context.dense, dense, disableGutters]);\n  const listItemRef = React.useRef(null);\n  const children = React.Children.toArray(childrenProp);\n\n  // v4 implementation, deprecated in v6, will be removed in a future major release\n  const hasSecondaryAction = children.length && isMuiElement(children[children.length - 1], ['ListItemSecondaryAction']);\n  const ownerState = {\n    ...props,\n    alignItems,\n    dense: childContext.dense,\n    disableGutters,\n    disablePadding,\n    divider,\n    hasSecondaryAction\n  };\n  const classes = useUtilityClasses(ownerState);\n  const handleRef = useForkRef(listItemRef, ref);\n  const externalForwardedProps = {\n    slots,\n    slotProps\n  };\n  const [SecondaryActionSlot, secondaryActionSlotProps] = useSlot('secondaryAction', {\n    elementType: ListItemSecondaryAction,\n    externalForwardedProps,\n    ownerState,\n    className: classes.secondaryAction\n  });\n  const Root = slots.root || components.Root || ListItemRoot;\n  const rootProps = slotProps.root || componentsProps.root || {};\n  const componentProps = {\n    className: clsx(classes.root, rootProps.className, className),\n    ...other\n  };\n  let Component = componentProp || 'li';\n\n  // v4 implementation, deprecated in v6, will be removed in a future major release\n  if (hasSecondaryAction) {\n    // Use div by default.\n    Component = !componentProps.component && !componentProp ? 'div' : Component;\n\n    // Avoid nesting of li > li.\n    if (ContainerComponent === 'li') {\n      if (Component === 'li') {\n        Component = 'div';\n      } else if (componentProps.component === 'li') {\n        componentProps.component = 'div';\n      }\n    }\n    return /*#__PURE__*/_jsx(ListContext.Provider, {\n      value: childContext,\n      children: /*#__PURE__*/_jsxs(ListItemContainer, {\n        as: ContainerComponent,\n        className: clsx(classes.container, ContainerClassName),\n        ref: handleRef,\n        ownerState: ownerState,\n        ...ContainerProps,\n        children: [/*#__PURE__*/_jsx(Root, {\n          ...rootProps,\n          ...(!isHostComponent(Root) && {\n            as: Component,\n            ownerState: {\n              ...ownerState,\n              ...rootProps.ownerState\n            }\n          }),\n          ...componentProps,\n          children: children\n        }), children.pop()]\n      })\n    });\n  }\n  return /*#__PURE__*/_jsx(ListContext.Provider, {\n    value: childContext,\n    children: /*#__PURE__*/_jsxs(Root, {\n      ...rootProps,\n      as: Component,\n      ref: handleRef,\n      ...(!isHostComponent(Root) && {\n        ownerState: {\n          ...ownerState,\n          ...rootProps.ownerState\n        }\n      }),\n      ...componentProps,\n      children: [children, secondaryAction && /*#__PURE__*/_jsx(SecondaryActionSlot, {\n        ...secondaryActionSlotProps,\n        children: secondaryAction\n      })]\n    })\n  });\n});\nprocess.env.NODE_ENV !== \"production\" ? ListItem.propTypes /* remove-proptypes */ = {\n  // ┌────────────────────────────── Warning ──────────────────────────────┐\n  // │ These PropTypes are generated from the TypeScript type definitions. │\n  // │    To update them, edit the d.ts file and run `pnpm proptypes`.     │\n  // └─────────────────────────────────────────────────────────────────────┘\n  /**\n   * Defines the `align-items` style property.\n   * @default 'center'\n   */\n  alignItems: PropTypes.oneOf(['center', 'flex-start']),\n  /**\n   * The content of the component if a `ListItemSecondaryAction` is used it must\n   * be the last child.\n   */\n  children: chainPropTypes(PropTypes.node, props => {\n    const children = React.Children.toArray(props.children);\n\n    // React.Children.toArray(props.children).findLastIndex(isListItemSecondaryAction)\n    let secondaryActionIndex = -1;\n    for (let i = children.length - 1; i >= 0; i -= 1) {\n      const child = children[i];\n      if (isMuiElement(child, ['ListItemSecondaryAction'])) {\n        secondaryActionIndex = i;\n        break;\n      }\n    }\n\n    //  is ListItemSecondaryAction the last child of ListItem\n    if (secondaryActionIndex !== -1 && secondaryActionIndex !== children.length - 1) {\n      return new Error('MUI: You used an element after ListItemSecondaryAction. ' + 'For ListItem to detect that it has a secondary action ' + 'you must pass it as the last child to ListItem.');\n    }\n    return null;\n  }),\n  /**\n   * Override or extend the styles applied to the component.\n   */\n  classes: PropTypes.object,\n  /**\n   * @ignore\n   */\n  className: PropTypes.string,\n  /**\n   * The component used for the root node.\n   * Either a string to use a HTML element or a component.\n   */\n  component: PropTypes.elementType,\n  /**\n   * The components used for each slot inside.\n   *\n   * @deprecated Use the `slots` prop instead. This prop will be removed in a future major release. See [Migrating from deprecated APIs](https://mui.com/material-ui/migration/migrating-from-deprecated-apis/) for more details.\n   * @default {}\n   */\n  components: PropTypes.shape({\n    Root: PropTypes.elementType\n  }),\n  /**\n   * The extra props for the slot components.\n   * You can override the existing props or add new ones.\n   *\n   * @deprecated Use the `slotProps` prop instead. This prop will be removed in a future major release. See [Migrating from deprecated APIs](https://mui.com/material-ui/migration/migrating-from-deprecated-apis/) for more details.\n   * @default {}\n   */\n  componentsProps: PropTypes.shape({\n    root: PropTypes.object\n  }),\n  /**\n   * The container component used when a `ListItemSecondaryAction` is the last child.\n   * @default 'li'\n   * @deprecated Use the `component` or `slots.root` prop instead. This prop will be removed in a future major release. See [Migrating from deprecated APIs](https://mui.com/material-ui/migration/migrating-from-deprecated-apis/) for more details.\n   */\n  ContainerComponent: elementTypeAcceptingRef,\n  /**\n   * Props applied to the container component if used.\n   * @default {}\n   * @deprecated Use the `slotProps.root` prop instead. This prop will be removed in a future major release. See [Migrating from deprecated APIs](https://mui.com/material-ui/migration/migrating-from-deprecated-apis/) for more details.\n   */\n  ContainerProps: PropTypes.object,\n  /**\n   * If `true`, compact vertical padding designed for keyboard and mouse input is used.\n   * The prop defaults to the value inherited from the parent List component.\n   * @default false\n   */\n  dense: PropTypes.bool,\n  /**\n   * If `true`, the left and right padding is removed.\n   * @default false\n   */\n  disableGutters: PropTypes.bool,\n  /**\n   * If `true`, all padding is removed.\n   * @default false\n   */\n  disablePadding: PropTypes.bool,\n  /**\n   * If `true`, a 1px light border is added to the bottom of the list item.\n   * @default false\n   */\n  divider: PropTypes.bool,\n  /**\n   * The element to display at the end of ListItem.\n   */\n  secondaryAction: PropTypes.node,\n  /**\n   * The extra props for the slot components.\n   * You can override the existing props or add new ones.\n   *\n   * @default {}\n   */\n  slotProps: PropTypes.shape({\n    root: PropTypes.object,\n    secondaryAction: PropTypes.oneOfType([PropTypes.func, PropTypes.object])\n  }),\n  /**\n   * The components used for each slot inside.\n   *\n   * @default {}\n   */\n  slots: PropTypes.shape({\n    root: PropTypes.elementType,\n    secondaryAction: PropTypes.elementType\n  }),\n  /**\n   * The system prop that allows defining system overrides as well as additional CSS styles.\n   */\n  sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object])\n} : void 0;\nexport default ListItem;","import generateUtilityClasses from '@mui/utils/generateUtilityClasses';\nimport generateUtilityClass from '@mui/utils/generateUtilityClass';\nexport function getListItemIconUtilityClass(slot) {\n  return generateUtilityClass('MuiListItemIcon', slot);\n}\nconst listItemIconClasses = generateUtilityClasses('MuiListItemIcon', ['root', 'alignItemsFlexStart']);\nexport default listItemIconClasses;","import generateUtilityClasses from '@mui/utils/generateUtilityClasses';\nimport generateUtilityClass from '@mui/utils/generateUtilityClass';\nexport function getListItemTextUtilityClass(slot) {\n  return generateUtilityClass('MuiListItemText', slot);\n}\nconst listItemTextClasses = generateUtilityClasses('MuiListItemText', ['root', 'multiline', 'dense', 'inset', 'primary', 'secondary']);\nexport default listItemTextClasses;","'use client';\n\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport composeClasses from '@mui/utils/composeClasses';\nimport Typography, { typographyClasses } from \"../Typography/index.js\";\nimport ListContext from \"../List/ListContext.js\";\nimport { styled } from \"../zero-styled/index.js\";\nimport { useDefaultProps } from \"../DefaultPropsProvider/index.js\";\nimport listItemTextClasses, { getListItemTextUtilityClass } from \"./listItemTextClasses.js\";\nimport useSlot from \"../utils/useSlot.js\";\nimport { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nconst useUtilityClasses = ownerState => {\n  const {\n    classes,\n    inset,\n    primary,\n    secondary,\n    dense\n  } = ownerState;\n  const slots = {\n    root: ['root', inset && 'inset', dense && 'dense', primary && secondary && 'multiline'],\n    primary: ['primary'],\n    secondary: ['secondary']\n  };\n  return composeClasses(slots, getListItemTextUtilityClass, classes);\n};\nconst ListItemTextRoot = styled('div', {\n  name: 'MuiListItemText',\n  slot: 'Root',\n  overridesResolver: (props, styles) => {\n    const {\n      ownerState\n    } = props;\n    return [{\n      [`& .${listItemTextClasses.primary}`]: styles.primary\n    }, {\n      [`& .${listItemTextClasses.secondary}`]: styles.secondary\n    }, styles.root, ownerState.inset && styles.inset, ownerState.primary && ownerState.secondary && styles.multiline, ownerState.dense && styles.dense];\n  }\n})({\n  flex: '1 1 auto',\n  minWidth: 0,\n  marginTop: 4,\n  marginBottom: 4,\n  // Combine this and the below selector once https://github.com/emotion-js/emotion/issues/3366 is solved\n  [`.${typographyClasses.root}:where(& .${listItemTextClasses.primary})`]: {\n    display: 'block'\n  },\n  [`.${typographyClasses.root}:where(& .${listItemTextClasses.secondary})`]: {\n    display: 'block'\n  },\n  variants: [{\n    props: ({\n      ownerState\n    }) => ownerState.primary && ownerState.secondary,\n    style: {\n      marginTop: 6,\n      marginBottom: 6\n    }\n  }, {\n    props: ({\n      ownerState\n    }) => ownerState.inset,\n    style: {\n      paddingLeft: 56\n    }\n  }]\n});\nconst ListItemText = /*#__PURE__*/React.forwardRef(function ListItemText(inProps, ref) {\n  const props = useDefaultProps({\n    props: inProps,\n    name: 'MuiListItemText'\n  });\n  const {\n    children,\n    className,\n    disableTypography = false,\n    inset = false,\n    primary: primaryProp,\n    primaryTypographyProps,\n    secondary: secondaryProp,\n    secondaryTypographyProps,\n    slots = {},\n    slotProps = {},\n    ...other\n  } = props;\n  const {\n    dense\n  } = React.useContext(ListContext);\n  let primary = primaryProp != null ? primaryProp : children;\n  let secondary = secondaryProp;\n  const ownerState = {\n    ...props,\n    disableTypography,\n    inset,\n    primary: !!primary,\n    secondary: !!secondary,\n    dense\n  };\n  const classes = useUtilityClasses(ownerState);\n  const externalForwardedProps = {\n    slots,\n    slotProps: {\n      primary: primaryTypographyProps,\n      secondary: secondaryTypographyProps,\n      ...slotProps\n    }\n  };\n  const [RootSlot, rootSlotProps] = useSlot('root', {\n    className: clsx(classes.root, className),\n    elementType: ListItemTextRoot,\n    externalForwardedProps: {\n      ...externalForwardedProps,\n      ...other\n    },\n    ownerState,\n    ref\n  });\n  const [PrimarySlot, primarySlotProps] = useSlot('primary', {\n    className: classes.primary,\n    elementType: Typography,\n    externalForwardedProps,\n    ownerState\n  });\n  const [SecondarySlot, secondarySlotProps] = useSlot('secondary', {\n    className: classes.secondary,\n    elementType: Typography,\n    externalForwardedProps,\n    ownerState\n  });\n  if (primary != null && primary.type !== Typography && !disableTypography) {\n    primary = /*#__PURE__*/_jsx(PrimarySlot, {\n      variant: dense ? 'body2' : 'body1',\n      component: primarySlotProps?.variant ? undefined : 'span',\n      ...primarySlotProps,\n      children: primary\n    });\n  }\n  if (secondary != null && secondary.type !== Typography && !disableTypography) {\n    secondary = /*#__PURE__*/_jsx(SecondarySlot, {\n      variant: \"body2\",\n      color: \"textSecondary\",\n      ...secondarySlotProps,\n      children: secondary\n    });\n  }\n  return /*#__PURE__*/_jsxs(RootSlot, {\n    ...rootSlotProps,\n    children: [primary, secondary]\n  });\n});\nprocess.env.NODE_ENV !== \"production\" ? ListItemText.propTypes /* remove-proptypes */ = {\n  // ┌────────────────────────────── Warning ──────────────────────────────┐\n  // │ These PropTypes are generated from the TypeScript type definitions. │\n  // │    To update them, edit the d.ts file and run `pnpm proptypes`.     │\n  // └─────────────────────────────────────────────────────────────────────┘\n  /**\n   * Alias for the `primary` prop.\n   */\n  children: PropTypes.node,\n  /**\n   * Override or extend the styles applied to the component.\n   */\n  classes: PropTypes.object,\n  /**\n   * @ignore\n   */\n  className: PropTypes.string,\n  /**\n   * If `true`, the children won't be wrapped by a Typography component.\n   * This can be useful to render an alternative Typography variant by wrapping\n   * the `children` (or `primary`) text, and optional `secondary` text\n   * with the Typography component.\n   * @default false\n   */\n  disableTypography: PropTypes.bool,\n  /**\n   * If `true`, the children are indented.\n   * This should be used if there is no left avatar or left icon.\n   * @default false\n   */\n  inset: PropTypes.bool,\n  /**\n   * The main content element.\n   */\n  primary: PropTypes.node,\n  /**\n   * These props will be forwarded to the primary typography component\n   * (as long as disableTypography is not `true`).\n   * @deprecated Use `slotProps.primary` instead. This prop will be removed in a future major release. See [Migrating from deprecated APIs](/material-ui/migration/migrating-from-deprecated-apis/) for more details.\n   */\n  primaryTypographyProps: PropTypes.object,\n  /**\n   * The secondary content element.\n   */\n  secondary: PropTypes.node,\n  /**\n   * These props will be forwarded to the secondary typography component\n   * (as long as disableTypography is not `true`).\n   * @deprecated Use `slotProps.secondary` instead. This prop will be removed in a future major release. See [Migrating from deprecated APIs](/material-ui/migration/migrating-from-deprecated-apis/) for more details.\n   */\n  secondaryTypographyProps: PropTypes.object,\n  /**\n   * The props used for each slot inside.\n   * @default {}\n   */\n  slotProps: PropTypes.shape({\n    primary: PropTypes.oneOfType([PropTypes.func, PropTypes.object]),\n    root: PropTypes.oneOfType([PropTypes.func, PropTypes.object]),\n    secondary: PropTypes.oneOfType([PropTypes.func, PropTypes.object])\n  }),\n  /**\n   * The components used for each slot inside.\n   * @default {}\n   */\n  slots: PropTypes.shape({\n    primary: PropTypes.elementType,\n    root: PropTypes.elementType,\n    secondary: PropTypes.elementType\n  }),\n  /**\n   * The system prop that allows defining system overrides as well as additional CSS styles.\n   */\n  sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object])\n} : void 0;\nexport default ListItemText;","'use client';\n\nimport * as React from 'react';\nimport { isFragment } from 'react-is';\nimport PropTypes from 'prop-types';\nimport ownerDocument from \"../utils/ownerDocument.js\";\nimport List from \"../List/index.js\";\nimport getActiveElement from \"../utils/getActiveElement.js\";\nimport getScrollbarSize from \"../utils/getScrollbarSize.js\";\nimport useForkRef from \"../utils/useForkRef.js\";\nimport useEnhancedEffect from \"../utils/useEnhancedEffect.js\";\nimport { ownerWindow } from \"../utils/index.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nfunction nextItem(list, item, disableListWrap) {\n  if (list === item) {\n    return list.firstChild;\n  }\n  if (item && item.nextElementSibling) {\n    return item.nextElementSibling;\n  }\n  return disableListWrap ? null : list.firstChild;\n}\nfunction previousItem(list, item, disableListWrap) {\n  if (list === item) {\n    return disableListWrap ? list.firstChild : list.lastChild;\n  }\n  if (item && item.previousElementSibling) {\n    return item.previousElementSibling;\n  }\n  return disableListWrap ? null : list.lastChild;\n}\nfunction textCriteriaMatches(nextFocus, textCriteria) {\n  if (textCriteria === undefined) {\n    return true;\n  }\n  let text = nextFocus.innerText;\n  if (text === undefined) {\n    // jsdom doesn't support innerText\n    text = nextFocus.textContent;\n  }\n  text = text.trim().toLowerCase();\n  if (text.length === 0) {\n    return false;\n  }\n  if (textCriteria.repeating) {\n    return text[0] === textCriteria.keys[0];\n  }\n  return text.startsWith(textCriteria.keys.join(''));\n}\nfunction moveFocus(list, currentFocus, disableListWrap, disabledItemsFocusable, traversalFunction, textCriteria) {\n  let wrappedOnce = false;\n  let nextFocus = traversalFunction(list, currentFocus, currentFocus ? disableListWrap : false);\n  while (nextFocus) {\n    // Prevent infinite loop.\n    if (nextFocus === list.firstChild) {\n      if (wrappedOnce) {\n        return false;\n      }\n      wrappedOnce = true;\n    }\n\n    // Same logic as useAutocomplete.js\n    const nextFocusDisabled = disabledItemsFocusable ? false : nextFocus.disabled || nextFocus.getAttribute('aria-disabled') === 'true';\n    if (!nextFocus.hasAttribute('tabindex') || !textCriteriaMatches(nextFocus, textCriteria) || nextFocusDisabled) {\n      // Move to the next element.\n      nextFocus = traversalFunction(list, nextFocus, disableListWrap);\n    } else {\n      nextFocus.focus();\n      return true;\n    }\n  }\n  return false;\n}\n\n/**\n * A permanently displayed menu following https://www.w3.org/WAI/ARIA/apg/patterns/menu-button/.\n * It's exposed to help customization of the [`Menu`](/material-ui/api/menu/) component if you\n * use it separately you need to move focus into the component manually. Once\n * the focus is placed inside the component it is fully keyboard accessible.\n */\nconst MenuList = /*#__PURE__*/React.forwardRef(function MenuList(props, ref) {\n  const {\n    // private\n    // eslint-disable-next-line react/prop-types\n    actions,\n    autoFocus = false,\n    autoFocusItem = false,\n    children,\n    className,\n    disabledItemsFocusable = false,\n    disableListWrap = false,\n    onKeyDown,\n    variant = 'selectedMenu',\n    ...other\n  } = props;\n  const listRef = React.useRef(null);\n  const textCriteriaRef = React.useRef({\n    keys: [],\n    repeating: true,\n    previousKeyMatched: true,\n    lastTime: null\n  });\n  useEnhancedEffect(() => {\n    if (autoFocus) {\n      listRef.current.focus();\n    }\n  }, [autoFocus]);\n  React.useImperativeHandle(actions, () => ({\n    adjustStyleForScrollbar: (containerElement, {\n      direction\n    }) => {\n      // Let's ignore that piece of logic if users are already overriding the width\n      // of the menu.\n      const noExplicitWidth = !listRef.current.style.width;\n      if (containerElement.clientHeight < listRef.current.clientHeight && noExplicitWidth) {\n        const scrollbarSize = `${getScrollbarSize(ownerWindow(containerElement))}px`;\n        listRef.current.style[direction === 'rtl' ? 'paddingLeft' : 'paddingRight'] = scrollbarSize;\n        listRef.current.style.width = `calc(100% + ${scrollbarSize})`;\n      }\n      return listRef.current;\n    }\n  }), []);\n  const handleKeyDown = event => {\n    const list = listRef.current;\n    const key = event.key;\n    const isModifierKeyPressed = event.ctrlKey || event.metaKey || event.altKey;\n    if (isModifierKeyPressed) {\n      if (onKeyDown) {\n        onKeyDown(event);\n      }\n      return;\n    }\n\n    /**\n     * @type {Element} - will always be defined since we are in a keydown handler\n     * attached to an element. A keydown event is either dispatched to the activeElement\n     * or document.body or document.documentElement. Only the first case will\n     * trigger this specific handler.\n     */\n    const currentFocus = getActiveElement(ownerDocument(list));\n    if (key === 'ArrowDown') {\n      // Prevent scroll of the page\n      event.preventDefault();\n      moveFocus(list, currentFocus, disableListWrap, disabledItemsFocusable, nextItem);\n    } else if (key === 'ArrowUp') {\n      event.preventDefault();\n      moveFocus(list, currentFocus, disableListWrap, disabledItemsFocusable, previousItem);\n    } else if (key === 'Home') {\n      event.preventDefault();\n      moveFocus(list, null, disableListWrap, disabledItemsFocusable, nextItem);\n    } else if (key === 'End') {\n      event.preventDefault();\n      moveFocus(list, null, disableListWrap, disabledItemsFocusable, previousItem);\n    } else if (key.length === 1) {\n      const criteria = textCriteriaRef.current;\n      const lowerKey = key.toLowerCase();\n      const currTime = performance.now();\n      if (criteria.keys.length > 0) {\n        // Reset\n        if (currTime - criteria.lastTime > 500) {\n          criteria.keys = [];\n          criteria.repeating = true;\n          criteria.previousKeyMatched = true;\n        } else if (criteria.repeating && lowerKey !== criteria.keys[0]) {\n          criteria.repeating = false;\n        }\n      }\n      criteria.lastTime = currTime;\n      criteria.keys.push(lowerKey);\n      const keepFocusOnCurrent = currentFocus && !criteria.repeating && textCriteriaMatches(currentFocus, criteria);\n      if (criteria.previousKeyMatched && (keepFocusOnCurrent || moveFocus(list, currentFocus, false, disabledItemsFocusable, nextItem, criteria))) {\n        event.preventDefault();\n      } else {\n        criteria.previousKeyMatched = false;\n      }\n    }\n    if (onKeyDown) {\n      onKeyDown(event);\n    }\n  };\n  const handleRef = useForkRef(listRef, ref);\n\n  /**\n   * the index of the item should receive focus\n   * in a `variant=\"selectedMenu\"` it's the first `selected` item\n   * otherwise it's the very first item.\n   */\n  let activeItemIndex = -1;\n  // since we inject focus related props into children we have to do a lookahead\n  // to check if there is a `selected` item. We're looking for the last `selected`\n  // item and use the first valid item as a fallback\n  React.Children.forEach(children, (child, index) => {\n    if (! /*#__PURE__*/React.isValidElement(child)) {\n      if (activeItemIndex === index) {\n        activeItemIndex += 1;\n        if (activeItemIndex >= children.length) {\n          // there are no focusable items within the list.\n          activeItemIndex = -1;\n        }\n      }\n      return;\n    }\n    if (process.env.NODE_ENV !== 'production') {\n      if (isFragment(child)) {\n        console.error([\"MUI: The Menu component doesn't accept a Fragment as a child.\", 'Consider providing an array instead.'].join('\\n'));\n      }\n    }\n    if (!child.props.disabled) {\n      if (variant === 'selectedMenu' && child.props.selected) {\n        activeItemIndex = index;\n      } else if (activeItemIndex === -1) {\n        activeItemIndex = index;\n      }\n    }\n    if (activeItemIndex === index && (child.props.disabled || child.props.muiSkipListHighlight || child.type.muiSkipListHighlight)) {\n      activeItemIndex += 1;\n      if (activeItemIndex >= children.length) {\n        // there are no focusable items within the list.\n        activeItemIndex = -1;\n      }\n    }\n  });\n  const items = React.Children.map(children, (child, index) => {\n    if (index === activeItemIndex) {\n      const newChildProps = {};\n      if (autoFocusItem) {\n        newChildProps.autoFocus = true;\n      }\n      if (child.props.tabIndex === undefined && variant === 'selectedMenu') {\n        newChildProps.tabIndex = 0;\n      }\n      return /*#__PURE__*/React.cloneElement(child, newChildProps);\n    }\n    return child;\n  });\n  return /*#__PURE__*/_jsx(List, {\n    role: \"menu\",\n    ref: handleRef,\n    className: className,\n    onKeyDown: handleKeyDown,\n    tabIndex: autoFocus ? 0 : -1,\n    ...other,\n    children: items\n  });\n});\nprocess.env.NODE_ENV !== \"production\" ? MenuList.propTypes /* remove-proptypes */ = {\n  // ┌────────────────────────────── Warning ──────────────────────────────┐\n  // │ These PropTypes are generated from the TypeScript type definitions. │\n  // │    To update them, edit the d.ts file and run `pnpm proptypes`.     │\n  // └─────────────────────────────────────────────────────────────────────┘\n  /**\n   * If `true`, will focus the `[role=\"menu\"]` container and move into tab order.\n   * @default false\n   */\n  autoFocus: PropTypes.bool,\n  /**\n   * If `true`, will focus the first menuitem if `variant=\"menu\"` or selected item\n   * if `variant=\"selectedMenu\"`.\n   * @default false\n   */\n  autoFocusItem: PropTypes.bool,\n  /**\n   * MenuList contents, normally `MenuItem`s.\n   */\n  children: PropTypes.node,\n  /**\n   * @ignore\n   */\n  className: PropTypes.string,\n  /**\n   * If `true`, will allow focus on disabled items.\n   * @default false\n   */\n  disabledItemsFocusable: PropTypes.bool,\n  /**\n   * If `true`, the menu items will not wrap focus.\n   * @default false\n   */\n  disableListWrap: PropTypes.bool,\n  /**\n   * @ignore\n   */\n  onKeyDown: PropTypes.func,\n  /**\n   * The variant to use. Use `menu` to prevent selected items from impacting the initial focus\n   * and the vertical alignment relative to the anchor element.\n   * @default 'selectedMenu'\n   */\n  variant: PropTypes.oneOf(['menu', 'selectedMenu'])\n} : void 0;\nexport default MenuList;","import generateUtilityClasses from '@mui/utils/generateUtilityClasses';\nimport generateUtilityClass from '@mui/utils/generateUtilityClass';\nexport function getPopoverUtilityClass(slot) {\n  return generateUtilityClass('MuiPopover', slot);\n}\nconst popoverClasses = generateUtilityClasses('MuiPopover', ['root', 'paper']);\nexport default popoverClasses;","'use client';\n\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport composeClasses from '@mui/utils/composeClasses';\nimport HTMLElementType from '@mui/utils/HTMLElementType';\nimport refType from '@mui/utils/refType';\nimport elementTypeAcceptingRef from '@mui/utils/elementTypeAcceptingRef';\nimport integerPropType from '@mui/utils/integerPropType';\nimport chainPropTypes from '@mui/utils/chainPropTypes';\nimport isHostComponent from '@mui/utils/isHostComponent';\nimport { styled } from \"../zero-styled/index.js\";\nimport { useDefaultProps } from \"../DefaultPropsProvider/index.js\";\nimport isLayoutSupported from \"../utils/isLayoutSupported.js\";\nimport debounce from \"../utils/debounce.js\";\nimport ownerDocument from \"../utils/ownerDocument.js\";\nimport ownerWindow from \"../utils/ownerWindow.js\";\nimport Grow from \"../Grow/index.js\";\nimport Modal from \"../Modal/index.js\";\nimport PaperBase from \"../Paper/index.js\";\nimport { getPopoverUtilityClass } from \"./popoverClasses.js\";\nimport useSlot from \"../utils/useSlot.js\";\nimport { mergeSlotProps } from \"../utils/index.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport function getOffsetTop(rect, vertical) {\n  let offset = 0;\n  if (typeof vertical === 'number') {\n    offset = vertical;\n  } else if (vertical === 'center') {\n    offset = rect.height / 2;\n  } else if (vertical === 'bottom') {\n    offset = rect.height;\n  }\n  return offset;\n}\nexport function getOffsetLeft(rect, horizontal) {\n  let offset = 0;\n  if (typeof horizontal === 'number') {\n    offset = horizontal;\n  } else if (horizontal === 'center') {\n    offset = rect.width / 2;\n  } else if (horizontal === 'right') {\n    offset = rect.width;\n  }\n  return offset;\n}\nfunction getTransformOriginValue(transformOrigin) {\n  return [transformOrigin.horizontal, transformOrigin.vertical].map(n => typeof n === 'number' ? `${n}px` : n).join(' ');\n}\nfunction resolveAnchorEl(anchorEl) {\n  return typeof anchorEl === 'function' ? anchorEl() : anchorEl;\n}\nconst useUtilityClasses = ownerState => {\n  const {\n    classes\n  } = ownerState;\n  const slots = {\n    root: ['root'],\n    paper: ['paper']\n  };\n  return composeClasses(slots, getPopoverUtilityClass, classes);\n};\nexport const PopoverRoot = styled(Modal, {\n  name: 'MuiPopover',\n  slot: 'Root'\n})({});\nexport const PopoverPaper = styled(PaperBase, {\n  name: 'MuiPopover',\n  slot: 'Paper'\n})({\n  position: 'absolute',\n  overflowY: 'auto',\n  overflowX: 'hidden',\n  // So we see the popover when it's empty.\n  // It's most likely on issue on userland.\n  minWidth: 16,\n  minHeight: 16,\n  maxWidth: 'calc(100% - 32px)',\n  maxHeight: 'calc(100% - 32px)',\n  // We disable the focus ring for mouse, touch and keyboard users.\n  outline: 0\n});\nconst Popover = /*#__PURE__*/React.forwardRef(function Popover(inProps, ref) {\n  const props = useDefaultProps({\n    props: inProps,\n    name: 'MuiPopover'\n  });\n  const {\n    action,\n    anchorEl,\n    anchorOrigin = {\n      vertical: 'top',\n      horizontal: 'left'\n    },\n    anchorPosition,\n    anchorReference = 'anchorEl',\n    children,\n    className,\n    container: containerProp,\n    elevation = 8,\n    marginThreshold = 16,\n    open,\n    PaperProps: PaperPropsProp = {},\n    // TODO: remove in v7\n    slots = {},\n    slotProps = {},\n    transformOrigin = {\n      vertical: 'top',\n      horizontal: 'left'\n    },\n    TransitionComponent,\n    // TODO: remove in v7\n    transitionDuration: transitionDurationProp = 'auto',\n    TransitionProps = {},\n    // TODO: remove in v7\n    disableScrollLock = false,\n    ...other\n  } = props;\n  const paperRef = React.useRef();\n  const ownerState = {\n    ...props,\n    anchorOrigin,\n    anchorReference,\n    elevation,\n    marginThreshold,\n    transformOrigin,\n    TransitionComponent,\n    transitionDuration: transitionDurationProp,\n    TransitionProps\n  };\n  const classes = useUtilityClasses(ownerState);\n\n  // Returns the top/left offset of the position\n  // to attach to on the anchor element (or body if none is provided)\n  const getAnchorOffset = React.useCallback(() => {\n    if (anchorReference === 'anchorPosition') {\n      if (process.env.NODE_ENV !== 'production') {\n        if (!anchorPosition) {\n          console.error('MUI: You need to provide a `anchorPosition` prop when using ' + '<Popover anchorReference=\"anchorPosition\" />.');\n        }\n      }\n      return anchorPosition;\n    }\n    const resolvedAnchorEl = resolveAnchorEl(anchorEl);\n\n    // If an anchor element wasn't provided, just use the parent body element of this Popover\n    const anchorElement = resolvedAnchorEl && resolvedAnchorEl.nodeType === 1 ? resolvedAnchorEl : ownerDocument(paperRef.current).body;\n    const anchorRect = anchorElement.getBoundingClientRect();\n    if (process.env.NODE_ENV !== 'production') {\n      const box = anchorElement.getBoundingClientRect();\n      if (isLayoutSupported() && box.top === 0 && box.left === 0 && box.right === 0 && box.bottom === 0) {\n        console.warn(['MUI: The `anchorEl` prop provided to the component is invalid.', 'The anchor element should be part of the document layout.', \"Make sure the element is present in the document or that it's not display none.\"].join('\\n'));\n      }\n    }\n    return {\n      top: anchorRect.top + getOffsetTop(anchorRect, anchorOrigin.vertical),\n      left: anchorRect.left + getOffsetLeft(anchorRect, anchorOrigin.horizontal)\n    };\n  }, [anchorEl, anchorOrigin.horizontal, anchorOrigin.vertical, anchorPosition, anchorReference]);\n\n  // Returns the base transform origin using the element\n  const getTransformOrigin = React.useCallback(elemRect => {\n    return {\n      vertical: getOffsetTop(elemRect, transformOrigin.vertical),\n      horizontal: getOffsetLeft(elemRect, transformOrigin.horizontal)\n    };\n  }, [transformOrigin.horizontal, transformOrigin.vertical]);\n  const getPositioningStyle = React.useCallback(element => {\n    const elemRect = {\n      width: element.offsetWidth,\n      height: element.offsetHeight\n    };\n\n    // Get the transform origin point on the element itself\n    const elemTransformOrigin = getTransformOrigin(elemRect);\n    if (anchorReference === 'none') {\n      return {\n        top: null,\n        left: null,\n        transformOrigin: getTransformOriginValue(elemTransformOrigin)\n      };\n    }\n\n    // Get the offset of the anchoring element\n    const anchorOffset = getAnchorOffset();\n\n    // Calculate element positioning\n    let top = anchorOffset.top - elemTransformOrigin.vertical;\n    let left = anchorOffset.left - elemTransformOrigin.horizontal;\n    const bottom = top + elemRect.height;\n    const right = left + elemRect.width;\n\n    // Use the parent window of the anchorEl if provided\n    const containerWindow = ownerWindow(resolveAnchorEl(anchorEl));\n\n    // Window thresholds taking required margin into account\n    const heightThreshold = containerWindow.innerHeight - marginThreshold;\n    const widthThreshold = containerWindow.innerWidth - marginThreshold;\n\n    // Check if the vertical axis needs shifting\n    if (marginThreshold !== null && top < marginThreshold) {\n      const diff = top - marginThreshold;\n      top -= diff;\n      elemTransformOrigin.vertical += diff;\n    } else if (marginThreshold !== null && bottom > heightThreshold) {\n      const diff = bottom - heightThreshold;\n      top -= diff;\n      elemTransformOrigin.vertical += diff;\n    }\n    if (process.env.NODE_ENV !== 'production') {\n      if (elemRect.height > heightThreshold && elemRect.height && heightThreshold) {\n        console.error(['MUI: The popover component is too tall.', `Some part of it can not be seen on the screen (${elemRect.height - heightThreshold}px).`, 'Please consider adding a `max-height` to improve the user-experience.'].join('\\n'));\n      }\n    }\n\n    // Check if the horizontal axis needs shifting\n    if (marginThreshold !== null && left < marginThreshold) {\n      const diff = left - marginThreshold;\n      left -= diff;\n      elemTransformOrigin.horizontal += diff;\n    } else if (right > widthThreshold) {\n      const diff = right - widthThreshold;\n      left -= diff;\n      elemTransformOrigin.horizontal += diff;\n    }\n    return {\n      top: `${Math.round(top)}px`,\n      left: `${Math.round(left)}px`,\n      transformOrigin: getTransformOriginValue(elemTransformOrigin)\n    };\n  }, [anchorEl, anchorReference, getAnchorOffset, getTransformOrigin, marginThreshold]);\n  const [isPositioned, setIsPositioned] = React.useState(open);\n  const setPositioningStyles = React.useCallback(() => {\n    const element = paperRef.current;\n    if (!element) {\n      return;\n    }\n    const positioning = getPositioningStyle(element);\n    if (positioning.top !== null) {\n      element.style.setProperty('top', positioning.top);\n    }\n    if (positioning.left !== null) {\n      element.style.left = positioning.left;\n    }\n    element.style.transformOrigin = positioning.transformOrigin;\n    setIsPositioned(true);\n  }, [getPositioningStyle]);\n  React.useEffect(() => {\n    if (disableScrollLock) {\n      window.addEventListener('scroll', setPositioningStyles);\n    }\n    return () => window.removeEventListener('scroll', setPositioningStyles);\n  }, [anchorEl, disableScrollLock, setPositioningStyles]);\n  const handleEntering = () => {\n    setPositioningStyles();\n  };\n  const handleExited = () => {\n    setIsPositioned(false);\n  };\n  React.useEffect(() => {\n    if (open) {\n      setPositioningStyles();\n    }\n  });\n  React.useImperativeHandle(action, () => open ? {\n    updatePosition: () => {\n      setPositioningStyles();\n    }\n  } : null, [open, setPositioningStyles]);\n  React.useEffect(() => {\n    if (!open) {\n      return undefined;\n    }\n    const handleResize = debounce(() => {\n      setPositioningStyles();\n    });\n    const containerWindow = ownerWindow(resolveAnchorEl(anchorEl));\n    containerWindow.addEventListener('resize', handleResize);\n    return () => {\n      handleResize.clear();\n      containerWindow.removeEventListener('resize', handleResize);\n    };\n  }, [anchorEl, open, setPositioningStyles]);\n  let transitionDuration = transitionDurationProp;\n  const externalForwardedProps = {\n    slots: {\n      transition: TransitionComponent,\n      ...slots\n    },\n    slotProps: {\n      transition: TransitionProps,\n      paper: PaperPropsProp,\n      ...slotProps\n    }\n  };\n  const [TransitionSlot, transitionSlotProps] = useSlot('transition', {\n    elementType: Grow,\n    externalForwardedProps,\n    ownerState,\n    getSlotProps: handlers => ({\n      ...handlers,\n      onEntering: (element, isAppearing) => {\n        handlers.onEntering?.(element, isAppearing);\n        handleEntering();\n      },\n      onExited: element => {\n        handlers.onExited?.(element);\n        handleExited();\n      }\n    }),\n    additionalProps: {\n      appear: true,\n      in: open\n    }\n  });\n  if (transitionDurationProp === 'auto' && !TransitionSlot.muiSupportAuto) {\n    transitionDuration = undefined;\n  }\n\n  // If the container prop is provided, use that\n  // If the anchorEl prop is provided, use its parent body element as the container\n  // If neither are provided let the Modal take care of choosing the container\n  const container = containerProp || (anchorEl ? ownerDocument(resolveAnchorEl(anchorEl)).body : undefined);\n  const [RootSlot, {\n    slots: rootSlotsProp,\n    slotProps: rootSlotPropsProp,\n    ...rootProps\n  }] = useSlot('root', {\n    ref,\n    elementType: PopoverRoot,\n    externalForwardedProps: {\n      ...externalForwardedProps,\n      ...other\n    },\n    shouldForwardComponentProp: true,\n    additionalProps: {\n      slots: {\n        backdrop: slots.backdrop\n      },\n      slotProps: {\n        backdrop: mergeSlotProps(typeof slotProps.backdrop === 'function' ? slotProps.backdrop(ownerState) : slotProps.backdrop, {\n          invisible: true\n        })\n      },\n      container,\n      open\n    },\n    ownerState,\n    className: clsx(classes.root, className)\n  });\n  const [PaperSlot, paperProps] = useSlot('paper', {\n    ref: paperRef,\n    className: classes.paper,\n    elementType: PopoverPaper,\n    externalForwardedProps,\n    shouldForwardComponentProp: true,\n    additionalProps: {\n      elevation,\n      style: isPositioned ? undefined : {\n        opacity: 0\n      }\n    },\n    ownerState\n  });\n  return /*#__PURE__*/_jsx(RootSlot, {\n    ...rootProps,\n    ...(!isHostComponent(RootSlot) && {\n      slots: rootSlotsProp,\n      slotProps: rootSlotPropsProp,\n      disableScrollLock\n    }),\n    children: /*#__PURE__*/_jsx(TransitionSlot, {\n      ...transitionSlotProps,\n      timeout: transitionDuration,\n      children: /*#__PURE__*/_jsx(PaperSlot, {\n        ...paperProps,\n        children: children\n      })\n    })\n  });\n});\nprocess.env.NODE_ENV !== \"production\" ? Popover.propTypes /* remove-proptypes */ = {\n  // ┌────────────────────────────── Warning ──────────────────────────────┐\n  // │ These PropTypes are generated from the TypeScript type definitions. │\n  // │    To update them, edit the d.ts file and run `pnpm proptypes`.     │\n  // └─────────────────────────────────────────────────────────────────────┘\n  /**\n   * A ref for imperative actions.\n   * It currently only supports updatePosition() action.\n   */\n  action: refType,\n  /**\n   * An HTML element, [PopoverVirtualElement](https://mui.com/material-ui/react-popover/#virtual-element),\n   * or a function that returns either.\n   * It's used to set the position of the popover.\n   */\n  anchorEl: chainPropTypes(PropTypes.oneOfType([HTMLElementType, PropTypes.func]), props => {\n    if (props.open && (!props.anchorReference || props.anchorReference === 'anchorEl')) {\n      const resolvedAnchorEl = resolveAnchorEl(props.anchorEl);\n      if (resolvedAnchorEl && resolvedAnchorEl.nodeType === 1) {\n        const box = resolvedAnchorEl.getBoundingClientRect();\n        if (process.env.NODE_ENV !== 'production') {\n          if (isLayoutSupported() && box.top === 0 && box.left === 0 && box.right === 0 && box.bottom === 0) {\n            return new Error(['MUI: The `anchorEl` prop provided to the component is invalid.', 'The anchor element should be part of the document layout.', \"Make sure the element is present in the document or that it's not display none.\"].join('\\n'));\n          }\n        }\n      } else {\n        return new Error(['MUI: The `anchorEl` prop provided to the component is invalid.', `It should be an Element or PopoverVirtualElement instance but it's \\`${resolvedAnchorEl}\\` instead.`].join('\\n'));\n      }\n    }\n    return null;\n  }),\n  /**\n   * This is the point on the anchor where the popover's\n   * `anchorEl` will attach to. This is not used when the\n   * anchorReference is 'anchorPosition'.\n   *\n   * Options:\n   * vertical: [top, center, bottom];\n   * horizontal: [left, center, right].\n   * @default {\n   *   vertical: 'top',\n   *   horizontal: 'left',\n   * }\n   */\n  anchorOrigin: PropTypes.shape({\n    horizontal: PropTypes.oneOfType([PropTypes.oneOf(['center', 'left', 'right']), PropTypes.number]).isRequired,\n    vertical: PropTypes.oneOfType([PropTypes.oneOf(['bottom', 'center', 'top']), PropTypes.number]).isRequired\n  }),\n  /**\n   * This is the position that may be used to set the position of the popover.\n   * The coordinates are relative to the application's client area.\n   */\n  anchorPosition: PropTypes.shape({\n    left: PropTypes.number.isRequired,\n    top: PropTypes.number.isRequired\n  }),\n  /**\n   * This determines which anchor prop to refer to when setting\n   * the position of the popover.\n   * @default 'anchorEl'\n   */\n  anchorReference: PropTypes.oneOf(['anchorEl', 'anchorPosition', 'none']),\n  /**\n   * A backdrop component. This prop enables custom backdrop rendering.\n   * @deprecated Use `slots.backdrop` instead. This prop will be removed in a future major release. See [Migrating from deprecated APIs](https://mui.com/material-ui/migration/migrating-from-deprecated-apis/) for more details.\n   * @default styled(Backdrop, {\n   *   name: 'MuiModal',\n   *   slot: 'Backdrop',\n   *   overridesResolver: (props, styles) => {\n   *     return styles.backdrop;\n   *   },\n   * })({\n   *   zIndex: -1,\n   * })\n   */\n  BackdropComponent: PropTypes.elementType,\n  /**\n   * Props applied to the [`Backdrop`](/material-ui/api/backdrop/) element.\n   * @deprecated Use `slotProps.backdrop` instead. This prop will be removed in a future major release. See [Migrating from deprecated APIs](https://mui.com/material-ui/migration/migrating-from-deprecated-apis/) for more details.\n   */\n  BackdropProps: PropTypes.object,\n  /**\n   * The content of the component.\n   */\n  children: PropTypes.node,\n  /**\n   * Override or extend the styles applied to the component.\n   */\n  classes: PropTypes.object,\n  /**\n   * @ignore\n   */\n  className: PropTypes.string,\n  /**\n   * An HTML element, component instance, or function that returns either.\n   * The `container` will passed to the Modal component.\n   *\n   * By default, it uses the body of the anchorEl's top-level document object,\n   * so it's simply `document.body` most of the time.\n   */\n  container: PropTypes /* @typescript-to-proptypes-ignore */.oneOfType([HTMLElementType, PropTypes.func]),\n  /**\n   * Disable the scroll lock behavior.\n   * @default false\n   */\n  disableScrollLock: PropTypes.bool,\n  /**\n   * The elevation of the popover.\n   * @default 8\n   */\n  elevation: integerPropType,\n  /**\n   * Specifies how close to the edge of the window the popover can appear.\n   * If null, the popover will not be constrained by the window.\n   * @default 16\n   */\n  marginThreshold: PropTypes.number,\n  /**\n   * Callback fired when the component requests to be closed.\n   * The `reason` parameter can optionally be used to control the response to `onClose`.\n   */\n  onClose: PropTypes.func,\n  /**\n   * If `true`, the component is shown.\n   */\n  open: PropTypes.bool.isRequired,\n  /**\n   * Props applied to the [`Paper`](https://mui.com/material-ui/api/paper/) element.\n   *\n   * This prop is an alias for `slotProps.paper` and will be overridden by it if both are used.\n   * @deprecated Use `slotProps.paper` instead.\n   *\n   * @default {}\n   */\n  PaperProps: PropTypes /* @typescript-to-proptypes-ignore */.shape({\n    component: elementTypeAcceptingRef\n  }),\n  /**\n   * The props used for each slot inside.\n   * @default {}\n   */\n  slotProps: PropTypes.shape({\n    backdrop: PropTypes.oneOfType([PropTypes.func, PropTypes.object]),\n    paper: PropTypes.oneOfType([PropTypes.func, PropTypes.object]),\n    root: PropTypes.oneOfType([PropTypes.func, PropTypes.object]),\n    transition: PropTypes.oneOfType([PropTypes.func, PropTypes.object])\n  }),\n  /**\n   * The components used for each slot inside.\n   * @default {}\n   */\n  slots: PropTypes.shape({\n    backdrop: PropTypes.elementType,\n    paper: PropTypes.elementType,\n    root: PropTypes.elementType,\n    transition: PropTypes.elementType\n  }),\n  /**\n   * The system prop that allows defining system overrides as well as additional CSS styles.\n   */\n  sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object]),\n  /**\n   * This is the point on the popover which\n   * will attach to the anchor's origin.\n   *\n   * Options:\n   * vertical: [top, center, bottom, x(px)];\n   * horizontal: [left, center, right, x(px)].\n   * @default {\n   *   vertical: 'top',\n   *   horizontal: 'left',\n   * }\n   */\n  transformOrigin: PropTypes.shape({\n    horizontal: PropTypes.oneOfType([PropTypes.oneOf(['center', 'left', 'right']), PropTypes.number]).isRequired,\n    vertical: PropTypes.oneOfType([PropTypes.oneOf(['bottom', 'center', 'top']), PropTypes.number]).isRequired\n  }),\n  /**\n   * The component used for the transition.\n   * [Follow this guide](https://mui.com/material-ui/transitions/#transitioncomponent-prop) to learn more about the requirements for this component.\n   * @deprecated use the `slots.transition` prop instead. This prop will be removed in a future major release. See [Migrating from deprecated APIs](https://mui.com/material-ui/migration/migrating-from-deprecated-apis/) for more details.\n   * @default Grow\n   */\n  TransitionComponent: PropTypes.elementType,\n  /**\n   * Set to 'auto' to automatically calculate transition time based on height.\n   * @default 'auto'\n   */\n  transitionDuration: PropTypes.oneOfType([PropTypes.oneOf(['auto']), PropTypes.number, PropTypes.shape({\n    appear: PropTypes.number,\n    enter: PropTypes.number,\n    exit: PropTypes.number\n  })]),\n  /**\n   * Props applied to the transition element.\n   * By default, the element is based on this [`Transition`](https://reactcommunity.org/react-transition-group/transition/) component.\n   * @deprecated use the `slotProps.transition` prop instead. This prop will be removed in a future major release. See [Migrating from deprecated APIs](https://mui.com/material-ui/migration/migrating-from-deprecated-apis/) for more details.\n   * @default {}\n   */\n  TransitionProps: PropTypes.object\n} : void 0;\nexport default Popover;","import generateUtilityClasses from '@mui/utils/generateUtilityClasses';\nimport generateUtilityClass from '@mui/utils/generateUtilityClass';\nexport function getMenuUtilityClass(slot) {\n  return generateUtilityClass('MuiMenu', slot);\n}\nconst menuClasses = generateUtilityClasses('MuiMenu', ['root', 'paper', 'list']);\nexport default menuClasses;","'use client';\n\nimport * as React from 'react';\nimport { isFragment } from 'react-is';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport composeClasses from '@mui/utils/composeClasses';\nimport HTMLElementType from '@mui/utils/HTMLElementType';\nimport { useRtl } from '@mui/system/RtlProvider';\nimport useSlotProps from '@mui/utils/useSlotProps';\nimport MenuList from \"../MenuList/index.js\";\nimport Popover, { PopoverPaper } from \"../Popover/index.js\";\nimport rootShouldForwardProp from \"../styles/rootShouldForwardProp.js\";\nimport { styled } from \"../zero-styled/index.js\";\nimport { useDefaultProps } from \"../DefaultPropsProvider/index.js\";\nimport { getMenuUtilityClass } from \"./menuClasses.js\";\nimport useSlot from \"../utils/useSlot.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nconst RTL_ORIGIN = {\n  vertical: 'top',\n  horizontal: 'right'\n};\nconst LTR_ORIGIN = {\n  vertical: 'top',\n  horizontal: 'left'\n};\nconst useUtilityClasses = ownerState => {\n  const {\n    classes\n  } = ownerState;\n  const slots = {\n    root: ['root'],\n    paper: ['paper'],\n    list: ['list']\n  };\n  return composeClasses(slots, getMenuUtilityClass, classes);\n};\nconst MenuRoot = styled(Popover, {\n  shouldForwardProp: prop => rootShouldForwardProp(prop) || prop === 'classes',\n  name: 'MuiMenu',\n  slot: 'Root'\n})({});\nexport const MenuPaper = styled(PopoverPaper, {\n  name: 'MuiMenu',\n  slot: 'Paper'\n})({\n  // specZ: The maximum height of a simple menu should be one or more rows less than the view\n  // height. This ensures a tappable area outside of the simple menu with which to dismiss\n  // the menu.\n  maxHeight: 'calc(100% - 96px)',\n  // Add iOS momentum scrolling for iOS < 13.0\n  WebkitOverflowScrolling: 'touch'\n});\nconst MenuMenuList = styled(MenuList, {\n  name: 'MuiMenu',\n  slot: 'List'\n})({\n  // We disable the focus ring for mouse, touch and keyboard users.\n  outline: 0\n});\nconst Menu = /*#__PURE__*/React.forwardRef(function Menu(inProps, ref) {\n  const props = useDefaultProps({\n    props: inProps,\n    name: 'MuiMenu'\n  });\n  const {\n    autoFocus = true,\n    children,\n    className,\n    disableAutoFocusItem = false,\n    MenuListProps = {},\n    onClose,\n    open,\n    PaperProps = {},\n    PopoverClasses,\n    transitionDuration = 'auto',\n    TransitionProps: {\n      onEntering,\n      ...TransitionProps\n    } = {},\n    variant = 'selectedMenu',\n    slots = {},\n    slotProps = {},\n    ...other\n  } = props;\n  const isRtl = useRtl();\n  const ownerState = {\n    ...props,\n    autoFocus,\n    disableAutoFocusItem,\n    MenuListProps,\n    onEntering,\n    PaperProps,\n    transitionDuration,\n    TransitionProps,\n    variant\n  };\n  const classes = useUtilityClasses(ownerState);\n  const autoFocusItem = autoFocus && !disableAutoFocusItem && open;\n  const menuListActionsRef = React.useRef(null);\n  const handleEntering = (element, isAppearing) => {\n    if (menuListActionsRef.current) {\n      menuListActionsRef.current.adjustStyleForScrollbar(element, {\n        direction: isRtl ? 'rtl' : 'ltr'\n      });\n    }\n    if (onEntering) {\n      onEntering(element, isAppearing);\n    }\n  };\n  const handleListKeyDown = event => {\n    if (event.key === 'Tab') {\n      event.preventDefault();\n      if (onClose) {\n        onClose(event, 'tabKeyDown');\n      }\n    }\n  };\n\n  /**\n   * the index of the item should receive focus\n   * in a `variant=\"selectedMenu\"` it's the first `selected` item\n   * otherwise it's the very first item.\n   */\n  let activeItemIndex = -1;\n  // since we inject focus related props into children we have to do a lookahead\n  // to check if there is a `selected` item. We're looking for the last `selected`\n  // item and use the first valid item as a fallback\n  React.Children.map(children, (child, index) => {\n    if (! /*#__PURE__*/React.isValidElement(child)) {\n      return;\n    }\n    if (process.env.NODE_ENV !== 'production') {\n      if (isFragment(child)) {\n        console.error([\"MUI: The Menu component doesn't accept a Fragment as a child.\", 'Consider providing an array instead.'].join('\\n'));\n      }\n    }\n    if (!child.props.disabled) {\n      if (variant === 'selectedMenu' && child.props.selected) {\n        activeItemIndex = index;\n      } else if (activeItemIndex === -1) {\n        activeItemIndex = index;\n      }\n    }\n  });\n  const externalForwardedProps = {\n    slots,\n    slotProps: {\n      list: MenuListProps,\n      transition: TransitionProps,\n      paper: PaperProps,\n      ...slotProps\n    }\n  };\n  const rootSlotProps = useSlotProps({\n    elementType: slots.root,\n    externalSlotProps: slotProps.root,\n    ownerState,\n    className: [classes.root, className]\n  });\n  const [PaperSlot, paperSlotProps] = useSlot('paper', {\n    className: classes.paper,\n    elementType: MenuPaper,\n    externalForwardedProps,\n    shouldForwardComponentProp: true,\n    ownerState\n  });\n  const [ListSlot, listSlotProps] = useSlot('list', {\n    className: clsx(classes.list, MenuListProps.className),\n    elementType: MenuMenuList,\n    shouldForwardComponentProp: true,\n    externalForwardedProps,\n    getSlotProps: handlers => ({\n      ...handlers,\n      onKeyDown: event => {\n        handleListKeyDown(event);\n        handlers.onKeyDown?.(event);\n      }\n    }),\n    ownerState\n  });\n  const resolvedTransitionProps = typeof externalForwardedProps.slotProps.transition === 'function' ? externalForwardedProps.slotProps.transition(ownerState) : externalForwardedProps.slotProps.transition;\n  return /*#__PURE__*/_jsx(MenuRoot, {\n    onClose: onClose,\n    anchorOrigin: {\n      vertical: 'bottom',\n      horizontal: isRtl ? 'right' : 'left'\n    },\n    transformOrigin: isRtl ? RTL_ORIGIN : LTR_ORIGIN,\n    slots: {\n      root: slots.root,\n      paper: PaperSlot,\n      backdrop: slots.backdrop,\n      ...(slots.transition && {\n        // TODO: pass `slots.transition` directly once `TransitionComponent` is removed from Popover\n        transition: slots.transition\n      })\n    },\n    slotProps: {\n      root: rootSlotProps,\n      paper: paperSlotProps,\n      backdrop: typeof slotProps.backdrop === 'function' ? slotProps.backdrop(ownerState) : slotProps.backdrop,\n      transition: {\n        ...resolvedTransitionProps,\n        onEntering: (...args) => {\n          handleEntering(...args);\n          resolvedTransitionProps?.onEntering?.(...args);\n        }\n      }\n    },\n    open: open,\n    ref: ref,\n    transitionDuration: transitionDuration,\n    ownerState: ownerState,\n    ...other,\n    classes: PopoverClasses,\n    children: /*#__PURE__*/_jsx(ListSlot, {\n      actions: menuListActionsRef,\n      autoFocus: autoFocus && (activeItemIndex === -1 || disableAutoFocusItem),\n      autoFocusItem: autoFocusItem,\n      variant: variant,\n      ...listSlotProps,\n      children: children\n    })\n  });\n});\nprocess.env.NODE_ENV !== \"production\" ? Menu.propTypes /* remove-proptypes */ = {\n  // ┌────────────────────────────── Warning ──────────────────────────────┐\n  // │ These PropTypes are generated from the TypeScript type definitions. │\n  // │    To update them, edit the d.ts file and run `pnpm proptypes`.     │\n  // └─────────────────────────────────────────────────────────────────────┘\n  /**\n   * An HTML element, or a function that returns one.\n   * It's used to set the position of the menu.\n   */\n  anchorEl: PropTypes /* @typescript-to-proptypes-ignore */.oneOfType([HTMLElementType, PropTypes.func]),\n  /**\n   * If `true` (Default) will focus the `[role=\"menu\"]` if no focusable child is found. Disabled\n   * children are not focusable. If you set this prop to `false` focus will be placed\n   * on the parent modal container. This has severe accessibility implications\n   * and should only be considered if you manage focus otherwise.\n   * @default true\n   */\n  autoFocus: PropTypes.bool,\n  /**\n   * Menu contents, normally `MenuItem`s.\n   */\n  children: PropTypes.node,\n  /**\n   * Override or extend the styles applied to the component.\n   */\n  classes: PropTypes.object,\n  /**\n   * @ignore\n   */\n  className: PropTypes.string,\n  /**\n   * When opening the menu will not focus the active item but the `[role=\"menu\"]`\n   * unless `autoFocus` is also set to `false`. Not using the default means not\n   * following WAI-ARIA authoring practices. Please be considerate about possible\n   * accessibility implications.\n   * @default false\n   */\n  disableAutoFocusItem: PropTypes.bool,\n  /**\n   * Props applied to the [`MenuList`](https://mui.com/material-ui/api/menu-list/) element.\n   * @deprecated use the `slotProps.list` prop instead. This prop will be removed in a future major release. See [Migrating from deprecated APIs](https://mui.com/material-ui/migration/migrating-from-deprecated-apis/) for more details.\n   * @default {}\n   */\n  MenuListProps: PropTypes.object,\n  /**\n   * Callback fired when the component requests to be closed.\n   *\n   * @param {object} event The event source of the callback.\n   * @param {string} reason Can be: `\"escapeKeyDown\"`, `\"backdropClick\"`, `\"tabKeyDown\"`.\n   */\n  onClose: PropTypes.func,\n  /**\n   * If `true`, the component is shown.\n   */\n  open: PropTypes.bool.isRequired,\n  /**\n   * @ignore\n   */\n  PaperProps: PropTypes.object,\n  /**\n   * `classes` prop applied to the [`Popover`](https://mui.com/material-ui/api/popover/) element.\n   */\n  PopoverClasses: PropTypes.object,\n  /**\n   * The props used for each slot inside.\n   * @default {}\n   */\n  slotProps: PropTypes.shape({\n    backdrop: PropTypes.oneOfType([PropTypes.func, PropTypes.object]),\n    list: PropTypes.oneOfType([PropTypes.func, PropTypes.object]),\n    paper: PropTypes.oneOfType([PropTypes.func, PropTypes.object]),\n    root: PropTypes.oneOfType([PropTypes.func, PropTypes.object]),\n    transition: PropTypes.oneOfType([PropTypes.func, PropTypes.object])\n  }),\n  /**\n   * The components used for each slot inside.\n   * @default {}\n   */\n  slots: PropTypes.shape({\n    backdrop: PropTypes.elementType,\n    list: PropTypes.elementType,\n    paper: PropTypes.elementType,\n    root: PropTypes.elementType,\n    transition: PropTypes.elementType\n  }),\n  /**\n   * The system prop that allows defining system overrides as well as additional CSS styles.\n   */\n  sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object]),\n  /**\n   * The length of the transition in `ms`, or 'auto'\n   * @default 'auto'\n   */\n  transitionDuration: PropTypes.oneOfType([PropTypes.oneOf(['auto']), PropTypes.number, PropTypes.shape({\n    appear: PropTypes.number,\n    enter: PropTypes.number,\n    exit: PropTypes.number\n  })]),\n  /**\n   * Props applied to the transition element.\n   * By default, the element is based on this [`Transition`](https://reactcommunity.org/react-transition-group/transition/) component.\n   * @deprecated use the `slotProps.transition` prop instead. This prop will be removed in a future major release. See [Migrating from deprecated APIs](https://mui.com/material-ui/migration/migrating-from-deprecated-apis/) for more details.\n   * @default {}\n   */\n  TransitionProps: PropTypes.object,\n  /**\n   * The variant to use. Use `menu` to prevent selected items from impacting the initial focus.\n   * @default 'selectedMenu'\n   */\n  variant: PropTypes.oneOf(['menu', 'selectedMenu'])\n} : void 0;\nexport default Menu;","import generateUtilityClasses from '@mui/utils/generateUtilityClasses';\nimport generateUtilityClass from '@mui/utils/generateUtilityClass';\nexport function getMenuItemUtilityClass(slot) {\n  return generateUtilityClass('MuiMenuItem', slot);\n}\nconst menuItemClasses = generateUtilityClasses('MuiMenuItem', ['root', 'focusVisible', 'dense', 'disabled', 'divider', 'gutters', 'selected']);\nexport default menuItemClasses;","import generateUtilityClasses from '@mui/utils/generateUtilityClasses';\nimport generateUtilityClass from '@mui/utils/generateUtilityClass';\nexport function getNativeSelectUtilityClasses(slot) {\n  return generateUtilityClass('MuiNativeSelect', slot);\n}\nconst nativeSelectClasses = generateUtilityClasses('MuiNativeSelect', ['root', 'select', 'multiple', 'filled', 'outlined', 'standard', 'disabled', 'icon', 'iconOpen', 'iconFilled', 'iconOutlined', 'iconStandard', 'nativeInput', 'error']);\nexport default nativeSelectClasses;","'use client';\n\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport refType from '@mui/utils/refType';\nimport composeClasses from '@mui/utils/composeClasses';\nimport capitalize from \"../utils/capitalize.js\";\nimport nativeSelectClasses, { getNativeSelectUtilityClasses } from \"./nativeSelectClasses.js\";\nimport { styled } from \"../zero-styled/index.js\";\nimport rootShouldForwardProp from \"../styles/rootShouldForwardProp.js\";\nimport { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nconst useUtilityClasses = ownerState => {\n  const {\n    classes,\n    variant,\n    disabled,\n    multiple,\n    open,\n    error\n  } = ownerState;\n  const slots = {\n    select: ['select', variant, disabled && 'disabled', multiple && 'multiple', error && 'error'],\n    icon: ['icon', `icon${capitalize(variant)}`, open && 'iconOpen', disabled && 'disabled']\n  };\n  return composeClasses(slots, getNativeSelectUtilityClasses, classes);\n};\nexport const StyledSelectSelect = styled('select', {\n  name: 'MuiNativeSelect'\n})(({\n  theme\n}) => ({\n  // Reset\n  MozAppearance: 'none',\n  // Reset\n  WebkitAppearance: 'none',\n  // When interacting quickly, the text can end up selected.\n  // Native select can't be selected either.\n  userSelect: 'none',\n  // Reset\n  borderRadius: 0,\n  cursor: 'pointer',\n  '&:focus': {\n    // Reset Chrome style\n    borderRadius: 0\n  },\n  [`&.${nativeSelectClasses.disabled}`]: {\n    cursor: 'default'\n  },\n  '&[multiple]': {\n    height: 'auto'\n  },\n  '&:not([multiple]) option, &:not([multiple]) optgroup': {\n    backgroundColor: (theme.vars || theme).palette.background.paper\n  },\n  variants: [{\n    props: ({\n      ownerState\n    }) => ownerState.variant !== 'filled' && ownerState.variant !== 'outlined',\n    style: {\n      // Bump specificity to allow extending custom inputs\n      '&&&': {\n        paddingRight: 24,\n        minWidth: 16 // So it doesn't collapse.\n      }\n    }\n  }, {\n    props: {\n      variant: 'filled'\n    },\n    style: {\n      '&&&': {\n        paddingRight: 32\n      }\n    }\n  }, {\n    props: {\n      variant: 'outlined'\n    },\n    style: {\n      borderRadius: (theme.vars || theme).shape.borderRadius,\n      '&:focus': {\n        borderRadius: (theme.vars || theme).shape.borderRadius // Reset the reset for Chrome style\n      },\n      '&&&': {\n        paddingRight: 32\n      }\n    }\n  }]\n}));\nconst NativeSelectSelect = styled(StyledSelectSelect, {\n  name: 'MuiNativeSelect',\n  slot: 'Select',\n  shouldForwardProp: rootShouldForwardProp,\n  overridesResolver: (props, styles) => {\n    const {\n      ownerState\n    } = props;\n    return [styles.select, styles[ownerState.variant], ownerState.error && styles.error, {\n      [`&.${nativeSelectClasses.multiple}`]: styles.multiple\n    }];\n  }\n})({});\nexport const StyledSelectIcon = styled('svg', {\n  name: 'MuiNativeSelect'\n})(({\n  theme\n}) => ({\n  // We use a position absolute over a flexbox in order to forward the pointer events\n  // to the input and to support wrapping tags..\n  position: 'absolute',\n  right: 0,\n  // Center vertically, height is 1em\n  top: 'calc(50% - .5em)',\n  // Don't block pointer events on the select under the icon.\n  pointerEvents: 'none',\n  color: (theme.vars || theme).palette.action.active,\n  [`&.${nativeSelectClasses.disabled}`]: {\n    color: (theme.vars || theme).palette.action.disabled\n  },\n  variants: [{\n    props: ({\n      ownerState\n    }) => ownerState.open,\n    style: {\n      transform: 'rotate(180deg)'\n    }\n  }, {\n    props: {\n      variant: 'filled'\n    },\n    style: {\n      right: 7\n    }\n  }, {\n    props: {\n      variant: 'outlined'\n    },\n    style: {\n      right: 7\n    }\n  }]\n}));\nconst NativeSelectIcon = styled(StyledSelectIcon, {\n  name: 'MuiNativeSelect',\n  slot: 'Icon',\n  overridesResolver: (props, styles) => {\n    const {\n      ownerState\n    } = props;\n    return [styles.icon, ownerState.variant && styles[`icon${capitalize(ownerState.variant)}`], ownerState.open && styles.iconOpen];\n  }\n})({});\n\n/**\n * @ignore - internal component.\n */\nconst NativeSelectInput = /*#__PURE__*/React.forwardRef(function NativeSelectInput(props, ref) {\n  const {\n    className,\n    disabled,\n    error,\n    IconComponent,\n    inputRef,\n    variant = 'standard',\n    ...other\n  } = props;\n  const ownerState = {\n    ...props,\n    disabled,\n    variant,\n    error\n  };\n  const classes = useUtilityClasses(ownerState);\n  return /*#__PURE__*/_jsxs(React.Fragment, {\n    children: [/*#__PURE__*/_jsx(NativeSelectSelect, {\n      ownerState: ownerState,\n      className: clsx(classes.select, className),\n      disabled: disabled,\n      ref: inputRef || ref,\n      ...other\n    }), props.multiple ? null : /*#__PURE__*/_jsx(NativeSelectIcon, {\n      as: IconComponent,\n      ownerState: ownerState,\n      className: classes.icon\n    })]\n  });\n});\nprocess.env.NODE_ENV !== \"production\" ? NativeSelectInput.propTypes = {\n  /**\n   * The option elements to populate the select with.\n   * Can be some `<option>` elements.\n   */\n  children: PropTypes.node,\n  /**\n   * Override or extend the styles applied to the component.\n   */\n  classes: PropTypes.object,\n  /**\n   * The CSS class name of the select element.\n   */\n  className: PropTypes.string,\n  /**\n   * If `true`, the select is disabled.\n   */\n  disabled: PropTypes.bool,\n  /**\n   * If `true`, the `select input` will indicate an error.\n   */\n  error: PropTypes.bool,\n  /**\n   * The icon that displays the arrow.\n   */\n  IconComponent: PropTypes.elementType.isRequired,\n  /**\n   * Use that prop to pass a ref to the native select element.\n   * @deprecated\n   */\n  inputRef: refType,\n  /**\n   * @ignore\n   */\n  multiple: PropTypes.bool,\n  /**\n   * Name attribute of the `select` or hidden `input` element.\n   */\n  name: PropTypes.string,\n  /**\n   * Callback fired when a menu item is selected.\n   *\n   * @param {object} event The event source of the callback.\n   * You can pull out the new value by accessing `event.target.value` (string).\n   */\n  onChange: PropTypes.func,\n  /**\n   * The input value.\n   */\n  value: PropTypes.any,\n  /**\n   * The variant to use.\n   */\n  variant: PropTypes.oneOf(['standard', 'outlined', 'filled'])\n} : void 0;\nexport default NativeSelectInput;","import generateUtilityClasses from '@mui/utils/generateUtilityClasses';\nimport generateUtilityClass from '@mui/utils/generateUtilityClass';\nexport function getSelectUtilityClasses(slot) {\n  return generateUtilityClass('MuiSelect', slot);\n}\nconst selectClasses = generateUtilityClasses('MuiSelect', ['root', 'select', 'multiple', 'filled', 'outlined', 'standard', 'disabled', 'focused', 'icon', 'iconOpen', 'iconFilled', 'iconOutlined', 'iconStandard', 'nativeInput', 'error']);\nexport default selectClasses;","export default function getOpenInteractionType(event) {\n  if (!event) {\n    return null;\n  }\n  if (event.type === 'mousedown' || event.type === 'pointerdown' || event.type === 'touchstart') {\n    return 'pointer';\n  }\n  if (event.type === 'keydown' || event.type === 'click' && event.detail === 0) {\n    return 'keyboard';\n  }\n  return null;\n}","export default function isEmpty(display) {\n  return display == null || typeof display === 'string' && !display.trim();\n}","export default function areEqualValues(a, b) {\n  if (typeof b === 'object' && b !== null) {\n    return a === b;\n  }\n\n  // The value could be a number, the DOM will stringify it anyway.\n  return String(a) === String(b);\n}","'use client';\n\nimport * as React from 'react';\nconst SelectFocusSourceContext = /*#__PURE__*/React.createContext(null);\nif (process.env.NODE_ENV !== 'production') {\n  SelectFocusSourceContext.displayName = 'SelectFocusSourceContext';\n}\nfunction useSelectFocusSource() {\n  const context = React.useContext(SelectFocusSourceContext);\n  return context;\n}\nconst SelectFocusSourceProvider = SelectFocusSourceContext.Provider;\nexport { useSelectFocusSource, SelectFocusSourceProvider };","'use client';\n\nimport _formatErrorMessage from \"@mui/utils/formatMuiErrorMessage\";\nvar _span;\nimport * as React from 'react';\nimport { isFragment } from 'react-is';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport composeClasses from '@mui/utils/composeClasses';\nimport useId from '@mui/utils/useId';\nimport refType from '@mui/utils/refType';\nimport ownerDocument from \"../utils/ownerDocument.js\";\nimport capitalize from \"../utils/capitalize.js\";\nimport Menu from \"../Menu/Menu.js\";\nimport { StyledSelectSelect, StyledSelectIcon } from \"../NativeSelect/NativeSelectInput.js\";\nimport { isFilled } from \"../InputBase/utils.js\";\nimport { styled } from \"../zero-styled/index.js\";\nimport slotShouldForwardProp from \"../styles/slotShouldForwardProp.js\";\nimport useForkRef from \"../utils/useForkRef.js\";\nimport useControlled from \"../utils/useControlled.js\";\nimport selectClasses, { getSelectUtilityClasses } from \"./selectClasses.js\";\nimport { areEqualValues, isEmpty, getOpenInteractionType } from \"./utils/index.js\";\nimport { SelectFocusSourceProvider } from \"./utils/SelectFocusSourceContext.js\";\nimport { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nconst SelectSelect = styled(StyledSelectSelect, {\n  name: 'MuiSelect',\n  slot: 'Select',\n  overridesResolver: (props, styles) => {\n    const {\n      ownerState\n    } = props;\n    return [\n    // Win specificity over the input base\n    {\n      [`&.${selectClasses.select}`]: styles.select\n    }, {\n      [`&.${selectClasses.select}`]: styles[ownerState.variant]\n    }, {\n      [`&.${selectClasses.error}`]: styles.error\n    }, {\n      [`&.${selectClasses.multiple}`]: styles.multiple\n    }];\n  }\n})({\n  // Win specificity over the input base\n  [`&.${selectClasses.select}`]: {\n    height: 'auto',\n    // Resets for multiple select with chips\n    minHeight: '1.4375em',\n    // Required for select\\text-field height consistency\n    textOverflow: 'ellipsis',\n    whiteSpace: 'nowrap',\n    overflow: 'hidden'\n  }\n});\nconst SelectIcon = styled(StyledSelectIcon, {\n  name: 'MuiSelect',\n  slot: 'Icon',\n  overridesResolver: (props, styles) => {\n    const {\n      ownerState\n    } = props;\n    return [styles.icon, ownerState.variant && styles[`icon${capitalize(ownerState.variant)}`], ownerState.open && styles.iconOpen];\n  }\n})({});\nconst SelectNativeInput = styled('input', {\n  shouldForwardProp: prop => slotShouldForwardProp(prop) && prop !== 'classes',\n  name: 'MuiSelect',\n  slot: 'NativeInput'\n})({\n  bottom: 0,\n  left: 0,\n  position: 'absolute',\n  opacity: 0,\n  pointerEvents: 'none',\n  width: '100%',\n  boxSizing: 'border-box'\n});\nconst useUtilityClasses = ownerState => {\n  const {\n    classes,\n    variant,\n    disabled,\n    multiple,\n    open,\n    error\n  } = ownerState;\n  const slots = {\n    select: ['select', variant, disabled && 'disabled', multiple && 'multiple', error && 'error'],\n    icon: ['icon', `icon${capitalize(variant)}`, open && 'iconOpen', disabled && 'disabled'],\n    nativeInput: ['nativeInput']\n  };\n  return composeClasses(slots, getSelectUtilityClasses, classes);\n};\n\n/**\n * @ignore - internal component.\n */\nconst SelectInput = /*#__PURE__*/React.forwardRef(function SelectInput(props, ref) {\n  const {\n    'aria-describedby': ariaDescribedby,\n    'aria-label': ariaLabel,\n    autoFocus,\n    autoWidth,\n    children,\n    className,\n    defaultOpen,\n    defaultValue,\n    disabled,\n    displayEmpty,\n    error = false,\n    IconComponent,\n    inputRef: inputRefProp,\n    labelId,\n    MenuProps = {},\n    multiple,\n    name,\n    onBlur,\n    onChange,\n    onClose,\n    onFocus,\n    // eslint-disable-next-line react/prop-types\n    onKeyDown,\n    // eslint-disable-next-line react/prop-types\n    onMouseDown,\n    onOpen,\n    open: openProp,\n    readOnly,\n    renderValue,\n    required,\n    SelectDisplayProps = {},\n    tabIndex: tabIndexProp,\n    // catching `type` from Input which makes no sense for SelectInput\n    type,\n    value: valueProp,\n    variant = 'standard',\n    ...other\n  } = props;\n  const [value, setValueState] = useControlled({\n    controlled: valueProp,\n    default: defaultValue,\n    name: 'Select'\n  });\n  const [openState, setOpenState] = useControlled({\n    controlled: openProp,\n    default: defaultOpen,\n    name: 'Select'\n  });\n  const inputRef = React.useRef(null);\n  const displayRef = React.useRef(null);\n  const [displayNode, setDisplayNode] = React.useState(null);\n  const {\n    current: isOpenControlled\n  } = React.useRef(openProp != null);\n  const [menuMinWidthState, setMenuMinWidthState] = React.useState();\n  const [openInteractionType, setOpenInteractionType] = React.useState(null);\n  const handleRef = useForkRef(ref, inputRefProp);\n  const handleDisplayRef = React.useCallback(node => {\n    displayRef.current = node;\n    if (node) {\n      setDisplayNode(node);\n    }\n  }, []);\n  const anchorElement = displayNode?.parentNode;\n  React.useImperativeHandle(handleRef, () => ({\n    focus: () => {\n      displayRef.current.focus();\n    },\n    node: inputRef.current,\n    value\n  }), [value]);\n  const open = displayNode !== null && openState;\n  React.useEffect(() => {\n    if (!open || !anchorElement || autoWidth) {\n      return undefined;\n    }\n    if (typeof ResizeObserver === 'undefined') {\n      return undefined;\n    }\n    const observer = new ResizeObserver(() => {\n      setMenuMinWidthState(anchorElement.clientWidth);\n    });\n    observer.observe(anchorElement);\n    return () => {\n      observer.disconnect();\n    };\n  }, [open, anchorElement, autoWidth]);\n\n  // Resize menu on `defaultOpen` automatic toggle.\n  React.useEffect(() => {\n    if (defaultOpen && openState && displayNode && !isOpenControlled) {\n      setMenuMinWidthState(autoWidth ? null : anchorElement.clientWidth);\n      displayRef.current.focus();\n    }\n    // TODO: uncomment once we enable eslint-plugin-react-compiler // eslint-disable-next-line react-compiler/react-compiler\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [displayNode, autoWidth]);\n  // `isOpenControlled` is ignored because the component should never switch between controlled and uncontrolled modes.\n  // `defaultOpen` and `openState` are ignored to avoid unnecessary callbacks.\n  React.useEffect(() => {\n    if (autoFocus) {\n      displayRef.current.focus();\n    }\n  }, [autoFocus]);\n  React.useEffect(() => {\n    if (!labelId) {\n      return undefined;\n    }\n    const label = ownerDocument(displayRef.current).getElementById(labelId);\n    if (label) {\n      const handler = () => {\n        if (getSelection().isCollapsed) {\n          displayRef.current.focus();\n        }\n      };\n      label.addEventListener('click', handler);\n      return () => {\n        label.removeEventListener('click', handler);\n      };\n    }\n    return undefined;\n  }, [labelId]);\n  const update = (openParam, event) => {\n    if (openParam) {\n      setOpenInteractionType(getOpenInteractionType(event));\n      if (onOpen) {\n        onOpen(event);\n      }\n    } else {\n      setOpenInteractionType(null);\n      if (onClose) {\n        onClose(event);\n      }\n    }\n    if (!isOpenControlled) {\n      setMenuMinWidthState(autoWidth ? null : anchorElement.clientWidth);\n      setOpenState(openParam);\n    }\n  };\n  const handleMouseDown = event => {\n    onMouseDown?.(event);\n    // Ignore everything but left-click\n    if (event.button !== 0) {\n      return;\n    }\n    // Hijack the default focus behavior.\n    event.preventDefault();\n    displayRef.current.focus();\n    update(true, event);\n  };\n  const handleClose = event => {\n    update(false, event);\n  };\n  const childrenArray = React.Children.toArray(children);\n\n  // Support autofill.\n  const handleChange = event => {\n    const child = childrenArray.find(childItem => childItem.props.value === event.target.value);\n    if (child === undefined) {\n      return;\n    }\n    setValueState(child.props.value);\n    if (onChange) {\n      onChange(event, child);\n    }\n  };\n  const handleItemClick = child => event => {\n    let newValue;\n\n    // We use the tabindex attribute to signal the available options.\n    if (!event.currentTarget.hasAttribute('tabindex')) {\n      return;\n    }\n    if (multiple) {\n      newValue = Array.isArray(value) ? value.slice() : [];\n      const itemIndex = value.indexOf(child.props.value);\n      if (itemIndex === -1) {\n        newValue.push(child.props.value);\n      } else {\n        newValue.splice(itemIndex, 1);\n      }\n    } else {\n      newValue = child.props.value;\n    }\n    if (child.props.onClick) {\n      child.props.onClick(event);\n    }\n    if (value !== newValue) {\n      setValueState(newValue);\n      if (onChange) {\n        // Redefine target to allow name and value to be read.\n        // This allows seamless integration with the most popular form libraries.\n        // https://github.com/mui/material-ui/issues/13485#issuecomment-676048492\n        // Clone the event to not override `target` of the original event.\n        const nativeEvent = event.nativeEvent || event;\n        const clonedEvent = new nativeEvent.constructor(nativeEvent.type, nativeEvent);\n        Object.defineProperty(clonedEvent, 'target', {\n          writable: true,\n          value: {\n            value: newValue,\n            name\n          }\n        });\n        onChange(clonedEvent, child);\n      }\n    }\n    if (!multiple) {\n      update(false, event);\n    }\n  };\n  const handleKeyDown = event => {\n    if (!readOnly) {\n      const validKeys = [' ', 'ArrowUp', 'ArrowDown',\n      // The native select doesn't respond to enter on macOS, but it's recommended by\n      // https://www.w3.org/WAI/ARIA/apg/patterns/combobox/examples/combobox-select-only/\n      'Enter'];\n      if (validKeys.includes(event.key)) {\n        event.preventDefault();\n        update(true, event);\n      }\n      onKeyDown?.(event);\n    }\n  };\n  const handleBlur = event => {\n    // if open event.stopImmediatePropagation\n    if (!open && onBlur) {\n      // Preact support, target is read only property on a native event.\n      Object.defineProperty(event, 'target', {\n        writable: true,\n        value: {\n          value,\n          name\n        }\n      });\n      onBlur(event);\n    }\n  };\n  delete other['aria-invalid'];\n  let display;\n  let displaySingle;\n  const displayMultiple = [];\n  let computeDisplay = false;\n  let foundMatch = false;\n\n  // No need to display any value if the field is empty.\n  if (isFilled({\n    value\n  }) || displayEmpty) {\n    if (renderValue) {\n      display = renderValue(value);\n    } else {\n      computeDisplay = true;\n    }\n  }\n  const items = childrenArray.map(child => {\n    if (! /*#__PURE__*/React.isValidElement(child)) {\n      return null;\n    }\n    if (process.env.NODE_ENV !== 'production') {\n      if (isFragment(child)) {\n        console.error([\"MUI: The Select component doesn't accept a Fragment as a child.\", 'Consider providing an array instead.'].join('\\n'));\n      }\n    }\n    let selected;\n    if (multiple) {\n      if (!Array.isArray(value)) {\n        throw new Error(process.env.NODE_ENV !== \"production\" ? 'MUI: The `value` prop must be an array ' + 'when using the `Select` component with `multiple`.' : _formatErrorMessage(2));\n      }\n      selected = value.some(v => areEqualValues(v, child.props.value));\n      if (selected && computeDisplay) {\n        displayMultiple.push(child.props.children);\n      }\n    } else {\n      selected = areEqualValues(value, child.props.value);\n      if (selected && computeDisplay) {\n        displaySingle = child.props.children;\n      }\n    }\n    if (selected) {\n      foundMatch = true;\n    }\n    return /*#__PURE__*/React.cloneElement(child, {\n      'aria-selected': selected ? 'true' : 'false',\n      onClick: handleItemClick(child),\n      onKeyUp: event => {\n        if (event.key === ' ') {\n          // otherwise our MenuItems dispatches a click event\n          // it's not behavior of the native <option> and causes\n          // the select to close immediately since we open on space keydown\n          event.preventDefault();\n        }\n        if (child.props.onKeyUp) {\n          child.props.onKeyUp(event);\n        }\n      },\n      role: 'option',\n      selected,\n      value: undefined,\n      // The value is most likely not a valid HTML attribute.\n      'data-value': child.props.value // Instead, we provide it as a data attribute.\n    });\n  });\n  if (process.env.NODE_ENV !== 'production') {\n    // TODO: uncomment once we enable eslint-plugin-react-compiler // eslint-disable-next-line react-compiler/react-compiler\n    // eslint-disable-next-line react-hooks/rules-of-hooks\n    React.useEffect(() => {\n      if (!foundMatch && !multiple && value !== '') {\n        const values = childrenArray.map(child => child.props.value);\n        console.warn([`MUI: You have provided an out-of-range value \\`${value}\\` for the select ${name ? `(name=\"${name}\") ` : ''}component.`, \"Consider providing a value that matches one of the available options or ''.\", `The available values are ${values.filter(x => x != null).map(x => `\\`${x}\\``).join(', ') || '\"\"'}.`].join('\\n'));\n      }\n    }, [foundMatch, childrenArray, multiple, name, value]);\n  }\n  if (computeDisplay) {\n    if (multiple) {\n      if (displayMultiple.length === 0) {\n        display = null;\n      } else {\n        display = displayMultiple.reduce((output, child, index) => {\n          output.push(child);\n          if (index < displayMultiple.length - 1) {\n            output.push(', ');\n          }\n          return output;\n        }, []);\n      }\n    } else {\n      display = displaySingle;\n    }\n  }\n\n  // Avoid performing a layout computation in the render method.\n  let menuMinWidth = menuMinWidthState;\n  if (!autoWidth && isOpenControlled && displayNode) {\n    menuMinWidth = anchorElement.clientWidth;\n  }\n  let tabIndex;\n  if (typeof tabIndexProp !== 'undefined') {\n    tabIndex = tabIndexProp;\n  } else {\n    tabIndex = disabled ? null : 0;\n  }\n  const buttonId = SelectDisplayProps.id || (name ? `mui-component-select-${name}` : undefined);\n  const ownerState = {\n    ...props,\n    variant,\n    value,\n    open,\n    error\n  };\n  const classes = useUtilityClasses(ownerState);\n  const paperProps = {\n    ...MenuProps.PaperProps,\n    ...(typeof MenuProps.slotProps?.paper === 'function' ? MenuProps.slotProps.paper(ownerState) : MenuProps.slotProps?.paper)\n  };\n  const listProps = {\n    ...MenuProps.MenuListProps,\n    ...(typeof MenuProps.slotProps?.list === 'function' ? MenuProps.slotProps.list(ownerState) : MenuProps.slotProps?.list)\n  };\n  const listboxId = useId();\n  return /*#__PURE__*/_jsxs(React.Fragment, {\n    children: [/*#__PURE__*/_jsx(SelectSelect, {\n      as: \"div\",\n      ref: handleDisplayRef,\n      tabIndex: tabIndex,\n      role: \"combobox\",\n      \"aria-controls\": open ? listboxId : undefined,\n      \"aria-disabled\": disabled ? 'true' : undefined,\n      \"aria-expanded\": open ? 'true' : 'false',\n      \"aria-haspopup\": \"listbox\",\n      \"aria-label\": ariaLabel,\n      \"aria-labelledby\": [labelId, buttonId].filter(Boolean).join(' ') || undefined,\n      \"aria-describedby\": ariaDescribedby,\n      \"aria-required\": required ? 'true' : undefined,\n      \"aria-invalid\": error ? 'true' : undefined,\n      onKeyDown: handleKeyDown,\n      onMouseDown: disabled || readOnly ? null : handleMouseDown,\n      onBlur: handleBlur,\n      onFocus: onFocus,\n      ...SelectDisplayProps,\n      ownerState: ownerState,\n      className: clsx(SelectDisplayProps.className, classes.select, className)\n      // The id is required for proper a11y\n      ,\n      id: buttonId,\n      children: isEmpty(display) ? // notranslate needed while Google Translate will not fix zero-width space issue\n      _span || (_span = /*#__PURE__*/_jsx(\"span\", {\n        className: \"notranslate\",\n        \"aria-hidden\": true,\n        children: \"\\u200B\"\n      })) : display\n    }), /*#__PURE__*/_jsx(SelectNativeInput, {\n      \"aria-invalid\": error,\n      value: Array.isArray(value) ? value.join(',') : value,\n      name: name,\n      ref: inputRef,\n      \"aria-hidden\": true,\n      onChange: handleChange,\n      tabIndex: -1,\n      disabled: disabled,\n      className: classes.nativeInput,\n      autoFocus: autoFocus,\n      required: required,\n      ...other,\n      ownerState: ownerState\n    }), /*#__PURE__*/_jsx(SelectIcon, {\n      as: IconComponent,\n      className: classes.icon,\n      ownerState: ownerState\n    }), /*#__PURE__*/_jsx(SelectFocusSourceProvider, {\n      value: openInteractionType,\n      children: /*#__PURE__*/_jsx(Menu, {\n        id: `menu-${name || ''}`,\n        anchorEl: anchorElement,\n        open: open,\n        onClose: handleClose,\n        anchorOrigin: {\n          vertical: 'bottom',\n          horizontal: 'center'\n        },\n        transformOrigin: {\n          vertical: 'top',\n          horizontal: 'center'\n        },\n        ...MenuProps,\n        slotProps: {\n          ...MenuProps.slotProps,\n          list: {\n            'aria-labelledby': labelId,\n            role: 'listbox',\n            'aria-multiselectable': multiple ? 'true' : undefined,\n            disableListWrap: true,\n            id: listboxId,\n            ...listProps\n          },\n          paper: {\n            ...paperProps,\n            style: {\n              minWidth: menuMinWidth,\n              ...(paperProps != null ? paperProps.style : null)\n            }\n          }\n        },\n        children: items\n      })\n    })]\n  });\n});\nprocess.env.NODE_ENV !== \"production\" ? SelectInput.propTypes = {\n  /**\n   * @ignore\n   */\n  'aria-describedby': PropTypes.string,\n  /**\n   * @ignore\n   */\n  'aria-label': PropTypes.string,\n  /**\n   * @ignore\n   */\n  autoFocus: PropTypes.bool,\n  /**\n   * If `true`, the width of the popover will automatically be set according to the items inside the\n   * menu, otherwise it will be at least the width of the select input.\n   */\n  autoWidth: PropTypes.bool,\n  /**\n   * The option elements to populate the select with.\n   * Can be some `<MenuItem>` elements.\n   */\n  children: PropTypes.node,\n  /**\n   * Override or extend the styles applied to the component.\n   */\n  classes: PropTypes.object,\n  /**\n   * The CSS class name of the select element.\n   */\n  className: PropTypes.string,\n  /**\n   * If `true`, the component is toggled on mount. Use when the component open state is not controlled.\n   * You can only use it when the `native` prop is `false` (default).\n   */\n  defaultOpen: PropTypes.bool,\n  /**\n   * The default value. Use when the component is not controlled.\n   */\n  defaultValue: PropTypes.any,\n  /**\n   * If `true`, the select is disabled.\n   */\n  disabled: PropTypes.bool,\n  /**\n   * If `true`, the selected item is displayed even if its value is empty.\n   */\n  displayEmpty: PropTypes.bool,\n  /**\n   * If `true`, the `select input` will indicate an error.\n   */\n  error: PropTypes.bool,\n  /**\n   * The icon that displays the arrow.\n   */\n  IconComponent: PropTypes.elementType.isRequired,\n  /**\n   * Imperative handle implementing `{ value: T, node: HTMLElement, focus(): void }`\n   * Equivalent to `ref`\n   */\n  inputRef: refType,\n  /**\n   * The ID of an element that acts as an additional label. The Select will\n   * be labelled by the additional label and the selected value.\n   */\n  labelId: PropTypes.string,\n  /**\n   * Props applied to the [`Menu`](/material-ui/api/menu/) element.\n   */\n  MenuProps: PropTypes.object,\n  /**\n   * If `true`, `value` must be an array and the menu will support multiple selections.\n   */\n  multiple: PropTypes.bool,\n  /**\n   * Name attribute of the `select` or hidden `input` element.\n   */\n  name: PropTypes.string,\n  /**\n   * @ignore\n   */\n  onBlur: PropTypes.func,\n  /**\n   * Callback fired when a menu item is selected.\n   *\n   * @param {object} event The event source of the callback.\n   * You can pull out the new value by accessing `event.target.value` (any).\n   * @param {object} [child] The react element that was selected.\n   */\n  onChange: PropTypes.func,\n  /**\n   * Callback fired when the component requests to be closed.\n   * Use in controlled mode (see open).\n   *\n   * @param {object} event The event source of the callback.\n   */\n  onClose: PropTypes.func,\n  /**\n   * @ignore\n   */\n  onFocus: PropTypes.func,\n  /**\n   * Callback fired when the component requests to be opened.\n   * Use in controlled mode (see open).\n   *\n   * @param {object} event The event source of the callback.\n   */\n  onOpen: PropTypes.func,\n  /**\n   * If `true`, the component is shown.\n   */\n  open: PropTypes.bool,\n  /**\n   * @ignore\n   */\n  readOnly: PropTypes.bool,\n  /**\n   * Render the selected value.\n   *\n   * @param {any} value The `value` provided to the component.\n   * @returns {ReactNode}\n   */\n  renderValue: PropTypes.func,\n  /**\n   * If `true`, the component is required.\n   */\n  required: PropTypes.bool,\n  /**\n   * Props applied to the clickable div element.\n   */\n  SelectDisplayProps: PropTypes.object,\n  /**\n   * @ignore\n   */\n  tabIndex: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n  /**\n   * @ignore\n   */\n  type: PropTypes.any,\n  /**\n   * The input value.\n   */\n  value: PropTypes.any,\n  /**\n   * The variant to use.\n   */\n  variant: PropTypes.oneOf(['standard', 'outlined', 'filled'])\n} : void 0;\nexport default SelectInput;","'use client';\n\nvar _span;\nimport PropTypes from 'prop-types';\nimport rootShouldForwardProp from \"../styles/rootShouldForwardProp.js\";\nimport { styled } from \"../zero-styled/index.js\";\nimport memoTheme from \"../utils/memoTheme.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nconst NotchedOutlineRoot = styled('fieldset', {\n  name: 'MuiNotchedOutlined',\n  shouldForwardProp: rootShouldForwardProp\n})({\n  textAlign: 'left',\n  position: 'absolute',\n  bottom: 0,\n  right: 0,\n  top: -5,\n  left: 0,\n  margin: 0,\n  padding: '0 8px',\n  pointerEvents: 'none',\n  borderRadius: 'inherit',\n  borderStyle: 'solid',\n  borderWidth: 1,\n  overflow: 'hidden',\n  minWidth: '0%'\n});\nconst NotchedOutlineLegend = styled('legend', {\n  name: 'MuiNotchedOutlined',\n  shouldForwardProp: rootShouldForwardProp\n})(memoTheme(({\n  theme\n}) => ({\n  float: 'unset',\n  // Fix conflict with bootstrap\n  width: 'auto',\n  // Fix conflict with bootstrap\n  overflow: 'hidden',\n  // Fix Horizontal scroll when label too long\n  variants: [{\n    props: ({\n      ownerState\n    }) => !ownerState.withLabel,\n    style: {\n      padding: 0,\n      lineHeight: '11px',\n      // sync with `height` in `legend` styles\n      transition: theme.transitions.create('width', {\n        duration: 150,\n        easing: theme.transitions.easing.easeOut\n      })\n    }\n  }, {\n    props: ({\n      ownerState\n    }) => ownerState.withLabel,\n    style: {\n      display: 'block',\n      // Fix conflict with normalize.css and sanitize.css\n      padding: 0,\n      height: 11,\n      // sync with `lineHeight` in `legend` styles\n      fontSize: '0.75em',\n      visibility: 'hidden',\n      maxWidth: 0.01,\n      transition: theme.transitions.create('max-width', {\n        duration: 50,\n        easing: theme.transitions.easing.easeOut\n      }),\n      whiteSpace: 'nowrap',\n      '& > span': {\n        paddingLeft: 5,\n        paddingRight: 5,\n        display: 'inline-block',\n        opacity: 0,\n        visibility: 'visible'\n      }\n    }\n  }, {\n    props: ({\n      ownerState\n    }) => ownerState.withLabel && ownerState.notched,\n    style: {\n      maxWidth: '100%',\n      transition: theme.transitions.create('max-width', {\n        duration: 100,\n        easing: theme.transitions.easing.easeOut,\n        delay: 50\n      })\n    }\n  }]\n})));\n\n/**\n * @ignore - internal component.\n */\nexport default function NotchedOutline(props) {\n  const {\n    children,\n    classes,\n    className,\n    label,\n    notched,\n    ...other\n  } = props;\n  const withLabel = label != null && label !== '';\n  const ownerState = {\n    ...props,\n    notched,\n    withLabel\n  };\n  return /*#__PURE__*/_jsx(NotchedOutlineRoot, {\n    \"aria-hidden\": true,\n    className: className,\n    ownerState: ownerState,\n    ...other,\n    children: /*#__PURE__*/_jsx(NotchedOutlineLegend, {\n      ownerState: ownerState,\n      children: withLabel ? /*#__PURE__*/_jsx(\"span\", {\n        children: label\n      }) : // notranslate needed while Google Translate will not fix zero-width space issue\n      _span || (_span = /*#__PURE__*/_jsx(\"span\", {\n        className: \"notranslate\",\n        \"aria-hidden\": true,\n        children: \"\\u200B\"\n      }))\n    })\n  });\n}\nprocess.env.NODE_ENV !== \"production\" ? NotchedOutline.propTypes /* remove-proptypes */ = {\n  /**\n   * The content of the component.\n   */\n  children: PropTypes.node,\n  /**\n   * Override or extend the styles applied to the component.\n   */\n  classes: PropTypes.object,\n  /**\n   * @ignore\n   */\n  className: PropTypes.string,\n  /**\n   * The label.\n   */\n  label: PropTypes.node,\n  /**\n   * If `true`, the outline is notched to accommodate the label.\n   */\n  notched: PropTypes.bool.isRequired,\n  /**\n   * @ignore\n   */\n  style: PropTypes.object\n} : void 0;","'use client';\n\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport refType from '@mui/utils/refType';\nimport composeClasses from '@mui/utils/composeClasses';\nimport NotchedOutline from \"./NotchedOutline.js\";\nimport useFormControl from \"../FormControl/useFormControl.js\";\nimport formControlState from \"../FormControl/formControlState.js\";\nimport rootShouldForwardProp from \"../styles/rootShouldForwardProp.js\";\nimport { styled } from \"../zero-styled/index.js\";\nimport memoTheme from \"../utils/memoTheme.js\";\nimport createSimplePaletteValueFilter from \"../utils/createSimplePaletteValueFilter.js\";\nimport { useDefaultProps } from \"../DefaultPropsProvider/index.js\";\nimport outlinedInputClasses, { getOutlinedInputUtilityClass } from \"./outlinedInputClasses.js\";\nimport InputBase, { rootOverridesResolver as inputBaseRootOverridesResolver, inputOverridesResolver as inputBaseInputOverridesResolver, InputBaseRoot, InputBaseInput } from \"../InputBase/InputBase.js\";\nimport useSlot from \"../utils/useSlot.js\";\nimport { jsxs as _jsxs, jsx as _jsx } from \"react/jsx-runtime\";\nconst useUtilityClasses = ownerState => {\n  const {\n    classes\n  } = ownerState;\n  const slots = {\n    root: ['root'],\n    notchedOutline: ['notchedOutline'],\n    input: ['input']\n  };\n  const composedClasses = composeClasses(slots, getOutlinedInputUtilityClass, classes);\n  return {\n    ...classes,\n    // forward classes to the InputBase\n    ...composedClasses\n  };\n};\nconst OutlinedInputRoot = styled(InputBaseRoot, {\n  shouldForwardProp: prop => rootShouldForwardProp(prop) || prop === 'classes',\n  name: 'MuiOutlinedInput',\n  slot: 'Root',\n  overridesResolver: inputBaseRootOverridesResolver\n})(memoTheme(({\n  theme\n}) => {\n  const borderColor = theme.palette.mode === 'light' ? 'rgba(0, 0, 0, 0.23)' : 'rgba(255, 255, 255, 0.23)';\n  return {\n    position: 'relative',\n    borderRadius: (theme.vars || theme).shape.borderRadius,\n    [`&:hover .${outlinedInputClasses.notchedOutline}`]: {\n      borderColor: (theme.vars || theme).palette.text.primary\n    },\n    // Reset on touch devices, it doesn't add specificity\n    '@media (hover: none)': {\n      [`&:hover .${outlinedInputClasses.notchedOutline}`]: {\n        borderColor: theme.vars ? theme.alpha(theme.vars.palette.common.onBackground, 0.23) : borderColor\n      }\n    },\n    [`&.${outlinedInputClasses.focused} .${outlinedInputClasses.notchedOutline}`]: {\n      borderWidth: 2\n    },\n    variants: [...Object.entries(theme.palette).filter(createSimplePaletteValueFilter()).map(([color]) => ({\n      props: {\n        color\n      },\n      style: {\n        [`&.${outlinedInputClasses.focused} .${outlinedInputClasses.notchedOutline}`]: {\n          borderColor: (theme.vars || theme).palette[color].main\n        }\n      }\n    })), {\n      props: {},\n      // to override the above style\n      style: {\n        [`&.${outlinedInputClasses.error} .${outlinedInputClasses.notchedOutline}`]: {\n          borderColor: (theme.vars || theme).palette.error.main\n        },\n        [`&.${outlinedInputClasses.disabled} .${outlinedInputClasses.notchedOutline}`]: {\n          borderColor: (theme.vars || theme).palette.action.disabled\n        }\n      }\n    }, {\n      props: ({\n        ownerState\n      }) => ownerState.startAdornment,\n      style: {\n        paddingLeft: 14\n      }\n    }, {\n      props: ({\n        ownerState\n      }) => ownerState.endAdornment,\n      style: {\n        paddingRight: 14\n      }\n    }, {\n      props: ({\n        ownerState\n      }) => ownerState.multiline,\n      style: {\n        padding: '16.5px 14px'\n      }\n    }, {\n      props: ({\n        ownerState,\n        size\n      }) => ownerState.multiline && size === 'small',\n      style: {\n        padding: '8.5px 14px'\n      }\n    }]\n  };\n}));\nconst NotchedOutlineRoot = styled(NotchedOutline, {\n  name: 'MuiOutlinedInput',\n  slot: 'NotchedOutline'\n})(memoTheme(({\n  theme\n}) => {\n  const borderColor = theme.palette.mode === 'light' ? 'rgba(0, 0, 0, 0.23)' : 'rgba(255, 255, 255, 0.23)';\n  return {\n    borderColor: theme.vars ? theme.alpha(theme.vars.palette.common.onBackground, 0.23) : borderColor\n  };\n}));\nconst OutlinedInputInput = styled(InputBaseInput, {\n  name: 'MuiOutlinedInput',\n  slot: 'Input',\n  overridesResolver: inputBaseInputOverridesResolver\n})(memoTheme(({\n  theme\n}) => ({\n  padding: '16.5px 14px',\n  ...(!theme.vars && {\n    '&:-webkit-autofill': {\n      WebkitBoxShadow: theme.palette.mode === 'light' ? null : '0 0 0 100px #266798 inset',\n      WebkitTextFillColor: theme.palette.mode === 'light' ? null : '#fff',\n      caretColor: theme.palette.mode === 'light' ? null : '#fff',\n      borderRadius: 'inherit'\n    }\n  }),\n  ...(theme.vars && {\n    '&:-webkit-autofill': {\n      borderRadius: 'inherit'\n    },\n    [theme.getColorSchemeSelector('dark')]: {\n      '&:-webkit-autofill': {\n        WebkitBoxShadow: '0 0 0 100px #266798 inset',\n        WebkitTextFillColor: '#fff',\n        caretColor: '#fff'\n      }\n    }\n  }),\n  variants: [{\n    props: {\n      size: 'small'\n    },\n    style: {\n      padding: '8.5px 14px'\n    }\n  }, {\n    props: ({\n      ownerState\n    }) => ownerState.multiline,\n    style: {\n      padding: 0\n    }\n  }, {\n    props: ({\n      ownerState\n    }) => ownerState.startAdornment,\n    style: {\n      paddingLeft: 0\n    }\n  }, {\n    props: ({\n      ownerState\n    }) => ownerState.endAdornment,\n    style: {\n      paddingRight: 0\n    }\n  }]\n})));\nconst OutlinedInput = /*#__PURE__*/React.forwardRef(function OutlinedInput(inProps, ref) {\n  const props = useDefaultProps({\n    props: inProps,\n    name: 'MuiOutlinedInput'\n  });\n  const {\n    components = {},\n    fullWidth = false,\n    inputComponent = 'input',\n    label,\n    multiline = false,\n    notched,\n    slots = {},\n    slotProps = {},\n    type = 'text',\n    ...other\n  } = props;\n  const classes = useUtilityClasses(props);\n  const muiFormControl = useFormControl();\n  const fcs = formControlState({\n    props,\n    muiFormControl,\n    states: ['color', 'disabled', 'error', 'focused', 'hiddenLabel', 'size', 'required']\n  });\n  const ownerState = {\n    ...props,\n    color: fcs.color || 'primary',\n    disabled: fcs.disabled,\n    error: fcs.error,\n    focused: fcs.focused,\n    formControl: muiFormControl,\n    fullWidth,\n    hiddenLabel: fcs.hiddenLabel,\n    multiline,\n    size: fcs.size,\n    type\n  };\n  const RootSlot = slots.root ?? components.Root ?? OutlinedInputRoot;\n  const InputSlot = slots.input ?? components.Input ?? OutlinedInputInput;\n  const [NotchedSlot, notchedProps] = useSlot('notchedOutline', {\n    elementType: NotchedOutlineRoot,\n    className: classes.notchedOutline,\n    shouldForwardComponentProp: true,\n    ownerState,\n    externalForwardedProps: {\n      slots,\n      slotProps\n    },\n    additionalProps: {\n      label: label != null && label !== '' && fcs.required ? /*#__PURE__*/_jsxs(React.Fragment, {\n        children: [label, \"\\u2009\", '*']\n      }) : label\n    }\n  });\n  return /*#__PURE__*/_jsx(InputBase, {\n    slots: {\n      root: RootSlot,\n      input: InputSlot\n    },\n    slotProps: slotProps,\n    renderSuffix: state => /*#__PURE__*/_jsx(NotchedSlot, {\n      ...notchedProps,\n      notched: typeof notched !== 'undefined' ? notched : Boolean(state.startAdornment || state.filled || state.focused)\n    }),\n    fullWidth: fullWidth,\n    inputComponent: inputComponent,\n    multiline: multiline,\n    ref: ref,\n    type: type,\n    ...other,\n    classes: {\n      ...classes,\n      notchedOutline: null\n    }\n  });\n});\nprocess.env.NODE_ENV !== \"production\" ? OutlinedInput.propTypes /* remove-proptypes */ = {\n  // ┌────────────────────────────── Warning ──────────────────────────────┐\n  // │ These PropTypes are generated from the TypeScript type definitions. │\n  // │    To update them, edit the d.ts file and run `pnpm proptypes`.     │\n  // └─────────────────────────────────────────────────────────────────────┘\n  /**\n   * This prop helps users to fill forms faster, especially on mobile devices.\n   * The name can be confusing, as it's more like an autofill.\n   * You can learn more about it [following the specification](https://html.spec.whatwg.org/multipage/form-control-infrastructure.html#autofill).\n   */\n  autoComplete: PropTypes.string,\n  /**\n   * If `true`, the `input` element is focused during the first mount.\n   */\n  autoFocus: PropTypes.bool,\n  /**\n   * Override or extend the styles applied to the component.\n   */\n  classes: PropTypes.object,\n  /**\n   * The color of the component.\n   * It supports both default and custom theme colors, which can be added as shown in the\n   * [palette customization guide](https://mui.com/material-ui/customization/palette/#custom-colors).\n   * The prop defaults to the value (`'primary'`) inherited from the parent FormControl component.\n   */\n  color: PropTypes /* @typescript-to-proptypes-ignore */.oneOfType([PropTypes.oneOf(['primary', 'secondary']), PropTypes.string]),\n  /**\n   * The components used for each slot inside.\n   *\n   * @deprecated use the `slots` prop instead. This prop will be removed in a future major release. See [Migrating from deprecated APIs](https://mui.com/material-ui/migration/migrating-from-deprecated-apis/) for more details.\n   *\n   * @default {}\n   */\n  components: PropTypes.shape({\n    Input: PropTypes.elementType,\n    Root: PropTypes.elementType\n  }),\n  /**\n   * The default value. Use when the component is not controlled.\n   */\n  defaultValue: PropTypes.any,\n  /**\n   * If `true`, the component is disabled.\n   * The prop defaults to the value (`false`) inherited from the parent FormControl component.\n   */\n  disabled: PropTypes.bool,\n  /**\n   * End `InputAdornment` for this component.\n   */\n  endAdornment: PropTypes.node,\n  /**\n   * If `true`, the `input` will indicate an error.\n   * The prop defaults to the value (`false`) inherited from the parent FormControl component.\n   */\n  error: PropTypes.bool,\n  /**\n   * If `true`, the `input` will take up the full width of its container.\n   * @default false\n   */\n  fullWidth: PropTypes.bool,\n  /**\n   * The id of the `input` element.\n   */\n  id: PropTypes.string,\n  /**\n   * The component used for the `input` element.\n   * Either a string to use a HTML element or a component.\n   * @default 'input'\n   */\n  inputComponent: PropTypes.elementType,\n  /**\n   * [Attributes](https://developer.mozilla.org/en-US/docs/Web/HTML/Reference/Elements/input#attributes) applied to the `input` element.\n   * @default {}\n   */\n  inputProps: PropTypes.object,\n  /**\n   * Pass a ref to the `input` element.\n   */\n  inputRef: refType,\n  /**\n   * The label of the `input`. It is only used for layout. The actual labelling\n   * is handled by `InputLabel`.\n   */\n  label: PropTypes.node,\n  /**\n   * If `dense`, will adjust vertical spacing. This is normally obtained via context from\n   * FormControl.\n   * The prop defaults to the value (`'none'`) inherited from the parent FormControl component.\n   */\n  margin: PropTypes.oneOf(['dense', 'none']),\n  /**\n   * Maximum number of rows to display when multiline option is set to true.\n   */\n  maxRows: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n  /**\n   * Minimum number of rows to display when multiline option is set to true.\n   */\n  minRows: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n  /**\n   * If `true`, a [TextareaAutosize](https://mui.com/material-ui/react-textarea-autosize/) element is rendered.\n   * @default false\n   */\n  multiline: PropTypes.bool,\n  /**\n   * Name attribute of the `input` element.\n   */\n  name: PropTypes.string,\n  /**\n   * If `true`, the outline is notched to accommodate the label.\n   */\n  notched: PropTypes.bool,\n  /**\n   * Callback fired when the value is changed.\n   *\n   * @param {React.ChangeEvent<HTMLTextAreaElement | HTMLInputElement>} event The event source of the callback.\n   * You can pull out the new value by accessing `event.target.value` (string).\n   */\n  onChange: PropTypes.func,\n  /**\n   * The short hint displayed in the `input` before the user enters a value.\n   */\n  placeholder: PropTypes.string,\n  /**\n   * It prevents the user from changing the value of the field\n   * (not from interacting with the field).\n   */\n  readOnly: PropTypes.bool,\n  /**\n   * If `true`, the `input` element is required.\n   * The prop defaults to the value (`false`) inherited from the parent FormControl component.\n   */\n  required: PropTypes.bool,\n  /**\n   * Number of rows to display when multiline option is set to true.\n   */\n  rows: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n  /**\n   * The props used for each slot inside.\n   * @default {}\n   */\n  slotProps: PropTypes.shape({\n    input: PropTypes.object,\n    notchedOutline: PropTypes.oneOfType([PropTypes.func, PropTypes.object]),\n    root: PropTypes.object\n  }),\n  /**\n   * The components used for each slot inside.\n   * @default {}\n   */\n  slots: PropTypes.shape({\n    input: PropTypes.elementType,\n    notchedOutline: PropTypes.elementType,\n    root: PropTypes.elementType\n  }),\n  /**\n   * Start `InputAdornment` for this component.\n   */\n  startAdornment: PropTypes.node,\n  /**\n   * The system prop that allows defining system overrides as well as additional CSS styles.\n   */\n  sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object]),\n  /**\n   * Type of the `input` element. It should be [a valid HTML5 input type](https://developer.mozilla.org/en-US/docs/Web/HTML/Reference/Elements/input#input_types).\n   * @default 'text'\n   */\n  type: PropTypes.string,\n  /**\n   * The value of the `input` element, required for a controlled component.\n   */\n  value: PropTypes.any\n} : void 0;\nOutlinedInput.muiName = 'Input';\nexport default OutlinedInput;","'use client';\n\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport deepmerge from '@mui/utils/deepmerge';\nimport composeClasses from '@mui/utils/composeClasses';\nimport getReactElementRef from '@mui/utils/getReactElementRef';\nimport SelectInput from \"./SelectInput.js\";\nimport formControlState from \"../FormControl/formControlState.js\";\nimport useFormControl from \"../FormControl/useFormControl.js\";\nimport ArrowDropDownIcon from \"../internal/svg-icons/ArrowDropDown.js\";\nimport Input from \"../Input/index.js\";\nimport NativeSelectInput from \"../NativeSelect/NativeSelectInput.js\";\nimport FilledInput from \"../FilledInput/index.js\";\nimport OutlinedInput from \"../OutlinedInput/index.js\";\nimport { useDefaultProps } from \"../DefaultPropsProvider/index.js\";\nimport useForkRef from \"../utils/useForkRef.js\";\nimport { styled } from \"../zero-styled/index.js\";\nimport rootShouldForwardProp from \"../styles/rootShouldForwardProp.js\";\nimport { getSelectUtilityClasses } from \"./selectClasses.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nconst useUtilityClasses = ownerState => {\n  const {\n    classes\n  } = ownerState;\n  const slots = {\n    root: ['root']\n  };\n  const composedClasses = composeClasses(slots, getSelectUtilityClasses, classes);\n  return {\n    ...classes,\n    ...composedClasses\n  };\n};\nconst styledRootConfig = {\n  name: 'MuiSelect',\n  slot: 'Root',\n  shouldForwardProp: prop => rootShouldForwardProp(prop) && prop !== 'variant'\n};\nconst StyledInput = styled(Input, styledRootConfig)('');\nconst StyledOutlinedInput = styled(OutlinedInput, styledRootConfig)('');\nconst StyledFilledInput = styled(FilledInput, styledRootConfig)('');\nconst Select = /*#__PURE__*/React.forwardRef(function Select(inProps, ref) {\n  const props = useDefaultProps({\n    name: 'MuiSelect',\n    props: inProps\n  });\n  const {\n    autoWidth = false,\n    children,\n    classes: classesProp = {},\n    className,\n    defaultOpen = false,\n    displayEmpty = false,\n    IconComponent = ArrowDropDownIcon,\n    id,\n    input,\n    inputProps,\n    label,\n    labelId,\n    MenuProps,\n    multiple = false,\n    native = false,\n    onClose,\n    onOpen,\n    open,\n    renderValue,\n    SelectDisplayProps,\n    variant: variantProp = 'outlined',\n    ...other\n  } = props;\n  const inputComponent = native ? NativeSelectInput : SelectInput;\n  const muiFormControl = useFormControl();\n  const fcs = formControlState({\n    props,\n    muiFormControl,\n    states: ['variant', 'error']\n  });\n  const variant = fcs.variant || variantProp;\n  const ownerState = {\n    ...props,\n    variant,\n    classes: classesProp\n  };\n  const classes = useUtilityClasses(ownerState);\n  const {\n    root,\n    ...restOfClasses\n  } = classes;\n  const InputComponent = input || {\n    standard: /*#__PURE__*/_jsx(StyledInput, {\n      ownerState: ownerState\n    }),\n    outlined: /*#__PURE__*/_jsx(StyledOutlinedInput, {\n      label: label,\n      ownerState: ownerState\n    }),\n    filled: /*#__PURE__*/_jsx(StyledFilledInput, {\n      ownerState: ownerState\n    })\n  }[variant];\n  const inputComponentRef = useForkRef(ref, getReactElementRef(InputComponent));\n  return /*#__PURE__*/_jsx(React.Fragment, {\n    children: /*#__PURE__*/React.cloneElement(InputComponent, {\n      // Most of the logic is implemented in `SelectInput`.\n      // The `Select` component is a simple API wrapper to expose something better to play with.\n      inputComponent,\n      inputProps: {\n        children,\n        error: fcs.error,\n        IconComponent,\n        variant,\n        type: undefined,\n        // We render a select. We can ignore the type provided by the `Input`.\n        multiple,\n        ...(native ? {\n          id\n        } : {\n          autoWidth,\n          defaultOpen,\n          displayEmpty,\n          labelId,\n          MenuProps,\n          onClose,\n          onOpen,\n          open,\n          renderValue,\n          SelectDisplayProps: {\n            id,\n            ...SelectDisplayProps\n          }\n        }),\n        ...inputProps,\n        classes: inputProps ? deepmerge(restOfClasses, inputProps.classes) : restOfClasses,\n        ...(input ? input.props.inputProps : {})\n      },\n      ...((multiple && native || displayEmpty) && variant === 'outlined' ? {\n        notched: true\n      } : {}),\n      ref: inputComponentRef,\n      className: clsx(InputComponent.props.className, className, classes.root),\n      // If a custom input is provided via 'input' prop, do not allow 'variant' to be propagated to it's root element. See https://github.com/mui/material-ui/issues/33894.\n      ...(!input && {\n        variant\n      }),\n      ...other\n    })\n  });\n});\nprocess.env.NODE_ENV !== \"production\" ? Select.propTypes /* remove-proptypes */ = {\n  // ┌────────────────────────────── Warning ──────────────────────────────┐\n  // │ These PropTypes are generated from the TypeScript type definitions. │\n  // │    To update them, edit the d.ts file and run `pnpm proptypes`.     │\n  // └─────────────────────────────────────────────────────────────────────┘\n  /**\n   * If `true`, the width of the popover will automatically be set according to the items inside the\n   * menu, otherwise it will be at least the width of the select input.\n   * @default false\n   */\n  autoWidth: PropTypes.bool,\n  /**\n   * The option elements to populate the select with.\n   * Can be some `MenuItem` when `native` is false and `option` when `native` is true.\n   *\n   * ⚠️The `MenuItem` elements **must** be direct descendants when `native` is false.\n   */\n  children: PropTypes.node,\n  /**\n   * Override or extend the styles applied to the component.\n   * @default {}\n   */\n  classes: PropTypes.object,\n  /**\n   * @ignore\n   */\n  className: PropTypes.string,\n  /**\n   * If `true`, the component is initially open. Use when the component open state is not controlled (i.e. the `open` prop is not defined).\n   * You can only use it when the `native` prop is `false` (default).\n   * @default false\n   */\n  defaultOpen: PropTypes.bool,\n  /**\n   * The default value. Use when the component is not controlled.\n   */\n  defaultValue: PropTypes.any,\n  /**\n   * If `true`, a value is displayed even if no items are selected.\n   *\n   * In order to display a meaningful value, a function can be passed to the `renderValue` prop which\n   * returns the value to be displayed when no items are selected.\n   *\n   * ⚠️ When using this prop, make sure the label doesn't overlap with the empty displayed value.\n   * The label should either be hidden or forced to a shrunk state.\n   * @default false\n   */\n  displayEmpty: PropTypes.bool,\n  /**\n   * The icon that displays the arrow.\n   * @default ArrowDropDownIcon\n   */\n  IconComponent: PropTypes.elementType,\n  /**\n   * The `id` of the wrapper element or the `select` element when `native`.\n   */\n  id: PropTypes.string,\n  /**\n   * An `Input` element; does not have to be a material-ui specific `Input`.\n   */\n  input: PropTypes.element,\n  /**\n   * [Attributes](https://developer.mozilla.org/en-US/docs/Web/HTML/Reference/Elements/input#attributes) applied to the `input` element.\n   * When `native` is `true`, the attributes are applied on the `select` element.\n   */\n  inputProps: PropTypes.object,\n  /**\n   * See [OutlinedInput#label](https://mui.com/material-ui/api/outlined-input/#props)\n   */\n  label: PropTypes.node,\n  /**\n   * The ID of an element that acts as an additional label. The Select will\n   * be labelled by the additional label and the selected value.\n   */\n  labelId: PropTypes.string,\n  /**\n   * Props applied to the [`Menu`](https://mui.com/material-ui/api/menu/) element.\n   */\n  MenuProps: PropTypes.object,\n  /**\n   * If `true`, `value` must be an array and the menu will support multiple selections.\n   * @default false\n   */\n  multiple: PropTypes.bool,\n  /**\n   * If `true`, the component uses a native `select` element.\n   * @default false\n   */\n  native: PropTypes.bool,\n  /**\n   * Callback fired when a menu item is selected.\n   *\n   * @param {SelectChangeEvent<Value>} event The event source of the callback.\n   * You can pull out the new value by accessing `event.target.value` (any).\n   * **Warning**: This is a generic event, not a change event, unless the change event is caused by browser autofill.\n   * @param {object} [child] The react element that was selected when `native` is `false` (default).\n   */\n  onChange: PropTypes.func,\n  /**\n   * Callback fired when the component requests to be closed.\n   * Use it in either controlled (see the `open` prop), or uncontrolled mode (to detect when the Select collapses).\n   *\n   * @param {object} event The event source of the callback.\n   */\n  onClose: PropTypes.func,\n  /**\n   * Callback fired when the component requests to be opened.\n   * Use it in either controlled (see the `open` prop), or uncontrolled mode (to detect when the Select expands).\n   *\n   * @param {object} event The event source of the callback.\n   */\n  onOpen: PropTypes.func,\n  /**\n   * If `true`, the component is shown.\n   * You can only use it when the `native` prop is `false` (default).\n   */\n  open: PropTypes.bool,\n  /**\n   * Render the selected value.\n   * You can only use it when the `native` prop is `false` (default).\n   *\n   * @param {any} value The `value` provided to the component.\n   * @returns {ReactNode}\n   */\n  renderValue: PropTypes.func,\n  /**\n   * Props applied to the clickable div element.\n   */\n  SelectDisplayProps: PropTypes.object,\n  /**\n   * The system prop that allows defining system overrides as well as additional CSS styles.\n   */\n  sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object]),\n  /**\n   * The `input` value. Providing an empty string will select no options.\n   * Set to an empty string `''` if you don't want any of the available options to be selected.\n   *\n   * If the value is an object it must have reference equality with the option in order to be selected.\n   * If the value is not an object, the string representation must match with the string representation of the option in order to be selected.\n   */\n  value: PropTypes.oneOfType([PropTypes.oneOf(['']), PropTypes.any]),\n  /**\n   * The variant to use.\n   * @default 'outlined'\n   */\n  variant: PropTypes.oneOf(['filled', 'outlined', 'standard'])\n} : void 0;\nSelect.muiName = 'Select';\nexport default Select;","'use client';\n\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport composeClasses from '@mui/utils/composeClasses';\nimport rootShouldForwardProp from \"../styles/rootShouldForwardProp.js\";\nimport { styled } from \"../zero-styled/index.js\";\nimport memoTheme from \"../utils/memoTheme.js\";\nimport { useDefaultProps } from \"../DefaultPropsProvider/index.js\";\nimport ListContext from \"../List/ListContext.js\";\nimport ButtonBase from \"../ButtonBase/index.js\";\nimport useEnhancedEffect from \"../utils/useEnhancedEffect.js\";\nimport useForkRef from \"../utils/useForkRef.js\";\nimport { dividerClasses } from \"../Divider/index.js\";\nimport { listItemIconClasses } from \"../ListItemIcon/index.js\";\nimport { listItemTextClasses } from \"../ListItemText/index.js\";\nimport menuItemClasses, { getMenuItemUtilityClass } from \"./menuItemClasses.js\";\nimport { useSelectFocusSource } from \"../Select/index.js\";\n\n/**\n * If autoFocus is an object, it will attempt to call `element.focus()` with the options argument.\n * If the browser doesn't support the options argument, it will fall back to a simple `element.focus()` call.\n */\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nfunction focusWithVisible(element, focusSource) {\n  if (focusSource == null) {\n    element.focus();\n    return;\n  }\n  try {\n    element.focus({\n      focusVisible: focusSource === 'keyboard'\n    });\n  } catch (error) {\n    // If the browser doesn't support the focus options argument, fall back to a simple focus call.\n    element.focus();\n  }\n}\nexport const overridesResolver = (props, styles) => {\n  const {\n    ownerState\n  } = props;\n  return [styles.root, ownerState.dense && styles.dense, ownerState.divider && styles.divider, !ownerState.disableGutters && styles.gutters];\n};\nconst useUtilityClasses = ownerState => {\n  const {\n    disabled,\n    dense,\n    divider,\n    disableGutters,\n    selected,\n    classes\n  } = ownerState;\n  const slots = {\n    root: ['root', dense && 'dense', disabled && 'disabled', !disableGutters && 'gutters', divider && 'divider', selected && 'selected']\n  };\n  const composedClasses = composeClasses(slots, getMenuItemUtilityClass, classes);\n  return {\n    ...classes,\n    ...composedClasses\n  };\n};\nconst MenuItemRoot = styled(ButtonBase, {\n  shouldForwardProp: prop => rootShouldForwardProp(prop) || prop === 'classes',\n  name: 'MuiMenuItem',\n  slot: 'Root',\n  overridesResolver\n})(memoTheme(({\n  theme\n}) => ({\n  ...theme.typography.body1,\n  display: 'flex',\n  justifyContent: 'flex-start',\n  alignItems: 'center',\n  position: 'relative',\n  textDecoration: 'none',\n  minHeight: 48,\n  paddingTop: 6,\n  paddingBottom: 6,\n  boxSizing: 'border-box',\n  whiteSpace: 'nowrap',\n  '&:hover': {\n    textDecoration: 'none',\n    backgroundColor: (theme.vars || theme).palette.action.hover,\n    // Reset on touch devices, it doesn't add specificity\n    '@media (hover: none)': {\n      backgroundColor: 'transparent'\n    }\n  },\n  [`&.${menuItemClasses.selected}`]: {\n    backgroundColor: theme.alpha((theme.vars || theme).palette.primary.main, (theme.vars || theme).palette.action.selectedOpacity),\n    [`&.${menuItemClasses.focusVisible}`]: {\n      backgroundColor: theme.alpha((theme.vars || theme).palette.primary.main, `${(theme.vars || theme).palette.action.selectedOpacity} + ${(theme.vars || theme).palette.action.focusOpacity}`)\n    }\n  },\n  [`&.${menuItemClasses.selected}:hover`]: {\n    backgroundColor: theme.alpha((theme.vars || theme).palette.primary.main, `${(theme.vars || theme).palette.action.selectedOpacity} + ${(theme.vars || theme).palette.action.hoverOpacity}`),\n    // Reset on touch devices, it doesn't add specificity\n    '@media (hover: none)': {\n      backgroundColor: theme.alpha((theme.vars || theme).palette.primary.main, (theme.vars || theme).palette.action.selectedOpacity)\n    }\n  },\n  [`&.${menuItemClasses.focusVisible}`]: {\n    backgroundColor: (theme.vars || theme).palette.action.focus\n  },\n  [`&.${menuItemClasses.disabled}`]: {\n    opacity: (theme.vars || theme).palette.action.disabledOpacity\n  },\n  [`& + .${dividerClasses.root}`]: {\n    marginTop: theme.spacing(1),\n    marginBottom: theme.spacing(1)\n  },\n  [`& + .${dividerClasses.inset}`]: {\n    marginLeft: 52\n  },\n  [`& .${listItemTextClasses.root}`]: {\n    marginTop: 0,\n    marginBottom: 0\n  },\n  [`& .${listItemTextClasses.inset}`]: {\n    paddingLeft: 36\n  },\n  [`& .${listItemIconClasses.root}`]: {\n    minWidth: 36\n  },\n  variants: [{\n    props: ({\n      ownerState\n    }) => !ownerState.disableGutters,\n    style: {\n      paddingLeft: 16,\n      paddingRight: 16\n    }\n  }, {\n    props: ({\n      ownerState\n    }) => ownerState.divider,\n    style: {\n      borderBottom: `1px solid ${(theme.vars || theme).palette.divider}`,\n      backgroundClip: 'padding-box'\n    }\n  }, {\n    props: ({\n      ownerState\n    }) => !ownerState.dense,\n    style: {\n      [theme.breakpoints.up('sm')]: {\n        minHeight: 'auto'\n      }\n    }\n  }, {\n    props: ({\n      ownerState\n    }) => ownerState.dense,\n    style: {\n      minHeight: 32,\n      // https://m2.material.io/components/menus#specs > Dense\n      paddingTop: 4,\n      paddingBottom: 4,\n      ...theme.typography.body2,\n      [`& .${listItemIconClasses.root} svg`]: {\n        fontSize: '1.25rem'\n      }\n    }\n  }]\n})));\nconst MenuItem = /*#__PURE__*/React.forwardRef(function MenuItem(inProps, ref) {\n  const props = useDefaultProps({\n    props: inProps,\n    name: 'MuiMenuItem'\n  });\n  const {\n    autoFocus = false,\n    component = 'li',\n    dense = false,\n    divider = false,\n    disableGutters = false,\n    focusVisibleClassName,\n    role = 'menuitem',\n    tabIndex: tabIndexProp,\n    className,\n    ...other\n  } = props;\n  const focusSource = useSelectFocusSource();\n  const context = React.useContext(ListContext);\n  const childContext = React.useMemo(() => ({\n    dense: dense || context.dense || false,\n    disableGutters\n  }), [context.dense, dense, disableGutters]);\n  const menuItemRef = React.useRef(null);\n  useEnhancedEffect(() => {\n    if (autoFocus) {\n      if (menuItemRef.current) {\n        focusWithVisible(menuItemRef.current, focusSource);\n      } else if (process.env.NODE_ENV !== 'production') {\n        console.error('MUI: Unable to set focus to a MenuItem whose component has not been rendered.');\n      }\n    }\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [autoFocus]);\n  const ownerState = {\n    ...props,\n    dense: childContext.dense,\n    divider,\n    disableGutters\n  };\n  const classes = useUtilityClasses(props);\n  const handleRef = useForkRef(menuItemRef, ref);\n  let tabIndex;\n  if (!props.disabled) {\n    tabIndex = tabIndexProp !== undefined ? tabIndexProp : -1;\n  }\n  return /*#__PURE__*/_jsx(ListContext.Provider, {\n    value: childContext,\n    children: /*#__PURE__*/_jsx(MenuItemRoot, {\n      ref: handleRef,\n      role: role,\n      tabIndex: tabIndex,\n      component: component,\n      focusVisibleClassName: clsx(classes.focusVisible, focusVisibleClassName),\n      className: clsx(classes.root, className),\n      ...other,\n      ownerState: ownerState,\n      classes: classes\n    })\n  });\n});\nprocess.env.NODE_ENV !== \"production\" ? MenuItem.propTypes /* remove-proptypes */ = {\n  // ┌────────────────────────────── Warning ──────────────────────────────┐\n  // │ These PropTypes are generated from the TypeScript type definitions. │\n  // │    To update them, edit the d.ts file and run `pnpm proptypes`.     │\n  // └─────────────────────────────────────────────────────────────────────┘\n  /**\n   * If `true`, the list item is focused during the first mount.\n   * Focus will also be triggered if the value changes from false to true.\n   * @default false\n   */\n  autoFocus: PropTypes.bool,\n  /**\n   * The content of the component.\n   */\n  children: PropTypes.node,\n  /**\n   * Override or extend the styles applied to the component.\n   */\n  classes: PropTypes.object,\n  /**\n   * @ignore\n   */\n  className: PropTypes.string,\n  /**\n   * The component used for the root node.\n   * Either a string to use a HTML element or a component.\n   */\n  component: PropTypes.elementType,\n  /**\n   * If `true`, compact vertical padding designed for keyboard and mouse input is used.\n   * The prop defaults to the value inherited from the parent Menu component.\n   * @default false\n   */\n  dense: PropTypes.bool,\n  /**\n   * @ignore\n   */\n  disabled: PropTypes.bool,\n  /**\n   * If `true`, the left and right padding is removed.\n   * @default false\n   */\n  disableGutters: PropTypes.bool,\n  /**\n   * If `true`, a 1px light border is added to the bottom of the menu item.\n   * @default false\n   */\n  divider: PropTypes.bool,\n  /**\n   * This prop can help identify which element has keyboard focus.\n   * The class name will be applied when the element gains the focus through keyboard interaction.\n   * It's a polyfill for the [CSS :focus-visible selector](https://drafts.csswg.org/selectors-4/#the-focus-visible-pseudo).\n   * The rationale for using this feature [is explained here](https://github.com/WICG/focus-visible/blob/HEAD/explainer.md).\n   * A [polyfill can be used](https://github.com/WICG/focus-visible) to apply a `focus-visible` class to other components\n   * if needed.\n   */\n  focusVisibleClassName: PropTypes.string,\n  /**\n   * @ignore\n   */\n  role: PropTypes.string,\n  /**\n   * If `true`, the component is selected.\n   * @default false\n   */\n  selected: PropTypes.bool,\n  /**\n   * The system prop that allows defining system overrides as well as additional CSS styles.\n   */\n  sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object]),\n  /**\n   * @default 0\n   */\n  tabIndex: PropTypes.number\n} : void 0;\nexport default MenuItem;","'use client';\n\nimport createSvgIcon from \"../../utils/createSvgIcon.js\";\n\n/**\n * @ignore - internal component.\n */\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport default createSvgIcon(/*#__PURE__*/_jsx(\"path\", {\n  d: \"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8-3.58 8-8 8z\"\n}), 'RadioButtonUnchecked');","'use client';\n\nimport createSvgIcon from \"../../utils/createSvgIcon.js\";\n\n/**\n * @ignore - internal component.\n */\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport default createSvgIcon(/*#__PURE__*/_jsx(\"path\", {\n  d: \"M8.465 8.465C9.37 7.56 10.62 7 12 7C14.76 7 17 9.24 17 12C17 13.38 16.44 14.63 15.535 15.535C14.63 16.44 13.38 17 12 17C9.24 17 7 14.76 7 12C7 10.62 7.56 9.37 8.465 8.465Z\"\n}), 'RadioButtonChecked');","'use client';\n\nimport PropTypes from 'prop-types';\nimport RadioButtonUncheckedIcon from \"../internal/svg-icons/RadioButtonUnchecked.js\";\nimport RadioButtonCheckedIcon from \"../internal/svg-icons/RadioButtonChecked.js\";\nimport rootShouldForwardProp from \"../styles/rootShouldForwardProp.js\";\nimport { styled } from \"../zero-styled/index.js\";\nimport memoTheme from \"../utils/memoTheme.js\";\nimport { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nconst RadioButtonIconRoot = styled('span', {\n  name: 'MuiRadioButtonIcon',\n  shouldForwardProp: rootShouldForwardProp\n})({\n  position: 'relative',\n  display: 'flex'\n});\nconst RadioButtonIconBackground = styled(RadioButtonUncheckedIcon, {\n  name: 'MuiRadioButtonIcon'\n})({\n  // Scale applied to prevent dot misalignment in Safari\n  transform: 'scale(1)'\n});\nconst RadioButtonIconDot = styled(RadioButtonCheckedIcon, {\n  name: 'MuiRadioButtonIcon'\n})(memoTheme(({\n  theme\n}) => ({\n  left: 0,\n  position: 'absolute',\n  transform: 'scale(0)',\n  transition: theme.transitions.create('transform', {\n    easing: theme.transitions.easing.easeIn,\n    duration: theme.transitions.duration.shortest\n  }),\n  variants: [{\n    props: {\n      checked: true\n    },\n    style: {\n      transform: 'scale(1)',\n      transition: theme.transitions.create('transform', {\n        easing: theme.transitions.easing.easeOut,\n        duration: theme.transitions.duration.shortest\n      })\n    }\n  }]\n})));\n\n/**\n * @ignore - internal component.\n */\nfunction RadioButtonIcon(props) {\n  const {\n    checked = false,\n    classes = {},\n    fontSize\n  } = props;\n  const ownerState = {\n    ...props,\n    checked\n  };\n  return /*#__PURE__*/_jsxs(RadioButtonIconRoot, {\n    className: classes.root,\n    ownerState: ownerState,\n    children: [/*#__PURE__*/_jsx(RadioButtonIconBackground, {\n      fontSize: fontSize,\n      className: classes.background,\n      ownerState: ownerState\n    }), /*#__PURE__*/_jsx(RadioButtonIconDot, {\n      fontSize: fontSize,\n      className: classes.dot,\n      ownerState: ownerState\n    })]\n  });\n}\nprocess.env.NODE_ENV !== \"production\" ? RadioButtonIcon.propTypes /* remove-proptypes */ = {\n  /**\n   * If `true`, the component is checked.\n   */\n  checked: PropTypes.bool,\n  /**\n   * Override or extend the styles applied to the component.\n   */\n  classes: PropTypes.object,\n  /**\n   * The size of the component.\n   * `small` is equivalent to the dense radio styling.\n   */\n  fontSize: PropTypes.oneOf(['small', 'medium'])\n} : void 0;\nexport default RadioButtonIcon;","'use client';\n\nimport * as React from 'react';\n/**\n * @ignore - internal component.\n */\nconst RadioGroupContext = /*#__PURE__*/React.createContext(undefined);\nif (process.env.NODE_ENV !== 'production') {\n  RadioGroupContext.displayName = 'RadioGroupContext';\n}\nexport default RadioGroupContext;","'use client';\n\nimport * as React from 'react';\nimport RadioGroupContext from \"./RadioGroupContext.js\";\nexport default function useRadioGroup() {\n  return React.useContext(RadioGroupContext);\n}","import generateUtilityClasses from '@mui/utils/generateUtilityClasses';\nimport generateUtilityClass from '@mui/utils/generateUtilityClass';\nexport function getRadioUtilityClass(slot) {\n  return generateUtilityClass('MuiRadio', slot);\n}\nconst radioClasses = generateUtilityClasses('MuiRadio', ['root', 'checked', 'disabled', 'colorPrimary', 'colorSecondary', 'sizeSmall']);\nexport default radioClasses;","'use client';\n\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport refType from '@mui/utils/refType';\nimport composeClasses from '@mui/utils/composeClasses';\nimport SwitchBase from \"../internal/SwitchBase.js\";\nimport RadioButtonIcon from \"./RadioButtonIcon.js\";\nimport capitalize from \"../utils/capitalize.js\";\nimport createChainedFunction from \"../utils/createChainedFunction.js\";\nimport useFormControl from \"../FormControl/useFormControl.js\";\nimport useRadioGroup from \"../RadioGroup/useRadioGroup.js\";\nimport radioClasses, { getRadioUtilityClass } from \"./radioClasses.js\";\nimport rootShouldForwardProp from \"../styles/rootShouldForwardProp.js\";\nimport { styled } from \"../zero-styled/index.js\";\nimport memoTheme from \"../utils/memoTheme.js\";\nimport createSimplePaletteValueFilter from \"../utils/createSimplePaletteValueFilter.js\";\nimport useSlot from \"../utils/useSlot.js\";\nimport { useDefaultProps } from \"../DefaultPropsProvider/index.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nconst useUtilityClasses = ownerState => {\n  const {\n    classes,\n    color,\n    size\n  } = ownerState;\n  const slots = {\n    root: ['root', `color${capitalize(color)}`, size !== 'medium' && `size${capitalize(size)}`]\n  };\n  return {\n    ...classes,\n    ...composeClasses(slots, getRadioUtilityClass, classes)\n  };\n};\nconst RadioRoot = styled(SwitchBase, {\n  shouldForwardProp: prop => rootShouldForwardProp(prop) || prop === 'classes',\n  name: 'MuiRadio',\n  slot: 'Root',\n  overridesResolver: (props, styles) => {\n    const {\n      ownerState\n    } = props;\n    return [styles.root, ownerState.size !== 'medium' && styles[`size${capitalize(ownerState.size)}`], styles[`color${capitalize(ownerState.color)}`]];\n  }\n})(memoTheme(({\n  theme\n}) => ({\n  color: (theme.vars || theme).palette.text.secondary,\n  [`&.${radioClasses.disabled}`]: {\n    color: (theme.vars || theme).palette.action.disabled\n  },\n  variants: [{\n    props: {\n      color: 'default',\n      disabled: false,\n      disableRipple: false\n    },\n    style: {\n      '&:hover': {\n        backgroundColor: theme.alpha((theme.vars || theme).palette.action.active, (theme.vars || theme).palette.action.hoverOpacity)\n      }\n    }\n  }, ...Object.entries(theme.palette).filter(createSimplePaletteValueFilter()).map(([color]) => ({\n    props: {\n      color,\n      disabled: false,\n      disableRipple: false\n    },\n    style: {\n      '&:hover': {\n        backgroundColor: theme.alpha((theme.vars || theme).palette[color].main, (theme.vars || theme).palette.action.hoverOpacity)\n      }\n    }\n  })), ...Object.entries(theme.palette).filter(createSimplePaletteValueFilter()).map(([color]) => ({\n    props: {\n      color,\n      disabled: false\n    },\n    style: {\n      [`&.${radioClasses.checked}`]: {\n        color: (theme.vars || theme).palette[color].main\n      }\n    }\n  })), {\n    // Should be last to override other colors\n    props: {\n      disableRipple: false\n    },\n    style: {\n      // Reset on touch devices, it doesn't add specificity\n      '&:hover': {\n        '@media (hover: none)': {\n          backgroundColor: 'transparent'\n        }\n      }\n    }\n  }]\n})));\nfunction areEqualValues(a, b) {\n  if (typeof b === 'object' && b !== null) {\n    return a === b;\n  }\n\n  // The value could be a number, the DOM will stringify it anyway.\n  return String(a) === String(b);\n}\nconst defaultCheckedIcon = /*#__PURE__*/_jsx(RadioButtonIcon, {\n  checked: true\n});\nconst defaultIcon = /*#__PURE__*/_jsx(RadioButtonIcon, {});\nconst Radio = /*#__PURE__*/React.forwardRef(function Radio(inProps, ref) {\n  const props = useDefaultProps({\n    props: inProps,\n    name: 'MuiRadio'\n  });\n  const {\n    checked: checkedProp,\n    checkedIcon = defaultCheckedIcon,\n    color = 'primary',\n    icon = defaultIcon,\n    name: nameProp,\n    onChange: onChangeProp,\n    size = 'medium',\n    className,\n    disabled: disabledProp,\n    disableRipple = false,\n    slots = {},\n    slotProps = {},\n    inputProps,\n    ...other\n  } = props;\n  const muiFormControl = useFormControl();\n  let disabled = disabledProp;\n  if (muiFormControl) {\n    if (typeof disabled === 'undefined') {\n      disabled = muiFormControl.disabled;\n    }\n  }\n  disabled ??= false;\n  const ownerState = {\n    ...props,\n    disabled,\n    disableRipple,\n    color,\n    size\n  };\n  const classes = useUtilityClasses(ownerState);\n  const radioGroup = useRadioGroup();\n  let checked = checkedProp;\n  const onChange = createChainedFunction(onChangeProp, radioGroup && radioGroup.onChange);\n  let name = nameProp;\n  if (radioGroup) {\n    if (typeof checked === 'undefined') {\n      checked = areEqualValues(radioGroup.value, props.value);\n    }\n    if (typeof name === 'undefined') {\n      name = radioGroup.name;\n    }\n  }\n  const externalInputProps = slotProps.input ?? inputProps;\n  const [RootSlot, rootSlotProps] = useSlot('root', {\n    ref,\n    elementType: RadioRoot,\n    className: clsx(classes.root, className),\n    shouldForwardComponentProp: true,\n    externalForwardedProps: {\n      slots,\n      slotProps,\n      ...other\n    },\n    getSlotProps: handlers => ({\n      ...handlers,\n      onChange: (event, ...args) => {\n        handlers.onChange?.(event, ...args);\n        onChange(event, ...args);\n      }\n    }),\n    ownerState,\n    additionalProps: {\n      type: 'radio',\n      icon: /*#__PURE__*/React.cloneElement(icon, {\n        fontSize: icon.props.fontSize ?? size\n      }),\n      checkedIcon: /*#__PURE__*/React.cloneElement(checkedIcon, {\n        fontSize: checkedIcon.props.fontSize ?? size\n      }),\n      disabled,\n      name,\n      checked,\n      slots,\n      slotProps: {\n        // Do not forward `slotProps.root` again because it's already handled by the `RootSlot` in this file.\n        input: typeof externalInputProps === 'function' ? externalInputProps(ownerState) : externalInputProps\n      }\n    }\n  });\n  return /*#__PURE__*/_jsx(RootSlot, {\n    ...rootSlotProps,\n    classes: classes\n  });\n});\nprocess.env.NODE_ENV !== \"production\" ? Radio.propTypes /* remove-proptypes */ = {\n  // ┌────────────────────────────── Warning ──────────────────────────────┐\n  // │ These PropTypes are generated from the TypeScript type definitions. │\n  // │    To update them, edit the d.ts file and run `pnpm proptypes`.     │\n  // └─────────────────────────────────────────────────────────────────────┘\n  /**\n   * If `true`, the component is checked.\n   */\n  checked: PropTypes.bool,\n  /**\n   * The icon to display when the component is checked.\n   * @default <RadioButtonIcon checked />\n   */\n  checkedIcon: PropTypes.node,\n  /**\n   * Override or extend the styles applied to the component.\n   */\n  classes: PropTypes.object,\n  /**\n   * @ignore\n   */\n  className: PropTypes.string,\n  /**\n   * The color of the component.\n   * It supports both default and custom theme colors, which can be added as shown in the\n   * [palette customization guide](https://mui.com/material-ui/customization/palette/#custom-colors).\n   * @default 'primary'\n   */\n  color: PropTypes /* @typescript-to-proptypes-ignore */.oneOfType([PropTypes.oneOf(['default', 'primary', 'secondary', 'error', 'info', 'success', 'warning']), PropTypes.string]),\n  /**\n   * If `true`, the component is disabled.\n   */\n  disabled: PropTypes.bool,\n  /**\n   * If `true`, the ripple effect is disabled.\n   * @default false\n   */\n  disableRipple: PropTypes.bool,\n  /**\n   * The icon to display when the component is unchecked.\n   * @default <RadioButtonIcon />\n   */\n  icon: PropTypes.node,\n  /**\n   * The id of the `input` element.\n   */\n  id: PropTypes.string,\n  /**\n   * [Attributes](https://developer.mozilla.org/en-US/docs/Web/HTML/Reference/Elements/input#attributes) applied to the `input` element.\n   * @deprecated Use `slotProps.input` instead. This prop will be removed in a future major release. See [Migrating from deprecated APIs](/material-ui/migration/migrating-from-deprecated-apis/) for more details.\n   */\n  inputProps: PropTypes.object,\n  /**\n   * Pass a ref to the `input` element.\n   * @deprecated Use `slotProps.input.ref` instead. This prop will be removed in a future major release. See [Migrating from deprecated APIs](/material-ui/migration/migrating-from-deprecated-apis/) for more details.\n   */\n  inputRef: refType,\n  /**\n   * Name attribute of the `input` element.\n   */\n  name: PropTypes.string,\n  /**\n   * Callback fired when the state is changed.\n   *\n   * @param {React.ChangeEvent<HTMLInputElement>} event The event source of the callback.\n   * You can pull out the new value by accessing `event.target.value` (string).\n   * You can pull out the new checked state by accessing `event.target.checked` (boolean).\n   */\n  onChange: PropTypes.func,\n  /**\n   * If `true`, the `input` element is required.\n   * @default false\n   */\n  required: PropTypes.bool,\n  /**\n   * The size of the component.\n   * `small` is equivalent to the dense radio styling.\n   * @default 'medium'\n   */\n  size: PropTypes /* @typescript-to-proptypes-ignore */.oneOfType([PropTypes.oneOf(['medium', 'small']), PropTypes.string]),\n  /**\n   * The props used for each slot inside.\n   * @default {}\n   */\n  slotProps: PropTypes.shape({\n    input: PropTypes.oneOfType([PropTypes.func, PropTypes.object]),\n    root: PropTypes.oneOfType([PropTypes.func, PropTypes.object])\n  }),\n  /**\n   * The components used for each slot inside.\n   * @default {}\n   */\n  slots: PropTypes.shape({\n    input: PropTypes.elementType,\n    root: PropTypes.elementType\n  }),\n  /**\n   * The system prop that allows defining system overrides as well as additional CSS styles.\n   */\n  sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object]),\n  /**\n   * The value of the component. The DOM API casts this to a string.\n   */\n  value: PropTypes.any\n} : void 0;\nexport default Radio;","import generateUtilityClasses from '@mui/utils/generateUtilityClasses';\nimport generateUtilityClass from '@mui/utils/generateUtilityClass';\nexport function getRadioGroupUtilityClass(slot) {\n  return generateUtilityClass('MuiRadioGroup', slot);\n}\nconst radioGroupClasses = generateUtilityClasses('MuiRadioGroup', ['root', 'row', 'error']);\nexport default radioGroupClasses;","'use client';\n\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport composeClasses from '@mui/utils/composeClasses';\nimport FormGroup from \"../FormGroup/index.js\";\nimport { getRadioGroupUtilityClass } from \"./radioGroupClasses.js\";\nimport useForkRef from \"../utils/useForkRef.js\";\nimport useControlled from \"../utils/useControlled.js\";\nimport RadioGroupContext from \"./RadioGroupContext.js\";\nimport useId from \"../utils/useId.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nconst useUtilityClasses = props => {\n  const {\n    classes,\n    row,\n    error\n  } = props;\n  const slots = {\n    root: ['root', row && 'row', error && 'error']\n  };\n  return composeClasses(slots, getRadioGroupUtilityClass, classes);\n};\nconst RadioGroup = /*#__PURE__*/React.forwardRef(function RadioGroup(props, ref) {\n  const {\n    // private\n    // eslint-disable-next-line react/prop-types\n    actions,\n    children,\n    className,\n    defaultValue,\n    name: nameProp,\n    onChange,\n    value: valueProp,\n    ...other\n  } = props;\n  const rootRef = React.useRef(null);\n  const classes = useUtilityClasses(props);\n  const [value, setValueState] = useControlled({\n    controlled: valueProp,\n    default: defaultValue,\n    name: 'RadioGroup'\n  });\n  React.useImperativeHandle(actions, () => ({\n    focus: () => {\n      let input = rootRef.current.querySelector('input:not(:disabled):checked');\n      if (!input) {\n        input = rootRef.current.querySelector('input:not(:disabled)');\n      }\n      if (input) {\n        input.focus();\n      }\n    }\n  }), []);\n  const handleRef = useForkRef(ref, rootRef);\n  const name = useId(nameProp);\n  const contextValue = React.useMemo(() => ({\n    name,\n    onChange(event) {\n      setValueState(event.target.value);\n      if (onChange) {\n        onChange(event, event.target.value);\n      }\n    },\n    value\n  }), [name, onChange, setValueState, value]);\n  return /*#__PURE__*/_jsx(RadioGroupContext.Provider, {\n    value: contextValue,\n    children: /*#__PURE__*/_jsx(FormGroup, {\n      role: \"radiogroup\",\n      ref: handleRef,\n      className: clsx(classes.root, className),\n      ...other,\n      children: children\n    })\n  });\n});\nprocess.env.NODE_ENV !== \"production\" ? RadioGroup.propTypes /* remove-proptypes */ = {\n  // ┌────────────────────────────── Warning ──────────────────────────────┐\n  // │ These PropTypes are generated from the TypeScript type definitions. │\n  // │    To update them, edit the d.ts file and run `pnpm proptypes`.     │\n  // └─────────────────────────────────────────────────────────────────────┘\n  /**\n   * The content of the component.\n   */\n  children: PropTypes.node,\n  /**\n   * @ignore\n   */\n  className: PropTypes.string,\n  /**\n   * The default value. Use when the component is not controlled.\n   */\n  defaultValue: PropTypes.any,\n  /**\n   * The name used to reference the value of the control.\n   * If you don't provide this prop, it falls back to a randomly generated name.\n   */\n  name: PropTypes.string,\n  /**\n   * Callback fired when a radio button is selected.\n   *\n   * @param {React.ChangeEvent<HTMLInputElement>} event The event source of the callback.\n   * @param {string} value The value of the selected radio button.\n   * You can pull out the new value by accessing `event.target.value` (string).\n   */\n  onChange: PropTypes.func,\n  /**\n   * Value of the selected radio button. The DOM API casts this to a string.\n   */\n  value: PropTypes.any\n} : void 0;\nexport default RadioGroup;","const visuallyHidden = {\n  border: 0,\n  clip: 'rect(0 0 0 0)',\n  height: '1px',\n  margin: '-1px',\n  overflow: 'hidden',\n  padding: 0,\n  position: 'absolute',\n  whiteSpace: 'nowrap',\n  width: '1px'\n};\nexport default visuallyHidden;","function areArraysEqual(array1, array2, itemComparer = (a, b) => a === b) {\n  return array1.length === array2.length && array1.every((value, index) => itemComparer(value, array2[index]));\n}\nexport default areArraysEqual;","'use client';\n\nimport * as React from 'react';\nimport ownerDocument from '@mui/utils/ownerDocument';\nimport useControlled from '@mui/utils/useControlled';\nimport useEnhancedEffect from '@mui/utils/useEnhancedEffect';\nimport useEventCallback from '@mui/utils/useEventCallback';\nimport useForkRef from '@mui/utils/useForkRef';\nimport isFocusVisible from '@mui/utils/isFocusVisible';\nimport visuallyHidden from '@mui/utils/visuallyHidden';\nimport clamp from '@mui/utils/clamp';\nimport extractEventHandlers from '@mui/utils/extractEventHandlers';\nimport areArraysEqual from \"../utils/areArraysEqual.js\";\nconst INTENTIONAL_DRAG_COUNT_THRESHOLD = 2;\nfunction getNewValue(currentValue, step, direction, min, max) {\n  return direction === 1 ? Math.min(currentValue + step, max) : Math.max(currentValue - step, min);\n}\nfunction asc(a, b) {\n  return a - b;\n}\nfunction findClosest(values, currentValue) {\n  const {\n    index: closestIndex\n  } = values.reduce((acc, value, index) => {\n    const distance = Math.abs(currentValue - value);\n    if (acc === null || distance < acc.distance || distance === acc.distance) {\n      return {\n        distance,\n        index\n      };\n    }\n    return acc;\n  }, null) ?? {};\n  return closestIndex;\n}\nfunction trackFinger(event, touchId) {\n  // The event is TouchEvent\n  if (touchId.current !== undefined && event.changedTouches) {\n    const touchEvent = event;\n    for (let i = 0; i < touchEvent.changedTouches.length; i += 1) {\n      const touch = touchEvent.changedTouches[i];\n      if (touch.identifier === touchId.current) {\n        return {\n          x: touch.clientX,\n          y: touch.clientY\n        };\n      }\n    }\n    return false;\n  }\n\n  // The event is MouseEvent\n  return {\n    x: event.clientX,\n    y: event.clientY\n  };\n}\nexport function valueToPercent(value, min, max) {\n  return (value - min) * 100 / (max - min);\n}\nfunction percentToValue(percent, min, max) {\n  return (max - min) * percent + min;\n}\nfunction getDecimalPrecision(num) {\n  // This handles the case when num is very small (0.00000001), js will turn this into 1e-8.\n  // When num is bigger than 1 or less than -1 it won't get converted to this notation so it's fine.\n  if (Math.abs(num) < 1) {\n    const parts = num.toExponential().split('e-');\n    const matissaDecimalPart = parts[0].split('.')[1];\n    return (matissaDecimalPart ? matissaDecimalPart.length : 0) + parseInt(parts[1], 10);\n  }\n  const decimalPart = num.toString().split('.')[1];\n  return decimalPart ? decimalPart.length : 0;\n}\nfunction roundValueToStep(value, step, min) {\n  const nearest = Math.round((value - min) / step) * step + min;\n  return Number(nearest.toFixed(getDecimalPrecision(step)));\n}\nfunction setValueIndex({\n  values,\n  newValue,\n  index\n}) {\n  const output = values.slice();\n  output[index] = newValue;\n  return output.sort(asc);\n}\nfunction focusThumb({\n  sliderRef,\n  activeIndex,\n  setActive\n}) {\n  const doc = ownerDocument(sliderRef.current);\n  if (!sliderRef.current?.contains(doc.activeElement) || Number(doc?.activeElement?.getAttribute('data-index')) !== activeIndex) {\n    sliderRef.current?.querySelector(`[type=\"range\"][data-index=\"${activeIndex}\"]`).focus();\n  }\n  if (setActive) {\n    setActive(activeIndex);\n  }\n}\nfunction areValuesEqual(newValue, oldValue) {\n  if (typeof newValue === 'number' && typeof oldValue === 'number') {\n    return newValue === oldValue;\n  }\n  if (typeof newValue === 'object' && typeof oldValue === 'object') {\n    return areArraysEqual(newValue, oldValue);\n  }\n  return false;\n}\nconst axisProps = {\n  horizontal: {\n    offset: percent => ({\n      left: `${percent}%`\n    }),\n    leap: percent => ({\n      width: `${percent}%`\n    })\n  },\n  'horizontal-reverse': {\n    offset: percent => ({\n      right: `${percent}%`\n    }),\n    leap: percent => ({\n      width: `${percent}%`\n    })\n  },\n  vertical: {\n    offset: percent => ({\n      bottom: `${percent}%`\n    }),\n    leap: percent => ({\n      height: `${percent}%`\n    })\n  }\n};\nexport const Identity = x => x;\n\n// TODO: remove support for Safari < 13.\n// https://caniuse.com/#search=touch-action\n//\n// Safari, on iOS, supports touch action since v13.\n// Over 80% of the iOS phones are compatible\n// in August 2020.\n// Utilizing the CSS.supports method to check if touch-action is supported.\n// Since CSS.supports is supported on all but Edge@12 and IE and touch-action\n// is supported on both Edge@12 and IE if CSS.supports is not available that means that\n// touch-action will be supported\nlet cachedSupportsTouchActionNone;\nfunction doesSupportTouchActionNone() {\n  if (cachedSupportsTouchActionNone === undefined) {\n    if (typeof CSS !== 'undefined' && typeof CSS.supports === 'function') {\n      cachedSupportsTouchActionNone = CSS.supports('touch-action', 'none');\n    } else {\n      cachedSupportsTouchActionNone = true;\n    }\n  }\n  return cachedSupportsTouchActionNone;\n}\nexport function useSlider(parameters) {\n  const {\n    'aria-labelledby': ariaLabelledby,\n    defaultValue,\n    disabled = false,\n    disableSwap = false,\n    isRtl = false,\n    marks: marksProp = false,\n    max = 100,\n    min = 0,\n    name,\n    onChange,\n    onChangeCommitted,\n    orientation = 'horizontal',\n    rootRef: ref,\n    scale = Identity,\n    step = 1,\n    shiftStep = 10,\n    tabIndex,\n    value: valueProp\n  } = parameters;\n  const touchId = React.useRef(undefined);\n  // We can't use the :active browser pseudo-classes.\n  // - The active state isn't triggered when clicking on the rail.\n  // - The active state isn't transferred when inversing a range slider.\n  const [active, setActive] = React.useState(-1);\n  const [open, setOpen] = React.useState(-1);\n  const [dragging, setDragging] = React.useState(false);\n  const moveCount = React.useRef(0);\n  // lastChangedValue is updated whenever onChange is triggered.\n  const lastChangedValue = React.useRef(null);\n  const [valueDerived, setValueState] = useControlled({\n    controlled: valueProp,\n    default: defaultValue ?? min,\n    name: 'Slider'\n  });\n  const handleChange = onChange && ((event, value, thumbIndex) => {\n    // Redefine target to allow name and value to be read.\n    // This allows seamless integration with the most popular form libraries.\n    // https://github.com/mui/material-ui/issues/13485#issuecomment-676048492\n    // Clone the event to not override `target` of the original event.\n    const nativeEvent = event.nativeEvent || event;\n    // @ts-ignore The nativeEvent is function, not object\n    const clonedEvent = new nativeEvent.constructor(nativeEvent.type, nativeEvent);\n    Object.defineProperty(clonedEvent, 'target', {\n      writable: true,\n      value: {\n        value,\n        name\n      }\n    });\n    lastChangedValue.current = value;\n    onChange(clonedEvent, value, thumbIndex);\n  });\n  const range = Array.isArray(valueDerived);\n  let values = range ? valueDerived.slice().sort(asc) : [valueDerived];\n  values = values.map(value => value == null ? min : clamp(value, min, max));\n  const marks = marksProp === true && step !== null ? [...Array(Math.floor((max - min) / step) + 1)].map((_, index) => ({\n    value: min + step * index\n  })) : marksProp || [];\n  const marksValues = marks.map(mark => mark.value);\n  const [focusedThumbIndex, setFocusedThumbIndex] = React.useState(-1);\n  const sliderRef = React.useRef(null);\n  const handleRef = useForkRef(ref, sliderRef);\n  const createHandleHiddenInputFocus = otherHandlers => event => {\n    const index = Number(event.currentTarget.getAttribute('data-index'));\n    if (isFocusVisible(event.target)) {\n      setFocusedThumbIndex(index);\n    }\n    setOpen(index);\n    otherHandlers?.onFocus?.(event);\n  };\n  const createHandleHiddenInputBlur = otherHandlers => event => {\n    if (!isFocusVisible(event.target)) {\n      setFocusedThumbIndex(-1);\n    }\n    setOpen(-1);\n    otherHandlers?.onBlur?.(event);\n  };\n  const changeValue = (event, valueInput) => {\n    const index = Number(event.currentTarget.getAttribute('data-index'));\n    const value = values[index];\n    const marksIndex = marksValues.indexOf(value);\n    let newValue = valueInput;\n    if (marks && step == null) {\n      const maxMarksValue = marksValues[marksValues.length - 1];\n      if (newValue >= maxMarksValue) {\n        newValue = maxMarksValue;\n      } else if (newValue <= marksValues[0]) {\n        newValue = marksValues[0];\n      } else {\n        newValue = newValue < value ? marksValues[marksIndex - 1] : marksValues[marksIndex + 1];\n      }\n    }\n    newValue = clamp(newValue, min, max);\n    if (range) {\n      // Bound the new value to the thumb's neighbours.\n      if (disableSwap) {\n        newValue = clamp(newValue, values[index - 1] || -Infinity, values[index + 1] || Infinity);\n      }\n      const previousValue = newValue;\n      newValue = setValueIndex({\n        values,\n        newValue,\n        index\n      });\n      let activeIndex = index;\n\n      // Potentially swap the index if needed.\n      if (!disableSwap) {\n        activeIndex = newValue.indexOf(previousValue);\n      }\n      focusThumb({\n        sliderRef,\n        activeIndex\n      });\n    }\n    setValueState(newValue);\n    setFocusedThumbIndex(index);\n    if (handleChange && !areValuesEqual(newValue, valueDerived)) {\n      handleChange(event, newValue, index);\n    }\n    if (onChangeCommitted) {\n      onChangeCommitted(event, lastChangedValue.current ?? newValue);\n    }\n  };\n  const createHandleHiddenInputKeyDown = otherHandlers => event => {\n    if (['ArrowUp', 'ArrowDown', 'ArrowLeft', 'ArrowRight', 'PageUp', 'PageDown', 'Home', 'End'].includes(event.key)) {\n      event.preventDefault();\n      const index = Number(event.currentTarget.getAttribute('data-index'));\n      const value = values[index];\n      let newValue = null;\n      // Keys actions that change the value by more than the most granular `step`\n      // value are only applied if the step not `null`.\n      // When step is `null`, the `marks` prop is used instead to define valid values.\n      if (step != null) {\n        const stepSize = event.shiftKey ? shiftStep : step;\n        switch (event.key) {\n          case 'ArrowUp':\n            newValue = getNewValue(value, stepSize, 1, min, max);\n            break;\n          case 'ArrowRight':\n            newValue = getNewValue(value, stepSize, isRtl ? -1 : 1, min, max);\n            break;\n          case 'ArrowDown':\n            newValue = getNewValue(value, stepSize, -1, min, max);\n            break;\n          case 'ArrowLeft':\n            newValue = getNewValue(value, stepSize, isRtl ? 1 : -1, min, max);\n            break;\n          case 'PageUp':\n            newValue = getNewValue(value, shiftStep, 1, min, max);\n            break;\n          case 'PageDown':\n            newValue = getNewValue(value, shiftStep, -1, min, max);\n            break;\n          case 'Home':\n            newValue = min;\n            break;\n          case 'End':\n            newValue = max;\n            break;\n          default:\n            break;\n        }\n      } else if (marks) {\n        const maxMarksValue = marksValues[marksValues.length - 1];\n        const currentMarkIndex = marksValues.indexOf(value);\n        const decrementKeys = [isRtl ? 'ArrowRight' : 'ArrowLeft', 'ArrowDown', 'PageDown', 'Home'];\n        const incrementKeys = [isRtl ? 'ArrowLeft' : 'ArrowRight', 'ArrowUp', 'PageUp', 'End'];\n        if (decrementKeys.includes(event.key)) {\n          if (currentMarkIndex === 0) {\n            newValue = marksValues[0];\n          } else {\n            newValue = marksValues[currentMarkIndex - 1];\n          }\n        } else if (incrementKeys.includes(event.key)) {\n          if (currentMarkIndex === marksValues.length - 1) {\n            newValue = maxMarksValue;\n          } else {\n            newValue = marksValues[currentMarkIndex + 1];\n          }\n        }\n      }\n      if (newValue != null) {\n        changeValue(event, newValue);\n      }\n    }\n    otherHandlers?.onKeyDown?.(event);\n  };\n  useEnhancedEffect(() => {\n    if (disabled && sliderRef.current.contains(document.activeElement)) {\n      // This is necessary because Firefox and Safari will keep focus\n      // on a disabled element:\n      // https://codesandbox.io/p/sandbox/mui-pr-22247-forked-h151h?file=/src/App.js\n      // @ts-ignore\n      document.activeElement?.blur();\n    }\n  }, [disabled]);\n  if (disabled && active !== -1) {\n    setActive(-1);\n  }\n  if (disabled && focusedThumbIndex !== -1) {\n    setFocusedThumbIndex(-1);\n  }\n  const createHandleHiddenInputChange = otherHandlers => event => {\n    otherHandlers.onChange?.(event);\n    // this handles value change by Pointer or Touch events\n    // @ts-ignore\n    changeValue(event, event.target.valueAsNumber);\n  };\n  const previousIndex = React.useRef(undefined);\n  let axis = orientation;\n  if (isRtl && orientation === 'horizontal') {\n    axis += '-reverse';\n  }\n  const getFingerNewValue = ({\n    finger,\n    move = false\n  }) => {\n    const {\n      current: slider\n    } = sliderRef;\n    const {\n      width,\n      height,\n      bottom,\n      left\n    } = slider.getBoundingClientRect();\n    let percent;\n    if (axis.startsWith('vertical')) {\n      percent = (bottom - finger.y) / height;\n    } else {\n      percent = (finger.x - left) / width;\n    }\n    if (axis.includes('-reverse')) {\n      percent = 1 - percent;\n    }\n    let newValue;\n    newValue = percentToValue(percent, min, max);\n    if (step) {\n      newValue = roundValueToStep(newValue, step, min);\n    } else {\n      const closestIndex = findClosest(marksValues, newValue);\n      newValue = marksValues[closestIndex];\n    }\n    newValue = clamp(newValue, min, max);\n    let activeIndex = 0;\n    if (range) {\n      if (!move) {\n        activeIndex = findClosest(values, newValue);\n      } else {\n        activeIndex = previousIndex.current;\n      }\n\n      // Bound the new value to the thumb's neighbours.\n      if (disableSwap) {\n        newValue = clamp(newValue, values[activeIndex - 1] || -Infinity, values[activeIndex + 1] || Infinity);\n      }\n      const previousValue = newValue;\n      newValue = setValueIndex({\n        values,\n        newValue,\n        index: activeIndex\n      });\n\n      // Potentially swap the index if needed.\n      if (!(disableSwap && move)) {\n        activeIndex = newValue.indexOf(previousValue);\n        previousIndex.current = activeIndex;\n      }\n    }\n    return {\n      newValue,\n      activeIndex\n    };\n  };\n  const handleTouchMove = useEventCallback(nativeEvent => {\n    const finger = trackFinger(nativeEvent, touchId);\n    if (!finger) {\n      return;\n    }\n    moveCount.current += 1;\n\n    // Cancel move in case some other element consumed a mouseup event and it was not fired.\n    // @ts-ignore buttons doesn't not exists on touch event\n    if (nativeEvent.type === 'mousemove' && nativeEvent.buttons === 0) {\n      // eslint-disable-next-line @typescript-eslint/no-use-before-define\n      handleTouchEnd(nativeEvent);\n      return;\n    }\n    const {\n      newValue,\n      activeIndex\n    } = getFingerNewValue({\n      finger,\n      move: true\n    });\n    focusThumb({\n      sliderRef,\n      activeIndex,\n      setActive\n    });\n    setValueState(newValue);\n    if (!dragging && moveCount.current > INTENTIONAL_DRAG_COUNT_THRESHOLD) {\n      setDragging(true);\n    }\n    if (handleChange && !areValuesEqual(newValue, valueDerived)) {\n      handleChange(nativeEvent, newValue, activeIndex);\n    }\n  });\n  const handleTouchEnd = useEventCallback(nativeEvent => {\n    const finger = trackFinger(nativeEvent, touchId);\n    setDragging(false);\n    if (!finger) {\n      return;\n    }\n    const {\n      newValue\n    } = getFingerNewValue({\n      finger,\n      move: true\n    });\n    setActive(-1);\n    if (nativeEvent.type === 'touchend') {\n      setOpen(-1);\n    }\n    if (onChangeCommitted) {\n      onChangeCommitted(nativeEvent, lastChangedValue.current ?? newValue);\n    }\n    touchId.current = undefined;\n\n    // eslint-disable-next-line @typescript-eslint/no-use-before-define\n    stopListening();\n  });\n  const handleTouchStart = useEventCallback(nativeEvent => {\n    if (disabled) {\n      return;\n    }\n    // If touch-action: none; is not supported we need to prevent the scroll manually.\n    if (!doesSupportTouchActionNone()) {\n      nativeEvent.preventDefault();\n    }\n    const touch = nativeEvent.changedTouches[0];\n    if (touch != null) {\n      // A number that uniquely identifies the current finger in the touch session.\n      touchId.current = touch.identifier;\n    }\n    const finger = trackFinger(nativeEvent, touchId);\n    if (finger !== false) {\n      const {\n        newValue,\n        activeIndex\n      } = getFingerNewValue({\n        finger\n      });\n      focusThumb({\n        sliderRef,\n        activeIndex,\n        setActive\n      });\n      setValueState(newValue);\n      if (handleChange && !areValuesEqual(newValue, valueDerived)) {\n        handleChange(nativeEvent, newValue, activeIndex);\n      }\n    }\n    moveCount.current = 0;\n    const doc = ownerDocument(sliderRef.current);\n    doc.addEventListener('touchmove', handleTouchMove, {\n      passive: true\n    });\n    doc.addEventListener('touchend', handleTouchEnd, {\n      passive: true\n    });\n  });\n  const stopListening = React.useCallback(() => {\n    const doc = ownerDocument(sliderRef.current);\n    doc.removeEventListener('mousemove', handleTouchMove);\n    doc.removeEventListener('mouseup', handleTouchEnd);\n    doc.removeEventListener('touchmove', handleTouchMove);\n    doc.removeEventListener('touchend', handleTouchEnd);\n  }, [handleTouchEnd, handleTouchMove]);\n  React.useEffect(() => {\n    const {\n      current: slider\n    } = sliderRef;\n    slider.addEventListener('touchstart', handleTouchStart, {\n      passive: doesSupportTouchActionNone()\n    });\n    return () => {\n      slider.removeEventListener('touchstart', handleTouchStart);\n      stopListening();\n    };\n  }, [stopListening, handleTouchStart]);\n  React.useEffect(() => {\n    if (disabled) {\n      stopListening();\n    }\n  }, [disabled, stopListening]);\n  const createHandleMouseDown = otherHandlers => event => {\n    otherHandlers.onMouseDown?.(event);\n    if (disabled) {\n      return;\n    }\n    if (event.defaultPrevented) {\n      return;\n    }\n\n    // Only handle left clicks\n    if (event.button !== 0) {\n      return;\n    }\n\n    // Avoid text selection\n    event.preventDefault();\n    const finger = trackFinger(event, touchId);\n    if (finger !== false) {\n      const {\n        newValue,\n        activeIndex\n      } = getFingerNewValue({\n        finger\n      });\n      focusThumb({\n        sliderRef,\n        activeIndex,\n        setActive\n      });\n      setValueState(newValue);\n      if (handleChange && !areValuesEqual(newValue, valueDerived)) {\n        handleChange(event, newValue, activeIndex);\n      }\n    }\n    moveCount.current = 0;\n    const doc = ownerDocument(sliderRef.current);\n    doc.addEventListener('mousemove', handleTouchMove, {\n      passive: true\n    });\n    doc.addEventListener('mouseup', handleTouchEnd);\n  };\n  const trackOffset = valueToPercent(range ? values[0] : min, min, max);\n  const trackLeap = valueToPercent(values[values.length - 1], min, max) - trackOffset;\n  const getRootProps = (externalProps = {}) => {\n    const externalHandlers = extractEventHandlers(externalProps);\n    const ownEventHandlers = {\n      onMouseDown: createHandleMouseDown(externalHandlers || {})\n    };\n    const mergedEventHandlers = {\n      ...externalHandlers,\n      ...ownEventHandlers\n    };\n    return {\n      ...externalProps,\n      ref: handleRef,\n      ...mergedEventHandlers\n    };\n  };\n  const createHandleMouseOver = otherHandlers => event => {\n    otherHandlers.onMouseOver?.(event);\n    const index = Number(event.currentTarget.getAttribute('data-index'));\n    setOpen(index);\n  };\n  const createHandleMouseLeave = otherHandlers => event => {\n    otherHandlers.onMouseLeave?.(event);\n    setOpen(-1);\n  };\n  const getThumbProps = (externalProps = {}) => {\n    const externalHandlers = extractEventHandlers(externalProps);\n    const ownEventHandlers = {\n      onMouseOver: createHandleMouseOver(externalHandlers || {}),\n      onMouseLeave: createHandleMouseLeave(externalHandlers || {})\n    };\n    return {\n      ...externalProps,\n      ...externalHandlers,\n      ...ownEventHandlers\n    };\n  };\n  const getThumbStyle = index => {\n    return {\n      // So the non active thumb doesn't show its label on hover.\n      pointerEvents: active !== -1 && active !== index ? 'none' : undefined\n    };\n  };\n  let cssWritingMode;\n  if (orientation === 'vertical') {\n    cssWritingMode = isRtl ? 'vertical-rl' : 'vertical-lr';\n  }\n  const getHiddenInputProps = (externalProps = {}) => {\n    const externalHandlers = extractEventHandlers(externalProps);\n    const ownEventHandlers = {\n      onChange: createHandleHiddenInputChange(externalHandlers || {}),\n      onFocus: createHandleHiddenInputFocus(externalHandlers || {}),\n      onBlur: createHandleHiddenInputBlur(externalHandlers || {}),\n      onKeyDown: createHandleHiddenInputKeyDown(externalHandlers || {})\n    };\n    const mergedEventHandlers = {\n      ...externalHandlers,\n      ...ownEventHandlers\n    };\n    return {\n      tabIndex,\n      'aria-labelledby': ariaLabelledby,\n      'aria-orientation': orientation,\n      'aria-valuemax': scale(max),\n      'aria-valuemin': scale(min),\n      name,\n      type: 'range',\n      min: parameters.min,\n      max: parameters.max,\n      step: parameters.step === null && parameters.marks ? 'any' : parameters.step ?? undefined,\n      disabled,\n      ...externalProps,\n      ...mergedEventHandlers,\n      style: {\n        ...visuallyHidden,\n        direction: isRtl ? 'rtl' : 'ltr',\n        // So that VoiceOver's focus indicator matches the thumb's dimensions\n        width: '100%',\n        height: '100%',\n        writingMode: cssWritingMode\n      }\n    };\n  };\n  return {\n    active,\n    axis: axis,\n    axisProps,\n    dragging,\n    focusedThumbIndex,\n    getHiddenInputProps,\n    getRootProps,\n    getThumbProps,\n    marks: marks,\n    open,\n    range,\n    rootRef: handleRef,\n    trackLeap,\n    trackOffset,\n    values,\n    getThumbStyle\n  };\n}","import isHostComponent from '@mui/utils/isHostComponent';\nconst shouldSpreadAdditionalProps = Slot => {\n  return !Slot || !isHostComponent(Slot);\n};\nexport default shouldSpreadAdditionalProps;","import generateUtilityClasses from '@mui/utils/generateUtilityClasses';\nimport generateUtilityClass from '@mui/utils/generateUtilityClass';\nexport function getSliderUtilityClass(slot) {\n  return generateUtilityClass('MuiSlider', slot);\n}\nconst sliderClasses = generateUtilityClasses('MuiSlider', ['root', 'active', 'colorPrimary', 'colorSecondary', 'colorError', 'colorInfo', 'colorSuccess', 'colorWarning', 'disabled', 'dragging', 'focusVisible', 'mark', 'markActive', 'marked', 'markLabel', 'markLabelActive', 'rail', 'sizeSmall', 'thumb', 'thumbColorPrimary', 'thumbColorSecondary', 'thumbColorError', 'thumbColorSuccess', 'thumbColorInfo', 'thumbColorWarning', 'track', 'trackInverted', 'trackFalse', 'thumbSizeSmall', 'valueLabel', 'valueLabelOpen', 'valueLabelCircle', 'valueLabelLabel', 'vertical']);\nexport default sliderClasses;","'use client';\n\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport sliderClasses from \"./sliderClasses.js\";\nimport { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nconst useValueLabelClasses = props => {\n  const {\n    open\n  } = props;\n  const utilityClasses = {\n    offset: clsx(open && sliderClasses.valueLabelOpen),\n    circle: sliderClasses.valueLabelCircle,\n    label: sliderClasses.valueLabelLabel\n  };\n  return utilityClasses;\n};\n\n/**\n * @ignore - internal component.\n */\nexport default function SliderValueLabel(props) {\n  const {\n    children,\n    className,\n    value\n  } = props;\n  const classes = useValueLabelClasses(props);\n  if (!children) {\n    return null;\n  }\n  return /*#__PURE__*/React.cloneElement(children, {\n    className: children.props.className\n  }, /*#__PURE__*/_jsxs(React.Fragment, {\n    children: [children.props.children, /*#__PURE__*/_jsx(\"span\", {\n      className: clsx(classes.offset, className),\n      \"aria-hidden\": true,\n      children: /*#__PURE__*/_jsx(\"span\", {\n        className: classes.circle,\n        children: /*#__PURE__*/_jsx(\"span\", {\n          className: classes.label,\n          children: value\n        })\n      })\n    })]\n  }));\n}\nprocess.env.NODE_ENV !== \"production\" ? SliderValueLabel.propTypes = {\n  children: PropTypes.element.isRequired,\n  className: PropTypes.string,\n  value: PropTypes.node\n} : void 0;","'use client';\n\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport chainPropTypes from '@mui/utils/chainPropTypes';\nimport composeClasses from '@mui/utils/composeClasses';\nimport { useRtl } from '@mui/system/RtlProvider';\nimport useSlotProps from '@mui/utils/useSlotProps';\nimport isHostComponent from '@mui/utils/isHostComponent';\nimport { useSlider, valueToPercent } from \"./useSlider.js\";\nimport { styled } from \"../zero-styled/index.js\";\nimport memoTheme from \"../utils/memoTheme.js\";\nimport { useDefaultProps } from \"../DefaultPropsProvider/index.js\";\nimport slotShouldForwardProp from \"../styles/slotShouldForwardProp.js\";\nimport shouldSpreadAdditionalProps from \"../utils/shouldSpreadAdditionalProps.js\";\nimport capitalize from \"../utils/capitalize.js\";\nimport createSimplePaletteValueFilter from \"../utils/createSimplePaletteValueFilter.js\";\nimport BaseSliderValueLabel from \"./SliderValueLabel.js\";\nimport sliderClasses, { getSliderUtilityClass } from \"./sliderClasses.js\";\nimport { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nfunction Identity(x) {\n  return x;\n}\nexport const SliderRoot = styled('span', {\n  name: 'MuiSlider',\n  slot: 'Root',\n  overridesResolver: (props, styles) => {\n    const {\n      ownerState\n    } = props;\n    return [styles.root, styles[`color${capitalize(ownerState.color)}`], ownerState.size !== 'medium' && styles[`size${capitalize(ownerState.size)}`], ownerState.marked && styles.marked, ownerState.orientation === 'vertical' && styles.vertical, ownerState.track === 'inverted' && styles.trackInverted, ownerState.track === false && styles.trackFalse];\n  }\n})(memoTheme(({\n  theme\n}) => ({\n  borderRadius: 12,\n  boxSizing: 'content-box',\n  display: 'inline-block',\n  position: 'relative',\n  cursor: 'pointer',\n  touchAction: 'none',\n  WebkitTapHighlightColor: 'transparent',\n  '@media print': {\n    colorAdjust: 'exact'\n  },\n  [`&.${sliderClasses.disabled}`]: {\n    pointerEvents: 'none',\n    cursor: 'default',\n    color: (theme.vars || theme).palette.grey[400]\n  },\n  [`&.${sliderClasses.dragging}`]: {\n    [`& .${sliderClasses.thumb}, & .${sliderClasses.track}`]: {\n      transition: 'none'\n    }\n  },\n  variants: [...Object.entries(theme.palette).filter(createSimplePaletteValueFilter()).map(([color]) => ({\n    props: {\n      color\n    },\n    style: {\n      color: (theme.vars || theme).palette[color].main\n    }\n  })), {\n    props: {\n      orientation: 'horizontal'\n    },\n    style: {\n      height: 4,\n      width: '100%',\n      padding: '13px 0',\n      // The primary input mechanism of the device includes a pointing device of limited accuracy.\n      '@media (pointer: coarse)': {\n        // Reach 42px touch target, about ~8mm on screen.\n        padding: '20px 0'\n      }\n    }\n  }, {\n    props: {\n      orientation: 'horizontal',\n      size: 'small'\n    },\n    style: {\n      height: 2\n    }\n  }, {\n    props: {\n      orientation: 'horizontal',\n      marked: true\n    },\n    style: {\n      marginBottom: 20\n    }\n  }, {\n    props: {\n      orientation: 'vertical'\n    },\n    style: {\n      height: '100%',\n      width: 4,\n      padding: '0 13px',\n      // The primary input mechanism of the device includes a pointing device of limited accuracy.\n      '@media (pointer: coarse)': {\n        // Reach 42px touch target, about ~8mm on screen.\n        padding: '0 20px'\n      }\n    }\n  }, {\n    props: {\n      orientation: 'vertical',\n      size: 'small'\n    },\n    style: {\n      width: 2\n    }\n  }, {\n    props: {\n      orientation: 'vertical',\n      marked: true\n    },\n    style: {\n      marginRight: 44\n    }\n  }]\n})));\nexport const SliderRail = styled('span', {\n  name: 'MuiSlider',\n  slot: 'Rail'\n})({\n  display: 'block',\n  position: 'absolute',\n  borderRadius: 'inherit',\n  backgroundColor: 'currentColor',\n  opacity: 0.38,\n  variants: [{\n    props: {\n      orientation: 'horizontal'\n    },\n    style: {\n      width: '100%',\n      height: 'inherit',\n      top: '50%',\n      transform: 'translateY(-50%)'\n    }\n  }, {\n    props: {\n      orientation: 'vertical'\n    },\n    style: {\n      height: '100%',\n      width: 'inherit',\n      left: '50%',\n      transform: 'translateX(-50%)'\n    }\n  }, {\n    props: {\n      track: 'inverted'\n    },\n    style: {\n      opacity: 1\n    }\n  }]\n});\nexport const SliderTrack = styled('span', {\n  name: 'MuiSlider',\n  slot: 'Track'\n})(memoTheme(({\n  theme\n}) => {\n  return {\n    display: 'block',\n    position: 'absolute',\n    borderRadius: 'inherit',\n    border: '1px solid currentColor',\n    backgroundColor: 'currentColor',\n    transition: theme.transitions.create(['left', 'width', 'bottom', 'height'], {\n      duration: theme.transitions.duration.shortest\n    }),\n    variants: [{\n      props: {\n        size: 'small'\n      },\n      style: {\n        border: 'none'\n      }\n    }, {\n      props: {\n        orientation: 'horizontal'\n      },\n      style: {\n        height: 'inherit',\n        top: '50%',\n        transform: 'translateY(-50%)'\n      }\n    }, {\n      props: {\n        orientation: 'vertical'\n      },\n      style: {\n        width: 'inherit',\n        left: '50%',\n        transform: 'translateX(-50%)'\n      }\n    }, {\n      props: {\n        track: false\n      },\n      style: {\n        display: 'none'\n      }\n    }, ...Object.entries(theme.palette).filter(createSimplePaletteValueFilter()).map(([color]) => ({\n      props: {\n        color,\n        track: 'inverted'\n      },\n      style: {\n        ...(theme.vars ? {\n          backgroundColor: theme.vars.palette.Slider[`${color}Track`],\n          borderColor: theme.vars.palette.Slider[`${color}Track`]\n        } : {\n          backgroundColor: theme.lighten(theme.palette[color].main, 0.62),\n          borderColor: theme.lighten(theme.palette[color].main, 0.62),\n          ...theme.applyStyles('dark', {\n            backgroundColor: theme.darken(theme.palette[color].main, 0.5)\n          }),\n          ...theme.applyStyles('dark', {\n            borderColor: theme.darken(theme.palette[color].main, 0.5)\n          })\n        })\n      }\n    }))]\n  };\n}));\nexport const SliderThumb = styled('span', {\n  name: 'MuiSlider',\n  slot: 'Thumb',\n  overridesResolver: (props, styles) => {\n    const {\n      ownerState\n    } = props;\n    return [styles.thumb, styles[`thumbColor${capitalize(ownerState.color)}`], ownerState.size !== 'medium' && styles[`thumbSize${capitalize(ownerState.size)}`]];\n  }\n})(memoTheme(({\n  theme\n}) => ({\n  position: 'absolute',\n  width: 20,\n  height: 20,\n  boxSizing: 'border-box',\n  borderRadius: '50%',\n  outline: 0,\n  backgroundColor: 'currentColor',\n  display: 'flex',\n  alignItems: 'center',\n  justifyContent: 'center',\n  transition: theme.transitions.create(['box-shadow', 'left', 'bottom'], {\n    duration: theme.transitions.duration.shortest\n  }),\n  '&::before': {\n    position: 'absolute',\n    content: '\"\"',\n    borderRadius: 'inherit',\n    width: '100%',\n    height: '100%',\n    boxShadow: (theme.vars || theme).shadows[2]\n  },\n  '&::after': {\n    position: 'absolute',\n    content: '\"\"',\n    borderRadius: '50%',\n    // 42px is the hit target\n    width: 42,\n    height: 42,\n    top: '50%',\n    left: '50%',\n    transform: 'translate(-50%, -50%)'\n  },\n  [`&.${sliderClasses.disabled}`]: {\n    '&:hover': {\n      boxShadow: 'none'\n    }\n  },\n  variants: [{\n    props: {\n      size: 'small'\n    },\n    style: {\n      width: 12,\n      height: 12,\n      '&::before': {\n        boxShadow: 'none'\n      }\n    }\n  }, {\n    props: {\n      orientation: 'horizontal'\n    },\n    style: {\n      top: '50%',\n      transform: 'translate(-50%, -50%)'\n    }\n  }, {\n    props: {\n      orientation: 'vertical'\n    },\n    style: {\n      left: '50%',\n      transform: 'translate(-50%, 50%)'\n    }\n  }, ...Object.entries(theme.palette).filter(createSimplePaletteValueFilter()).map(([color]) => ({\n    props: {\n      color\n    },\n    style: {\n      [`&:hover, &.${sliderClasses.focusVisible}`]: {\n        boxShadow: `0px 0px 0px 8px ${theme.alpha((theme.vars || theme).palette[color].main, 0.16)}`,\n        '@media (hover: none)': {\n          boxShadow: 'none'\n        }\n      },\n      [`&.${sliderClasses.active}`]: {\n        boxShadow: `0px 0px 0px 14px ${theme.alpha((theme.vars || theme).palette[color].main, 0.16)}`\n      }\n    }\n  }))]\n})));\nconst SliderValueLabel = styled(BaseSliderValueLabel, {\n  name: 'MuiSlider',\n  slot: 'ValueLabel'\n})(memoTheme(({\n  theme\n}) => ({\n  zIndex: 1,\n  whiteSpace: 'nowrap',\n  ...theme.typography.body2,\n  fontWeight: 500,\n  transition: theme.transitions.create(['transform'], {\n    duration: theme.transitions.duration.shortest\n  }),\n  position: 'absolute',\n  backgroundColor: (theme.vars || theme).palette.grey[600],\n  borderRadius: 2,\n  color: (theme.vars || theme).palette.common.white,\n  display: 'flex',\n  alignItems: 'center',\n  justifyContent: 'center',\n  padding: '0.25rem 0.75rem',\n  variants: [{\n    props: {\n      orientation: 'horizontal'\n    },\n    style: {\n      transform: 'translateY(-100%) scale(0)',\n      top: '-10px',\n      transformOrigin: 'bottom center',\n      '&::before': {\n        position: 'absolute',\n        content: '\"\"',\n        width: 8,\n        height: 8,\n        transform: 'translate(-50%, 50%) rotate(45deg)',\n        backgroundColor: 'inherit',\n        bottom: 0,\n        left: '50%'\n      },\n      [`&.${sliderClasses.valueLabelOpen}`]: {\n        transform: 'translateY(-100%) scale(1)'\n      }\n    }\n  }, {\n    props: {\n      orientation: 'vertical'\n    },\n    style: {\n      transform: 'translateY(-50%) scale(0)',\n      right: '30px',\n      top: '50%',\n      transformOrigin: 'right center',\n      '&::before': {\n        position: 'absolute',\n        content: '\"\"',\n        width: 8,\n        height: 8,\n        transform: 'translate(-50%, -50%) rotate(45deg)',\n        backgroundColor: 'inherit',\n        right: -8,\n        top: '50%'\n      },\n      [`&.${sliderClasses.valueLabelOpen}`]: {\n        transform: 'translateY(-50%) scale(1)'\n      }\n    }\n  }, {\n    props: {\n      size: 'small'\n    },\n    style: {\n      fontSize: theme.typography.pxToRem(12),\n      padding: '0.25rem 0.5rem'\n    }\n  }, {\n    props: {\n      orientation: 'vertical',\n      size: 'small'\n    },\n    style: {\n      right: '20px'\n    }\n  }]\n})));\nprocess.env.NODE_ENV !== \"production\" ? SliderValueLabel.propTypes /* remove-proptypes */ = {\n  // ┌────────────────────────────── Warning ──────────────────────────────┐\n  // │ These PropTypes are generated from the TypeScript type definitions. │\n  // │    To update them, edit the d.ts file and run `pnpm proptypes`.     │\n  // └─────────────────────────────────────────────────────────────────────┘\n  /**\n   * @ignore\n   */\n  children: PropTypes.element.isRequired,\n  /**\n   * @ignore\n   */\n  index: PropTypes.number.isRequired,\n  /**\n   * @ignore\n   */\n  open: PropTypes.bool.isRequired,\n  /**\n   * @ignore\n   */\n  value: PropTypes.node\n} : void 0;\nexport { SliderValueLabel };\nexport const SliderMark = styled('span', {\n  name: 'MuiSlider',\n  slot: 'Mark',\n  shouldForwardProp: prop => slotShouldForwardProp(prop) && prop !== 'markActive',\n  overridesResolver: (props, styles) => {\n    const {\n      markActive\n    } = props;\n    return [styles.mark, markActive && styles.markActive];\n  }\n})(memoTheme(({\n  theme\n}) => ({\n  position: 'absolute',\n  width: 2,\n  height: 2,\n  borderRadius: 1,\n  backgroundColor: 'currentColor',\n  variants: [{\n    props: {\n      orientation: 'horizontal'\n    },\n    style: {\n      top: '50%',\n      transform: 'translate(-1px, -50%)'\n    }\n  }, {\n    props: {\n      orientation: 'vertical'\n    },\n    style: {\n      left: '50%',\n      transform: 'translate(-50%, 1px)'\n    }\n  }, {\n    props: {\n      markActive: true\n    },\n    style: {\n      backgroundColor: (theme.vars || theme).palette.background.paper,\n      opacity: 0.8\n    }\n  }]\n})));\nexport const SliderMarkLabel = styled('span', {\n  name: 'MuiSlider',\n  slot: 'MarkLabel',\n  shouldForwardProp: prop => slotShouldForwardProp(prop) && prop !== 'markLabelActive'\n})(memoTheme(({\n  theme\n}) => ({\n  ...theme.typography.body2,\n  color: (theme.vars || theme).palette.text.secondary,\n  position: 'absolute',\n  whiteSpace: 'nowrap',\n  variants: [{\n    props: {\n      orientation: 'horizontal'\n    },\n    style: {\n      top: 30,\n      transform: 'translateX(-50%)',\n      '@media (pointer: coarse)': {\n        top: 40\n      }\n    }\n  }, {\n    props: {\n      orientation: 'vertical'\n    },\n    style: {\n      left: 36,\n      transform: 'translateY(50%)',\n      '@media (pointer: coarse)': {\n        left: 44\n      }\n    }\n  }, {\n    props: {\n      markLabelActive: true\n    },\n    style: {\n      color: (theme.vars || theme).palette.text.primary\n    }\n  }]\n})));\nconst useUtilityClasses = ownerState => {\n  const {\n    disabled,\n    dragging,\n    marked,\n    orientation,\n    track,\n    classes,\n    color,\n    size\n  } = ownerState;\n  const slots = {\n    root: ['root', disabled && 'disabled', dragging && 'dragging', marked && 'marked', orientation === 'vertical' && 'vertical', track === 'inverted' && 'trackInverted', track === false && 'trackFalse', color && `color${capitalize(color)}`, size && `size${capitalize(size)}`],\n    rail: ['rail'],\n    track: ['track'],\n    mark: ['mark'],\n    markActive: ['markActive'],\n    markLabel: ['markLabel'],\n    markLabelActive: ['markLabelActive'],\n    valueLabel: ['valueLabel'],\n    thumb: ['thumb', disabled && 'disabled', size && `thumbSize${capitalize(size)}`, color && `thumbColor${capitalize(color)}`],\n    active: ['active'],\n    disabled: ['disabled'],\n    focusVisible: ['focusVisible']\n  };\n  return composeClasses(slots, getSliderUtilityClass, classes);\n};\nconst Forward = ({\n  children\n}) => children;\nconst Slider = /*#__PURE__*/React.forwardRef(function Slider(inputProps, ref) {\n  const props = useDefaultProps({\n    props: inputProps,\n    name: 'MuiSlider'\n  });\n  const isRtl = useRtl();\n  const {\n    'aria-label': ariaLabel,\n    'aria-valuetext': ariaValuetext,\n    'aria-labelledby': ariaLabelledby,\n    // eslint-disable-next-line react/prop-types\n    component = 'span',\n    components = {},\n    componentsProps = {},\n    color = 'primary',\n    classes: classesProp,\n    className,\n    disableSwap = false,\n    disabled = false,\n    getAriaLabel,\n    getAriaValueText,\n    marks: marksProp = false,\n    max = 100,\n    min = 0,\n    name,\n    onChange,\n    onChangeCommitted,\n    orientation = 'horizontal',\n    shiftStep = 10,\n    size = 'medium',\n    step = 1,\n    scale = Identity,\n    slotProps,\n    slots,\n    tabIndex,\n    track = 'normal',\n    value: valueProp,\n    valueLabelDisplay = 'off',\n    valueLabelFormat = Identity,\n    ...other\n  } = props;\n  const ownerState = {\n    ...props,\n    isRtl,\n    max,\n    min,\n    classes: classesProp,\n    disabled,\n    disableSwap,\n    orientation,\n    marks: marksProp,\n    color,\n    size,\n    step,\n    shiftStep,\n    scale,\n    track,\n    valueLabelDisplay,\n    valueLabelFormat\n  };\n  const {\n    axisProps,\n    getRootProps,\n    getHiddenInputProps,\n    getThumbProps,\n    open,\n    active,\n    axis,\n    focusedThumbIndex,\n    range,\n    dragging,\n    marks,\n    values,\n    trackOffset,\n    trackLeap,\n    getThumbStyle\n  } = useSlider({\n    ...ownerState,\n    rootRef: ref\n  });\n  ownerState.marked = marks.length > 0 && marks.some(mark => mark.label);\n  ownerState.dragging = dragging;\n  ownerState.focusedThumbIndex = focusedThumbIndex;\n  const classes = useUtilityClasses(ownerState);\n\n  // support both `slots` and `components` for backward compatibility\n  const RootSlot = slots?.root ?? components.Root ?? SliderRoot;\n  const RailSlot = slots?.rail ?? components.Rail ?? SliderRail;\n  const TrackSlot = slots?.track ?? components.Track ?? SliderTrack;\n  const ThumbSlot = slots?.thumb ?? components.Thumb ?? SliderThumb;\n  const ValueLabelSlot = slots?.valueLabel ?? components.ValueLabel ?? SliderValueLabel;\n  const MarkSlot = slots?.mark ?? components.Mark ?? SliderMark;\n  const MarkLabelSlot = slots?.markLabel ?? components.MarkLabel ?? SliderMarkLabel;\n  const InputSlot = slots?.input ?? components.Input ?? 'input';\n  const rootSlotProps = slotProps?.root ?? componentsProps.root;\n  const railSlotProps = slotProps?.rail ?? componentsProps.rail;\n  const trackSlotProps = slotProps?.track ?? componentsProps.track;\n  const thumbSlotProps = slotProps?.thumb ?? componentsProps.thumb;\n  const valueLabelSlotProps = slotProps?.valueLabel ?? componentsProps.valueLabel;\n  const markSlotProps = slotProps?.mark ?? componentsProps.mark;\n  const markLabelSlotProps = slotProps?.markLabel ?? componentsProps.markLabel;\n  const inputSlotProps = slotProps?.input ?? componentsProps.input;\n  const rootProps = useSlotProps({\n    elementType: RootSlot,\n    getSlotProps: getRootProps,\n    externalSlotProps: rootSlotProps,\n    externalForwardedProps: other,\n    additionalProps: {\n      ...(shouldSpreadAdditionalProps(RootSlot) && {\n        as: component\n      })\n    },\n    ownerState: {\n      ...ownerState,\n      ...rootSlotProps?.ownerState\n    },\n    className: [classes.root, className]\n  });\n  const railProps = useSlotProps({\n    elementType: RailSlot,\n    externalSlotProps: railSlotProps,\n    ownerState,\n    className: classes.rail\n  });\n  const trackProps = useSlotProps({\n    elementType: TrackSlot,\n    externalSlotProps: trackSlotProps,\n    additionalProps: {\n      style: {\n        ...axisProps[axis].offset(trackOffset),\n        ...axisProps[axis].leap(trackLeap)\n      }\n    },\n    ownerState: {\n      ...ownerState,\n      ...trackSlotProps?.ownerState\n    },\n    className: classes.track\n  });\n  const thumbProps = useSlotProps({\n    elementType: ThumbSlot,\n    getSlotProps: getThumbProps,\n    externalSlotProps: thumbSlotProps,\n    ownerState: {\n      ...ownerState,\n      ...thumbSlotProps?.ownerState\n    },\n    className: classes.thumb\n  });\n  const valueLabelProps = useSlotProps({\n    elementType: ValueLabelSlot,\n    externalSlotProps: valueLabelSlotProps,\n    ownerState: {\n      ...ownerState,\n      ...valueLabelSlotProps?.ownerState\n    },\n    className: classes.valueLabel\n  });\n  const markProps = useSlotProps({\n    elementType: MarkSlot,\n    externalSlotProps: markSlotProps,\n    ownerState,\n    className: classes.mark\n  });\n  const markLabelProps = useSlotProps({\n    elementType: MarkLabelSlot,\n    externalSlotProps: markLabelSlotProps,\n    ownerState,\n    className: classes.markLabel\n  });\n  const inputSliderProps = useSlotProps({\n    elementType: InputSlot,\n    getSlotProps: getHiddenInputProps,\n    externalSlotProps: inputSlotProps,\n    ownerState\n  });\n  return /*#__PURE__*/_jsxs(RootSlot, {\n    ...rootProps,\n    children: [/*#__PURE__*/_jsx(RailSlot, {\n      ...railProps\n    }), /*#__PURE__*/_jsx(TrackSlot, {\n      ...trackProps\n    }), marks.filter(mark => mark.value >= min && mark.value <= max).map((mark, index) => {\n      const percent = valueToPercent(mark.value, min, max);\n      const style = axisProps[axis].offset(percent);\n      let markActive;\n      if (track === false) {\n        markActive = values.includes(mark.value);\n      } else {\n        markActive = track === 'normal' && (range ? mark.value >= values[0] && mark.value <= values[values.length - 1] : mark.value <= values[0]) || track === 'inverted' && (range ? mark.value <= values[0] || mark.value >= values[values.length - 1] : mark.value >= values[0]);\n      }\n      return /*#__PURE__*/_jsxs(React.Fragment, {\n        children: [/*#__PURE__*/_jsx(MarkSlot, {\n          \"data-index\": index,\n          ...markProps,\n          ...(!isHostComponent(MarkSlot) && {\n            markActive\n          }),\n          style: {\n            ...style,\n            ...markProps.style\n          },\n          className: clsx(markProps.className, markActive && classes.markActive)\n        }), mark.label != null ? /*#__PURE__*/_jsx(MarkLabelSlot, {\n          \"aria-hidden\": true,\n          \"data-index\": index,\n          ...markLabelProps,\n          ...(!isHostComponent(MarkLabelSlot) && {\n            markLabelActive: markActive\n          }),\n          style: {\n            ...style,\n            ...markLabelProps.style\n          },\n          className: clsx(classes.markLabel, markLabelProps.className, markActive && classes.markLabelActive),\n          children: mark.label\n        }) : null]\n      }, index);\n    }), values.map((value, index) => {\n      const percent = valueToPercent(value, min, max);\n      const style = axisProps[axis].offset(percent);\n      const ValueLabelComponent = valueLabelDisplay === 'off' ? Forward : ValueLabelSlot;\n      return /*#__PURE__*/ /* TODO v6: Change component structure. It will help in avoiding the complicated React.cloneElement API added in SliderValueLabel component. Should be: Thumb -> Input, ValueLabel. Follow Joy UI's Slider structure. */_jsx(ValueLabelComponent, {\n        ...(!isHostComponent(ValueLabelComponent) && {\n          valueLabelFormat,\n          valueLabelDisplay,\n          value: typeof valueLabelFormat === 'function' ? valueLabelFormat(scale(value), index) : valueLabelFormat,\n          index,\n          open: open === index || active === index || valueLabelDisplay === 'on',\n          disabled\n        }),\n        ...valueLabelProps,\n        children: /*#__PURE__*/_jsx(ThumbSlot, {\n          \"data-index\": index,\n          ...thumbProps,\n          className: clsx(classes.thumb, thumbProps.className, active === index && classes.active, focusedThumbIndex === index && classes.focusVisible),\n          style: {\n            ...style,\n            ...getThumbStyle(index),\n            ...thumbProps.style\n          },\n          children: /*#__PURE__*/_jsx(InputSlot, {\n            \"data-index\": index,\n            \"aria-label\": getAriaLabel ? getAriaLabel(index) : ariaLabel,\n            \"aria-valuenow\": scale(value),\n            \"aria-labelledby\": ariaLabelledby,\n            \"aria-valuetext\": getAriaValueText ? getAriaValueText(scale(value), index) : ariaValuetext,\n            value: values[index],\n            ...inputSliderProps\n          })\n        })\n      }, index);\n    })]\n  });\n});\nprocess.env.NODE_ENV !== \"production\" ? Slider.propTypes /* remove-proptypes */ = {\n  // ┌────────────────────────────── Warning ──────────────────────────────┐\n  // │ These PropTypes are generated from the TypeScript type definitions. │\n  // │    To update them, edit the d.ts file and run `pnpm proptypes`.     │\n  // └─────────────────────────────────────────────────────────────────────┘\n  /**\n   * The label of the slider.\n   */\n  'aria-label': chainPropTypes(PropTypes.string, props => {\n    const range = Array.isArray(props.value || props.defaultValue);\n    if (range && props['aria-label'] != null) {\n      return new Error('MUI: You need to use the `getAriaLabel` prop instead of `aria-label` when using a range slider.');\n    }\n    return null;\n  }),\n  /**\n   * The id of the element containing a label for the slider.\n   */\n  'aria-labelledby': PropTypes.string,\n  /**\n   * A string value that provides a user-friendly name for the current value of the slider.\n   */\n  'aria-valuetext': chainPropTypes(PropTypes.string, props => {\n    const range = Array.isArray(props.value || props.defaultValue);\n    if (range && props['aria-valuetext'] != null) {\n      return new Error('MUI: You need to use the `getAriaValueText` prop instead of `aria-valuetext` when using a range slider.');\n    }\n    return null;\n  }),\n  /**\n   * @ignore\n   */\n  children: PropTypes.node,\n  /**\n   * Override or extend the styles applied to the component.\n   */\n  classes: PropTypes.object,\n  /**\n   * @ignore\n   */\n  className: PropTypes.string,\n  /**\n   * The color of the component.\n   * It supports both default and custom theme colors, which can be added as shown in the\n   * [palette customization guide](https://mui.com/material-ui/customization/palette/#custom-colors).\n   * @default 'primary'\n   */\n  color: PropTypes /* @typescript-to-proptypes-ignore */.oneOfType([PropTypes.oneOf(['primary', 'secondary', 'error', 'info', 'success', 'warning']), PropTypes.string]),\n  /**\n   * The components used for each slot inside.\n   *\n   * @deprecated use the `slots` prop instead. This prop will be removed in a future major release. See [Migrating from deprecated APIs](https://mui.com/material-ui/migration/migrating-from-deprecated-apis/) for more details.\n   *\n   * @default {}\n   */\n  components: PropTypes.shape({\n    Input: PropTypes.elementType,\n    Mark: PropTypes.elementType,\n    MarkLabel: PropTypes.elementType,\n    Rail: PropTypes.elementType,\n    Root: PropTypes.elementType,\n    Thumb: PropTypes.elementType,\n    Track: PropTypes.elementType,\n    ValueLabel: PropTypes.elementType\n  }),\n  /**\n   * The extra props for the slot components.\n   * You can override the existing props or add new ones.\n   *\n   * @deprecated use the `slotProps` prop instead. This prop will be removed in a future major release. See [Migrating from deprecated APIs](https://mui.com/material-ui/migration/migrating-from-deprecated-apis/) for more details.\n   *\n   * @default {}\n   */\n  componentsProps: PropTypes.shape({\n    input: PropTypes.oneOfType([PropTypes.func, PropTypes.object]),\n    mark: PropTypes.oneOfType([PropTypes.func, PropTypes.object]),\n    markLabel: PropTypes.oneOfType([PropTypes.func, PropTypes.object]),\n    rail: PropTypes.oneOfType([PropTypes.func, PropTypes.object]),\n    root: PropTypes.oneOfType([PropTypes.func, PropTypes.object]),\n    thumb: PropTypes.oneOfType([PropTypes.func, PropTypes.object]),\n    track: PropTypes.oneOfType([PropTypes.func, PropTypes.object]),\n    valueLabel: PropTypes.oneOfType([PropTypes.func, PropTypes.shape({\n      children: PropTypes.element,\n      className: PropTypes.string,\n      open: PropTypes.bool,\n      style: PropTypes.object,\n      value: PropTypes.node,\n      valueLabelDisplay: PropTypes.oneOf(['auto', 'off', 'on'])\n    })])\n  }),\n  /**\n   * The default value. Use when the component is not controlled.\n   */\n  defaultValue: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.number), PropTypes.number]),\n  /**\n   * If `true`, the component is disabled.\n   * @default false\n   */\n  disabled: PropTypes.bool,\n  /**\n   * If `true`, the active thumb doesn't swap when moving pointer over a thumb while dragging another thumb.\n   * @default false\n   */\n  disableSwap: PropTypes.bool,\n  /**\n   * Accepts a function which returns a string value that provides a user-friendly name for the thumb labels of the slider.\n   * This is important for screen reader users.\n   * @param {number} index The thumb label's index to format.\n   * @returns {string}\n   */\n  getAriaLabel: PropTypes.func,\n  /**\n   * Accepts a function which returns a string value that provides a user-friendly name for the current value of the slider.\n   * This is important for screen reader users.\n   * @param {number} value The thumb label's value to format.\n   * @param {number} index The thumb label's index to format.\n   * @returns {string}\n   */\n  getAriaValueText: PropTypes.func,\n  /**\n   * Marks indicate predetermined values to which the user can move the slider.\n   * If `true` the marks are spaced according the value of the `step` prop.\n   * If an array, it should contain objects with `value` and an optional `label` keys.\n   * @default false\n   */\n  marks: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.shape({\n    label: PropTypes.node,\n    value: PropTypes.number.isRequired\n  })), PropTypes.bool]),\n  /**\n   * The maximum allowed value of the slider.\n   * Should not be equal to min.\n   * @default 100\n   */\n  max: PropTypes.number,\n  /**\n   * The minimum allowed value of the slider.\n   * Should not be equal to max.\n   * @default 0\n   */\n  min: PropTypes.number,\n  /**\n   * Name attribute of the hidden `input` element.\n   */\n  name: PropTypes.string,\n  /**\n   * Callback function that is fired when the slider's value changed.\n   *\n   * @param {Event} event The event source of the callback.\n   * You can pull out the new value by accessing `event.target.value` (any).\n   * **Warning**: This is a generic event not a change event.\n   * @param {Value} value The new value.\n   * @param {number} activeThumb Index of the currently moved thumb.\n   */\n  onChange: PropTypes.func,\n  /**\n   * Callback function that is fired when the `mouseup` is triggered.\n   *\n   * @param {React.SyntheticEvent | Event} event The event source of the callback. **Warning**: This is a generic event not a change event.\n   * @param {Value} value The new value.\n   */\n  onChangeCommitted: PropTypes.func,\n  /**\n   * The component orientation.\n   * @default 'horizontal'\n   */\n  orientation: PropTypes.oneOf(['horizontal', 'vertical']),\n  /**\n   * A transformation function, to change the scale of the slider.\n   * @param {any} x\n   * @returns {any}\n   * @default function Identity(x) {\n   *   return x;\n   * }\n   */\n  scale: PropTypes.func,\n  /**\n   * The granularity with which the slider can step through values when using Page Up/Page Down or Shift + Arrow Up/Arrow Down.\n   * @default 10\n   */\n  shiftStep: PropTypes.number,\n  /**\n   * The size of the slider.\n   * @default 'medium'\n   */\n  size: PropTypes /* @typescript-to-proptypes-ignore */.oneOfType([PropTypes.oneOf(['small', 'medium']), PropTypes.string]),\n  /**\n   * The props used for each slot inside the Slider.\n   * @default {}\n   */\n  slotProps: PropTypes.shape({\n    input: PropTypes.oneOfType([PropTypes.func, PropTypes.object]),\n    mark: PropTypes.oneOfType([PropTypes.func, PropTypes.object]),\n    markLabel: PropTypes.oneOfType([PropTypes.func, PropTypes.object]),\n    rail: PropTypes.oneOfType([PropTypes.func, PropTypes.object]),\n    root: PropTypes.oneOfType([PropTypes.func, PropTypes.object]),\n    thumb: PropTypes.oneOfType([PropTypes.func, PropTypes.object]),\n    track: PropTypes.oneOfType([PropTypes.func, PropTypes.object]),\n    valueLabel: PropTypes.oneOfType([PropTypes.func, PropTypes.shape({\n      children: PropTypes.element,\n      className: PropTypes.string,\n      open: PropTypes.bool,\n      style: PropTypes.object,\n      value: PropTypes.node,\n      valueLabelDisplay: PropTypes.oneOf(['auto', 'off', 'on'])\n    })])\n  }),\n  /**\n   * The components used for each slot inside the Slider.\n   * Either a string to use a HTML element or a component.\n   * @default {}\n   */\n  slots: PropTypes.shape({\n    input: PropTypes.elementType,\n    mark: PropTypes.elementType,\n    markLabel: PropTypes.elementType,\n    rail: PropTypes.elementType,\n    root: PropTypes.elementType,\n    thumb: PropTypes.elementType,\n    track: PropTypes.elementType,\n    valueLabel: PropTypes.elementType\n  }),\n  /**\n   * The granularity with which the slider can step through values. (A \"discrete\" slider.)\n   * The `min` prop serves as the origin for the valid values.\n   * We recommend (max - min) to be evenly divisible by the step.\n   *\n   * When step is `null`, the thumb can only be slid onto marks provided with the `marks` prop.\n   * @default 1\n   */\n  step: PropTypes.number,\n  /**\n   * The system prop that allows defining system overrides as well as additional CSS styles.\n   */\n  sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object]),\n  /**\n   * Tab index attribute of the hidden `input` element.\n   */\n  tabIndex: PropTypes.number,\n  /**\n   * The track presentation:\n   *\n   * - `normal` the track will render a bar representing the slider value.\n   * - `inverted` the track will render a bar representing the remaining slider value.\n   * - `false` the track will render without a bar.\n   * @default 'normal'\n   */\n  track: PropTypes.oneOf(['inverted', 'normal', false]),\n  /**\n   * The value of the slider.\n   * For ranged sliders, provide an array with two values.\n   */\n  value: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.number), PropTypes.number]),\n  /**\n   * Controls when the value label is displayed:\n   *\n   * - `auto` the value label will display when the thumb is hovered or focused.\n   * - `on` will display persistently.\n   * - `off` will never display.\n   * @default 'off'\n   */\n  valueLabelDisplay: PropTypes.oneOf(['auto', 'off', 'on']),\n  /**\n   * The format function the value label's value.\n   *\n   * When a function is provided, it should have the following signature:\n   *\n   * - {number} value The value label's value to format\n   * - {number} index The value label's index to format\n   * @param {any} x\n   * @returns {any}\n   * @default function Identity(x) {\n   *   return x;\n   * }\n   */\n  valueLabelFormat: PropTypes.oneOfType([PropTypes.func, PropTypes.string])\n} : void 0;\nexport default Slider;","import generateUtilityClasses from '@mui/utils/generateUtilityClasses';\nimport generateUtilityClass from '@mui/utils/generateUtilityClass';\nexport function getTooltipUtilityClass(slot) {\n  return generateUtilityClass('MuiTooltip', slot);\n}\nconst tooltipClasses = generateUtilityClasses('MuiTooltip', ['popper', 'popperInteractive', 'popperArrow', 'popperClose', 'tooltip', 'tooltipArrow', 'touch', 'tooltipPlacementLeft', 'tooltipPlacementRight', 'tooltipPlacementTop', 'tooltipPlacementBottom', 'arrow']);\nexport default tooltipClasses;","'use client';\n\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport useTimeout, { Timeout } from '@mui/utils/useTimeout';\nimport elementAcceptingRef from '@mui/utils/elementAcceptingRef';\nimport composeClasses from '@mui/utils/composeClasses';\nimport { useRtl } from '@mui/system/RtlProvider';\nimport isFocusVisible from '@mui/utils/isFocusVisible';\nimport getReactElementRef from '@mui/utils/getReactElementRef';\nimport { styled, useTheme } from \"../zero-styled/index.js\";\nimport memoTheme from \"../utils/memoTheme.js\";\nimport { useDefaultProps } from \"../DefaultPropsProvider/index.js\";\nimport capitalize from \"../utils/capitalize.js\";\nimport Grow from \"../Grow/index.js\";\nimport Popper from \"../Popper/index.js\";\nimport useEventCallback from \"../utils/useEventCallback.js\";\nimport useForkRef from \"../utils/useForkRef.js\";\nimport useId from \"../utils/useId.js\";\nimport useControlled from \"../utils/useControlled.js\";\nimport useSlot from \"../utils/useSlot.js\";\nimport tooltipClasses, { getTooltipUtilityClass } from \"./tooltipClasses.js\";\nimport { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nfunction round(value) {\n  return Math.round(value * 1e5) / 1e5;\n}\nconst useUtilityClasses = ownerState => {\n  const {\n    classes,\n    disableInteractive,\n    arrow,\n    touch,\n    placement\n  } = ownerState;\n  const slots = {\n    popper: ['popper', !disableInteractive && 'popperInteractive', arrow && 'popperArrow'],\n    tooltip: ['tooltip', arrow && 'tooltipArrow', touch && 'touch', `tooltipPlacement${capitalize(placement.split('-')[0])}`],\n    arrow: ['arrow']\n  };\n  return composeClasses(slots, getTooltipUtilityClass, classes);\n};\nconst TooltipPopper = styled(Popper, {\n  name: 'MuiTooltip',\n  slot: 'Popper',\n  overridesResolver: (props, styles) => {\n    const {\n      ownerState\n    } = props;\n    return [styles.popper, !ownerState.disableInteractive && styles.popperInteractive, ownerState.arrow && styles.popperArrow, !ownerState.open && styles.popperClose];\n  }\n})(memoTheme(({\n  theme\n}) => ({\n  zIndex: (theme.vars || theme).zIndex.tooltip,\n  pointerEvents: 'none',\n  variants: [{\n    props: ({\n      ownerState\n    }) => !ownerState.disableInteractive,\n    style: {\n      pointerEvents: 'auto'\n    }\n  }, {\n    props: ({\n      open\n    }) => !open,\n    style: {\n      pointerEvents: 'none'\n    }\n  }, {\n    props: ({\n      ownerState\n    }) => ownerState.arrow,\n    style: {\n      [`&[data-popper-placement*=\"bottom\"] .${tooltipClasses.arrow}`]: {\n        top: 0,\n        marginTop: '-0.71em',\n        '&::before': {\n          transformOrigin: '0 100%'\n        }\n      },\n      [`&[data-popper-placement*=\"top\"] .${tooltipClasses.arrow}`]: {\n        bottom: 0,\n        marginBottom: '-0.71em',\n        '&::before': {\n          transformOrigin: '100% 0'\n        }\n      },\n      [`&[data-popper-placement*=\"right\"] .${tooltipClasses.arrow}`]: {\n        height: '1em',\n        width: '0.71em',\n        '&::before': {\n          transformOrigin: '100% 100%'\n        }\n      },\n      [`&[data-popper-placement*=\"left\"] .${tooltipClasses.arrow}`]: {\n        height: '1em',\n        width: '0.71em',\n        '&::before': {\n          transformOrigin: '0 0'\n        }\n      }\n    }\n  }, {\n    props: ({\n      ownerState\n    }) => ownerState.arrow && !ownerState.isRtl,\n    style: {\n      [`&[data-popper-placement*=\"right\"] .${tooltipClasses.arrow}`]: {\n        left: 0,\n        marginLeft: '-0.71em'\n      }\n    }\n  }, {\n    props: ({\n      ownerState\n    }) => ownerState.arrow && !!ownerState.isRtl,\n    style: {\n      [`&[data-popper-placement*=\"right\"] .${tooltipClasses.arrow}`]: {\n        right: 0,\n        marginRight: '-0.71em'\n      }\n    }\n  }, {\n    props: ({\n      ownerState\n    }) => ownerState.arrow && !ownerState.isRtl,\n    style: {\n      [`&[data-popper-placement*=\"left\"] .${tooltipClasses.arrow}`]: {\n        right: 0,\n        marginRight: '-0.71em'\n      }\n    }\n  }, {\n    props: ({\n      ownerState\n    }) => ownerState.arrow && !!ownerState.isRtl,\n    style: {\n      [`&[data-popper-placement*=\"left\"] .${tooltipClasses.arrow}`]: {\n        left: 0,\n        marginLeft: '-0.71em'\n      }\n    }\n  }]\n})));\nconst TooltipTooltip = styled('div', {\n  name: 'MuiTooltip',\n  slot: 'Tooltip',\n  overridesResolver: (props, styles) => {\n    const {\n      ownerState\n    } = props;\n    return [styles.tooltip, ownerState.touch && styles.touch, ownerState.arrow && styles.tooltipArrow, styles[`tooltipPlacement${capitalize(ownerState.placement.split('-')[0])}`]];\n  }\n})(memoTheme(({\n  theme\n}) => ({\n  backgroundColor: theme.vars ? theme.vars.palette.Tooltip.bg : theme.alpha(theme.palette.grey[700], 0.92),\n  borderRadius: (theme.vars || theme).shape.borderRadius,\n  color: (theme.vars || theme).palette.common.white,\n  fontFamily: theme.typography.fontFamily,\n  padding: '4px 8px',\n  fontSize: theme.typography.pxToRem(11),\n  maxWidth: 300,\n  margin: 2,\n  wordWrap: 'break-word',\n  fontWeight: theme.typography.fontWeightMedium,\n  [`.${tooltipClasses.popper}[data-popper-placement*=\"left\"] &`]: {\n    transformOrigin: 'right center'\n  },\n  [`.${tooltipClasses.popper}[data-popper-placement*=\"right\"] &`]: {\n    transformOrigin: 'left center'\n  },\n  [`.${tooltipClasses.popper}[data-popper-placement*=\"top\"] &`]: {\n    transformOrigin: 'center bottom',\n    marginBottom: '14px'\n  },\n  [`.${tooltipClasses.popper}[data-popper-placement*=\"bottom\"] &`]: {\n    transformOrigin: 'center top',\n    marginTop: '14px'\n  },\n  variants: [{\n    props: ({\n      ownerState\n    }) => ownerState.arrow,\n    style: {\n      position: 'relative',\n      margin: 0\n    }\n  }, {\n    props: ({\n      ownerState\n    }) => ownerState.touch,\n    style: {\n      padding: '8px 16px',\n      fontSize: theme.typography.pxToRem(14),\n      lineHeight: `${round(16 / 14)}em`,\n      fontWeight: theme.typography.fontWeightRegular\n    }\n  }, {\n    props: ({\n      ownerState\n    }) => !ownerState.isRtl,\n    style: {\n      [`.${tooltipClasses.popper}[data-popper-placement*=\"left\"] &`]: {\n        marginRight: '14px'\n      },\n      [`.${tooltipClasses.popper}[data-popper-placement*=\"right\"] &`]: {\n        marginLeft: '14px'\n      }\n    }\n  }, {\n    props: ({\n      ownerState\n    }) => !ownerState.isRtl && ownerState.touch,\n    style: {\n      [`.${tooltipClasses.popper}[data-popper-placement*=\"left\"] &`]: {\n        marginRight: '24px'\n      },\n      [`.${tooltipClasses.popper}[data-popper-placement*=\"right\"] &`]: {\n        marginLeft: '24px'\n      }\n    }\n  }, {\n    props: ({\n      ownerState\n    }) => !!ownerState.isRtl,\n    style: {\n      [`.${tooltipClasses.popper}[data-popper-placement*=\"left\"] &`]: {\n        marginLeft: '14px'\n      },\n      [`.${tooltipClasses.popper}[data-popper-placement*=\"right\"] &`]: {\n        marginRight: '14px'\n      }\n    }\n  }, {\n    props: ({\n      ownerState\n    }) => !!ownerState.isRtl && ownerState.touch,\n    style: {\n      [`.${tooltipClasses.popper}[data-popper-placement*=\"left\"] &`]: {\n        marginLeft: '24px'\n      },\n      [`.${tooltipClasses.popper}[data-popper-placement*=\"right\"] &`]: {\n        marginRight: '24px'\n      }\n    }\n  }, {\n    props: ({\n      ownerState\n    }) => ownerState.touch,\n    style: {\n      [`.${tooltipClasses.popper}[data-popper-placement*=\"top\"] &`]: {\n        marginBottom: '24px'\n      }\n    }\n  }, {\n    props: ({\n      ownerState\n    }) => ownerState.touch,\n    style: {\n      [`.${tooltipClasses.popper}[data-popper-placement*=\"bottom\"] &`]: {\n        marginTop: '24px'\n      }\n    }\n  }]\n})));\nconst TooltipArrow = styled('span', {\n  name: 'MuiTooltip',\n  slot: 'Arrow'\n})(memoTheme(({\n  theme\n}) => ({\n  overflow: 'hidden',\n  position: 'absolute',\n  width: '1em',\n  height: '0.71em' /* = width / sqrt(2) = (length of the hypotenuse) */,\n  boxSizing: 'border-box',\n  color: theme.vars ? theme.vars.palette.Tooltip.bg : theme.alpha(theme.palette.grey[700], 0.9),\n  '&::before': {\n    content: '\"\"',\n    margin: 'auto',\n    display: 'block',\n    width: '100%',\n    height: '100%',\n    backgroundColor: 'currentColor',\n    transform: 'rotate(45deg)'\n  }\n})));\nlet hystersisOpen = false;\nconst hystersisTimer = new Timeout();\nlet cursorPosition = {\n  x: 0,\n  y: 0\n};\nexport function testReset() {\n  hystersisOpen = false;\n  hystersisTimer.clear();\n}\nfunction composeEventHandler(handler, eventHandler) {\n  return (event, ...params) => {\n    if (eventHandler) {\n      eventHandler(event, ...params);\n    }\n    handler(event, ...params);\n  };\n}\n\n// TODO v6: Remove PopperComponent, PopperProps, TransitionComponent and TransitionProps.\nconst Tooltip = /*#__PURE__*/React.forwardRef(function Tooltip(inProps, ref) {\n  const props = useDefaultProps({\n    props: inProps,\n    name: 'MuiTooltip'\n  });\n  const {\n    arrow = false,\n    children: childrenProp,\n    classes: classesProp,\n    components = {},\n    componentsProps = {},\n    describeChild = false,\n    disableFocusListener = false,\n    disableHoverListener = false,\n    disableInteractive: disableInteractiveProp = false,\n    disableTouchListener = false,\n    enterDelay = 100,\n    enterNextDelay = 0,\n    enterTouchDelay = 700,\n    followCursor = false,\n    id: idProp,\n    leaveDelay = 0,\n    leaveTouchDelay = 1500,\n    onClose,\n    onOpen,\n    open: openProp,\n    placement = 'bottom',\n    PopperComponent: PopperComponentProp,\n    PopperProps = {},\n    slotProps = {},\n    slots = {},\n    title,\n    TransitionComponent: TransitionComponentProp,\n    TransitionProps,\n    ...other\n  } = props;\n\n  // to prevent runtime errors, developers will need to provide a child as a React element anyway.\n  const children = /*#__PURE__*/React.isValidElement(childrenProp) ? childrenProp : /*#__PURE__*/_jsx(\"span\", {\n    children: childrenProp\n  });\n  const theme = useTheme();\n  const isRtl = useRtl();\n  const [childNode, setChildNode] = React.useState();\n  const [arrowRef, setArrowRef] = React.useState(null);\n  const ignoreNonTouchEvents = React.useRef(false);\n  const disableInteractive = disableInteractiveProp || followCursor;\n  const closeTimer = useTimeout();\n  const enterTimer = useTimeout();\n  const leaveTimer = useTimeout();\n  const touchTimer = useTimeout();\n  const [openState, setOpenState] = useControlled({\n    controlled: openProp,\n    default: false,\n    name: 'Tooltip',\n    state: 'open'\n  });\n  let open = openState;\n  if (process.env.NODE_ENV !== 'production') {\n    // TODO: uncomment once we enable eslint-plugin-react-compiler // eslint-disable-next-line react-compiler/react-compiler\n    // eslint-disable-next-line react-hooks/rules-of-hooks -- process.env never changes\n    const {\n      current: isControlled\n    } = React.useRef(openProp !== undefined);\n\n    // TODO: uncomment once we enable eslint-plugin-react-compiler // eslint-disable-next-line react-compiler/react-compiler\n    // eslint-disable-next-line react-hooks/rules-of-hooks -- process.env never changes\n    React.useEffect(() => {\n      if (childNode && childNode.disabled && !isControlled && title !== '' && childNode.tagName.toLowerCase() === 'button') {\n        console.warn(['MUI: You are providing a disabled `button` child to the Tooltip component.', 'A disabled element does not fire events.', \"Tooltip needs to listen to the child element's events to display the title.\", '', 'Add a simple wrapper element, such as a `span`.'].join('\\n'));\n      }\n    }, [title, childNode, isControlled]);\n  }\n  const id = useId(idProp);\n  const prevUserSelect = React.useRef();\n  const stopTouchInteraction = useEventCallback(() => {\n    if (prevUserSelect.current !== undefined) {\n      document.body.style.WebkitUserSelect = prevUserSelect.current;\n      prevUserSelect.current = undefined;\n    }\n    touchTimer.clear();\n  });\n  React.useEffect(() => stopTouchInteraction, [stopTouchInteraction]);\n  const handleOpen = event => {\n    hystersisTimer.clear();\n    hystersisOpen = true;\n\n    // The mouseover event will trigger for every nested element in the tooltip.\n    // We can skip rerendering when the tooltip is already open.\n    // We are using the mouseover event instead of the mouseenter event to fix a hide/show issue.\n    setOpenState(true);\n    if (onOpen && !open) {\n      onOpen(event);\n    }\n  };\n  const handleClose = useEventCallback(\n  /**\n   * @param {React.SyntheticEvent | Event} event\n   */\n  event => {\n    hystersisTimer.start(800 + leaveDelay, () => {\n      hystersisOpen = false;\n    });\n    setOpenState(false);\n    if (onClose && open) {\n      onClose(event);\n    }\n    closeTimer.start(theme.transitions.duration.shortest, () => {\n      ignoreNonTouchEvents.current = false;\n    });\n  });\n  const handleMouseOver = event => {\n    if (ignoreNonTouchEvents.current && event.type !== 'touchstart') {\n      return;\n    }\n\n    // Remove the title ahead of time.\n    // We don't want to wait for the next render commit.\n    // We would risk displaying two tooltips at the same time (native + this one).\n    if (childNode) {\n      childNode.removeAttribute('title');\n    }\n    enterTimer.clear();\n    leaveTimer.clear();\n    if (enterDelay || hystersisOpen && enterNextDelay) {\n      enterTimer.start(hystersisOpen ? enterNextDelay : enterDelay, () => {\n        handleOpen(event);\n      });\n    } else {\n      handleOpen(event);\n    }\n  };\n  const handleMouseLeave = event => {\n    enterTimer.clear();\n    leaveTimer.start(leaveDelay, () => {\n      handleClose(event);\n    });\n  };\n  const [, setChildIsFocusVisible] = React.useState(false);\n  const handleBlur = event => {\n    // Needed for https://github.com/mui/material-ui/issues/45373\n    const target = event?.target ?? childNode;\n    if (!target || !isFocusVisible(target)) {\n      setChildIsFocusVisible(false);\n\n      // InputBase can call onBlur() without an event when the input becomes disabled.\n      // Tooltip must not assume an event object exists.\n      const closeEvent = event ?? new Event('blur');\n\n      // `new Event('blur')` has `target/currentTarget === null`, but Tooltip's close logic\n      // (and user callbacks like onClose) may expect them to reference the anchor element.\n      if (!event && target) {\n        Object.defineProperty(closeEvent, 'target', {\n          value: target\n        });\n        Object.defineProperty(closeEvent, 'currentTarget', {\n          value: target\n        });\n      }\n      handleMouseLeave(closeEvent);\n    }\n  };\n  const handleFocus = event => {\n    // Workaround for https://github.com/facebook/react/issues/7769\n    // The autoFocus of React might trigger the event before the componentDidMount.\n    // We need to account for this eventuality.\n    if (!childNode) {\n      setChildNode(event.currentTarget);\n    }\n    if (isFocusVisible(event.target)) {\n      setChildIsFocusVisible(true);\n      handleMouseOver(event);\n    }\n  };\n  const detectTouchStart = event => {\n    ignoreNonTouchEvents.current = true;\n    const childrenProps = children.props;\n    if (childrenProps.onTouchStart) {\n      childrenProps.onTouchStart(event);\n    }\n  };\n  const handleTouchStart = event => {\n    detectTouchStart(event);\n    leaveTimer.clear();\n    closeTimer.clear();\n    stopTouchInteraction();\n    prevUserSelect.current = document.body.style.WebkitUserSelect;\n    // Prevent iOS text selection on long-tap.\n    document.body.style.WebkitUserSelect = 'none';\n    touchTimer.start(enterTouchDelay, () => {\n      document.body.style.WebkitUserSelect = prevUserSelect.current;\n      handleMouseOver(event);\n    });\n  };\n  const handleTouchEnd = event => {\n    if (children.props.onTouchEnd) {\n      children.props.onTouchEnd(event);\n    }\n    stopTouchInteraction();\n    leaveTimer.start(leaveTouchDelay, () => {\n      handleClose(event);\n    });\n  };\n  React.useEffect(() => {\n    if (!open) {\n      return undefined;\n    }\n\n    /**\n     * @param {KeyboardEvent} nativeEvent\n     */\n    function handleKeyDown(nativeEvent) {\n      if (nativeEvent.key === 'Escape') {\n        handleClose(nativeEvent);\n      }\n    }\n    document.addEventListener('keydown', handleKeyDown);\n    return () => {\n      document.removeEventListener('keydown', handleKeyDown);\n    };\n  }, [handleClose, open]);\n  const handleRef = useForkRef(getReactElementRef(children), setChildNode, ref);\n\n  // There is no point in displaying an empty tooltip.\n  // So we exclude all falsy values, except 0, which is valid.\n  if (!title && title !== 0) {\n    open = false;\n  }\n  const popperRef = React.useRef();\n  const handleMouseMove = event => {\n    const childrenProps = children.props;\n    if (childrenProps.onMouseMove) {\n      childrenProps.onMouseMove(event);\n    }\n    cursorPosition = {\n      x: event.clientX,\n      y: event.clientY\n    };\n    if (popperRef.current) {\n      popperRef.current.update();\n    }\n  };\n  const nameOrDescProps = {};\n  const titleIsString = typeof title === 'string';\n  if (describeChild) {\n    nameOrDescProps.title = !open && titleIsString && !disableHoverListener ? title : null;\n    nameOrDescProps['aria-describedby'] = open ? id : null;\n  } else {\n    nameOrDescProps['aria-label'] = titleIsString ? title : null;\n    nameOrDescProps['aria-labelledby'] = open && !titleIsString ? id : null;\n  }\n  const childrenProps = {\n    ...nameOrDescProps,\n    ...other,\n    ...children.props,\n    className: clsx(other.className, children.props.className),\n    onTouchStart: detectTouchStart,\n    ref: handleRef,\n    ...(followCursor ? {\n      onMouseMove: handleMouseMove\n    } : {})\n  };\n  if (process.env.NODE_ENV !== 'production') {\n    childrenProps['data-mui-internal-clone-element'] = true;\n\n    // TODO: uncomment once we enable eslint-plugin-react-compiler // eslint-disable-next-line react-compiler/react-compiler\n    // eslint-disable-next-line react-hooks/rules-of-hooks -- process.env never changes\n    React.useEffect(() => {\n      if (childNode && !childNode.getAttribute('data-mui-internal-clone-element')) {\n        console.error(['MUI: The `children` component of the Tooltip is not forwarding its props correctly.', 'Please make sure that props are spread on the same element that the ref is applied to.'].join('\\n'));\n      }\n    }, [childNode]);\n  }\n  const interactiveWrapperListeners = {};\n  if (!disableTouchListener) {\n    childrenProps.onTouchStart = handleTouchStart;\n    childrenProps.onTouchEnd = handleTouchEnd;\n  }\n  if (!disableHoverListener) {\n    childrenProps.onMouseOver = composeEventHandler(handleMouseOver, childrenProps.onMouseOver);\n    childrenProps.onMouseLeave = composeEventHandler(handleMouseLeave, childrenProps.onMouseLeave);\n    if (!disableInteractive) {\n      interactiveWrapperListeners.onMouseOver = handleMouseOver;\n      interactiveWrapperListeners.onMouseLeave = handleMouseLeave;\n    }\n  }\n  if (!disableFocusListener) {\n    childrenProps.onFocus = composeEventHandler(handleFocus, childrenProps.onFocus);\n    childrenProps.onBlur = composeEventHandler(handleBlur, childrenProps.onBlur);\n    if (!disableInteractive) {\n      interactiveWrapperListeners.onFocus = handleFocus;\n      interactiveWrapperListeners.onBlur = handleBlur;\n    }\n  }\n  if (process.env.NODE_ENV !== 'production') {\n    if (children.props.title) {\n      console.error(['MUI: You have provided a `title` prop to the child of <Tooltip />.', `Remove this title prop \\`${children.props.title}\\` or the Tooltip component.`].join('\\n'));\n    }\n  }\n  const ownerState = {\n    ...props,\n    isRtl,\n    arrow,\n    disableInteractive,\n    placement,\n    PopperComponentProp,\n    touch: ignoreNonTouchEvents.current\n  };\n  const resolvedPopperProps = typeof slotProps.popper === 'function' ? slotProps.popper(ownerState) : slotProps.popper;\n  const popperOptions = React.useMemo(() => {\n    let tooltipModifiers = [{\n      name: 'arrow',\n      enabled: Boolean(arrowRef),\n      options: {\n        element: arrowRef,\n        padding: 4\n      }\n    }];\n    if (PopperProps.popperOptions?.modifiers) {\n      tooltipModifiers = tooltipModifiers.concat(PopperProps.popperOptions.modifiers);\n    }\n    if (resolvedPopperProps?.popperOptions?.modifiers) {\n      tooltipModifiers = tooltipModifiers.concat(resolvedPopperProps.popperOptions.modifiers);\n    }\n    return {\n      ...PopperProps.popperOptions,\n      ...resolvedPopperProps?.popperOptions,\n      modifiers: tooltipModifiers\n    };\n  }, [arrowRef, PopperProps.popperOptions, resolvedPopperProps?.popperOptions]);\n  const classes = useUtilityClasses(ownerState);\n  const resolvedTransitionProps = typeof slotProps.transition === 'function' ? slotProps.transition(ownerState) : slotProps.transition;\n  const externalForwardedProps = {\n    slots: {\n      popper: components.Popper,\n      transition: components.Transition ?? TransitionComponentProp,\n      tooltip: components.Tooltip,\n      arrow: components.Arrow,\n      ...slots\n    },\n    slotProps: {\n      arrow: slotProps.arrow ?? componentsProps.arrow,\n      popper: {\n        ...PopperProps,\n        ...(resolvedPopperProps ?? componentsProps.popper)\n      },\n      // resolvedPopperProps can be spread because it's already an object\n      tooltip: slotProps.tooltip ?? componentsProps.tooltip,\n      transition: {\n        ...TransitionProps,\n        ...(resolvedTransitionProps ?? componentsProps.transition)\n      }\n    }\n  };\n  const [PopperSlot, popperSlotProps] = useSlot('popper', {\n    elementType: TooltipPopper,\n    externalForwardedProps,\n    ownerState,\n    className: clsx(classes.popper, PopperProps?.className)\n  });\n  const [TransitionSlot, transitionSlotProps] = useSlot('transition', {\n    elementType: Grow,\n    externalForwardedProps,\n    ownerState\n  });\n  const [TooltipSlot, tooltipSlotProps] = useSlot('tooltip', {\n    elementType: TooltipTooltip,\n    className: classes.tooltip,\n    externalForwardedProps,\n    ownerState\n  });\n  const [ArrowSlot, arrowSlotProps] = useSlot('arrow', {\n    elementType: TooltipArrow,\n    className: classes.arrow,\n    externalForwardedProps,\n    ownerState,\n    ref: setArrowRef\n  });\n  return /*#__PURE__*/_jsxs(React.Fragment, {\n    children: [/*#__PURE__*/React.cloneElement(children, childrenProps), /*#__PURE__*/_jsx(PopperSlot, {\n      as: PopperComponentProp ?? Popper,\n      placement: placement,\n      anchorEl: followCursor ? {\n        getBoundingClientRect: () => ({\n          top: cursorPosition.y,\n          left: cursorPosition.x,\n          right: cursorPosition.x,\n          bottom: cursorPosition.y,\n          width: 0,\n          height: 0\n        })\n      } : childNode,\n      popperRef: popperRef,\n      open: childNode ? open : false,\n      id: id,\n      transition: true,\n      ...interactiveWrapperListeners,\n      ...popperSlotProps,\n      popperOptions: popperOptions,\n      children: ({\n        TransitionProps: TransitionPropsInner\n      }) => /*#__PURE__*/_jsx(TransitionSlot, {\n        timeout: theme.transitions.duration.shorter,\n        ...TransitionPropsInner,\n        ...transitionSlotProps,\n        children: /*#__PURE__*/_jsxs(TooltipSlot, {\n          ...tooltipSlotProps,\n          children: [title, arrow ? /*#__PURE__*/_jsx(ArrowSlot, {\n            ...arrowSlotProps\n          }) : null]\n        })\n      })\n    })]\n  });\n});\nprocess.env.NODE_ENV !== \"production\" ? Tooltip.propTypes /* remove-proptypes */ = {\n  // ┌────────────────────────────── Warning ──────────────────────────────┐\n  // │ These PropTypes are generated from the TypeScript type definitions. │\n  // │    To update them, edit the d.ts file and run `pnpm proptypes`.     │\n  // └─────────────────────────────────────────────────────────────────────┘\n  /**\n   * If `true`, adds an arrow to the tooltip.\n   * @default false\n   */\n  arrow: PropTypes.bool,\n  /**\n   * Tooltip reference element.\n   */\n  children: elementAcceptingRef.isRequired,\n  /**\n   * Override or extend the styles applied to the component.\n   */\n  classes: PropTypes.object,\n  /**\n   * @ignore\n   */\n  className: PropTypes.string,\n  /**\n   * The components used for each slot inside.\n   *\n   * @deprecated use the `slots` prop instead. This prop will be removed in a future major release. See [Migrating from deprecated APIs](https://mui.com/material-ui/migration/migrating-from-deprecated-apis/) for more details.\n   *\n   * @default {}\n   */\n  components: PropTypes.shape({\n    Arrow: PropTypes.elementType,\n    Popper: PropTypes.elementType,\n    Tooltip: PropTypes.elementType,\n    Transition: PropTypes.elementType\n  }),\n  /**\n   * The extra props for the slot components.\n   * You can override the existing props or add new ones.\n   *\n   * @deprecated use the `slotProps` prop instead. This prop will be removed in a future major release. See [Migrating from deprecated APIs](https://mui.com/material-ui/migration/migrating-from-deprecated-apis/) for more details.\n   *\n   * @default {}\n   */\n  componentsProps: PropTypes.shape({\n    arrow: PropTypes.object,\n    popper: PropTypes.object,\n    tooltip: PropTypes.object,\n    transition: PropTypes.object\n  }),\n  /**\n   * Set to `true` if the `title` acts as an accessible description.\n   * By default the `title` acts as an accessible label for the child.\n   * @default false\n   */\n  describeChild: PropTypes.bool,\n  /**\n   * Do not respond to focus-visible events.\n   * @default false\n   */\n  disableFocusListener: PropTypes.bool,\n  /**\n   * Do not respond to hover events.\n   * @default false\n   */\n  disableHoverListener: PropTypes.bool,\n  /**\n   * Makes a tooltip not interactive, i.e. it will close when the user\n   * hovers over the tooltip before the `leaveDelay` is expired.\n   * @default false\n   */\n  disableInteractive: PropTypes.bool,\n  /**\n   * Do not respond to long press touch events.\n   * @default false\n   */\n  disableTouchListener: PropTypes.bool,\n  /**\n   * The number of milliseconds to wait before showing the tooltip.\n   * This prop won't impact the enter touch delay (`enterTouchDelay`).\n   * @default 100\n   */\n  enterDelay: PropTypes.number,\n  /**\n   * The number of milliseconds to wait before showing the tooltip when one was already recently opened.\n   * @default 0\n   */\n  enterNextDelay: PropTypes.number,\n  /**\n   * The number of milliseconds a user must touch the element before showing the tooltip.\n   * @default 700\n   */\n  enterTouchDelay: PropTypes.number,\n  /**\n   * If `true`, the tooltip follow the cursor over the wrapped element.\n   * @default false\n   */\n  followCursor: PropTypes.bool,\n  /**\n   * This prop is used to help implement the accessibility logic.\n   * If you don't provide this prop. It falls back to a randomly generated id.\n   */\n  id: PropTypes.string,\n  /**\n   * The number of milliseconds to wait before hiding the tooltip.\n   * This prop won't impact the leave touch delay (`leaveTouchDelay`).\n   * @default 0\n   */\n  leaveDelay: PropTypes.number,\n  /**\n   * The number of milliseconds after the user stops touching an element before hiding the tooltip.\n   * @default 1500\n   */\n  leaveTouchDelay: PropTypes.number,\n  /**\n   * Callback fired when the component requests to be closed.\n   *\n   * @param {React.SyntheticEvent} event The event source of the callback.\n   */\n  onClose: PropTypes.func,\n  /**\n   * Callback fired when the component requests to be open.\n   *\n   * @param {React.SyntheticEvent} event The event source of the callback.\n   */\n  onOpen: PropTypes.func,\n  /**\n   * If `true`, the component is shown.\n   */\n  open: PropTypes.bool,\n  /**\n   * Tooltip placement.\n   * @default 'bottom'\n   */\n  placement: PropTypes.oneOf(['auto-end', 'auto-start', 'auto', 'bottom-end', 'bottom-start', 'bottom', 'left-end', 'left-start', 'left', 'right-end', 'right-start', 'right', 'top-end', 'top-start', 'top']),\n  /**\n   * The component used for the popper.\n   * @deprecated use the `slots.popper` prop instead. This prop will be removed in a future major release. See [Migrating from deprecated APIs](https://mui.com/material-ui/migration/migrating-from-deprecated-apis/) for more details.\n   */\n  PopperComponent: PropTypes.elementType,\n  /**\n   * Props applied to the [`Popper`](https://mui.com/material-ui/api/popper/) element.\n   * @deprecated use the `slotProps.popper` prop instead. This prop will be removed in a future major release. See [Migrating from deprecated APIs](https://mui.com/material-ui/migration/migrating-from-deprecated-apis/) for more details.\n   * @default {}\n   */\n  PopperProps: PropTypes.object,\n  /**\n   * The props used for each slot inside.\n   * @default {}\n   */\n  slotProps: PropTypes.shape({\n    arrow: PropTypes.oneOfType([PropTypes.func, PropTypes.object]),\n    popper: PropTypes.oneOfType([PropTypes.func, PropTypes.object]),\n    tooltip: PropTypes.oneOfType([PropTypes.func, PropTypes.object]),\n    transition: PropTypes.oneOfType([PropTypes.func, PropTypes.object])\n  }),\n  /**\n   * The components used for each slot inside.\n   * @default {}\n   */\n  slots: PropTypes.shape({\n    arrow: PropTypes.elementType,\n    popper: PropTypes.elementType,\n    tooltip: PropTypes.elementType,\n    transition: PropTypes.elementType\n  }),\n  /**\n   * The system prop that allows defining system overrides as well as additional CSS styles.\n   */\n  sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object]),\n  /**\n   * Tooltip title. Zero-length titles string, undefined, null and false are never displayed.\n   */\n  title: PropTypes.node,\n  /**\n   * The component used for the transition.\n   * [Follow this guide](https://mui.com/material-ui/transitions/#transitioncomponent-prop) to learn more about the requirements for this component.\n   * @deprecated use the `slots.transition` prop instead. This prop will be removed in a future major release. See [Migrating from deprecated APIs](https://mui.com/material-ui/migration/migrating-from-deprecated-apis/) for more details.\n   */\n  TransitionComponent: PropTypes.elementType,\n  /**\n   * Props applied to the transition element.\n   * By default, the element is based on this [`Transition`](https://reactcommunity.org/react-transition-group/transition/) component.\n   * @deprecated use the `slotProps.transition` prop instead. This prop will be removed in a future major release. See [Migrating from deprecated APIs](https://mui.com/material-ui/migration/migrating-from-deprecated-apis/) for more details.\n   * @default {}\n   */\n  TransitionProps: PropTypes.object\n} : void 0;\nexport default Tooltip;","import generateUtilityClasses from '@mui/utils/generateUtilityClasses';\nimport generateUtilityClass from '@mui/utils/generateUtilityClass';\nexport function getSwitchUtilityClass(slot) {\n  return generateUtilityClass('MuiSwitch', slot);\n}\nconst switchClasses = generateUtilityClasses('MuiSwitch', ['root', 'edgeStart', 'edgeEnd', 'switchBase', 'colorPrimary', 'colorSecondary', 'sizeSmall', 'sizeMedium', 'checked', 'disabled', 'input', 'thumb', 'track']);\nexport default switchClasses;","'use client';\n\n// @inheritedComponent IconButton\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport refType from '@mui/utils/refType';\nimport composeClasses from '@mui/utils/composeClasses';\nimport capitalize from \"../utils/capitalize.js\";\nimport createSimplePaletteValueFilter from \"../utils/createSimplePaletteValueFilter.js\";\nimport SwitchBase from \"../internal/SwitchBase.js\";\nimport { styled } from \"../zero-styled/index.js\";\nimport memoTheme from \"../utils/memoTheme.js\";\nimport { useDefaultProps } from \"../DefaultPropsProvider/index.js\";\nimport switchClasses, { getSwitchUtilityClass } from \"./switchClasses.js\";\nimport useSlot from \"../utils/useSlot.js\";\nimport { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nconst useUtilityClasses = ownerState => {\n  const {\n    classes,\n    edge,\n    size,\n    color,\n    checked,\n    disabled\n  } = ownerState;\n  const slots = {\n    root: ['root', edge && `edge${capitalize(edge)}`, `size${capitalize(size)}`],\n    switchBase: ['switchBase', `color${capitalize(color)}`, checked && 'checked', disabled && 'disabled'],\n    thumb: ['thumb'],\n    track: ['track'],\n    input: ['input']\n  };\n  const composedClasses = composeClasses(slots, getSwitchUtilityClass, classes);\n  return {\n    ...classes,\n    // forward the disabled and checked classes to the SwitchBase\n    ...composedClasses\n  };\n};\nconst SwitchRoot = styled('span', {\n  name: 'MuiSwitch',\n  slot: 'Root',\n  overridesResolver: (props, styles) => {\n    const {\n      ownerState\n    } = props;\n    return [styles.root, ownerState.edge && styles[`edge${capitalize(ownerState.edge)}`], styles[`size${capitalize(ownerState.size)}`]];\n  }\n})({\n  display: 'inline-flex',\n  width: 34 + 12 * 2,\n  height: 14 + 12 * 2,\n  overflow: 'hidden',\n  padding: 12,\n  boxSizing: 'border-box',\n  position: 'relative',\n  flexShrink: 0,\n  zIndex: 0,\n  // Reset the stacking context.\n  verticalAlign: 'middle',\n  // For correct alignment with the text.\n  '@media print': {\n    colorAdjust: 'exact'\n  },\n  variants: [{\n    props: {\n      edge: 'start'\n    },\n    style: {\n      marginLeft: -8\n    }\n  }, {\n    props: {\n      edge: 'end'\n    },\n    style: {\n      marginRight: -8\n    }\n  }, {\n    props: {\n      size: 'small'\n    },\n    style: {\n      width: 40,\n      height: 24,\n      padding: 7,\n      [`& .${switchClasses.thumb}`]: {\n        width: 16,\n        height: 16\n      },\n      [`& .${switchClasses.switchBase}`]: {\n        padding: 4,\n        [`&.${switchClasses.checked}`]: {\n          transform: 'translateX(16px)'\n        }\n      }\n    }\n  }]\n});\nconst SwitchSwitchBase = styled(SwitchBase, {\n  name: 'MuiSwitch',\n  slot: 'SwitchBase',\n  overridesResolver: (props, styles) => {\n    const {\n      ownerState\n    } = props;\n    return [styles.switchBase, {\n      [`& .${switchClasses.input}`]: styles.input\n    }, ownerState.color !== 'default' && styles[`color${capitalize(ownerState.color)}`]];\n  }\n})(memoTheme(({\n  theme\n}) => ({\n  position: 'absolute',\n  top: 0,\n  left: 0,\n  zIndex: 1,\n  // Render above the focus ripple.\n  color: theme.vars ? theme.vars.palette.Switch.defaultColor : `${theme.palette.mode === 'light' ? theme.palette.common.white : theme.palette.grey[300]}`,\n  transition: theme.transitions.create(['left', 'transform'], {\n    duration: theme.transitions.duration.shortest\n  }),\n  [`&.${switchClasses.checked}`]: {\n    transform: 'translateX(20px)'\n  },\n  [`&.${switchClasses.disabled}`]: {\n    color: theme.vars ? theme.vars.palette.Switch.defaultDisabledColor : `${theme.palette.mode === 'light' ? theme.palette.grey[100] : theme.palette.grey[600]}`\n  },\n  [`&.${switchClasses.checked} + .${switchClasses.track}`]: {\n    opacity: 0.5\n  },\n  [`&.${switchClasses.disabled} + .${switchClasses.track}`]: {\n    opacity: theme.vars ? theme.vars.opacity.switchTrackDisabled : `${theme.palette.mode === 'light' ? 0.12 : 0.2}`\n  },\n  [`& .${switchClasses.input}`]: {\n    left: '-100%',\n    width: '300%'\n  }\n})), memoTheme(({\n  theme\n}) => ({\n  '&:hover': {\n    backgroundColor: theme.alpha((theme.vars || theme).palette.action.active, (theme.vars || theme).palette.action.hoverOpacity),\n    // Reset on touch devices, it doesn't add specificity\n    '@media (hover: none)': {\n      backgroundColor: 'transparent'\n    }\n  },\n  variants: [...Object.entries(theme.palette).filter(createSimplePaletteValueFilter(['light'])) // check all the used fields in the style below\n  .map(([color]) => ({\n    props: {\n      color\n    },\n    style: {\n      [`&.${switchClasses.checked}`]: {\n        color: (theme.vars || theme).palette[color].main,\n        '&:hover': {\n          backgroundColor: theme.alpha((theme.vars || theme).palette[color].main, (theme.vars || theme).palette.action.hoverOpacity),\n          '@media (hover: none)': {\n            backgroundColor: 'transparent'\n          }\n        },\n        [`&.${switchClasses.disabled}`]: {\n          color: theme.vars ? theme.vars.palette.Switch[`${color}DisabledColor`] : `${theme.palette.mode === 'light' ? theme.lighten(theme.palette[color].main, 0.62) : theme.darken(theme.palette[color].main, 0.55)}`\n        }\n      },\n      [`&.${switchClasses.checked} + .${switchClasses.track}`]: {\n        backgroundColor: (theme.vars || theme).palette[color].main\n      }\n    }\n  }))]\n})));\nconst SwitchTrack = styled('span', {\n  name: 'MuiSwitch',\n  slot: 'Track'\n})(memoTheme(({\n  theme\n}) => ({\n  height: '100%',\n  width: '100%',\n  borderRadius: 14 / 2,\n  boxSizing: 'border-box',\n  border: '1px solid transparent',\n  zIndex: -1,\n  transition: theme.transitions.create(['opacity', 'background-color'], {\n    duration: theme.transitions.duration.shortest\n  }),\n  backgroundColor: theme.vars ? theme.vars.palette.common.onBackground : `${theme.palette.mode === 'light' ? theme.palette.common.black : theme.palette.common.white}`,\n  opacity: theme.vars ? theme.vars.opacity.switchTrack : `${theme.palette.mode === 'light' ? 0.38 : 0.3}`\n})));\nconst SwitchThumb = styled('span', {\n  name: 'MuiSwitch',\n  slot: 'Thumb'\n})(memoTheme(({\n  theme\n}) => ({\n  boxShadow: (theme.vars || theme).shadows[1],\n  backgroundColor: 'currentColor',\n  boxSizing: 'border-box',\n  border: '1px solid transparent',\n  width: 20,\n  height: 20,\n  borderRadius: '50%'\n})));\nconst Switch = /*#__PURE__*/React.forwardRef(function Switch(inProps, ref) {\n  const props = useDefaultProps({\n    props: inProps,\n    name: 'MuiSwitch'\n  });\n  const {\n    className,\n    color = 'primary',\n    edge = false,\n    size = 'medium',\n    sx,\n    slots = {},\n    slotProps = {},\n    ...other\n  } = props;\n  const ownerState = {\n    ...props,\n    color,\n    edge,\n    size\n  };\n  const classes = useUtilityClasses(ownerState);\n  const externalForwardedProps = {\n    slots,\n    slotProps\n  };\n  const [RootSlot, rootSlotProps] = useSlot('root', {\n    className: clsx(classes.root, className),\n    elementType: SwitchRoot,\n    externalForwardedProps,\n    ownerState,\n    additionalProps: {\n      sx\n    }\n  });\n  const [ThumbSlot, thumbSlotProps] = useSlot('thumb', {\n    className: classes.thumb,\n    elementType: SwitchThumb,\n    externalForwardedProps,\n    ownerState\n  });\n  const icon = /*#__PURE__*/_jsx(ThumbSlot, {\n    ...thumbSlotProps\n  });\n  const [TrackSlot, trackSlotProps] = useSlot('track', {\n    className: classes.track,\n    elementType: SwitchTrack,\n    externalForwardedProps,\n    ownerState\n  });\n  return /*#__PURE__*/_jsxs(RootSlot, {\n    ...rootSlotProps,\n    children: [/*#__PURE__*/_jsx(SwitchSwitchBase, {\n      type: \"checkbox\",\n      icon: icon,\n      checkedIcon: icon,\n      ref: ref,\n      ownerState: ownerState,\n      ...other,\n      classes: {\n        ...classes,\n        root: classes.switchBase\n      },\n      slots: {\n        ...(slots.switchBase && {\n          root: slots.switchBase\n        }),\n        ...(slots.input && {\n          input: slots.input\n        })\n      },\n      slotProps: {\n        ...(slotProps.switchBase && {\n          root: typeof slotProps.switchBase === 'function' ? slotProps.switchBase(ownerState) : slotProps.switchBase\n        }),\n        input: {\n          role: 'switch'\n        },\n        ...(slotProps.input && {\n          input: typeof slotProps.input === 'function' ? slotProps.input(ownerState) : slotProps.input\n        })\n      }\n    }), /*#__PURE__*/_jsx(TrackSlot, {\n      ...trackSlotProps\n    })]\n  });\n});\nprocess.env.NODE_ENV !== \"production\" ? Switch.propTypes /* remove-proptypes */ = {\n  // ┌────────────────────────────── Warning ──────────────────────────────┐\n  // │ These PropTypes are generated from the TypeScript type definitions. │\n  // │    To update them, edit the d.ts file and run `pnpm proptypes`.     │\n  // └─────────────────────────────────────────────────────────────────────┘\n  /**\n   * If `true`, the component is checked.\n   */\n  checked: PropTypes.bool,\n  /**\n   * The icon to display when the component is checked.\n   */\n  checkedIcon: PropTypes.node,\n  /**\n   * Override or extend the styles applied to the component.\n   */\n  classes: PropTypes.object,\n  /**\n   * @ignore\n   */\n  className: PropTypes.string,\n  /**\n   * The color of the component.\n   * It supports both default and custom theme colors, which can be added as shown in the\n   * [palette customization guide](https://mui.com/material-ui/customization/palette/#custom-colors).\n   * @default 'primary'\n   */\n  color: PropTypes /* @typescript-to-proptypes-ignore */.oneOfType([PropTypes.oneOf(['default', 'primary', 'secondary', 'error', 'info', 'success', 'warning']), PropTypes.string]),\n  /**\n   * The default checked state. Use when the component is not controlled.\n   */\n  defaultChecked: PropTypes.bool,\n  /**\n   * If `true`, the component is disabled.\n   */\n  disabled: PropTypes.bool,\n  /**\n   * If `true`, the ripple effect is disabled.\n   * @default false\n   */\n  disableRipple: PropTypes.bool,\n  /**\n   * If given, uses a negative margin to counteract the padding on one\n   * side (this is often helpful for aligning the left or right\n   * side of the icon with content above or below, without ruining the border\n   * size and shape).\n   * @default false\n   */\n  edge: PropTypes.oneOf(['end', 'start', false]),\n  /**\n   * The icon to display when the component is unchecked.\n   */\n  icon: PropTypes.node,\n  /**\n   * The id of the `input` element.\n   */\n  id: PropTypes.string,\n  /**\n   * [Attributes](https://developer.mozilla.org/en-US/docs/Web/HTML/Reference/Elements/input#attributes) applied to the `input` element.\n   * @deprecated Use `slotProps.input` instead. This prop will be removed in a future major release. See [Migrating from deprecated APIs](/material-ui/migration/migrating-from-deprecated-apis/) for more details.\n   */\n  inputProps: PropTypes.object,\n  /**\n   * Pass a ref to the `input` element.\n   * @deprecated Use `slotProps.input.ref` instead. This prop will be removed in a future major release. See [Migrating from deprecated APIs](/material-ui/migration/migrating-from-deprecated-apis/) for more details.\n   */\n  inputRef: refType,\n  /**\n   * Callback fired when the state is changed.\n   *\n   * @param {React.ChangeEvent<HTMLInputElement>} event The event source of the callback.\n   * You can pull out the new value by accessing `event.target.value` (string).\n   * You can pull out the new checked state by accessing `event.target.checked` (boolean).\n   */\n  onChange: PropTypes.func,\n  /**\n   * If `true`, the `input` element is required.\n   * @default false\n   */\n  required: PropTypes.bool,\n  /**\n   * The size of the component.\n   * `small` is equivalent to the dense switch styling.\n   * @default 'medium'\n   */\n  size: PropTypes /* @typescript-to-proptypes-ignore */.oneOfType([PropTypes.oneOf(['medium', 'small']), PropTypes.string]),\n  /**\n   * The props used for each slot inside.\n   * @default {}\n   */\n  slotProps: PropTypes.shape({\n    input: PropTypes.oneOfType([PropTypes.func, PropTypes.object]),\n    root: PropTypes.oneOfType([PropTypes.func, PropTypes.object]),\n    switchBase: PropTypes.oneOfType([PropTypes.func, PropTypes.object]),\n    thumb: PropTypes.oneOfType([PropTypes.func, PropTypes.object]),\n    track: PropTypes.oneOfType([PropTypes.func, PropTypes.object])\n  }),\n  /**\n   * The components used for each slot inside.\n   * @default {}\n   */\n  slots: PropTypes.shape({\n    input: PropTypes.elementType,\n    root: PropTypes.elementType,\n    switchBase: PropTypes.elementType,\n    thumb: PropTypes.elementType,\n    track: PropTypes.elementType\n  }),\n  /**\n   * The system prop that allows defining system overrides as well as additional CSS styles.\n   */\n  sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object]),\n  /**\n   * The value of the component. The DOM API casts this to a string.\n   * The browser uses \"on\" as the default value.\n   */\n  value: PropTypes.any\n} : void 0;\nexport default Switch;","import generateUtilityClasses from '@mui/utils/generateUtilityClasses';\nimport generateUtilityClass from '@mui/utils/generateUtilityClass';\nexport function getTextFieldUtilityClass(slot) {\n  return generateUtilityClass('MuiTextField', slot);\n}\nconst textFieldClasses = generateUtilityClasses('MuiTextField', ['root']);\nexport default textFieldClasses;","'use client';\n\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport composeClasses from '@mui/utils/composeClasses';\nimport useId from '@mui/utils/useId';\nimport refType from '@mui/utils/refType';\nimport { styled } from \"../zero-styled/index.js\";\nimport { useDefaultProps } from \"../DefaultPropsProvider/index.js\";\nimport Input from \"../Input/index.js\";\nimport FilledInput from \"../FilledInput/index.js\";\nimport OutlinedInput from \"../OutlinedInput/index.js\";\nimport InputLabel from \"../InputLabel/index.js\";\nimport FormControl from \"../FormControl/index.js\";\nimport FormHelperText from \"../FormHelperText/index.js\";\nimport Select from \"../Select/index.js\";\nimport { getTextFieldUtilityClass } from \"./textFieldClasses.js\";\nimport useSlot from \"../utils/useSlot.js\";\nimport { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nconst variantComponent = {\n  standard: Input,\n  filled: FilledInput,\n  outlined: OutlinedInput\n};\nconst useUtilityClasses = ownerState => {\n  const {\n    classes\n  } = ownerState;\n  const slots = {\n    root: ['root']\n  };\n  return composeClasses(slots, getTextFieldUtilityClass, classes);\n};\nconst TextFieldRoot = styled(FormControl, {\n  name: 'MuiTextField',\n  slot: 'Root'\n})({});\n\n/**\n * The `TextField` is a convenience wrapper for the most common cases (80%).\n * It cannot be all things to all people, otherwise the API would grow out of control.\n *\n * ## Advanced Configuration\n *\n * It's important to understand that the text field is a simple abstraction\n * on top of the following components:\n *\n * - [FormControl](/material-ui/api/form-control/)\n * - [InputLabel](/material-ui/api/input-label/)\n * - [FilledInput](/material-ui/api/filled-input/)\n * - [OutlinedInput](/material-ui/api/outlined-input/)\n * - [Input](/material-ui/api/input/)\n * - [FormHelperText](/material-ui/api/form-helper-text/)\n *\n * If you wish to alter the props applied to the `input` element, you can do so as follows:\n *\n * ```jsx\n * const inputProps = {\n *   step: 300,\n * };\n *\n * return <TextField id=\"time\" type=\"time\" inputProps={inputProps} />;\n * ```\n *\n * For advanced cases, please look at the source of TextField by clicking on the\n * \"Edit this page\" button above. Consider either:\n *\n * - using the upper case props for passing values directly to the components\n * - using the underlying components directly as shown in the demos\n */\nconst TextField = /*#__PURE__*/React.forwardRef(function TextField(inProps, ref) {\n  const props = useDefaultProps({\n    props: inProps,\n    name: 'MuiTextField'\n  });\n  const {\n    autoComplete,\n    autoFocus = false,\n    children,\n    className,\n    color = 'primary',\n    defaultValue,\n    disabled = false,\n    error = false,\n    FormHelperTextProps: FormHelperTextPropsProp,\n    fullWidth = false,\n    helperText,\n    id: idOverride,\n    InputLabelProps: InputLabelPropsProp,\n    inputProps: inputPropsProp,\n    InputProps: InputPropsProp,\n    inputRef,\n    label,\n    maxRows,\n    minRows,\n    multiline = false,\n    name,\n    onBlur,\n    onChange,\n    onFocus,\n    placeholder,\n    required = false,\n    rows,\n    select = false,\n    SelectProps: SelectPropsProp,\n    slots = {},\n    slotProps = {},\n    type,\n    value,\n    variant = 'outlined',\n    ...other\n  } = props;\n  const ownerState = {\n    ...props,\n    autoFocus,\n    color,\n    disabled,\n    error,\n    fullWidth,\n    multiline,\n    required,\n    select,\n    variant\n  };\n  const classes = useUtilityClasses(ownerState);\n  if (process.env.NODE_ENV !== 'production') {\n    if (select && !children) {\n      console.error('MUI: `children` must be passed when using the `TextField` component with `select`.');\n    }\n  }\n  const id = useId(idOverride);\n  const helperTextId = helperText && id ? `${id}-helper-text` : undefined;\n  const inputLabelId = label && id ? `${id}-label` : undefined;\n  const InputComponent = variantComponent[variant];\n  const externalForwardedProps = {\n    slots,\n    slotProps: {\n      input: InputPropsProp,\n      inputLabel: InputLabelPropsProp,\n      htmlInput: inputPropsProp,\n      formHelperText: FormHelperTextPropsProp,\n      select: SelectPropsProp,\n      ...slotProps\n    }\n  };\n  const inputAdditionalProps = {};\n  const inputLabelSlotProps = externalForwardedProps.slotProps.inputLabel;\n  if (variant === 'outlined') {\n    if (inputLabelSlotProps && typeof inputLabelSlotProps.shrink !== 'undefined') {\n      inputAdditionalProps.notched = inputLabelSlotProps.shrink;\n    }\n    inputAdditionalProps.label = label;\n  }\n  if (select) {\n    // unset defaults from textbox inputs\n    if (!SelectPropsProp || !SelectPropsProp.native) {\n      inputAdditionalProps.id = undefined;\n    }\n    inputAdditionalProps['aria-describedby'] = undefined;\n  }\n  const [RootSlot, rootProps] = useSlot('root', {\n    elementType: TextFieldRoot,\n    shouldForwardComponentProp: true,\n    externalForwardedProps: {\n      ...externalForwardedProps,\n      ...other\n    },\n    ownerState,\n    className: clsx(classes.root, className),\n    ref,\n    additionalProps: {\n      disabled,\n      error,\n      fullWidth,\n      required,\n      color,\n      variant\n    }\n  });\n  const [InputSlot, inputProps] = useSlot('input', {\n    elementType: InputComponent,\n    externalForwardedProps,\n    additionalProps: inputAdditionalProps,\n    ownerState\n  });\n  const [InputLabelSlot, inputLabelProps] = useSlot('inputLabel', {\n    elementType: InputLabel,\n    externalForwardedProps,\n    ownerState\n  });\n  const [HtmlInputSlot, htmlInputProps] = useSlot('htmlInput', {\n    elementType: 'input',\n    externalForwardedProps,\n    ownerState\n  });\n  const [FormHelperTextSlot, formHelperTextProps] = useSlot('formHelperText', {\n    elementType: FormHelperText,\n    externalForwardedProps,\n    ownerState\n  });\n  const [SelectSlot, selectProps] = useSlot('select', {\n    elementType: Select,\n    externalForwardedProps,\n    ownerState\n  });\n  const InputElement = /*#__PURE__*/_jsx(InputSlot, {\n    \"aria-describedby\": helperTextId,\n    autoComplete: autoComplete,\n    autoFocus: autoFocus,\n    defaultValue: defaultValue,\n    fullWidth: fullWidth,\n    multiline: multiline,\n    name: name,\n    rows: rows,\n    maxRows: maxRows,\n    minRows: minRows,\n    type: type,\n    value: value,\n    id: id,\n    inputRef: inputRef,\n    onBlur: onBlur,\n    onChange: onChange,\n    onFocus: onFocus,\n    placeholder: placeholder,\n    inputProps: htmlInputProps,\n    slots: {\n      input: slots.htmlInput ? HtmlInputSlot : undefined\n    },\n    ...inputProps\n  });\n  return /*#__PURE__*/_jsxs(RootSlot, {\n    ...rootProps,\n    children: [label != null && label !== '' && /*#__PURE__*/_jsx(InputLabelSlot, {\n      htmlFor: id,\n      id: inputLabelId,\n      ...inputLabelProps,\n      children: label\n    }), select ? /*#__PURE__*/_jsx(SelectSlot, {\n      \"aria-describedby\": helperTextId,\n      id: id,\n      labelId: inputLabelId,\n      value: value,\n      input: InputElement,\n      ...selectProps,\n      children: children\n    }) : InputElement, helperText && /*#__PURE__*/_jsx(FormHelperTextSlot, {\n      id: helperTextId,\n      ...formHelperTextProps,\n      children: helperText\n    })]\n  });\n});\nprocess.env.NODE_ENV !== \"production\" ? TextField.propTypes /* remove-proptypes */ = {\n  // ┌────────────────────────────── Warning ──────────────────────────────┐\n  // │ These PropTypes are generated from the TypeScript type definitions. │\n  // │    To update them, edit the d.ts file and run `pnpm proptypes`.     │\n  // └─────────────────────────────────────────────────────────────────────┘\n  /**\n   * This prop helps users to fill forms faster, especially on mobile devices.\n   * The name can be confusing, as it's more like an autofill.\n   * You can learn more about it [following the specification](https://html.spec.whatwg.org/multipage/form-control-infrastructure.html#autofill).\n   */\n  autoComplete: PropTypes.string,\n  /**\n   * If `true`, the `input` element is focused during the first mount.\n   * @default false\n   */\n  autoFocus: PropTypes.bool,\n  /**\n   * @ignore\n   */\n  children: PropTypes.node,\n  /**\n   * Override or extend the styles applied to the component.\n   */\n  classes: PropTypes.object,\n  /**\n   * @ignore\n   */\n  className: PropTypes.string,\n  /**\n   * The color of the component.\n   * It supports both default and custom theme colors, which can be added as shown in the\n   * [palette customization guide](https://mui.com/material-ui/customization/palette/#custom-colors).\n   * @default 'primary'\n   */\n  color: PropTypes /* @typescript-to-proptypes-ignore */.oneOfType([PropTypes.oneOf(['primary', 'secondary', 'error', 'info', 'success', 'warning']), PropTypes.string]),\n  /**\n   * The default value. Use when the component is not controlled.\n   */\n  defaultValue: PropTypes.any,\n  /**\n   * If `true`, the component is disabled.\n   * @default false\n   */\n  disabled: PropTypes.bool,\n  /**\n   * If `true`, the label is displayed in an error state.\n   * @default false\n   */\n  error: PropTypes.bool,\n  /**\n   * Props applied to the [`FormHelperText`](https://mui.com/material-ui/api/form-helper-text/) element.\n   * @deprecated Use `slotProps.formHelperText` instead. This prop will be removed in a future major release. See [Migrating from deprecated APIs](https://mui.com/material-ui/migration/migrating-from-deprecated-apis/) for more details.\n   */\n  FormHelperTextProps: PropTypes.object,\n  /**\n   * If `true`, the input will take up the full width of its container.\n   * @default false\n   */\n  fullWidth: PropTypes.bool,\n  /**\n   * The helper text content.\n   */\n  helperText: PropTypes.node,\n  /**\n   * The id of the `input` element.\n   * Use this prop to make `label` and `helperText` accessible for screen readers.\n   */\n  id: PropTypes.string,\n  /**\n   * Props applied to the [`InputLabel`](https://mui.com/material-ui/api/input-label/) element.\n   * Pointer events like `onClick` are enabled if and only if `shrink` is `true`.\n   * @deprecated Use `slotProps.inputLabel` instead. This prop will be removed in a future major release. See [Migrating from deprecated APIs](https://mui.com/material-ui/migration/migrating-from-deprecated-apis/) for more details.\n   */\n  InputLabelProps: PropTypes.object,\n  /**\n   * [Attributes](https://developer.mozilla.org/en-US/docs/Web/HTML/Reference/Elements/input#attributes) applied to the `input` element.\n   * @deprecated Use `slotProps.htmlInput` instead. This prop will be removed in a future major release. See [Migrating from deprecated APIs](https://mui.com/material-ui/migration/migrating-from-deprecated-apis/) for more details.\n   */\n  inputProps: PropTypes.object,\n  /**\n   * Props applied to the Input element.\n   * It will be a [`FilledInput`](https://mui.com/material-ui/api/filled-input/),\n   * [`OutlinedInput`](https://mui.com/material-ui/api/outlined-input/) or [`Input`](https://mui.com/material-ui/api/input/)\n   * component depending on the `variant` prop value.\n   * @deprecated Use `slotProps.input` instead. This prop will be removed in a future major release. See [Migrating from deprecated APIs](https://mui.com/material-ui/migration/migrating-from-deprecated-apis/) for more details.\n   */\n  InputProps: PropTypes.object,\n  /**\n   * Pass a ref to the `input` element.\n   */\n  inputRef: refType,\n  /**\n   * The label content.\n   */\n  label: PropTypes.node,\n  /**\n   * If `dense` or `normal`, will adjust vertical spacing of this and contained components.\n   * @default 'none'\n   */\n  margin: PropTypes.oneOf(['dense', 'none', 'normal']),\n  /**\n   * Maximum number of rows to display when multiline option is set to true.\n   */\n  maxRows: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n  /**\n   * Minimum number of rows to display when multiline option is set to true.\n   */\n  minRows: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n  /**\n   * If `true`, a `textarea` element is rendered instead of an input.\n   * @default false\n   */\n  multiline: PropTypes.bool,\n  /**\n   * Name attribute of the `input` element.\n   */\n  name: PropTypes.string,\n  /**\n   * @ignore\n   */\n  onBlur: PropTypes.func,\n  /**\n   * Callback fired when the value is changed.\n   *\n   * @param {object} event The event source of the callback.\n   * You can pull out the new value by accessing `event.target.value` (string).\n   */\n  onChange: PropTypes.func,\n  /**\n   * @ignore\n   */\n  onFocus: PropTypes.func,\n  /**\n   * The short hint displayed in the `input` before the user enters a value.\n   */\n  placeholder: PropTypes.string,\n  /**\n   * If `true`, the label is displayed as required and the `input` element is required.\n   * @default false\n   */\n  required: PropTypes.bool,\n  /**\n   * Number of rows to display when multiline option is set to true.\n   */\n  rows: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n  /**\n   * Render a [`Select`](https://mui.com/material-ui/api/select/) element while passing the Input element to `Select` as `input` parameter.\n   * If this option is set you must pass the options of the select as children.\n   * @default false\n   */\n  select: PropTypes.bool,\n  /**\n   * Props applied to the [`Select`](https://mui.com/material-ui/api/select/) element.\n   * @deprecated Use `slotProps.select` instead. This prop will be removed in a future major release. See [Migrating from deprecated APIs](https://mui.com/material-ui/migration/migrating-from-deprecated-apis/) for more details.\n   */\n  SelectProps: PropTypes.object,\n  /**\n   * The size of the component.\n   * @default 'medium'\n   */\n  size: PropTypes /* @typescript-to-proptypes-ignore */.oneOfType([PropTypes.oneOf(['medium', 'small']), PropTypes.string]),\n  /**\n   * The props used for each slot inside.\n   * @default {}\n   */\n  slotProps: PropTypes /* @typescript-to-proptypes-ignore */.shape({\n    formHelperText: PropTypes.oneOfType([PropTypes.func, PropTypes.object]),\n    htmlInput: PropTypes.oneOfType([PropTypes.func, PropTypes.object]),\n    input: PropTypes.oneOfType([PropTypes.func, PropTypes.object]),\n    inputLabel: PropTypes.oneOfType([PropTypes.func, PropTypes.object]),\n    select: PropTypes.oneOfType([PropTypes.func, PropTypes.object])\n  }),\n  /**\n   * The components used for each slot inside.\n   * @default {}\n   */\n  slots: PropTypes.shape({\n    formHelperText: PropTypes.elementType,\n    htmlInput: PropTypes.elementType,\n    input: PropTypes.elementType,\n    inputLabel: PropTypes.elementType,\n    root: PropTypes.elementType,\n    select: PropTypes.elementType\n  }),\n  /**\n   * The system prop that allows defining system overrides as well as additional CSS styles.\n   */\n  sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object]),\n  /**\n   * Type of the `input` element. It should be [a valid HTML5 input type](https://developer.mozilla.org/en-US/docs/Web/HTML/Reference/Elements/input#input_types).\n   */\n  type: PropTypes.string,\n  /**\n   * The value of the `input` element, required for a controlled component.\n   */\n  value: PropTypes.any,\n  /**\n   * The variant to use.\n   * @default 'outlined'\n   */\n  variant: PropTypes.oneOf(['filled', 'outlined', 'standard'])\n} : void 0;\nexport default TextField;","import type { Llm } from '@type/llm';\nimport { SmartToy } from '@mui/icons-material';\nimport { SvgIcon } from '@mui/material';\nimport React from 'react';\n\ninterface ModelIconProps {\n  model?: Llm;\n  fontSize?: 'small' | 'medium' | 'large' | 'inherit';\n}\n\nexport const ModelIcon: React.FC<ModelIconProps> = ({ model, fontSize = 'small' }) => {\n  // Default to SmartToy icon if no model specified\n  if (!model) {\n    return <SmartToy fontSize={fontSize} />;\n  }\n\n  switch (model) {\n    case 'OPENAI':\n      return (\n        <SvgIcon fontSize={fontSize} viewBox=\"0 0 24 24\">\n          <path d=\"M22.282 9.821a5.985 5.985 0 0 0-.516-4.91 6.046 6.046 0 0 0-6.51-2.9A6.065 6.065 0 0 0 4.981 4.18a5.985 5.985 0 0 0-3.998 2.9 6.046 6.046 0 0 0 .743 7.097 5.98 5.98 0 0 0 .51 4.911 6.051 6.051 0 0 0 6.515 2.9A5.985 5.985 0 0 0 13.26 24a6.056 6.056 0 0 0 5.772-4.206 5.99 5.99 0 0 0 3.997-2.9 6.056 6.056 0 0 0-.747-7.073zM13.26 22.43a4.476 4.476 0 0 1-2.876-1.04l.141-.081 4.779-2.758a.795.795 0 0 0 .392-.681v-6.737l2.02 1.168a.071.071 0 0 1 .038.052v5.583a4.504 4.504 0 0 1-4.494 4.494zM3.6 18.304a4.47 4.47 0 0 1-.535-3.014l.142.085 4.783 2.759a.78.78 0 0 0 .78 0l5.843-3.369v2.332a.074.074 0 0 1-.028.057l-4.832 2.795a4.504 4.504 0 0 1-6.153-1.645zm-.856-8.246a4.476 4.476 0 0 1 2.346-1.973l-.004.162v5.517a.787.787 0 0 0 .392.681l5.843 3.369-2.02 1.168a.069.069 0 0 1-.066 0l-4.827-2.79a4.504 4.504 0 0 1-1.664-6.134zm16.008 3.73-5.843-3.369 2.02-1.168a.07.07 0 0 1 .066 0l4.827 2.79a4.494 4.494 0 0 1-1.12 8.107v-5.517a.795.795 0 0 0-.397-.681zm2.253-3.395a4.47 4.47 0 0 1-.535.983l-.142-.085-4.779-2.759a.78.78 0 0 0-.78 0L8.927 11.9V9.569a.07.07 0 0 1 .028-.057l4.827-2.79a4.504 4.504 0 0 1 6.682 2.771zm-12.35 3.369-2.02-1.168a.067.067 0 0 1-.037-.052V7.967a4.504 4.504 0 0 1 7.37-3.454l-.142.081-4.779 2.759a.795.795 0 0 0-.392.681zm1.069-2.332 2.606-1.507 2.606 1.507v3.014l-2.606 1.507-2.606-1.507z\" />\n        </SvgIcon>\n      );\n    case 'ANTHROPIC_CLAUDE':\n      return (\n        <SvgIcon fontSize={fontSize} viewBox=\"0 0 24 24\">\n          <path d=\"M15.5 2.25a4.25 4.25 0 0 0-4.25 4.25h-2.5A6.75 6.75 0 0 1 15.5 0h2.5v2.25zM2.25 8.5A4.25 4.25 0 0 0 6.5 12.75v2.5A6.75 6.75 0 0 1 0 8.5v-2.5h2.25zM8.5 21.75a4.25 4.25 0 0 0 4.25-4.25h2.5A6.75 6.75 0 0 1 8.5 24H6v-2.25zM21.75 15.5a4.25 4.25 0 0 0-4.25-4.25v-2.5A6.75 6.75 0 0 1 24 15.5V18h-2.25z\" />\n          <path d=\"M12 7a5 5 0 1 0 0 10 5 5 0 0 0 0-10zm0 8a3 3 0 1 1 0-6 3 3 0 0 1 0 6z\" />\n        </SvgIcon>\n      );\n    case 'GOOGLE_GEMINI':\n      return (\n        <SvgIcon fontSize={fontSize} viewBox=\"0 0 24 24\">\n          <path d=\"M4 12c0-4.41 3.59-8 8-8s8 3.59 8 8-3.59 8-8 8-8-3.59-8-8m8-10c-5.51 0-10 4.49-10 10s4.49 10 10 10 10-4.49 10-10S17.51 2 12 2m2.5 10c0 1.38-1.12 2.5-2.5 2.5S9.5 13.38 9.5 12 10.62 9.5 12 9.5s2.5 1.12 2.5 2.5M12 6c-3.31 0-6 2.69-6 6s2.69 6 6 6 6-2.69 6-6-2.69-6-6-6m0 10c-2.21 0-4-1.79-4-4s1.79-4 4-4 4 1.79 4 4-1.79 4-4 4\" />\n        </SvgIcon>\n      );\n    default:\n      return <SmartToy fontSize={fontSize} />;\n  }\n};\n","import type { Llm, LlmVersion } from '@type/llm';\nimport { Box, FormControl, MenuItem, Select, Typography } from '@mui/material';\nimport { MODEL_VERSIONS } from '@service/modelVersions';\nimport { useViewModel } from '@state/hook/useViewModel';\nimport React from 'react';\n\ninterface ModelSelectionProps {\n  enabledModels: Array<{\n    modelKey: Llm;\n    name: string;\n    version: string;\n  }>;\n}\n\nexport const ModelSelection: React.FC<ModelSelectionProps> = ({ enabledModels }) => {\n  const settingsViewModel = useViewModel('settings');\n  const chatViewModel = useViewModel('chat');\n  const currentSettings = settingsViewModel.state;\n\n  const handleModelChange = (modelKey: Llm, version: LlmVersion): void => {\n    // Get the latest settings state\n    const latestSettings = settingsViewModel.state;\n    const updatedSettings = {\n      ...latestSettings,\n      llm: {\n        ...latestSettings.llm,\n        models: {\n          ...latestSettings.llm.models,\n          [modelKey]: {\n            ...latestSettings.llm.models[modelKey],\n            version,\n            enabled: true,\n          },\n        },\n      },\n    };\n    // The spread operator already creates a proper immutable update\n    settingsViewModel.saveSettings(updatedSettings);\n    // Update the welcome message to reflect the new model version\n    chatViewModel.updateWelcomeMessage();\n  };\n\n  const getModelVersions = (modelKey: Llm): { label: string; value: LlmVersion }[] => {\n    const config = MODEL_VERSIONS[modelKey];\n    const labels = config.labels as Record<string, string>;\n    return config.options.map((version) => {\n      const typedVersion = version as LlmVersion;\n      return {\n        label: labels[typedVersion],\n        value: typedVersion,\n      };\n    });\n  };\n  const getCurrentVersion = (modelKey: Llm): LlmVersion => {\n    const config = MODEL_VERSIONS[modelKey];\n    const currentVersion = currentSettings.llm.models[modelKey].version;\n    const validOptions = config.options as readonly LlmVersion[];\n    if (!currentVersion || !validOptions.includes(currentVersion as LlmVersion)) {\n      return config.default;\n    }\n    return currentVersion as LlmVersion;\n  };\n\n  return (\n    <Box sx={{ mt: 2, display: 'flex', flexDirection: 'column', gap: 1 }}>\n      {enabledModels.map(model => (\n        <Box key={model.modelKey} sx={{ display: 'flex', alignItems: 'center', gap: 1 }}>\n          <Typography variant=\"body2\" sx={{ minWidth: 100 }}>\n            {model.name}\n            :\n          </Typography>\n          <FormControl size=\"small\" sx={{ minWidth: 200 }}>\n            <Select\n              value={getCurrentVersion(model.modelKey)}\n              onChange={e => handleModelChange(model.modelKey, e.target.value as LlmVersion)}\n              aria-label={`Select ${model.name} version`}\n              MenuProps={{\n                disablePortal: true,\n                PaperProps: {\n                  sx: {\n                    maxHeight: 200,\n                  },\n                },\n              }}\n            >\n              {getModelVersions(model.modelKey).map(version => (\n                <MenuItem key={version.value} value={version.value}>\n                  {version.label}\n                </MenuItem>\n              ))}\n            </Select>\n          </FormControl>\n        </Box>\n      ))}\n    </Box>\n  );\n};\n","/**\n * @typedef Options\n *   Configuration for `stringify`.\n * @property {boolean} [padLeft=true]\n *   Whether to pad a space before a token.\n * @property {boolean} [padRight=false]\n *   Whether to pad a space after a token.\n */\n\n/**\n * @typedef {Options} StringifyOptions\n *   Please use `StringifyOptions` instead.\n */\n\n/**\n * Parse comma-separated tokens to an array.\n *\n * @param {string} value\n *   Comma-separated tokens.\n * @returns {Array<string>}\n *   List of tokens.\n */\nexport function parse(value) {\n  /** @type {Array<string>} */\n  const tokens = []\n  const input = String(value || '')\n  let index = input.indexOf(',')\n  let start = 0\n  /** @type {boolean} */\n  let end = false\n\n  while (!end) {\n    if (index === -1) {\n      index = input.length\n      end = true\n    }\n\n    const token = input.slice(start, index).trim()\n\n    if (token || !end) {\n      tokens.push(token)\n    }\n\n    start = index + 1\n    index = input.indexOf(',', start)\n  }\n\n  return tokens\n}\n\n/**\n * Serialize an array of strings or numbers to comma-separated tokens.\n *\n * @param {Array<string|number>} values\n *   List of tokens.\n * @param {Options} [options]\n *   Configuration for `stringify` (optional).\n * @returns {string}\n *   Comma-separated tokens.\n */\nexport function stringify(values, options) {\n  const settings = options || {}\n\n  // Ensure the last empty entry is seen.\n  const input = values[values.length - 1] === '' ? [...values, ''] : values\n\n  return input\n    .join(\n      (settings.padRight ? ' ' : '') +\n        ',' +\n        (settings.padLeft === false ? '' : ' ')\n    )\n    .trim()\n}\n","/**\n * @typedef Options\n *   Configuration.\n * @property {boolean | null | undefined} [jsx=false]\n *   Support JSX identifiers (default: `false`).\n */\n\nconst startRe = /[$_\\p{ID_Start}]/u\nconst contRe = /[$_\\u{200C}\\u{200D}\\p{ID_Continue}]/u\nconst contReJsx = /[-$_\\u{200C}\\u{200D}\\p{ID_Continue}]/u\nconst nameRe = /^[$_\\p{ID_Start}][$_\\u{200C}\\u{200D}\\p{ID_Continue}]*$/u\nconst nameReJsx = /^[$_\\p{ID_Start}][-$_\\u{200C}\\u{200D}\\p{ID_Continue}]*$/u\n\n/** @type {Options} */\nconst emptyOptions = {}\n\n/**\n * Checks if the given code point can start an identifier.\n *\n * @param {number | undefined} code\n *   Code point to check.\n * @returns {boolean}\n *   Whether `code` can start an identifier.\n */\n// Note: `undefined` is supported so you can pass the result from `''.codePointAt`.\nexport function start(code) {\n  return code ? startRe.test(String.fromCodePoint(code)) : false\n}\n\n/**\n * Checks if the given code point can continue an identifier.\n *\n * @param {number | undefined} code\n *   Code point to check.\n * @param {Options | null | undefined} [options]\n *   Configuration (optional).\n * @returns {boolean}\n *   Whether `code` can continue an identifier.\n */\n// Note: `undefined` is supported so you can pass the result from `''.codePointAt`.\nexport function cont(code, options) {\n  const settings = options || emptyOptions\n  const re = settings.jsx ? contReJsx : contRe\n  return code ? re.test(String.fromCodePoint(code)) : false\n}\n\n/**\n * Checks if the given value is a valid identifier name.\n *\n * @param {string} name\n *   Identifier to check.\n * @param {Options | null | undefined} [options]\n *   Configuration (optional).\n * @returns {boolean}\n *   Whether `name` can be an identifier.\n */\nexport function name(name, options) {\n  const settings = options || emptyOptions\n  const re = settings.jsx ? nameReJsx : nameRe\n  return re.test(name)\n}\n","/**\n * @typedef {import('hast').Nodes} Nodes\n */\n\n// HTML whitespace expression.\n// See <https://infra.spec.whatwg.org/#ascii-whitespace>.\nconst re = /[ \\t\\n\\f\\r]/g\n\n/**\n * Check if the given value is *inter-element whitespace*.\n *\n * @param {Nodes | string} thing\n *   Thing to check (`Node` or `string`).\n * @returns {boolean}\n *   Whether the `value` is inter-element whitespace (`boolean`): consisting of\n *   zero or more of space, tab (`\\t`), line feed (`\\n`), carriage return\n *   (`\\r`), or form feed (`\\f`); if a node is passed it must be a `Text` node,\n *   whose `value` field is checked.\n */\nexport function whitespace(thing) {\n  return typeof thing === 'object'\n    ? thing.type === 'text'\n      ? empty(thing.value)\n      : false\n    : empty(thing)\n}\n\n/**\n * @param {string} value\n * @returns {boolean}\n */\nfunction empty(value) {\n  return value.replace(re, '') === ''\n}\n","/**\n * @import {Schema as SchemaType, Space} from 'property-information'\n */\n\n/** @type {SchemaType} */\nexport class Schema {\n  /**\n   * @param {SchemaType['property']} property\n   *   Property.\n   * @param {SchemaType['normal']} normal\n   *   Normal.\n   * @param {Space | undefined} [space]\n   *   Space.\n   * @returns\n   *   Schema.\n   */\n  constructor(property, normal, space) {\n    this.normal = normal\n    this.property = property\n\n    if (space) {\n      this.space = space\n    }\n  }\n}\n\nSchema.prototype.normal = {}\nSchema.prototype.property = {}\nSchema.prototype.space = undefined\n","/**\n * @import {Info, Space} from 'property-information'\n */\n\nimport {Schema} from './schema.js'\n\n/**\n * @param {ReadonlyArray<Schema>} definitions\n *   Definitions.\n * @param {Space | undefined} [space]\n *   Space.\n * @returns {Schema}\n *   Schema.\n */\nexport function merge(definitions, space) {\n  /** @type {Record<string, Info>} */\n  const property = {}\n  /** @type {Record<string, string>} */\n  const normal = {}\n\n  for (const definition of definitions) {\n    Object.assign(property, definition.property)\n    Object.assign(normal, definition.normal)\n  }\n\n  return new Schema(property, normal, space)\n}\n","/**\n * Get the cleaned case insensitive form of an attribute or property.\n *\n * @param {string} value\n *   An attribute-like or property-like name.\n * @returns {string}\n *   Value that can be used to look up the properly cased property on a\n *   `Schema`.\n */\nexport function normalize(value) {\n  return value.toLowerCase()\n}\n","/**\n * @import {Info as InfoType} from 'property-information'\n */\n\n/** @type {InfoType} */\nexport class Info {\n  /**\n   * @param {string} property\n   *   Property.\n   * @param {string} attribute\n   *   Attribute.\n   * @returns\n   *   Info.\n   */\n  constructor(property, attribute) {\n    this.attribute = attribute\n    this.property = property\n  }\n}\n\nInfo.prototype.attribute = ''\nInfo.prototype.booleanish = false\nInfo.prototype.boolean = false\nInfo.prototype.commaOrSpaceSeparated = false\nInfo.prototype.commaSeparated = false\nInfo.prototype.defined = false\nInfo.prototype.mustUseProperty = false\nInfo.prototype.number = false\nInfo.prototype.overloadedBoolean = false\nInfo.prototype.property = ''\nInfo.prototype.spaceSeparated = false\nInfo.prototype.space = undefined\n","let powers = 0\n\nexport const boolean = increment()\nexport const booleanish = increment()\nexport const overloadedBoolean = increment()\nexport const number = increment()\nexport const spaceSeparated = increment()\nexport const commaSeparated = increment()\nexport const commaOrSpaceSeparated = increment()\n\nfunction increment() {\n  return 2 ** ++powers\n}\n","/**\n * @import {Space} from 'property-information'\n */\n\nimport {Info} from './info.js'\nimport * as types from './types.js'\n\nconst checks = /** @type {ReadonlyArray<keyof typeof types>} */ (\n  Object.keys(types)\n)\n\nexport class DefinedInfo extends Info {\n  /**\n   * @constructor\n   * @param {string} property\n   *   Property.\n   * @param {string} attribute\n   *   Attribute.\n   * @param {number | null | undefined} [mask]\n   *   Mask.\n   * @param {Space | undefined} [space]\n   *   Space.\n   * @returns\n   *   Info.\n   */\n  constructor(property, attribute, mask, space) {\n    let index = -1\n\n    super(property, attribute)\n\n    mark(this, 'space', space)\n\n    if (typeof mask === 'number') {\n      while (++index < checks.length) {\n        const check = checks[index]\n        mark(this, checks[index], (mask & types[check]) === types[check])\n      }\n    }\n  }\n}\n\nDefinedInfo.prototype.defined = true\n\n/**\n * @template {keyof DefinedInfo} Key\n *   Key type.\n * @param {DefinedInfo} values\n *   Info.\n * @param {Key} key\n *   Key.\n * @param {DefinedInfo[Key]} value\n *   Value.\n * @returns {undefined}\n *   Nothing.\n */\nfunction mark(values, key, value) {\n  if (value) {\n    values[key] = value\n  }\n}\n","/**\n * @import {Info, Space} from 'property-information'\n */\n\n/**\n * @typedef Definition\n *   Definition of a schema.\n * @property {Record<string, string> | undefined} [attributes]\n *   Normalzed names to special attribute case.\n * @property {ReadonlyArray<string> | undefined} [mustUseProperty]\n *   Normalized names that must be set as properties.\n * @property {Record<string, number | null>} properties\n *   Property names to their types.\n * @property {Space | undefined} [space]\n *   Space.\n * @property {Transform} transform\n *   Transform a property name.\n */\n\n/**\n * @callback Transform\n *   Transform.\n * @param {Record<string, string>} attributes\n *   Attributes.\n * @param {string} property\n *   Property.\n * @returns {string}\n *   Attribute.\n */\n\nimport {normalize} from '../normalize.js'\nimport {DefinedInfo} from './defined-info.js'\nimport {Schema} from './schema.js'\n\n/**\n * @param {Definition} definition\n *   Definition.\n * @returns {Schema}\n *   Schema.\n */\nexport function create(definition) {\n  /** @type {Record<string, Info>} */\n  const properties = {}\n  /** @type {Record<string, string>} */\n  const normals = {}\n\n  for (const [property, value] of Object.entries(definition.properties)) {\n    const info = new DefinedInfo(\n      property,\n      definition.transform(definition.attributes || {}, property),\n      value,\n      definition.space\n    )\n\n    if (\n      definition.mustUseProperty &&\n      definition.mustUseProperty.includes(property)\n    ) {\n      info.mustUseProperty = true\n    }\n\n    properties[property] = info\n\n    normals[normalize(property)] = property\n    normals[normalize(info.attribute)] = property\n  }\n\n  return new Schema(properties, normals, definition.space)\n}\n","import {create} from './util/create.js'\nimport {booleanish, number, spaceSeparated} from './util/types.js'\n\nexport const aria = create({\n  properties: {\n    ariaActiveDescendant: null,\n    ariaAtomic: booleanish,\n    ariaAutoComplete: null,\n    ariaBusy: booleanish,\n    ariaChecked: booleanish,\n    ariaColCount: number,\n    ariaColIndex: number,\n    ariaColSpan: number,\n    ariaControls: spaceSeparated,\n    ariaCurrent: null,\n    ariaDescribedBy: spaceSeparated,\n    ariaDetails: null,\n    ariaDisabled: booleanish,\n    ariaDropEffect: spaceSeparated,\n    ariaErrorMessage: null,\n    ariaExpanded: booleanish,\n    ariaFlowTo: spaceSeparated,\n    ariaGrabbed: booleanish,\n    ariaHasPopup: null,\n    ariaHidden: booleanish,\n    ariaInvalid: null,\n    ariaKeyShortcuts: null,\n    ariaLabel: null,\n    ariaLabelledBy: spaceSeparated,\n    ariaLevel: number,\n    ariaLive: null,\n    ariaModal: booleanish,\n    ariaMultiLine: booleanish,\n    ariaMultiSelectable: booleanish,\n    ariaOrientation: null,\n    ariaOwns: spaceSeparated,\n    ariaPlaceholder: null,\n    ariaPosInSet: number,\n    ariaPressed: booleanish,\n    ariaReadOnly: booleanish,\n    ariaRelevant: null,\n    ariaRequired: booleanish,\n    ariaRoleDescription: spaceSeparated,\n    ariaRowCount: number,\n    ariaRowIndex: number,\n    ariaRowSpan: number,\n    ariaSelected: booleanish,\n    ariaSetSize: number,\n    ariaSort: null,\n    ariaValueMax: number,\n    ariaValueMin: number,\n    ariaValueNow: number,\n    ariaValueText: null,\n    role: null\n  },\n  transform(_, property) {\n    return property === 'role'\n      ? property\n      : 'aria-' + property.slice(4).toLowerCase()\n  }\n})\n","/**\n * @param {Record<string, string>} attributes\n *   Attributes.\n * @param {string} attribute\n *   Attribute.\n * @returns {string}\n *   Transformed attribute.\n */\nexport function caseSensitiveTransform(attributes, attribute) {\n  return attribute in attributes ? attributes[attribute] : attribute\n}\n","import {caseSensitiveTransform} from './case-sensitive-transform.js'\n\n/**\n * @param {Record<string, string>} attributes\n *   Attributes.\n * @param {string} property\n *   Property.\n * @returns {string}\n *   Transformed property.\n */\nexport function caseInsensitiveTransform(attributes, property) {\n  return caseSensitiveTransform(attributes, property.toLowerCase())\n}\n","import {caseInsensitiveTransform} from './util/case-insensitive-transform.js'\nimport {create} from './util/create.js'\nimport {\n  booleanish,\n  boolean,\n  commaSeparated,\n  number,\n  overloadedBoolean,\n  spaceSeparated\n} from './util/types.js'\n\nexport const html = create({\n  attributes: {\n    acceptcharset: 'accept-charset',\n    classname: 'class',\n    htmlfor: 'for',\n    httpequiv: 'http-equiv'\n  },\n  mustUseProperty: ['checked', 'multiple', 'muted', 'selected'],\n  properties: {\n    // Standard Properties.\n    abbr: null,\n    accept: commaSeparated,\n    acceptCharset: spaceSeparated,\n    accessKey: spaceSeparated,\n    action: null,\n    allow: null,\n    allowFullScreen: boolean,\n    allowPaymentRequest: boolean,\n    allowUserMedia: boolean,\n    alt: null,\n    as: null,\n    async: boolean,\n    autoCapitalize: null,\n    autoComplete: spaceSeparated,\n    autoFocus: boolean,\n    autoPlay: boolean,\n    blocking: spaceSeparated,\n    capture: null,\n    charSet: null,\n    checked: boolean,\n    cite: null,\n    className: spaceSeparated,\n    cols: number,\n    colSpan: null,\n    content: null,\n    contentEditable: booleanish,\n    controls: boolean,\n    controlsList: spaceSeparated,\n    coords: number | commaSeparated,\n    crossOrigin: null,\n    data: null,\n    dateTime: null,\n    decoding: null,\n    default: boolean,\n    defer: boolean,\n    dir: null,\n    dirName: null,\n    disabled: boolean,\n    download: overloadedBoolean,\n    draggable: booleanish,\n    encType: null,\n    enterKeyHint: null,\n    fetchPriority: null,\n    form: null,\n    formAction: null,\n    formEncType: null,\n    formMethod: null,\n    formNoValidate: boolean,\n    formTarget: null,\n    headers: spaceSeparated,\n    height: number,\n    hidden: overloadedBoolean,\n    high: number,\n    href: null,\n    hrefLang: null,\n    htmlFor: spaceSeparated,\n    httpEquiv: spaceSeparated,\n    id: null,\n    imageSizes: null,\n    imageSrcSet: null,\n    inert: boolean,\n    inputMode: null,\n    integrity: null,\n    is: null,\n    isMap: boolean,\n    itemId: null,\n    itemProp: spaceSeparated,\n    itemRef: spaceSeparated,\n    itemScope: boolean,\n    itemType: spaceSeparated,\n    kind: null,\n    label: null,\n    lang: null,\n    language: null,\n    list: null,\n    loading: null,\n    loop: boolean,\n    low: number,\n    manifest: null,\n    max: null,\n    maxLength: number,\n    media: null,\n    method: null,\n    min: null,\n    minLength: number,\n    multiple: boolean,\n    muted: boolean,\n    name: null,\n    nonce: null,\n    noModule: boolean,\n    noValidate: boolean,\n    onAbort: null,\n    onAfterPrint: null,\n    onAuxClick: null,\n    onBeforeMatch: null,\n    onBeforePrint: null,\n    onBeforeToggle: null,\n    onBeforeUnload: null,\n    onBlur: null,\n    onCancel: null,\n    onCanPlay: null,\n    onCanPlayThrough: null,\n    onChange: null,\n    onClick: null,\n    onClose: null,\n    onContextLost: null,\n    onContextMenu: null,\n    onContextRestored: null,\n    onCopy: null,\n    onCueChange: null,\n    onCut: null,\n    onDblClick: null,\n    onDrag: null,\n    onDragEnd: null,\n    onDragEnter: null,\n    onDragExit: null,\n    onDragLeave: null,\n    onDragOver: null,\n    onDragStart: null,\n    onDrop: null,\n    onDurationChange: null,\n    onEmptied: null,\n    onEnded: null,\n    onError: null,\n    onFocus: null,\n    onFormData: null,\n    onHashChange: null,\n    onInput: null,\n    onInvalid: null,\n    onKeyDown: null,\n    onKeyPress: null,\n    onKeyUp: null,\n    onLanguageChange: null,\n    onLoad: null,\n    onLoadedData: null,\n    onLoadedMetadata: null,\n    onLoadEnd: null,\n    onLoadStart: null,\n    onMessage: null,\n    onMessageError: null,\n    onMouseDown: null,\n    onMouseEnter: null,\n    onMouseLeave: null,\n    onMouseMove: null,\n    onMouseOut: null,\n    onMouseOver: null,\n    onMouseUp: null,\n    onOffline: null,\n    onOnline: null,\n    onPageHide: null,\n    onPageShow: null,\n    onPaste: null,\n    onPause: null,\n    onPlay: null,\n    onPlaying: null,\n    onPopState: null,\n    onProgress: null,\n    onRateChange: null,\n    onRejectionHandled: null,\n    onReset: null,\n    onResize: null,\n    onScroll: null,\n    onScrollEnd: null,\n    onSecurityPolicyViolation: null,\n    onSeeked: null,\n    onSeeking: null,\n    onSelect: null,\n    onSlotChange: null,\n    onStalled: null,\n    onStorage: null,\n    onSubmit: null,\n    onSuspend: null,\n    onTimeUpdate: null,\n    onToggle: null,\n    onUnhandledRejection: null,\n    onUnload: null,\n    onVolumeChange: null,\n    onWaiting: null,\n    onWheel: null,\n    open: boolean,\n    optimum: number,\n    pattern: null,\n    ping: spaceSeparated,\n    placeholder: null,\n    playsInline: boolean,\n    popover: null,\n    popoverTarget: null,\n    popoverTargetAction: null,\n    poster: null,\n    preload: null,\n    readOnly: boolean,\n    referrerPolicy: null,\n    rel: spaceSeparated,\n    required: boolean,\n    reversed: boolean,\n    rows: number,\n    rowSpan: number,\n    sandbox: spaceSeparated,\n    scope: null,\n    scoped: boolean,\n    seamless: boolean,\n    selected: boolean,\n    shadowRootClonable: boolean,\n    shadowRootDelegatesFocus: boolean,\n    shadowRootMode: null,\n    shape: null,\n    size: number,\n    sizes: null,\n    slot: null,\n    span: number,\n    spellCheck: booleanish,\n    src: null,\n    srcDoc: null,\n    srcLang: null,\n    srcSet: null,\n    start: number,\n    step: null,\n    style: null,\n    tabIndex: number,\n    target: null,\n    title: null,\n    translate: null,\n    type: null,\n    typeMustMatch: boolean,\n    useMap: null,\n    value: booleanish,\n    width: number,\n    wrap: null,\n    writingSuggestions: null,\n\n    // Legacy.\n    // See: https://html.spec.whatwg.org/#other-elements,-attributes-and-apis\n    align: null, // Several. Use CSS `text-align` instead,\n    aLink: null, // `<body>`. Use CSS `a:active {color}` instead\n    archive: spaceSeparated, // `<object>`. List of URIs to archives\n    axis: null, // `<td>` and `<th>`. Use `scope` on `<th>`\n    background: null, // `<body>`. Use CSS `background-image` instead\n    bgColor: null, // `<body>` and table elements. Use CSS `background-color` instead\n    border: number, // `<table>`. Use CSS `border-width` instead,\n    borderColor: null, // `<table>`. Use CSS `border-color` instead,\n    bottomMargin: number, // `<body>`\n    cellPadding: null, // `<table>`\n    cellSpacing: null, // `<table>`\n    char: null, // Several table elements. When `align=char`, sets the character to align on\n    charOff: null, // Several table elements. When `char`, offsets the alignment\n    classId: null, // `<object>`\n    clear: null, // `<br>`. Use CSS `clear` instead\n    code: null, // `<object>`\n    codeBase: null, // `<object>`\n    codeType: null, // `<object>`\n    color: null, // `<font>` and `<hr>`. Use CSS instead\n    compact: boolean, // Lists. Use CSS to reduce space between items instead\n    declare: boolean, // `<object>`\n    event: null, // `<script>`\n    face: null, // `<font>`. Use CSS instead\n    frame: null, // `<table>`\n    frameBorder: null, // `<iframe>`. Use CSS `border` instead\n    hSpace: number, // `<img>` and `<object>`\n    leftMargin: number, // `<body>`\n    link: null, // `<body>`. Use CSS `a:link {color: *}` instead\n    longDesc: null, // `<frame>`, `<iframe>`, and `<img>`. Use an `<a>`\n    lowSrc: null, // `<img>`. Use a `<picture>`\n    marginHeight: number, // `<body>`\n    marginWidth: number, // `<body>`\n    noResize: boolean, // `<frame>`\n    noHref: boolean, // `<area>`. Use no href instead of an explicit `nohref`\n    noShade: boolean, // `<hr>`. Use background-color and height instead of borders\n    noWrap: boolean, // `<td>` and `<th>`\n    object: null, // `<applet>`\n    profile: null, // `<head>`\n    prompt: null, // `<isindex>`\n    rev: null, // `<link>`\n    rightMargin: number, // `<body>`\n    rules: null, // `<table>`\n    scheme: null, // `<meta>`\n    scrolling: booleanish, // `<frame>`. Use overflow in the child context\n    standby: null, // `<object>`\n    summary: null, // `<table>`\n    text: null, // `<body>`. Use CSS `color` instead\n    topMargin: number, // `<body>`\n    valueType: null, // `<param>`\n    version: null, // `<html>`. Use a doctype.\n    vAlign: null, // Several. Use CSS `vertical-align` instead\n    vLink: null, // `<body>`. Use CSS `a:visited {color}` instead\n    vSpace: number, // `<img>` and `<object>`\n\n    // Non-standard Properties.\n    allowTransparency: null,\n    autoCorrect: null,\n    autoSave: null,\n    disablePictureInPicture: boolean,\n    disableRemotePlayback: boolean,\n    prefix: null,\n    property: null,\n    results: number,\n    security: null,\n    unselectable: null\n  },\n  space: 'html',\n  transform: caseInsensitiveTransform\n})\n","import {caseSensitiveTransform} from './util/case-sensitive-transform.js'\nimport {create} from './util/create.js'\nimport {\n  boolean,\n  commaOrSpaceSeparated,\n  commaSeparated,\n  number,\n  spaceSeparated\n} from './util/types.js'\n\nexport const svg = create({\n  attributes: {\n    accentHeight: 'accent-height',\n    alignmentBaseline: 'alignment-baseline',\n    arabicForm: 'arabic-form',\n    baselineShift: 'baseline-shift',\n    capHeight: 'cap-height',\n    className: 'class',\n    clipPath: 'clip-path',\n    clipRule: 'clip-rule',\n    colorInterpolation: 'color-interpolation',\n    colorInterpolationFilters: 'color-interpolation-filters',\n    colorProfile: 'color-profile',\n    colorRendering: 'color-rendering',\n    crossOrigin: 'crossorigin',\n    dataType: 'datatype',\n    dominantBaseline: 'dominant-baseline',\n    enableBackground: 'enable-background',\n    fillOpacity: 'fill-opacity',\n    fillRule: 'fill-rule',\n    floodColor: 'flood-color',\n    floodOpacity: 'flood-opacity',\n    fontFamily: 'font-family',\n    fontSize: 'font-size',\n    fontSizeAdjust: 'font-size-adjust',\n    fontStretch: 'font-stretch',\n    fontStyle: 'font-style',\n    fontVariant: 'font-variant',\n    fontWeight: 'font-weight',\n    glyphName: 'glyph-name',\n    glyphOrientationHorizontal: 'glyph-orientation-horizontal',\n    glyphOrientationVertical: 'glyph-orientation-vertical',\n    hrefLang: 'hreflang',\n    horizAdvX: 'horiz-adv-x',\n    horizOriginX: 'horiz-origin-x',\n    horizOriginY: 'horiz-origin-y',\n    imageRendering: 'image-rendering',\n    letterSpacing: 'letter-spacing',\n    lightingColor: 'lighting-color',\n    markerEnd: 'marker-end',\n    markerMid: 'marker-mid',\n    markerStart: 'marker-start',\n    navDown: 'nav-down',\n    navDownLeft: 'nav-down-left',\n    navDownRight: 'nav-down-right',\n    navLeft: 'nav-left',\n    navNext: 'nav-next',\n    navPrev: 'nav-prev',\n    navRight: 'nav-right',\n    navUp: 'nav-up',\n    navUpLeft: 'nav-up-left',\n    navUpRight: 'nav-up-right',\n    onAbort: 'onabort',\n    onActivate: 'onactivate',\n    onAfterPrint: 'onafterprint',\n    onBeforePrint: 'onbeforeprint',\n    onBegin: 'onbegin',\n    onCancel: 'oncancel',\n    onCanPlay: 'oncanplay',\n    onCanPlayThrough: 'oncanplaythrough',\n    onChange: 'onchange',\n    onClick: 'onclick',\n    onClose: 'onclose',\n    onCopy: 'oncopy',\n    onCueChange: 'oncuechange',\n    onCut: 'oncut',\n    onDblClick: 'ondblclick',\n    onDrag: 'ondrag',\n    onDragEnd: 'ondragend',\n    onDragEnter: 'ondragenter',\n    onDragExit: 'ondragexit',\n    onDragLeave: 'ondragleave',\n    onDragOver: 'ondragover',\n    onDragStart: 'ondragstart',\n    onDrop: 'ondrop',\n    onDurationChange: 'ondurationchange',\n    onEmptied: 'onemptied',\n    onEnd: 'onend',\n    onEnded: 'onended',\n    onError: 'onerror',\n    onFocus: 'onfocus',\n    onFocusIn: 'onfocusin',\n    onFocusOut: 'onfocusout',\n    onHashChange: 'onhashchange',\n    onInput: 'oninput',\n    onInvalid: 'oninvalid',\n    onKeyDown: 'onkeydown',\n    onKeyPress: 'onkeypress',\n    onKeyUp: 'onkeyup',\n    onLoad: 'onload',\n    onLoadedData: 'onloadeddata',\n    onLoadedMetadata: 'onloadedmetadata',\n    onLoadStart: 'onloadstart',\n    onMessage: 'onmessage',\n    onMouseDown: 'onmousedown',\n    onMouseEnter: 'onmouseenter',\n    onMouseLeave: 'onmouseleave',\n    onMouseMove: 'onmousemove',\n    onMouseOut: 'onmouseout',\n    onMouseOver: 'onmouseover',\n    onMouseUp: 'onmouseup',\n    onMouseWheel: 'onmousewheel',\n    onOffline: 'onoffline',\n    onOnline: 'ononline',\n    onPageHide: 'onpagehide',\n    onPageShow: 'onpageshow',\n    onPaste: 'onpaste',\n    onPause: 'onpause',\n    onPlay: 'onplay',\n    onPlaying: 'onplaying',\n    onPopState: 'onpopstate',\n    onProgress: 'onprogress',\n    onRateChange: 'onratechange',\n    onRepeat: 'onrepeat',\n    onReset: 'onreset',\n    onResize: 'onresize',\n    onScroll: 'onscroll',\n    onSeeked: 'onseeked',\n    onSeeking: 'onseeking',\n    onSelect: 'onselect',\n    onShow: 'onshow',\n    onStalled: 'onstalled',\n    onStorage: 'onstorage',\n    onSubmit: 'onsubmit',\n    onSuspend: 'onsuspend',\n    onTimeUpdate: 'ontimeupdate',\n    onToggle: 'ontoggle',\n    onUnload: 'onunload',\n    onVolumeChange: 'onvolumechange',\n    onWaiting: 'onwaiting',\n    onZoom: 'onzoom',\n    overlinePosition: 'overline-position',\n    overlineThickness: 'overline-thickness',\n    paintOrder: 'paint-order',\n    panose1: 'panose-1',\n    pointerEvents: 'pointer-events',\n    referrerPolicy: 'referrerpolicy',\n    renderingIntent: 'rendering-intent',\n    shapeRendering: 'shape-rendering',\n    stopColor: 'stop-color',\n    stopOpacity: 'stop-opacity',\n    strikethroughPosition: 'strikethrough-position',\n    strikethroughThickness: 'strikethrough-thickness',\n    strokeDashArray: 'stroke-dasharray',\n    strokeDashOffset: 'stroke-dashoffset',\n    strokeLineCap: 'stroke-linecap',\n    strokeLineJoin: 'stroke-linejoin',\n    strokeMiterLimit: 'stroke-miterlimit',\n    strokeOpacity: 'stroke-opacity',\n    strokeWidth: 'stroke-width',\n    tabIndex: 'tabindex',\n    textAnchor: 'text-anchor',\n    textDecoration: 'text-decoration',\n    textRendering: 'text-rendering',\n    transformOrigin: 'transform-origin',\n    typeOf: 'typeof',\n    underlinePosition: 'underline-position',\n    underlineThickness: 'underline-thickness',\n    unicodeBidi: 'unicode-bidi',\n    unicodeRange: 'unicode-range',\n    unitsPerEm: 'units-per-em',\n    vAlphabetic: 'v-alphabetic',\n    vHanging: 'v-hanging',\n    vIdeographic: 'v-ideographic',\n    vMathematical: 'v-mathematical',\n    vectorEffect: 'vector-effect',\n    vertAdvY: 'vert-adv-y',\n    vertOriginX: 'vert-origin-x',\n    vertOriginY: 'vert-origin-y',\n    wordSpacing: 'word-spacing',\n    writingMode: 'writing-mode',\n    xHeight: 'x-height',\n    // These were camelcased in Tiny. Now lowercased in SVG 2\n    playbackOrder: 'playbackorder',\n    timelineBegin: 'timelinebegin'\n  },\n  properties: {\n    about: commaOrSpaceSeparated,\n    accentHeight: number,\n    accumulate: null,\n    additive: null,\n    alignmentBaseline: null,\n    alphabetic: number,\n    amplitude: number,\n    arabicForm: null,\n    ascent: number,\n    attributeName: null,\n    attributeType: null,\n    azimuth: number,\n    bandwidth: null,\n    baselineShift: null,\n    baseFrequency: null,\n    baseProfile: null,\n    bbox: null,\n    begin: null,\n    bias: number,\n    by: null,\n    calcMode: null,\n    capHeight: number,\n    className: spaceSeparated,\n    clip: null,\n    clipPath: null,\n    clipPathUnits: null,\n    clipRule: null,\n    color: null,\n    colorInterpolation: null,\n    colorInterpolationFilters: null,\n    colorProfile: null,\n    colorRendering: null,\n    content: null,\n    contentScriptType: null,\n    contentStyleType: null,\n    crossOrigin: null,\n    cursor: null,\n    cx: null,\n    cy: null,\n    d: null,\n    dataType: null,\n    defaultAction: null,\n    descent: number,\n    diffuseConstant: number,\n    direction: null,\n    display: null,\n    dur: null,\n    divisor: number,\n    dominantBaseline: null,\n    download: boolean,\n    dx: null,\n    dy: null,\n    edgeMode: null,\n    editable: null,\n    elevation: number,\n    enableBackground: null,\n    end: null,\n    event: null,\n    exponent: number,\n    externalResourcesRequired: null,\n    fill: null,\n    fillOpacity: number,\n    fillRule: null,\n    filter: null,\n    filterRes: null,\n    filterUnits: null,\n    floodColor: null,\n    floodOpacity: null,\n    focusable: null,\n    focusHighlight: null,\n    fontFamily: null,\n    fontSize: null,\n    fontSizeAdjust: null,\n    fontStretch: null,\n    fontStyle: null,\n    fontVariant: null,\n    fontWeight: null,\n    format: null,\n    fr: null,\n    from: null,\n    fx: null,\n    fy: null,\n    g1: commaSeparated,\n    g2: commaSeparated,\n    glyphName: commaSeparated,\n    glyphOrientationHorizontal: null,\n    glyphOrientationVertical: null,\n    glyphRef: null,\n    gradientTransform: null,\n    gradientUnits: null,\n    handler: null,\n    hanging: number,\n    hatchContentUnits: null,\n    hatchUnits: null,\n    height: null,\n    href: null,\n    hrefLang: null,\n    horizAdvX: number,\n    horizOriginX: number,\n    horizOriginY: number,\n    id: null,\n    ideographic: number,\n    imageRendering: null,\n    initialVisibility: null,\n    in: null,\n    in2: null,\n    intercept: number,\n    k: number,\n    k1: number,\n    k2: number,\n    k3: number,\n    k4: number,\n    kernelMatrix: commaOrSpaceSeparated,\n    kernelUnitLength: null,\n    keyPoints: null, // SEMI_COLON_SEPARATED\n    keySplines: null, // SEMI_COLON_SEPARATED\n    keyTimes: null, // SEMI_COLON_SEPARATED\n    kerning: null,\n    lang: null,\n    lengthAdjust: null,\n    letterSpacing: null,\n    lightingColor: null,\n    limitingConeAngle: number,\n    local: null,\n    markerEnd: null,\n    markerMid: null,\n    markerStart: null,\n    markerHeight: null,\n    markerUnits: null,\n    markerWidth: null,\n    mask: null,\n    maskContentUnits: null,\n    maskUnits: null,\n    mathematical: null,\n    max: null,\n    media: null,\n    mediaCharacterEncoding: null,\n    mediaContentEncodings: null,\n    mediaSize: number,\n    mediaTime: null,\n    method: null,\n    min: null,\n    mode: null,\n    name: null,\n    navDown: null,\n    navDownLeft: null,\n    navDownRight: null,\n    navLeft: null,\n    navNext: null,\n    navPrev: null,\n    navRight: null,\n    navUp: null,\n    navUpLeft: null,\n    navUpRight: null,\n    numOctaves: null,\n    observer: null,\n    offset: null,\n    onAbort: null,\n    onActivate: null,\n    onAfterPrint: null,\n    onBeforePrint: null,\n    onBegin: null,\n    onCancel: null,\n    onCanPlay: null,\n    onCanPlayThrough: null,\n    onChange: null,\n    onClick: null,\n    onClose: null,\n    onCopy: null,\n    onCueChange: null,\n    onCut: null,\n    onDblClick: null,\n    onDrag: null,\n    onDragEnd: null,\n    onDragEnter: null,\n    onDragExit: null,\n    onDragLeave: null,\n    onDragOver: null,\n    onDragStart: null,\n    onDrop: null,\n    onDurationChange: null,\n    onEmptied: null,\n    onEnd: null,\n    onEnded: null,\n    onError: null,\n    onFocus: null,\n    onFocusIn: null,\n    onFocusOut: null,\n    onHashChange: null,\n    onInput: null,\n    onInvalid: null,\n    onKeyDown: null,\n    onKeyPress: null,\n    onKeyUp: null,\n    onLoad: null,\n    onLoadedData: null,\n    onLoadedMetadata: null,\n    onLoadStart: null,\n    onMessage: null,\n    onMouseDown: null,\n    onMouseEnter: null,\n    onMouseLeave: null,\n    onMouseMove: null,\n    onMouseOut: null,\n    onMouseOver: null,\n    onMouseUp: null,\n    onMouseWheel: null,\n    onOffline: null,\n    onOnline: null,\n    onPageHide: null,\n    onPageShow: null,\n    onPaste: null,\n    onPause: null,\n    onPlay: null,\n    onPlaying: null,\n    onPopState: null,\n    onProgress: null,\n    onRateChange: null,\n    onRepeat: null,\n    onReset: null,\n    onResize: null,\n    onScroll: null,\n    onSeeked: null,\n    onSeeking: null,\n    onSelect: null,\n    onShow: null,\n    onStalled: null,\n    onStorage: null,\n    onSubmit: null,\n    onSuspend: null,\n    onTimeUpdate: null,\n    onToggle: null,\n    onUnload: null,\n    onVolumeChange: null,\n    onWaiting: null,\n    onZoom: null,\n    opacity: null,\n    operator: null,\n    order: null,\n    orient: null,\n    orientation: null,\n    origin: null,\n    overflow: null,\n    overlay: null,\n    overlinePosition: number,\n    overlineThickness: number,\n    paintOrder: null,\n    panose1: null,\n    path: null,\n    pathLength: number,\n    patternContentUnits: null,\n    patternTransform: null,\n    patternUnits: null,\n    phase: null,\n    ping: spaceSeparated,\n    pitch: null,\n    playbackOrder: null,\n    pointerEvents: null,\n    points: null,\n    pointsAtX: number,\n    pointsAtY: number,\n    pointsAtZ: number,\n    preserveAlpha: null,\n    preserveAspectRatio: null,\n    primitiveUnits: null,\n    propagate: null,\n    property: commaOrSpaceSeparated,\n    r: null,\n    radius: null,\n    referrerPolicy: null,\n    refX: null,\n    refY: null,\n    rel: commaOrSpaceSeparated,\n    rev: commaOrSpaceSeparated,\n    renderingIntent: null,\n    repeatCount: null,\n    repeatDur: null,\n    requiredExtensions: commaOrSpaceSeparated,\n    requiredFeatures: commaOrSpaceSeparated,\n    requiredFonts: commaOrSpaceSeparated,\n    requiredFormats: commaOrSpaceSeparated,\n    resource: null,\n    restart: null,\n    result: null,\n    rotate: null,\n    rx: null,\n    ry: null,\n    scale: null,\n    seed: null,\n    shapeRendering: null,\n    side: null,\n    slope: null,\n    snapshotTime: null,\n    specularConstant: number,\n    specularExponent: number,\n    spreadMethod: null,\n    spacing: null,\n    startOffset: null,\n    stdDeviation: null,\n    stemh: null,\n    stemv: null,\n    stitchTiles: null,\n    stopColor: null,\n    stopOpacity: null,\n    strikethroughPosition: number,\n    strikethroughThickness: number,\n    string: null,\n    stroke: null,\n    strokeDashArray: commaOrSpaceSeparated,\n    strokeDashOffset: null,\n    strokeLineCap: null,\n    strokeLineJoin: null,\n    strokeMiterLimit: number,\n    strokeOpacity: number,\n    strokeWidth: null,\n    style: null,\n    surfaceScale: number,\n    syncBehavior: null,\n    syncBehaviorDefault: null,\n    syncMaster: null,\n    syncTolerance: null,\n    syncToleranceDefault: null,\n    systemLanguage: commaOrSpaceSeparated,\n    tabIndex: number,\n    tableValues: null,\n    target: null,\n    targetX: number,\n    targetY: number,\n    textAnchor: null,\n    textDecoration: null,\n    textRendering: null,\n    textLength: null,\n    timelineBegin: null,\n    title: null,\n    transformBehavior: null,\n    type: null,\n    typeOf: commaOrSpaceSeparated,\n    to: null,\n    transform: null,\n    transformOrigin: null,\n    u1: null,\n    u2: null,\n    underlinePosition: number,\n    underlineThickness: number,\n    unicode: null,\n    unicodeBidi: null,\n    unicodeRange: null,\n    unitsPerEm: number,\n    values: null,\n    vAlphabetic: number,\n    vMathematical: number,\n    vectorEffect: null,\n    vHanging: number,\n    vIdeographic: number,\n    version: null,\n    vertAdvY: number,\n    vertOriginX: number,\n    vertOriginY: number,\n    viewBox: null,\n    viewTarget: null,\n    visibility: null,\n    width: null,\n    widths: null,\n    wordSpacing: null,\n    writingMode: null,\n    x: null,\n    x1: null,\n    x2: null,\n    xChannelSelector: null,\n    xHeight: number,\n    y: null,\n    y1: null,\n    y2: null,\n    yChannelSelector: null,\n    z: null,\n    zoomAndPan: null\n  },\n  space: 'svg',\n  transform: caseSensitiveTransform\n})\n","import {create} from './util/create.js'\n\nexport const xlink = create({\n  properties: {\n    xLinkActuate: null,\n    xLinkArcRole: null,\n    xLinkHref: null,\n    xLinkRole: null,\n    xLinkShow: null,\n    xLinkTitle: null,\n    xLinkType: null\n  },\n  space: 'xlink',\n  transform(_, property) {\n    return 'xlink:' + property.slice(5).toLowerCase()\n  }\n})\n","import {create} from './util/create.js'\nimport {caseInsensitiveTransform} from './util/case-insensitive-transform.js'\n\nexport const xmlns = create({\n  attributes: {xmlnsxlink: 'xmlns:xlink'},\n  properties: {xmlnsXLink: null, xmlns: null},\n  space: 'xmlns',\n  transform: caseInsensitiveTransform\n})\n","import {create} from './util/create.js'\n\nexport const xml = create({\n  properties: {xmlBase: null, xmlLang: null, xmlSpace: null},\n  space: 'xml',\n  transform(_, property) {\n    return 'xml:' + property.slice(3).toLowerCase()\n  }\n})\n","/**\n * Special cases for React (`Record<string, string>`).\n *\n * `hast` is close to `React` but differs in a couple of cases.\n * To get a React property from a hast property,\n * check if it is in `hastToReact`.\n * If it is, use the corresponding value;\n * otherwise, use the hast property.\n *\n * @type {Record<string, string>}\n */\nexport const hastToReact = {\n  classId: 'classID',\n  dataType: 'datatype',\n  itemId: 'itemID',\n  strokeDashArray: 'strokeDasharray',\n  strokeDashOffset: 'strokeDashoffset',\n  strokeLineCap: 'strokeLinecap',\n  strokeLineJoin: 'strokeLinejoin',\n  strokeMiterLimit: 'strokeMiterlimit',\n  typeOf: 'typeof',\n  xLinkActuate: 'xlinkActuate',\n  xLinkArcRole: 'xlinkArcrole',\n  xLinkHref: 'xlinkHref',\n  xLinkRole: 'xlinkRole',\n  xLinkShow: 'xlinkShow',\n  xLinkTitle: 'xlinkTitle',\n  xLinkType: 'xlinkType',\n  xmlnsXLink: 'xmlnsXlink'\n}\n","/**\n * @import {Schema} from 'property-information'\n */\n\nimport {DefinedInfo} from './util/defined-info.js'\nimport {Info} from './util/info.js'\nimport {normalize} from './normalize.js'\n\nconst cap = /[A-Z]/g\nconst dash = /-[a-z]/g\nconst valid = /^data[-\\w.:]+$/i\n\n/**\n * Look up info on a property.\n *\n * In most cases the given `schema` contains info on the property.\n * All standard,\n * most legacy,\n * and some non-standard properties are supported.\n * For these cases,\n * the returned `Info` has hints about the value of the property.\n *\n * `name` can also be a valid data attribute or property,\n * in which case an `Info` object with the correctly cased `attribute` and\n * `property` is returned.\n *\n * `name` can be an unknown attribute,\n * in which case an `Info` object with `attribute` and `property` set to the\n * given name is returned.\n * It is not recommended to provide unsupported legacy or recently specced\n * properties.\n *\n *\n * @param {Schema} schema\n *   Schema;\n *   either the `html` or `svg` export.\n * @param {string} value\n *   An attribute-like or property-like name;\n *   it will be passed through `normalize` to hopefully find the correct info.\n * @returns {Info}\n *   Info.\n */\nexport function find(schema, value) {\n  const normal = normalize(value)\n  let property = value\n  let Type = Info\n\n  if (normal in schema.normal) {\n    return schema.property[schema.normal[normal]]\n  }\n\n  if (normal.length > 4 && normal.slice(0, 4) === 'data' && valid.test(value)) {\n    // Attribute or property.\n    if (value.charAt(4) === '-') {\n      // Turn it into a property.\n      const rest = value.slice(5).replace(dash, camelcase)\n      property = 'data' + rest.charAt(0).toUpperCase() + rest.slice(1)\n    } else {\n      // Turn it into an attribute.\n      const rest = value.slice(4)\n\n      if (!dash.test(rest)) {\n        let dashes = rest.replace(cap, kebab)\n\n        if (dashes.charAt(0) !== '-') {\n          dashes = '-' + dashes\n        }\n\n        value = 'data' + dashes\n      }\n    }\n\n    Type = DefinedInfo\n  }\n\n  return new Type(property, value)\n}\n\n/**\n * @param {string} $0\n *   Value.\n * @returns {string}\n *   Kebab.\n */\nfunction kebab($0) {\n  return '-' + $0.toLowerCase()\n}\n\n/**\n * @param {string} $0\n *   Value.\n * @returns {string}\n *   Camel.\n */\nfunction camelcase($0) {\n  return $0.charAt(1).toUpperCase()\n}\n","// Note: types exposed from `index.d.ts`.\nimport {merge} from './lib/util/merge.js'\nimport {aria} from './lib/aria.js'\nimport {html as htmlBase} from './lib/html.js'\nimport {svg as svgBase} from './lib/svg.js'\nimport {xlink} from './lib/xlink.js'\nimport {xmlns} from './lib/xmlns.js'\nimport {xml} from './lib/xml.js'\n\nexport {hastToReact} from './lib/hast-to-react.js'\n\nexport const html = merge([aria, htmlBase, xlink, xmlns, xml], 'html')\n\nexport {find} from './lib/find.js'\nexport {normalize} from './lib/normalize.js'\n\nexport const svg = merge([aria, svgBase, xlink, xmlns, xml], 'svg')\n","/**\n * Parse space-separated tokens to an array of strings.\n *\n * @param {string} value\n *   Space-separated tokens.\n * @returns {Array<string>}\n *   List of tokens.\n */\nexport function parse(value) {\n  const input = String(value || '').trim()\n  return input ? input.split(/[ \\t\\n\\r\\f]+/g) : []\n}\n\n/**\n * Serialize an array of strings as space separated-tokens.\n *\n * @param {Array<string|number>} values\n *   List of tokens.\n * @returns {string}\n *   Space-separated tokens.\n */\nexport function stringify(values) {\n  return values.join(' ').trim()\n}\n","'use strict';\n\n// http://www.w3.org/TR/CSS21/grammar.html\n// https://github.com/visionmedia/css-parse/pull/49#issuecomment-30088027\nvar COMMENT_REGEX = /\\/\\*[^*]*\\*+([^/*][^*]*\\*+)*\\//g;\n\nvar NEWLINE_REGEX = /\\n/g;\nvar WHITESPACE_REGEX = /^\\s*/;\n\n// declaration\nvar PROPERTY_REGEX = /^(\\*?[-#/*\\\\\\w]+(\\[[0-9a-z_-]+\\])?)\\s*/;\nvar COLON_REGEX = /^:\\s*/;\nvar VALUE_REGEX = /^((?:'(?:\\\\'|.)*?'|\"(?:\\\\\"|.)*?\"|\\([^)]*?\\)|[^};])+)/;\nvar SEMICOLON_REGEX = /^[;\\s]*/;\n\n// https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/String/Trim#Polyfill\nvar TRIM_REGEX = /^\\s+|\\s+$/g;\n\n// strings\nvar NEWLINE = '\\n';\nvar FORWARD_SLASH = '/';\nvar ASTERISK = '*';\nvar EMPTY_STRING = '';\n\n// types\nvar TYPE_COMMENT = 'comment';\nvar TYPE_DECLARATION = 'declaration';\n\n/**\n * @param {String} style\n * @param {Object} [options]\n * @return {Object[]}\n * @throws {TypeError}\n * @throws {Error}\n */\nfunction index (style, options) {\n  if (typeof style !== 'string') {\n    throw new TypeError('First argument must be a string');\n  }\n\n  if (!style) return [];\n\n  options = options || {};\n\n  /**\n   * Positional.\n   */\n  var lineno = 1;\n  var column = 1;\n\n  /**\n   * Update lineno and column based on `str`.\n   *\n   * @param {String} str\n   */\n  function updatePosition(str) {\n    var lines = str.match(NEWLINE_REGEX);\n    if (lines) lineno += lines.length;\n    var i = str.lastIndexOf(NEWLINE);\n    column = ~i ? str.length - i : column + str.length;\n  }\n\n  /**\n   * Mark position and patch `node.position`.\n   *\n   * @return {Function}\n   */\n  function position() {\n    var start = { line: lineno, column: column };\n    return function (node) {\n      node.position = new Position(start);\n      whitespace();\n      return node;\n    };\n  }\n\n  /**\n   * Store position information for a node.\n   *\n   * @constructor\n   * @property {Object} start\n   * @property {Object} end\n   * @property {undefined|String} source\n   */\n  function Position(start) {\n    this.start = start;\n    this.end = { line: lineno, column: column };\n    this.source = options.source;\n  }\n\n  /**\n   * Non-enumerable source string.\n   */\n  Position.prototype.content = style;\n\n  /**\n   * Error `msg`.\n   *\n   * @param {String} msg\n   * @throws {Error}\n   */\n  function error(msg) {\n    var err = new Error(\n      options.source + ':' + lineno + ':' + column + ': ' + msg\n    );\n    err.reason = msg;\n    err.filename = options.source;\n    err.line = lineno;\n    err.column = column;\n    err.source = style;\n\n    if (options.silent) ; else {\n      throw err;\n    }\n  }\n\n  /**\n   * Match `re` and return captures.\n   *\n   * @param {RegExp} re\n   * @return {undefined|Array}\n   */\n  function match(re) {\n    var m = re.exec(style);\n    if (!m) return;\n    var str = m[0];\n    updatePosition(str);\n    style = style.slice(str.length);\n    return m;\n  }\n\n  /**\n   * Parse whitespace.\n   */\n  function whitespace() {\n    match(WHITESPACE_REGEX);\n  }\n\n  /**\n   * Parse comments.\n   *\n   * @param {Object[]} [rules]\n   * @return {Object[]}\n   */\n  function comments(rules) {\n    var c;\n    rules = rules || [];\n    while ((c = comment())) {\n      if (c !== false) {\n        rules.push(c);\n      }\n    }\n    return rules;\n  }\n\n  /**\n   * Parse comment.\n   *\n   * @return {Object}\n   * @throws {Error}\n   */\n  function comment() {\n    var pos = position();\n    if (FORWARD_SLASH != style.charAt(0) || ASTERISK != style.charAt(1)) return;\n\n    var i = 2;\n    while (\n      EMPTY_STRING != style.charAt(i) &&\n      (ASTERISK != style.charAt(i) || FORWARD_SLASH != style.charAt(i + 1))\n    ) {\n      ++i;\n    }\n    i += 2;\n\n    if (EMPTY_STRING === style.charAt(i - 1)) {\n      return error('End of comment missing');\n    }\n\n    var str = style.slice(2, i - 2);\n    column += 2;\n    updatePosition(str);\n    style = style.slice(i);\n    column += 2;\n\n    return pos({\n      type: TYPE_COMMENT,\n      comment: str\n    });\n  }\n\n  /**\n   * Parse declaration.\n   *\n   * @return {Object}\n   * @throws {Error}\n   */\n  function declaration() {\n    var pos = position();\n\n    // prop\n    var prop = match(PROPERTY_REGEX);\n    if (!prop) return;\n    comment();\n\n    // :\n    if (!match(COLON_REGEX)) return error(\"property missing ':'\");\n\n    // val\n    var val = match(VALUE_REGEX);\n\n    var ret = pos({\n      type: TYPE_DECLARATION,\n      property: trim(prop[0].replace(COMMENT_REGEX, EMPTY_STRING)),\n      value: val\n        ? trim(val[0].replace(COMMENT_REGEX, EMPTY_STRING))\n        : EMPTY_STRING\n    });\n\n    // ;\n    match(SEMICOLON_REGEX);\n\n    return ret;\n  }\n\n  /**\n   * Parse declarations.\n   *\n   * @return {Object[]}\n   */\n  function declarations() {\n    var decls = [];\n\n    comments(decls);\n\n    // declarations\n    var decl;\n    while ((decl = declaration())) {\n      if (decl !== false) {\n        decls.push(decl);\n        comments(decls);\n      }\n    }\n\n    return decls;\n  }\n\n  whitespace();\n  return declarations();\n}\n\n/**\n * Trim `str`.\n *\n * @param {String} str\n * @return {String}\n */\nfunction trim(str) {\n  return str ? str.replace(TRIM_REGEX, EMPTY_STRING) : EMPTY_STRING;\n}\n\nmodule.exports = index;\n//# sourceMappingURL=index.js.map\n","\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n    return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.default = StyleToObject;\nconst inline_style_parser_1 = __importDefault(require(\"inline-style-parser\"));\n/**\n * Parses inline style to object.\n *\n * @param style - Inline style.\n * @param iterator - Iterator.\n * @returns - Style object or null.\n *\n * @example Parsing inline style to object:\n *\n * ```js\n * import parse from 'style-to-object';\n * parse('line-height: 42;'); // { 'line-height': '42' }\n * ```\n */\nfunction StyleToObject(style, iterator) {\n    let styleObject = null;\n    if (!style || typeof style !== 'string') {\n        return styleObject;\n    }\n    const declarations = (0, inline_style_parser_1.default)(style);\n    const hasIterator = typeof iterator === 'function';\n    declarations.forEach((declaration) => {\n        if (declaration.type !== 'declaration') {\n            return;\n        }\n        const { property, value } = declaration;\n        if (hasIterator) {\n            iterator(property, value, declaration);\n        }\n        else if (value) {\n            styleObject = styleObject || {};\n            styleObject[property] = value;\n        }\n    });\n    return styleObject;\n}\n//# sourceMappingURL=index.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.camelCase = void 0;\nvar CUSTOM_PROPERTY_REGEX = /^--[a-zA-Z0-9_-]+$/;\nvar HYPHEN_REGEX = /-([a-z])/g;\nvar NO_HYPHEN_REGEX = /^[^-]+$/;\nvar VENDOR_PREFIX_REGEX = /^-(webkit|moz|ms|o|khtml)-/;\nvar MS_VENDOR_PREFIX_REGEX = /^-(ms)-/;\n/**\n * Checks whether to skip camelCase.\n */\nvar skipCamelCase = function (property) {\n    return !property ||\n        NO_HYPHEN_REGEX.test(property) ||\n        CUSTOM_PROPERTY_REGEX.test(property);\n};\n/**\n * Replacer that capitalizes first character.\n */\nvar capitalize = function (match, character) {\n    return character.toUpperCase();\n};\n/**\n * Replacer that removes beginning hyphen of vendor prefix property.\n */\nvar trimHyphen = function (match, prefix) { return \"\".concat(prefix, \"-\"); };\n/**\n * CamelCases a CSS property.\n */\nvar camelCase = function (property, options) {\n    if (options === void 0) { options = {}; }\n    if (skipCamelCase(property)) {\n        return property;\n    }\n    property = property.toLowerCase();\n    if (options.reactCompat) {\n        // `-ms` vendor prefix should not be capitalized\n        property = property.replace(MS_VENDOR_PREFIX_REGEX, trimHyphen);\n    }\n    else {\n        // for non-React, remove first hyphen so vendor prefix is not capitalized\n        property = property.replace(VENDOR_PREFIX_REGEX, trimHyphen);\n    }\n    return property.replace(HYPHEN_REGEX, capitalize);\n};\nexports.camelCase = camelCase;\n//# sourceMappingURL=utilities.js.map","\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n    return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nvar style_to_object_1 = __importDefault(require(\"style-to-object\"));\nvar utilities_1 = require(\"./utilities\");\n/**\n * Parses CSS inline style to JavaScript object (camelCased).\n */\nfunction StyleToJS(style, options) {\n    var output = {};\n    if (!style || typeof style !== 'string') {\n        return output;\n    }\n    (0, style_to_object_1.default)(style, function (property, value) {\n        // skip CSS comment\n        if (property && value) {\n            output[(0, utilities_1.camelCase)(property, options)] = value;\n        }\n    });\n    return output;\n}\nStyleToJS.default = StyleToJS;\nmodule.exports = StyleToJS;\n//# sourceMappingURL=index.js.map","/**\n * @typedef {import('unist').Node} Node\n * @typedef {import('unist').Point} Point\n * @typedef {import('unist').Position} Position\n */\n\n/**\n * @typedef NodeLike\n * @property {string} type\n * @property {PositionLike | null | undefined} [position]\n *\n * @typedef PositionLike\n * @property {PointLike | null | undefined} [start]\n * @property {PointLike | null | undefined} [end]\n *\n * @typedef PointLike\n * @property {number | null | undefined} [line]\n * @property {number | null | undefined} [column]\n * @property {number | null | undefined} [offset]\n */\n\n/**\n * Get the ending point of `node`.\n *\n * @param node\n *   Node.\n * @returns\n *   Point.\n */\nexport const pointEnd = point('end')\n\n/**\n * Get the starting point of `node`.\n *\n * @param node\n *   Node.\n * @returns\n *   Point.\n */\nexport const pointStart = point('start')\n\n/**\n * Get the positional info of `node`.\n *\n * @param {'end' | 'start'} type\n *   Side.\n * @returns\n *   Getter.\n */\nfunction point(type) {\n  return point\n\n  /**\n   * Get the point info of `node` at a bound side.\n   *\n   * @param {Node | NodeLike | null | undefined} [node]\n   * @returns {Point | undefined}\n   */\n  function point(node) {\n    const point = (node && node.position && node.position[type]) || {}\n\n    if (\n      typeof point.line === 'number' &&\n      point.line > 0 &&\n      typeof point.column === 'number' &&\n      point.column > 0\n    ) {\n      return {\n        line: point.line,\n        column: point.column,\n        offset:\n          typeof point.offset === 'number' && point.offset > -1\n            ? point.offset\n            : undefined\n      }\n    }\n  }\n}\n\n/**\n * Get the positional info of `node`.\n *\n * @param {Node | NodeLike | null | undefined} [node]\n *   Node.\n * @returns {Position | undefined}\n *   Position.\n */\nexport function position(node) {\n  const start = pointStart(node)\n  const end = pointEnd(node)\n\n  if (start && end) {\n    return {start, end}\n  }\n}\n","/**\n * @typedef {import('unist').Node} Node\n * @typedef {import('unist').Point} Point\n * @typedef {import('unist').Position} Position\n */\n\n/**\n * @typedef NodeLike\n * @property {string} type\n * @property {PositionLike | null | undefined} [position]\n *\n * @typedef PointLike\n * @property {number | null | undefined} [line]\n * @property {number | null | undefined} [column]\n * @property {number | null | undefined} [offset]\n *\n * @typedef PositionLike\n * @property {PointLike | null | undefined} [start]\n * @property {PointLike | null | undefined} [end]\n */\n\n/**\n * Serialize the positional info of a point, position (start and end points),\n * or node.\n *\n * @param {Node | NodeLike | Point | PointLike | Position | PositionLike | null | undefined} [value]\n *   Node, position, or point.\n * @returns {string}\n *   Pretty printed positional info of a node (`string`).\n *\n *   In the format of a range `ls:cs-le:ce` (when given `node` or `position`)\n *   or a point `l:c` (when given `point`), where `l` stands for line, `c` for\n *   column, `s` for `start`, and `e` for end.\n *   An empty string (`''`) is returned if the given value is neither `node`,\n *   `position`, nor `point`.\n */\nexport function stringifyPosition(value) {\n  // Nothing.\n  if (!value || typeof value !== 'object') {\n    return ''\n  }\n\n  // Node.\n  if ('position' in value || 'type' in value) {\n    return position(value.position)\n  }\n\n  // Position.\n  if ('start' in value || 'end' in value) {\n    return position(value)\n  }\n\n  // Point.\n  if ('line' in value || 'column' in value) {\n    return point(value)\n  }\n\n  // ?\n  return ''\n}\n\n/**\n * @param {Point | PointLike | null | undefined} point\n * @returns {string}\n */\nfunction point(point) {\n  return index(point && point.line) + ':' + index(point && point.column)\n}\n\n/**\n * @param {Position | PositionLike | null | undefined} pos\n * @returns {string}\n */\nfunction position(pos) {\n  return point(pos && pos.start) + '-' + point(pos && pos.end)\n}\n\n/**\n * @param {number | null | undefined} value\n * @returns {number}\n */\nfunction index(value) {\n  return value && typeof value === 'number' ? value : 1\n}\n","/**\n * @import {Node, Point, Position} from 'unist'\n */\n\n/**\n * @typedef {object & {type: string, position?: Position | undefined}} NodeLike\n *\n * @typedef Options\n *   Configuration.\n * @property {Array<Node> | null | undefined} [ancestors]\n *   Stack of (inclusive) ancestor nodes surrounding the message (optional).\n * @property {Error | null | undefined} [cause]\n *   Original error cause of the message (optional).\n * @property {Point | Position | null | undefined} [place]\n *   Place of message (optional).\n * @property {string | null | undefined} [ruleId]\n *   Category of message (optional, example: `'my-rule'`).\n * @property {string | null | undefined} [source]\n *   Namespace of who sent the message (optional, example: `'my-package'`).\n */\n\nimport {stringifyPosition} from 'unist-util-stringify-position'\n\n/**\n * Message.\n */\nexport class VFileMessage extends Error {\n  /**\n   * Create a message for `reason`.\n   *\n   * > 🪦 **Note**: also has obsolete signatures.\n   *\n   * @overload\n   * @param {string} reason\n   * @param {Options | null | undefined} [options]\n   * @returns\n   *\n   * @overload\n   * @param {string} reason\n   * @param {Node | NodeLike | null | undefined} parent\n   * @param {string | null | undefined} [origin]\n   * @returns\n   *\n   * @overload\n   * @param {string} reason\n   * @param {Point | Position | null | undefined} place\n   * @param {string | null | undefined} [origin]\n   * @returns\n   *\n   * @overload\n   * @param {string} reason\n   * @param {string | null | undefined} [origin]\n   * @returns\n   *\n   * @overload\n   * @param {Error | VFileMessage} cause\n   * @param {Node | NodeLike | null | undefined} parent\n   * @param {string | null | undefined} [origin]\n   * @returns\n   *\n   * @overload\n   * @param {Error | VFileMessage} cause\n   * @param {Point | Position | null | undefined} place\n   * @param {string | null | undefined} [origin]\n   * @returns\n   *\n   * @overload\n   * @param {Error | VFileMessage} cause\n   * @param {string | null | undefined} [origin]\n   * @returns\n   *\n   * @param {Error | VFileMessage | string} causeOrReason\n   *   Reason for message, should use markdown.\n   * @param {Node | NodeLike | Options | Point | Position | string | null | undefined} [optionsOrParentOrPlace]\n   *   Configuration (optional).\n   * @param {string | null | undefined} [origin]\n   *   Place in code where the message originates (example:\n   *   `'my-package:my-rule'` or `'my-rule'`).\n   * @returns\n   *   Instance of `VFileMessage`.\n   */\n  // eslint-disable-next-line complexity\n  constructor(causeOrReason, optionsOrParentOrPlace, origin) {\n    super()\n\n    if (typeof optionsOrParentOrPlace === 'string') {\n      origin = optionsOrParentOrPlace\n      optionsOrParentOrPlace = undefined\n    }\n\n    /** @type {string} */\n    let reason = ''\n    /** @type {Options} */\n    let options = {}\n    let legacyCause = false\n\n    if (optionsOrParentOrPlace) {\n      // Point.\n      if (\n        'line' in optionsOrParentOrPlace &&\n        'column' in optionsOrParentOrPlace\n      ) {\n        options = {place: optionsOrParentOrPlace}\n      }\n      // Position.\n      else if (\n        'start' in optionsOrParentOrPlace &&\n        'end' in optionsOrParentOrPlace\n      ) {\n        options = {place: optionsOrParentOrPlace}\n      }\n      // Node.\n      else if ('type' in optionsOrParentOrPlace) {\n        options = {\n          ancestors: [optionsOrParentOrPlace],\n          place: optionsOrParentOrPlace.position\n        }\n      }\n      // Options.\n      else {\n        options = {...optionsOrParentOrPlace}\n      }\n    }\n\n    if (typeof causeOrReason === 'string') {\n      reason = causeOrReason\n    }\n    // Error.\n    else if (!options.cause && causeOrReason) {\n      legacyCause = true\n      reason = causeOrReason.message\n      options.cause = causeOrReason\n    }\n\n    if (!options.ruleId && !options.source && typeof origin === 'string') {\n      const index = origin.indexOf(':')\n\n      if (index === -1) {\n        options.ruleId = origin\n      } else {\n        options.source = origin.slice(0, index)\n        options.ruleId = origin.slice(index + 1)\n      }\n    }\n\n    if (!options.place && options.ancestors && options.ancestors) {\n      const parent = options.ancestors[options.ancestors.length - 1]\n\n      if (parent) {\n        options.place = parent.position\n      }\n    }\n\n    const start =\n      options.place && 'start' in options.place\n        ? options.place.start\n        : options.place\n\n    /**\n     * Stack of ancestor nodes surrounding the message.\n     *\n     * @type {Array<Node> | undefined}\n     */\n    this.ancestors = options.ancestors || undefined\n\n    /**\n     * Original error cause of the message.\n     *\n     * @type {Error | undefined}\n     */\n    this.cause = options.cause || undefined\n\n    /**\n     * Starting column of message.\n     *\n     * @type {number | undefined}\n     */\n    this.column = start ? start.column : undefined\n\n    /**\n     * State of problem.\n     *\n     * * `true` — error, file not usable\n     * * `false` — warning, change may be needed\n     * * `undefined` — change likely not needed\n     *\n     * @type {boolean | null | undefined}\n     */\n    this.fatal = undefined\n\n    /**\n     * Path of a file (used throughout the `VFile` ecosystem).\n     *\n     * @type {string | undefined}\n     */\n    this.file = ''\n\n    // Field from `Error`.\n    /**\n     * Reason for message.\n     *\n     * @type {string}\n     */\n    this.message = reason\n\n    /**\n     * Starting line of error.\n     *\n     * @type {number | undefined}\n     */\n    this.line = start ? start.line : undefined\n\n    // Field from `Error`.\n    /**\n     * Serialized positional info of message.\n     *\n     * On normal errors, this would be something like `ParseError`, buit in\n     * `VFile` messages we use this space to show where an error happened.\n     */\n    this.name = stringifyPosition(options.place) || '1:1'\n\n    /**\n     * Place of message.\n     *\n     * @type {Point | Position | undefined}\n     */\n    this.place = options.place || undefined\n\n    /**\n     * Reason for message, should use markdown.\n     *\n     * @type {string}\n     */\n    this.reason = this.message\n\n    /**\n     * Category of message (example: `'my-rule'`).\n     *\n     * @type {string | undefined}\n     */\n    this.ruleId = options.ruleId || undefined\n\n    /**\n     * Namespace of message (example: `'my-package'`).\n     *\n     * @type {string | undefined}\n     */\n    this.source = options.source || undefined\n\n    // Field from `Error`.\n    /**\n     * Stack of message.\n     *\n     * This is used by normal errors to show where something happened in\n     * programming code, irrelevant for `VFile` messages,\n     *\n     * @type {string}\n     */\n    this.stack =\n      legacyCause && options.cause && typeof options.cause.stack === 'string'\n        ? options.cause.stack\n        : ''\n\n    // The following fields are “well known”.\n    // Not standard.\n    // Feel free to add other non-standard fields to your messages.\n\n    /**\n     * Specify the source value that’s being reported, which is deemed\n     * incorrect.\n     *\n     * @type {string | undefined}\n     */\n    this.actual = undefined\n\n    /**\n     * Suggest acceptable values that can be used instead of `actual`.\n     *\n     * @type {Array<string> | undefined}\n     */\n    this.expected = undefined\n\n    /**\n     * Long form description of the message (you should use markdown).\n     *\n     * @type {string | undefined}\n     */\n    this.note = undefined\n\n    /**\n     * Link to docs for the message.\n     *\n     * > 👉 **Note**: this must be an absolute URL that can be passed as `x`\n     * > to `new URL(x)`.\n     *\n     * @type {string | undefined}\n     */\n    this.url = undefined\n  }\n}\n\nVFileMessage.prototype.file = ''\nVFileMessage.prototype.name = ''\nVFileMessage.prototype.reason = ''\nVFileMessage.prototype.message = ''\nVFileMessage.prototype.stack = ''\nVFileMessage.prototype.column = undefined\nVFileMessage.prototype.line = undefined\nVFileMessage.prototype.ancestors = undefined\nVFileMessage.prototype.cause = undefined\nVFileMessage.prototype.fatal = undefined\nVFileMessage.prototype.place = undefined\nVFileMessage.prototype.ruleId = undefined\nVFileMessage.prototype.source = undefined\n","/**\n * @import {Identifier, Literal, MemberExpression} from 'estree'\n * @import {Jsx, JsxDev, Options, Props} from 'hast-util-to-jsx-runtime'\n * @import {Element, Nodes, Parents, Root, Text} from 'hast'\n * @import {MdxFlowExpressionHast, MdxTextExpressionHast} from 'mdast-util-mdx-expression'\n * @import {MdxJsxFlowElementHast, MdxJsxTextElementHast} from 'mdast-util-mdx-jsx'\n * @import {MdxjsEsmHast} from 'mdast-util-mdxjs-esm'\n * @import {Position} from 'unist'\n * @import {Child, Create, Field, JsxElement, State, Style} from './types.js'\n */\n\nimport {stringify as commas} from 'comma-separated-tokens'\nimport {ok as assert} from 'devlop'\nimport {name as isIdentifierName} from 'estree-util-is-identifier-name'\nimport {whitespace} from 'hast-util-whitespace'\nimport {find, hastToReact, html, svg} from 'property-information'\nimport {stringify as spaces} from 'space-separated-tokens'\nimport styleToJs from 'style-to-js'\nimport {pointStart} from 'unist-util-position'\nimport {VFileMessage} from 'vfile-message'\n\n// To do: next major: `Object.hasOwn`.\nconst own = {}.hasOwnProperty\n\n/** @type {Map<string, number>} */\nconst emptyMap = new Map()\n\nconst cap = /[A-Z]/g\n\n// `react-dom` triggers a warning for *any* white space in tables.\n// To follow GFM, `mdast-util-to-hast` injects line endings between elements.\n// Other tools might do so too, but they don’t do here, so we remove all of\n// that.\n\n// See: <https://github.com/facebook/react/pull/7081>.\n// See: <https://github.com/facebook/react/pull/7515>.\n// See: <https://github.com/remarkjs/remark-react/issues/64>.\n// See: <https://github.com/rehypejs/rehype-react/pull/29>.\n// See: <https://github.com/rehypejs/rehype-react/pull/32>.\n// See: <https://github.com/rehypejs/rehype-react/pull/45>.\nconst tableElements = new Set(['table', 'tbody', 'thead', 'tfoot', 'tr'])\n\nconst tableCellElement = new Set(['td', 'th'])\n\nconst docs = 'https://github.com/syntax-tree/hast-util-to-jsx-runtime'\n\n/**\n * Transform a hast tree to preact, react, solid, svelte, vue, etc.,\n * with an automatic JSX runtime.\n *\n * @param {Nodes} tree\n *   Tree to transform.\n * @param {Options} options\n *   Configuration (required).\n * @returns {JsxElement}\n *   JSX element.\n */\n\nexport function toJsxRuntime(tree, options) {\n  if (!options || options.Fragment === undefined) {\n    throw new TypeError('Expected `Fragment` in options')\n  }\n\n  const filePath = options.filePath || undefined\n  /** @type {Create} */\n  let create\n\n  if (options.development) {\n    if (typeof options.jsxDEV !== 'function') {\n      throw new TypeError(\n        'Expected `jsxDEV` in options when `development: true`'\n      )\n    }\n\n    create = developmentCreate(filePath, options.jsxDEV)\n  } else {\n    if (typeof options.jsx !== 'function') {\n      throw new TypeError('Expected `jsx` in production options')\n    }\n\n    if (typeof options.jsxs !== 'function') {\n      throw new TypeError('Expected `jsxs` in production options')\n    }\n\n    create = productionCreate(filePath, options.jsx, options.jsxs)\n  }\n\n  /** @type {State} */\n  const state = {\n    Fragment: options.Fragment,\n    ancestors: [],\n    components: options.components || {},\n    create,\n    elementAttributeNameCase: options.elementAttributeNameCase || 'react',\n    evaluater: options.createEvaluater ? options.createEvaluater() : undefined,\n    filePath,\n    ignoreInvalidStyle: options.ignoreInvalidStyle || false,\n    passKeys: options.passKeys !== false,\n    passNode: options.passNode || false,\n    schema: options.space === 'svg' ? svg : html,\n    stylePropertyNameCase: options.stylePropertyNameCase || 'dom',\n    tableCellAlignToStyle: options.tableCellAlignToStyle !== false\n  }\n\n  const result = one(state, tree, undefined)\n\n  // JSX element.\n  if (result && typeof result !== 'string') {\n    return result\n  }\n\n  // Text node or something that turned into nothing.\n  return state.create(\n    tree,\n    state.Fragment,\n    {children: result || undefined},\n    undefined\n  )\n}\n\n/**\n * Transform a node.\n *\n * @param {State} state\n *   Info passed around.\n * @param {Nodes} node\n *   Current node.\n * @param {string | undefined} key\n *   Key.\n * @returns {Child | undefined}\n *   Child, optional.\n */\nfunction one(state, node, key) {\n  if (node.type === 'element') {\n    return element(state, node, key)\n  }\n\n  if (node.type === 'mdxFlowExpression' || node.type === 'mdxTextExpression') {\n    return mdxExpression(state, node)\n  }\n\n  if (node.type === 'mdxJsxFlowElement' || node.type === 'mdxJsxTextElement') {\n    return mdxJsxElement(state, node, key)\n  }\n\n  if (node.type === 'mdxjsEsm') {\n    return mdxEsm(state, node)\n  }\n\n  if (node.type === 'root') {\n    return root(state, node, key)\n  }\n\n  if (node.type === 'text') {\n    return text(state, node)\n  }\n}\n\n/**\n * Handle element.\n *\n * @param {State} state\n *   Info passed around.\n * @param {Element} node\n *   Current node.\n * @param {string | undefined} key\n *   Key.\n * @returns {Child | undefined}\n *   Child, optional.\n */\nfunction element(state, node, key) {\n  const parentSchema = state.schema\n  let schema = parentSchema\n\n  if (node.tagName.toLowerCase() === 'svg' && parentSchema.space === 'html') {\n    schema = svg\n    state.schema = schema\n  }\n\n  state.ancestors.push(node)\n\n  const type = findComponentFromName(state, node.tagName, false)\n  const props = createElementProps(state, node)\n  let children = createChildren(state, node)\n\n  if (tableElements.has(node.tagName)) {\n    children = children.filter(function (child) {\n      return typeof child === 'string' ? !whitespace(child) : true\n    })\n  }\n\n  addNode(state, props, type, node)\n  addChildren(props, children)\n\n  // Restore.\n  state.ancestors.pop()\n  state.schema = parentSchema\n\n  return state.create(node, type, props, key)\n}\n\n/**\n * Handle MDX expression.\n *\n * @param {State} state\n *   Info passed around.\n * @param {MdxFlowExpressionHast | MdxTextExpressionHast} node\n *   Current node.\n * @returns {Child | undefined}\n *   Child, optional.\n */\nfunction mdxExpression(state, node) {\n  if (node.data && node.data.estree && state.evaluater) {\n    const program = node.data.estree\n    const expression = program.body[0]\n    assert(expression.type === 'ExpressionStatement')\n\n    // Assume result is a child.\n    return /** @type {Child | undefined} */ (\n      state.evaluater.evaluateExpression(expression.expression)\n    )\n  }\n\n  crashEstree(state, node.position)\n}\n\n/**\n * Handle MDX ESM.\n *\n * @param {State} state\n *   Info passed around.\n * @param {MdxjsEsmHast} node\n *   Current node.\n * @returns {Child | undefined}\n *   Child, optional.\n */\nfunction mdxEsm(state, node) {\n  if (node.data && node.data.estree && state.evaluater) {\n    // Assume result is a child.\n    return /** @type {Child | undefined} */ (\n      state.evaluater.evaluateProgram(node.data.estree)\n    )\n  }\n\n  crashEstree(state, node.position)\n}\n\n/**\n * Handle MDX JSX.\n *\n * @param {State} state\n *   Info passed around.\n * @param {MdxJsxFlowElementHast | MdxJsxTextElementHast} node\n *   Current node.\n * @param {string | undefined} key\n *   Key.\n * @returns {Child | undefined}\n *   Child, optional.\n */\nfunction mdxJsxElement(state, node, key) {\n  const parentSchema = state.schema\n  let schema = parentSchema\n\n  if (node.name === 'svg' && parentSchema.space === 'html') {\n    schema = svg\n    state.schema = schema\n  }\n\n  state.ancestors.push(node)\n\n  const type =\n    node.name === null\n      ? state.Fragment\n      : findComponentFromName(state, node.name, true)\n  const props = createJsxElementProps(state, node)\n  const children = createChildren(state, node)\n\n  addNode(state, props, type, node)\n  addChildren(props, children)\n\n  // Restore.\n  state.ancestors.pop()\n  state.schema = parentSchema\n\n  return state.create(node, type, props, key)\n}\n\n/**\n * Handle root.\n *\n * @param {State} state\n *   Info passed around.\n * @param {Root} node\n *   Current node.\n * @param {string | undefined} key\n *   Key.\n * @returns {Child | undefined}\n *   Child, optional.\n */\nfunction root(state, node, key) {\n  /** @type {Props} */\n  const props = {}\n\n  addChildren(props, createChildren(state, node))\n\n  return state.create(node, state.Fragment, props, key)\n}\n\n/**\n * Handle text.\n *\n * @param {State} _\n *   Info passed around.\n * @param {Text} node\n *   Current node.\n * @returns {Child | undefined}\n *   Child, optional.\n */\nfunction text(_, node) {\n  return node.value\n}\n\n/**\n * Add `node` to props.\n *\n * @param {State} state\n *   Info passed around.\n * @param {Props} props\n *   Props.\n * @param {unknown} type\n *   Type.\n * @param {Element | MdxJsxFlowElementHast | MdxJsxTextElementHast} node\n *   Node.\n * @returns {undefined}\n *   Nothing.\n */\nfunction addNode(state, props, type, node) {\n  // If this is swapped out for a component:\n  if (typeof type !== 'string' && type !== state.Fragment && state.passNode) {\n    props.node = node\n  }\n}\n\n/**\n * Add children to props.\n *\n * @param {Props} props\n *   Props.\n * @param {Array<Child>} children\n *   Children.\n * @returns {undefined}\n *   Nothing.\n */\nfunction addChildren(props, children) {\n  if (children.length > 0) {\n    const value = children.length > 1 ? children : children[0]\n\n    if (value) {\n      props.children = value\n    }\n  }\n}\n\n/**\n * @param {string | undefined} _\n *   Path to file.\n * @param {Jsx} jsx\n *   Dynamic.\n * @param {Jsx} jsxs\n *   Static.\n * @returns {Create}\n *   Create a production element.\n */\nfunction productionCreate(_, jsx, jsxs) {\n  return create\n  /** @type {Create} */\n  function create(_, type, props, key) {\n    // Only an array when there are 2 or more children.\n    const isStaticChildren = Array.isArray(props.children)\n    const fn = isStaticChildren ? jsxs : jsx\n    return key ? fn(type, props, key) : fn(type, props)\n  }\n}\n\n/**\n * @param {string | undefined} filePath\n *   Path to file.\n * @param {JsxDev} jsxDEV\n *   Development.\n * @returns {Create}\n *   Create a development element.\n */\nfunction developmentCreate(filePath, jsxDEV) {\n  return create\n  /** @type {Create} */\n  function create(node, type, props, key) {\n    // Only an array when there are 2 or more children.\n    const isStaticChildren = Array.isArray(props.children)\n    const point = pointStart(node)\n    return jsxDEV(\n      type,\n      props,\n      key,\n      isStaticChildren,\n      {\n        columnNumber: point ? point.column - 1 : undefined,\n        fileName: filePath,\n        lineNumber: point ? point.line : undefined\n      },\n      undefined\n    )\n  }\n}\n\n/**\n * Create props from an element.\n *\n * @param {State} state\n *   Info passed around.\n * @param {Element} node\n *   Current element.\n * @returns {Props}\n *   Props.\n */\nfunction createElementProps(state, node) {\n  /** @type {Props} */\n  const props = {}\n  /** @type {string | undefined} */\n  let alignValue\n  /** @type {string} */\n  let prop\n\n  for (prop in node.properties) {\n    if (prop !== 'children' && own.call(node.properties, prop)) {\n      const result = createProperty(state, prop, node.properties[prop])\n\n      if (result) {\n        const [key, value] = result\n\n        if (\n          state.tableCellAlignToStyle &&\n          key === 'align' &&\n          typeof value === 'string' &&\n          tableCellElement.has(node.tagName)\n        ) {\n          alignValue = value\n        } else {\n          props[key] = value\n        }\n      }\n    }\n  }\n\n  if (alignValue) {\n    // Assume style is an object.\n    const style = /** @type {Style} */ (props.style || (props.style = {}))\n    style[state.stylePropertyNameCase === 'css' ? 'text-align' : 'textAlign'] =\n      alignValue\n  }\n\n  return props\n}\n\n/**\n * Create props from a JSX element.\n *\n * @param {State} state\n *   Info passed around.\n * @param {MdxJsxFlowElementHast | MdxJsxTextElementHast} node\n *   Current JSX element.\n * @returns {Props}\n *   Props.\n */\nfunction createJsxElementProps(state, node) {\n  /** @type {Props} */\n  const props = {}\n\n  for (const attribute of node.attributes) {\n    if (attribute.type === 'mdxJsxExpressionAttribute') {\n      if (attribute.data && attribute.data.estree && state.evaluater) {\n        const program = attribute.data.estree\n        const expression = program.body[0]\n        assert(expression.type === 'ExpressionStatement')\n        const objectExpression = expression.expression\n        assert(objectExpression.type === 'ObjectExpression')\n        const property = objectExpression.properties[0]\n        assert(property.type === 'SpreadElement')\n\n        Object.assign(\n          props,\n          state.evaluater.evaluateExpression(property.argument)\n        )\n      } else {\n        crashEstree(state, node.position)\n      }\n    } else {\n      // For JSX, the author is responsible of passing in the correct values.\n      const name = attribute.name\n      /** @type {unknown} */\n      let value\n\n      if (attribute.value && typeof attribute.value === 'object') {\n        if (\n          attribute.value.data &&\n          attribute.value.data.estree &&\n          state.evaluater\n        ) {\n          const program = attribute.value.data.estree\n          const expression = program.body[0]\n          assert(expression.type === 'ExpressionStatement')\n          value = state.evaluater.evaluateExpression(expression.expression)\n        } else {\n          crashEstree(state, node.position)\n        }\n      } else {\n        value = attribute.value === null ? true : attribute.value\n      }\n\n      // Assume a prop.\n      props[name] = /** @type {Props[keyof Props]} */ (value)\n    }\n  }\n\n  return props\n}\n\n/**\n * Create children.\n *\n * @param {State} state\n *   Info passed around.\n * @param {Parents} node\n *   Current element.\n * @returns {Array<Child>}\n *   Children.\n */\nfunction createChildren(state, node) {\n  /** @type {Array<Child>} */\n  const children = []\n  let index = -1\n  /** @type {Map<string, number>} */\n  // Note: test this when Solid doesn’t want to merge my upcoming PR.\n  /* c8 ignore next */\n  const countsByName = state.passKeys ? new Map() : emptyMap\n\n  while (++index < node.children.length) {\n    const child = node.children[index]\n    /** @type {string | undefined} */\n    let key\n\n    if (state.passKeys) {\n      const name =\n        child.type === 'element'\n          ? child.tagName\n          : child.type === 'mdxJsxFlowElement' ||\n              child.type === 'mdxJsxTextElement'\n            ? child.name\n            : undefined\n\n      if (name) {\n        const count = countsByName.get(name) || 0\n        key = name + '-' + count\n        countsByName.set(name, count + 1)\n      }\n    }\n\n    const result = one(state, child, key)\n    if (result !== undefined) children.push(result)\n  }\n\n  return children\n}\n\n/**\n * Handle a property.\n *\n * @param {State} state\n *   Info passed around.\n * @param {string} prop\n *   Key.\n * @param {Array<number | string> | boolean | number | string | null | undefined} value\n *   hast property value.\n * @returns {Field | undefined}\n *   Field for runtime, optional.\n */\nfunction createProperty(state, prop, value) {\n  const info = find(state.schema, prop)\n\n  // Ignore nullish and `NaN` values.\n  if (\n    value === null ||\n    value === undefined ||\n    (typeof value === 'number' && Number.isNaN(value))\n  ) {\n    return\n  }\n\n  if (Array.isArray(value)) {\n    // Accept `array`.\n    // Most props are space-separated.\n    value = info.commaSeparated ? commas(value) : spaces(value)\n  }\n\n  // React only accepts `style` as object.\n  if (info.property === 'style') {\n    let styleObject =\n      typeof value === 'object' ? value : parseStyle(state, String(value))\n\n    if (state.stylePropertyNameCase === 'css') {\n      styleObject = transformStylesToCssCasing(styleObject)\n    }\n\n    return ['style', styleObject]\n  }\n\n  return [\n    state.elementAttributeNameCase === 'react' && info.space\n      ? hastToReact[info.property] || info.property\n      : info.attribute,\n    value\n  ]\n}\n\n/**\n * Parse a CSS declaration to an object.\n *\n * @param {State} state\n *   Info passed around.\n * @param {string} value\n *   CSS declarations.\n * @returns {Style}\n *   Properties.\n * @throws\n *   Throws `VFileMessage` when CSS cannot be parsed.\n */\nfunction parseStyle(state, value) {\n  try {\n    return styleToJs(value, {reactCompat: true})\n  } catch (error) {\n    if (state.ignoreInvalidStyle) {\n      return {}\n    }\n\n    const cause = /** @type {Error} */ (error)\n    const message = new VFileMessage('Cannot parse `style` attribute', {\n      ancestors: state.ancestors,\n      cause,\n      ruleId: 'style',\n      source: 'hast-util-to-jsx-runtime'\n    })\n    message.file = state.filePath || undefined\n    message.url = docs + '#cannot-parse-style-attribute'\n\n    throw message\n  }\n}\n\n/**\n * Create a JSX name from a string.\n *\n * @param {State} state\n *   To do.\n * @param {string} name\n *   Name.\n * @param {boolean} allowExpression\n *   Allow member expressions and identifiers.\n * @returns {unknown}\n *   To do.\n */\nfunction findComponentFromName(state, name, allowExpression) {\n  /** @type {Identifier | Literal | MemberExpression} */\n  let result\n\n  if (!allowExpression) {\n    result = {type: 'Literal', value: name}\n  } else if (name.includes('.')) {\n    const identifiers = name.split('.')\n    let index = -1\n    /** @type {Identifier | Literal | MemberExpression | undefined} */\n    let node\n\n    while (++index < identifiers.length) {\n      /** @type {Identifier | Literal} */\n      const prop = isIdentifierName(identifiers[index])\n        ? {type: 'Identifier', name: identifiers[index]}\n        : {type: 'Literal', value: identifiers[index]}\n      node = node\n        ? {\n            type: 'MemberExpression',\n            object: node,\n            property: prop,\n            computed: Boolean(index && prop.type === 'Literal'),\n            optional: false\n          }\n        : prop\n    }\n\n    assert(node, 'always a result')\n    result = node\n  } else {\n    result =\n      isIdentifierName(name) && !/^[a-z]/.test(name)\n        ? {type: 'Identifier', name}\n        : {type: 'Literal', value: name}\n  }\n\n  // Only literals can be passed in `components` currently.\n  // No identifiers / member expressions.\n  if (result.type === 'Literal') {\n    const name = /** @type {string | number} */ (result.value)\n    return own.call(state.components, name) ? state.components[name] : name\n  }\n\n  // Assume component.\n  if (state.evaluater) {\n    return state.evaluater.evaluateExpression(result)\n  }\n\n  crashEstree(state)\n}\n\n/**\n * @param {State} state\n * @param {Position | undefined} [place]\n * @returns {never}\n */\nfunction crashEstree(state, place) {\n  const message = new VFileMessage(\n    'Cannot handle MDX estrees without `createEvaluater`',\n    {\n      ancestors: state.ancestors,\n      place,\n      ruleId: 'mdx-estree',\n      source: 'hast-util-to-jsx-runtime'\n    }\n  )\n  message.file = state.filePath || undefined\n  message.url = docs + '#cannot-handle-mdx-estrees-without-createevaluater'\n\n  throw message\n}\n\n/**\n * Transform a DOM casing style object to a CSS casing style object.\n *\n * @param {Style} domCasing\n * @returns {Style}\n */\nfunction transformStylesToCssCasing(domCasing) {\n  /** @type {Style} */\n  const cssCasing = {}\n  /** @type {string} */\n  let from\n\n  for (from in domCasing) {\n    if (own.call(domCasing, from)) {\n      cssCasing[transformStyleToCssCasing(from)] = domCasing[from]\n    }\n  }\n\n  return cssCasing\n}\n\n/**\n * Transform a DOM casing style field to a CSS casing style field.\n *\n * @param {string} from\n * @returns {string}\n */\nfunction transformStyleToCssCasing(from) {\n  let to = from.replace(cap, toDash)\n  // Handle `ms-xxx` -> `-ms-xxx`.\n  if (to.slice(0, 3) === 'ms-') to = '-' + to\n  return to\n}\n\n/**\n * Make `$0` dash cased.\n *\n * @param {string} $0\n *   Capitalized ASCII leter.\n * @returns {string}\n *   Dash and lower letter.\n */\nfunction toDash($0) {\n  return '-' + $0.toLowerCase()\n}\n","/**\n * HTML URL properties.\n *\n * Each key is a property name and each value is a list of tag names it applies\n * to or `null` if it applies to all elements.\n *\n * @type {Record<string, Array<string> | null>}\n */\nexport const urlAttributes = {\n  action: ['form'],\n  cite: ['blockquote', 'del', 'ins', 'q'],\n  data: ['object'],\n  formAction: ['button', 'input'],\n  href: ['a', 'area', 'base', 'link'],\n  icon: ['menuitem'],\n  itemId: null,\n  manifest: ['html'],\n  ping: ['a', 'area'],\n  poster: ['video'],\n  src: [\n    'audio',\n    'embed',\n    'iframe',\n    'img',\n    'input',\n    'script',\n    'source',\n    'track',\n    'video'\n  ]\n}\n","/**\n * @typedef {import('mdast').Nodes} Nodes\n *\n * @typedef Options\n *   Configuration (optional).\n * @property {boolean | null | undefined} [includeImageAlt=true]\n *   Whether to use `alt` for `image`s (default: `true`).\n * @property {boolean | null | undefined} [includeHtml=true]\n *   Whether to use `value` of HTML (default: `true`).\n */\n\n/** @type {Options} */\nconst emptyOptions = {}\n\n/**\n * Get the text content of a node or list of nodes.\n *\n * Prefers the node’s plain-text fields, otherwise serializes its children,\n * and if the given value is an array, serialize the nodes in it.\n *\n * @param {unknown} [value]\n *   Thing to serialize, typically `Node`.\n * @param {Options | null | undefined} [options]\n *   Configuration (optional).\n * @returns {string}\n *   Serialized `value`.\n */\nexport function toString(value, options) {\n  const settings = options || emptyOptions\n  const includeImageAlt =\n    typeof settings.includeImageAlt === 'boolean'\n      ? settings.includeImageAlt\n      : true\n  const includeHtml =\n    typeof settings.includeHtml === 'boolean' ? settings.includeHtml : true\n\n  return one(value, includeImageAlt, includeHtml)\n}\n\n/**\n * One node or several nodes.\n *\n * @param {unknown} value\n *   Thing to serialize.\n * @param {boolean} includeImageAlt\n *   Include image `alt`s.\n * @param {boolean} includeHtml\n *   Include HTML.\n * @returns {string}\n *   Serialized node.\n */\nfunction one(value, includeImageAlt, includeHtml) {\n  if (node(value)) {\n    if ('value' in value) {\n      return value.type === 'html' && !includeHtml ? '' : value.value\n    }\n\n    if (includeImageAlt && 'alt' in value && value.alt) {\n      return value.alt\n    }\n\n    if ('children' in value) {\n      return all(value.children, includeImageAlt, includeHtml)\n    }\n  }\n\n  if (Array.isArray(value)) {\n    return all(value, includeImageAlt, includeHtml)\n  }\n\n  return ''\n}\n\n/**\n * Serialize a list of nodes.\n *\n * @param {Array<unknown>} values\n *   Thing to serialize.\n * @param {boolean} includeImageAlt\n *   Include image `alt`s.\n * @param {boolean} includeHtml\n *   Include HTML.\n * @returns {string}\n *   Serialized nodes.\n */\nfunction all(values, includeImageAlt, includeHtml) {\n  /** @type {Array<string>} */\n  const result = []\n  let index = -1\n\n  while (++index < values.length) {\n    result[index] = one(values[index], includeImageAlt, includeHtml)\n  }\n\n  return result.join('')\n}\n\n/**\n * Check if `value` looks like a node.\n *\n * @param {unknown} value\n *   Thing.\n * @returns {value is Nodes}\n *   Whether `value` is a node.\n */\nfunction node(value) {\n  return Boolean(value && typeof value === 'object')\n}\n","/// <reference lib=\"dom\" />\n\n/* global document */\n\nconst element = document.createElement('i')\n\n/**\n * @param {string} value\n * @returns {string | false}\n */\nexport function decodeNamedCharacterReference(value) {\n  const characterReference = '&' + value + ';'\n  element.innerHTML = characterReference\n  const character = element.textContent\n\n  // Some named character references do not require the closing semicolon\n  // (`&not`, for instance), which leads to situations where parsing the assumed\n  // named reference of `&notit;` will result in the string `¬it;`.\n  // When we encounter a trailing semicolon after parsing, and the character\n  // reference to decode was not a semicolon (`&semi;`), we can assume that the\n  // matching was not complete.\n  if (\n    character.charCodeAt(character.length - 1) === 59 /* `;` */ &&\n    value !== 'semi'\n  ) {\n    return false\n  }\n\n  // If the decoded string is equal to the input, the character reference was\n  // not valid.\n  return character === characterReference ? false : character\n}\n","/**\n * Like `Array#splice`, but smarter for giant arrays.\n *\n * `Array#splice` takes all items to be inserted as individual argument which\n * causes a stack overflow in V8 when trying to insert 100k items for instance.\n *\n * Otherwise, this does not return the removed items, and takes `items` as an\n * array instead of rest parameters.\n *\n * @template {unknown} T\n *   Item type.\n * @param {Array<T>} list\n *   List to operate on.\n * @param {number} start\n *   Index to remove/insert at (can be negative).\n * @param {number} remove\n *   Number of items to remove.\n * @param {Array<T>} items\n *   Items to inject into `list`.\n * @returns {undefined}\n *   Nothing.\n */\nexport function splice(list, start, remove, items) {\n  const end = list.length;\n  let chunkStart = 0;\n  /** @type {Array<unknown>} */\n  let parameters;\n\n  // Make start between zero and `end` (included).\n  if (start < 0) {\n    start = -start > end ? 0 : end + start;\n  } else {\n    start = start > end ? end : start;\n  }\n  remove = remove > 0 ? remove : 0;\n\n  // No need to chunk the items if there’s only a couple (10k) items.\n  if (items.length < 10000) {\n    parameters = Array.from(items);\n    parameters.unshift(start, remove);\n    // @ts-expect-error Hush, it’s fine.\n    list.splice(...parameters);\n  } else {\n    // Delete `remove` items starting from `start`\n    if (remove) list.splice(start, remove);\n\n    // Insert the items in chunks to not cause stack overflows.\n    while (chunkStart < items.length) {\n      parameters = items.slice(chunkStart, chunkStart + 10000);\n      parameters.unshift(start, 0);\n      // @ts-expect-error Hush, it’s fine.\n      list.splice(...parameters);\n      chunkStart += 10000;\n      start += 10000;\n    }\n  }\n}\n\n/**\n * Append `items` (an array) at the end of `list` (another array).\n * When `list` was empty, returns `items` instead.\n *\n * This prevents a potentially expensive operation when `list` is empty,\n * and adds items in batches to prevent V8 from hanging.\n *\n * @template {unknown} T\n *   Item type.\n * @param {Array<T>} list\n *   List to operate on.\n * @param {Array<T>} items\n *   Items to add to `list`.\n * @returns {Array<T>}\n *   Either `list` or `items`.\n */\nexport function push(list, items) {\n  if (list.length > 0) {\n    splice(list, list.length, 0, items);\n    return list;\n  }\n  return items;\n}","/**\n * @import {\n *   Extension,\n *   Handles,\n *   HtmlExtension,\n *   NormalizedExtension\n * } from 'micromark-util-types'\n */\n\nimport {splice} from 'micromark-util-chunked'\n\nconst hasOwnProperty = {}.hasOwnProperty\n\n/**\n * Combine multiple syntax extensions into one.\n *\n * @param {ReadonlyArray<Extension>} extensions\n *   List of syntax extensions.\n * @returns {NormalizedExtension}\n *   A single combined extension.\n */\nexport function combineExtensions(extensions) {\n  /** @type {NormalizedExtension} */\n  const all = {}\n  let index = -1\n\n  while (++index < extensions.length) {\n    syntaxExtension(all, extensions[index])\n  }\n\n  return all\n}\n\n/**\n * Merge `extension` into `all`.\n *\n * @param {NormalizedExtension} all\n *   Extension to merge into.\n * @param {Extension} extension\n *   Extension to merge.\n * @returns {undefined}\n *   Nothing.\n */\nfunction syntaxExtension(all, extension) {\n  /** @type {keyof Extension} */\n  let hook\n\n  for (hook in extension) {\n    const maybe = hasOwnProperty.call(all, hook) ? all[hook] : undefined\n    /** @type {Record<string, unknown>} */\n    const left = maybe || (all[hook] = {})\n    /** @type {Record<string, unknown> | undefined} */\n    const right = extension[hook]\n    /** @type {string} */\n    let code\n\n    if (right) {\n      for (code in right) {\n        if (!hasOwnProperty.call(left, code)) left[code] = []\n        const value = right[code]\n        constructs(\n          // @ts-expect-error Looks like a list.\n          left[code],\n          Array.isArray(value) ? value : value ? [value] : []\n        )\n      }\n    }\n  }\n}\n\n/**\n * Merge `list` into `existing` (both lists of constructs).\n * Mutates `existing`.\n *\n * @param {Array<unknown>} existing\n *   List of constructs to merge into.\n * @param {Array<unknown>} list\n *   List of constructs to merge.\n * @returns {undefined}\n *   Nothing.\n */\nfunction constructs(existing, list) {\n  let index = -1\n  /** @type {Array<unknown>} */\n  const before = []\n\n  while (++index < list.length) {\n    // @ts-expect-error Looks like an object.\n    ;(list[index].add === 'after' ? existing : before).push(list[index])\n  }\n\n  splice(existing, 0, 0, before)\n}\n\n/**\n * Combine multiple HTML extensions into one.\n *\n * @param {ReadonlyArray<HtmlExtension>} htmlExtensions\n *   List of HTML extensions.\n * @returns {HtmlExtension}\n *   Single combined HTML extension.\n */\nexport function combineHtmlExtensions(htmlExtensions) {\n  /** @type {HtmlExtension} */\n  const handlers = {}\n  let index = -1\n\n  while (++index < htmlExtensions.length) {\n    htmlExtension(handlers, htmlExtensions[index])\n  }\n\n  return handlers\n}\n\n/**\n * Merge `extension` into `all`.\n *\n * @param {HtmlExtension} all\n *   Extension to merge into.\n * @param {HtmlExtension} extension\n *   Extension to merge.\n * @returns {undefined}\n *   Nothing.\n */\nfunction htmlExtension(all, extension) {\n  /** @type {keyof HtmlExtension} */\n  let hook\n\n  for (hook in extension) {\n    const maybe = hasOwnProperty.call(all, hook) ? all[hook] : undefined\n    const left = maybe || (all[hook] = {})\n    const right = extension[hook]\n    /** @type {keyof Handles} */\n    let type\n\n    if (right) {\n      for (type in right) {\n        // @ts-expect-error assume document vs regular handler are managed correctly.\n        left[type] = right[type]\n      }\n    }\n  }\n}\n","/**\n * Turn the number (in string form as either hexa- or plain decimal) coming from\n * a numeric character reference into a character.\n *\n * Sort of like `String.fromCodePoint(Number.parseInt(value, base))`, but makes\n * non-characters and control characters safe.\n *\n * @param {string} value\n *   Value to decode.\n * @param {number} base\n *   Numeric base.\n * @returns {string}\n *   Character.\n */\nexport function decodeNumericCharacterReference(value, base) {\n  const code = Number.parseInt(value, base);\n  if (\n  // C0 except for HT, LF, FF, CR, space.\n  code < 9 || code === 11 || code > 13 && code < 32 ||\n  // Control character (DEL) of C0, and C1 controls.\n  code > 126 && code < 160 ||\n  // Lone high surrogates and low surrogates.\n  code > 55_295 && code < 57_344 ||\n  // Noncharacters.\n  code > 64_975 && code < 65_008 || /* eslint-disable no-bitwise */\n  (code & 65_535) === 65_535 || (code & 65_535) === 65_534 || /* eslint-enable no-bitwise */\n  // Out of range\n  code > 1_114_111) {\n    return \"\\uFFFD\";\n  }\n  return String.fromCodePoint(code);\n}","/**\n * Normalize an identifier (as found in references, definitions).\n *\n * Collapses markdown whitespace, trim, and then lower- and uppercase.\n *\n * Some characters are considered “uppercase”, such as U+03F4 (`ϴ`), but if their\n * lowercase counterpart (U+03B8 (`θ`)) is uppercased will result in a different\n * uppercase character (U+0398 (`Θ`)).\n * So, to get a canonical form, we perform both lower- and uppercase.\n *\n * Using uppercase last makes sure keys will never interact with default\n * prototypal values (such as `constructor`): nothing in the prototype of\n * `Object` is uppercase.\n *\n * @param {string} value\n *   Identifier to normalize.\n * @returns {string}\n *   Normalized identifier.\n */\nexport function normalizeIdentifier(value) {\n  return value\n  // Collapse markdown whitespace.\n  .replace(/[\\t\\n\\r ]+/g, \" \")\n  // Trim.\n  .replace(/^ | $/g, '')\n  // Some characters are considered “uppercase”, but if their lowercase\n  // counterpart is uppercased will result in a different uppercase\n  // character.\n  // Hence, to get that form, we perform both lower- and uppercase.\n  // Upper case makes sure keys will not interact with default prototypal\n  // methods: no method is uppercase.\n  .toLowerCase().toUpperCase();\n}","/**\n * @import {Code} from 'micromark-util-types'\n */\n\n/**\n * Check whether the character code represents an ASCII alpha (`a` through `z`,\n * case insensitive).\n *\n * An **ASCII alpha** is an ASCII upper alpha or ASCII lower alpha.\n *\n * An **ASCII upper alpha** is a character in the inclusive range U+0041 (`A`)\n * to U+005A (`Z`).\n *\n * An **ASCII lower alpha** is a character in the inclusive range U+0061 (`a`)\n * to U+007A (`z`).\n *\n * @param code\n *   Code.\n * @returns {boolean}\n *   Whether it matches.\n */\nexport const asciiAlpha = regexCheck(/[A-Za-z]/);\n\n/**\n * Check whether the character code represents an ASCII alphanumeric (`a`\n * through `z`, case insensitive, or `0` through `9`).\n *\n * An **ASCII alphanumeric** is an ASCII digit (see `asciiDigit`) or ASCII alpha\n * (see `asciiAlpha`).\n *\n * @param code\n *   Code.\n * @returns {boolean}\n *   Whether it matches.\n */\nexport const asciiAlphanumeric = regexCheck(/[\\dA-Za-z]/);\n\n/**\n * Check whether the character code represents an ASCII atext.\n *\n * atext is an ASCII alphanumeric (see `asciiAlphanumeric`), or a character in\n * the inclusive ranges U+0023 NUMBER SIGN (`#`) to U+0027 APOSTROPHE (`'`),\n * U+002A ASTERISK (`*`), U+002B PLUS SIGN (`+`), U+002D DASH (`-`), U+002F\n * SLASH (`/`), U+003D EQUALS TO (`=`), U+003F QUESTION MARK (`?`), U+005E\n * CARET (`^`) to U+0060 GRAVE ACCENT (`` ` ``), or U+007B LEFT CURLY BRACE\n * (`{`) to U+007E TILDE (`~`).\n *\n * See:\n * **\\[RFC5322]**:\n * [Internet Message Format](https://tools.ietf.org/html/rfc5322).\n * P. Resnick.\n * IETF.\n *\n * @param code\n *   Code.\n * @returns {boolean}\n *   Whether it matches.\n */\nexport const asciiAtext = regexCheck(/[#-'*+\\--9=?A-Z^-~]/);\n\n/**\n * Check whether a character code is an ASCII control character.\n *\n * An **ASCII control** is a character in the inclusive range U+0000 NULL (NUL)\n * to U+001F (US), or U+007F (DEL).\n *\n * @param {Code} code\n *   Code.\n * @returns {boolean}\n *   Whether it matches.\n */\nexport function asciiControl(code) {\n  return (\n    // Special whitespace codes (which have negative values), C0 and Control\n    // character DEL\n    code !== null && (code < 32 || code === 127)\n  );\n}\n\n/**\n * Check whether the character code represents an ASCII digit (`0` through `9`).\n *\n * An **ASCII digit** is a character in the inclusive range U+0030 (`0`) to\n * U+0039 (`9`).\n *\n * @param code\n *   Code.\n * @returns {boolean}\n *   Whether it matches.\n */\nexport const asciiDigit = regexCheck(/\\d/);\n\n/**\n * Check whether the character code represents an ASCII hex digit (`a` through\n * `f`, case insensitive, or `0` through `9`).\n *\n * An **ASCII hex digit** is an ASCII digit (see `asciiDigit`), ASCII upper hex\n * digit, or an ASCII lower hex digit.\n *\n * An **ASCII upper hex digit** is a character in the inclusive range U+0041\n * (`A`) to U+0046 (`F`).\n *\n * An **ASCII lower hex digit** is a character in the inclusive range U+0061\n * (`a`) to U+0066 (`f`).\n *\n * @param code\n *   Code.\n * @returns {boolean}\n *   Whether it matches.\n */\nexport const asciiHexDigit = regexCheck(/[\\dA-Fa-f]/);\n\n/**\n * Check whether the character code represents ASCII punctuation.\n *\n * An **ASCII punctuation** is a character in the inclusive ranges U+0021\n * EXCLAMATION MARK (`!`) to U+002F SLASH (`/`), U+003A COLON (`:`) to U+0040 AT\n * SIGN (`@`), U+005B LEFT SQUARE BRACKET (`[`) to U+0060 GRAVE ACCENT\n * (`` ` ``), or U+007B LEFT CURLY BRACE (`{`) to U+007E TILDE (`~`).\n *\n * @param code\n *   Code.\n * @returns {boolean}\n *   Whether it matches.\n */\nexport const asciiPunctuation = regexCheck(/[!-/:-@[-`{-~]/);\n\n/**\n * Check whether a character code is a markdown line ending.\n *\n * A **markdown line ending** is the virtual characters M-0003 CARRIAGE RETURN\n * LINE FEED (CRLF), M-0004 LINE FEED (LF) and M-0005 CARRIAGE RETURN (CR).\n *\n * In micromark, the actual character U+000A LINE FEED (LF) and U+000D CARRIAGE\n * RETURN (CR) are replaced by these virtual characters depending on whether\n * they occurred together.\n *\n * @param {Code} code\n *   Code.\n * @returns {boolean}\n *   Whether it matches.\n */\nexport function markdownLineEnding(code) {\n  return code !== null && code < -2;\n}\n\n/**\n * Check whether a character code is a markdown line ending (see\n * `markdownLineEnding`) or markdown space (see `markdownSpace`).\n *\n * @param {Code} code\n *   Code.\n * @returns {boolean}\n *   Whether it matches.\n */\nexport function markdownLineEndingOrSpace(code) {\n  return code !== null && (code < 0 || code === 32);\n}\n\n/**\n * Check whether a character code is a markdown space.\n *\n * A **markdown space** is the concrete character U+0020 SPACE (SP) and the\n * virtual characters M-0001 VIRTUAL SPACE (VS) and M-0002 HORIZONTAL TAB (HT).\n *\n * In micromark, the actual character U+0009 CHARACTER TABULATION (HT) is\n * replaced by one M-0002 HORIZONTAL TAB (HT) and between 0 and 3 M-0001 VIRTUAL\n * SPACE (VS) characters, depending on the column at which the tab occurred.\n *\n * @param {Code} code\n *   Code.\n * @returns {boolean}\n *   Whether it matches.\n */\nexport function markdownSpace(code) {\n  return code === -2 || code === -1 || code === 32;\n}\n\n// Size note: removing ASCII from the regex and using `asciiPunctuation` here\n// In fact adds to the bundle size.\n/**\n * Check whether the character code represents Unicode punctuation.\n *\n * A **Unicode punctuation** is a character in the Unicode `Pc` (Punctuation,\n * Connector), `Pd` (Punctuation, Dash), `Pe` (Punctuation, Close), `Pf`\n * (Punctuation, Final quote), `Pi` (Punctuation, Initial quote), `Po`\n * (Punctuation, Other), or `Ps` (Punctuation, Open) categories, or an ASCII\n * punctuation (see `asciiPunctuation`).\n *\n * See:\n * **\\[UNICODE]**:\n * [The Unicode Standard](https://www.unicode.org/versions/).\n * Unicode Consortium.\n *\n * @param code\n *   Code.\n * @returns\n *   Whether it matches.\n */\nexport const unicodePunctuation = regexCheck(/\\p{P}|\\p{S}/u);\n\n/**\n * Check whether the character code represents Unicode whitespace.\n *\n * Note that this does handle micromark specific markdown whitespace characters.\n * See `markdownLineEndingOrSpace` to check that.\n *\n * A **Unicode whitespace** is a character in the Unicode `Zs` (Separator,\n * Space) category, or U+0009 CHARACTER TABULATION (HT), U+000A LINE FEED (LF),\n * U+000C (FF), or U+000D CARRIAGE RETURN (CR) (**\\[UNICODE]**).\n *\n * See:\n * **\\[UNICODE]**:\n * [The Unicode Standard](https://www.unicode.org/versions/).\n * Unicode Consortium.\n *\n * @param code\n *   Code.\n * @returns\n *   Whether it matches.\n */\nexport const unicodeWhitespace = regexCheck(/\\s/);\n\n/**\n * Create a code check from a regex.\n *\n * @param {RegExp} regex\n *   Expression.\n * @returns {(code: Code) => boolean}\n *   Check.\n */\nfunction regexCheck(regex) {\n  return check;\n\n  /**\n   * Check whether a code matches the bound regex.\n   *\n   * @param {Code} code\n   *   Character code.\n   * @returns {boolean}\n   *   Whether the character code matches the bound regex.\n   */\n  function check(code) {\n    return code !== null && code > -1 && regex.test(String.fromCharCode(code));\n  }\n}","import { asciiAlphanumeric } from 'micromark-util-character';\nimport { encode } from 'micromark-util-encode';\n/**\n * Make a value safe for injection as a URL.\n *\n * This encodes unsafe characters with percent-encoding and skips already\n * encoded sequences (see `normalizeUri`).\n * Further unsafe characters are encoded as character references (see\n * `micromark-util-encode`).\n *\n * A regex of allowed protocols can be given, in which case the URL is\n * sanitized.\n * For example, `/^(https?|ircs?|mailto|xmpp)$/i` can be used for `a[href]`, or\n * `/^https?$/i` for `img[src]` (this is what `github.com` allows).\n * If the URL includes an unknown protocol (one not matched by `protocol`, such\n * as a dangerous example, `javascript:`), the value is ignored.\n *\n * @param {string | null | undefined} url\n *   URI to sanitize.\n * @param {RegExp | null | undefined} [protocol]\n *   Allowed protocols.\n * @returns {string}\n *   Sanitized URI.\n */\nexport function sanitizeUri(url, protocol) {\n  const value = encode(normalizeUri(url || ''));\n  if (!protocol) {\n    return value;\n  }\n  const colon = value.indexOf(':');\n  const questionMark = value.indexOf('?');\n  const numberSign = value.indexOf('#');\n  const slash = value.indexOf('/');\n  if (\n  // If there is no protocol, it’s relative.\n  colon < 0 ||\n  // If the first colon is after a `?`, `#`, or `/`, it’s not a protocol.\n  slash > -1 && colon > slash || questionMark > -1 && colon > questionMark || numberSign > -1 && colon > numberSign ||\n  // It is a protocol, it should be allowed.\n  protocol.test(value.slice(0, colon))) {\n    return value;\n  }\n  return '';\n}\n\n/**\n * Normalize a URL.\n *\n * Encode unsafe characters with percent-encoding, skipping already encoded\n * sequences.\n *\n * @param {string} value\n *   URI to normalize.\n * @returns {string}\n *   Normalized URI.\n */\nexport function normalizeUri(value) {\n  /** @type {Array<string>} */\n  const result = [];\n  let index = -1;\n  let start = 0;\n  let skip = 0;\n  while (++index < value.length) {\n    const code = value.charCodeAt(index);\n    /** @type {string} */\n    let replace = '';\n\n    // A correct percent encoded value.\n    if (code === 37 && asciiAlphanumeric(value.charCodeAt(index + 1)) && asciiAlphanumeric(value.charCodeAt(index + 2))) {\n      skip = 2;\n    }\n    // ASCII.\n    else if (code < 128) {\n      if (!/[!#$&-;=?-Z_a-z~]/.test(String.fromCharCode(code))) {\n        replace = String.fromCharCode(code);\n      }\n    }\n    // Astral.\n    else if (code > 55_295 && code < 57_344) {\n      const next = value.charCodeAt(index + 1);\n\n      // A correct surrogate pair.\n      if (code < 56_320 && next > 56_319 && next < 57_344) {\n        replace = String.fromCharCode(code, next);\n        skip = 1;\n      }\n      // Lone surrogate.\n      else {\n        replace = \"\\uFFFD\";\n      }\n    }\n    // Unicode.\n    else {\n      replace = String.fromCharCode(code);\n    }\n    if (replace) {\n      result.push(value.slice(start, index), encodeURIComponent(replace));\n      start = index + skip + 1;\n      replace = '';\n    }\n    if (skip) {\n      index += skip;\n      skip = 0;\n    }\n  }\n  return result.join('') + value.slice(start);\n}","/**\n * @import {Effects, State, TokenType} from 'micromark-util-types'\n */\n\nimport { markdownSpace } from 'micromark-util-character';\n\n// To do: implement `spaceOrTab`, `spaceOrTabMinMax`, `spaceOrTabWithOptions`.\n\n/**\n * Parse spaces and tabs.\n *\n * There is no `nok` parameter:\n *\n * *   spaces in markdown are often optional, in which case this factory can be\n *     used and `ok` will be switched to whether spaces were found or not\n * *   one line ending or space can be detected with `markdownSpace(code)` right\n *     before using `factorySpace`\n *\n * ###### Examples\n *\n * Where `␉` represents a tab (plus how much it expands) and `␠` represents a\n * single space.\n *\n * ```markdown\n * ␉\n * ␠␠␠␠\n * ␉␠\n * ```\n *\n * @param {Effects} effects\n *   Context.\n * @param {State} ok\n *   State switched to when successful.\n * @param {TokenType} type\n *   Type (`' \\t'`).\n * @param {number | undefined} [max=Infinity]\n *   Max (exclusive).\n * @returns {State}\n *   Start state.\n */\nexport function factorySpace(effects, ok, type, max) {\n  const limit = max ? max - 1 : Number.POSITIVE_INFINITY;\n  let size = 0;\n  return start;\n\n  /** @type {State} */\n  function start(code) {\n    if (markdownSpace(code)) {\n      effects.enter(type);\n      return prefix(code);\n    }\n    return ok(code);\n  }\n\n  /** @type {State} */\n  function prefix(code) {\n    if (markdownSpace(code) && size++ < limit) {\n      effects.consume(code);\n      return prefix;\n    }\n    effects.exit(type);\n    return ok(code);\n  }\n}","/**\n * @import {\n *   InitialConstruct,\n *   Initializer,\n *   State,\n *   TokenizeContext,\n *   Token\n * } from 'micromark-util-types'\n */\n\nimport { factorySpace } from 'micromark-factory-space';\nimport { markdownLineEnding } from 'micromark-util-character';\n/** @type {InitialConstruct} */\nexport const content = {\n  tokenize: initializeContent\n};\n\n/**\n * @this {TokenizeContext}\n *   Context.\n * @type {Initializer}\n *   Content.\n */\nfunction initializeContent(effects) {\n  const contentStart = effects.attempt(this.parser.constructs.contentInitial, afterContentStartConstruct, paragraphInitial);\n  /** @type {Token} */\n  let previous;\n  return contentStart;\n\n  /** @type {State} */\n  function afterContentStartConstruct(code) {\n    if (code === null) {\n      effects.consume(code);\n      return;\n    }\n    effects.enter(\"lineEnding\");\n    effects.consume(code);\n    effects.exit(\"lineEnding\");\n    return factorySpace(effects, contentStart, \"linePrefix\");\n  }\n\n  /** @type {State} */\n  function paragraphInitial(code) {\n    effects.enter(\"paragraph\");\n    return lineStart(code);\n  }\n\n  /** @type {State} */\n  function lineStart(code) {\n    const token = effects.enter(\"chunkText\", {\n      contentType: \"text\",\n      previous\n    });\n    if (previous) {\n      previous.next = token;\n    }\n    previous = token;\n    return data(code);\n  }\n\n  /** @type {State} */\n  function data(code) {\n    if (code === null) {\n      effects.exit(\"chunkText\");\n      effects.exit(\"paragraph\");\n      effects.consume(code);\n      return;\n    }\n    if (markdownLineEnding(code)) {\n      effects.consume(code);\n      effects.exit(\"chunkText\");\n      return lineStart;\n    }\n\n    // Data.\n    effects.consume(code);\n    return data;\n  }\n}","/**\n * @import {\n *   Construct,\n *   ContainerState,\n *   InitialConstruct,\n *   Initializer,\n *   Point,\n *   State,\n *   TokenizeContext,\n *   Tokenizer,\n *   Token\n * } from 'micromark-util-types'\n */\n\n/**\n * @typedef {[Construct, ContainerState]} StackItem\n *   Construct and its state.\n */\n\nimport { factorySpace } from 'micromark-factory-space';\nimport { markdownLineEnding } from 'micromark-util-character';\nimport { splice } from 'micromark-util-chunked';\n/** @type {InitialConstruct} */\nexport const document = {\n  tokenize: initializeDocument\n};\n\n/** @type {Construct} */\nconst containerConstruct = {\n  tokenize: tokenizeContainer\n};\n\n/**\n * @this {TokenizeContext}\n *   Self.\n * @type {Initializer}\n *   Initializer.\n */\nfunction initializeDocument(effects) {\n  const self = this;\n  /** @type {Array<StackItem>} */\n  const stack = [];\n  let continued = 0;\n  /** @type {TokenizeContext | undefined} */\n  let childFlow;\n  /** @type {Token | undefined} */\n  let childToken;\n  /** @type {number} */\n  let lineStartOffset;\n  return start;\n\n  /** @type {State} */\n  function start(code) {\n    // First we iterate through the open blocks, starting with the root\n    // document, and descending through last children down to the last open\n    // block.\n    // Each block imposes a condition that the line must satisfy if the block is\n    // to remain open.\n    // For example, a block quote requires a `>` character.\n    // A paragraph requires a non-blank line.\n    // In this phase we may match all or just some of the open blocks.\n    // But we cannot close unmatched blocks yet, because we may have a lazy\n    // continuation line.\n    if (continued < stack.length) {\n      const item = stack[continued];\n      self.containerState = item[1];\n      return effects.attempt(item[0].continuation, documentContinue, checkNewContainers)(code);\n    }\n\n    // Done.\n    return checkNewContainers(code);\n  }\n\n  /** @type {State} */\n  function documentContinue(code) {\n    continued++;\n\n    // Note: this field is called `_closeFlow` but it also closes containers.\n    // Perhaps a good idea to rename it but it’s already used in the wild by\n    // extensions.\n    if (self.containerState._closeFlow) {\n      self.containerState._closeFlow = undefined;\n      if (childFlow) {\n        closeFlow();\n      }\n\n      // Note: this algorithm for moving events around is similar to the\n      // algorithm when dealing with lazy lines in `writeToChild`.\n      const indexBeforeExits = self.events.length;\n      let indexBeforeFlow = indexBeforeExits;\n      /** @type {Point | undefined} */\n      let point;\n\n      // Find the flow chunk.\n      while (indexBeforeFlow--) {\n        if (self.events[indexBeforeFlow][0] === 'exit' && self.events[indexBeforeFlow][1].type === \"chunkFlow\") {\n          point = self.events[indexBeforeFlow][1].end;\n          break;\n        }\n      }\n      exitContainers(continued);\n\n      // Fix positions.\n      let index = indexBeforeExits;\n      while (index < self.events.length) {\n        self.events[index][1].end = {\n          ...point\n        };\n        index++;\n      }\n\n      // Inject the exits earlier (they’re still also at the end).\n      splice(self.events, indexBeforeFlow + 1, 0, self.events.slice(indexBeforeExits));\n\n      // Discard the duplicate exits.\n      self.events.length = index;\n      return checkNewContainers(code);\n    }\n    return start(code);\n  }\n\n  /** @type {State} */\n  function checkNewContainers(code) {\n    // Next, after consuming the continuation markers for existing blocks, we\n    // look for new block starts (e.g. `>` for a block quote).\n    // If we encounter a new block start, we close any blocks unmatched in\n    // step 1 before creating the new block as a child of the last matched\n    // block.\n    if (continued === stack.length) {\n      // No need to `check` whether there’s a container, of `exitContainers`\n      // would be moot.\n      // We can instead immediately `attempt` to parse one.\n      if (!childFlow) {\n        return documentContinued(code);\n      }\n\n      // If we have concrete content, such as block HTML or fenced code,\n      // we can’t have containers “pierce” into them, so we can immediately\n      // start.\n      if (childFlow.currentConstruct && childFlow.currentConstruct.concrete) {\n        return flowStart(code);\n      }\n\n      // If we do have flow, it could still be a blank line,\n      // but we’d be interrupting it w/ a new container if there’s a current\n      // construct.\n      // To do: next major: remove `_gfmTableDynamicInterruptHack` (no longer\n      // needed in micromark-extension-gfm-table@1.0.6).\n      self.interrupt = Boolean(childFlow.currentConstruct && !childFlow._gfmTableDynamicInterruptHack);\n    }\n\n    // Check if there is a new container.\n    self.containerState = {};\n    return effects.check(containerConstruct, thereIsANewContainer, thereIsNoNewContainer)(code);\n  }\n\n  /** @type {State} */\n  function thereIsANewContainer(code) {\n    if (childFlow) closeFlow();\n    exitContainers(continued);\n    return documentContinued(code);\n  }\n\n  /** @type {State} */\n  function thereIsNoNewContainer(code) {\n    self.parser.lazy[self.now().line] = continued !== stack.length;\n    lineStartOffset = self.now().offset;\n    return flowStart(code);\n  }\n\n  /** @type {State} */\n  function documentContinued(code) {\n    // Try new containers.\n    self.containerState = {};\n    return effects.attempt(containerConstruct, containerContinue, flowStart)(code);\n  }\n\n  /** @type {State} */\n  function containerContinue(code) {\n    continued++;\n    stack.push([self.currentConstruct, self.containerState]);\n    // Try another.\n    return documentContinued(code);\n  }\n\n  /** @type {State} */\n  function flowStart(code) {\n    if (code === null) {\n      if (childFlow) closeFlow();\n      exitContainers(0);\n      effects.consume(code);\n      return;\n    }\n    childFlow = childFlow || self.parser.flow(self.now());\n    effects.enter(\"chunkFlow\", {\n      _tokenizer: childFlow,\n      contentType: \"flow\",\n      previous: childToken\n    });\n    return flowContinue(code);\n  }\n\n  /** @type {State} */\n  function flowContinue(code) {\n    if (code === null) {\n      writeToChild(effects.exit(\"chunkFlow\"), true);\n      exitContainers(0);\n      effects.consume(code);\n      return;\n    }\n    if (markdownLineEnding(code)) {\n      effects.consume(code);\n      writeToChild(effects.exit(\"chunkFlow\"));\n      // Get ready for the next line.\n      continued = 0;\n      self.interrupt = undefined;\n      return start;\n    }\n    effects.consume(code);\n    return flowContinue;\n  }\n\n  /**\n   * @param {Token} token\n   *   Token.\n   * @param {boolean | undefined} [endOfFile]\n   *   Whether the token is at the end of the file (default: `false`).\n   * @returns {undefined}\n   *   Nothing.\n   */\n  function writeToChild(token, endOfFile) {\n    const stream = self.sliceStream(token);\n    if (endOfFile) stream.push(null);\n    token.previous = childToken;\n    if (childToken) childToken.next = token;\n    childToken = token;\n    childFlow.defineSkip(token.start);\n    childFlow.write(stream);\n\n    // Alright, so we just added a lazy line:\n    //\n    // ```markdown\n    // > a\n    // b.\n    //\n    // Or:\n    //\n    // > ~~~c\n    // d\n    //\n    // Or:\n    //\n    // > | e |\n    // f\n    // ```\n    //\n    // The construct in the second example (fenced code) does not accept lazy\n    // lines, so it marked itself as done at the end of its first line, and\n    // then the content construct parses `d`.\n    // Most constructs in markdown match on the first line: if the first line\n    // forms a construct, a non-lazy line can’t “unmake” it.\n    //\n    // The construct in the third example is potentially a GFM table, and\n    // those are *weird*.\n    // It *could* be a table, from the first line, if the following line\n    // matches a condition.\n    // In this case, that second line is lazy, which “unmakes” the first line\n    // and turns the whole into one content block.\n    //\n    // We’ve now parsed the non-lazy and the lazy line, and can figure out\n    // whether the lazy line started a new flow block.\n    // If it did, we exit the current containers between the two flow blocks.\n    if (self.parser.lazy[token.start.line]) {\n      let index = childFlow.events.length;\n      while (index--) {\n        if (\n        // The token starts before the line ending…\n        childFlow.events[index][1].start.offset < lineStartOffset && (\n        // …and either is not ended yet…\n        !childFlow.events[index][1].end ||\n        // …or ends after it.\n        childFlow.events[index][1].end.offset > lineStartOffset)) {\n          // Exit: there’s still something open, which means it’s a lazy line\n          // part of something.\n          return;\n        }\n      }\n\n      // Note: this algorithm for moving events around is similar to the\n      // algorithm when closing flow in `documentContinue`.\n      const indexBeforeExits = self.events.length;\n      let indexBeforeFlow = indexBeforeExits;\n      /** @type {boolean | undefined} */\n      let seen;\n      /** @type {Point | undefined} */\n      let point;\n\n      // Find the previous chunk (the one before the lazy line).\n      while (indexBeforeFlow--) {\n        if (self.events[indexBeforeFlow][0] === 'exit' && self.events[indexBeforeFlow][1].type === \"chunkFlow\") {\n          if (seen) {\n            point = self.events[indexBeforeFlow][1].end;\n            break;\n          }\n          seen = true;\n        }\n      }\n      exitContainers(continued);\n\n      // Fix positions.\n      index = indexBeforeExits;\n      while (index < self.events.length) {\n        self.events[index][1].end = {\n          ...point\n        };\n        index++;\n      }\n\n      // Inject the exits earlier (they’re still also at the end).\n      splice(self.events, indexBeforeFlow + 1, 0, self.events.slice(indexBeforeExits));\n\n      // Discard the duplicate exits.\n      self.events.length = index;\n    }\n  }\n\n  /**\n   * @param {number} size\n   *   Size.\n   * @returns {undefined}\n   *   Nothing.\n   */\n  function exitContainers(size) {\n    let index = stack.length;\n\n    // Exit open containers.\n    while (index-- > size) {\n      const entry = stack[index];\n      self.containerState = entry[1];\n      entry[0].exit.call(self, effects);\n    }\n    stack.length = size;\n  }\n  function closeFlow() {\n    childFlow.write([null]);\n    childToken = undefined;\n    childFlow = undefined;\n    self.containerState._closeFlow = undefined;\n  }\n}\n\n/**\n * @this {TokenizeContext}\n *   Context.\n * @type {Tokenizer}\n *   Tokenizer.\n */\nfunction tokenizeContainer(effects, ok, nok) {\n  // Always populated by defaults.\n\n  return factorySpace(effects, effects.attempt(this.parser.constructs.document, ok, nok), \"linePrefix\", this.parser.constructs.disable.null.includes('codeIndented') ? undefined : 4);\n}","/**\n * @import {Code} from 'micromark-util-types'\n */\n\nimport { markdownLineEndingOrSpace, unicodePunctuation, unicodeWhitespace } from 'micromark-util-character';\n/**\n * Classify whether a code represents whitespace, punctuation, or something\n * else.\n *\n * Used for attention (emphasis, strong), whose sequences can open or close\n * based on the class of surrounding characters.\n *\n * > 👉 **Note**: eof (`null`) is seen as whitespace.\n *\n * @param {Code} code\n *   Code.\n * @returns {typeof constants.characterGroupWhitespace | typeof constants.characterGroupPunctuation | undefined}\n *   Group.\n */\nexport function classifyCharacter(code) {\n  if (code === null || markdownLineEndingOrSpace(code) || unicodeWhitespace(code)) {\n    return 1;\n  }\n  if (unicodePunctuation(code)) {\n    return 2;\n  }\n}","/**\n * @import {Event, Resolver, TokenizeContext} from 'micromark-util-types'\n */\n\n/**\n * Call all `resolveAll`s.\n *\n * @param {ReadonlyArray<{resolveAll?: Resolver | undefined}>} constructs\n *   List of constructs, optionally with `resolveAll`s.\n * @param {Array<Event>} events\n *   List of events.\n * @param {TokenizeContext} context\n *   Context used by `tokenize`.\n * @returns {Array<Event>}\n *   Changed events.\n */\nexport function resolveAll(constructs, events, context) {\n  /** @type {Array<Resolver>} */\n  const called = []\n  let index = -1\n\n  while (++index < constructs.length) {\n    const resolve = constructs[index].resolveAll\n\n    if (resolve && !called.includes(resolve)) {\n      events = resolve(events, context)\n      called.push(resolve)\n    }\n  }\n\n  return events\n}\n","/**\n * @import {\n *   Code,\n *   Construct,\n *   Event,\n *   Point,\n *   Resolver,\n *   State,\n *   TokenizeContext,\n *   Tokenizer,\n *   Token\n * } from 'micromark-util-types'\n */\n\nimport { push, splice } from 'micromark-util-chunked';\nimport { classifyCharacter } from 'micromark-util-classify-character';\nimport { resolveAll } from 'micromark-util-resolve-all';\n/** @type {Construct} */\nexport const attention = {\n  name: 'attention',\n  resolveAll: resolveAllAttention,\n  tokenize: tokenizeAttention\n};\n\n/**\n * Take all events and resolve attention to emphasis or strong.\n *\n * @type {Resolver}\n */\n// eslint-disable-next-line complexity\nfunction resolveAllAttention(events, context) {\n  let index = -1;\n  /** @type {number} */\n  let open;\n  /** @type {Token} */\n  let group;\n  /** @type {Token} */\n  let text;\n  /** @type {Token} */\n  let openingSequence;\n  /** @type {Token} */\n  let closingSequence;\n  /** @type {number} */\n  let use;\n  /** @type {Array<Event>} */\n  let nextEvents;\n  /** @type {number} */\n  let offset;\n\n  // Walk through all events.\n  //\n  // Note: performance of this is fine on an mb of normal markdown, but it’s\n  // a bottleneck for malicious stuff.\n  while (++index < events.length) {\n    // Find a token that can close.\n    if (events[index][0] === 'enter' && events[index][1].type === 'attentionSequence' && events[index][1]._close) {\n      open = index;\n\n      // Now walk back to find an opener.\n      while (open--) {\n        // Find a token that can open the closer.\n        if (events[open][0] === 'exit' && events[open][1].type === 'attentionSequence' && events[open][1]._open &&\n        // If the markers are the same:\n        context.sliceSerialize(events[open][1]).charCodeAt(0) === context.sliceSerialize(events[index][1]).charCodeAt(0)) {\n          // If the opening can close or the closing can open,\n          // and the close size *is not* a multiple of three,\n          // but the sum of the opening and closing size *is* multiple of three,\n          // then don’t match.\n          if ((events[open][1]._close || events[index][1]._open) && (events[index][1].end.offset - events[index][1].start.offset) % 3 && !((events[open][1].end.offset - events[open][1].start.offset + events[index][1].end.offset - events[index][1].start.offset) % 3)) {\n            continue;\n          }\n\n          // Number of markers to use from the sequence.\n          use = events[open][1].end.offset - events[open][1].start.offset > 1 && events[index][1].end.offset - events[index][1].start.offset > 1 ? 2 : 1;\n          const start = {\n            ...events[open][1].end\n          };\n          const end = {\n            ...events[index][1].start\n          };\n          movePoint(start, -use);\n          movePoint(end, use);\n          openingSequence = {\n            type: use > 1 ? \"strongSequence\" : \"emphasisSequence\",\n            start,\n            end: {\n              ...events[open][1].end\n            }\n          };\n          closingSequence = {\n            type: use > 1 ? \"strongSequence\" : \"emphasisSequence\",\n            start: {\n              ...events[index][1].start\n            },\n            end\n          };\n          text = {\n            type: use > 1 ? \"strongText\" : \"emphasisText\",\n            start: {\n              ...events[open][1].end\n            },\n            end: {\n              ...events[index][1].start\n            }\n          };\n          group = {\n            type: use > 1 ? \"strong\" : \"emphasis\",\n            start: {\n              ...openingSequence.start\n            },\n            end: {\n              ...closingSequence.end\n            }\n          };\n          events[open][1].end = {\n            ...openingSequence.start\n          };\n          events[index][1].start = {\n            ...closingSequence.end\n          };\n          nextEvents = [];\n\n          // If there are more markers in the opening, add them before.\n          if (events[open][1].end.offset - events[open][1].start.offset) {\n            nextEvents = push(nextEvents, [['enter', events[open][1], context], ['exit', events[open][1], context]]);\n          }\n\n          // Opening.\n          nextEvents = push(nextEvents, [['enter', group, context], ['enter', openingSequence, context], ['exit', openingSequence, context], ['enter', text, context]]);\n\n          // Always populated by defaults.\n\n          // Between.\n          nextEvents = push(nextEvents, resolveAll(context.parser.constructs.insideSpan.null, events.slice(open + 1, index), context));\n\n          // Closing.\n          nextEvents = push(nextEvents, [['exit', text, context], ['enter', closingSequence, context], ['exit', closingSequence, context], ['exit', group, context]]);\n\n          // If there are more markers in the closing, add them after.\n          if (events[index][1].end.offset - events[index][1].start.offset) {\n            offset = 2;\n            nextEvents = push(nextEvents, [['enter', events[index][1], context], ['exit', events[index][1], context]]);\n          } else {\n            offset = 0;\n          }\n          splice(events, open - 1, index - open + 3, nextEvents);\n          index = open + nextEvents.length - offset - 2;\n          break;\n        }\n      }\n    }\n  }\n\n  // Remove remaining sequences.\n  index = -1;\n  while (++index < events.length) {\n    if (events[index][1].type === 'attentionSequence') {\n      events[index][1].type = 'data';\n    }\n  }\n  return events;\n}\n\n/**\n * @this {TokenizeContext}\n *   Context.\n * @type {Tokenizer}\n */\nfunction tokenizeAttention(effects, ok) {\n  const attentionMarkers = this.parser.constructs.attentionMarkers.null;\n  const previous = this.previous;\n  const before = classifyCharacter(previous);\n\n  /** @type {NonNullable<Code>} */\n  let marker;\n  return start;\n\n  /**\n   * Before a sequence.\n   *\n   * ```markdown\n   * > | **\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    marker = code;\n    effects.enter('attentionSequence');\n    return inside(code);\n  }\n\n  /**\n   * In a sequence.\n   *\n   * ```markdown\n   * > | **\n   *     ^^\n   * ```\n   *\n   * @type {State}\n   */\n  function inside(code) {\n    if (code === marker) {\n      effects.consume(code);\n      return inside;\n    }\n    const token = effects.exit('attentionSequence');\n\n    // To do: next major: move this to resolver, just like `markdown-rs`.\n    const after = classifyCharacter(code);\n\n    // Always populated by defaults.\n\n    const open = !after || after === 2 && before || attentionMarkers.includes(code);\n    const close = !before || before === 2 && after || attentionMarkers.includes(previous);\n    token._open = Boolean(marker === 42 ? open : open && (before || !close));\n    token._close = Boolean(marker === 42 ? close : close && (after || !open));\n    return ok(code);\n  }\n}\n\n/**\n * Move a point a bit.\n *\n * Note: `move` only works inside lines! It’s not possible to move past other\n * chunks (replacement characters, tabs, or line endings).\n *\n * @param {Point} point\n *   Point.\n * @param {number} offset\n *   Amount to move.\n * @returns {undefined}\n *   Nothing.\n */\nfunction movePoint(point, offset) {\n  point.column += offset;\n  point.offset += offset;\n  point._bufferIndex += offset;\n}","/**\n * @import {\n *   Construct,\n *   State,\n *   TokenizeContext,\n *   Tokenizer\n * } from 'micromark-util-types'\n */\n\nimport { asciiAlphanumeric, asciiAlpha, asciiAtext, asciiControl } from 'micromark-util-character';\n/** @type {Construct} */\nexport const autolink = {\n  name: 'autolink',\n  tokenize: tokenizeAutolink\n};\n\n/**\n * @this {TokenizeContext}\n *   Context.\n * @type {Tokenizer}\n */\nfunction tokenizeAutolink(effects, ok, nok) {\n  let size = 0;\n  return start;\n\n  /**\n   * Start of an autolink.\n   *\n   * ```markdown\n   * > | a<https://example.com>b\n   *      ^\n   * > | a<user@example.com>b\n   *      ^\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    effects.enter(\"autolink\");\n    effects.enter(\"autolinkMarker\");\n    effects.consume(code);\n    effects.exit(\"autolinkMarker\");\n    effects.enter(\"autolinkProtocol\");\n    return open;\n  }\n\n  /**\n   * After `<`, at protocol or atext.\n   *\n   * ```markdown\n   * > | a<https://example.com>b\n   *       ^\n   * > | a<user@example.com>b\n   *       ^\n   * ```\n   *\n   * @type {State}\n   */\n  function open(code) {\n    if (asciiAlpha(code)) {\n      effects.consume(code);\n      return schemeOrEmailAtext;\n    }\n    if (code === 64) {\n      return nok(code);\n    }\n    return emailAtext(code);\n  }\n\n  /**\n   * At second byte of protocol or atext.\n   *\n   * ```markdown\n   * > | a<https://example.com>b\n   *        ^\n   * > | a<user@example.com>b\n   *        ^\n   * ```\n   *\n   * @type {State}\n   */\n  function schemeOrEmailAtext(code) {\n    // ASCII alphanumeric and `+`, `-`, and `.`.\n    if (code === 43 || code === 45 || code === 46 || asciiAlphanumeric(code)) {\n      // Count the previous alphabetical from `open` too.\n      size = 1;\n      return schemeInsideOrEmailAtext(code);\n    }\n    return emailAtext(code);\n  }\n\n  /**\n   * In ambiguous protocol or atext.\n   *\n   * ```markdown\n   * > | a<https://example.com>b\n   *        ^\n   * > | a<user@example.com>b\n   *        ^\n   * ```\n   *\n   * @type {State}\n   */\n  function schemeInsideOrEmailAtext(code) {\n    if (code === 58) {\n      effects.consume(code);\n      size = 0;\n      return urlInside;\n    }\n\n    // ASCII alphanumeric and `+`, `-`, and `.`.\n    if ((code === 43 || code === 45 || code === 46 || asciiAlphanumeric(code)) && size++ < 32) {\n      effects.consume(code);\n      return schemeInsideOrEmailAtext;\n    }\n    size = 0;\n    return emailAtext(code);\n  }\n\n  /**\n   * After protocol, in URL.\n   *\n   * ```markdown\n   * > | a<https://example.com>b\n   *             ^\n   * ```\n   *\n   * @type {State}\n   */\n  function urlInside(code) {\n    if (code === 62) {\n      effects.exit(\"autolinkProtocol\");\n      effects.enter(\"autolinkMarker\");\n      effects.consume(code);\n      effects.exit(\"autolinkMarker\");\n      effects.exit(\"autolink\");\n      return ok;\n    }\n\n    // ASCII control, space, or `<`.\n    if (code === null || code === 32 || code === 60 || asciiControl(code)) {\n      return nok(code);\n    }\n    effects.consume(code);\n    return urlInside;\n  }\n\n  /**\n   * In email atext.\n   *\n   * ```markdown\n   * > | a<user.name@example.com>b\n   *              ^\n   * ```\n   *\n   * @type {State}\n   */\n  function emailAtext(code) {\n    if (code === 64) {\n      effects.consume(code);\n      return emailAtSignOrDot;\n    }\n    if (asciiAtext(code)) {\n      effects.consume(code);\n      return emailAtext;\n    }\n    return nok(code);\n  }\n\n  /**\n   * In label, after at-sign or dot.\n   *\n   * ```markdown\n   * > | a<user.name@example.com>b\n   *                 ^       ^\n   * ```\n   *\n   * @type {State}\n   */\n  function emailAtSignOrDot(code) {\n    return asciiAlphanumeric(code) ? emailLabel(code) : nok(code);\n  }\n\n  /**\n   * In label, where `.` and `>` are allowed.\n   *\n   * ```markdown\n   * > | a<user.name@example.com>b\n   *                   ^\n   * ```\n   *\n   * @type {State}\n   */\n  function emailLabel(code) {\n    if (code === 46) {\n      effects.consume(code);\n      size = 0;\n      return emailAtSignOrDot;\n    }\n    if (code === 62) {\n      // Exit, then change the token type.\n      effects.exit(\"autolinkProtocol\").type = \"autolinkEmail\";\n      effects.enter(\"autolinkMarker\");\n      effects.consume(code);\n      effects.exit(\"autolinkMarker\");\n      effects.exit(\"autolink\");\n      return ok;\n    }\n    return emailValue(code);\n  }\n\n  /**\n   * In label, where `.` and `>` are *not* allowed.\n   *\n   * Though, this is also used in `emailLabel` to parse other values.\n   *\n   * ```markdown\n   * > | a<user.name@ex-ample.com>b\n   *                    ^\n   * ```\n   *\n   * @type {State}\n   */\n  function emailValue(code) {\n    // ASCII alphanumeric or `-`.\n    if ((code === 45 || asciiAlphanumeric(code)) && size++ < 63) {\n      const next = code === 45 ? emailValue : emailLabel;\n      effects.consume(code);\n      return next;\n    }\n    return nok(code);\n  }\n}","/**\n * @import {\n *   Construct,\n *   State,\n *   TokenizeContext,\n *   Tokenizer\n * } from 'micromark-util-types'\n */\n\nimport { factorySpace } from 'micromark-factory-space';\nimport { markdownLineEnding, markdownSpace } from 'micromark-util-character';\n/** @type {Construct} */\nexport const blankLine = {\n  partial: true,\n  tokenize: tokenizeBlankLine\n};\n\n/**\n * @this {TokenizeContext}\n *   Context.\n * @type {Tokenizer}\n */\nfunction tokenizeBlankLine(effects, ok, nok) {\n  return start;\n\n  /**\n   * Start of blank line.\n   *\n   * > 👉 **Note**: `␠` represents a space character.\n   *\n   * ```markdown\n   * > | ␠␠␊\n   *     ^\n   * > | ␊\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    return markdownSpace(code) ? factorySpace(effects, after, \"linePrefix\")(code) : after(code);\n  }\n\n  /**\n   * At eof/eol, after optional whitespace.\n   *\n   * > 👉 **Note**: `␠` represents a space character.\n   *\n   * ```markdown\n   * > | ␠␠␊\n   *       ^\n   * > | ␊\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function after(code) {\n    return code === null || markdownLineEnding(code) ? ok(code) : nok(code);\n  }\n}","/**\n * @import {\n *   Construct,\n *   Exiter,\n *   State,\n *   TokenizeContext,\n *   Tokenizer\n * } from 'micromark-util-types'\n */\n\nimport { factorySpace } from 'micromark-factory-space';\nimport { markdownSpace } from 'micromark-util-character';\n/** @type {Construct} */\nexport const blockQuote = {\n  continuation: {\n    tokenize: tokenizeBlockQuoteContinuation\n  },\n  exit,\n  name: 'blockQuote',\n  tokenize: tokenizeBlockQuoteStart\n};\n\n/**\n * @this {TokenizeContext}\n *   Context.\n * @type {Tokenizer}\n */\nfunction tokenizeBlockQuoteStart(effects, ok, nok) {\n  const self = this;\n  return start;\n\n  /**\n   * Start of block quote.\n   *\n   * ```markdown\n   * > | > a\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    if (code === 62) {\n      const state = self.containerState;\n      if (!state.open) {\n        effects.enter(\"blockQuote\", {\n          _container: true\n        });\n        state.open = true;\n      }\n      effects.enter(\"blockQuotePrefix\");\n      effects.enter(\"blockQuoteMarker\");\n      effects.consume(code);\n      effects.exit(\"blockQuoteMarker\");\n      return after;\n    }\n    return nok(code);\n  }\n\n  /**\n   * After `>`, before optional whitespace.\n   *\n   * ```markdown\n   * > | > a\n   *      ^\n   * ```\n   *\n   * @type {State}\n   */\n  function after(code) {\n    if (markdownSpace(code)) {\n      effects.enter(\"blockQuotePrefixWhitespace\");\n      effects.consume(code);\n      effects.exit(\"blockQuotePrefixWhitespace\");\n      effects.exit(\"blockQuotePrefix\");\n      return ok;\n    }\n    effects.exit(\"blockQuotePrefix\");\n    return ok(code);\n  }\n}\n\n/**\n * Start of block quote continuation.\n *\n * ```markdown\n *   | > a\n * > | > b\n *     ^\n * ```\n *\n * @this {TokenizeContext}\n *   Context.\n * @type {Tokenizer}\n */\nfunction tokenizeBlockQuoteContinuation(effects, ok, nok) {\n  const self = this;\n  return contStart;\n\n  /**\n   * Start of block quote continuation.\n   *\n   * Also used to parse the first block quote opening.\n   *\n   * ```markdown\n   *   | > a\n   * > | > b\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function contStart(code) {\n    if (markdownSpace(code)) {\n      // Always populated by defaults.\n\n      return factorySpace(effects, contBefore, \"linePrefix\", self.parser.constructs.disable.null.includes('codeIndented') ? undefined : 4)(code);\n    }\n    return contBefore(code);\n  }\n\n  /**\n   * At `>`, after optional whitespace.\n   *\n   * Also used to parse the first block quote opening.\n   *\n   * ```markdown\n   *   | > a\n   * > | > b\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function contBefore(code) {\n    return effects.attempt(blockQuote, ok, nok)(code);\n  }\n}\n\n/** @type {Exiter} */\nfunction exit(effects) {\n  effects.exit(\"blockQuote\");\n}","/**\n * @import {\n *   Construct,\n *   State,\n *   TokenizeContext,\n *   Tokenizer\n * } from 'micromark-util-types'\n */\n\nimport { asciiPunctuation } from 'micromark-util-character';\n/** @type {Construct} */\nexport const characterEscape = {\n  name: 'characterEscape',\n  tokenize: tokenizeCharacterEscape\n};\n\n/**\n * @this {TokenizeContext}\n *   Context.\n * @type {Tokenizer}\n */\nfunction tokenizeCharacterEscape(effects, ok, nok) {\n  return start;\n\n  /**\n   * Start of character escape.\n   *\n   * ```markdown\n   * > | a\\*b\n   *      ^\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    effects.enter(\"characterEscape\");\n    effects.enter(\"escapeMarker\");\n    effects.consume(code);\n    effects.exit(\"escapeMarker\");\n    return inside;\n  }\n\n  /**\n   * After `\\`, at punctuation.\n   *\n   * ```markdown\n   * > | a\\*b\n   *       ^\n   * ```\n   *\n   * @type {State}\n   */\n  function inside(code) {\n    // ASCII punctuation.\n    if (asciiPunctuation(code)) {\n      effects.enter(\"characterEscapeValue\");\n      effects.consume(code);\n      effects.exit(\"characterEscapeValue\");\n      effects.exit(\"characterEscape\");\n      return ok;\n    }\n    return nok(code);\n  }\n}","/**\n * @import {\n *   Code,\n *   Construct,\n *   State,\n *   TokenizeContext,\n *   Tokenizer\n * } from 'micromark-util-types'\n */\n\nimport { decodeNamedCharacterReference } from 'decode-named-character-reference';\nimport { asciiAlphanumeric, asciiDigit, asciiHexDigit } from 'micromark-util-character';\n/** @type {Construct} */\nexport const characterReference = {\n  name: 'characterReference',\n  tokenize: tokenizeCharacterReference\n};\n\n/**\n * @this {TokenizeContext}\n *   Context.\n * @type {Tokenizer}\n */\nfunction tokenizeCharacterReference(effects, ok, nok) {\n  const self = this;\n  let size = 0;\n  /** @type {number} */\n  let max;\n  /** @type {(code: Code) => boolean} */\n  let test;\n  return start;\n\n  /**\n   * Start of character reference.\n   *\n   * ```markdown\n   * > | a&amp;b\n   *      ^\n   * > | a&#123;b\n   *      ^\n   * > | a&#x9;b\n   *      ^\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    effects.enter(\"characterReference\");\n    effects.enter(\"characterReferenceMarker\");\n    effects.consume(code);\n    effects.exit(\"characterReferenceMarker\");\n    return open;\n  }\n\n  /**\n   * After `&`, at `#` for numeric references or alphanumeric for named\n   * references.\n   *\n   * ```markdown\n   * > | a&amp;b\n   *       ^\n   * > | a&#123;b\n   *       ^\n   * > | a&#x9;b\n   *       ^\n   * ```\n   *\n   * @type {State}\n   */\n  function open(code) {\n    if (code === 35) {\n      effects.enter(\"characterReferenceMarkerNumeric\");\n      effects.consume(code);\n      effects.exit(\"characterReferenceMarkerNumeric\");\n      return numeric;\n    }\n    effects.enter(\"characterReferenceValue\");\n    max = 31;\n    test = asciiAlphanumeric;\n    return value(code);\n  }\n\n  /**\n   * After `#`, at `x` for hexadecimals or digit for decimals.\n   *\n   * ```markdown\n   * > | a&#123;b\n   *        ^\n   * > | a&#x9;b\n   *        ^\n   * ```\n   *\n   * @type {State}\n   */\n  function numeric(code) {\n    if (code === 88 || code === 120) {\n      effects.enter(\"characterReferenceMarkerHexadecimal\");\n      effects.consume(code);\n      effects.exit(\"characterReferenceMarkerHexadecimal\");\n      effects.enter(\"characterReferenceValue\");\n      max = 6;\n      test = asciiHexDigit;\n      return value;\n    }\n    effects.enter(\"characterReferenceValue\");\n    max = 7;\n    test = asciiDigit;\n    return value(code);\n  }\n\n  /**\n   * After markers (`&#x`, `&#`, or `&`), in value, before `;`.\n   *\n   * The character reference kind defines what and how many characters are\n   * allowed.\n   *\n   * ```markdown\n   * > | a&amp;b\n   *       ^^^\n   * > | a&#123;b\n   *        ^^^\n   * > | a&#x9;b\n   *         ^\n   * ```\n   *\n   * @type {State}\n   */\n  function value(code) {\n    if (code === 59 && size) {\n      const token = effects.exit(\"characterReferenceValue\");\n      if (test === asciiAlphanumeric && !decodeNamedCharacterReference(self.sliceSerialize(token))) {\n        return nok(code);\n      }\n\n      // To do: `markdown-rs` uses a different name:\n      // `CharacterReferenceMarkerSemi`.\n      effects.enter(\"characterReferenceMarker\");\n      effects.consume(code);\n      effects.exit(\"characterReferenceMarker\");\n      effects.exit(\"characterReference\");\n      return ok;\n    }\n    if (test(code) && size++ < max) {\n      effects.consume(code);\n      return value;\n    }\n    return nok(code);\n  }\n}","/**\n * @import {\n *   Code,\n *   Construct,\n *   State,\n *   TokenizeContext,\n *   Tokenizer\n * } from 'micromark-util-types'\n */\n\nimport { factorySpace } from 'micromark-factory-space';\nimport { markdownLineEnding, markdownSpace } from 'micromark-util-character';\n/** @type {Construct} */\nconst nonLazyContinuation = {\n  partial: true,\n  tokenize: tokenizeNonLazyContinuation\n};\n\n/** @type {Construct} */\nexport const codeFenced = {\n  concrete: true,\n  name: 'codeFenced',\n  tokenize: tokenizeCodeFenced\n};\n\n/**\n * @this {TokenizeContext}\n *   Context.\n * @type {Tokenizer}\n */\nfunction tokenizeCodeFenced(effects, ok, nok) {\n  const self = this;\n  /** @type {Construct} */\n  const closeStart = {\n    partial: true,\n    tokenize: tokenizeCloseStart\n  };\n  let initialPrefix = 0;\n  let sizeOpen = 0;\n  /** @type {NonNullable<Code>} */\n  let marker;\n  return start;\n\n  /**\n   * Start of code.\n   *\n   * ```markdown\n   * > | ~~~js\n   *     ^\n   *   | alert(1)\n   *   | ~~~\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    // To do: parse whitespace like `markdown-rs`.\n    return beforeSequenceOpen(code);\n  }\n\n  /**\n   * In opening fence, after prefix, at sequence.\n   *\n   * ```markdown\n   * > | ~~~js\n   *     ^\n   *   | alert(1)\n   *   | ~~~\n   * ```\n   *\n   * @type {State}\n   */\n  function beforeSequenceOpen(code) {\n    const tail = self.events[self.events.length - 1];\n    initialPrefix = tail && tail[1].type === \"linePrefix\" ? tail[2].sliceSerialize(tail[1], true).length : 0;\n    marker = code;\n    effects.enter(\"codeFenced\");\n    effects.enter(\"codeFencedFence\");\n    effects.enter(\"codeFencedFenceSequence\");\n    return sequenceOpen(code);\n  }\n\n  /**\n   * In opening fence sequence.\n   *\n   * ```markdown\n   * > | ~~~js\n   *      ^\n   *   | alert(1)\n   *   | ~~~\n   * ```\n   *\n   * @type {State}\n   */\n  function sequenceOpen(code) {\n    if (code === marker) {\n      sizeOpen++;\n      effects.consume(code);\n      return sequenceOpen;\n    }\n    if (sizeOpen < 3) {\n      return nok(code);\n    }\n    effects.exit(\"codeFencedFenceSequence\");\n    return markdownSpace(code) ? factorySpace(effects, infoBefore, \"whitespace\")(code) : infoBefore(code);\n  }\n\n  /**\n   * In opening fence, after the sequence (and optional whitespace), before info.\n   *\n   * ```markdown\n   * > | ~~~js\n   *        ^\n   *   | alert(1)\n   *   | ~~~\n   * ```\n   *\n   * @type {State}\n   */\n  function infoBefore(code) {\n    if (code === null || markdownLineEnding(code)) {\n      effects.exit(\"codeFencedFence\");\n      return self.interrupt ? ok(code) : effects.check(nonLazyContinuation, atNonLazyBreak, after)(code);\n    }\n    effects.enter(\"codeFencedFenceInfo\");\n    effects.enter(\"chunkString\", {\n      contentType: \"string\"\n    });\n    return info(code);\n  }\n\n  /**\n   * In info.\n   *\n   * ```markdown\n   * > | ~~~js\n   *        ^\n   *   | alert(1)\n   *   | ~~~\n   * ```\n   *\n   * @type {State}\n   */\n  function info(code) {\n    if (code === null || markdownLineEnding(code)) {\n      effects.exit(\"chunkString\");\n      effects.exit(\"codeFencedFenceInfo\");\n      return infoBefore(code);\n    }\n    if (markdownSpace(code)) {\n      effects.exit(\"chunkString\");\n      effects.exit(\"codeFencedFenceInfo\");\n      return factorySpace(effects, metaBefore, \"whitespace\")(code);\n    }\n    if (code === 96 && code === marker) {\n      return nok(code);\n    }\n    effects.consume(code);\n    return info;\n  }\n\n  /**\n   * In opening fence, after info and whitespace, before meta.\n   *\n   * ```markdown\n   * > | ~~~js eval\n   *           ^\n   *   | alert(1)\n   *   | ~~~\n   * ```\n   *\n   * @type {State}\n   */\n  function metaBefore(code) {\n    if (code === null || markdownLineEnding(code)) {\n      return infoBefore(code);\n    }\n    effects.enter(\"codeFencedFenceMeta\");\n    effects.enter(\"chunkString\", {\n      contentType: \"string\"\n    });\n    return meta(code);\n  }\n\n  /**\n   * In meta.\n   *\n   * ```markdown\n   * > | ~~~js eval\n   *           ^\n   *   | alert(1)\n   *   | ~~~\n   * ```\n   *\n   * @type {State}\n   */\n  function meta(code) {\n    if (code === null || markdownLineEnding(code)) {\n      effects.exit(\"chunkString\");\n      effects.exit(\"codeFencedFenceMeta\");\n      return infoBefore(code);\n    }\n    if (code === 96 && code === marker) {\n      return nok(code);\n    }\n    effects.consume(code);\n    return meta;\n  }\n\n  /**\n   * At eol/eof in code, before a non-lazy closing fence or content.\n   *\n   * ```markdown\n   * > | ~~~js\n   *          ^\n   * > | alert(1)\n   *             ^\n   *   | ~~~\n   * ```\n   *\n   * @type {State}\n   */\n  function atNonLazyBreak(code) {\n    return effects.attempt(closeStart, after, contentBefore)(code);\n  }\n\n  /**\n   * Before code content, not a closing fence, at eol.\n   *\n   * ```markdown\n   *   | ~~~js\n   * > | alert(1)\n   *             ^\n   *   | ~~~\n   * ```\n   *\n   * @type {State}\n   */\n  function contentBefore(code) {\n    effects.enter(\"lineEnding\");\n    effects.consume(code);\n    effects.exit(\"lineEnding\");\n    return contentStart;\n  }\n\n  /**\n   * Before code content, not a closing fence.\n   *\n   * ```markdown\n   *   | ~~~js\n   * > | alert(1)\n   *     ^\n   *   | ~~~\n   * ```\n   *\n   * @type {State}\n   */\n  function contentStart(code) {\n    return initialPrefix > 0 && markdownSpace(code) ? factorySpace(effects, beforeContentChunk, \"linePrefix\", initialPrefix + 1)(code) : beforeContentChunk(code);\n  }\n\n  /**\n   * Before code content, after optional prefix.\n   *\n   * ```markdown\n   *   | ~~~js\n   * > | alert(1)\n   *     ^\n   *   | ~~~\n   * ```\n   *\n   * @type {State}\n   */\n  function beforeContentChunk(code) {\n    if (code === null || markdownLineEnding(code)) {\n      return effects.check(nonLazyContinuation, atNonLazyBreak, after)(code);\n    }\n    effects.enter(\"codeFlowValue\");\n    return contentChunk(code);\n  }\n\n  /**\n   * In code content.\n   *\n   * ```markdown\n   *   | ~~~js\n   * > | alert(1)\n   *     ^^^^^^^^\n   *   | ~~~\n   * ```\n   *\n   * @type {State}\n   */\n  function contentChunk(code) {\n    if (code === null || markdownLineEnding(code)) {\n      effects.exit(\"codeFlowValue\");\n      return beforeContentChunk(code);\n    }\n    effects.consume(code);\n    return contentChunk;\n  }\n\n  /**\n   * After code.\n   *\n   * ```markdown\n   *   | ~~~js\n   *   | alert(1)\n   * > | ~~~\n   *        ^\n   * ```\n   *\n   * @type {State}\n   */\n  function after(code) {\n    effects.exit(\"codeFenced\");\n    return ok(code);\n  }\n\n  /**\n   * @this {TokenizeContext}\n   *   Context.\n   * @type {Tokenizer}\n   */\n  function tokenizeCloseStart(effects, ok, nok) {\n    let size = 0;\n    return startBefore;\n\n    /**\n     *\n     *\n     * @type {State}\n     */\n    function startBefore(code) {\n      effects.enter(\"lineEnding\");\n      effects.consume(code);\n      effects.exit(\"lineEnding\");\n      return start;\n    }\n\n    /**\n     * Before closing fence, at optional whitespace.\n     *\n     * ```markdown\n     *   | ~~~js\n     *   | alert(1)\n     * > | ~~~\n     *     ^\n     * ```\n     *\n     * @type {State}\n     */\n    function start(code) {\n      // Always populated by defaults.\n\n      // To do: `enter` here or in next state?\n      effects.enter(\"codeFencedFence\");\n      return markdownSpace(code) ? factorySpace(effects, beforeSequenceClose, \"linePrefix\", self.parser.constructs.disable.null.includes('codeIndented') ? undefined : 4)(code) : beforeSequenceClose(code);\n    }\n\n    /**\n     * In closing fence, after optional whitespace, at sequence.\n     *\n     * ```markdown\n     *   | ~~~js\n     *   | alert(1)\n     * > | ~~~\n     *     ^\n     * ```\n     *\n     * @type {State}\n     */\n    function beforeSequenceClose(code) {\n      if (code === marker) {\n        effects.enter(\"codeFencedFenceSequence\");\n        return sequenceClose(code);\n      }\n      return nok(code);\n    }\n\n    /**\n     * In closing fence sequence.\n     *\n     * ```markdown\n     *   | ~~~js\n     *   | alert(1)\n     * > | ~~~\n     *     ^\n     * ```\n     *\n     * @type {State}\n     */\n    function sequenceClose(code) {\n      if (code === marker) {\n        size++;\n        effects.consume(code);\n        return sequenceClose;\n      }\n      if (size >= sizeOpen) {\n        effects.exit(\"codeFencedFenceSequence\");\n        return markdownSpace(code) ? factorySpace(effects, sequenceCloseAfter, \"whitespace\")(code) : sequenceCloseAfter(code);\n      }\n      return nok(code);\n    }\n\n    /**\n     * After closing fence sequence, after optional whitespace.\n     *\n     * ```markdown\n     *   | ~~~js\n     *   | alert(1)\n     * > | ~~~\n     *        ^\n     * ```\n     *\n     * @type {State}\n     */\n    function sequenceCloseAfter(code) {\n      if (code === null || markdownLineEnding(code)) {\n        effects.exit(\"codeFencedFence\");\n        return ok(code);\n      }\n      return nok(code);\n    }\n  }\n}\n\n/**\n * @this {TokenizeContext}\n *   Context.\n * @type {Tokenizer}\n */\nfunction tokenizeNonLazyContinuation(effects, ok, nok) {\n  const self = this;\n  return start;\n\n  /**\n   *\n   *\n   * @type {State}\n   */\n  function start(code) {\n    if (code === null) {\n      return nok(code);\n    }\n    effects.enter(\"lineEnding\");\n    effects.consume(code);\n    effects.exit(\"lineEnding\");\n    return lineStart;\n  }\n\n  /**\n   *\n   *\n   * @type {State}\n   */\n  function lineStart(code) {\n    return self.parser.lazy[self.now().line] ? nok(code) : ok(code);\n  }\n}","/**\n * @import {\n *   Construct,\n *   State,\n *   TokenizeContext,\n *   Tokenizer\n * } from 'micromark-util-types'\n */\n\nimport { factorySpace } from 'micromark-factory-space';\nimport { markdownLineEnding, markdownSpace } from 'micromark-util-character';\n/** @type {Construct} */\nexport const codeIndented = {\n  name: 'codeIndented',\n  tokenize: tokenizeCodeIndented\n};\n\n/** @type {Construct} */\nconst furtherStart = {\n  partial: true,\n  tokenize: tokenizeFurtherStart\n};\n\n/**\n * @this {TokenizeContext}\n *   Context.\n * @type {Tokenizer}\n */\nfunction tokenizeCodeIndented(effects, ok, nok) {\n  const self = this;\n  return start;\n\n  /**\n   * Start of code (indented).\n   *\n   * > **Parsing note**: it is not needed to check if this first line is a\n   * > filled line (that it has a non-whitespace character), because blank lines\n   * > are parsed already, so we never run into that.\n   *\n   * ```markdown\n   * > |     aaa\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    // To do: manually check if interrupting like `markdown-rs`.\n\n    effects.enter(\"codeIndented\");\n    // To do: use an improved `space_or_tab` function like `markdown-rs`,\n    // so that we can drop the next state.\n    return factorySpace(effects, afterPrefix, \"linePrefix\", 4 + 1)(code);\n  }\n\n  /**\n   * At start, after 1 or 4 spaces.\n   *\n   * ```markdown\n   * > |     aaa\n   *         ^\n   * ```\n   *\n   * @type {State}\n   */\n  function afterPrefix(code) {\n    const tail = self.events[self.events.length - 1];\n    return tail && tail[1].type === \"linePrefix\" && tail[2].sliceSerialize(tail[1], true).length >= 4 ? atBreak(code) : nok(code);\n  }\n\n  /**\n   * At a break.\n   *\n   * ```markdown\n   * > |     aaa\n   *         ^  ^\n   * ```\n   *\n   * @type {State}\n   */\n  function atBreak(code) {\n    if (code === null) {\n      return after(code);\n    }\n    if (markdownLineEnding(code)) {\n      return effects.attempt(furtherStart, atBreak, after)(code);\n    }\n    effects.enter(\"codeFlowValue\");\n    return inside(code);\n  }\n\n  /**\n   * In code content.\n   *\n   * ```markdown\n   * > |     aaa\n   *         ^^^^\n   * ```\n   *\n   * @type {State}\n   */\n  function inside(code) {\n    if (code === null || markdownLineEnding(code)) {\n      effects.exit(\"codeFlowValue\");\n      return atBreak(code);\n    }\n    effects.consume(code);\n    return inside;\n  }\n\n  /** @type {State} */\n  function after(code) {\n    effects.exit(\"codeIndented\");\n    // To do: allow interrupting like `markdown-rs`.\n    // Feel free to interrupt.\n    // tokenizer.interrupt = false\n    return ok(code);\n  }\n}\n\n/**\n * @this {TokenizeContext}\n *   Context.\n * @type {Tokenizer}\n */\nfunction tokenizeFurtherStart(effects, ok, nok) {\n  const self = this;\n  return furtherStart;\n\n  /**\n   * At eol, trying to parse another indent.\n   *\n   * ```markdown\n   * > |     aaa\n   *            ^\n   *   |     bbb\n   * ```\n   *\n   * @type {State}\n   */\n  function furtherStart(code) {\n    // To do: improve `lazy` / `pierce` handling.\n    // If this is a lazy line, it can’t be code.\n    if (self.parser.lazy[self.now().line]) {\n      return nok(code);\n    }\n    if (markdownLineEnding(code)) {\n      effects.enter(\"lineEnding\");\n      effects.consume(code);\n      effects.exit(\"lineEnding\");\n      return furtherStart;\n    }\n\n    // To do: the code here in `micromark-js` is a bit different from\n    // `markdown-rs` because there it can attempt spaces.\n    // We can’t yet.\n    //\n    // To do: use an improved `space_or_tab` function like `markdown-rs`,\n    // so that we can drop the next state.\n    return factorySpace(effects, afterPrefix, \"linePrefix\", 4 + 1)(code);\n  }\n\n  /**\n   * At start, after 1 or 4 spaces.\n   *\n   * ```markdown\n   * > |     aaa\n   *         ^\n   * ```\n   *\n   * @type {State}\n   */\n  function afterPrefix(code) {\n    const tail = self.events[self.events.length - 1];\n    return tail && tail[1].type === \"linePrefix\" && tail[2].sliceSerialize(tail[1], true).length >= 4 ? ok(code) : markdownLineEnding(code) ? furtherStart(code) : nok(code);\n  }\n}","/**\n * @import {\n *   Construct,\n *   Previous,\n *   Resolver,\n *   State,\n *   TokenizeContext,\n *   Tokenizer,\n *   Token\n * } from 'micromark-util-types'\n */\n\nimport { markdownLineEnding } from 'micromark-util-character';\n/** @type {Construct} */\nexport const codeText = {\n  name: 'codeText',\n  previous,\n  resolve: resolveCodeText,\n  tokenize: tokenizeCodeText\n};\n\n// To do: next major: don’t resolve, like `markdown-rs`.\n/** @type {Resolver} */\nfunction resolveCodeText(events) {\n  let tailExitIndex = events.length - 4;\n  let headEnterIndex = 3;\n  /** @type {number} */\n  let index;\n  /** @type {number | undefined} */\n  let enter;\n\n  // If we start and end with an EOL or a space.\n  if ((events[headEnterIndex][1].type === \"lineEnding\" || events[headEnterIndex][1].type === 'space') && (events[tailExitIndex][1].type === \"lineEnding\" || events[tailExitIndex][1].type === 'space')) {\n    index = headEnterIndex;\n\n    // And we have data.\n    while (++index < tailExitIndex) {\n      if (events[index][1].type === \"codeTextData\") {\n        // Then we have padding.\n        events[headEnterIndex][1].type = \"codeTextPadding\";\n        events[tailExitIndex][1].type = \"codeTextPadding\";\n        headEnterIndex += 2;\n        tailExitIndex -= 2;\n        break;\n      }\n    }\n  }\n\n  // Merge adjacent spaces and data.\n  index = headEnterIndex - 1;\n  tailExitIndex++;\n  while (++index <= tailExitIndex) {\n    if (enter === undefined) {\n      if (index !== tailExitIndex && events[index][1].type !== \"lineEnding\") {\n        enter = index;\n      }\n    } else if (index === tailExitIndex || events[index][1].type === \"lineEnding\") {\n      events[enter][1].type = \"codeTextData\";\n      if (index !== enter + 2) {\n        events[enter][1].end = events[index - 1][1].end;\n        events.splice(enter + 2, index - enter - 2);\n        tailExitIndex -= index - enter - 2;\n        index = enter + 2;\n      }\n      enter = undefined;\n    }\n  }\n  return events;\n}\n\n/**\n * @this {TokenizeContext}\n *   Context.\n * @type {Previous}\n */\nfunction previous(code) {\n  // If there is a previous code, there will always be a tail.\n  return code !== 96 || this.events[this.events.length - 1][1].type === \"characterEscape\";\n}\n\n/**\n * @this {TokenizeContext}\n *   Context.\n * @type {Tokenizer}\n */\nfunction tokenizeCodeText(effects, ok, nok) {\n  const self = this;\n  let sizeOpen = 0;\n  /** @type {number} */\n  let size;\n  /** @type {Token} */\n  let token;\n  return start;\n\n  /**\n   * Start of code (text).\n   *\n   * ```markdown\n   * > | `a`\n   *     ^\n   * > | \\`a`\n   *      ^\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    effects.enter(\"codeText\");\n    effects.enter(\"codeTextSequence\");\n    return sequenceOpen(code);\n  }\n\n  /**\n   * In opening sequence.\n   *\n   * ```markdown\n   * > | `a`\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function sequenceOpen(code) {\n    if (code === 96) {\n      effects.consume(code);\n      sizeOpen++;\n      return sequenceOpen;\n    }\n    effects.exit(\"codeTextSequence\");\n    return between(code);\n  }\n\n  /**\n   * Between something and something else.\n   *\n   * ```markdown\n   * > | `a`\n   *      ^^\n   * ```\n   *\n   * @type {State}\n   */\n  function between(code) {\n    // EOF.\n    if (code === null) {\n      return nok(code);\n    }\n\n    // To do: next major: don’t do spaces in resolve, but when compiling,\n    // like `markdown-rs`.\n    // Tabs don’t work, and virtual spaces don’t make sense.\n    if (code === 32) {\n      effects.enter('space');\n      effects.consume(code);\n      effects.exit('space');\n      return between;\n    }\n\n    // Closing fence? Could also be data.\n    if (code === 96) {\n      token = effects.enter(\"codeTextSequence\");\n      size = 0;\n      return sequenceClose(code);\n    }\n    if (markdownLineEnding(code)) {\n      effects.enter(\"lineEnding\");\n      effects.consume(code);\n      effects.exit(\"lineEnding\");\n      return between;\n    }\n\n    // Data.\n    effects.enter(\"codeTextData\");\n    return data(code);\n  }\n\n  /**\n   * In data.\n   *\n   * ```markdown\n   * > | `a`\n   *      ^\n   * ```\n   *\n   * @type {State}\n   */\n  function data(code) {\n    if (code === null || code === 32 || code === 96 || markdownLineEnding(code)) {\n      effects.exit(\"codeTextData\");\n      return between(code);\n    }\n    effects.consume(code);\n    return data;\n  }\n\n  /**\n   * In closing sequence.\n   *\n   * ```markdown\n   * > | `a`\n   *       ^\n   * ```\n   *\n   * @type {State}\n   */\n  function sequenceClose(code) {\n    // More.\n    if (code === 96) {\n      effects.consume(code);\n      size++;\n      return sequenceClose;\n    }\n\n    // Done!\n    if (size === sizeOpen) {\n      effects.exit(\"codeTextSequence\");\n      effects.exit(\"codeText\");\n      return ok(code);\n    }\n\n    // More or less accents: mark as data.\n    token.type = \"codeTextData\";\n    return data(code);\n  }\n}","/**\n * Some of the internal operations of micromark do lots of editing\n * operations on very large arrays. This runs into problems with two\n * properties of most circa-2020 JavaScript interpreters:\n *\n *  - Array-length modifications at the high end of an array (push/pop) are\n *    expected to be common and are implemented in (amortized) time\n *    proportional to the number of elements added or removed, whereas\n *    other operations (shift/unshift and splice) are much less efficient.\n *  - Function arguments are passed on the stack, so adding tens of thousands\n *    of elements to an array with `arr.push(...newElements)` will frequently\n *    cause stack overflows. (see <https://stackoverflow.com/questions/22123769/rangeerror-maximum-call-stack-size-exceeded-why>)\n *\n * SpliceBuffers are an implementation of gap buffers, which are a\n * generalization of the \"queue made of two stacks\" idea. The splice buffer\n * maintains a cursor, and moving the cursor has cost proportional to the\n * distance the cursor moves, but inserting, deleting, or splicing in\n * new information at the cursor is as efficient as the push/pop operation.\n * This allows for an efficient sequence of splices (or pushes, pops, shifts,\n * or unshifts) as long such edits happen at the same part of the array or\n * generally sweep through the array from the beginning to the end.\n *\n * The interface for splice buffers also supports large numbers of inputs by\n * passing a single array argument rather passing multiple arguments on the\n * function call stack.\n *\n * @template T\n *   Item type.\n */\nexport class SpliceBuffer {\n  /**\n   * @param {ReadonlyArray<T> | null | undefined} [initial]\n   *   Initial items (optional).\n   * @returns\n   *   Splice buffer.\n   */\n  constructor(initial) {\n    /** @type {Array<T>} */\n    this.left = initial ? [...initial] : [];\n    /** @type {Array<T>} */\n    this.right = [];\n  }\n\n  /**\n   * Array access;\n   * does not move the cursor.\n   *\n   * @param {number} index\n   *   Index.\n   * @return {T}\n   *   Item.\n   */\n  get(index) {\n    if (index < 0 || index >= this.left.length + this.right.length) {\n      throw new RangeError('Cannot access index `' + index + '` in a splice buffer of size `' + (this.left.length + this.right.length) + '`');\n    }\n    if (index < this.left.length) return this.left[index];\n    return this.right[this.right.length - index + this.left.length - 1];\n  }\n\n  /**\n   * The length of the splice buffer, one greater than the largest index in the\n   * array.\n   */\n  get length() {\n    return this.left.length + this.right.length;\n  }\n\n  /**\n   * Remove and return `list[0]`;\n   * moves the cursor to `0`.\n   *\n   * @returns {T | undefined}\n   *   Item, optional.\n   */\n  shift() {\n    this.setCursor(0);\n    return this.right.pop();\n  }\n\n  /**\n   * Slice the buffer to get an array;\n   * does not move the cursor.\n   *\n   * @param {number} start\n   *   Start.\n   * @param {number | null | undefined} [end]\n   *   End (optional).\n   * @returns {Array<T>}\n   *   Array of items.\n   */\n  slice(start, end) {\n    /** @type {number} */\n    const stop = end === null || end === undefined ? Number.POSITIVE_INFINITY : end;\n    if (stop < this.left.length) {\n      return this.left.slice(start, stop);\n    }\n    if (start > this.left.length) {\n      return this.right.slice(this.right.length - stop + this.left.length, this.right.length - start + this.left.length).reverse();\n    }\n    return this.left.slice(start).concat(this.right.slice(this.right.length - stop + this.left.length).reverse());\n  }\n\n  /**\n   * Mimics the behavior of Array.prototype.splice() except for the change of\n   * interface necessary to avoid segfaults when patching in very large arrays.\n   *\n   * This operation moves cursor is moved to `start` and results in the cursor\n   * placed after any inserted items.\n   *\n   * @param {number} start\n   *   Start;\n   *   zero-based index at which to start changing the array;\n   *   negative numbers count backwards from the end of the array and values\n   *   that are out-of bounds are clamped to the appropriate end of the array.\n   * @param {number | null | undefined} [deleteCount=0]\n   *   Delete count (default: `0`);\n   *   maximum number of elements to delete, starting from start.\n   * @param {Array<T> | null | undefined} [items=[]]\n   *   Items to include in place of the deleted items (default: `[]`).\n   * @return {Array<T>}\n   *   Any removed items.\n   */\n  splice(start, deleteCount, items) {\n    /** @type {number} */\n    const count = deleteCount || 0;\n    this.setCursor(Math.trunc(start));\n    const removed = this.right.splice(this.right.length - count, Number.POSITIVE_INFINITY);\n    if (items) chunkedPush(this.left, items);\n    return removed.reverse();\n  }\n\n  /**\n   * Remove and return the highest-numbered item in the array, so\n   * `list[list.length - 1]`;\n   * Moves the cursor to `length`.\n   *\n   * @returns {T | undefined}\n   *   Item, optional.\n   */\n  pop() {\n    this.setCursor(Number.POSITIVE_INFINITY);\n    return this.left.pop();\n  }\n\n  /**\n   * Inserts a single item to the high-numbered side of the array;\n   * moves the cursor to `length`.\n   *\n   * @param {T} item\n   *   Item.\n   * @returns {undefined}\n   *   Nothing.\n   */\n  push(item) {\n    this.setCursor(Number.POSITIVE_INFINITY);\n    this.left.push(item);\n  }\n\n  /**\n   * Inserts many items to the high-numbered side of the array.\n   * Moves the cursor to `length`.\n   *\n   * @param {Array<T>} items\n   *   Items.\n   * @returns {undefined}\n   *   Nothing.\n   */\n  pushMany(items) {\n    this.setCursor(Number.POSITIVE_INFINITY);\n    chunkedPush(this.left, items);\n  }\n\n  /**\n   * Inserts a single item to the low-numbered side of the array;\n   * Moves the cursor to `0`.\n   *\n   * @param {T} item\n   *   Item.\n   * @returns {undefined}\n   *   Nothing.\n   */\n  unshift(item) {\n    this.setCursor(0);\n    this.right.push(item);\n  }\n\n  /**\n   * Inserts many items to the low-numbered side of the array;\n   * moves the cursor to `0`.\n   *\n   * @param {Array<T>} items\n   *   Items.\n   * @returns {undefined}\n   *   Nothing.\n   */\n  unshiftMany(items) {\n    this.setCursor(0);\n    chunkedPush(this.right, items.reverse());\n  }\n\n  /**\n   * Move the cursor to a specific position in the array. Requires\n   * time proportional to the distance moved.\n   *\n   * If `n < 0`, the cursor will end up at the beginning.\n   * If `n > length`, the cursor will end up at the end.\n   *\n   * @param {number} n\n   *   Position.\n   * @return {undefined}\n   *   Nothing.\n   */\n  setCursor(n) {\n    if (n === this.left.length || n > this.left.length && this.right.length === 0 || n < 0 && this.left.length === 0) return;\n    if (n < this.left.length) {\n      // Move cursor to the this.left\n      const removed = this.left.splice(n, Number.POSITIVE_INFINITY);\n      chunkedPush(this.right, removed.reverse());\n    } else {\n      // Move cursor to the this.right\n      const removed = this.right.splice(this.left.length + this.right.length - n, Number.POSITIVE_INFINITY);\n      chunkedPush(this.left, removed.reverse());\n    }\n  }\n}\n\n/**\n * Avoid stack overflow by pushing items onto the stack in segments\n *\n * @template T\n *   Item type.\n * @param {Array<T>} list\n *   List to inject into.\n * @param {ReadonlyArray<T>} right\n *   Items to inject.\n * @return {undefined}\n *   Nothing.\n */\nfunction chunkedPush(list, right) {\n  /** @type {number} */\n  let chunkStart = 0;\n  if (right.length < 10000) {\n    list.push(...right);\n  } else {\n    while (chunkStart < right.length) {\n      list.push(...right.slice(chunkStart, chunkStart + 10000));\n      chunkStart += 10000;\n    }\n  }\n}","/**\n * @import {Chunk, Event, Token} from 'micromark-util-types'\n */\n\nimport { splice } from 'micromark-util-chunked';\nimport { SpliceBuffer } from './lib/splice-buffer.js';\n\n// Hidden API exposed for testing.\nexport { SpliceBuffer } from './lib/splice-buffer.js';\n\n/**\n * Tokenize subcontent.\n *\n * @param {Array<Event>} eventsArray\n *   List of events.\n * @returns {boolean}\n *   Whether subtokens were found.\n */\n// eslint-disable-next-line complexity\nexport function subtokenize(eventsArray) {\n  /** @type {Record<string, number>} */\n  const jumps = {};\n  let index = -1;\n  /** @type {Event} */\n  let event;\n  /** @type {number | undefined} */\n  let lineIndex;\n  /** @type {number} */\n  let otherIndex;\n  /** @type {Event} */\n  let otherEvent;\n  /** @type {Array<Event>} */\n  let parameters;\n  /** @type {Array<Event>} */\n  let subevents;\n  /** @type {boolean | undefined} */\n  let more;\n  const events = new SpliceBuffer(eventsArray);\n  while (++index < events.length) {\n    while (index in jumps) {\n      index = jumps[index];\n    }\n    event = events.get(index);\n\n    // Add a hook for the GFM tasklist extension, which needs to know if text\n    // is in the first content of a list item.\n    if (index && event[1].type === \"chunkFlow\" && events.get(index - 1)[1].type === \"listItemPrefix\") {\n      subevents = event[1]._tokenizer.events;\n      otherIndex = 0;\n      if (otherIndex < subevents.length && subevents[otherIndex][1].type === \"lineEndingBlank\") {\n        otherIndex += 2;\n      }\n      if (otherIndex < subevents.length && subevents[otherIndex][1].type === \"content\") {\n        while (++otherIndex < subevents.length) {\n          if (subevents[otherIndex][1].type === \"content\") {\n            break;\n          }\n          if (subevents[otherIndex][1].type === \"chunkText\") {\n            subevents[otherIndex][1]._isInFirstContentOfListItem = true;\n            otherIndex++;\n          }\n        }\n      }\n    }\n\n    // Enter.\n    if (event[0] === 'enter') {\n      if (event[1].contentType) {\n        Object.assign(jumps, subcontent(events, index));\n        index = jumps[index];\n        more = true;\n      }\n    }\n    // Exit.\n    else if (event[1]._container) {\n      otherIndex = index;\n      lineIndex = undefined;\n      while (otherIndex--) {\n        otherEvent = events.get(otherIndex);\n        if (otherEvent[1].type === \"lineEnding\" || otherEvent[1].type === \"lineEndingBlank\") {\n          if (otherEvent[0] === 'enter') {\n            if (lineIndex) {\n              events.get(lineIndex)[1].type = \"lineEndingBlank\";\n            }\n            otherEvent[1].type = \"lineEnding\";\n            lineIndex = otherIndex;\n          }\n        } else if (otherEvent[1].type === \"linePrefix\" || otherEvent[1].type === \"listItemIndent\") {\n          // Move past.\n        } else {\n          break;\n        }\n      }\n      if (lineIndex) {\n        // Fix position.\n        event[1].end = {\n          ...events.get(lineIndex)[1].start\n        };\n\n        // Switch container exit w/ line endings.\n        parameters = events.slice(lineIndex, index);\n        parameters.unshift(event);\n        events.splice(lineIndex, index - lineIndex + 1, parameters);\n      }\n    }\n  }\n\n  // The changes to the `events` buffer must be copied back into the eventsArray\n  splice(eventsArray, 0, Number.POSITIVE_INFINITY, events.slice(0));\n  return !more;\n}\n\n/**\n * Tokenize embedded tokens.\n *\n * @param {SpliceBuffer<Event>} events\n *   Events.\n * @param {number} eventIndex\n *   Index.\n * @returns {Record<string, number>}\n *   Gaps.\n */\nfunction subcontent(events, eventIndex) {\n  const token = events.get(eventIndex)[1];\n  const context = events.get(eventIndex)[2];\n  let startPosition = eventIndex - 1;\n  /** @type {Array<number>} */\n  const startPositions = [];\n  let tokenizer = token._tokenizer;\n  if (!tokenizer) {\n    tokenizer = context.parser[token.contentType](token.start);\n    if (token._contentTypeTextTrailing) {\n      tokenizer._contentTypeTextTrailing = true;\n    }\n  }\n  const childEvents = tokenizer.events;\n  /** @type {Array<[number, number]>} */\n  const jumps = [];\n  /** @type {Record<string, number>} */\n  const gaps = {};\n  /** @type {Array<Chunk>} */\n  let stream;\n  /** @type {Token | undefined} */\n  let previous;\n  let index = -1;\n  /** @type {Token | undefined} */\n  let current = token;\n  let adjust = 0;\n  let start = 0;\n  const breaks = [start];\n\n  // Loop forward through the linked tokens to pass them in order to the\n  // subtokenizer.\n  while (current) {\n    // Find the position of the event for this token.\n    while (events.get(++startPosition)[1] !== current) {\n      // Empty.\n    }\n    startPositions.push(startPosition);\n    if (!current._tokenizer) {\n      stream = context.sliceStream(current);\n      if (!current.next) {\n        stream.push(null);\n      }\n      if (previous) {\n        tokenizer.defineSkip(current.start);\n      }\n      if (current._isInFirstContentOfListItem) {\n        tokenizer._gfmTasklistFirstContentOfListItem = true;\n      }\n      tokenizer.write(stream);\n      if (current._isInFirstContentOfListItem) {\n        tokenizer._gfmTasklistFirstContentOfListItem = undefined;\n      }\n    }\n\n    // Unravel the next token.\n    previous = current;\n    current = current.next;\n  }\n\n  // Now, loop back through all events (and linked tokens), to figure out which\n  // parts belong where.\n  current = token;\n  while (++index < childEvents.length) {\n    if (\n    // Find a void token that includes a break.\n    childEvents[index][0] === 'exit' && childEvents[index - 1][0] === 'enter' && childEvents[index][1].type === childEvents[index - 1][1].type && childEvents[index][1].start.line !== childEvents[index][1].end.line) {\n      start = index + 1;\n      breaks.push(start);\n      // Help GC.\n      current._tokenizer = undefined;\n      current.previous = undefined;\n      current = current.next;\n    }\n  }\n\n  // Help GC.\n  tokenizer.events = [];\n\n  // If there’s one more token (which is the cases for lines that end in an\n  // EOF), that’s perfect: the last point we found starts it.\n  // If there isn’t then make sure any remaining content is added to it.\n  if (current) {\n    // Help GC.\n    current._tokenizer = undefined;\n    current.previous = undefined;\n  } else {\n    breaks.pop();\n  }\n\n  // Now splice the events from the subtokenizer into the current events,\n  // moving back to front so that splice indices aren’t affected.\n  index = breaks.length;\n  while (index--) {\n    const slice = childEvents.slice(breaks[index], breaks[index + 1]);\n    const start = startPositions.pop();\n    jumps.push([start, start + slice.length - 1]);\n    events.splice(start, 2, slice);\n  }\n  jumps.reverse();\n  index = -1;\n  while (++index < jumps.length) {\n    gaps[adjust + jumps[index][0]] = adjust + jumps[index][1];\n    adjust += jumps[index][1] - jumps[index][0] - 1;\n  }\n  return gaps;\n}","/**\n * @import {\n *   Construct,\n *   Resolver,\n *   State,\n *   TokenizeContext,\n *   Tokenizer,\n *   Token\n * } from 'micromark-util-types'\n */\n\nimport { factorySpace } from 'micromark-factory-space';\nimport { markdownLineEnding } from 'micromark-util-character';\nimport { subtokenize } from 'micromark-util-subtokenize';\n/**\n * No name because it must not be turned off.\n * @type {Construct}\n */\nexport const content = {\n  resolve: resolveContent,\n  tokenize: tokenizeContent\n};\n\n/** @type {Construct} */\nconst continuationConstruct = {\n  partial: true,\n  tokenize: tokenizeContinuation\n};\n\n/**\n * Content is transparent: it’s parsed right now. That way, definitions are also\n * parsed right now: before text in paragraphs (specifically, media) are parsed.\n *\n * @type {Resolver}\n */\nfunction resolveContent(events) {\n  subtokenize(events);\n  return events;\n}\n\n/**\n * @this {TokenizeContext}\n *   Context.\n * @type {Tokenizer}\n */\nfunction tokenizeContent(effects, ok) {\n  /** @type {Token | undefined} */\n  let previous;\n  return chunkStart;\n\n  /**\n   * Before a content chunk.\n   *\n   * ```markdown\n   * > | abc\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function chunkStart(code) {\n    effects.enter(\"content\");\n    previous = effects.enter(\"chunkContent\", {\n      contentType: \"content\"\n    });\n    return chunkInside(code);\n  }\n\n  /**\n   * In a content chunk.\n   *\n   * ```markdown\n   * > | abc\n   *     ^^^\n   * ```\n   *\n   * @type {State}\n   */\n  function chunkInside(code) {\n    if (code === null) {\n      return contentEnd(code);\n    }\n\n    // To do: in `markdown-rs`, each line is parsed on its own, and everything\n    // is stitched together resolving.\n    if (markdownLineEnding(code)) {\n      return effects.check(continuationConstruct, contentContinue, contentEnd)(code);\n    }\n\n    // Data.\n    effects.consume(code);\n    return chunkInside;\n  }\n\n  /**\n   *\n   *\n   * @type {State}\n   */\n  function contentEnd(code) {\n    effects.exit(\"chunkContent\");\n    effects.exit(\"content\");\n    return ok(code);\n  }\n\n  /**\n   *\n   *\n   * @type {State}\n   */\n  function contentContinue(code) {\n    effects.consume(code);\n    effects.exit(\"chunkContent\");\n    previous.next = effects.enter(\"chunkContent\", {\n      contentType: \"content\",\n      previous\n    });\n    previous = previous.next;\n    return chunkInside;\n  }\n}\n\n/**\n * @this {TokenizeContext}\n *   Context.\n * @type {Tokenizer}\n */\nfunction tokenizeContinuation(effects, ok, nok) {\n  const self = this;\n  return startLookahead;\n\n  /**\n   *\n   *\n   * @type {State}\n   */\n  function startLookahead(code) {\n    effects.exit(\"chunkContent\");\n    effects.enter(\"lineEnding\");\n    effects.consume(code);\n    effects.exit(\"lineEnding\");\n    return factorySpace(effects, prefixed, \"linePrefix\");\n  }\n\n  /**\n   *\n   *\n   * @type {State}\n   */\n  function prefixed(code) {\n    if (code === null || markdownLineEnding(code)) {\n      return nok(code);\n    }\n\n    // Always populated by defaults.\n\n    const tail = self.events[self.events.length - 1];\n    if (!self.parser.constructs.disable.null.includes('codeIndented') && tail && tail[1].type === \"linePrefix\" && tail[2].sliceSerialize(tail[1], true).length >= 4) {\n      return ok(code);\n    }\n    return effects.interrupt(self.parser.constructs.flow, nok, ok)(code);\n  }\n}","/**\n * @import {Effects, State, TokenType} from 'micromark-util-types'\n */\n\nimport { asciiControl, markdownLineEndingOrSpace, markdownLineEnding } from 'micromark-util-character';\n/**\n * Parse destinations.\n *\n * ###### Examples\n *\n * ```markdown\n * <a>\n * <a\\>b>\n * <a b>\n * <a)>\n * a\n * a\\)b\n * a(b)c\n * a(b)\n * ```\n *\n * @param {Effects} effects\n *   Context.\n * @param {State} ok\n *   State switched to when successful.\n * @param {State} nok\n *   State switched to when unsuccessful.\n * @param {TokenType} type\n *   Type for whole (`<a>` or `b`).\n * @param {TokenType} literalType\n *   Type when enclosed (`<a>`).\n * @param {TokenType} literalMarkerType\n *   Type for enclosing (`<` and `>`).\n * @param {TokenType} rawType\n *   Type when not enclosed (`b`).\n * @param {TokenType} stringType\n *   Type for the value (`a` or `b`).\n * @param {number | undefined} [max=Infinity]\n *   Depth of nested parens (inclusive).\n * @returns {State}\n *   Start state.\n */\nexport function factoryDestination(effects, ok, nok, type, literalType, literalMarkerType, rawType, stringType, max) {\n  const limit = max || Number.POSITIVE_INFINITY;\n  let balance = 0;\n  return start;\n\n  /**\n   * Start of destination.\n   *\n   * ```markdown\n   * > | <aa>\n   *     ^\n   * > | aa\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    if (code === 60) {\n      effects.enter(type);\n      effects.enter(literalType);\n      effects.enter(literalMarkerType);\n      effects.consume(code);\n      effects.exit(literalMarkerType);\n      return enclosedBefore;\n    }\n\n    // ASCII control, space, closing paren.\n    if (code === null || code === 32 || code === 41 || asciiControl(code)) {\n      return nok(code);\n    }\n    effects.enter(type);\n    effects.enter(rawType);\n    effects.enter(stringType);\n    effects.enter(\"chunkString\", {\n      contentType: \"string\"\n    });\n    return raw(code);\n  }\n\n  /**\n   * After `<`, at an enclosed destination.\n   *\n   * ```markdown\n   * > | <aa>\n   *      ^\n   * ```\n   *\n   * @type {State}\n   */\n  function enclosedBefore(code) {\n    if (code === 62) {\n      effects.enter(literalMarkerType);\n      effects.consume(code);\n      effects.exit(literalMarkerType);\n      effects.exit(literalType);\n      effects.exit(type);\n      return ok;\n    }\n    effects.enter(stringType);\n    effects.enter(\"chunkString\", {\n      contentType: \"string\"\n    });\n    return enclosed(code);\n  }\n\n  /**\n   * In enclosed destination.\n   *\n   * ```markdown\n   * > | <aa>\n   *      ^\n   * ```\n   *\n   * @type {State}\n   */\n  function enclosed(code) {\n    if (code === 62) {\n      effects.exit(\"chunkString\");\n      effects.exit(stringType);\n      return enclosedBefore(code);\n    }\n    if (code === null || code === 60 || markdownLineEnding(code)) {\n      return nok(code);\n    }\n    effects.consume(code);\n    return code === 92 ? enclosedEscape : enclosed;\n  }\n\n  /**\n   * After `\\`, at a special character.\n   *\n   * ```markdown\n   * > | <a\\*a>\n   *        ^\n   * ```\n   *\n   * @type {State}\n   */\n  function enclosedEscape(code) {\n    if (code === 60 || code === 62 || code === 92) {\n      effects.consume(code);\n      return enclosed;\n    }\n    return enclosed(code);\n  }\n\n  /**\n   * In raw destination.\n   *\n   * ```markdown\n   * > | aa\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function raw(code) {\n    if (!balance && (code === null || code === 41 || markdownLineEndingOrSpace(code))) {\n      effects.exit(\"chunkString\");\n      effects.exit(stringType);\n      effects.exit(rawType);\n      effects.exit(type);\n      return ok(code);\n    }\n    if (balance < limit && code === 40) {\n      effects.consume(code);\n      balance++;\n      return raw;\n    }\n    if (code === 41) {\n      effects.consume(code);\n      balance--;\n      return raw;\n    }\n\n    // ASCII control (but *not* `\\0`) and space and `(`.\n    // Note: in `markdown-rs`, `\\0` exists in codes, in `micromark-js` it\n    // doesn’t.\n    if (code === null || code === 32 || code === 40 || asciiControl(code)) {\n      return nok(code);\n    }\n    effects.consume(code);\n    return code === 92 ? rawEscape : raw;\n  }\n\n  /**\n   * After `\\`, at special character.\n   *\n   * ```markdown\n   * > | a\\*a\n   *       ^\n   * ```\n   *\n   * @type {State}\n   */\n  function rawEscape(code) {\n    if (code === 40 || code === 41 || code === 92) {\n      effects.consume(code);\n      return raw;\n    }\n    return raw(code);\n  }\n}","/**\n * @import {\n *   Effects,\n *   State,\n *   TokenizeContext,\n *   TokenType\n * } from 'micromark-util-types'\n */\n\nimport { markdownLineEnding, markdownSpace } from 'micromark-util-character';\n/**\n * Parse labels.\n *\n * > 👉 **Note**: labels in markdown are capped at 999 characters in the string.\n *\n * ###### Examples\n *\n * ```markdown\n * [a]\n * [a\n * b]\n * [a\\]b]\n * ```\n *\n * @this {TokenizeContext}\n *   Tokenize context.\n * @param {Effects} effects\n *   Context.\n * @param {State} ok\n *   State switched to when successful.\n * @param {State} nok\n *   State switched to when unsuccessful.\n * @param {TokenType} type\n *   Type of the whole label (`[a]`).\n * @param {TokenType} markerType\n *   Type for the markers (`[` and `]`).\n * @param {TokenType} stringType\n *   Type for the identifier (`a`).\n * @returns {State}\n *   Start state.\n */\nexport function factoryLabel(effects, ok, nok, type, markerType, stringType) {\n  const self = this;\n  let size = 0;\n  /** @type {boolean} */\n  let seen;\n  return start;\n\n  /**\n   * Start of label.\n   *\n   * ```markdown\n   * > | [a]\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    effects.enter(type);\n    effects.enter(markerType);\n    effects.consume(code);\n    effects.exit(markerType);\n    effects.enter(stringType);\n    return atBreak;\n  }\n\n  /**\n   * In label, at something, before something else.\n   *\n   * ```markdown\n   * > | [a]\n   *      ^\n   * ```\n   *\n   * @type {State}\n   */\n  function atBreak(code) {\n    if (size > 999 || code === null || code === 91 || code === 93 && !seen ||\n    // To do: remove in the future once we’ve switched from\n    // `micromark-extension-footnote` to `micromark-extension-gfm-footnote`,\n    // which doesn’t need this.\n    // Hidden footnotes hook.\n    /* c8 ignore next 3 */\n    code === 94 && !size && '_hiddenFootnoteSupport' in self.parser.constructs) {\n      return nok(code);\n    }\n    if (code === 93) {\n      effects.exit(stringType);\n      effects.enter(markerType);\n      effects.consume(code);\n      effects.exit(markerType);\n      effects.exit(type);\n      return ok;\n    }\n\n    // To do: indent? Link chunks and EOLs together?\n    if (markdownLineEnding(code)) {\n      effects.enter(\"lineEnding\");\n      effects.consume(code);\n      effects.exit(\"lineEnding\");\n      return atBreak;\n    }\n    effects.enter(\"chunkString\", {\n      contentType: \"string\"\n    });\n    return labelInside(code);\n  }\n\n  /**\n   * In label, in text.\n   *\n   * ```markdown\n   * > | [a]\n   *      ^\n   * ```\n   *\n   * @type {State}\n   */\n  function labelInside(code) {\n    if (code === null || code === 91 || code === 93 || markdownLineEnding(code) || size++ > 999) {\n      effects.exit(\"chunkString\");\n      return atBreak(code);\n    }\n    effects.consume(code);\n    if (!seen) seen = !markdownSpace(code);\n    return code === 92 ? labelEscape : labelInside;\n  }\n\n  /**\n   * After `\\`, at a special character.\n   *\n   * ```markdown\n   * > | [a\\*a]\n   *        ^\n   * ```\n   *\n   * @type {State}\n   */\n  function labelEscape(code) {\n    if (code === 91 || code === 92 || code === 93) {\n      effects.consume(code);\n      size++;\n      return labelInside;\n    }\n    return labelInside(code);\n  }\n}","/**\n * @import {\n *   Code,\n *   Effects,\n *   State,\n *   TokenType\n * } from 'micromark-util-types'\n */\n\nimport { factorySpace } from 'micromark-factory-space';\nimport { markdownLineEnding } from 'micromark-util-character';\n/**\n * Parse titles.\n *\n * ###### Examples\n *\n * ```markdown\n * \"a\"\n * 'b'\n * (c)\n * \"a\n * b\"\n * 'a\n *     b'\n * (a\\)b)\n * ```\n *\n * @param {Effects} effects\n *   Context.\n * @param {State} ok\n *   State switched to when successful.\n * @param {State} nok\n *   State switched to when unsuccessful.\n * @param {TokenType} type\n *   Type of the whole title (`\"a\"`, `'b'`, `(c)`).\n * @param {TokenType} markerType\n *   Type for the markers (`\"`, `'`, `(`, and `)`).\n * @param {TokenType} stringType\n *   Type for the value (`a`).\n * @returns {State}\n *   Start state.\n */\nexport function factoryTitle(effects, ok, nok, type, markerType, stringType) {\n  /** @type {NonNullable<Code>} */\n  let marker;\n  return start;\n\n  /**\n   * Start of title.\n   *\n   * ```markdown\n   * > | \"a\"\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    if (code === 34 || code === 39 || code === 40) {\n      effects.enter(type);\n      effects.enter(markerType);\n      effects.consume(code);\n      effects.exit(markerType);\n      marker = code === 40 ? 41 : code;\n      return begin;\n    }\n    return nok(code);\n  }\n\n  /**\n   * After opening marker.\n   *\n   * This is also used at the closing marker.\n   *\n   * ```markdown\n   * > | \"a\"\n   *      ^\n   * ```\n   *\n   * @type {State}\n   */\n  function begin(code) {\n    if (code === marker) {\n      effects.enter(markerType);\n      effects.consume(code);\n      effects.exit(markerType);\n      effects.exit(type);\n      return ok;\n    }\n    effects.enter(stringType);\n    return atBreak(code);\n  }\n\n  /**\n   * At something, before something else.\n   *\n   * ```markdown\n   * > | \"a\"\n   *      ^\n   * ```\n   *\n   * @type {State}\n   */\n  function atBreak(code) {\n    if (code === marker) {\n      effects.exit(stringType);\n      return begin(marker);\n    }\n    if (code === null) {\n      return nok(code);\n    }\n\n    // Note: blank lines can’t exist in content.\n    if (markdownLineEnding(code)) {\n      // To do: use `space_or_tab_eol_with_options`, connect.\n      effects.enter(\"lineEnding\");\n      effects.consume(code);\n      effects.exit(\"lineEnding\");\n      return factorySpace(effects, atBreak, \"linePrefix\");\n    }\n    effects.enter(\"chunkString\", {\n      contentType: \"string\"\n    });\n    return inside(code);\n  }\n\n  /**\n   *\n   *\n   * @type {State}\n   */\n  function inside(code) {\n    if (code === marker || code === null || markdownLineEnding(code)) {\n      effects.exit(\"chunkString\");\n      return atBreak(code);\n    }\n    effects.consume(code);\n    return code === 92 ? escape : inside;\n  }\n\n  /**\n   * After `\\`, at a special character.\n   *\n   * ```markdown\n   * > | \"a\\*b\"\n   *      ^\n   * ```\n   *\n   * @type {State}\n   */\n  function escape(code) {\n    if (code === marker || code === 92) {\n      effects.consume(code);\n      return inside;\n    }\n    return inside(code);\n  }\n}","/**\n * @import {Effects, State} from 'micromark-util-types'\n */\n\nimport { factorySpace } from 'micromark-factory-space';\nimport { markdownLineEnding, markdownSpace } from 'micromark-util-character';\n/**\n * Parse spaces and tabs.\n *\n * There is no `nok` parameter:\n *\n * *   line endings or spaces in markdown are often optional, in which case this\n *     factory can be used and `ok` will be switched to whether spaces were found\n *     or not\n * *   one line ending or space can be detected with\n *     `markdownLineEndingOrSpace(code)` right before using `factoryWhitespace`\n *\n * @param {Effects} effects\n *   Context.\n * @param {State} ok\n *   State switched to when successful.\n * @returns {State}\n *   Start state.\n */\nexport function factoryWhitespace(effects, ok) {\n  /** @type {boolean} */\n  let seen;\n  return start;\n\n  /** @type {State} */\n  function start(code) {\n    if (markdownLineEnding(code)) {\n      effects.enter(\"lineEnding\");\n      effects.consume(code);\n      effects.exit(\"lineEnding\");\n      seen = true;\n      return start;\n    }\n    if (markdownSpace(code)) {\n      return factorySpace(effects, start, seen ? \"linePrefix\" : \"lineSuffix\")(code);\n    }\n    return ok(code);\n  }\n}","/**\n * @import {\n *   Construct,\n *   State,\n *   TokenizeContext,\n *   Tokenizer\n * } from 'micromark-util-types'\n */\n\nimport { factoryDestination } from 'micromark-factory-destination';\nimport { factoryLabel } from 'micromark-factory-label';\nimport { factorySpace } from 'micromark-factory-space';\nimport { factoryTitle } from 'micromark-factory-title';\nimport { factoryWhitespace } from 'micromark-factory-whitespace';\nimport { markdownLineEndingOrSpace, markdownLineEnding, markdownSpace } from 'micromark-util-character';\nimport { normalizeIdentifier } from 'micromark-util-normalize-identifier';\n/** @type {Construct} */\nexport const definition = {\n  name: 'definition',\n  tokenize: tokenizeDefinition\n};\n\n/** @type {Construct} */\nconst titleBefore = {\n  partial: true,\n  tokenize: tokenizeTitleBefore\n};\n\n/**\n * @this {TokenizeContext}\n *   Context.\n * @type {Tokenizer}\n */\nfunction tokenizeDefinition(effects, ok, nok) {\n  const self = this;\n  /** @type {string} */\n  let identifier;\n  return start;\n\n  /**\n   * At start of a definition.\n   *\n   * ```markdown\n   * > | [a]: b \"c\"\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    // Do not interrupt paragraphs (but do follow definitions).\n    // To do: do `interrupt` the way `markdown-rs` does.\n    // To do: parse whitespace the way `markdown-rs` does.\n    effects.enter(\"definition\");\n    return before(code);\n  }\n\n  /**\n   * After optional whitespace, at `[`.\n   *\n   * ```markdown\n   * > | [a]: b \"c\"\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function before(code) {\n    // To do: parse whitespace the way `markdown-rs` does.\n\n    return factoryLabel.call(self, effects, labelAfter,\n    // Note: we don’t need to reset the way `markdown-rs` does.\n    nok, \"definitionLabel\", \"definitionLabelMarker\", \"definitionLabelString\")(code);\n  }\n\n  /**\n   * After label.\n   *\n   * ```markdown\n   * > | [a]: b \"c\"\n   *        ^\n   * ```\n   *\n   * @type {State}\n   */\n  function labelAfter(code) {\n    identifier = normalizeIdentifier(self.sliceSerialize(self.events[self.events.length - 1][1]).slice(1, -1));\n    if (code === 58) {\n      effects.enter(\"definitionMarker\");\n      effects.consume(code);\n      effects.exit(\"definitionMarker\");\n      return markerAfter;\n    }\n    return nok(code);\n  }\n\n  /**\n   * After marker.\n   *\n   * ```markdown\n   * > | [a]: b \"c\"\n   *         ^\n   * ```\n   *\n   * @type {State}\n   */\n  function markerAfter(code) {\n    // Note: whitespace is optional.\n    return markdownLineEndingOrSpace(code) ? factoryWhitespace(effects, destinationBefore)(code) : destinationBefore(code);\n  }\n\n  /**\n   * Before destination.\n   *\n   * ```markdown\n   * > | [a]: b \"c\"\n   *          ^\n   * ```\n   *\n   * @type {State}\n   */\n  function destinationBefore(code) {\n    return factoryDestination(effects, destinationAfter,\n    // Note: we don’t need to reset the way `markdown-rs` does.\n    nok, \"definitionDestination\", \"definitionDestinationLiteral\", \"definitionDestinationLiteralMarker\", \"definitionDestinationRaw\", \"definitionDestinationString\")(code);\n  }\n\n  /**\n   * After destination.\n   *\n   * ```markdown\n   * > | [a]: b \"c\"\n   *           ^\n   * ```\n   *\n   * @type {State}\n   */\n  function destinationAfter(code) {\n    return effects.attempt(titleBefore, after, after)(code);\n  }\n\n  /**\n   * After definition.\n   *\n   * ```markdown\n   * > | [a]: b\n   *           ^\n   * > | [a]: b \"c\"\n   *               ^\n   * ```\n   *\n   * @type {State}\n   */\n  function after(code) {\n    return markdownSpace(code) ? factorySpace(effects, afterWhitespace, \"whitespace\")(code) : afterWhitespace(code);\n  }\n\n  /**\n   * After definition, after optional whitespace.\n   *\n   * ```markdown\n   * > | [a]: b\n   *           ^\n   * > | [a]: b \"c\"\n   *               ^\n   * ```\n   *\n   * @type {State}\n   */\n  function afterWhitespace(code) {\n    if (code === null || markdownLineEnding(code)) {\n      effects.exit(\"definition\");\n\n      // Note: we don’t care about uniqueness.\n      // It’s likely that that doesn’t happen very frequently.\n      // It is more likely that it wastes precious time.\n      self.parser.defined.push(identifier);\n\n      // To do: `markdown-rs` interrupt.\n      // // You’d be interrupting.\n      // tokenizer.interrupt = true\n      return ok(code);\n    }\n    return nok(code);\n  }\n}\n\n/**\n * @this {TokenizeContext}\n *   Context.\n * @type {Tokenizer}\n */\nfunction tokenizeTitleBefore(effects, ok, nok) {\n  return titleBefore;\n\n  /**\n   * After destination, at whitespace.\n   *\n   * ```markdown\n   * > | [a]: b\n   *           ^\n   * > | [a]: b \"c\"\n   *           ^\n   * ```\n   *\n   * @type {State}\n   */\n  function titleBefore(code) {\n    return markdownLineEndingOrSpace(code) ? factoryWhitespace(effects, beforeMarker)(code) : nok(code);\n  }\n\n  /**\n   * At title.\n   *\n   * ```markdown\n   *   | [a]: b\n   * > | \"c\"\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function beforeMarker(code) {\n    return factoryTitle(effects, titleAfter, nok, \"definitionTitle\", \"definitionTitleMarker\", \"definitionTitleString\")(code);\n  }\n\n  /**\n   * After title.\n   *\n   * ```markdown\n   * > | [a]: b \"c\"\n   *               ^\n   * ```\n   *\n   * @type {State}\n   */\n  function titleAfter(code) {\n    return markdownSpace(code) ? factorySpace(effects, titleAfterOptionalWhitespace, \"whitespace\")(code) : titleAfterOptionalWhitespace(code);\n  }\n\n  /**\n   * After title, after optional whitespace.\n   *\n   * ```markdown\n   * > | [a]: b \"c\"\n   *               ^\n   * ```\n   *\n   * @type {State}\n   */\n  function titleAfterOptionalWhitespace(code) {\n    return code === null || markdownLineEnding(code) ? ok(code) : nok(code);\n  }\n}","/**\n * @import {\n *   Construct,\n *   State,\n *   TokenizeContext,\n *   Tokenizer\n * } from 'micromark-util-types'\n */\n\nimport { markdownLineEnding } from 'micromark-util-character';\n/** @type {Construct} */\nexport const hardBreakEscape = {\n  name: 'hardBreakEscape',\n  tokenize: tokenizeHardBreakEscape\n};\n\n/**\n * @this {TokenizeContext}\n *   Context.\n * @type {Tokenizer}\n */\nfunction tokenizeHardBreakEscape(effects, ok, nok) {\n  return start;\n\n  /**\n   * Start of a hard break (escape).\n   *\n   * ```markdown\n   * > | a\\\n   *      ^\n   *   | b\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    effects.enter(\"hardBreakEscape\");\n    effects.consume(code);\n    return after;\n  }\n\n  /**\n   * After `\\`, at eol.\n   *\n   * ```markdown\n   * > | a\\\n   *       ^\n   *   | b\n   * ```\n   *\n   *  @type {State}\n   */\n  function after(code) {\n    if (markdownLineEnding(code)) {\n      effects.exit(\"hardBreakEscape\");\n      return ok(code);\n    }\n    return nok(code);\n  }\n}","/**\n * @import {\n *   Construct,\n *   Resolver,\n *   State,\n *   TokenizeContext,\n *   Tokenizer,\n *   Token\n * } from 'micromark-util-types'\n */\n\nimport { factorySpace } from 'micromark-factory-space';\nimport { markdownLineEndingOrSpace, markdownLineEnding, markdownSpace } from 'micromark-util-character';\nimport { splice } from 'micromark-util-chunked';\n/** @type {Construct} */\nexport const headingAtx = {\n  name: 'headingAtx',\n  resolve: resolveHeadingAtx,\n  tokenize: tokenizeHeadingAtx\n};\n\n/** @type {Resolver} */\nfunction resolveHeadingAtx(events, context) {\n  let contentEnd = events.length - 2;\n  let contentStart = 3;\n  /** @type {Token} */\n  let content;\n  /** @type {Token} */\n  let text;\n\n  // Prefix whitespace, part of the opening.\n  if (events[contentStart][1].type === \"whitespace\") {\n    contentStart += 2;\n  }\n\n  // Suffix whitespace, part of the closing.\n  if (contentEnd - 2 > contentStart && events[contentEnd][1].type === \"whitespace\") {\n    contentEnd -= 2;\n  }\n  if (events[contentEnd][1].type === \"atxHeadingSequence\" && (contentStart === contentEnd - 1 || contentEnd - 4 > contentStart && events[contentEnd - 2][1].type === \"whitespace\")) {\n    contentEnd -= contentStart + 1 === contentEnd ? 2 : 4;\n  }\n  if (contentEnd > contentStart) {\n    content = {\n      type: \"atxHeadingText\",\n      start: events[contentStart][1].start,\n      end: events[contentEnd][1].end\n    };\n    text = {\n      type: \"chunkText\",\n      start: events[contentStart][1].start,\n      end: events[contentEnd][1].end,\n      contentType: \"text\"\n    };\n    splice(events, contentStart, contentEnd - contentStart + 1, [['enter', content, context], ['enter', text, context], ['exit', text, context], ['exit', content, context]]);\n  }\n  return events;\n}\n\n/**\n * @this {TokenizeContext}\n *   Context.\n * @type {Tokenizer}\n */\nfunction tokenizeHeadingAtx(effects, ok, nok) {\n  let size = 0;\n  return start;\n\n  /**\n   * Start of a heading (atx).\n   *\n   * ```markdown\n   * > | ## aa\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    // To do: parse indent like `markdown-rs`.\n    effects.enter(\"atxHeading\");\n    return before(code);\n  }\n\n  /**\n   * After optional whitespace, at `#`.\n   *\n   * ```markdown\n   * > | ## aa\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function before(code) {\n    effects.enter(\"atxHeadingSequence\");\n    return sequenceOpen(code);\n  }\n\n  /**\n   * In opening sequence.\n   *\n   * ```markdown\n   * > | ## aa\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function sequenceOpen(code) {\n    if (code === 35 && size++ < 6) {\n      effects.consume(code);\n      return sequenceOpen;\n    }\n\n    // Always at least one `#`.\n    if (code === null || markdownLineEndingOrSpace(code)) {\n      effects.exit(\"atxHeadingSequence\");\n      return atBreak(code);\n    }\n    return nok(code);\n  }\n\n  /**\n   * After something, before something else.\n   *\n   * ```markdown\n   * > | ## aa\n   *       ^\n   * ```\n   *\n   * @type {State}\n   */\n  function atBreak(code) {\n    if (code === 35) {\n      effects.enter(\"atxHeadingSequence\");\n      return sequenceFurther(code);\n    }\n    if (code === null || markdownLineEnding(code)) {\n      effects.exit(\"atxHeading\");\n      // To do: interrupt like `markdown-rs`.\n      // // Feel free to interrupt.\n      // tokenizer.interrupt = false\n      return ok(code);\n    }\n    if (markdownSpace(code)) {\n      return factorySpace(effects, atBreak, \"whitespace\")(code);\n    }\n\n    // To do: generate `data` tokens, add the `text` token later.\n    // Needs edit map, see: `markdown.rs`.\n    effects.enter(\"atxHeadingText\");\n    return data(code);\n  }\n\n  /**\n   * In further sequence (after whitespace).\n   *\n   * Could be normal “visible” hashes in the heading or a final sequence.\n   *\n   * ```markdown\n   * > | ## aa ##\n   *           ^\n   * ```\n   *\n   * @type {State}\n   */\n  function sequenceFurther(code) {\n    if (code === 35) {\n      effects.consume(code);\n      return sequenceFurther;\n    }\n    effects.exit(\"atxHeadingSequence\");\n    return atBreak(code);\n  }\n\n  /**\n   * In text.\n   *\n   * ```markdown\n   * > | ## aa\n   *        ^\n   * ```\n   *\n   * @type {State}\n   */\n  function data(code) {\n    if (code === null || code === 35 || markdownLineEndingOrSpace(code)) {\n      effects.exit(\"atxHeadingText\");\n      return atBreak(code);\n    }\n    effects.consume(code);\n    return data;\n  }\n}","/**\n * List of lowercase HTML “block” tag names.\n *\n * The list, when parsing HTML (flow), results in more relaxed rules (condition\n * 6).\n * Because they are known blocks, the HTML-like syntax doesn’t have to be\n * strictly parsed.\n * For tag names not in this list, a more strict algorithm (condition 7) is used\n * to detect whether the HTML-like syntax is seen as HTML (flow) or not.\n *\n * This is copied from:\n * <https://spec.commonmark.org/0.30/#html-blocks>.\n *\n * > 👉 **Note**: `search` was added in `CommonMark@0.31`.\n */\nexport const htmlBlockNames = [\n  'address',\n  'article',\n  'aside',\n  'base',\n  'basefont',\n  'blockquote',\n  'body',\n  'caption',\n  'center',\n  'col',\n  'colgroup',\n  'dd',\n  'details',\n  'dialog',\n  'dir',\n  'div',\n  'dl',\n  'dt',\n  'fieldset',\n  'figcaption',\n  'figure',\n  'footer',\n  'form',\n  'frame',\n  'frameset',\n  'h1',\n  'h2',\n  'h3',\n  'h4',\n  'h5',\n  'h6',\n  'head',\n  'header',\n  'hr',\n  'html',\n  'iframe',\n  'legend',\n  'li',\n  'link',\n  'main',\n  'menu',\n  'menuitem',\n  'nav',\n  'noframes',\n  'ol',\n  'optgroup',\n  'option',\n  'p',\n  'param',\n  'search',\n  'section',\n  'summary',\n  'table',\n  'tbody',\n  'td',\n  'tfoot',\n  'th',\n  'thead',\n  'title',\n  'tr',\n  'track',\n  'ul'\n]\n\n/**\n * List of lowercase HTML “raw” tag names.\n *\n * The list, when parsing HTML (flow), results in HTML that can include lines\n * without exiting, until a closing tag also in this list is found (condition\n * 1).\n *\n * This module is copied from:\n * <https://spec.commonmark.org/0.30/#html-blocks>.\n *\n * > 👉 **Note**: `textarea` was added in `CommonMark@0.30`.\n */\nexport const htmlRawNames = ['pre', 'script', 'style', 'textarea']\n","/**\n * @import {\n *   Code,\n *   Construct,\n *   Resolver,\n *   State,\n *   TokenizeContext,\n *   Tokenizer\n * } from 'micromark-util-types'\n */\n\nimport { asciiAlphanumeric, asciiAlpha, markdownLineEndingOrSpace, markdownLineEnding, markdownSpace } from 'micromark-util-character';\nimport { htmlBlockNames, htmlRawNames } from 'micromark-util-html-tag-name';\nimport { blankLine } from './blank-line.js';\n\n/** @type {Construct} */\nexport const htmlFlow = {\n  concrete: true,\n  name: 'htmlFlow',\n  resolveTo: resolveToHtmlFlow,\n  tokenize: tokenizeHtmlFlow\n};\n\n/** @type {Construct} */\nconst blankLineBefore = {\n  partial: true,\n  tokenize: tokenizeBlankLineBefore\n};\nconst nonLazyContinuationStart = {\n  partial: true,\n  tokenize: tokenizeNonLazyContinuationStart\n};\n\n/** @type {Resolver} */\nfunction resolveToHtmlFlow(events) {\n  let index = events.length;\n  while (index--) {\n    if (events[index][0] === 'enter' && events[index][1].type === \"htmlFlow\") {\n      break;\n    }\n  }\n  if (index > 1 && events[index - 2][1].type === \"linePrefix\") {\n    // Add the prefix start to the HTML token.\n    events[index][1].start = events[index - 2][1].start;\n    // Add the prefix start to the HTML line token.\n    events[index + 1][1].start = events[index - 2][1].start;\n    // Remove the line prefix.\n    events.splice(index - 2, 2);\n  }\n  return events;\n}\n\n/**\n * @this {TokenizeContext}\n *   Context.\n * @type {Tokenizer}\n */\nfunction tokenizeHtmlFlow(effects, ok, nok) {\n  const self = this;\n  /** @type {number} */\n  let marker;\n  /** @type {boolean} */\n  let closingTag;\n  /** @type {string} */\n  let buffer;\n  /** @type {number} */\n  let index;\n  /** @type {Code} */\n  let markerB;\n  return start;\n\n  /**\n   * Start of HTML (flow).\n   *\n   * ```markdown\n   * > | <x />\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    // To do: parse indent like `markdown-rs`.\n    return before(code);\n  }\n\n  /**\n   * At `<`, after optional whitespace.\n   *\n   * ```markdown\n   * > | <x />\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function before(code) {\n    effects.enter(\"htmlFlow\");\n    effects.enter(\"htmlFlowData\");\n    effects.consume(code);\n    return open;\n  }\n\n  /**\n   * After `<`, at tag name or other stuff.\n   *\n   * ```markdown\n   * > | <x />\n   *      ^\n   * > | <!doctype>\n   *      ^\n   * > | <!--xxx-->\n   *      ^\n   * ```\n   *\n   * @type {State}\n   */\n  function open(code) {\n    if (code === 33) {\n      effects.consume(code);\n      return declarationOpen;\n    }\n    if (code === 47) {\n      effects.consume(code);\n      closingTag = true;\n      return tagCloseStart;\n    }\n    if (code === 63) {\n      effects.consume(code);\n      marker = 3;\n      // To do:\n      // tokenizer.concrete = true\n      // To do: use `markdown-rs` style interrupt.\n      // While we’re in an instruction instead of a declaration, we’re on a `?`\n      // right now, so we do need to search for `>`, similar to declarations.\n      return self.interrupt ? ok : continuationDeclarationInside;\n    }\n\n    // ASCII alphabetical.\n    if (asciiAlpha(code)) {\n      // Always the case.\n      effects.consume(code);\n      buffer = String.fromCharCode(code);\n      return tagName;\n    }\n    return nok(code);\n  }\n\n  /**\n   * After `<!`, at declaration, comment, or CDATA.\n   *\n   * ```markdown\n   * > | <!doctype>\n   *       ^\n   * > | <!--xxx-->\n   *       ^\n   * > | <![CDATA[>&<]]>\n   *       ^\n   * ```\n   *\n   * @type {State}\n   */\n  function declarationOpen(code) {\n    if (code === 45) {\n      effects.consume(code);\n      marker = 2;\n      return commentOpenInside;\n    }\n    if (code === 91) {\n      effects.consume(code);\n      marker = 5;\n      index = 0;\n      return cdataOpenInside;\n    }\n\n    // ASCII alphabetical.\n    if (asciiAlpha(code)) {\n      effects.consume(code);\n      marker = 4;\n      // // Do not form containers.\n      // tokenizer.concrete = true\n      return self.interrupt ? ok : continuationDeclarationInside;\n    }\n    return nok(code);\n  }\n\n  /**\n   * After `<!-`, inside a comment, at another `-`.\n   *\n   * ```markdown\n   * > | <!--xxx-->\n   *        ^\n   * ```\n   *\n   * @type {State}\n   */\n  function commentOpenInside(code) {\n    if (code === 45) {\n      effects.consume(code);\n      // // Do not form containers.\n      // tokenizer.concrete = true\n      return self.interrupt ? ok : continuationDeclarationInside;\n    }\n    return nok(code);\n  }\n\n  /**\n   * After `<![`, inside CDATA, expecting `CDATA[`.\n   *\n   * ```markdown\n   * > | <![CDATA[>&<]]>\n   *        ^^^^^^\n   * ```\n   *\n   * @type {State}\n   */\n  function cdataOpenInside(code) {\n    const value = \"CDATA[\";\n    if (code === value.charCodeAt(index++)) {\n      effects.consume(code);\n      if (index === value.length) {\n        // // Do not form containers.\n        // tokenizer.concrete = true\n        return self.interrupt ? ok : continuation;\n      }\n      return cdataOpenInside;\n    }\n    return nok(code);\n  }\n\n  /**\n   * After `</`, in closing tag, at tag name.\n   *\n   * ```markdown\n   * > | </x>\n   *       ^\n   * ```\n   *\n   * @type {State}\n   */\n  function tagCloseStart(code) {\n    if (asciiAlpha(code)) {\n      // Always the case.\n      effects.consume(code);\n      buffer = String.fromCharCode(code);\n      return tagName;\n    }\n    return nok(code);\n  }\n\n  /**\n   * In tag name.\n   *\n   * ```markdown\n   * > | <ab>\n   *      ^^\n   * > | </ab>\n   *       ^^\n   * ```\n   *\n   * @type {State}\n   */\n  function tagName(code) {\n    if (code === null || code === 47 || code === 62 || markdownLineEndingOrSpace(code)) {\n      const slash = code === 47;\n      const name = buffer.toLowerCase();\n      if (!slash && !closingTag && htmlRawNames.includes(name)) {\n        marker = 1;\n        // // Do not form containers.\n        // tokenizer.concrete = true\n        return self.interrupt ? ok(code) : continuation(code);\n      }\n      if (htmlBlockNames.includes(buffer.toLowerCase())) {\n        marker = 6;\n        if (slash) {\n          effects.consume(code);\n          return basicSelfClosing;\n        }\n\n        // // Do not form containers.\n        // tokenizer.concrete = true\n        return self.interrupt ? ok(code) : continuation(code);\n      }\n      marker = 7;\n      // Do not support complete HTML when interrupting.\n      return self.interrupt && !self.parser.lazy[self.now().line] ? nok(code) : closingTag ? completeClosingTagAfter(code) : completeAttributeNameBefore(code);\n    }\n\n    // ASCII alphanumerical and `-`.\n    if (code === 45 || asciiAlphanumeric(code)) {\n      effects.consume(code);\n      buffer += String.fromCharCode(code);\n      return tagName;\n    }\n    return nok(code);\n  }\n\n  /**\n   * After closing slash of a basic tag name.\n   *\n   * ```markdown\n   * > | <div/>\n   *          ^\n   * ```\n   *\n   * @type {State}\n   */\n  function basicSelfClosing(code) {\n    if (code === 62) {\n      effects.consume(code);\n      // // Do not form containers.\n      // tokenizer.concrete = true\n      return self.interrupt ? ok : continuation;\n    }\n    return nok(code);\n  }\n\n  /**\n   * After closing slash of a complete tag name.\n   *\n   * ```markdown\n   * > | <x/>\n   *        ^\n   * ```\n   *\n   * @type {State}\n   */\n  function completeClosingTagAfter(code) {\n    if (markdownSpace(code)) {\n      effects.consume(code);\n      return completeClosingTagAfter;\n    }\n    return completeEnd(code);\n  }\n\n  /**\n   * At an attribute name.\n   *\n   * At first, this state is used after a complete tag name, after whitespace,\n   * where it expects optional attributes or the end of the tag.\n   * It is also reused after attributes, when expecting more optional\n   * attributes.\n   *\n   * ```markdown\n   * > | <a />\n   *        ^\n   * > | <a :b>\n   *        ^\n   * > | <a _b>\n   *        ^\n   * > | <a b>\n   *        ^\n   * > | <a >\n   *        ^\n   * ```\n   *\n   * @type {State}\n   */\n  function completeAttributeNameBefore(code) {\n    if (code === 47) {\n      effects.consume(code);\n      return completeEnd;\n    }\n\n    // ASCII alphanumerical and `:` and `_`.\n    if (code === 58 || code === 95 || asciiAlpha(code)) {\n      effects.consume(code);\n      return completeAttributeName;\n    }\n    if (markdownSpace(code)) {\n      effects.consume(code);\n      return completeAttributeNameBefore;\n    }\n    return completeEnd(code);\n  }\n\n  /**\n   * In attribute name.\n   *\n   * ```markdown\n   * > | <a :b>\n   *         ^\n   * > | <a _b>\n   *         ^\n   * > | <a b>\n   *         ^\n   * ```\n   *\n   * @type {State}\n   */\n  function completeAttributeName(code) {\n    // ASCII alphanumerical and `-`, `.`, `:`, and `_`.\n    if (code === 45 || code === 46 || code === 58 || code === 95 || asciiAlphanumeric(code)) {\n      effects.consume(code);\n      return completeAttributeName;\n    }\n    return completeAttributeNameAfter(code);\n  }\n\n  /**\n   * After attribute name, at an optional initializer, the end of the tag, or\n   * whitespace.\n   *\n   * ```markdown\n   * > | <a b>\n   *         ^\n   * > | <a b=c>\n   *         ^\n   * ```\n   *\n   * @type {State}\n   */\n  function completeAttributeNameAfter(code) {\n    if (code === 61) {\n      effects.consume(code);\n      return completeAttributeValueBefore;\n    }\n    if (markdownSpace(code)) {\n      effects.consume(code);\n      return completeAttributeNameAfter;\n    }\n    return completeAttributeNameBefore(code);\n  }\n\n  /**\n   * Before unquoted, double quoted, or single quoted attribute value, allowing\n   * whitespace.\n   *\n   * ```markdown\n   * > | <a b=c>\n   *          ^\n   * > | <a b=\"c\">\n   *          ^\n   * ```\n   *\n   * @type {State}\n   */\n  function completeAttributeValueBefore(code) {\n    if (code === null || code === 60 || code === 61 || code === 62 || code === 96) {\n      return nok(code);\n    }\n    if (code === 34 || code === 39) {\n      effects.consume(code);\n      markerB = code;\n      return completeAttributeValueQuoted;\n    }\n    if (markdownSpace(code)) {\n      effects.consume(code);\n      return completeAttributeValueBefore;\n    }\n    return completeAttributeValueUnquoted(code);\n  }\n\n  /**\n   * In double or single quoted attribute value.\n   *\n   * ```markdown\n   * > | <a b=\"c\">\n   *           ^\n   * > | <a b='c'>\n   *           ^\n   * ```\n   *\n   * @type {State}\n   */\n  function completeAttributeValueQuoted(code) {\n    if (code === markerB) {\n      effects.consume(code);\n      markerB = null;\n      return completeAttributeValueQuotedAfter;\n    }\n    if (code === null || markdownLineEnding(code)) {\n      return nok(code);\n    }\n    effects.consume(code);\n    return completeAttributeValueQuoted;\n  }\n\n  /**\n   * In unquoted attribute value.\n   *\n   * ```markdown\n   * > | <a b=c>\n   *          ^\n   * ```\n   *\n   * @type {State}\n   */\n  function completeAttributeValueUnquoted(code) {\n    if (code === null || code === 34 || code === 39 || code === 47 || code === 60 || code === 61 || code === 62 || code === 96 || markdownLineEndingOrSpace(code)) {\n      return completeAttributeNameAfter(code);\n    }\n    effects.consume(code);\n    return completeAttributeValueUnquoted;\n  }\n\n  /**\n   * After double or single quoted attribute value, before whitespace or the\n   * end of the tag.\n   *\n   * ```markdown\n   * > | <a b=\"c\">\n   *            ^\n   * ```\n   *\n   * @type {State}\n   */\n  function completeAttributeValueQuotedAfter(code) {\n    if (code === 47 || code === 62 || markdownSpace(code)) {\n      return completeAttributeNameBefore(code);\n    }\n    return nok(code);\n  }\n\n  /**\n   * In certain circumstances of a complete tag where only an `>` is allowed.\n   *\n   * ```markdown\n   * > | <a b=\"c\">\n   *             ^\n   * ```\n   *\n   * @type {State}\n   */\n  function completeEnd(code) {\n    if (code === 62) {\n      effects.consume(code);\n      return completeAfter;\n    }\n    return nok(code);\n  }\n\n  /**\n   * After `>` in a complete tag.\n   *\n   * ```markdown\n   * > | <x>\n   *        ^\n   * ```\n   *\n   * @type {State}\n   */\n  function completeAfter(code) {\n    if (code === null || markdownLineEnding(code)) {\n      // // Do not form containers.\n      // tokenizer.concrete = true\n      return continuation(code);\n    }\n    if (markdownSpace(code)) {\n      effects.consume(code);\n      return completeAfter;\n    }\n    return nok(code);\n  }\n\n  /**\n   * In continuation of any HTML kind.\n   *\n   * ```markdown\n   * > | <!--xxx-->\n   *          ^\n   * ```\n   *\n   * @type {State}\n   */\n  function continuation(code) {\n    if (code === 45 && marker === 2) {\n      effects.consume(code);\n      return continuationCommentInside;\n    }\n    if (code === 60 && marker === 1) {\n      effects.consume(code);\n      return continuationRawTagOpen;\n    }\n    if (code === 62 && marker === 4) {\n      effects.consume(code);\n      return continuationClose;\n    }\n    if (code === 63 && marker === 3) {\n      effects.consume(code);\n      return continuationDeclarationInside;\n    }\n    if (code === 93 && marker === 5) {\n      effects.consume(code);\n      return continuationCdataInside;\n    }\n    if (markdownLineEnding(code) && (marker === 6 || marker === 7)) {\n      effects.exit(\"htmlFlowData\");\n      return effects.check(blankLineBefore, continuationAfter, continuationStart)(code);\n    }\n    if (code === null || markdownLineEnding(code)) {\n      effects.exit(\"htmlFlowData\");\n      return continuationStart(code);\n    }\n    effects.consume(code);\n    return continuation;\n  }\n\n  /**\n   * In continuation, at eol.\n   *\n   * ```markdown\n   * > | <x>\n   *        ^\n   *   | asd\n   * ```\n   *\n   * @type {State}\n   */\n  function continuationStart(code) {\n    return effects.check(nonLazyContinuationStart, continuationStartNonLazy, continuationAfter)(code);\n  }\n\n  /**\n   * In continuation, at eol, before non-lazy content.\n   *\n   * ```markdown\n   * > | <x>\n   *        ^\n   *   | asd\n   * ```\n   *\n   * @type {State}\n   */\n  function continuationStartNonLazy(code) {\n    effects.enter(\"lineEnding\");\n    effects.consume(code);\n    effects.exit(\"lineEnding\");\n    return continuationBefore;\n  }\n\n  /**\n   * In continuation, before non-lazy content.\n   *\n   * ```markdown\n   *   | <x>\n   * > | asd\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function continuationBefore(code) {\n    if (code === null || markdownLineEnding(code)) {\n      return continuationStart(code);\n    }\n    effects.enter(\"htmlFlowData\");\n    return continuation(code);\n  }\n\n  /**\n   * In comment continuation, after one `-`, expecting another.\n   *\n   * ```markdown\n   * > | <!--xxx-->\n   *             ^\n   * ```\n   *\n   * @type {State}\n   */\n  function continuationCommentInside(code) {\n    if (code === 45) {\n      effects.consume(code);\n      return continuationDeclarationInside;\n    }\n    return continuation(code);\n  }\n\n  /**\n   * In raw continuation, after `<`, at `/`.\n   *\n   * ```markdown\n   * > | <script>console.log(1)</script>\n   *                            ^\n   * ```\n   *\n   * @type {State}\n   */\n  function continuationRawTagOpen(code) {\n    if (code === 47) {\n      effects.consume(code);\n      buffer = '';\n      return continuationRawEndTag;\n    }\n    return continuation(code);\n  }\n\n  /**\n   * In raw continuation, after `</`, in a raw tag name.\n   *\n   * ```markdown\n   * > | <script>console.log(1)</script>\n   *                             ^^^^^^\n   * ```\n   *\n   * @type {State}\n   */\n  function continuationRawEndTag(code) {\n    if (code === 62) {\n      const name = buffer.toLowerCase();\n      if (htmlRawNames.includes(name)) {\n        effects.consume(code);\n        return continuationClose;\n      }\n      return continuation(code);\n    }\n    if (asciiAlpha(code) && buffer.length < 8) {\n      // Always the case.\n      effects.consume(code);\n      buffer += String.fromCharCode(code);\n      return continuationRawEndTag;\n    }\n    return continuation(code);\n  }\n\n  /**\n   * In cdata continuation, after `]`, expecting `]>`.\n   *\n   * ```markdown\n   * > | <![CDATA[>&<]]>\n   *                  ^\n   * ```\n   *\n   * @type {State}\n   */\n  function continuationCdataInside(code) {\n    if (code === 93) {\n      effects.consume(code);\n      return continuationDeclarationInside;\n    }\n    return continuation(code);\n  }\n\n  /**\n   * In declaration or instruction continuation, at `>`.\n   *\n   * ```markdown\n   * > | <!-->\n   *         ^\n   * > | <?>\n   *       ^\n   * > | <!q>\n   *        ^\n   * > | <!--ab-->\n   *             ^\n   * > | <![CDATA[>&<]]>\n   *                   ^\n   * ```\n   *\n   * @type {State}\n   */\n  function continuationDeclarationInside(code) {\n    if (code === 62) {\n      effects.consume(code);\n      return continuationClose;\n    }\n\n    // More dashes.\n    if (code === 45 && marker === 2) {\n      effects.consume(code);\n      return continuationDeclarationInside;\n    }\n    return continuation(code);\n  }\n\n  /**\n   * In closed continuation: everything we get until the eol/eof is part of it.\n   *\n   * ```markdown\n   * > | <!doctype>\n   *               ^\n   * ```\n   *\n   * @type {State}\n   */\n  function continuationClose(code) {\n    if (code === null || markdownLineEnding(code)) {\n      effects.exit(\"htmlFlowData\");\n      return continuationAfter(code);\n    }\n    effects.consume(code);\n    return continuationClose;\n  }\n\n  /**\n   * Done.\n   *\n   * ```markdown\n   * > | <!doctype>\n   *               ^\n   * ```\n   *\n   * @type {State}\n   */\n  function continuationAfter(code) {\n    effects.exit(\"htmlFlow\");\n    // // Feel free to interrupt.\n    // tokenizer.interrupt = false\n    // // No longer concrete.\n    // tokenizer.concrete = false\n    return ok(code);\n  }\n}\n\n/**\n * @this {TokenizeContext}\n *   Context.\n * @type {Tokenizer}\n */\nfunction tokenizeNonLazyContinuationStart(effects, ok, nok) {\n  const self = this;\n  return start;\n\n  /**\n   * At eol, before continuation.\n   *\n   * ```markdown\n   * > | * ```js\n   *            ^\n   *   | b\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    if (markdownLineEnding(code)) {\n      effects.enter(\"lineEnding\");\n      effects.consume(code);\n      effects.exit(\"lineEnding\");\n      return after;\n    }\n    return nok(code);\n  }\n\n  /**\n   * A continuation.\n   *\n   * ```markdown\n   *   | * ```js\n   * > | b\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function after(code) {\n    return self.parser.lazy[self.now().line] ? nok(code) : ok(code);\n  }\n}\n\n/**\n * @this {TokenizeContext}\n *   Context.\n * @type {Tokenizer}\n */\nfunction tokenizeBlankLineBefore(effects, ok, nok) {\n  return start;\n\n  /**\n   * Before eol, expecting blank line.\n   *\n   * ```markdown\n   * > | <div>\n   *          ^\n   *   |\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    effects.enter(\"lineEnding\");\n    effects.consume(code);\n    effects.exit(\"lineEnding\");\n    return effects.attempt(blankLine, ok, nok);\n  }\n}","/**\n * @import {\n *   Code,\n *   Construct,\n *   State,\n *   TokenizeContext,\n *   Tokenizer\n * } from 'micromark-util-types'\n */\n\nimport { factorySpace } from 'micromark-factory-space';\nimport { asciiAlphanumeric, asciiAlpha, markdownLineEndingOrSpace, markdownLineEnding, markdownSpace } from 'micromark-util-character';\n/** @type {Construct} */\nexport const htmlText = {\n  name: 'htmlText',\n  tokenize: tokenizeHtmlText\n};\n\n/**\n * @this {TokenizeContext}\n *   Context.\n * @type {Tokenizer}\n */\nfunction tokenizeHtmlText(effects, ok, nok) {\n  const self = this;\n  /** @type {NonNullable<Code> | undefined} */\n  let marker;\n  /** @type {number} */\n  let index;\n  /** @type {State} */\n  let returnState;\n  return start;\n\n  /**\n   * Start of HTML (text).\n   *\n   * ```markdown\n   * > | a <b> c\n   *       ^\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    effects.enter(\"htmlText\");\n    effects.enter(\"htmlTextData\");\n    effects.consume(code);\n    return open;\n  }\n\n  /**\n   * After `<`, at tag name or other stuff.\n   *\n   * ```markdown\n   * > | a <b> c\n   *        ^\n   * > | a <!doctype> c\n   *        ^\n   * > | a <!--b--> c\n   *        ^\n   * ```\n   *\n   * @type {State}\n   */\n  function open(code) {\n    if (code === 33) {\n      effects.consume(code);\n      return declarationOpen;\n    }\n    if (code === 47) {\n      effects.consume(code);\n      return tagCloseStart;\n    }\n    if (code === 63) {\n      effects.consume(code);\n      return instruction;\n    }\n\n    // ASCII alphabetical.\n    if (asciiAlpha(code)) {\n      effects.consume(code);\n      return tagOpen;\n    }\n    return nok(code);\n  }\n\n  /**\n   * After `<!`, at declaration, comment, or CDATA.\n   *\n   * ```markdown\n   * > | a <!doctype> c\n   *         ^\n   * > | a <!--b--> c\n   *         ^\n   * > | a <![CDATA[>&<]]> c\n   *         ^\n   * ```\n   *\n   * @type {State}\n   */\n  function declarationOpen(code) {\n    if (code === 45) {\n      effects.consume(code);\n      return commentOpenInside;\n    }\n    if (code === 91) {\n      effects.consume(code);\n      index = 0;\n      return cdataOpenInside;\n    }\n    if (asciiAlpha(code)) {\n      effects.consume(code);\n      return declaration;\n    }\n    return nok(code);\n  }\n\n  /**\n   * In a comment, after `<!-`, at another `-`.\n   *\n   * ```markdown\n   * > | a <!--b--> c\n   *          ^\n   * ```\n   *\n   * @type {State}\n   */\n  function commentOpenInside(code) {\n    if (code === 45) {\n      effects.consume(code);\n      return commentEnd;\n    }\n    return nok(code);\n  }\n\n  /**\n   * In comment.\n   *\n   * ```markdown\n   * > | a <!--b--> c\n   *           ^\n   * ```\n   *\n   * @type {State}\n   */\n  function comment(code) {\n    if (code === null) {\n      return nok(code);\n    }\n    if (code === 45) {\n      effects.consume(code);\n      return commentClose;\n    }\n    if (markdownLineEnding(code)) {\n      returnState = comment;\n      return lineEndingBefore(code);\n    }\n    effects.consume(code);\n    return comment;\n  }\n\n  /**\n   * In comment, after `-`.\n   *\n   * ```markdown\n   * > | a <!--b--> c\n   *             ^\n   * ```\n   *\n   * @type {State}\n   */\n  function commentClose(code) {\n    if (code === 45) {\n      effects.consume(code);\n      return commentEnd;\n    }\n    return comment(code);\n  }\n\n  /**\n   * In comment, after `--`.\n   *\n   * ```markdown\n   * > | a <!--b--> c\n   *              ^\n   * ```\n   *\n   * @type {State}\n   */\n  function commentEnd(code) {\n    return code === 62 ? end(code) : code === 45 ? commentClose(code) : comment(code);\n  }\n\n  /**\n   * After `<![`, in CDATA, expecting `CDATA[`.\n   *\n   * ```markdown\n   * > | a <![CDATA[>&<]]> b\n   *          ^^^^^^\n   * ```\n   *\n   * @type {State}\n   */\n  function cdataOpenInside(code) {\n    const value = \"CDATA[\";\n    if (code === value.charCodeAt(index++)) {\n      effects.consume(code);\n      return index === value.length ? cdata : cdataOpenInside;\n    }\n    return nok(code);\n  }\n\n  /**\n   * In CDATA.\n   *\n   * ```markdown\n   * > | a <![CDATA[>&<]]> b\n   *                ^^^\n   * ```\n   *\n   * @type {State}\n   */\n  function cdata(code) {\n    if (code === null) {\n      return nok(code);\n    }\n    if (code === 93) {\n      effects.consume(code);\n      return cdataClose;\n    }\n    if (markdownLineEnding(code)) {\n      returnState = cdata;\n      return lineEndingBefore(code);\n    }\n    effects.consume(code);\n    return cdata;\n  }\n\n  /**\n   * In CDATA, after `]`, at another `]`.\n   *\n   * ```markdown\n   * > | a <![CDATA[>&<]]> b\n   *                    ^\n   * ```\n   *\n   * @type {State}\n   */\n  function cdataClose(code) {\n    if (code === 93) {\n      effects.consume(code);\n      return cdataEnd;\n    }\n    return cdata(code);\n  }\n\n  /**\n   * In CDATA, after `]]`, at `>`.\n   *\n   * ```markdown\n   * > | a <![CDATA[>&<]]> b\n   *                     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function cdataEnd(code) {\n    if (code === 62) {\n      return end(code);\n    }\n    if (code === 93) {\n      effects.consume(code);\n      return cdataEnd;\n    }\n    return cdata(code);\n  }\n\n  /**\n   * In declaration.\n   *\n   * ```markdown\n   * > | a <!b> c\n   *          ^\n   * ```\n   *\n   * @type {State}\n   */\n  function declaration(code) {\n    if (code === null || code === 62) {\n      return end(code);\n    }\n    if (markdownLineEnding(code)) {\n      returnState = declaration;\n      return lineEndingBefore(code);\n    }\n    effects.consume(code);\n    return declaration;\n  }\n\n  /**\n   * In instruction.\n   *\n   * ```markdown\n   * > | a <?b?> c\n   *         ^\n   * ```\n   *\n   * @type {State}\n   */\n  function instruction(code) {\n    if (code === null) {\n      return nok(code);\n    }\n    if (code === 63) {\n      effects.consume(code);\n      return instructionClose;\n    }\n    if (markdownLineEnding(code)) {\n      returnState = instruction;\n      return lineEndingBefore(code);\n    }\n    effects.consume(code);\n    return instruction;\n  }\n\n  /**\n   * In instruction, after `?`, at `>`.\n   *\n   * ```markdown\n   * > | a <?b?> c\n   *           ^\n   * ```\n   *\n   * @type {State}\n   */\n  function instructionClose(code) {\n    return code === 62 ? end(code) : instruction(code);\n  }\n\n  /**\n   * After `</`, in closing tag, at tag name.\n   *\n   * ```markdown\n   * > | a </b> c\n   *         ^\n   * ```\n   *\n   * @type {State}\n   */\n  function tagCloseStart(code) {\n    // ASCII alphabetical.\n    if (asciiAlpha(code)) {\n      effects.consume(code);\n      return tagClose;\n    }\n    return nok(code);\n  }\n\n  /**\n   * After `</x`, in a tag name.\n   *\n   * ```markdown\n   * > | a </b> c\n   *          ^\n   * ```\n   *\n   * @type {State}\n   */\n  function tagClose(code) {\n    // ASCII alphanumerical and `-`.\n    if (code === 45 || asciiAlphanumeric(code)) {\n      effects.consume(code);\n      return tagClose;\n    }\n    return tagCloseBetween(code);\n  }\n\n  /**\n   * In closing tag, after tag name.\n   *\n   * ```markdown\n   * > | a </b> c\n   *          ^\n   * ```\n   *\n   * @type {State}\n   */\n  function tagCloseBetween(code) {\n    if (markdownLineEnding(code)) {\n      returnState = tagCloseBetween;\n      return lineEndingBefore(code);\n    }\n    if (markdownSpace(code)) {\n      effects.consume(code);\n      return tagCloseBetween;\n    }\n    return end(code);\n  }\n\n  /**\n   * After `<x`, in opening tag name.\n   *\n   * ```markdown\n   * > | a <b> c\n   *         ^\n   * ```\n   *\n   * @type {State}\n   */\n  function tagOpen(code) {\n    // ASCII alphanumerical and `-`.\n    if (code === 45 || asciiAlphanumeric(code)) {\n      effects.consume(code);\n      return tagOpen;\n    }\n    if (code === 47 || code === 62 || markdownLineEndingOrSpace(code)) {\n      return tagOpenBetween(code);\n    }\n    return nok(code);\n  }\n\n  /**\n   * In opening tag, after tag name.\n   *\n   * ```markdown\n   * > | a <b> c\n   *         ^\n   * ```\n   *\n   * @type {State}\n   */\n  function tagOpenBetween(code) {\n    if (code === 47) {\n      effects.consume(code);\n      return end;\n    }\n\n    // ASCII alphabetical and `:` and `_`.\n    if (code === 58 || code === 95 || asciiAlpha(code)) {\n      effects.consume(code);\n      return tagOpenAttributeName;\n    }\n    if (markdownLineEnding(code)) {\n      returnState = tagOpenBetween;\n      return lineEndingBefore(code);\n    }\n    if (markdownSpace(code)) {\n      effects.consume(code);\n      return tagOpenBetween;\n    }\n    return end(code);\n  }\n\n  /**\n   * In attribute name.\n   *\n   * ```markdown\n   * > | a <b c> d\n   *          ^\n   * ```\n   *\n   * @type {State}\n   */\n  function tagOpenAttributeName(code) {\n    // ASCII alphabetical and `-`, `.`, `:`, and `_`.\n    if (code === 45 || code === 46 || code === 58 || code === 95 || asciiAlphanumeric(code)) {\n      effects.consume(code);\n      return tagOpenAttributeName;\n    }\n    return tagOpenAttributeNameAfter(code);\n  }\n\n  /**\n   * After attribute name, before initializer, the end of the tag, or\n   * whitespace.\n   *\n   * ```markdown\n   * > | a <b c> d\n   *           ^\n   * ```\n   *\n   * @type {State}\n   */\n  function tagOpenAttributeNameAfter(code) {\n    if (code === 61) {\n      effects.consume(code);\n      return tagOpenAttributeValueBefore;\n    }\n    if (markdownLineEnding(code)) {\n      returnState = tagOpenAttributeNameAfter;\n      return lineEndingBefore(code);\n    }\n    if (markdownSpace(code)) {\n      effects.consume(code);\n      return tagOpenAttributeNameAfter;\n    }\n    return tagOpenBetween(code);\n  }\n\n  /**\n   * Before unquoted, double quoted, or single quoted attribute value, allowing\n   * whitespace.\n   *\n   * ```markdown\n   * > | a <b c=d> e\n   *            ^\n   * ```\n   *\n   * @type {State}\n   */\n  function tagOpenAttributeValueBefore(code) {\n    if (code === null || code === 60 || code === 61 || code === 62 || code === 96) {\n      return nok(code);\n    }\n    if (code === 34 || code === 39) {\n      effects.consume(code);\n      marker = code;\n      return tagOpenAttributeValueQuoted;\n    }\n    if (markdownLineEnding(code)) {\n      returnState = tagOpenAttributeValueBefore;\n      return lineEndingBefore(code);\n    }\n    if (markdownSpace(code)) {\n      effects.consume(code);\n      return tagOpenAttributeValueBefore;\n    }\n    effects.consume(code);\n    return tagOpenAttributeValueUnquoted;\n  }\n\n  /**\n   * In double or single quoted attribute value.\n   *\n   * ```markdown\n   * > | a <b c=\"d\"> e\n   *             ^\n   * ```\n   *\n   * @type {State}\n   */\n  function tagOpenAttributeValueQuoted(code) {\n    if (code === marker) {\n      effects.consume(code);\n      marker = undefined;\n      return tagOpenAttributeValueQuotedAfter;\n    }\n    if (code === null) {\n      return nok(code);\n    }\n    if (markdownLineEnding(code)) {\n      returnState = tagOpenAttributeValueQuoted;\n      return lineEndingBefore(code);\n    }\n    effects.consume(code);\n    return tagOpenAttributeValueQuoted;\n  }\n\n  /**\n   * In unquoted attribute value.\n   *\n   * ```markdown\n   * > | a <b c=d> e\n   *            ^\n   * ```\n   *\n   * @type {State}\n   */\n  function tagOpenAttributeValueUnquoted(code) {\n    if (code === null || code === 34 || code === 39 || code === 60 || code === 61 || code === 96) {\n      return nok(code);\n    }\n    if (code === 47 || code === 62 || markdownLineEndingOrSpace(code)) {\n      return tagOpenBetween(code);\n    }\n    effects.consume(code);\n    return tagOpenAttributeValueUnquoted;\n  }\n\n  /**\n   * After double or single quoted attribute value, before whitespace or the end\n   * of the tag.\n   *\n   * ```markdown\n   * > | a <b c=\"d\"> e\n   *               ^\n   * ```\n   *\n   * @type {State}\n   */\n  function tagOpenAttributeValueQuotedAfter(code) {\n    if (code === 47 || code === 62 || markdownLineEndingOrSpace(code)) {\n      return tagOpenBetween(code);\n    }\n    return nok(code);\n  }\n\n  /**\n   * In certain circumstances of a tag where only an `>` is allowed.\n   *\n   * ```markdown\n   * > | a <b c=\"d\"> e\n   *               ^\n   * ```\n   *\n   * @type {State}\n   */\n  function end(code) {\n    if (code === 62) {\n      effects.consume(code);\n      effects.exit(\"htmlTextData\");\n      effects.exit(\"htmlText\");\n      return ok;\n    }\n    return nok(code);\n  }\n\n  /**\n   * At eol.\n   *\n   * > 👉 **Note**: we can’t have blank lines in text, so no need to worry about\n   * > empty tokens.\n   *\n   * ```markdown\n   * > | a <!--a\n   *            ^\n   *   | b-->\n   * ```\n   *\n   * @type {State}\n   */\n  function lineEndingBefore(code) {\n    effects.exit(\"htmlTextData\");\n    effects.enter(\"lineEnding\");\n    effects.consume(code);\n    effects.exit(\"lineEnding\");\n    return lineEndingAfter;\n  }\n\n  /**\n   * After eol, at optional whitespace.\n   *\n   * > 👉 **Note**: we can’t have blank lines in text, so no need to worry about\n   * > empty tokens.\n   *\n   * ```markdown\n   *   | a <!--a\n   * > | b-->\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function lineEndingAfter(code) {\n    // Always populated by defaults.\n\n    return markdownSpace(code) ? factorySpace(effects, lineEndingAfterPrefix, \"linePrefix\", self.parser.constructs.disable.null.includes('codeIndented') ? undefined : 4)(code) : lineEndingAfterPrefix(code);\n  }\n\n  /**\n   * After eol, after optional whitespace.\n   *\n   * > 👉 **Note**: we can’t have blank lines in text, so no need to worry about\n   * > empty tokens.\n   *\n   * ```markdown\n   *   | a <!--a\n   * > | b-->\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function lineEndingAfterPrefix(code) {\n    effects.enter(\"htmlTextData\");\n    return returnState(code);\n  }\n}","/**\n * @import {\n *   Construct,\n *   Event,\n *   Resolver,\n *   State,\n *   TokenizeContext,\n *   Tokenizer,\n *   Token\n * } from 'micromark-util-types'\n */\n\nimport { factoryDestination } from 'micromark-factory-destination';\nimport { factoryLabel } from 'micromark-factory-label';\nimport { factoryTitle } from 'micromark-factory-title';\nimport { factoryWhitespace } from 'micromark-factory-whitespace';\nimport { markdownLineEndingOrSpace } from 'micromark-util-character';\nimport { push, splice } from 'micromark-util-chunked';\nimport { normalizeIdentifier } from 'micromark-util-normalize-identifier';\nimport { resolveAll } from 'micromark-util-resolve-all';\n/** @type {Construct} */\nexport const labelEnd = {\n  name: 'labelEnd',\n  resolveAll: resolveAllLabelEnd,\n  resolveTo: resolveToLabelEnd,\n  tokenize: tokenizeLabelEnd\n};\n\n/** @type {Construct} */\nconst resourceConstruct = {\n  tokenize: tokenizeResource\n};\n/** @type {Construct} */\nconst referenceFullConstruct = {\n  tokenize: tokenizeReferenceFull\n};\n/** @type {Construct} */\nconst referenceCollapsedConstruct = {\n  tokenize: tokenizeReferenceCollapsed\n};\n\n/** @type {Resolver} */\nfunction resolveAllLabelEnd(events) {\n  let index = -1;\n  /** @type {Array<Event>} */\n  const newEvents = [];\n  while (++index < events.length) {\n    const token = events[index][1];\n    newEvents.push(events[index]);\n    if (token.type === \"labelImage\" || token.type === \"labelLink\" || token.type === \"labelEnd\") {\n      // Remove the marker.\n      const offset = token.type === \"labelImage\" ? 4 : 2;\n      token.type = \"data\";\n      index += offset;\n    }\n  }\n\n  // If the events are equal, we don't have to copy newEvents to events\n  if (events.length !== newEvents.length) {\n    splice(events, 0, events.length, newEvents);\n  }\n  return events;\n}\n\n/** @type {Resolver} */\nfunction resolveToLabelEnd(events, context) {\n  let index = events.length;\n  let offset = 0;\n  /** @type {Token} */\n  let token;\n  /** @type {number | undefined} */\n  let open;\n  /** @type {number | undefined} */\n  let close;\n  /** @type {Array<Event>} */\n  let media;\n\n  // Find an opening.\n  while (index--) {\n    token = events[index][1];\n    if (open) {\n      // If we see another link, or inactive link label, we’ve been here before.\n      if (token.type === \"link\" || token.type === \"labelLink\" && token._inactive) {\n        break;\n      }\n\n      // Mark other link openings as inactive, as we can’t have links in\n      // links.\n      if (events[index][0] === 'enter' && token.type === \"labelLink\") {\n        token._inactive = true;\n      }\n    } else if (close) {\n      if (events[index][0] === 'enter' && (token.type === \"labelImage\" || token.type === \"labelLink\") && !token._balanced) {\n        open = index;\n        if (token.type !== \"labelLink\") {\n          offset = 2;\n          break;\n        }\n      }\n    } else if (token.type === \"labelEnd\") {\n      close = index;\n    }\n  }\n  const group = {\n    type: events[open][1].type === \"labelLink\" ? \"link\" : \"image\",\n    start: {\n      ...events[open][1].start\n    },\n    end: {\n      ...events[events.length - 1][1].end\n    }\n  };\n  const label = {\n    type: \"label\",\n    start: {\n      ...events[open][1].start\n    },\n    end: {\n      ...events[close][1].end\n    }\n  };\n  const text = {\n    type: \"labelText\",\n    start: {\n      ...events[open + offset + 2][1].end\n    },\n    end: {\n      ...events[close - 2][1].start\n    }\n  };\n  media = [['enter', group, context], ['enter', label, context]];\n\n  // Opening marker.\n  media = push(media, events.slice(open + 1, open + offset + 3));\n\n  // Text open.\n  media = push(media, [['enter', text, context]]);\n\n  // Always populated by defaults.\n\n  // Between.\n  media = push(media, resolveAll(context.parser.constructs.insideSpan.null, events.slice(open + offset + 4, close - 3), context));\n\n  // Text close, marker close, label close.\n  media = push(media, [['exit', text, context], events[close - 2], events[close - 1], ['exit', label, context]]);\n\n  // Reference, resource, or so.\n  media = push(media, events.slice(close + 1));\n\n  // Media close.\n  media = push(media, [['exit', group, context]]);\n  splice(events, open, events.length, media);\n  return events;\n}\n\n/**\n * @this {TokenizeContext}\n *   Context.\n * @type {Tokenizer}\n */\nfunction tokenizeLabelEnd(effects, ok, nok) {\n  const self = this;\n  let index = self.events.length;\n  /** @type {Token} */\n  let labelStart;\n  /** @type {boolean} */\n  let defined;\n\n  // Find an opening.\n  while (index--) {\n    if ((self.events[index][1].type === \"labelImage\" || self.events[index][1].type === \"labelLink\") && !self.events[index][1]._balanced) {\n      labelStart = self.events[index][1];\n      break;\n    }\n  }\n  return start;\n\n  /**\n   * Start of label end.\n   *\n   * ```markdown\n   * > | [a](b) c\n   *       ^\n   * > | [a][b] c\n   *       ^\n   * > | [a][] b\n   *       ^\n   * > | [a] b\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    // If there is not an okay opening.\n    if (!labelStart) {\n      return nok(code);\n    }\n\n    // If the corresponding label (link) start is marked as inactive,\n    // it means we’d be wrapping a link, like this:\n    //\n    // ```markdown\n    // > | a [b [c](d) e](f) g.\n    //                  ^\n    // ```\n    //\n    // We can’t have that, so it’s just balanced brackets.\n    if (labelStart._inactive) {\n      return labelEndNok(code);\n    }\n    defined = self.parser.defined.includes(normalizeIdentifier(self.sliceSerialize({\n      start: labelStart.end,\n      end: self.now()\n    })));\n    effects.enter(\"labelEnd\");\n    effects.enter(\"labelMarker\");\n    effects.consume(code);\n    effects.exit(\"labelMarker\");\n    effects.exit(\"labelEnd\");\n    return after;\n  }\n\n  /**\n   * After `]`.\n   *\n   * ```markdown\n   * > | [a](b) c\n   *       ^\n   * > | [a][b] c\n   *       ^\n   * > | [a][] b\n   *       ^\n   * > | [a] b\n   *       ^\n   * ```\n   *\n   * @type {State}\n   */\n  function after(code) {\n    // Note: `markdown-rs` also parses GFM footnotes here, which for us is in\n    // an extension.\n\n    // Resource (`[asd](fgh)`)?\n    if (code === 40) {\n      return effects.attempt(resourceConstruct, labelEndOk, defined ? labelEndOk : labelEndNok)(code);\n    }\n\n    // Full (`[asd][fgh]`) or collapsed (`[asd][]`) reference?\n    if (code === 91) {\n      return effects.attempt(referenceFullConstruct, labelEndOk, defined ? referenceNotFull : labelEndNok)(code);\n    }\n\n    // Shortcut (`[asd]`) reference?\n    return defined ? labelEndOk(code) : labelEndNok(code);\n  }\n\n  /**\n   * After `]`, at `[`, but not at a full reference.\n   *\n   * > 👉 **Note**: we only get here if the label is defined.\n   *\n   * ```markdown\n   * > | [a][] b\n   *        ^\n   * > | [a] b\n   *        ^\n   * ```\n   *\n   * @type {State}\n   */\n  function referenceNotFull(code) {\n    return effects.attempt(referenceCollapsedConstruct, labelEndOk, labelEndNok)(code);\n  }\n\n  /**\n   * Done, we found something.\n   *\n   * ```markdown\n   * > | [a](b) c\n   *           ^\n   * > | [a][b] c\n   *           ^\n   * > | [a][] b\n   *          ^\n   * > | [a] b\n   *        ^\n   * ```\n   *\n   * @type {State}\n   */\n  function labelEndOk(code) {\n    // Note: `markdown-rs` does a bunch of stuff here.\n    return ok(code);\n  }\n\n  /**\n   * Done, it’s nothing.\n   *\n   * There was an okay opening, but we didn’t match anything.\n   *\n   * ```markdown\n   * > | [a](b c\n   *        ^\n   * > | [a][b c\n   *        ^\n   * > | [a] b\n   *        ^\n   * ```\n   *\n   * @type {State}\n   */\n  function labelEndNok(code) {\n    labelStart._balanced = true;\n    return nok(code);\n  }\n}\n\n/**\n * @this {TokenizeContext}\n *   Context.\n * @type {Tokenizer}\n */\nfunction tokenizeResource(effects, ok, nok) {\n  return resourceStart;\n\n  /**\n   * At a resource.\n   *\n   * ```markdown\n   * > | [a](b) c\n   *        ^\n   * ```\n   *\n   * @type {State}\n   */\n  function resourceStart(code) {\n    effects.enter(\"resource\");\n    effects.enter(\"resourceMarker\");\n    effects.consume(code);\n    effects.exit(\"resourceMarker\");\n    return resourceBefore;\n  }\n\n  /**\n   * In resource, after `(`, at optional whitespace.\n   *\n   * ```markdown\n   * > | [a](b) c\n   *         ^\n   * ```\n   *\n   * @type {State}\n   */\n  function resourceBefore(code) {\n    return markdownLineEndingOrSpace(code) ? factoryWhitespace(effects, resourceOpen)(code) : resourceOpen(code);\n  }\n\n  /**\n   * In resource, after optional whitespace, at `)` or a destination.\n   *\n   * ```markdown\n   * > | [a](b) c\n   *         ^\n   * ```\n   *\n   * @type {State}\n   */\n  function resourceOpen(code) {\n    if (code === 41) {\n      return resourceEnd(code);\n    }\n    return factoryDestination(effects, resourceDestinationAfter, resourceDestinationMissing, \"resourceDestination\", \"resourceDestinationLiteral\", \"resourceDestinationLiteralMarker\", \"resourceDestinationRaw\", \"resourceDestinationString\", 32)(code);\n  }\n\n  /**\n   * In resource, after destination, at optional whitespace.\n   *\n   * ```markdown\n   * > | [a](b) c\n   *          ^\n   * ```\n   *\n   * @type {State}\n   */\n  function resourceDestinationAfter(code) {\n    return markdownLineEndingOrSpace(code) ? factoryWhitespace(effects, resourceBetween)(code) : resourceEnd(code);\n  }\n\n  /**\n   * At invalid destination.\n   *\n   * ```markdown\n   * > | [a](<<) b\n   *         ^\n   * ```\n   *\n   * @type {State}\n   */\n  function resourceDestinationMissing(code) {\n    return nok(code);\n  }\n\n  /**\n   * In resource, after destination and whitespace, at `(` or title.\n   *\n   * ```markdown\n   * > | [a](b ) c\n   *           ^\n   * ```\n   *\n   * @type {State}\n   */\n  function resourceBetween(code) {\n    if (code === 34 || code === 39 || code === 40) {\n      return factoryTitle(effects, resourceTitleAfter, nok, \"resourceTitle\", \"resourceTitleMarker\", \"resourceTitleString\")(code);\n    }\n    return resourceEnd(code);\n  }\n\n  /**\n   * In resource, after title, at optional whitespace.\n   *\n   * ```markdown\n   * > | [a](b \"c\") d\n   *              ^\n   * ```\n   *\n   * @type {State}\n   */\n  function resourceTitleAfter(code) {\n    return markdownLineEndingOrSpace(code) ? factoryWhitespace(effects, resourceEnd)(code) : resourceEnd(code);\n  }\n\n  /**\n   * In resource, at `)`.\n   *\n   * ```markdown\n   * > | [a](b) d\n   *          ^\n   * ```\n   *\n   * @type {State}\n   */\n  function resourceEnd(code) {\n    if (code === 41) {\n      effects.enter(\"resourceMarker\");\n      effects.consume(code);\n      effects.exit(\"resourceMarker\");\n      effects.exit(\"resource\");\n      return ok;\n    }\n    return nok(code);\n  }\n}\n\n/**\n * @this {TokenizeContext}\n *   Context.\n * @type {Tokenizer}\n */\nfunction tokenizeReferenceFull(effects, ok, nok) {\n  const self = this;\n  return referenceFull;\n\n  /**\n   * In a reference (full), at the `[`.\n   *\n   * ```markdown\n   * > | [a][b] d\n   *        ^\n   * ```\n   *\n   * @type {State}\n   */\n  function referenceFull(code) {\n    return factoryLabel.call(self, effects, referenceFullAfter, referenceFullMissing, \"reference\", \"referenceMarker\", \"referenceString\")(code);\n  }\n\n  /**\n   * In a reference (full), after `]`.\n   *\n   * ```markdown\n   * > | [a][b] d\n   *          ^\n   * ```\n   *\n   * @type {State}\n   */\n  function referenceFullAfter(code) {\n    return self.parser.defined.includes(normalizeIdentifier(self.sliceSerialize(self.events[self.events.length - 1][1]).slice(1, -1))) ? ok(code) : nok(code);\n  }\n\n  /**\n   * In reference (full) that was missing.\n   *\n   * ```markdown\n   * > | [a][b d\n   *        ^\n   * ```\n   *\n   * @type {State}\n   */\n  function referenceFullMissing(code) {\n    return nok(code);\n  }\n}\n\n/**\n * @this {TokenizeContext}\n *   Context.\n * @type {Tokenizer}\n */\nfunction tokenizeReferenceCollapsed(effects, ok, nok) {\n  return referenceCollapsedStart;\n\n  /**\n   * In reference (collapsed), at `[`.\n   *\n   * > 👉 **Note**: we only get here if the label is defined.\n   *\n   * ```markdown\n   * > | [a][] d\n   *        ^\n   * ```\n   *\n   * @type {State}\n   */\n  function referenceCollapsedStart(code) {\n    // We only attempt a collapsed label if there’s a `[`.\n\n    effects.enter(\"reference\");\n    effects.enter(\"referenceMarker\");\n    effects.consume(code);\n    effects.exit(\"referenceMarker\");\n    return referenceCollapsedOpen;\n  }\n\n  /**\n   * In reference (collapsed), at `]`.\n   *\n   * > 👉 **Note**: we only get here if the label is defined.\n   *\n   * ```markdown\n   * > | [a][] d\n   *         ^\n   * ```\n   *\n   *  @type {State}\n   */\n  function referenceCollapsedOpen(code) {\n    if (code === 93) {\n      effects.enter(\"referenceMarker\");\n      effects.consume(code);\n      effects.exit(\"referenceMarker\");\n      effects.exit(\"reference\");\n      return ok;\n    }\n    return nok(code);\n  }\n}","/**\n * @import {\n *   Construct,\n *   State,\n *   TokenizeContext,\n *   Tokenizer\n * } from 'micromark-util-types'\n */\n\nimport { labelEnd } from './label-end.js';\n\n/** @type {Construct} */\nexport const labelStartImage = {\n  name: 'labelStartImage',\n  resolveAll: labelEnd.resolveAll,\n  tokenize: tokenizeLabelStartImage\n};\n\n/**\n * @this {TokenizeContext}\n *   Context.\n * @type {Tokenizer}\n */\nfunction tokenizeLabelStartImage(effects, ok, nok) {\n  const self = this;\n  return start;\n\n  /**\n   * Start of label (image) start.\n   *\n   * ```markdown\n   * > | a ![b] c\n   *       ^\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    effects.enter(\"labelImage\");\n    effects.enter(\"labelImageMarker\");\n    effects.consume(code);\n    effects.exit(\"labelImageMarker\");\n    return open;\n  }\n\n  /**\n   * After `!`, at `[`.\n   *\n   * ```markdown\n   * > | a ![b] c\n   *        ^\n   * ```\n   *\n   * @type {State}\n   */\n  function open(code) {\n    if (code === 91) {\n      effects.enter(\"labelMarker\");\n      effects.consume(code);\n      effects.exit(\"labelMarker\");\n      effects.exit(\"labelImage\");\n      return after;\n    }\n    return nok(code);\n  }\n\n  /**\n   * After `![`.\n   *\n   * ```markdown\n   * > | a ![b] c\n   *         ^\n   * ```\n   *\n   * This is needed in because, when GFM footnotes are enabled, images never\n   * form when started with a `^`.\n   * Instead, links form:\n   *\n   * ```markdown\n   * ![^a](b)\n   *\n   * ![^a][b]\n   *\n   * [b]: c\n   * ```\n   *\n   * ```html\n   * <p>!<a href=\\\"b\\\">^a</a></p>\n   * <p>!<a href=\\\"c\\\">^a</a></p>\n   * ```\n   *\n   * @type {State}\n   */\n  function after(code) {\n    // To do: use a new field to do this, this is still needed for\n    // `micromark-extension-gfm-footnote`, but the `label-start-link`\n    // behavior isn’t.\n    // Hidden footnotes hook.\n    /* c8 ignore next 3 */\n    return code === 94 && '_hiddenFootnoteSupport' in self.parser.constructs ? nok(code) : ok(code);\n  }\n}","/**\n * @import {\n *   Construct,\n *   State,\n *   TokenizeContext,\n *   Tokenizer\n * } from 'micromark-util-types'\n */\n\nimport { labelEnd } from './label-end.js';\n\n/** @type {Construct} */\nexport const labelStartLink = {\n  name: 'labelStartLink',\n  resolveAll: labelEnd.resolveAll,\n  tokenize: tokenizeLabelStartLink\n};\n\n/**\n * @this {TokenizeContext}\n *   Context.\n * @type {Tokenizer}\n */\nfunction tokenizeLabelStartLink(effects, ok, nok) {\n  const self = this;\n  return start;\n\n  /**\n   * Start of label (link) start.\n   *\n   * ```markdown\n   * > | a [b] c\n   *       ^\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    effects.enter(\"labelLink\");\n    effects.enter(\"labelMarker\");\n    effects.consume(code);\n    effects.exit(\"labelMarker\");\n    effects.exit(\"labelLink\");\n    return after;\n  }\n\n  /** @type {State} */\n  function after(code) {\n    // To do: this isn’t needed in `micromark-extension-gfm-footnote`,\n    // remove.\n    // Hidden footnotes hook.\n    /* c8 ignore next 3 */\n    return code === 94 && '_hiddenFootnoteSupport' in self.parser.constructs ? nok(code) : ok(code);\n  }\n}","/**\n * @import {\n *   Construct,\n *   State,\n *   TokenizeContext,\n *   Tokenizer\n * } from 'micromark-util-types'\n */\n\nimport { factorySpace } from 'micromark-factory-space';\nimport { markdownLineEnding } from 'micromark-util-character';\n/** @type {Construct} */\nexport const lineEnding = {\n  name: 'lineEnding',\n  tokenize: tokenizeLineEnding\n};\n\n/**\n * @this {TokenizeContext}\n *   Context.\n * @type {Tokenizer}\n */\nfunction tokenizeLineEnding(effects, ok) {\n  return start;\n\n  /** @type {State} */\n  function start(code) {\n    effects.enter(\"lineEnding\");\n    effects.consume(code);\n    effects.exit(\"lineEnding\");\n    return factorySpace(effects, ok, \"linePrefix\");\n  }\n}","/**\n * @import {\n *   Code,\n *   Construct,\n *   State,\n *   TokenizeContext,\n *   Tokenizer\n * } from 'micromark-util-types'\n */\n\nimport { factorySpace } from 'micromark-factory-space';\nimport { markdownLineEnding, markdownSpace } from 'micromark-util-character';\n/** @type {Construct} */\nexport const thematicBreak = {\n  name: 'thematicBreak',\n  tokenize: tokenizeThematicBreak\n};\n\n/**\n * @this {TokenizeContext}\n *   Context.\n * @type {Tokenizer}\n */\nfunction tokenizeThematicBreak(effects, ok, nok) {\n  let size = 0;\n  /** @type {NonNullable<Code>} */\n  let marker;\n  return start;\n\n  /**\n   * Start of thematic break.\n   *\n   * ```markdown\n   * > | ***\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    effects.enter(\"thematicBreak\");\n    // To do: parse indent like `markdown-rs`.\n    return before(code);\n  }\n\n  /**\n   * After optional whitespace, at marker.\n   *\n   * ```markdown\n   * > | ***\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function before(code) {\n    marker = code;\n    return atBreak(code);\n  }\n\n  /**\n   * After something, before something else.\n   *\n   * ```markdown\n   * > | ***\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function atBreak(code) {\n    if (code === marker) {\n      effects.enter(\"thematicBreakSequence\");\n      return sequence(code);\n    }\n    if (size >= 3 && (code === null || markdownLineEnding(code))) {\n      effects.exit(\"thematicBreak\");\n      return ok(code);\n    }\n    return nok(code);\n  }\n\n  /**\n   * In sequence.\n   *\n   * ```markdown\n   * > | ***\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function sequence(code) {\n    if (code === marker) {\n      effects.consume(code);\n      size++;\n      return sequence;\n    }\n    effects.exit(\"thematicBreakSequence\");\n    return markdownSpace(code) ? factorySpace(effects, atBreak, \"whitespace\")(code) : atBreak(code);\n  }\n}","/**\n * @import {\n *   Code,\n *   Construct,\n *   Exiter,\n *   State,\n *   TokenizeContext,\n *   Tokenizer\n * } from 'micromark-util-types'\n */\n\nimport { factorySpace } from 'micromark-factory-space';\nimport { asciiDigit, markdownSpace } from 'micromark-util-character';\nimport { blankLine } from './blank-line.js';\nimport { thematicBreak } from './thematic-break.js';\n\n/** @type {Construct} */\nexport const list = {\n  continuation: {\n    tokenize: tokenizeListContinuation\n  },\n  exit: tokenizeListEnd,\n  name: 'list',\n  tokenize: tokenizeListStart\n};\n\n/** @type {Construct} */\nconst listItemPrefixWhitespaceConstruct = {\n  partial: true,\n  tokenize: tokenizeListItemPrefixWhitespace\n};\n\n/** @type {Construct} */\nconst indentConstruct = {\n  partial: true,\n  tokenize: tokenizeIndent\n};\n\n// To do: `markdown-rs` parses list items on their own and later stitches them\n// together.\n\n/**\n * @this {TokenizeContext}\n *   Context.\n * @type {Tokenizer}\n */\nfunction tokenizeListStart(effects, ok, nok) {\n  const self = this;\n  const tail = self.events[self.events.length - 1];\n  let initialSize = tail && tail[1].type === \"linePrefix\" ? tail[2].sliceSerialize(tail[1], true).length : 0;\n  let size = 0;\n  return start;\n\n  /** @type {State} */\n  function start(code) {\n    const kind = self.containerState.type || (code === 42 || code === 43 || code === 45 ? \"listUnordered\" : \"listOrdered\");\n    if (kind === \"listUnordered\" ? !self.containerState.marker || code === self.containerState.marker : asciiDigit(code)) {\n      if (!self.containerState.type) {\n        self.containerState.type = kind;\n        effects.enter(kind, {\n          _container: true\n        });\n      }\n      if (kind === \"listUnordered\") {\n        effects.enter(\"listItemPrefix\");\n        return code === 42 || code === 45 ? effects.check(thematicBreak, nok, atMarker)(code) : atMarker(code);\n      }\n      if (!self.interrupt || code === 49) {\n        effects.enter(\"listItemPrefix\");\n        effects.enter(\"listItemValue\");\n        return inside(code);\n      }\n    }\n    return nok(code);\n  }\n\n  /** @type {State} */\n  function inside(code) {\n    if (asciiDigit(code) && ++size < 10) {\n      effects.consume(code);\n      return inside;\n    }\n    if ((!self.interrupt || size < 2) && (self.containerState.marker ? code === self.containerState.marker : code === 41 || code === 46)) {\n      effects.exit(\"listItemValue\");\n      return atMarker(code);\n    }\n    return nok(code);\n  }\n\n  /**\n   * @type {State}\n   **/\n  function atMarker(code) {\n    effects.enter(\"listItemMarker\");\n    effects.consume(code);\n    effects.exit(\"listItemMarker\");\n    self.containerState.marker = self.containerState.marker || code;\n    return effects.check(blankLine,\n    // Can’t be empty when interrupting.\n    self.interrupt ? nok : onBlank, effects.attempt(listItemPrefixWhitespaceConstruct, endOfPrefix, otherPrefix));\n  }\n\n  /** @type {State} */\n  function onBlank(code) {\n    self.containerState.initialBlankLine = true;\n    initialSize++;\n    return endOfPrefix(code);\n  }\n\n  /** @type {State} */\n  function otherPrefix(code) {\n    if (markdownSpace(code)) {\n      effects.enter(\"listItemPrefixWhitespace\");\n      effects.consume(code);\n      effects.exit(\"listItemPrefixWhitespace\");\n      return endOfPrefix;\n    }\n    return nok(code);\n  }\n\n  /** @type {State} */\n  function endOfPrefix(code) {\n    self.containerState.size = initialSize + self.sliceSerialize(effects.exit(\"listItemPrefix\"), true).length;\n    return ok(code);\n  }\n}\n\n/**\n * @this {TokenizeContext}\n *   Context.\n * @type {Tokenizer}\n */\nfunction tokenizeListContinuation(effects, ok, nok) {\n  const self = this;\n  self.containerState._closeFlow = undefined;\n  return effects.check(blankLine, onBlank, notBlank);\n\n  /** @type {State} */\n  function onBlank(code) {\n    self.containerState.furtherBlankLines = self.containerState.furtherBlankLines || self.containerState.initialBlankLine;\n\n    // We have a blank line.\n    // Still, try to consume at most the items size.\n    return factorySpace(effects, ok, \"listItemIndent\", self.containerState.size + 1)(code);\n  }\n\n  /** @type {State} */\n  function notBlank(code) {\n    if (self.containerState.furtherBlankLines || !markdownSpace(code)) {\n      self.containerState.furtherBlankLines = undefined;\n      self.containerState.initialBlankLine = undefined;\n      return notInCurrentItem(code);\n    }\n    self.containerState.furtherBlankLines = undefined;\n    self.containerState.initialBlankLine = undefined;\n    return effects.attempt(indentConstruct, ok, notInCurrentItem)(code);\n  }\n\n  /** @type {State} */\n  function notInCurrentItem(code) {\n    // While we do continue, we signal that the flow should be closed.\n    self.containerState._closeFlow = true;\n    // As we’re closing flow, we’re no longer interrupting.\n    self.interrupt = undefined;\n    // Always populated by defaults.\n\n    return factorySpace(effects, effects.attempt(list, ok, nok), \"linePrefix\", self.parser.constructs.disable.null.includes('codeIndented') ? undefined : 4)(code);\n  }\n}\n\n/**\n * @this {TokenizeContext}\n *   Context.\n * @type {Tokenizer}\n */\nfunction tokenizeIndent(effects, ok, nok) {\n  const self = this;\n  return factorySpace(effects, afterPrefix, \"listItemIndent\", self.containerState.size + 1);\n\n  /** @type {State} */\n  function afterPrefix(code) {\n    const tail = self.events[self.events.length - 1];\n    return tail && tail[1].type === \"listItemIndent\" && tail[2].sliceSerialize(tail[1], true).length === self.containerState.size ? ok(code) : nok(code);\n  }\n}\n\n/**\n * @this {TokenizeContext}\n *   Context.\n * @type {Exiter}\n */\nfunction tokenizeListEnd(effects) {\n  effects.exit(this.containerState.type);\n}\n\n/**\n * @this {TokenizeContext}\n *   Context.\n * @type {Tokenizer}\n */\nfunction tokenizeListItemPrefixWhitespace(effects, ok, nok) {\n  const self = this;\n\n  // Always populated by defaults.\n\n  return factorySpace(effects, afterPrefix, \"listItemPrefixWhitespace\", self.parser.constructs.disable.null.includes('codeIndented') ? undefined : 4 + 1);\n\n  /** @type {State} */\n  function afterPrefix(code) {\n    const tail = self.events[self.events.length - 1];\n    return !markdownSpace(code) && tail && tail[1].type === \"listItemPrefixWhitespace\" ? ok(code) : nok(code);\n  }\n}","/**\n * @import {\n *   Code,\n *   Construct,\n *   Resolver,\n *   State,\n *   TokenizeContext,\n *   Tokenizer\n * } from 'micromark-util-types'\n */\n\nimport { factorySpace } from 'micromark-factory-space';\nimport { markdownLineEnding, markdownSpace } from 'micromark-util-character';\n/** @type {Construct} */\nexport const setextUnderline = {\n  name: 'setextUnderline',\n  resolveTo: resolveToSetextUnderline,\n  tokenize: tokenizeSetextUnderline\n};\n\n/** @type {Resolver} */\nfunction resolveToSetextUnderline(events, context) {\n  // To do: resolve like `markdown-rs`.\n  let index = events.length;\n  /** @type {number | undefined} */\n  let content;\n  /** @type {number | undefined} */\n  let text;\n  /** @type {number | undefined} */\n  let definition;\n\n  // Find the opening of the content.\n  // It’ll always exist: we don’t tokenize if it isn’t there.\n  while (index--) {\n    if (events[index][0] === 'enter') {\n      if (events[index][1].type === \"content\") {\n        content = index;\n        break;\n      }\n      if (events[index][1].type === \"paragraph\") {\n        text = index;\n      }\n    }\n    // Exit\n    else {\n      if (events[index][1].type === \"content\") {\n        // Remove the content end (if needed we’ll add it later)\n        events.splice(index, 1);\n      }\n      if (!definition && events[index][1].type === \"definition\") {\n        definition = index;\n      }\n    }\n  }\n  const heading = {\n    type: \"setextHeading\",\n    start: {\n      ...events[content][1].start\n    },\n    end: {\n      ...events[events.length - 1][1].end\n    }\n  };\n\n  // Change the paragraph to setext heading text.\n  events[text][1].type = \"setextHeadingText\";\n\n  // If we have definitions in the content, we’ll keep on having content,\n  // but we need move it.\n  if (definition) {\n    events.splice(text, 0, ['enter', heading, context]);\n    events.splice(definition + 1, 0, ['exit', events[content][1], context]);\n    events[content][1].end = {\n      ...events[definition][1].end\n    };\n  } else {\n    events[content][1] = heading;\n  }\n\n  // Add the heading exit at the end.\n  events.push(['exit', heading, context]);\n  return events;\n}\n\n/**\n * @this {TokenizeContext}\n *   Context.\n * @type {Tokenizer}\n */\nfunction tokenizeSetextUnderline(effects, ok, nok) {\n  const self = this;\n  /** @type {NonNullable<Code>} */\n  let marker;\n  return start;\n\n  /**\n   * At start of heading (setext) underline.\n   *\n   * ```markdown\n   *   | aa\n   * > | ==\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    let index = self.events.length;\n    /** @type {boolean | undefined} */\n    let paragraph;\n    // Find an opening.\n    while (index--) {\n      // Skip enter/exit of line ending, line prefix, and content.\n      // We can now either have a definition or a paragraph.\n      if (self.events[index][1].type !== \"lineEnding\" && self.events[index][1].type !== \"linePrefix\" && self.events[index][1].type !== \"content\") {\n        paragraph = self.events[index][1].type === \"paragraph\";\n        break;\n      }\n    }\n\n    // To do: handle lazy/pierce like `markdown-rs`.\n    // To do: parse indent like `markdown-rs`.\n    if (!self.parser.lazy[self.now().line] && (self.interrupt || paragraph)) {\n      effects.enter(\"setextHeadingLine\");\n      marker = code;\n      return before(code);\n    }\n    return nok(code);\n  }\n\n  /**\n   * After optional whitespace, at `-` or `=`.\n   *\n   * ```markdown\n   *   | aa\n   * > | ==\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function before(code) {\n    effects.enter(\"setextHeadingLineSequence\");\n    return inside(code);\n  }\n\n  /**\n   * In sequence.\n   *\n   * ```markdown\n   *   | aa\n   * > | ==\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function inside(code) {\n    if (code === marker) {\n      effects.consume(code);\n      return inside;\n    }\n    effects.exit(\"setextHeadingLineSequence\");\n    return markdownSpace(code) ? factorySpace(effects, after, \"lineSuffix\")(code) : after(code);\n  }\n\n  /**\n   * After sequence, after optional whitespace.\n   *\n   * ```markdown\n   *   | aa\n   * > | ==\n   *       ^\n   * ```\n   *\n   * @type {State}\n   */\n  function after(code) {\n    if (code === null || markdownLineEnding(code)) {\n      effects.exit(\"setextHeadingLine\");\n      return ok(code);\n    }\n    return nok(code);\n  }\n}","/**\n * @import {\n *   InitialConstruct,\n *   Initializer,\n *   State,\n *   TokenizeContext\n * } from 'micromark-util-types'\n */\n\nimport { blankLine, content } from 'micromark-core-commonmark';\nimport { factorySpace } from 'micromark-factory-space';\nimport { markdownLineEnding } from 'micromark-util-character';\n/** @type {InitialConstruct} */\nexport const flow = {\n  tokenize: initializeFlow\n};\n\n/**\n * @this {TokenizeContext}\n *   Self.\n * @type {Initializer}\n *   Initializer.\n */\nfunction initializeFlow(effects) {\n  const self = this;\n  const initial = effects.attempt(\n  // Try to parse a blank line.\n  blankLine, atBlankEnding,\n  // Try to parse initial flow (essentially, only code).\n  effects.attempt(this.parser.constructs.flowInitial, afterConstruct, factorySpace(effects, effects.attempt(this.parser.constructs.flow, afterConstruct, effects.attempt(content, afterConstruct)), \"linePrefix\")));\n  return initial;\n\n  /** @type {State} */\n  function atBlankEnding(code) {\n    if (code === null) {\n      effects.consume(code);\n      return;\n    }\n    effects.enter(\"lineEndingBlank\");\n    effects.consume(code);\n    effects.exit(\"lineEndingBlank\");\n    self.currentConstruct = undefined;\n    return initial;\n  }\n\n  /** @type {State} */\n  function afterConstruct(code) {\n    if (code === null) {\n      effects.consume(code);\n      return;\n    }\n    effects.enter(\"lineEnding\");\n    effects.consume(code);\n    effects.exit(\"lineEnding\");\n    self.currentConstruct = undefined;\n    return initial;\n  }\n}","/**\n * @import {\n *   Code,\n *   InitialConstruct,\n *   Initializer,\n *   Resolver,\n *   State,\n *   TokenizeContext\n * } from 'micromark-util-types'\n */\n\nexport const resolver = {\n  resolveAll: createResolver()\n};\nexport const string = initializeFactory('string');\nexport const text = initializeFactory('text');\n\n/**\n * @param {'string' | 'text'} field\n *   Field.\n * @returns {InitialConstruct}\n *   Construct.\n */\nfunction initializeFactory(field) {\n  return {\n    resolveAll: createResolver(field === 'text' ? resolveAllLineSuffixes : undefined),\n    tokenize: initializeText\n  };\n\n  /**\n   * @this {TokenizeContext}\n   *   Context.\n   * @type {Initializer}\n   */\n  function initializeText(effects) {\n    const self = this;\n    const constructs = this.parser.constructs[field];\n    const text = effects.attempt(constructs, start, notText);\n    return start;\n\n    /** @type {State} */\n    function start(code) {\n      return atBreak(code) ? text(code) : notText(code);\n    }\n\n    /** @type {State} */\n    function notText(code) {\n      if (code === null) {\n        effects.consume(code);\n        return;\n      }\n      effects.enter(\"data\");\n      effects.consume(code);\n      return data;\n    }\n\n    /** @type {State} */\n    function data(code) {\n      if (atBreak(code)) {\n        effects.exit(\"data\");\n        return text(code);\n      }\n\n      // Data.\n      effects.consume(code);\n      return data;\n    }\n\n    /**\n     * @param {Code} code\n     *   Code.\n     * @returns {boolean}\n     *   Whether the code is a break.\n     */\n    function atBreak(code) {\n      if (code === null) {\n        return true;\n      }\n      const list = constructs[code];\n      let index = -1;\n      if (list) {\n        // Always populated by defaults.\n\n        while (++index < list.length) {\n          const item = list[index];\n          if (!item.previous || item.previous.call(self, self.previous)) {\n            return true;\n          }\n        }\n      }\n      return false;\n    }\n  }\n}\n\n/**\n * @param {Resolver | undefined} [extraResolver]\n *   Resolver.\n * @returns {Resolver}\n *   Resolver.\n */\nfunction createResolver(extraResolver) {\n  return resolveAllText;\n\n  /** @type {Resolver} */\n  function resolveAllText(events, context) {\n    let index = -1;\n    /** @type {number | undefined} */\n    let enter;\n\n    // A rather boring computation (to merge adjacent `data` events) which\n    // improves mm performance by 29%.\n    while (++index <= events.length) {\n      if (enter === undefined) {\n        if (events[index] && events[index][1].type === \"data\") {\n          enter = index;\n          index++;\n        }\n      } else if (!events[index] || events[index][1].type !== \"data\") {\n        // Don’t do anything if there is one data token.\n        if (index !== enter + 2) {\n          events[enter][1].end = events[index - 1][1].end;\n          events.splice(enter + 2, index - enter - 2);\n          index = enter + 2;\n        }\n        enter = undefined;\n      }\n    }\n    return extraResolver ? extraResolver(events, context) : events;\n  }\n}\n\n/**\n * A rather ugly set of instructions which again looks at chunks in the input\n * stream.\n * The reason to do this here is that it is *much* faster to parse in reverse.\n * And that we can’t hook into `null` to split the line suffix before an EOF.\n * To do: figure out if we can make this into a clean utility, or even in core.\n * As it will be useful for GFMs literal autolink extension (and maybe even\n * tables?)\n *\n * @type {Resolver}\n */\nfunction resolveAllLineSuffixes(events, context) {\n  let eventIndex = 0; // Skip first.\n\n  while (++eventIndex <= events.length) {\n    if ((eventIndex === events.length || events[eventIndex][1].type === \"lineEnding\") && events[eventIndex - 1][1].type === \"data\") {\n      const data = events[eventIndex - 1][1];\n      const chunks = context.sliceStream(data);\n      let index = chunks.length;\n      let bufferIndex = -1;\n      let size = 0;\n      /** @type {boolean | undefined} */\n      let tabs;\n      while (index--) {\n        const chunk = chunks[index];\n        if (typeof chunk === 'string') {\n          bufferIndex = chunk.length;\n          while (chunk.charCodeAt(bufferIndex - 1) === 32) {\n            size++;\n            bufferIndex--;\n          }\n          if (bufferIndex) break;\n          bufferIndex = -1;\n        }\n        // Number\n        else if (chunk === -2) {\n          tabs = true;\n          size++;\n        } else if (chunk === -1) {\n          // Empty\n        } else {\n          // Replacement character, exit.\n          index++;\n          break;\n        }\n      }\n\n      // Allow final trailing whitespace.\n      if (context._contentTypeTextTrailing && eventIndex === events.length) {\n        size = 0;\n      }\n      if (size) {\n        const token = {\n          type: eventIndex === events.length || tabs || size < 2 ? \"lineSuffix\" : \"hardBreakTrailing\",\n          start: {\n            _bufferIndex: index ? bufferIndex : data.start._bufferIndex + bufferIndex,\n            _index: data.start._index + index,\n            line: data.end.line,\n            column: data.end.column - size,\n            offset: data.end.offset - size\n          },\n          end: {\n            ...data.end\n          }\n        };\n        data.end = {\n          ...token.start\n        };\n        if (data.start.offset === data.end.offset) {\n          Object.assign(data, token);\n        } else {\n          events.splice(eventIndex, 0, ['enter', token, context], ['exit', token, context]);\n          eventIndex += 2;\n        }\n      }\n      eventIndex++;\n    }\n  }\n  return events;\n}","/**\n * @import {Extension} from 'micromark-util-types'\n */\n\nimport { attention, autolink, blockQuote, characterEscape, characterReference, codeFenced, codeIndented, codeText, definition, hardBreakEscape, headingAtx, htmlFlow, htmlText, labelEnd, labelStartImage, labelStartLink, lineEnding, list, setextUnderline, thematicBreak } from 'micromark-core-commonmark';\nimport { resolver as resolveText } from './initialize/text.js';\n\n/** @satisfies {Extension['document']} */\nexport const document = {\n  [42]: list,\n  [43]: list,\n  [45]: list,\n  [48]: list,\n  [49]: list,\n  [50]: list,\n  [51]: list,\n  [52]: list,\n  [53]: list,\n  [54]: list,\n  [55]: list,\n  [56]: list,\n  [57]: list,\n  [62]: blockQuote\n};\n\n/** @satisfies {Extension['contentInitial']} */\nexport const contentInitial = {\n  [91]: definition\n};\n\n/** @satisfies {Extension['flowInitial']} */\nexport const flowInitial = {\n  [-2]: codeIndented,\n  [-1]: codeIndented,\n  [32]: codeIndented\n};\n\n/** @satisfies {Extension['flow']} */\nexport const flow = {\n  [35]: headingAtx,\n  [42]: thematicBreak,\n  [45]: [setextUnderline, thematicBreak],\n  [60]: htmlFlow,\n  [61]: setextUnderline,\n  [95]: thematicBreak,\n  [96]: codeFenced,\n  [126]: codeFenced\n};\n\n/** @satisfies {Extension['string']} */\nexport const string = {\n  [38]: characterReference,\n  [92]: characterEscape\n};\n\n/** @satisfies {Extension['text']} */\nexport const text = {\n  [-5]: lineEnding,\n  [-4]: lineEnding,\n  [-3]: lineEnding,\n  [33]: labelStartImage,\n  [38]: characterReference,\n  [42]: attention,\n  [60]: [autolink, htmlText],\n  [91]: labelStartLink,\n  [92]: [hardBreakEscape, characterEscape],\n  [93]: labelEnd,\n  [95]: attention,\n  [96]: codeText\n};\n\n/** @satisfies {Extension['insideSpan']} */\nexport const insideSpan = {\n  null: [attention, resolveText]\n};\n\n/** @satisfies {Extension['attentionMarkers']} */\nexport const attentionMarkers = {\n  null: [42, 95]\n};\n\n/** @satisfies {Extension['disable']} */\nexport const disable = {\n  null: []\n};","/**\n * @import {\n *   Chunk,\n *   Code,\n *   ConstructRecord,\n *   Construct,\n *   Effects,\n *   InitialConstruct,\n *   ParseContext,\n *   Point,\n *   State,\n *   TokenizeContext,\n *   Token\n * } from 'micromark-util-types'\n */\n\n/**\n * @callback Restore\n *   Restore the state.\n * @returns {undefined}\n *   Nothing.\n *\n * @typedef Info\n *   Info.\n * @property {Restore} restore\n *   Restore.\n * @property {number} from\n *   From.\n *\n * @callback ReturnHandle\n *   Handle a successful run.\n * @param {Construct} construct\n *   Construct.\n * @param {Info} info\n *   Info.\n * @returns {undefined}\n *   Nothing.\n */\n\nimport { markdownLineEnding } from 'micromark-util-character';\nimport { push, splice } from 'micromark-util-chunked';\nimport { resolveAll } from 'micromark-util-resolve-all';\n/**\n * Create a tokenizer.\n * Tokenizers deal with one type of data (e.g., containers, flow, text).\n * The parser is the object dealing with it all.\n * `initialize` works like other constructs, except that only its `tokenize`\n * function is used, in which case it doesn’t receive an `ok` or `nok`.\n * `from` can be given to set the point before the first character, although\n * when further lines are indented, they must be set with `defineSkip`.\n *\n * @param {ParseContext} parser\n *   Parser.\n * @param {InitialConstruct} initialize\n *   Construct.\n * @param {Omit<Point, '_bufferIndex' | '_index'> | undefined} [from]\n *   Point (optional).\n * @returns {TokenizeContext}\n *   Context.\n */\nexport function createTokenizer(parser, initialize, from) {\n  /** @type {Point} */\n  let point = {\n    _bufferIndex: -1,\n    _index: 0,\n    line: from && from.line || 1,\n    column: from && from.column || 1,\n    offset: from && from.offset || 0\n  };\n  /** @type {Record<string, number>} */\n  const columnStart = {};\n  /** @type {Array<Construct>} */\n  const resolveAllConstructs = [];\n  /** @type {Array<Chunk>} */\n  let chunks = [];\n  /** @type {Array<Token>} */\n  let stack = [];\n  /** @type {boolean | undefined} */\n  let consumed = true;\n\n  /**\n   * Tools used for tokenizing.\n   *\n   * @type {Effects}\n   */\n  const effects = {\n    attempt: constructFactory(onsuccessfulconstruct),\n    check: constructFactory(onsuccessfulcheck),\n    consume,\n    enter,\n    exit,\n    interrupt: constructFactory(onsuccessfulcheck, {\n      interrupt: true\n    })\n  };\n\n  /**\n   * State and tools for resolving and serializing.\n   *\n   * @type {TokenizeContext}\n   */\n  const context = {\n    code: null,\n    containerState: {},\n    defineSkip,\n    events: [],\n    now,\n    parser,\n    previous: null,\n    sliceSerialize,\n    sliceStream,\n    write\n  };\n\n  /**\n   * The state function.\n   *\n   * @type {State | undefined}\n   */\n  let state = initialize.tokenize.call(context, effects);\n\n  /**\n   * Track which character we expect to be consumed, to catch bugs.\n   *\n   * @type {Code}\n   */\n  let expectedCode;\n  if (initialize.resolveAll) {\n    resolveAllConstructs.push(initialize);\n  }\n  return context;\n\n  /** @type {TokenizeContext['write']} */\n  function write(slice) {\n    chunks = push(chunks, slice);\n    main();\n\n    // Exit if we’re not done, resolve might change stuff.\n    if (chunks[chunks.length - 1] !== null) {\n      return [];\n    }\n    addResult(initialize, 0);\n\n    // Otherwise, resolve, and exit.\n    context.events = resolveAll(resolveAllConstructs, context.events, context);\n    return context.events;\n  }\n\n  //\n  // Tools.\n  //\n\n  /** @type {TokenizeContext['sliceSerialize']} */\n  function sliceSerialize(token, expandTabs) {\n    return serializeChunks(sliceStream(token), expandTabs);\n  }\n\n  /** @type {TokenizeContext['sliceStream']} */\n  function sliceStream(token) {\n    return sliceChunks(chunks, token);\n  }\n\n  /** @type {TokenizeContext['now']} */\n  function now() {\n    // This is a hot path, so we clone manually instead of `Object.assign({}, point)`\n    const {\n      _bufferIndex,\n      _index,\n      line,\n      column,\n      offset\n    } = point;\n    return {\n      _bufferIndex,\n      _index,\n      line,\n      column,\n      offset\n    };\n  }\n\n  /** @type {TokenizeContext['defineSkip']} */\n  function defineSkip(value) {\n    columnStart[value.line] = value.column;\n    accountForPotentialSkip();\n  }\n\n  //\n  // State management.\n  //\n\n  /**\n   * Main loop (note that `_index` and `_bufferIndex` in `point` are modified by\n   * `consume`).\n   * Here is where we walk through the chunks, which either include strings of\n   * several characters, or numerical character codes.\n   * The reason to do this in a loop instead of a call is so the stack can\n   * drain.\n   *\n   * @returns {undefined}\n   *   Nothing.\n   */\n  function main() {\n    /** @type {number} */\n    let chunkIndex;\n    while (point._index < chunks.length) {\n      const chunk = chunks[point._index];\n\n      // If we’re in a buffer chunk, loop through it.\n      if (typeof chunk === 'string') {\n        chunkIndex = point._index;\n        if (point._bufferIndex < 0) {\n          point._bufferIndex = 0;\n        }\n        while (point._index === chunkIndex && point._bufferIndex < chunk.length) {\n          go(chunk.charCodeAt(point._bufferIndex));\n        }\n      } else {\n        go(chunk);\n      }\n    }\n  }\n\n  /**\n   * Deal with one code.\n   *\n   * @param {Code} code\n   *   Code.\n   * @returns {undefined}\n   *   Nothing.\n   */\n  function go(code) {\n    consumed = undefined;\n    expectedCode = code;\n    state = state(code);\n  }\n\n  /** @type {Effects['consume']} */\n  function consume(code) {\n    if (markdownLineEnding(code)) {\n      point.line++;\n      point.column = 1;\n      point.offset += code === -3 ? 2 : 1;\n      accountForPotentialSkip();\n    } else if (code !== -1) {\n      point.column++;\n      point.offset++;\n    }\n\n    // Not in a string chunk.\n    if (point._bufferIndex < 0) {\n      point._index++;\n    } else {\n      point._bufferIndex++;\n\n      // At end of string chunk.\n      if (point._bufferIndex ===\n      // Points w/ non-negative `_bufferIndex` reference\n      // strings.\n      /** @type {string} */\n      chunks[point._index].length) {\n        point._bufferIndex = -1;\n        point._index++;\n      }\n    }\n\n    // Expose the previous character.\n    context.previous = code;\n\n    // Mark as consumed.\n    consumed = true;\n  }\n\n  /** @type {Effects['enter']} */\n  function enter(type, fields) {\n    /** @type {Token} */\n    // @ts-expect-error Patch instead of assign required fields to help GC.\n    const token = fields || {};\n    token.type = type;\n    token.start = now();\n    context.events.push(['enter', token, context]);\n    stack.push(token);\n    return token;\n  }\n\n  /** @type {Effects['exit']} */\n  function exit(type) {\n    const token = stack.pop();\n    token.end = now();\n    context.events.push(['exit', token, context]);\n    return token;\n  }\n\n  /**\n   * Use results.\n   *\n   * @type {ReturnHandle}\n   */\n  function onsuccessfulconstruct(construct, info) {\n    addResult(construct, info.from);\n  }\n\n  /**\n   * Discard results.\n   *\n   * @type {ReturnHandle}\n   */\n  function onsuccessfulcheck(_, info) {\n    info.restore();\n  }\n\n  /**\n   * Factory to attempt/check/interrupt.\n   *\n   * @param {ReturnHandle} onreturn\n   *   Callback.\n   * @param {{interrupt?: boolean | undefined} | undefined} [fields]\n   *   Fields.\n   */\n  function constructFactory(onreturn, fields) {\n    return hook;\n\n    /**\n     * Handle either an object mapping codes to constructs, a list of\n     * constructs, or a single construct.\n     *\n     * @param {Array<Construct> | ConstructRecord | Construct} constructs\n     *   Constructs.\n     * @param {State} returnState\n     *   State.\n     * @param {State | undefined} [bogusState]\n     *   State.\n     * @returns {State}\n     *   State.\n     */\n    function hook(constructs, returnState, bogusState) {\n      /** @type {ReadonlyArray<Construct>} */\n      let listOfConstructs;\n      /** @type {number} */\n      let constructIndex;\n      /** @type {Construct} */\n      let currentConstruct;\n      /** @type {Info} */\n      let info;\n      return Array.isArray(constructs) ? /* c8 ignore next 1 */\n      handleListOfConstructs(constructs) : 'tokenize' in constructs ?\n      // Looks like a construct.\n      handleListOfConstructs([(/** @type {Construct} */constructs)]) : handleMapOfConstructs(constructs);\n\n      /**\n       * Handle a list of construct.\n       *\n       * @param {ConstructRecord} map\n       *   Constructs.\n       * @returns {State}\n       *   State.\n       */\n      function handleMapOfConstructs(map) {\n        return start;\n\n        /** @type {State} */\n        function start(code) {\n          const left = code !== null && map[code];\n          const all = code !== null && map.null;\n          const list = [\n          // To do: add more extension tests.\n          /* c8 ignore next 2 */\n          ...(Array.isArray(left) ? left : left ? [left] : []), ...(Array.isArray(all) ? all : all ? [all] : [])];\n          return handleListOfConstructs(list)(code);\n        }\n      }\n\n      /**\n       * Handle a list of construct.\n       *\n       * @param {ReadonlyArray<Construct>} list\n       *   Constructs.\n       * @returns {State}\n       *   State.\n       */\n      function handleListOfConstructs(list) {\n        listOfConstructs = list;\n        constructIndex = 0;\n        if (list.length === 0) {\n          return bogusState;\n        }\n        return handleConstruct(list[constructIndex]);\n      }\n\n      /**\n       * Handle a single construct.\n       *\n       * @param {Construct} construct\n       *   Construct.\n       * @returns {State}\n       *   State.\n       */\n      function handleConstruct(construct) {\n        return start;\n\n        /** @type {State} */\n        function start(code) {\n          // To do: not needed to store if there is no bogus state, probably?\n          // Currently doesn’t work because `inspect` in document does a check\n          // w/o a bogus, which doesn’t make sense. But it does seem to help perf\n          // by not storing.\n          info = store();\n          currentConstruct = construct;\n          if (!construct.partial) {\n            context.currentConstruct = construct;\n          }\n\n          // Always populated by defaults.\n\n          if (construct.name && context.parser.constructs.disable.null.includes(construct.name)) {\n            return nok(code);\n          }\n          return construct.tokenize.call(\n          // If we do have fields, create an object w/ `context` as its\n          // prototype.\n          // This allows a “live binding”, which is needed for `interrupt`.\n          fields ? Object.assign(Object.create(context), fields) : context, effects, ok, nok)(code);\n        }\n      }\n\n      /** @type {State} */\n      function ok(code) {\n        consumed = true;\n        onreturn(currentConstruct, info);\n        return returnState;\n      }\n\n      /** @type {State} */\n      function nok(code) {\n        consumed = true;\n        info.restore();\n        if (++constructIndex < listOfConstructs.length) {\n          return handleConstruct(listOfConstructs[constructIndex]);\n        }\n        return bogusState;\n      }\n    }\n  }\n\n  /**\n   * @param {Construct} construct\n   *   Construct.\n   * @param {number} from\n   *   From.\n   * @returns {undefined}\n   *   Nothing.\n   */\n  function addResult(construct, from) {\n    if (construct.resolveAll && !resolveAllConstructs.includes(construct)) {\n      resolveAllConstructs.push(construct);\n    }\n    if (construct.resolve) {\n      splice(context.events, from, context.events.length - from, construct.resolve(context.events.slice(from), context));\n    }\n    if (construct.resolveTo) {\n      context.events = construct.resolveTo(context.events, context);\n    }\n  }\n\n  /**\n   * Store state.\n   *\n   * @returns {Info}\n   *   Info.\n   */\n  function store() {\n    const startPoint = now();\n    const startPrevious = context.previous;\n    const startCurrentConstruct = context.currentConstruct;\n    const startEventsIndex = context.events.length;\n    const startStack = Array.from(stack);\n    return {\n      from: startEventsIndex,\n      restore\n    };\n\n    /**\n     * Restore state.\n     *\n     * @returns {undefined}\n     *   Nothing.\n     */\n    function restore() {\n      point = startPoint;\n      context.previous = startPrevious;\n      context.currentConstruct = startCurrentConstruct;\n      context.events.length = startEventsIndex;\n      stack = startStack;\n      accountForPotentialSkip();\n    }\n  }\n\n  /**\n   * Move the current point a bit forward in the line when it’s on a column\n   * skip.\n   *\n   * @returns {undefined}\n   *   Nothing.\n   */\n  function accountForPotentialSkip() {\n    if (point.line in columnStart && point.column < 2) {\n      point.column = columnStart[point.line];\n      point.offset += columnStart[point.line] - 1;\n    }\n  }\n}\n\n/**\n * Get the chunks from a slice of chunks in the range of a token.\n *\n * @param {ReadonlyArray<Chunk>} chunks\n *   Chunks.\n * @param {Pick<Token, 'end' | 'start'>} token\n *   Token.\n * @returns {Array<Chunk>}\n *   Chunks.\n */\nfunction sliceChunks(chunks, token) {\n  const startIndex = token.start._index;\n  const startBufferIndex = token.start._bufferIndex;\n  const endIndex = token.end._index;\n  const endBufferIndex = token.end._bufferIndex;\n  /** @type {Array<Chunk>} */\n  let view;\n  if (startIndex === endIndex) {\n    // @ts-expect-error `_bufferIndex` is used on string chunks.\n    view = [chunks[startIndex].slice(startBufferIndex, endBufferIndex)];\n  } else {\n    view = chunks.slice(startIndex, endIndex);\n    if (startBufferIndex > -1) {\n      const head = view[0];\n      if (typeof head === 'string') {\n        view[0] = head.slice(startBufferIndex);\n        /* c8 ignore next 4 -- used to be used, no longer */\n      } else {\n        view.shift();\n      }\n    }\n    if (endBufferIndex > 0) {\n      // @ts-expect-error `_bufferIndex` is used on string chunks.\n      view.push(chunks[endIndex].slice(0, endBufferIndex));\n    }\n  }\n  return view;\n}\n\n/**\n * Get the string value of a slice of chunks.\n *\n * @param {ReadonlyArray<Chunk>} chunks\n *   Chunks.\n * @param {boolean | undefined} [expandTabs=false]\n *   Whether to expand tabs (default: `false`).\n * @returns {string}\n *   Result.\n */\nfunction serializeChunks(chunks, expandTabs) {\n  let index = -1;\n  /** @type {Array<string>} */\n  const result = [];\n  /** @type {boolean | undefined} */\n  let atTab;\n  while (++index < chunks.length) {\n    const chunk = chunks[index];\n    /** @type {string} */\n    let value;\n    if (typeof chunk === 'string') {\n      value = chunk;\n    } else switch (chunk) {\n      case -5:\n        {\n          value = \"\\r\";\n          break;\n        }\n      case -4:\n        {\n          value = \"\\n\";\n          break;\n        }\n      case -3:\n        {\n          value = \"\\r\" + \"\\n\";\n          break;\n        }\n      case -2:\n        {\n          value = expandTabs ? \" \" : \"\\t\";\n          break;\n        }\n      case -1:\n        {\n          if (!expandTabs && atTab) continue;\n          value = \" \";\n          break;\n        }\n      default:\n        {\n          // Currently only replacement character.\n          value = String.fromCharCode(chunk);\n        }\n    }\n    atTab = chunk === -2;\n    result.push(value);\n  }\n  return result.join('');\n}","/**\n * @import {\n *   Create,\n *   FullNormalizedExtension,\n *   InitialConstruct,\n *   ParseContext,\n *   ParseOptions\n * } from 'micromark-util-types'\n */\n\nimport { combineExtensions } from 'micromark-util-combine-extensions';\nimport { content } from './initialize/content.js';\nimport { document } from './initialize/document.js';\nimport { flow } from './initialize/flow.js';\nimport { string, text } from './initialize/text.js';\nimport * as defaultConstructs from './constructs.js';\nimport { createTokenizer } from './create-tokenizer.js';\n\n/**\n * @param {ParseOptions | null | undefined} [options]\n *   Configuration (optional).\n * @returns {ParseContext}\n *   Parser.\n */\nexport function parse(options) {\n  const settings = options || {};\n  const constructs = /** @type {FullNormalizedExtension} */\n  combineExtensions([defaultConstructs, ...(settings.extensions || [])]);\n\n  /** @type {ParseContext} */\n  const parser = {\n    constructs,\n    content: create(content),\n    defined: [],\n    document: create(document),\n    flow: create(flow),\n    lazy: {},\n    string: create(string),\n    text: create(text)\n  };\n  return parser;\n\n  /**\n   * @param {InitialConstruct} initial\n   *   Construct to start with.\n   * @returns {Create}\n   *   Create a tokenizer.\n   */\n  function create(initial) {\n    return creator;\n    /** @type {Create} */\n    function creator(from) {\n      return createTokenizer(parser, initial, from);\n    }\n  }\n}","/**\n * @import {Event} from 'micromark-util-types'\n */\n\nimport { subtokenize } from 'micromark-util-subtokenize';\n\n/**\n * @param {Array<Event>} events\n *   Events.\n * @returns {Array<Event>}\n *   Events.\n */\nexport function postprocess(events) {\n  while (!subtokenize(events)) {\n    // Empty\n  }\n  return events;\n}","/**\n * @import {Chunk, Code, Encoding, Value} from 'micromark-util-types'\n */\n\n/**\n * @callback Preprocessor\n *   Preprocess a value.\n * @param {Value} value\n *   Value.\n * @param {Encoding | null | undefined} [encoding]\n *   Encoding when `value` is a typed array (optional).\n * @param {boolean | null | undefined} [end=false]\n *   Whether this is the last chunk (default: `false`).\n * @returns {Array<Chunk>}\n *   Chunks.\n */\n\nconst search = /[\\0\\t\\n\\r]/g;\n\n/**\n * @returns {Preprocessor}\n *   Preprocess a value.\n */\nexport function preprocess() {\n  let column = 1;\n  let buffer = '';\n  /** @type {boolean | undefined} */\n  let start = true;\n  /** @type {boolean | undefined} */\n  let atCarriageReturn;\n  return preprocessor;\n\n  /** @type {Preprocessor} */\n  // eslint-disable-next-line complexity\n  function preprocessor(value, encoding, end) {\n    /** @type {Array<Chunk>} */\n    const chunks = [];\n    /** @type {RegExpMatchArray | null} */\n    let match;\n    /** @type {number} */\n    let next;\n    /** @type {number} */\n    let startPosition;\n    /** @type {number} */\n    let endPosition;\n    /** @type {Code} */\n    let code;\n    value = buffer + (typeof value === 'string' ? value.toString() : new TextDecoder(encoding || undefined).decode(value));\n    startPosition = 0;\n    buffer = '';\n    if (start) {\n      // To do: `markdown-rs` actually parses BOMs (byte order mark).\n      if (value.charCodeAt(0) === 65279) {\n        startPosition++;\n      }\n      start = undefined;\n    }\n    while (startPosition < value.length) {\n      search.lastIndex = startPosition;\n      match = search.exec(value);\n      endPosition = match && match.index !== undefined ? match.index : value.length;\n      code = value.charCodeAt(endPosition);\n      if (!match) {\n        buffer = value.slice(startPosition);\n        break;\n      }\n      if (code === 10 && startPosition === endPosition && atCarriageReturn) {\n        chunks.push(-3);\n        atCarriageReturn = undefined;\n      } else {\n        if (atCarriageReturn) {\n          chunks.push(-5);\n          atCarriageReturn = undefined;\n        }\n        if (startPosition < endPosition) {\n          chunks.push(value.slice(startPosition, endPosition));\n          column += endPosition - startPosition;\n        }\n        switch (code) {\n          case 0:\n            {\n              chunks.push(65533);\n              column++;\n              break;\n            }\n          case 9:\n            {\n              next = Math.ceil(column / 4) * 4;\n              chunks.push(-2);\n              while (column++ < next) chunks.push(-1);\n              break;\n            }\n          case 10:\n            {\n              chunks.push(-4);\n              column = 1;\n              break;\n            }\n          default:\n            {\n              atCarriageReturn = true;\n              column = 1;\n            }\n        }\n      }\n      startPosition = endPosition + 1;\n    }\n    if (end) {\n      if (atCarriageReturn) chunks.push(-5);\n      if (buffer) chunks.push(buffer);\n      chunks.push(null);\n    }\n    return chunks;\n  }\n}","import { decodeNamedCharacterReference } from 'decode-named-character-reference';\nimport { decodeNumericCharacterReference } from 'micromark-util-decode-numeric-character-reference';\nconst characterEscapeOrReference = /\\\\([!-/:-@[-`{-~])|&(#(?:\\d{1,7}|x[\\da-f]{1,6})|[\\da-z]{1,31});/gi;\n\n/**\n * Decode markdown strings (which occur in places such as fenced code info\n * strings, destinations, labels, and titles).\n *\n * The “string” content type allows character escapes and -references.\n * This decodes those.\n *\n * @param {string} value\n *   Value to decode.\n * @returns {string}\n *   Decoded value.\n */\nexport function decodeString(value) {\n  return value.replace(characterEscapeOrReference, decode);\n}\n\n/**\n * @param {string} $0\n *   Match.\n * @param {string} $1\n *   Character escape.\n * @param {string} $2\n *   Character reference.\n * @returns {string}\n *   Decoded value\n */\nfunction decode($0, $1, $2) {\n  if ($1) {\n    // Escape.\n    return $1;\n  }\n\n  // Reference.\n  const head = $2.charCodeAt(0);\n  if (head === 35) {\n    const head = $2.charCodeAt(1);\n    const hex = head === 120 || head === 88;\n    return decodeNumericCharacterReference($2.slice(hex ? 2 : 1), hex ? 16 : 10);\n  }\n  return decodeNamedCharacterReference($2) || $0;\n}","/**\n * @import {\n *   Break,\n *   Blockquote,\n *   Code,\n *   Definition,\n *   Emphasis,\n *   Heading,\n *   Html,\n *   Image,\n *   InlineCode,\n *   Link,\n *   ListItem,\n *   List,\n *   Nodes,\n *   Paragraph,\n *   PhrasingContent,\n *   ReferenceType,\n *   Root,\n *   Strong,\n *   Text,\n *   ThematicBreak\n * } from 'mdast'\n * @import {\n *   Encoding,\n *   Event,\n *   Token,\n *   Value\n * } from 'micromark-util-types'\n * @import {Point} from 'unist'\n * @import {\n *   CompileContext,\n *   CompileData,\n *   Config,\n *   Extension,\n *   Handle,\n *   OnEnterError,\n *   Options\n * } from './types.js'\n */\n\nimport { toString } from 'mdast-util-to-string';\nimport { parse, postprocess, preprocess } from 'micromark';\nimport { decodeNumericCharacterReference } from 'micromark-util-decode-numeric-character-reference';\nimport { decodeString } from 'micromark-util-decode-string';\nimport { normalizeIdentifier } from 'micromark-util-normalize-identifier';\nimport { decodeNamedCharacterReference } from 'decode-named-character-reference';\nimport { stringifyPosition } from 'unist-util-stringify-position';\nconst own = {}.hasOwnProperty;\n\n/**\n * Turn markdown into a syntax tree.\n *\n * @overload\n * @param {Value} value\n * @param {Encoding | null | undefined} [encoding]\n * @param {Options | null | undefined} [options]\n * @returns {Root}\n *\n * @overload\n * @param {Value} value\n * @param {Options | null | undefined} [options]\n * @returns {Root}\n *\n * @param {Value} value\n *   Markdown to parse.\n * @param {Encoding | Options | null | undefined} [encoding]\n *   Character encoding for when `value` is `Buffer`.\n * @param {Options | null | undefined} [options]\n *   Configuration.\n * @returns {Root}\n *   mdast tree.\n */\nexport function fromMarkdown(value, encoding, options) {\n  if (encoding && typeof encoding === 'object') {\n    options = encoding;\n    encoding = undefined;\n  }\n  return compiler(options)(postprocess(parse(options).document().write(preprocess()(value, encoding, true))));\n}\n\n/**\n * Note this compiler only understand complete buffering, not streaming.\n *\n * @param {Options | null | undefined} [options]\n */\nfunction compiler(options) {\n  /** @type {Config} */\n  const config = {\n    transforms: [],\n    canContainEols: ['emphasis', 'fragment', 'heading', 'paragraph', 'strong'],\n    enter: {\n      autolink: opener(link),\n      autolinkProtocol: onenterdata,\n      autolinkEmail: onenterdata,\n      atxHeading: opener(heading),\n      blockQuote: opener(blockQuote),\n      characterEscape: onenterdata,\n      characterReference: onenterdata,\n      codeFenced: opener(codeFlow),\n      codeFencedFenceInfo: buffer,\n      codeFencedFenceMeta: buffer,\n      codeIndented: opener(codeFlow, buffer),\n      codeText: opener(codeText, buffer),\n      codeTextData: onenterdata,\n      data: onenterdata,\n      codeFlowValue: onenterdata,\n      definition: opener(definition),\n      definitionDestinationString: buffer,\n      definitionLabelString: buffer,\n      definitionTitleString: buffer,\n      emphasis: opener(emphasis),\n      hardBreakEscape: opener(hardBreak),\n      hardBreakTrailing: opener(hardBreak),\n      htmlFlow: opener(html, buffer),\n      htmlFlowData: onenterdata,\n      htmlText: opener(html, buffer),\n      htmlTextData: onenterdata,\n      image: opener(image),\n      label: buffer,\n      link: opener(link),\n      listItem: opener(listItem),\n      listItemValue: onenterlistitemvalue,\n      listOrdered: opener(list, onenterlistordered),\n      listUnordered: opener(list),\n      paragraph: opener(paragraph),\n      reference: onenterreference,\n      referenceString: buffer,\n      resourceDestinationString: buffer,\n      resourceTitleString: buffer,\n      setextHeading: opener(heading),\n      strong: opener(strong),\n      thematicBreak: opener(thematicBreak)\n    },\n    exit: {\n      atxHeading: closer(),\n      atxHeadingSequence: onexitatxheadingsequence,\n      autolink: closer(),\n      autolinkEmail: onexitautolinkemail,\n      autolinkProtocol: onexitautolinkprotocol,\n      blockQuote: closer(),\n      characterEscapeValue: onexitdata,\n      characterReferenceMarkerHexadecimal: onexitcharacterreferencemarker,\n      characterReferenceMarkerNumeric: onexitcharacterreferencemarker,\n      characterReferenceValue: onexitcharacterreferencevalue,\n      characterReference: onexitcharacterreference,\n      codeFenced: closer(onexitcodefenced),\n      codeFencedFence: onexitcodefencedfence,\n      codeFencedFenceInfo: onexitcodefencedfenceinfo,\n      codeFencedFenceMeta: onexitcodefencedfencemeta,\n      codeFlowValue: onexitdata,\n      codeIndented: closer(onexitcodeindented),\n      codeText: closer(onexitcodetext),\n      codeTextData: onexitdata,\n      data: onexitdata,\n      definition: closer(),\n      definitionDestinationString: onexitdefinitiondestinationstring,\n      definitionLabelString: onexitdefinitionlabelstring,\n      definitionTitleString: onexitdefinitiontitlestring,\n      emphasis: closer(),\n      hardBreakEscape: closer(onexithardbreak),\n      hardBreakTrailing: closer(onexithardbreak),\n      htmlFlow: closer(onexithtmlflow),\n      htmlFlowData: onexitdata,\n      htmlText: closer(onexithtmltext),\n      htmlTextData: onexitdata,\n      image: closer(onexitimage),\n      label: onexitlabel,\n      labelText: onexitlabeltext,\n      lineEnding: onexitlineending,\n      link: closer(onexitlink),\n      listItem: closer(),\n      listOrdered: closer(),\n      listUnordered: closer(),\n      paragraph: closer(),\n      referenceString: onexitreferencestring,\n      resourceDestinationString: onexitresourcedestinationstring,\n      resourceTitleString: onexitresourcetitlestring,\n      resource: onexitresource,\n      setextHeading: closer(onexitsetextheading),\n      setextHeadingLineSequence: onexitsetextheadinglinesequence,\n      setextHeadingText: onexitsetextheadingtext,\n      strong: closer(),\n      thematicBreak: closer()\n    }\n  };\n  configure(config, (options || {}).mdastExtensions || []);\n\n  /** @type {CompileData} */\n  const data = {};\n  return compile;\n\n  /**\n   * Turn micromark events into an mdast tree.\n   *\n   * @param {Array<Event>} events\n   *   Events.\n   * @returns {Root}\n   *   mdast tree.\n   */\n  function compile(events) {\n    /** @type {Root} */\n    let tree = {\n      type: 'root',\n      children: []\n    };\n    /** @type {Omit<CompileContext, 'sliceSerialize'>} */\n    const context = {\n      stack: [tree],\n      tokenStack: [],\n      config,\n      enter,\n      exit,\n      buffer,\n      resume,\n      data\n    };\n    /** @type {Array<number>} */\n    const listStack = [];\n    let index = -1;\n    while (++index < events.length) {\n      // We preprocess lists to add `listItem` tokens, and to infer whether\n      // items the list itself are spread out.\n      if (events[index][1].type === \"listOrdered\" || events[index][1].type === \"listUnordered\") {\n        if (events[index][0] === 'enter') {\n          listStack.push(index);\n        } else {\n          const tail = listStack.pop();\n          index = prepareList(events, tail, index);\n        }\n      }\n    }\n    index = -1;\n    while (++index < events.length) {\n      const handler = config[events[index][0]];\n      if (own.call(handler, events[index][1].type)) {\n        handler[events[index][1].type].call(Object.assign({\n          sliceSerialize: events[index][2].sliceSerialize\n        }, context), events[index][1]);\n      }\n    }\n\n    // Handle tokens still being open.\n    if (context.tokenStack.length > 0) {\n      const tail = context.tokenStack[context.tokenStack.length - 1];\n      const handler = tail[1] || defaultOnError;\n      handler.call(context, undefined, tail[0]);\n    }\n\n    // Figure out `root` position.\n    tree.position = {\n      start: point(events.length > 0 ? events[0][1].start : {\n        line: 1,\n        column: 1,\n        offset: 0\n      }),\n      end: point(events.length > 0 ? events[events.length - 2][1].end : {\n        line: 1,\n        column: 1,\n        offset: 0\n      })\n    };\n\n    // Call transforms.\n    index = -1;\n    while (++index < config.transforms.length) {\n      tree = config.transforms[index](tree) || tree;\n    }\n    return tree;\n  }\n\n  /**\n   * @param {Array<Event>} events\n   * @param {number} start\n   * @param {number} length\n   * @returns {number}\n   */\n  function prepareList(events, start, length) {\n    let index = start - 1;\n    let containerBalance = -1;\n    let listSpread = false;\n    /** @type {Token | undefined} */\n    let listItem;\n    /** @type {number | undefined} */\n    let lineIndex;\n    /** @type {number | undefined} */\n    let firstBlankLineIndex;\n    /** @type {boolean | undefined} */\n    let atMarker;\n    while (++index <= length) {\n      const event = events[index];\n      switch (event[1].type) {\n        case \"listUnordered\":\n        case \"listOrdered\":\n        case \"blockQuote\":\n          {\n            if (event[0] === 'enter') {\n              containerBalance++;\n            } else {\n              containerBalance--;\n            }\n            atMarker = undefined;\n            break;\n          }\n        case \"lineEndingBlank\":\n          {\n            if (event[0] === 'enter') {\n              if (listItem && !atMarker && !containerBalance && !firstBlankLineIndex) {\n                firstBlankLineIndex = index;\n              }\n              atMarker = undefined;\n            }\n            break;\n          }\n        case \"linePrefix\":\n        case \"listItemValue\":\n        case \"listItemMarker\":\n        case \"listItemPrefix\":\n        case \"listItemPrefixWhitespace\":\n          {\n            // Empty.\n\n            break;\n          }\n        default:\n          {\n            atMarker = undefined;\n          }\n      }\n      if (!containerBalance && event[0] === 'enter' && event[1].type === \"listItemPrefix\" || containerBalance === -1 && event[0] === 'exit' && (event[1].type === \"listUnordered\" || event[1].type === \"listOrdered\")) {\n        if (listItem) {\n          let tailIndex = index;\n          lineIndex = undefined;\n          while (tailIndex--) {\n            const tailEvent = events[tailIndex];\n            if (tailEvent[1].type === \"lineEnding\" || tailEvent[1].type === \"lineEndingBlank\") {\n              if (tailEvent[0] === 'exit') continue;\n              if (lineIndex) {\n                events[lineIndex][1].type = \"lineEndingBlank\";\n                listSpread = true;\n              }\n              tailEvent[1].type = \"lineEnding\";\n              lineIndex = tailIndex;\n            } else if (tailEvent[1].type === \"linePrefix\" || tailEvent[1].type === \"blockQuotePrefix\" || tailEvent[1].type === \"blockQuotePrefixWhitespace\" || tailEvent[1].type === \"blockQuoteMarker\" || tailEvent[1].type === \"listItemIndent\") {\n              // Empty\n            } else {\n              break;\n            }\n          }\n          if (firstBlankLineIndex && (!lineIndex || firstBlankLineIndex < lineIndex)) {\n            listItem._spread = true;\n          }\n\n          // Fix position.\n          listItem.end = Object.assign({}, lineIndex ? events[lineIndex][1].start : event[1].end);\n          events.splice(lineIndex || index, 0, ['exit', listItem, event[2]]);\n          index++;\n          length++;\n        }\n\n        // Create a new list item.\n        if (event[1].type === \"listItemPrefix\") {\n          /** @type {Token} */\n          const item = {\n            type: 'listItem',\n            _spread: false,\n            start: Object.assign({}, event[1].start),\n            // @ts-expect-error: we’ll add `end` in a second.\n            end: undefined\n          };\n          listItem = item;\n          events.splice(index, 0, ['enter', item, event[2]]);\n          index++;\n          length++;\n          firstBlankLineIndex = undefined;\n          atMarker = true;\n        }\n      }\n    }\n    events[start][1]._spread = listSpread;\n    return length;\n  }\n\n  /**\n   * Create an opener handle.\n   *\n   * @param {(token: Token) => Nodes} create\n   *   Create a node.\n   * @param {Handle | undefined} [and]\n   *   Optional function to also run.\n   * @returns {Handle}\n   *   Handle.\n   */\n  function opener(create, and) {\n    return open;\n\n    /**\n     * @this {CompileContext}\n     * @param {Token} token\n     * @returns {undefined}\n     */\n    function open(token) {\n      enter.call(this, create(token), token);\n      if (and) and.call(this, token);\n    }\n  }\n\n  /**\n   * @type {CompileContext['buffer']}\n   */\n  function buffer() {\n    this.stack.push({\n      type: 'fragment',\n      children: []\n    });\n  }\n\n  /**\n   * @type {CompileContext['enter']}\n   */\n  function enter(node, token, errorHandler) {\n    const parent = this.stack[this.stack.length - 1];\n    /** @type {Array<Nodes>} */\n    const siblings = parent.children;\n    siblings.push(node);\n    this.stack.push(node);\n    this.tokenStack.push([token, errorHandler || undefined]);\n    node.position = {\n      start: point(token.start),\n      // @ts-expect-error: `end` will be patched later.\n      end: undefined\n    };\n  }\n\n  /**\n   * Create a closer handle.\n   *\n   * @param {Handle | undefined} [and]\n   *   Optional function to also run.\n   * @returns {Handle}\n   *   Handle.\n   */\n  function closer(and) {\n    return close;\n\n    /**\n     * @this {CompileContext}\n     * @param {Token} token\n     * @returns {undefined}\n     */\n    function close(token) {\n      if (and) and.call(this, token);\n      exit.call(this, token);\n    }\n  }\n\n  /**\n   * @type {CompileContext['exit']}\n   */\n  function exit(token, onExitError) {\n    const node = this.stack.pop();\n    const open = this.tokenStack.pop();\n    if (!open) {\n      throw new Error('Cannot close `' + token.type + '` (' + stringifyPosition({\n        start: token.start,\n        end: token.end\n      }) + '): it’s not open');\n    } else if (open[0].type !== token.type) {\n      if (onExitError) {\n        onExitError.call(this, token, open[0]);\n      } else {\n        const handler = open[1] || defaultOnError;\n        handler.call(this, token, open[0]);\n      }\n    }\n    node.position.end = point(token.end);\n  }\n\n  /**\n   * @type {CompileContext['resume']}\n   */\n  function resume() {\n    return toString(this.stack.pop());\n  }\n\n  //\n  // Handlers.\n  //\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n  function onenterlistordered() {\n    this.data.expectingFirstListItemValue = true;\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n  function onenterlistitemvalue(token) {\n    if (this.data.expectingFirstListItemValue) {\n      const ancestor = this.stack[this.stack.length - 2];\n      ancestor.start = Number.parseInt(this.sliceSerialize(token), 10);\n      this.data.expectingFirstListItemValue = undefined;\n    }\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n  function onexitcodefencedfenceinfo() {\n    const data = this.resume();\n    const node = this.stack[this.stack.length - 1];\n    node.lang = data;\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n  function onexitcodefencedfencemeta() {\n    const data = this.resume();\n    const node = this.stack[this.stack.length - 1];\n    node.meta = data;\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n  function onexitcodefencedfence() {\n    // Exit if this is the closing fence.\n    if (this.data.flowCodeInside) return;\n    this.buffer();\n    this.data.flowCodeInside = true;\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n  function onexitcodefenced() {\n    const data = this.resume();\n    const node = this.stack[this.stack.length - 1];\n    node.value = data.replace(/^(\\r?\\n|\\r)|(\\r?\\n|\\r)$/g, '');\n    this.data.flowCodeInside = undefined;\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n  function onexitcodeindented() {\n    const data = this.resume();\n    const node = this.stack[this.stack.length - 1];\n    node.value = data.replace(/(\\r?\\n|\\r)$/g, '');\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n  function onexitdefinitionlabelstring(token) {\n    const label = this.resume();\n    const node = this.stack[this.stack.length - 1];\n    node.label = label;\n    node.identifier = normalizeIdentifier(this.sliceSerialize(token)).toLowerCase();\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n  function onexitdefinitiontitlestring() {\n    const data = this.resume();\n    const node = this.stack[this.stack.length - 1];\n    node.title = data;\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n  function onexitdefinitiondestinationstring() {\n    const data = this.resume();\n    const node = this.stack[this.stack.length - 1];\n    node.url = data;\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n  function onexitatxheadingsequence(token) {\n    const node = this.stack[this.stack.length - 1];\n    if (!node.depth) {\n      const depth = this.sliceSerialize(token).length;\n      node.depth = depth;\n    }\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n  function onexitsetextheadingtext() {\n    this.data.setextHeadingSlurpLineEnding = true;\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n  function onexitsetextheadinglinesequence(token) {\n    const node = this.stack[this.stack.length - 1];\n    node.depth = this.sliceSerialize(token).codePointAt(0) === 61 ? 1 : 2;\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n  function onexitsetextheading() {\n    this.data.setextHeadingSlurpLineEnding = undefined;\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n\n  function onenterdata(token) {\n    const node = this.stack[this.stack.length - 1];\n    /** @type {Array<Nodes>} */\n    const siblings = node.children;\n    let tail = siblings[siblings.length - 1];\n    if (!tail || tail.type !== 'text') {\n      // Add a new text node.\n      tail = text();\n      tail.position = {\n        start: point(token.start),\n        // @ts-expect-error: we’ll add `end` later.\n        end: undefined\n      };\n      siblings.push(tail);\n    }\n    this.stack.push(tail);\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n\n  function onexitdata(token) {\n    const tail = this.stack.pop();\n    tail.value += this.sliceSerialize(token);\n    tail.position.end = point(token.end);\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n\n  function onexitlineending(token) {\n    const context = this.stack[this.stack.length - 1];\n    // If we’re at a hard break, include the line ending in there.\n    if (this.data.atHardBreak) {\n      const tail = context.children[context.children.length - 1];\n      tail.position.end = point(token.end);\n      this.data.atHardBreak = undefined;\n      return;\n    }\n    if (!this.data.setextHeadingSlurpLineEnding && config.canContainEols.includes(context.type)) {\n      onenterdata.call(this, token);\n      onexitdata.call(this, token);\n    }\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n\n  function onexithardbreak() {\n    this.data.atHardBreak = true;\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n\n  function onexithtmlflow() {\n    const data = this.resume();\n    const node = this.stack[this.stack.length - 1];\n    node.value = data;\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n\n  function onexithtmltext() {\n    const data = this.resume();\n    const node = this.stack[this.stack.length - 1];\n    node.value = data;\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n\n  function onexitcodetext() {\n    const data = this.resume();\n    const node = this.stack[this.stack.length - 1];\n    node.value = data;\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n\n  function onexitlink() {\n    const node = this.stack[this.stack.length - 1];\n    // Note: there are also `identifier` and `label` fields on this link node!\n    // These are used / cleaned here.\n\n    // To do: clean.\n    if (this.data.inReference) {\n      /** @type {ReferenceType} */\n      const referenceType = this.data.referenceType || 'shortcut';\n      node.type += 'Reference';\n      // @ts-expect-error: mutate.\n      node.referenceType = referenceType;\n      // @ts-expect-error: mutate.\n      delete node.url;\n      delete node.title;\n    } else {\n      // @ts-expect-error: mutate.\n      delete node.identifier;\n      // @ts-expect-error: mutate.\n      delete node.label;\n    }\n    this.data.referenceType = undefined;\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n\n  function onexitimage() {\n    const node = this.stack[this.stack.length - 1];\n    // Note: there are also `identifier` and `label` fields on this link node!\n    // These are used / cleaned here.\n\n    // To do: clean.\n    if (this.data.inReference) {\n      /** @type {ReferenceType} */\n      const referenceType = this.data.referenceType || 'shortcut';\n      node.type += 'Reference';\n      // @ts-expect-error: mutate.\n      node.referenceType = referenceType;\n      // @ts-expect-error: mutate.\n      delete node.url;\n      delete node.title;\n    } else {\n      // @ts-expect-error: mutate.\n      delete node.identifier;\n      // @ts-expect-error: mutate.\n      delete node.label;\n    }\n    this.data.referenceType = undefined;\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n\n  function onexitlabeltext(token) {\n    const string = this.sliceSerialize(token);\n    const ancestor = this.stack[this.stack.length - 2];\n    // @ts-expect-error: stash this on the node, as it might become a reference\n    // later.\n    ancestor.label = decodeString(string);\n    // @ts-expect-error: same as above.\n    ancestor.identifier = normalizeIdentifier(string).toLowerCase();\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n\n  function onexitlabel() {\n    const fragment = this.stack[this.stack.length - 1];\n    const value = this.resume();\n    const node = this.stack[this.stack.length - 1];\n    // Assume a reference.\n    this.data.inReference = true;\n    if (node.type === 'link') {\n      /** @type {Array<PhrasingContent>} */\n      const children = fragment.children;\n      node.children = children;\n    } else {\n      node.alt = value;\n    }\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n\n  function onexitresourcedestinationstring() {\n    const data = this.resume();\n    const node = this.stack[this.stack.length - 1];\n    node.url = data;\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n\n  function onexitresourcetitlestring() {\n    const data = this.resume();\n    const node = this.stack[this.stack.length - 1];\n    node.title = data;\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n\n  function onexitresource() {\n    this.data.inReference = undefined;\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n\n  function onenterreference() {\n    this.data.referenceType = 'collapsed';\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n\n  function onexitreferencestring(token) {\n    const label = this.resume();\n    const node = this.stack[this.stack.length - 1];\n    // @ts-expect-error: stash this on the node, as it might become a reference\n    // later.\n    node.label = label;\n    // @ts-expect-error: same as above.\n    node.identifier = normalizeIdentifier(this.sliceSerialize(token)).toLowerCase();\n    this.data.referenceType = 'full';\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n\n  function onexitcharacterreferencemarker(token) {\n    this.data.characterReferenceType = token.type;\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n  function onexitcharacterreferencevalue(token) {\n    const data = this.sliceSerialize(token);\n    const type = this.data.characterReferenceType;\n    /** @type {string} */\n    let value;\n    if (type) {\n      value = decodeNumericCharacterReference(data, type === \"characterReferenceMarkerNumeric\" ? 10 : 16);\n      this.data.characterReferenceType = undefined;\n    } else {\n      const result = decodeNamedCharacterReference(data);\n      value = result;\n    }\n    const tail = this.stack[this.stack.length - 1];\n    tail.value += value;\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n  function onexitcharacterreference(token) {\n    const tail = this.stack.pop();\n    tail.position.end = point(token.end);\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n  function onexitautolinkprotocol(token) {\n    onexitdata.call(this, token);\n    const node = this.stack[this.stack.length - 1];\n    node.url = this.sliceSerialize(token);\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n  function onexitautolinkemail(token) {\n    onexitdata.call(this, token);\n    const node = this.stack[this.stack.length - 1];\n    node.url = 'mailto:' + this.sliceSerialize(token);\n  }\n\n  //\n  // Creaters.\n  //\n\n  /** @returns {Blockquote} */\n  function blockQuote() {\n    return {\n      type: 'blockquote',\n      children: []\n    };\n  }\n\n  /** @returns {Code} */\n  function codeFlow() {\n    return {\n      type: 'code',\n      lang: null,\n      meta: null,\n      value: ''\n    };\n  }\n\n  /** @returns {InlineCode} */\n  function codeText() {\n    return {\n      type: 'inlineCode',\n      value: ''\n    };\n  }\n\n  /** @returns {Definition} */\n  function definition() {\n    return {\n      type: 'definition',\n      identifier: '',\n      label: null,\n      title: null,\n      url: ''\n    };\n  }\n\n  /** @returns {Emphasis} */\n  function emphasis() {\n    return {\n      type: 'emphasis',\n      children: []\n    };\n  }\n\n  /** @returns {Heading} */\n  function heading() {\n    return {\n      type: 'heading',\n      // @ts-expect-error `depth` will be set later.\n      depth: 0,\n      children: []\n    };\n  }\n\n  /** @returns {Break} */\n  function hardBreak() {\n    return {\n      type: 'break'\n    };\n  }\n\n  /** @returns {Html} */\n  function html() {\n    return {\n      type: 'html',\n      value: ''\n    };\n  }\n\n  /** @returns {Image} */\n  function image() {\n    return {\n      type: 'image',\n      title: null,\n      url: '',\n      alt: null\n    };\n  }\n\n  /** @returns {Link} */\n  function link() {\n    return {\n      type: 'link',\n      title: null,\n      url: '',\n      children: []\n    };\n  }\n\n  /**\n   * @param {Token} token\n   * @returns {List}\n   */\n  function list(token) {\n    return {\n      type: 'list',\n      ordered: token.type === 'listOrdered',\n      start: null,\n      spread: token._spread,\n      children: []\n    };\n  }\n\n  /**\n   * @param {Token} token\n   * @returns {ListItem}\n   */\n  function listItem(token) {\n    return {\n      type: 'listItem',\n      spread: token._spread,\n      checked: null,\n      children: []\n    };\n  }\n\n  /** @returns {Paragraph} */\n  function paragraph() {\n    return {\n      type: 'paragraph',\n      children: []\n    };\n  }\n\n  /** @returns {Strong} */\n  function strong() {\n    return {\n      type: 'strong',\n      children: []\n    };\n  }\n\n  /** @returns {Text} */\n  function text() {\n    return {\n      type: 'text',\n      value: ''\n    };\n  }\n\n  /** @returns {ThematicBreak} */\n  function thematicBreak() {\n    return {\n      type: 'thematicBreak'\n    };\n  }\n}\n\n/**\n * Copy a point-like value.\n *\n * @param {Point} d\n *   Point-like value.\n * @returns {Point}\n *   unist point.\n */\nfunction point(d) {\n  return {\n    line: d.line,\n    column: d.column,\n    offset: d.offset\n  };\n}\n\n/**\n * @param {Config} combined\n * @param {Array<Array<Extension> | Extension>} extensions\n * @returns {undefined}\n */\nfunction configure(combined, extensions) {\n  let index = -1;\n  while (++index < extensions.length) {\n    const value = extensions[index];\n    if (Array.isArray(value)) {\n      configure(combined, value);\n    } else {\n      extension(combined, value);\n    }\n  }\n}\n\n/**\n * @param {Config} combined\n * @param {Extension} extension\n * @returns {undefined}\n */\nfunction extension(combined, extension) {\n  /** @type {keyof Extension} */\n  let key;\n  for (key in extension) {\n    if (own.call(extension, key)) {\n      switch (key) {\n        case 'canContainEols':\n          {\n            const right = extension[key];\n            if (right) {\n              combined[key].push(...right);\n            }\n            break;\n          }\n        case 'transforms':\n          {\n            const right = extension[key];\n            if (right) {\n              combined[key].push(...right);\n            }\n            break;\n          }\n        case 'enter':\n        case 'exit':\n          {\n            const right = extension[key];\n            if (right) {\n              Object.assign(combined[key], right);\n            }\n            break;\n          }\n        // No default\n      }\n    }\n  }\n}\n\n/** @type {OnEnterError} */\nfunction defaultOnError(left, right) {\n  if (left) {\n    throw new Error('Cannot close `' + left.type + '` (' + stringifyPosition({\n      start: left.start,\n      end: left.end\n    }) + '): a different token (`' + right.type + '`, ' + stringifyPosition({\n      start: right.start,\n      end: right.end\n    }) + ') is open');\n  } else {\n    throw new Error('Cannot close document, a token (`' + right.type + '`, ' + stringifyPosition({\n      start: right.start,\n      end: right.end\n    }) + ') is still open');\n  }\n}","/**\n * @typedef {import('mdast').Root} Root\n * @typedef {import('mdast-util-from-markdown').Options} FromMarkdownOptions\n * @typedef {import('unified').Parser<Root>} Parser\n * @typedef {import('unified').Processor<Root>} Processor\n */\n\n/**\n * @typedef {Omit<FromMarkdownOptions, 'extensions' | 'mdastExtensions'>} Options\n */\n\nimport {fromMarkdown} from 'mdast-util-from-markdown'\n\n/**\n * Aadd support for parsing from markdown.\n *\n * @param {Readonly<Options> | null | undefined} [options]\n *   Configuration (optional).\n * @returns {undefined}\n *   Nothing.\n */\nexport default function remarkParse(options) {\n  /** @type {Processor} */\n  // @ts-expect-error: TS in JSDoc generates wrong types if `this` is typed regularly.\n  const self = this\n\n  self.parser = parser\n\n  /**\n   * @type {Parser}\n   */\n  function parser(doc) {\n    return fromMarkdown(doc, {\n      ...self.data('settings'),\n      ...options,\n      // Note: these options are not in the readme.\n      // The goal is for them to be set by plugins on `data` instead of being\n      // passed by users.\n      extensions: self.data('micromarkExtensions') || [],\n      mdastExtensions: self.data('fromMarkdownExtensions') || []\n    })\n  }\n}\n","/**\n * @import {Element} from 'hast'\n * @import {Blockquote} from 'mdast'\n * @import {State} from '../state.js'\n */\n\n/**\n * Turn an mdast `blockquote` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {Blockquote} node\n *   mdast node.\n * @returns {Element}\n *   hast node.\n */\nexport function blockquote(state, node) {\n  /** @type {Element} */\n  const result = {\n    type: 'element',\n    tagName: 'blockquote',\n    properties: {},\n    children: state.wrap(state.all(node), true)\n  }\n  state.patch(node, result)\n  return state.applyData(node, result)\n}\n","/**\n * @import {Element, Text} from 'hast'\n * @import {Break} from 'mdast'\n * @import {State} from '../state.js'\n */\n\n/**\n * Turn an mdast `break` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {Break} node\n *   mdast node.\n * @returns {Array<Element | Text>}\n *   hast element content.\n */\nexport function hardBreak(state, node) {\n  /** @type {Element} */\n  const result = {type: 'element', tagName: 'br', properties: {}, children: []}\n  state.patch(node, result)\n  return [state.applyData(node, result), {type: 'text', value: '\\n'}]\n}\n","/**\n * @import {Element, Properties} from 'hast'\n * @import {Code} from 'mdast'\n * @import {State} from '../state.js'\n */\n\n/**\n * Turn an mdast `code` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {Code} node\n *   mdast node.\n * @returns {Element}\n *   hast node.\n */\nexport function code(state, node) {\n  const value = node.value ? node.value + '\\n' : ''\n  /** @type {Properties} */\n  const properties = {}\n  // Someone can write `js&#x20;python&#x9;ruby`.\n  const language = node.lang ? node.lang.split(/\\s+/) : []\n\n  // GH/CM still drop the non-first languages.\n  if (language.length > 0) {\n    properties.className = ['language-' + language[0]]\n  }\n\n  // Create `<code>`.\n  /** @type {Element} */\n  let result = {\n    type: 'element',\n    tagName: 'code',\n    properties,\n    children: [{type: 'text', value}]\n  }\n\n  if (node.meta) {\n    result.data = {meta: node.meta}\n  }\n\n  state.patch(node, result)\n  result = state.applyData(node, result)\n\n  // Create `<pre>`.\n  result = {type: 'element', tagName: 'pre', properties: {}, children: [result]}\n  state.patch(node, result)\n  return result\n}\n","/**\n * @import {Element} from 'hast'\n * @import {Delete} from 'mdast'\n * @import {State} from '../state.js'\n */\n\n/**\n * Turn an mdast `delete` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {Delete} node\n *   mdast node.\n * @returns {Element}\n *   hast node.\n */\nexport function strikethrough(state, node) {\n  /** @type {Element} */\n  const result = {\n    type: 'element',\n    tagName: 'del',\n    properties: {},\n    children: state.all(node)\n  }\n  state.patch(node, result)\n  return state.applyData(node, result)\n}\n","/**\n * @import {Element} from 'hast'\n * @import {Emphasis} from 'mdast'\n * @import {State} from '../state.js'\n */\n\n/**\n * Turn an mdast `emphasis` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {Emphasis} node\n *   mdast node.\n * @returns {Element}\n *   hast node.\n */\nexport function emphasis(state, node) {\n  /** @type {Element} */\n  const result = {\n    type: 'element',\n    tagName: 'em',\n    properties: {},\n    children: state.all(node)\n  }\n  state.patch(node, result)\n  return state.applyData(node, result)\n}\n","/**\n * @import {Element} from 'hast'\n * @import {FootnoteReference} from 'mdast'\n * @import {State} from '../state.js'\n */\n\nimport {normalizeUri} from 'micromark-util-sanitize-uri'\n\n/**\n * Turn an mdast `footnoteReference` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {FootnoteReference} node\n *   mdast node.\n * @returns {Element}\n *   hast node.\n */\nexport function footnoteReference(state, node) {\n  const clobberPrefix =\n    typeof state.options.clobberPrefix === 'string'\n      ? state.options.clobberPrefix\n      : 'user-content-'\n  const id = String(node.identifier).toUpperCase()\n  const safeId = normalizeUri(id.toLowerCase())\n  const index = state.footnoteOrder.indexOf(id)\n  /** @type {number} */\n  let counter\n\n  let reuseCounter = state.footnoteCounts.get(id)\n\n  if (reuseCounter === undefined) {\n    reuseCounter = 0\n    state.footnoteOrder.push(id)\n    counter = state.footnoteOrder.length\n  } else {\n    counter = index + 1\n  }\n\n  reuseCounter += 1\n  state.footnoteCounts.set(id, reuseCounter)\n\n  /** @type {Element} */\n  const link = {\n    type: 'element',\n    tagName: 'a',\n    properties: {\n      href: '#' + clobberPrefix + 'fn-' + safeId,\n      id:\n        clobberPrefix +\n        'fnref-' +\n        safeId +\n        (reuseCounter > 1 ? '-' + reuseCounter : ''),\n      dataFootnoteRef: true,\n      ariaDescribedBy: ['footnote-label']\n    },\n    children: [{type: 'text', value: String(counter)}]\n  }\n  state.patch(node, link)\n\n  /** @type {Element} */\n  const sup = {\n    type: 'element',\n    tagName: 'sup',\n    properties: {},\n    children: [link]\n  }\n  state.patch(node, sup)\n  return state.applyData(node, sup)\n}\n","/**\n * @import {Element} from 'hast'\n * @import {Heading} from 'mdast'\n * @import {State} from '../state.js'\n */\n\n/**\n * Turn an mdast `heading` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {Heading} node\n *   mdast node.\n * @returns {Element}\n *   hast node.\n */\nexport function heading(state, node) {\n  /** @type {Element} */\n  const result = {\n    type: 'element',\n    tagName: 'h' + node.depth,\n    properties: {},\n    children: state.all(node)\n  }\n  state.patch(node, result)\n  return state.applyData(node, result)\n}\n","/**\n * @import {Element} from 'hast'\n * @import {Html} from 'mdast'\n * @import {State} from '../state.js'\n * @import {Raw} from '../../index.js'\n */\n\n/**\n * Turn an mdast `html` node into hast (`raw` node in dangerous mode, otherwise\n * nothing).\n *\n * @param {State} state\n *   Info passed around.\n * @param {Html} node\n *   mdast node.\n * @returns {Element | Raw | undefined}\n *   hast node.\n */\nexport function html(state, node) {\n  if (state.options.allowDangerousHtml) {\n    /** @type {Raw} */\n    const result = {type: 'raw', value: node.value}\n    state.patch(node, result)\n    return state.applyData(node, result)\n  }\n\n  return undefined\n}\n","/**\n * @import {ElementContent} from 'hast'\n * @import {Reference, Nodes} from 'mdast'\n * @import {State} from './state.js'\n */\n\n/**\n * Return the content of a reference without definition as plain text.\n *\n * @param {State} state\n *   Info passed around.\n * @param {Extract<Nodes, Reference>} node\n *   Reference node (image, link).\n * @returns {Array<ElementContent>}\n *   hast content.\n */\nexport function revert(state, node) {\n  const subtype = node.referenceType\n  let suffix = ']'\n\n  if (subtype === 'collapsed') {\n    suffix += '[]'\n  } else if (subtype === 'full') {\n    suffix += '[' + (node.label || node.identifier) + ']'\n  }\n\n  if (node.type === 'imageReference') {\n    return [{type: 'text', value: '![' + node.alt + suffix}]\n  }\n\n  const contents = state.all(node)\n  const head = contents[0]\n\n  if (head && head.type === 'text') {\n    head.value = '[' + head.value\n  } else {\n    contents.unshift({type: 'text', value: '['})\n  }\n\n  const tail = contents[contents.length - 1]\n\n  if (tail && tail.type === 'text') {\n    tail.value += suffix\n  } else {\n    contents.push({type: 'text', value: suffix})\n  }\n\n  return contents\n}\n","/**\n * @import {ElementContent, Element, Properties} from 'hast'\n * @import {ImageReference} from 'mdast'\n * @import {State} from '../state.js'\n */\n\nimport {normalizeUri} from 'micromark-util-sanitize-uri'\nimport {revert} from '../revert.js'\n\n/**\n * Turn an mdast `imageReference` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {ImageReference} node\n *   mdast node.\n * @returns {Array<ElementContent> | ElementContent}\n *   hast node.\n */\nexport function imageReference(state, node) {\n  const id = String(node.identifier).toUpperCase()\n  const definition = state.definitionById.get(id)\n\n  if (!definition) {\n    return revert(state, node)\n  }\n\n  /** @type {Properties} */\n  const properties = {src: normalizeUri(definition.url || ''), alt: node.alt}\n\n  if (definition.title !== null && definition.title !== undefined) {\n    properties.title = definition.title\n  }\n\n  /** @type {Element} */\n  const result = {type: 'element', tagName: 'img', properties, children: []}\n  state.patch(node, result)\n  return state.applyData(node, result)\n}\n","/**\n * @import {Element, Properties} from 'hast'\n * @import {Image} from 'mdast'\n * @import {State} from '../state.js'\n */\n\nimport {normalizeUri} from 'micromark-util-sanitize-uri'\n\n/**\n * Turn an mdast `image` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {Image} node\n *   mdast node.\n * @returns {Element}\n *   hast node.\n */\nexport function image(state, node) {\n  /** @type {Properties} */\n  const properties = {src: normalizeUri(node.url)}\n\n  if (node.alt !== null && node.alt !== undefined) {\n    properties.alt = node.alt\n  }\n\n  if (node.title !== null && node.title !== undefined) {\n    properties.title = node.title\n  }\n\n  /** @type {Element} */\n  const result = {type: 'element', tagName: 'img', properties, children: []}\n  state.patch(node, result)\n  return state.applyData(node, result)\n}\n","/**\n * @import {Element, Text} from 'hast'\n * @import {InlineCode} from 'mdast'\n * @import {State} from '../state.js'\n */\n\n/**\n * Turn an mdast `inlineCode` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {InlineCode} node\n *   mdast node.\n * @returns {Element}\n *   hast node.\n */\nexport function inlineCode(state, node) {\n  /** @type {Text} */\n  const text = {type: 'text', value: node.value.replace(/\\r?\\n|\\r/g, ' ')}\n  state.patch(node, text)\n\n  /** @type {Element} */\n  const result = {\n    type: 'element',\n    tagName: 'code',\n    properties: {},\n    children: [text]\n  }\n  state.patch(node, result)\n  return state.applyData(node, result)\n}\n","/**\n * @import {ElementContent, Element, Properties} from 'hast'\n * @import {LinkReference} from 'mdast'\n * @import {State} from '../state.js'\n */\n\nimport {normalizeUri} from 'micromark-util-sanitize-uri'\nimport {revert} from '../revert.js'\n\n/**\n * Turn an mdast `linkReference` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {LinkReference} node\n *   mdast node.\n * @returns {Array<ElementContent> | ElementContent}\n *   hast node.\n */\nexport function linkReference(state, node) {\n  const id = String(node.identifier).toUpperCase()\n  const definition = state.definitionById.get(id)\n\n  if (!definition) {\n    return revert(state, node)\n  }\n\n  /** @type {Properties} */\n  const properties = {href: normalizeUri(definition.url || '')}\n\n  if (definition.title !== null && definition.title !== undefined) {\n    properties.title = definition.title\n  }\n\n  /** @type {Element} */\n  const result = {\n    type: 'element',\n    tagName: 'a',\n    properties,\n    children: state.all(node)\n  }\n  state.patch(node, result)\n  return state.applyData(node, result)\n}\n","/**\n * @import {Element, Properties} from 'hast'\n * @import {Link} from 'mdast'\n * @import {State} from '../state.js'\n */\n\nimport {normalizeUri} from 'micromark-util-sanitize-uri'\n\n/**\n * Turn an mdast `link` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {Link} node\n *   mdast node.\n * @returns {Element}\n *   hast node.\n */\nexport function link(state, node) {\n  /** @type {Properties} */\n  const properties = {href: normalizeUri(node.url)}\n\n  if (node.title !== null && node.title !== undefined) {\n    properties.title = node.title\n  }\n\n  /** @type {Element} */\n  const result = {\n    type: 'element',\n    tagName: 'a',\n    properties,\n    children: state.all(node)\n  }\n  state.patch(node, result)\n  return state.applyData(node, result)\n}\n","/**\n * @import {ElementContent, Element, Properties} from 'hast'\n * @import {ListItem, Parents} from 'mdast'\n * @import {State} from '../state.js'\n */\n\n/**\n * Turn an mdast `listItem` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {ListItem} node\n *   mdast node.\n * @param {Parents | undefined} parent\n *   Parent of `node`.\n * @returns {Element}\n *   hast node.\n */\nexport function listItem(state, node, parent) {\n  const results = state.all(node)\n  const loose = parent ? listLoose(parent) : listItemLoose(node)\n  /** @type {Properties} */\n  const properties = {}\n  /** @type {Array<ElementContent>} */\n  const children = []\n\n  if (typeof node.checked === 'boolean') {\n    const head = results[0]\n    /** @type {Element} */\n    let paragraph\n\n    if (head && head.type === 'element' && head.tagName === 'p') {\n      paragraph = head\n    } else {\n      paragraph = {type: 'element', tagName: 'p', properties: {}, children: []}\n      results.unshift(paragraph)\n    }\n\n    if (paragraph.children.length > 0) {\n      paragraph.children.unshift({type: 'text', value: ' '})\n    }\n\n    paragraph.children.unshift({\n      type: 'element',\n      tagName: 'input',\n      properties: {type: 'checkbox', checked: node.checked, disabled: true},\n      children: []\n    })\n\n    // According to github-markdown-css, this class hides bullet.\n    // See: <https://github.com/sindresorhus/github-markdown-css>.\n    properties.className = ['task-list-item']\n  }\n\n  let index = -1\n\n  while (++index < results.length) {\n    const child = results[index]\n\n    // Add eols before nodes, except if this is a loose, first paragraph.\n    if (\n      loose ||\n      index !== 0 ||\n      child.type !== 'element' ||\n      child.tagName !== 'p'\n    ) {\n      children.push({type: 'text', value: '\\n'})\n    }\n\n    if (child.type === 'element' && child.tagName === 'p' && !loose) {\n      children.push(...child.children)\n    } else {\n      children.push(child)\n    }\n  }\n\n  const tail = results[results.length - 1]\n\n  // Add a final eol.\n  if (tail && (loose || tail.type !== 'element' || tail.tagName !== 'p')) {\n    children.push({type: 'text', value: '\\n'})\n  }\n\n  /** @type {Element} */\n  const result = {type: 'element', tagName: 'li', properties, children}\n  state.patch(node, result)\n  return state.applyData(node, result)\n}\n\n/**\n * @param {Parents} node\n * @return {Boolean}\n */\nfunction listLoose(node) {\n  let loose = false\n  if (node.type === 'list') {\n    loose = node.spread || false\n    const children = node.children\n    let index = -1\n\n    while (!loose && ++index < children.length) {\n      loose = listItemLoose(children[index])\n    }\n  }\n\n  return loose\n}\n\n/**\n * @param {ListItem} node\n * @return {Boolean}\n */\nfunction listItemLoose(node) {\n  const spread = node.spread\n\n  return spread === null || spread === undefined\n    ? node.children.length > 1\n    : spread\n}\n","/**\n * @import {Element, Properties} from 'hast'\n * @import {List} from 'mdast'\n * @import {State} from '../state.js'\n */\n\n/**\n * Turn an mdast `list` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {List} node\n *   mdast node.\n * @returns {Element}\n *   hast node.\n */\nexport function list(state, node) {\n  /** @type {Properties} */\n  const properties = {}\n  const results = state.all(node)\n  let index = -1\n\n  if (typeof node.start === 'number' && node.start !== 1) {\n    properties.start = node.start\n  }\n\n  // Like GitHub, add a class for custom styling.\n  while (++index < results.length) {\n    const child = results[index]\n\n    if (\n      child.type === 'element' &&\n      child.tagName === 'li' &&\n      child.properties &&\n      Array.isArray(child.properties.className) &&\n      child.properties.className.includes('task-list-item')\n    ) {\n      properties.className = ['contains-task-list']\n      break\n    }\n  }\n\n  /** @type {Element} */\n  const result = {\n    type: 'element',\n    tagName: node.ordered ? 'ol' : 'ul',\n    properties,\n    children: state.wrap(results, true)\n  }\n  state.patch(node, result)\n  return state.applyData(node, result)\n}\n","/**\n * @import {Element} from 'hast'\n * @import {Paragraph} from 'mdast'\n * @import {State} from '../state.js'\n */\n\n/**\n * Turn an mdast `paragraph` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {Paragraph} node\n *   mdast node.\n * @returns {Element}\n *   hast node.\n */\nexport function paragraph(state, node) {\n  /** @type {Element} */\n  const result = {\n    type: 'element',\n    tagName: 'p',\n    properties: {},\n    children: state.all(node)\n  }\n  state.patch(node, result)\n  return state.applyData(node, result)\n}\n","/**\n * @import {Parents as HastParents, Root as HastRoot} from 'hast'\n * @import {Root as MdastRoot} from 'mdast'\n * @import {State} from '../state.js'\n */\n\n/**\n * Turn an mdast `root` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {MdastRoot} node\n *   mdast node.\n * @returns {HastParents}\n *   hast node.\n */\nexport function root(state, node) {\n  /** @type {HastRoot} */\n  const result = {type: 'root', children: state.wrap(state.all(node))}\n  state.patch(node, result)\n  return state.applyData(node, result)\n}\n","/**\n * @import {Element} from 'hast'\n * @import {Strong} from 'mdast'\n * @import {State} from '../state.js'\n */\n\n/**\n * Turn an mdast `strong` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {Strong} node\n *   mdast node.\n * @returns {Element}\n *   hast node.\n */\nexport function strong(state, node) {\n  /** @type {Element} */\n  const result = {\n    type: 'element',\n    tagName: 'strong',\n    properties: {},\n    children: state.all(node)\n  }\n  state.patch(node, result)\n  return state.applyData(node, result)\n}\n","/**\n * @import {Table} from 'mdast'\n * @import {Element} from 'hast'\n * @import {State} from '../state.js'\n */\n\nimport {pointEnd, pointStart} from 'unist-util-position'\n\n/**\n * Turn an mdast `table` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {Table} node\n *   mdast node.\n * @returns {Element}\n *   hast node.\n */\nexport function table(state, node) {\n  const rows = state.all(node)\n  const firstRow = rows.shift()\n  /** @type {Array<Element>} */\n  const tableContent = []\n\n  if (firstRow) {\n    /** @type {Element} */\n    const head = {\n      type: 'element',\n      tagName: 'thead',\n      properties: {},\n      children: state.wrap([firstRow], true)\n    }\n    state.patch(node.children[0], head)\n    tableContent.push(head)\n  }\n\n  if (rows.length > 0) {\n    /** @type {Element} */\n    const body = {\n      type: 'element',\n      tagName: 'tbody',\n      properties: {},\n      children: state.wrap(rows, true)\n    }\n\n    const start = pointStart(node.children[1])\n    const end = pointEnd(node.children[node.children.length - 1])\n    if (start && end) body.position = {start, end}\n    tableContent.push(body)\n  }\n\n  /** @type {Element} */\n  const result = {\n    type: 'element',\n    tagName: 'table',\n    properties: {},\n    children: state.wrap(tableContent, true)\n  }\n  state.patch(node, result)\n  return state.applyData(node, result)\n}\n","/**\n * @import {Element, ElementContent, Properties} from 'hast'\n * @import {Parents, TableRow} from 'mdast'\n * @import {State} from '../state.js'\n */\n\n/**\n * Turn an mdast `tableRow` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {TableRow} node\n *   mdast node.\n * @param {Parents | undefined} parent\n *   Parent of `node`.\n * @returns {Element}\n *   hast node.\n */\nexport function tableRow(state, node, parent) {\n  const siblings = parent ? parent.children : undefined\n  // Generate a body row when without parent.\n  const rowIndex = siblings ? siblings.indexOf(node) : 1\n  const tagName = rowIndex === 0 ? 'th' : 'td'\n  // To do: option to use `style`?\n  const align = parent && parent.type === 'table' ? parent.align : undefined\n  const length = align ? align.length : node.children.length\n  let cellIndex = -1\n  /** @type {Array<ElementContent>} */\n  const cells = []\n\n  while (++cellIndex < length) {\n    // Note: can also be undefined.\n    const cell = node.children[cellIndex]\n    /** @type {Properties} */\n    const properties = {}\n    const alignValue = align ? align[cellIndex] : undefined\n\n    if (alignValue) {\n      properties.align = alignValue\n    }\n\n    /** @type {Element} */\n    let result = {type: 'element', tagName, properties, children: []}\n\n    if (cell) {\n      result.children = state.all(cell)\n      state.patch(cell, result)\n      result = state.applyData(cell, result)\n    }\n\n    cells.push(result)\n  }\n\n  /** @type {Element} */\n  const result = {\n    type: 'element',\n    tagName: 'tr',\n    properties: {},\n    children: state.wrap(cells, true)\n  }\n  state.patch(node, result)\n  return state.applyData(node, result)\n}\n","/**\n * @import {Element} from 'hast'\n * @import {TableCell} from 'mdast'\n * @import {State} from '../state.js'\n */\n\n/**\n * Turn an mdast `tableCell` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {TableCell} node\n *   mdast node.\n * @returns {Element}\n *   hast node.\n */\nexport function tableCell(state, node) {\n  // Note: this function is normally not called: see `table-row` for how rows\n  // and their cells are compiled.\n  /** @type {Element} */\n  const result = {\n    type: 'element',\n    tagName: 'td', // Assume body cell.\n    properties: {},\n    children: state.all(node)\n  }\n  state.patch(node, result)\n  return state.applyData(node, result)\n}\n","const tab = 9 /* `\\t` */\nconst space = 32 /* ` ` */\n\n/**\n * Remove initial and final spaces and tabs at the line breaks in `value`.\n * Does not trim initial and final spaces and tabs of the value itself.\n *\n * @param {string} value\n *   Value to trim.\n * @returns {string}\n *   Trimmed value.\n */\nexport function trimLines(value) {\n  const source = String(value)\n  const search = /\\r?\\n|\\r/g\n  let match = search.exec(source)\n  let last = 0\n  /** @type {Array<string>} */\n  const lines = []\n\n  while (match) {\n    lines.push(\n      trimLine(source.slice(last, match.index), last > 0, true),\n      match[0]\n    )\n\n    last = match.index + match[0].length\n    match = search.exec(source)\n  }\n\n  lines.push(trimLine(source.slice(last), last > 0, false))\n\n  return lines.join('')\n}\n\n/**\n * @param {string} value\n *   Line to trim.\n * @param {boolean} start\n *   Whether to trim the start of the line.\n * @param {boolean} end\n *   Whether to trim the end of the line.\n * @returns {string}\n *   Trimmed line.\n */\nfunction trimLine(value, start, end) {\n  let startIndex = 0\n  let endIndex = value.length\n\n  if (start) {\n    let code = value.codePointAt(startIndex)\n\n    while (code === tab || code === space) {\n      startIndex++\n      code = value.codePointAt(startIndex)\n    }\n  }\n\n  if (end) {\n    let code = value.codePointAt(endIndex - 1)\n\n    while (code === tab || code === space) {\n      endIndex--\n      code = value.codePointAt(endIndex - 1)\n    }\n  }\n\n  return endIndex > startIndex ? value.slice(startIndex, endIndex) : ''\n}\n","/**\n * @import {Element as HastElement, Text as HastText} from 'hast'\n * @import {Text as MdastText} from 'mdast'\n * @import {State} from '../state.js'\n */\n\nimport {trimLines} from 'trim-lines'\n\n/**\n * Turn an mdast `text` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {MdastText} node\n *   mdast node.\n * @returns {HastElement | HastText}\n *   hast node.\n */\nexport function text(state, node) {\n  /** @type {HastText} */\n  const result = {type: 'text', value: trimLines(String(node.value))}\n  state.patch(node, result)\n  return state.applyData(node, result)\n}\n","/**\n * @import {Element} from 'hast'\n * @import {ThematicBreak} from 'mdast'\n * @import {State} from '../state.js'\n */\n\n/**\n * Turn an mdast `thematicBreak` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {ThematicBreak} node\n *   mdast node.\n * @returns {Element}\n *   hast node.\n */\nexport function thematicBreak(state, node) {\n  /** @type {Element} */\n  const result = {\n    type: 'element',\n    tagName: 'hr',\n    properties: {},\n    children: []\n  }\n  state.patch(node, result)\n  return state.applyData(node, result)\n}\n","/**\n * @import {Handlers} from '../state.js'\n */\n\nimport {blockquote} from './blockquote.js'\nimport {hardBreak} from './break.js'\nimport {code} from './code.js'\nimport {strikethrough} from './delete.js'\nimport {emphasis} from './emphasis.js'\nimport {footnoteReference} from './footnote-reference.js'\nimport {heading} from './heading.js'\nimport {html} from './html.js'\nimport {imageReference} from './image-reference.js'\nimport {image} from './image.js'\nimport {inlineCode} from './inline-code.js'\nimport {linkReference} from './link-reference.js'\nimport {link} from './link.js'\nimport {listItem} from './list-item.js'\nimport {list} from './list.js'\nimport {paragraph} from './paragraph.js'\nimport {root} from './root.js'\nimport {strong} from './strong.js'\nimport {table} from './table.js'\nimport {tableRow} from './table-row.js'\nimport {tableCell} from './table-cell.js'\nimport {text} from './text.js'\nimport {thematicBreak} from './thematic-break.js'\n\n/**\n * Default handlers for nodes.\n *\n * @satisfies {Handlers}\n */\nexport const handlers = {\n  blockquote,\n  break: hardBreak,\n  code,\n  delete: strikethrough,\n  emphasis,\n  footnoteReference,\n  heading,\n  html,\n  imageReference,\n  image,\n  inlineCode,\n  linkReference,\n  link,\n  listItem,\n  list,\n  paragraph,\n  // @ts-expect-error: root is different, but hard to type.\n  root,\n  strong,\n  table,\n  tableCell,\n  tableRow,\n  text,\n  thematicBreak,\n  toml: ignore,\n  yaml: ignore,\n  definition: ignore,\n  footnoteDefinition: ignore\n}\n\n// Return nothing for nodes that are ignored.\nfunction ignore() {\n  return undefined\n}\n","export const VOID       = -1;\nexport const PRIMITIVE  = 0;\nexport const ARRAY      = 1;\nexport const OBJECT     = 2;\nexport const DATE       = 3;\nexport const REGEXP     = 4;\nexport const MAP        = 5;\nexport const SET        = 6;\nexport const ERROR      = 7;\nexport const BIGINT     = 8;\n// export const SYMBOL = 9;\n","import {\n  VOID, PRIMITIVE,\n  ARRAY, OBJECT,\n  DATE, REGEXP, MAP, SET,\n  ERROR, BIGINT\n} from './types.js';\n\nconst env = typeof self === 'object' ? self : globalThis;\n\nconst deserializer = ($, _) => {\n  const as = (out, index) => {\n    $.set(index, out);\n    return out;\n  };\n\n  const unpair = index => {\n    if ($.has(index))\n      return $.get(index);\n\n    const [type, value] = _[index];\n    switch (type) {\n      case PRIMITIVE:\n      case VOID:\n        return as(value, index);\n      case ARRAY: {\n        const arr = as([], index);\n        for (const index of value)\n          arr.push(unpair(index));\n        return arr;\n      }\n      case OBJECT: {\n        const object = as({}, index);\n        for (const [key, index] of value)\n          object[unpair(key)] = unpair(index);\n        return object;\n      }\n      case DATE:\n        return as(new Date(value), index);\n      case REGEXP: {\n        const {source, flags} = value;\n        return as(new RegExp(source, flags), index);\n      }\n      case MAP: {\n        const map = as(new Map, index);\n        for (const [key, index] of value)\n          map.set(unpair(key), unpair(index));\n        return map;\n      }\n      case SET: {\n        const set = as(new Set, index);\n        for (const index of value)\n          set.add(unpair(index));\n        return set;\n      }\n      case ERROR: {\n        const {name, message} = value;\n        return as(new env[name](message), index);\n      }\n      case BIGINT:\n        return as(BigInt(value), index);\n      case 'BigInt':\n        return as(Object(BigInt(value)), index);\n      case 'ArrayBuffer':\n        return as(new Uint8Array(value).buffer, value);\n      case 'DataView': {\n        const { buffer } = new Uint8Array(value);\n        return as(new DataView(buffer), value);\n      }\n    }\n    return as(new env[type](value), index);\n  };\n\n  return unpair;\n};\n\n/**\n * @typedef {Array<string,any>} Record a type representation\n */\n\n/**\n * Returns a deserialized value from a serialized array of Records.\n * @param {Record[]} serialized a previously serialized value.\n * @returns {any}\n */\nexport const deserialize = serialized => deserializer(new Map, serialized)(0);\n","import {\n  VOID, PRIMITIVE,\n  ARRAY, OBJECT,\n  DATE, REGEXP, MAP, SET,\n  ERROR, BIGINT\n} from './types.js';\n\nconst EMPTY = '';\n\nconst {toString} = {};\nconst {keys} = Object;\n\nconst typeOf = value => {\n  const type = typeof value;\n  if (type !== 'object' || !value)\n    return [PRIMITIVE, type];\n\n  const asString = toString.call(value).slice(8, -1);\n  switch (asString) {\n    case 'Array':\n      return [ARRAY, EMPTY];\n    case 'Object':\n      return [OBJECT, EMPTY];\n    case 'Date':\n      return [DATE, EMPTY];\n    case 'RegExp':\n      return [REGEXP, EMPTY];\n    case 'Map':\n      return [MAP, EMPTY];\n    case 'Set':\n      return [SET, EMPTY];\n    case 'DataView':\n      return [ARRAY, asString];\n  }\n\n  if (asString.includes('Array'))\n    return [ARRAY, asString];\n\n  if (asString.includes('Error'))\n    return [ERROR, asString];\n\n  return [OBJECT, asString];\n};\n\nconst shouldSkip = ([TYPE, type]) => (\n  TYPE === PRIMITIVE &&\n  (type === 'function' || type === 'symbol')\n);\n\nconst serializer = (strict, json, $, _) => {\n\n  const as = (out, value) => {\n    const index = _.push(out) - 1;\n    $.set(value, index);\n    return index;\n  };\n\n  const pair = value => {\n    if ($.has(value))\n      return $.get(value);\n\n    let [TYPE, type] = typeOf(value);\n    switch (TYPE) {\n      case PRIMITIVE: {\n        let entry = value;\n        switch (type) {\n          case 'bigint':\n            TYPE = BIGINT;\n            entry = value.toString();\n            break;\n          case 'function':\n          case 'symbol':\n            if (strict)\n              throw new TypeError('unable to serialize ' + type);\n            entry = null;\n            break;\n          case 'undefined':\n            return as([VOID], value);\n        }\n        return as([TYPE, entry], value);\n      }\n      case ARRAY: {\n        if (type) {\n          let spread = value;\n          if (type === 'DataView') {\n            spread = new Uint8Array(value.buffer);\n          }\n          else if (type === 'ArrayBuffer') {\n            spread = new Uint8Array(value);\n          }\n          return as([type, [...spread]], value);\n        }\n\n        const arr = [];\n        const index = as([TYPE, arr], value);\n        for (const entry of value)\n          arr.push(pair(entry));\n        return index;\n      }\n      case OBJECT: {\n        if (type) {\n          switch (type) {\n            case 'BigInt':\n              return as([type, value.toString()], value);\n            case 'Boolean':\n            case 'Number':\n            case 'String':\n              return as([type, value.valueOf()], value);\n          }\n        }\n\n        if (json && ('toJSON' in value))\n          return pair(value.toJSON());\n\n        const entries = [];\n        const index = as([TYPE, entries], value);\n        for (const key of keys(value)) {\n          if (strict || !shouldSkip(typeOf(value[key])))\n            entries.push([pair(key), pair(value[key])]);\n        }\n        return index;\n      }\n      case DATE:\n        return as([TYPE, value.toISOString()], value);\n      case REGEXP: {\n        const {source, flags} = value;\n        return as([TYPE, {source, flags}], value);\n      }\n      case MAP: {\n        const entries = [];\n        const index = as([TYPE, entries], value);\n        for (const [key, entry] of value) {\n          if (strict || !(shouldSkip(typeOf(key)) || shouldSkip(typeOf(entry))))\n            entries.push([pair(key), pair(entry)]);\n        }\n        return index;\n      }\n      case SET: {\n        const entries = [];\n        const index = as([TYPE, entries], value);\n        for (const entry of value) {\n          if (strict || !shouldSkip(typeOf(entry)))\n            entries.push(pair(entry));\n        }\n        return index;\n      }\n    }\n\n    const {message} = value;\n    return as([TYPE, {name: type, message}], value);\n  };\n\n  return pair;\n};\n\n/**\n * @typedef {Array<string,any>} Record a type representation\n */\n\n/**\n * Returns an array of serialized Records.\n * @param {any} value a serializable value.\n * @param {{json?: boolean, lossy?: boolean}?} options an object with a `lossy` or `json` property that,\n *  if `true`, will not throw errors on incompatible types, and behave more\n *  like JSON stringify would behave. Symbol and Function will be discarded.\n * @returns {Record[]}\n */\n export const serialize = (value, {json, lossy} = {}) => {\n  const _ = [];\n  return serializer(!(json || lossy), !!json, new Map, _)(value), _;\n};\n","import {deserialize} from './deserialize.js';\nimport {serialize} from './serialize.js';\n\n/**\n * @typedef {Array<string,any>} Record a type representation\n */\n\n/**\n * Returns an array of serialized Records.\n * @param {any} any a serializable value.\n * @param {{transfer?: any[], json?: boolean, lossy?: boolean}?} options an object with\n * a transfer option (ignored when polyfilled) and/or non standard fields that\n * fallback to the polyfill if present.\n * @returns {Record[]}\n */\nexport default typeof structuredClone === \"function\" ?\n  /* c8 ignore start */\n  (any, options) => (\n    options && ('json' in options || 'lossy' in options) ?\n      deserialize(serialize(any, options)) : structuredClone(any)\n  ) :\n  (any, options) => deserialize(serialize(any, options));\n  /* c8 ignore stop */\n\nexport {deserialize, serialize};\n","/**\n * @import {ElementContent, Element} from 'hast'\n * @import {State} from './state.js'\n */\n\n/**\n * @callback FootnoteBackContentTemplate\n *   Generate content for the backreference dynamically.\n *\n *   For the following markdown:\n *\n *   ```markdown\n *   Alpha[^micromark], bravo[^micromark], and charlie[^remark].\n *\n *   [^remark]: things about remark\n *   [^micromark]: things about micromark\n *   ```\n *\n *   This function will be called with:\n *\n *   *  `0` and `0` for the backreference from `things about micromark` to\n *      `alpha`, as it is the first used definition, and the first call to it\n *   *  `0` and `1` for the backreference from `things about micromark` to\n *      `bravo`, as it is the first used definition, and the second call to it\n *   *  `1` and `0` for the backreference from `things about remark` to\n *      `charlie`, as it is the second used definition\n * @param {number} referenceIndex\n *   Index of the definition in the order that they are first referenced,\n *   0-indexed.\n * @param {number} rereferenceIndex\n *   Index of calls to the same definition, 0-indexed.\n * @returns {Array<ElementContent> | ElementContent | string}\n *   Content for the backreference when linking back from definitions to their\n *   reference.\n *\n * @callback FootnoteBackLabelTemplate\n *   Generate a back label dynamically.\n *\n *   For the following markdown:\n *\n *   ```markdown\n *   Alpha[^micromark], bravo[^micromark], and charlie[^remark].\n *\n *   [^remark]: things about remark\n *   [^micromark]: things about micromark\n *   ```\n *\n *   This function will be called with:\n *\n *   *  `0` and `0` for the backreference from `things about micromark` to\n *      `alpha`, as it is the first used definition, and the first call to it\n *   *  `0` and `1` for the backreference from `things about micromark` to\n *      `bravo`, as it is the first used definition, and the second call to it\n *   *  `1` and `0` for the backreference from `things about remark` to\n *      `charlie`, as it is the second used definition\n * @param {number} referenceIndex\n *   Index of the definition in the order that they are first referenced,\n *   0-indexed.\n * @param {number} rereferenceIndex\n *   Index of calls to the same definition, 0-indexed.\n * @returns {string}\n *   Back label to use when linking back from definitions to their reference.\n */\n\nimport structuredClone from '@ungap/structured-clone'\nimport {normalizeUri} from 'micromark-util-sanitize-uri'\n\n/**\n * Generate the default content that GitHub uses on backreferences.\n *\n * @param {number} _\n *   Index of the definition in the order that they are first referenced,\n *   0-indexed.\n * @param {number} rereferenceIndex\n *   Index of calls to the same definition, 0-indexed.\n * @returns {Array<ElementContent>}\n *   Content.\n */\nexport function defaultFootnoteBackContent(_, rereferenceIndex) {\n  /** @type {Array<ElementContent>} */\n  const result = [{type: 'text', value: '↩'}]\n\n  if (rereferenceIndex > 1) {\n    result.push({\n      type: 'element',\n      tagName: 'sup',\n      properties: {},\n      children: [{type: 'text', value: String(rereferenceIndex)}]\n    })\n  }\n\n  return result\n}\n\n/**\n * Generate the default label that GitHub uses on backreferences.\n *\n * @param {number} referenceIndex\n *   Index of the definition in the order that they are first referenced,\n *   0-indexed.\n * @param {number} rereferenceIndex\n *   Index of calls to the same definition, 0-indexed.\n * @returns {string}\n *   Label.\n */\nexport function defaultFootnoteBackLabel(referenceIndex, rereferenceIndex) {\n  return (\n    'Back to reference ' +\n    (referenceIndex + 1) +\n    (rereferenceIndex > 1 ? '-' + rereferenceIndex : '')\n  )\n}\n\n/**\n * Generate a hast footer for called footnote definitions.\n *\n * @param {State} state\n *   Info passed around.\n * @returns {Element | undefined}\n *   `section` element or `undefined`.\n */\n// eslint-disable-next-line complexity\nexport function footer(state) {\n  const clobberPrefix =\n    typeof state.options.clobberPrefix === 'string'\n      ? state.options.clobberPrefix\n      : 'user-content-'\n  const footnoteBackContent =\n    state.options.footnoteBackContent || defaultFootnoteBackContent\n  const footnoteBackLabel =\n    state.options.footnoteBackLabel || defaultFootnoteBackLabel\n  const footnoteLabel = state.options.footnoteLabel || 'Footnotes'\n  const footnoteLabelTagName = state.options.footnoteLabelTagName || 'h2'\n  const footnoteLabelProperties = state.options.footnoteLabelProperties || {\n    className: ['sr-only']\n  }\n  /** @type {Array<ElementContent>} */\n  const listItems = []\n  let referenceIndex = -1\n\n  while (++referenceIndex < state.footnoteOrder.length) {\n    const definition = state.footnoteById.get(\n      state.footnoteOrder[referenceIndex]\n    )\n\n    if (!definition) {\n      continue\n    }\n\n    const content = state.all(definition)\n    const id = String(definition.identifier).toUpperCase()\n    const safeId = normalizeUri(id.toLowerCase())\n    let rereferenceIndex = 0\n    /** @type {Array<ElementContent>} */\n    const backReferences = []\n    const counts = state.footnoteCounts.get(id)\n\n    // eslint-disable-next-line no-unmodified-loop-condition\n    while (counts !== undefined && ++rereferenceIndex <= counts) {\n      if (backReferences.length > 0) {\n        backReferences.push({type: 'text', value: ' '})\n      }\n\n      let children =\n        typeof footnoteBackContent === 'string'\n          ? footnoteBackContent\n          : footnoteBackContent(referenceIndex, rereferenceIndex)\n\n      if (typeof children === 'string') {\n        children = {type: 'text', value: children}\n      }\n\n      backReferences.push({\n        type: 'element',\n        tagName: 'a',\n        properties: {\n          href:\n            '#' +\n            clobberPrefix +\n            'fnref-' +\n            safeId +\n            (rereferenceIndex > 1 ? '-' + rereferenceIndex : ''),\n          dataFootnoteBackref: '',\n          ariaLabel:\n            typeof footnoteBackLabel === 'string'\n              ? footnoteBackLabel\n              : footnoteBackLabel(referenceIndex, rereferenceIndex),\n          className: ['data-footnote-backref']\n        },\n        children: Array.isArray(children) ? children : [children]\n      })\n    }\n\n    const tail = content[content.length - 1]\n\n    if (tail && tail.type === 'element' && tail.tagName === 'p') {\n      const tailTail = tail.children[tail.children.length - 1]\n      if (tailTail && tailTail.type === 'text') {\n        tailTail.value += ' '\n      } else {\n        tail.children.push({type: 'text', value: ' '})\n      }\n\n      tail.children.push(...backReferences)\n    } else {\n      content.push(...backReferences)\n    }\n\n    /** @type {Element} */\n    const listItem = {\n      type: 'element',\n      tagName: 'li',\n      properties: {id: clobberPrefix + 'fn-' + safeId},\n      children: state.wrap(content, true)\n    }\n\n    state.patch(definition, listItem)\n\n    listItems.push(listItem)\n  }\n\n  if (listItems.length === 0) {\n    return\n  }\n\n  return {\n    type: 'element',\n    tagName: 'section',\n    properties: {dataFootnotes: true, className: ['footnotes']},\n    children: [\n      {\n        type: 'element',\n        tagName: footnoteLabelTagName,\n        properties: {\n          ...structuredClone(footnoteLabelProperties),\n          id: 'footnote-label'\n        },\n        children: [{type: 'text', value: footnoteLabel}]\n      },\n      {type: 'text', value: '\\n'},\n      {\n        type: 'element',\n        tagName: 'ol',\n        properties: {},\n        children: state.wrap(listItems, true)\n      },\n      {type: 'text', value: '\\n'}\n    ]\n  }\n}\n","/**\n * @import {Node, Parent} from 'unist'\n */\n\n/**\n * @template Fn\n * @template Fallback\n * @typedef {Fn extends (value: any) => value is infer Thing ? Thing : Fallback} Predicate\n */\n\n/**\n * @callback Check\n *   Check that an arbitrary value is a node.\n * @param {unknown} this\n *   The given context.\n * @param {unknown} [node]\n *   Anything (typically a node).\n * @param {number | null | undefined} [index]\n *   The node’s position in its parent.\n * @param {Parent | null | undefined} [parent]\n *   The node’s parent.\n * @returns {boolean}\n *   Whether this is a node and passes a test.\n *\n * @typedef {Record<string, unknown> | Node} Props\n *   Object to check for equivalence.\n *\n *   Note: `Node` is included as it is common but is not indexable.\n *\n * @typedef {Array<Props | TestFunction | string> | ReadonlyArray<Props | TestFunction | string> | Props | TestFunction | string | null | undefined} Test\n *   Check for an arbitrary node.\n *\n * @callback TestFunction\n *   Check if a node passes a test.\n * @param {unknown} this\n *   The given context.\n * @param {Node} node\n *   A node.\n * @param {number | undefined} [index]\n *   The node’s position in its parent.\n * @param {Parent | undefined} [parent]\n *   The node’s parent.\n * @returns {boolean | undefined | void}\n *   Whether this node passes the test.\n *\n *   Note: `void` is included until TS sees no return as `undefined`.\n */\n\n/**\n * Check if `node` is a `Node` and whether it passes the given test.\n *\n * @param {unknown} node\n *   Thing to check, typically `Node`.\n * @param {Test} test\n *   A check for a specific node.\n * @param {number | null | undefined} index\n *   The node’s position in its parent.\n * @param {Parent | null | undefined} parent\n *   The node’s parent.\n * @param {unknown} context\n *   Context object (`this`) to pass to `test` functions.\n * @returns {boolean}\n *   Whether `node` is a node and passes a test.\n */\nexport const is =\n  // Note: overloads in JSDoc can’t yet use different `@template`s.\n  /**\n   * @type {(\n   *   (<Condition extends ReadonlyArray<string>>(node: unknown, test: Condition, index?: number | null | undefined, parent?: Parent | null | undefined, context?: unknown) => node is Node & {type: Condition[number]}) &\n   *   (<Condition extends Array<string>>(node: unknown, test: Condition, index?: number | null | undefined, parent?: Parent | null | undefined, context?: unknown) => node is Node & {type: Condition[number]}) &\n   *   (<Condition extends string>(node: unknown, test: Condition, index?: number | null | undefined, parent?: Parent | null | undefined, context?: unknown) => node is Node & {type: Condition}) &\n   *   (<Condition extends Props>(node: unknown, test: Condition, index?: number | null | undefined, parent?: Parent | null | undefined, context?: unknown) => node is Node & Condition) &\n   *   (<Condition extends TestFunction>(node: unknown, test: Condition, index?: number | null | undefined, parent?: Parent | null | undefined, context?: unknown) => node is Node & Predicate<Condition, Node>) &\n   *   ((node?: null | undefined) => false) &\n   *   ((node: unknown, test?: null | undefined, index?: number | null | undefined, parent?: Parent | null | undefined, context?: unknown) => node is Node) &\n   *   ((node: unknown, test?: Test, index?: number | null | undefined, parent?: Parent | null | undefined, context?: unknown) => boolean)\n   * )}\n   */\n  (\n    /**\n     * @param {unknown} [node]\n     * @param {Test} [test]\n     * @param {number | null | undefined} [index]\n     * @param {Parent | null | undefined} [parent]\n     * @param {unknown} [context]\n     * @returns {boolean}\n     */\n    // eslint-disable-next-line max-params\n    function (node, test, index, parent, context) {\n      const check = convert(test)\n\n      if (\n        index !== undefined &&\n        index !== null &&\n        (typeof index !== 'number' ||\n          index < 0 ||\n          index === Number.POSITIVE_INFINITY)\n      ) {\n        throw new Error('Expected positive finite index')\n      }\n\n      if (\n        parent !== undefined &&\n        parent !== null &&\n        (!is(parent) || !parent.children)\n      ) {\n        throw new Error('Expected parent node')\n      }\n\n      if (\n        (parent === undefined || parent === null) !==\n        (index === undefined || index === null)\n      ) {\n        throw new Error('Expected both parent and index')\n      }\n\n      return looksLikeANode(node)\n        ? check.call(context, node, index, parent)\n        : false\n    }\n  )\n\n/**\n * Generate an assertion from a test.\n *\n * Useful if you’re going to test many nodes, for example when creating a\n * utility where something else passes a compatible test.\n *\n * The created function is a bit faster because it expects valid input only:\n * a `node`, `index`, and `parent`.\n *\n * @param {Test} test\n *   *   when nullish, checks if `node` is a `Node`.\n *   *   when `string`, works like passing `(node) => node.type === test`.\n *   *   when `function` checks if function passed the node is true.\n *   *   when `object`, checks that all keys in test are in node, and that they have (strictly) equal values.\n *   *   when `array`, checks if any one of the subtests pass.\n * @returns {Check}\n *   An assertion.\n */\nexport const convert =\n  // Note: overloads in JSDoc can’t yet use different `@template`s.\n  /**\n   * @type {(\n   *   (<Condition extends string>(test: Condition) => (node: unknown, index?: number | null | undefined, parent?: Parent | null | undefined, context?: unknown) => node is Node & {type: Condition}) &\n   *   (<Condition extends Props>(test: Condition) => (node: unknown, index?: number | null | undefined, parent?: Parent | null | undefined, context?: unknown) => node is Node & Condition) &\n   *   (<Condition extends TestFunction>(test: Condition) => (node: unknown, index?: number | null | undefined, parent?: Parent | null | undefined, context?: unknown) => node is Node & Predicate<Condition, Node>) &\n   *   ((test?: null | undefined) => (node?: unknown, index?: number | null | undefined, parent?: Parent | null | undefined, context?: unknown) => node is Node) &\n   *   ((test?: Test) => Check)\n   * )}\n   */\n  (\n    /**\n     * @param {Test} [test]\n     * @returns {Check}\n     */\n    function (test) {\n      if (test === null || test === undefined) {\n        return ok\n      }\n\n      if (typeof test === 'function') {\n        return castFactory(test)\n      }\n\n      if (typeof test === 'object') {\n        return Array.isArray(test)\n          ? anyFactory(test)\n          : // Cast because `ReadonlyArray` goes into the above but `isArray`\n            // narrows to `Array`.\n            propertiesFactory(/** @type {Props} */ (test))\n      }\n\n      if (typeof test === 'string') {\n        return typeFactory(test)\n      }\n\n      throw new Error('Expected function, string, or object as test')\n    }\n  )\n\n/**\n * @param {Array<Props | TestFunction | string>} tests\n * @returns {Check}\n */\nfunction anyFactory(tests) {\n  /** @type {Array<Check>} */\n  const checks = []\n  let index = -1\n\n  while (++index < tests.length) {\n    checks[index] = convert(tests[index])\n  }\n\n  return castFactory(any)\n\n  /**\n   * @this {unknown}\n   * @type {TestFunction}\n   */\n  function any(...parameters) {\n    let index = -1\n\n    while (++index < checks.length) {\n      if (checks[index].apply(this, parameters)) return true\n    }\n\n    return false\n  }\n}\n\n/**\n * Turn an object into a test for a node with a certain fields.\n *\n * @param {Props} check\n * @returns {Check}\n */\nfunction propertiesFactory(check) {\n  const checkAsRecord = /** @type {Record<string, unknown>} */ (check)\n\n  return castFactory(all)\n\n  /**\n   * @param {Node} node\n   * @returns {boolean}\n   */\n  function all(node) {\n    const nodeAsRecord = /** @type {Record<string, unknown>} */ (\n      /** @type {unknown} */ (node)\n    )\n\n    /** @type {string} */\n    let key\n\n    for (key in check) {\n      if (nodeAsRecord[key] !== checkAsRecord[key]) return false\n    }\n\n    return true\n  }\n}\n\n/**\n * Turn a string into a test for a node with a certain type.\n *\n * @param {string} check\n * @returns {Check}\n */\nfunction typeFactory(check) {\n  return castFactory(type)\n\n  /**\n   * @param {Node} node\n   */\n  function type(node) {\n    return node && node.type === check\n  }\n}\n\n/**\n * Turn a custom test into a test for a node that passes that test.\n *\n * @param {TestFunction} testFunction\n * @returns {Check}\n */\nfunction castFactory(testFunction) {\n  return check\n\n  /**\n   * @this {unknown}\n   * @type {Check}\n   */\n  function check(value, index, parent) {\n    return Boolean(\n      looksLikeANode(value) &&\n        testFunction.call(\n          this,\n          value,\n          typeof index === 'number' ? index : undefined,\n          parent || undefined\n        )\n    )\n  }\n}\n\nfunction ok() {\n  return true\n}\n\n/**\n * @param {unknown} value\n * @returns {value is Node}\n */\nfunction looksLikeANode(value) {\n  return value !== null && typeof value === 'object' && 'type' in value\n}\n","/**\n * @import {Node as UnistNode, Parent as UnistParent} from 'unist'\n */\n\n/**\n * @typedef {Exclude<import('unist-util-is').Test, undefined> | undefined} Test\n *   Test from `unist-util-is`.\n *\n *   Note: we have remove and add `undefined`, because otherwise when generating\n *   automatic `.d.ts` files, TS tries to flatten paths from a local perspective,\n *   which doesn’t work when publishing on npm.\n */\n\n/**\n * @typedef {(\n *   Fn extends (value: any) => value is infer Thing\n *   ? Thing\n *   : Fallback\n * )} Predicate\n *   Get the value of a type guard `Fn`.\n * @template Fn\n *   Value; typically function that is a type guard (such as `(x): x is Y`).\n * @template Fallback\n *   Value to yield if `Fn` is not a type guard.\n */\n\n/**\n * @typedef {(\n *   Check extends null | undefined // No test.\n *   ? Value\n *   : Value extends {type: Check} // String (type) test.\n *   ? Value\n *   : Value extends Check // Partial test.\n *   ? Value\n *   : Check extends Function // Function test.\n *   ? Predicate<Check, Value> extends Value\n *     ? Predicate<Check, Value>\n *     : never\n *   : never // Some other test?\n * )} MatchesOne\n *   Check whether a node matches a primitive check in the type system.\n * @template Value\n *   Value; typically unist `Node`.\n * @template Check\n *   Value; typically `unist-util-is`-compatible test, but not arrays.\n */\n\n/**\n * @typedef {(\n *   Check extends ReadonlyArray<infer T>\n *   ? MatchesOne<Value, T>\n *   : Check extends Array<infer T>\n *   ? MatchesOne<Value, T>\n *   : MatchesOne<Value, Check>\n * )} Matches\n *   Check whether a node matches a check in the type system.\n * @template Value\n *   Value; typically unist `Node`.\n * @template Check\n *   Value; typically `unist-util-is`-compatible test.\n */\n\n/**\n * @typedef {0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10} Uint\n *   Number; capped reasonably.\n */\n\n/**\n * @typedef {I extends 0 ? 1 : I extends 1 ? 2 : I extends 2 ? 3 : I extends 3 ? 4 : I extends 4 ? 5 : I extends 5 ? 6 : I extends 6 ? 7 : I extends 7 ? 8 : I extends 8 ? 9 : 10} Increment\n *   Increment a number in the type system.\n * @template {Uint} [I=0]\n *   Index.\n */\n\n/**\n * @typedef {(\n *   Node extends UnistParent\n *   ? Node extends {children: Array<infer Children>}\n *     ? Child extends Children ? Node : never\n *     : never\n *   : never\n * )} InternalParent\n *   Collect nodes that can be parents of `Child`.\n * @template {UnistNode} Node\n *   All node types in a tree.\n * @template {UnistNode} Child\n *   Node to search for.\n */\n\n/**\n * @typedef {InternalParent<InclusiveDescendant<Tree>, Child>} Parent\n *   Collect nodes in `Tree` that can be parents of `Child`.\n * @template {UnistNode} Tree\n *   All node types in a tree.\n * @template {UnistNode} Child\n *   Node to search for.\n */\n\n/**\n * @typedef {(\n *   Depth extends Max\n *   ? never\n *   :\n *     | InternalParent<Node, Child>\n *     | InternalAncestor<Node, InternalParent<Node, Child>, Max, Increment<Depth>>\n * )} InternalAncestor\n *   Collect nodes in `Tree` that can be ancestors of `Child`.\n * @template {UnistNode} Node\n *   All node types in a tree.\n * @template {UnistNode} Child\n *   Node to search for.\n * @template {Uint} [Max=10]\n *   Max; searches up to this depth.\n * @template {Uint} [Depth=0]\n *   Current depth.\n */\n\n/**\n * @typedef {InternalAncestor<InclusiveDescendant<Tree>, Child>} Ancestor\n *   Collect nodes in `Tree` that can be ancestors of `Child`.\n * @template {UnistNode} Tree\n *   All node types in a tree.\n * @template {UnistNode} Child\n *   Node to search for.\n */\n\n/**\n * @typedef {(\n *   Tree extends UnistParent\n *     ? Depth extends Max\n *       ? Tree\n *       : Tree | InclusiveDescendant<Tree['children'][number], Max, Increment<Depth>>\n *     : Tree\n * )} InclusiveDescendant\n *   Collect all (inclusive) descendants of `Tree`.\n *\n *   > 👉 **Note**: for performance reasons, this seems to be the fastest way to\n *   > recurse without actually running into an infinite loop, which the\n *   > previous version did.\n *   >\n *   > Practically, a max of `2` is typically enough assuming a `Root` is\n *   > passed, but it doesn’t improve performance.\n *   > It gets higher with `List > ListItem > Table > TableRow > TableCell`.\n *   > Using up to `10` doesn’t hurt or help either.\n * @template {UnistNode} Tree\n *   Tree type.\n * @template {Uint} [Max=10]\n *   Max; searches up to this depth.\n * @template {Uint} [Depth=0]\n *   Current depth.\n */\n\n/**\n * @typedef {'skip' | boolean} Action\n *   Union of the action types.\n *\n * @typedef {number} Index\n *   Move to the sibling at `index` next (after node itself is completely\n *   traversed).\n *\n *   Useful if mutating the tree, such as removing the node the visitor is\n *   currently on, or any of its previous siblings.\n *   Results less than 0 or greater than or equal to `children.length` stop\n *   traversing the parent.\n *\n * @typedef {[(Action | null | undefined | void)?, (Index | null | undefined)?]} ActionTuple\n *   List with one or two values, the first an action, the second an index.\n *\n * @typedef {Action | ActionTuple | Index | null | undefined | void} VisitorResult\n *   Any value that can be returned from a visitor.\n */\n\n/**\n * @callback Visitor\n *   Handle a node (matching `test`, if given).\n *\n *   Visitors are free to transform `node`.\n *   They can also transform the parent of node (the last of `ancestors`).\n *\n *   Replacing `node` itself, if `SKIP` is not returned, still causes its\n *   descendants to be walked (which is a bug).\n *\n *   When adding or removing previous siblings of `node` (or next siblings, in\n *   case of reverse), the `Visitor` should return a new `Index` to specify the\n *   sibling to traverse after `node` is traversed.\n *   Adding or removing next siblings of `node` (or previous siblings, in case\n *   of reverse) is handled as expected without needing to return a new `Index`.\n *\n *   Removing the children property of an ancestor still results in them being\n *   traversed.\n * @param {Visited} node\n *   Found node.\n * @param {Array<VisitedParents>} ancestors\n *   Ancestors of `node`.\n * @returns {VisitorResult}\n *   What to do next.\n *\n *   An `Index` is treated as a tuple of `[CONTINUE, Index]`.\n *   An `Action` is treated as a tuple of `[Action]`.\n *\n *   Passing a tuple back only makes sense if the `Action` is `SKIP`.\n *   When the `Action` is `EXIT`, that action can be returned.\n *   When the `Action` is `CONTINUE`, `Index` can be returned.\n * @template {UnistNode} [Visited=UnistNode]\n *   Visited node type.\n * @template {UnistParent} [VisitedParents=UnistParent]\n *   Ancestor type.\n */\n\n/**\n * @typedef {Visitor<Matches<InclusiveDescendant<Tree>, Check>, Ancestor<Tree, Matches<InclusiveDescendant<Tree>, Check>>>} BuildVisitor\n *   Build a typed `Visitor` function from a tree and a test.\n *\n *   It will infer which values are passed as `node` and which as `parents`.\n * @template {UnistNode} [Tree=UnistNode]\n *   Tree type.\n * @template {Test} [Check=Test]\n *   Test type.\n */\n\nimport {convert} from 'unist-util-is'\nimport {color} from 'unist-util-visit-parents/do-not-use-color'\n\n/** @type {Readonly<ActionTuple>} */\nconst empty = []\n\n/**\n * Continue traversing as normal.\n */\nexport const CONTINUE = true\n\n/**\n * Stop traversing immediately.\n */\nexport const EXIT = false\n\n/**\n * Do not traverse this node’s children.\n */\nexport const SKIP = 'skip'\n\n/**\n * Visit nodes, with ancestral information.\n *\n * This algorithm performs *depth-first* *tree traversal* in *preorder*\n * (**NLR**) or if `reverse` is given, in *reverse preorder* (**NRL**).\n *\n * You can choose for which nodes `visitor` is called by passing a `test`.\n * For complex tests, you should test yourself in `visitor`, as it will be\n * faster and will have improved type information.\n *\n * Walking the tree is an intensive task.\n * Make use of the return values of the visitor when possible.\n * Instead of walking a tree multiple times, walk it once, use `unist-util-is`\n * to check if a node matches, and then perform different operations.\n *\n * You can change the tree.\n * See `Visitor` for more info.\n *\n * @overload\n * @param {Tree} tree\n * @param {Check} check\n * @param {BuildVisitor<Tree, Check>} visitor\n * @param {boolean | null | undefined} [reverse]\n * @returns {undefined}\n *\n * @overload\n * @param {Tree} tree\n * @param {BuildVisitor<Tree>} visitor\n * @param {boolean | null | undefined} [reverse]\n * @returns {undefined}\n *\n * @param {UnistNode} tree\n *   Tree to traverse.\n * @param {Visitor | Test} test\n *   `unist-util-is`-compatible test\n * @param {Visitor | boolean | null | undefined} [visitor]\n *   Handle each node.\n * @param {boolean | null | undefined} [reverse]\n *   Traverse in reverse preorder (NRL) instead of the default preorder (NLR).\n * @returns {undefined}\n *   Nothing.\n *\n * @template {UnistNode} Tree\n *   Node type.\n * @template {Test} Check\n *   `unist-util-is`-compatible test.\n */\nexport function visitParents(tree, test, visitor, reverse) {\n  /** @type {Test} */\n  let check\n\n  if (typeof test === 'function' && typeof visitor !== 'function') {\n    reverse = visitor\n    // @ts-expect-error no visitor given, so `visitor` is test.\n    visitor = test\n  } else {\n    // @ts-expect-error visitor given, so `test` isn’t a visitor.\n    check = test\n  }\n\n  const is = convert(check)\n  const step = reverse ? -1 : 1\n\n  factory(tree, undefined, [])()\n\n  /**\n   * @param {UnistNode} node\n   * @param {number | undefined} index\n   * @param {Array<UnistParent>} parents\n   */\n  function factory(node, index, parents) {\n    const value = /** @type {Record<string, unknown>} */ (\n      node && typeof node === 'object' ? node : {}\n    )\n\n    if (typeof value.type === 'string') {\n      const name =\n        // `hast`\n        typeof value.tagName === 'string'\n          ? value.tagName\n          : // `xast`\n            typeof value.name === 'string'\n            ? value.name\n            : undefined\n\n      Object.defineProperty(visit, 'name', {\n        value:\n          'node (' + color(node.type + (name ? '<' + name + '>' : '')) + ')'\n      })\n    }\n\n    return visit\n\n    function visit() {\n      /** @type {Readonly<ActionTuple>} */\n      let result = empty\n      /** @type {Readonly<ActionTuple>} */\n      let subresult\n      /** @type {number} */\n      let offset\n      /** @type {Array<UnistParent>} */\n      let grandparents\n\n      if (!test || is(node, index, parents[parents.length - 1] || undefined)) {\n        // @ts-expect-error: `visitor` is now a visitor.\n        result = toResult(visitor(node, parents))\n\n        if (result[0] === EXIT) {\n          return result\n        }\n      }\n\n      if ('children' in node && node.children) {\n        const nodeAsParent = /** @type {UnistParent} */ (node)\n\n        if (nodeAsParent.children && result[0] !== SKIP) {\n          offset = (reverse ? nodeAsParent.children.length : -1) + step\n          grandparents = parents.concat(nodeAsParent)\n\n          while (offset > -1 && offset < nodeAsParent.children.length) {\n            const child = nodeAsParent.children[offset]\n\n            subresult = factory(child, offset, grandparents)()\n\n            if (subresult[0] === EXIT) {\n              return subresult\n            }\n\n            offset =\n              typeof subresult[1] === 'number' ? subresult[1] : offset + step\n          }\n        }\n      }\n\n      return result\n    }\n  }\n}\n\n/**\n * Turn a return value into a clean result.\n *\n * @param {VisitorResult} value\n *   Valid return values from visitors.\n * @returns {Readonly<ActionTuple>}\n *   Clean result.\n */\nfunction toResult(value) {\n  if (Array.isArray(value)) {\n    return value\n  }\n\n  if (typeof value === 'number') {\n    return [CONTINUE, value]\n  }\n\n  return value === null || value === undefined ? empty : [value]\n}\n","/**\n * @import {Node as UnistNode, Parent as UnistParent} from 'unist'\n * @import {VisitorResult} from 'unist-util-visit-parents'\n */\n\n/**\n * @typedef {Exclude<import('unist-util-is').Test, undefined> | undefined} Test\n *   Test from `unist-util-is`.\n *\n *   Note: we have remove and add `undefined`, because otherwise when generating\n *   automatic `.d.ts` files, TS tries to flatten paths from a local perspective,\n *   which doesn’t work when publishing on npm.\n */\n\n// To do: use types from `unist-util-visit-parents` when it’s released.\n\n/**\n * @typedef {(\n *   Fn extends (value: any) => value is infer Thing\n *   ? Thing\n *   : Fallback\n * )} Predicate\n *   Get the value of a type guard `Fn`.\n * @template Fn\n *   Value; typically function that is a type guard (such as `(x): x is Y`).\n * @template Fallback\n *   Value to yield if `Fn` is not a type guard.\n */\n\n/**\n * @typedef {(\n *   Check extends null | undefined // No test.\n *   ? Value\n *   : Value extends {type: Check} // String (type) test.\n *   ? Value\n *   : Value extends Check // Partial test.\n *   ? Value\n *   : Check extends Function // Function test.\n *   ? Predicate<Check, Value> extends Value\n *     ? Predicate<Check, Value>\n *     : never\n *   : never // Some other test?\n * )} MatchesOne\n *   Check whether a node matches a primitive check in the type system.\n * @template Value\n *   Value; typically unist `Node`.\n * @template Check\n *   Value; typically `unist-util-is`-compatible test, but not arrays.\n */\n\n/**\n * @typedef {(\n *   Check extends ReadonlyArray<any>\n *   ? MatchesOne<Value, Check[number]>\n *   : MatchesOne<Value, Check>\n * )} Matches\n *   Check whether a node matches a check in the type system.\n * @template Value\n *   Value; typically unist `Node`.\n * @template Check\n *   Value; typically `unist-util-is`-compatible test.\n */\n\n/**\n * @typedef {0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10} Uint\n *   Number; capped reasonably.\n */\n\n/**\n * @typedef {I extends 0 ? 1 : I extends 1 ? 2 : I extends 2 ? 3 : I extends 3 ? 4 : I extends 4 ? 5 : I extends 5 ? 6 : I extends 6 ? 7 : I extends 7 ? 8 : I extends 8 ? 9 : 10} Increment\n *   Increment a number in the type system.\n * @template {Uint} [I=0]\n *   Index.\n */\n\n/**\n * @typedef {(\n *   Node extends UnistParent\n *   ? Node extends {children: Array<infer Children>}\n *     ? Child extends Children ? Node : never\n *     : never\n *   : never\n * )} InternalParent\n *   Collect nodes that can be parents of `Child`.\n * @template {UnistNode} Node\n *   All node types in a tree.\n * @template {UnistNode} Child\n *   Node to search for.\n */\n\n/**\n * @typedef {InternalParent<InclusiveDescendant<Tree>, Child>} Parent\n *   Collect nodes in `Tree` that can be parents of `Child`.\n * @template {UnistNode} Tree\n *   All node types in a tree.\n * @template {UnistNode} Child\n *   Node to search for.\n */\n\n/**\n * @typedef {(\n *   Depth extends Max\n *   ? never\n *   :\n *     | InternalParent<Node, Child>\n *     | InternalAncestor<Node, InternalParent<Node, Child>, Max, Increment<Depth>>\n * )} InternalAncestor\n *   Collect nodes in `Tree` that can be ancestors of `Child`.\n * @template {UnistNode} Node\n *   All node types in a tree.\n * @template {UnistNode} Child\n *   Node to search for.\n * @template {Uint} [Max=10]\n *   Max; searches up to this depth.\n * @template {Uint} [Depth=0]\n *   Current depth.\n */\n\n/**\n * @typedef {(\n *   Tree extends UnistParent\n *     ? Depth extends Max\n *       ? Tree\n *       : Tree | InclusiveDescendant<Tree['children'][number], Max, Increment<Depth>>\n *     : Tree\n * )} InclusiveDescendant\n *   Collect all (inclusive) descendants of `Tree`.\n *\n *   > 👉 **Note**: for performance reasons, this seems to be the fastest way to\n *   > recurse without actually running into an infinite loop, which the\n *   > previous version did.\n *   >\n *   > Practically, a max of `2` is typically enough assuming a `Root` is\n *   > passed, but it doesn’t improve performance.\n *   > It gets higher with `List > ListItem > Table > TableRow > TableCell`.\n *   > Using up to `10` doesn’t hurt or help either.\n * @template {UnistNode} Tree\n *   Tree type.\n * @template {Uint} [Max=10]\n *   Max; searches up to this depth.\n * @template {Uint} [Depth=0]\n *   Current depth.\n */\n\n/**\n * @callback Visitor\n *   Handle a node (matching `test`, if given).\n *\n *   Visitors are free to transform `node`.\n *   They can also transform `parent`.\n *\n *   Replacing `node` itself, if `SKIP` is not returned, still causes its\n *   descendants to be walked (which is a bug).\n *\n *   When adding or removing previous siblings of `node` (or next siblings, in\n *   case of reverse), the `Visitor` should return a new `Index` to specify the\n *   sibling to traverse after `node` is traversed.\n *   Adding or removing next siblings of `node` (or previous siblings, in case\n *   of reverse) is handled as expected without needing to return a new `Index`.\n *\n *   Removing the children property of `parent` still results in them being\n *   traversed.\n * @param {Visited} node\n *   Found node.\n * @param {Visited extends UnistNode ? number | undefined : never} index\n *   Index of `node` in `parent`.\n * @param {Ancestor extends UnistParent ? Ancestor | undefined : never} parent\n *   Parent of `node`.\n * @returns {VisitorResult}\n *   What to do next.\n *\n *   An `Index` is treated as a tuple of `[CONTINUE, Index]`.\n *   An `Action` is treated as a tuple of `[Action]`.\n *\n *   Passing a tuple back only makes sense if the `Action` is `SKIP`.\n *   When the `Action` is `EXIT`, that action can be returned.\n *   When the `Action` is `CONTINUE`, `Index` can be returned.\n * @template {UnistNode} [Visited=UnistNode]\n *   Visited node type.\n * @template {UnistParent} [Ancestor=UnistParent]\n *   Ancestor type.\n */\n\n/**\n * @typedef {Visitor<Visited, Parent<Ancestor, Visited>>} BuildVisitorFromMatch\n *   Build a typed `Visitor` function from a node and all possible parents.\n *\n *   It will infer which values are passed as `node` and which as `parent`.\n * @template {UnistNode} Visited\n *   Node type.\n * @template {UnistParent} Ancestor\n *   Parent type.\n */\n\n/**\n * @typedef {(\n *   BuildVisitorFromMatch<\n *     Matches<Descendant, Check>,\n *     Extract<Descendant, UnistParent>\n *   >\n * )} BuildVisitorFromDescendants\n *   Build a typed `Visitor` function from a list of descendants and a test.\n *\n *   It will infer which values are passed as `node` and which as `parent`.\n * @template {UnistNode} Descendant\n *   Node type.\n * @template {Test} Check\n *   Test type.\n */\n\n/**\n * @typedef {(\n *   BuildVisitorFromDescendants<\n *     InclusiveDescendant<Tree>,\n *     Check\n *   >\n * )} BuildVisitor\n *   Build a typed `Visitor` function from a tree and a test.\n *\n *   It will infer which values are passed as `node` and which as `parent`.\n * @template {UnistNode} [Tree=UnistNode]\n *   Node type.\n * @template {Test} [Check=Test]\n *   Test type.\n */\n\nimport {visitParents} from 'unist-util-visit-parents'\n\nexport {CONTINUE, EXIT, SKIP} from 'unist-util-visit-parents'\n\n/**\n * Visit nodes.\n *\n * This algorithm performs *depth-first* *tree traversal* in *preorder*\n * (**NLR**) or if `reverse` is given, in *reverse preorder* (**NRL**).\n *\n * You can choose for which nodes `visitor` is called by passing a `test`.\n * For complex tests, you should test yourself in `visitor`, as it will be\n * faster and will have improved type information.\n *\n * Walking the tree is an intensive task.\n * Make use of the return values of the visitor when possible.\n * Instead of walking a tree multiple times, walk it once, use `unist-util-is`\n * to check if a node matches, and then perform different operations.\n *\n * You can change the tree.\n * See `Visitor` for more info.\n *\n * @overload\n * @param {Tree} tree\n * @param {Check} check\n * @param {BuildVisitor<Tree, Check>} visitor\n * @param {boolean | null | undefined} [reverse]\n * @returns {undefined}\n *\n * @overload\n * @param {Tree} tree\n * @param {BuildVisitor<Tree>} visitor\n * @param {boolean | null | undefined} [reverse]\n * @returns {undefined}\n *\n * @param {UnistNode} tree\n *   Tree to traverse.\n * @param {Visitor | Test} testOrVisitor\n *   `unist-util-is`-compatible test (optional, omit to pass a visitor).\n * @param {Visitor | boolean | null | undefined} [visitorOrReverse]\n *   Handle each node (when test is omitted, pass `reverse`).\n * @param {boolean | null | undefined} [maybeReverse=false]\n *   Traverse in reverse preorder (NRL) instead of the default preorder (NLR).\n * @returns {undefined}\n *   Nothing.\n *\n * @template {UnistNode} Tree\n *   Node type.\n * @template {Test} Check\n *   `unist-util-is`-compatible test.\n */\nexport function visit(tree, testOrVisitor, visitorOrReverse, maybeReverse) {\n  /** @type {boolean | null | undefined} */\n  let reverse\n  /** @type {Test} */\n  let test\n  /** @type {Visitor} */\n  let visitor\n\n  if (\n    typeof testOrVisitor === 'function' &&\n    typeof visitorOrReverse !== 'function'\n  ) {\n    test = undefined\n    visitor = testOrVisitor\n    reverse = visitorOrReverse\n  } else {\n    // @ts-expect-error: assume the overload with test was given.\n    test = testOrVisitor\n    // @ts-expect-error: assume the overload with test was given.\n    visitor = visitorOrReverse\n    reverse = maybeReverse\n  }\n\n  visitParents(tree, test, overload, reverse)\n\n  /**\n   * @param {UnistNode} node\n   * @param {Array<UnistParent>} parents\n   */\n  function overload(node, parents) {\n    const parent = parents[parents.length - 1]\n    const index = parent ? parent.children.indexOf(node) : undefined\n    return visitor(node, index, parent)\n  }\n}\n","/**\n * @import {\n *   ElementContent as HastElementContent,\n *   Element as HastElement,\n *   Nodes as HastNodes,\n *   Properties as HastProperties,\n *   RootContent as HastRootContent,\n *   Text as HastText\n * } from 'hast'\n * @import {\n *   Definition as MdastDefinition,\n *   FootnoteDefinition as MdastFootnoteDefinition,\n *   Nodes as MdastNodes,\n *   Parents as MdastParents\n * } from 'mdast'\n * @import {VFile} from 'vfile'\n * @import {\n *   FootnoteBackContentTemplate,\n *   FootnoteBackLabelTemplate\n * } from './footer.js'\n */\n\n/**\n * @callback Handler\n *   Handle a node.\n * @param {State} state\n *   Info passed around.\n * @param {any} node\n *   mdast node to handle.\n * @param {MdastParents | undefined} parent\n *   Parent of `node`.\n * @returns {Array<HastElementContent> | HastElementContent | undefined}\n *   hast node.\n *\n * @typedef {Partial<Record<MdastNodes['type'], Handler>>} Handlers\n *   Handle nodes.\n *\n * @typedef Options\n *   Configuration (optional).\n * @property {boolean | null | undefined} [allowDangerousHtml=false]\n *   Whether to persist raw HTML in markdown in the hast tree (default:\n *   `false`).\n * @property {string | null | undefined} [clobberPrefix='user-content-']\n *   Prefix to use before the `id` property on footnotes to prevent them from\n *   *clobbering* (default: `'user-content-'`).\n *\n *   Pass `''` for trusted markdown and when you are careful with\n *   polyfilling.\n *   You could pass a different prefix.\n *\n *   DOM clobbering is this:\n *\n *   ```html\n *   <p id=\"x\"></p>\n *   <script>alert(x) // `x` now refers to the `p#x` DOM element</script>\n *   ```\n *\n *   The above example shows that elements are made available by browsers, by\n *   their ID, on the `window` object.\n *   This is a security risk because you might be expecting some other variable\n *   at that place.\n *   It can also break polyfills.\n *   Using a prefix solves these problems.\n * @property {VFile | null | undefined} [file]\n *   Corresponding virtual file representing the input document (optional).\n * @property {FootnoteBackContentTemplate | string | null | undefined} [footnoteBackContent]\n *   Content of the backreference back to references (default: `defaultFootnoteBackContent`).\n *\n *   The default value is:\n *\n *   ```js\n *   function defaultFootnoteBackContent(_, rereferenceIndex) {\n *     const result = [{type: 'text', value: '↩'}]\n *\n *     if (rereferenceIndex > 1) {\n *       result.push({\n *         type: 'element',\n *         tagName: 'sup',\n *         properties: {},\n *         children: [{type: 'text', value: String(rereferenceIndex)}]\n *       })\n *     }\n *\n *     return result\n *   }\n *   ```\n *\n *   This content is used in the `a` element of each backreference (the `↩`\n *   links).\n * @property {FootnoteBackLabelTemplate | string | null | undefined} [footnoteBackLabel]\n *   Label to describe the backreference back to references (default:\n *   `defaultFootnoteBackLabel`).\n *\n *   The default value is:\n *\n *   ```js\n *   function defaultFootnoteBackLabel(referenceIndex, rereferenceIndex) {\n *    return (\n *      'Back to reference ' +\n *      (referenceIndex + 1) +\n *      (rereferenceIndex > 1 ? '-' + rereferenceIndex : '')\n *    )\n *   }\n *   ```\n *\n *   Change it when the markdown is not in English.\n *\n *   This label is used in the `ariaLabel` property on each backreference\n *   (the `↩` links).\n *   It affects users of assistive technology.\n * @property {string | null | undefined} [footnoteLabel='Footnotes']\n *   Textual label to use for the footnotes section (default: `'Footnotes'`).\n *\n *   Change it when the markdown is not in English.\n *\n *   This label is typically hidden visually (assuming a `sr-only` CSS class\n *   is defined that does that) and so affects screen readers only.\n *   If you do have such a class, but want to show this section to everyone,\n *   pass different properties with the `footnoteLabelProperties` option.\n * @property {HastProperties | null | undefined} [footnoteLabelProperties={className: ['sr-only']}]\n *   Properties to use on the footnote label (default: `{className:\n *   ['sr-only']}`).\n *\n *   Change it to show the label and add other properties.\n *\n *   This label is typically hidden visually (assuming an `sr-only` CSS class\n *   is defined that does that) and so affects screen readers only.\n *   If you do have such a class, but want to show this section to everyone,\n *   pass an empty string.\n *   You can also add different properties.\n *\n *   > **Note**: `id: 'footnote-label'` is always added, because footnote\n *   > calls use it with `aria-describedby` to provide an accessible label.\n * @property {string | null | undefined} [footnoteLabelTagName='h2']\n *   HTML tag name to use for the footnote label element (default: `'h2'`).\n *\n *   Change it to match your document structure.\n *\n *   This label is typically hidden visually (assuming a `sr-only` CSS class\n *   is defined that does that) and so affects screen readers only.\n *   If you do have such a class, but want to show this section to everyone,\n *   pass different properties with the `footnoteLabelProperties` option.\n * @property {Handlers | null | undefined} [handlers]\n *   Extra handlers for nodes (optional).\n * @property {Array<MdastNodes['type']> | null | undefined} [passThrough]\n *   List of custom mdast node types to pass through (keep) in hast (note that\n *   the node itself is passed, but eventual children are transformed)\n *   (optional).\n * @property {Handler | null | undefined} [unknownHandler]\n *   Handler for all unknown nodes (optional).\n *\n * @typedef State\n *   Info passed around.\n * @property {(node: MdastNodes) => Array<HastElementContent>} all\n *   Transform the children of an mdast parent to hast.\n * @property {<Type extends HastNodes>(from: MdastNodes, to: Type) => HastElement | Type} applyData\n *   Honor the `data` of `from`, and generate an element instead of `node`.\n * @property {Map<string, MdastDefinition>} definitionById\n *   Definitions by their identifier.\n * @property {Map<string, MdastFootnoteDefinition>} footnoteById\n *   Footnote definitions by their identifier.\n * @property {Map<string, number>} footnoteCounts\n *   Counts for how often the same footnote was called.\n * @property {Array<string>} footnoteOrder\n *   Identifiers of order when footnote calls first appear in tree order.\n * @property {Handlers} handlers\n *   Applied handlers.\n * @property {(node: MdastNodes, parent: MdastParents | undefined) => Array<HastElementContent> | HastElementContent | undefined} one\n *   Transform an mdast node to hast.\n * @property {Options} options\n *   Configuration.\n * @property {(from: MdastNodes, node: HastNodes) => undefined} patch\n *   Copy a node’s positional info.\n * @property {<Type extends HastRootContent>(nodes: Array<Type>, loose?: boolean | undefined) => Array<HastText | Type>} wrap\n *   Wrap `nodes` with line endings between each node, adds initial/final line endings when `loose`.\n */\n\nimport structuredClone from '@ungap/structured-clone'\nimport {visit} from 'unist-util-visit'\nimport {position} from 'unist-util-position'\nimport {handlers as defaultHandlers} from './handlers/index.js'\n\nconst own = {}.hasOwnProperty\n\n/** @type {Options} */\nconst emptyOptions = {}\n\n/**\n * Create `state` from an mdast tree.\n *\n * @param {MdastNodes} tree\n *   mdast node to transform.\n * @param {Options | null | undefined} [options]\n *   Configuration (optional).\n * @returns {State}\n *   `state` function.\n */\nexport function createState(tree, options) {\n  const settings = options || emptyOptions\n  /** @type {Map<string, MdastDefinition>} */\n  const definitionById = new Map()\n  /** @type {Map<string, MdastFootnoteDefinition>} */\n  const footnoteById = new Map()\n  /** @type {Map<string, number>} */\n  const footnoteCounts = new Map()\n  /** @type {Handlers} */\n  // @ts-expect-error: the root handler returns a root.\n  // Hard to type.\n  const handlers = {...defaultHandlers, ...settings.handlers}\n\n  /** @type {State} */\n  const state = {\n    all,\n    applyData,\n    definitionById,\n    footnoteById,\n    footnoteCounts,\n    footnoteOrder: [],\n    handlers,\n    one,\n    options: settings,\n    patch,\n    wrap\n  }\n\n  visit(tree, function (node) {\n    if (node.type === 'definition' || node.type === 'footnoteDefinition') {\n      const map = node.type === 'definition' ? definitionById : footnoteById\n      const id = String(node.identifier).toUpperCase()\n\n      // Mimick CM behavior of link definitions.\n      // See: <https://github.com/syntax-tree/mdast-util-definitions/blob/9032189/lib/index.js#L20-L21>.\n      if (!map.has(id)) {\n        // @ts-expect-error: node type matches map.\n        map.set(id, node)\n      }\n    }\n  })\n\n  return state\n\n  /**\n   * Transform an mdast node into a hast node.\n   *\n   * @param {MdastNodes} node\n   *   mdast node.\n   * @param {MdastParents | undefined} [parent]\n   *   Parent of `node`.\n   * @returns {Array<HastElementContent> | HastElementContent | undefined}\n   *   Resulting hast node.\n   */\n  function one(node, parent) {\n    const type = node.type\n    const handle = state.handlers[type]\n\n    if (own.call(state.handlers, type) && handle) {\n      return handle(state, node, parent)\n    }\n\n    if (state.options.passThrough && state.options.passThrough.includes(type)) {\n      if ('children' in node) {\n        const {children, ...shallow} = node\n        const result = structuredClone(shallow)\n        // @ts-expect-error: TS doesn’t understand…\n        result.children = state.all(node)\n        // @ts-expect-error: TS doesn’t understand…\n        return result\n      }\n\n      // @ts-expect-error: it’s custom.\n      return structuredClone(node)\n    }\n\n    const unknown = state.options.unknownHandler || defaultUnknownHandler\n\n    return unknown(state, node, parent)\n  }\n\n  /**\n   * Transform the children of an mdast node into hast nodes.\n   *\n   * @param {MdastNodes} parent\n   *   mdast node to compile\n   * @returns {Array<HastElementContent>}\n   *   Resulting hast nodes.\n   */\n  function all(parent) {\n    /** @type {Array<HastElementContent>} */\n    const values = []\n\n    if ('children' in parent) {\n      const nodes = parent.children\n      let index = -1\n      while (++index < nodes.length) {\n        const result = state.one(nodes[index], parent)\n\n        // To do: see if we van clean this? Can we merge texts?\n        if (result) {\n          if (index && nodes[index - 1].type === 'break') {\n            if (!Array.isArray(result) && result.type === 'text') {\n              result.value = trimMarkdownSpaceStart(result.value)\n            }\n\n            if (!Array.isArray(result) && result.type === 'element') {\n              const head = result.children[0]\n\n              if (head && head.type === 'text') {\n                head.value = trimMarkdownSpaceStart(head.value)\n              }\n            }\n          }\n\n          if (Array.isArray(result)) {\n            values.push(...result)\n          } else {\n            values.push(result)\n          }\n        }\n      }\n    }\n\n    return values\n  }\n}\n\n/**\n * Copy a node’s positional info.\n *\n * @param {MdastNodes} from\n *   mdast node to copy from.\n * @param {HastNodes} to\n *   hast node to copy into.\n * @returns {undefined}\n *   Nothing.\n */\nfunction patch(from, to) {\n  if (from.position) to.position = position(from)\n}\n\n/**\n * Honor the `data` of `from` and maybe generate an element instead of `to`.\n *\n * @template {HastNodes} Type\n *   Node type.\n * @param {MdastNodes} from\n *   mdast node to use data from.\n * @param {Type} to\n *   hast node to change.\n * @returns {HastElement | Type}\n *   Nothing.\n */\nfunction applyData(from, to) {\n  /** @type {HastElement | Type} */\n  let result = to\n\n  // Handle `data.hName`, `data.hProperties, `data.hChildren`.\n  if (from && from.data) {\n    const hName = from.data.hName\n    const hChildren = from.data.hChildren\n    const hProperties = from.data.hProperties\n\n    if (typeof hName === 'string') {\n      // Transforming the node resulted in an element with a different name\n      // than wanted:\n      if (result.type === 'element') {\n        result.tagName = hName\n      }\n      // Transforming the node resulted in a non-element, which happens for\n      // raw, text, and root nodes (unless custom handlers are passed).\n      // The intent of `hName` is to create an element, but likely also to keep\n      // the content around (otherwise: pass `hChildren`).\n      else {\n        /** @type {Array<HastElementContent>} */\n        // @ts-expect-error: assume no doctypes in `root`.\n        const children = 'children' in result ? result.children : [result]\n        result = {type: 'element', tagName: hName, properties: {}, children}\n      }\n    }\n\n    if (result.type === 'element' && hProperties) {\n      Object.assign(result.properties, structuredClone(hProperties))\n    }\n\n    if (\n      'children' in result &&\n      result.children &&\n      hChildren !== null &&\n      hChildren !== undefined\n    ) {\n      result.children = hChildren\n    }\n  }\n\n  return result\n}\n\n/**\n * Transform an unknown node.\n *\n * @param {State} state\n *   Info passed around.\n * @param {MdastNodes} node\n *   Unknown mdast node.\n * @returns {HastElement | HastText}\n *   Resulting hast node.\n */\nfunction defaultUnknownHandler(state, node) {\n  const data = node.data || {}\n  /** @type {HastElement | HastText} */\n  const result =\n    'value' in node &&\n    !(own.call(data, 'hProperties') || own.call(data, 'hChildren'))\n      ? {type: 'text', value: node.value}\n      : {\n          type: 'element',\n          tagName: 'div',\n          properties: {},\n          children: state.all(node)\n        }\n\n  state.patch(node, result)\n  return state.applyData(node, result)\n}\n\n/**\n * Wrap `nodes` with line endings between each node.\n *\n * @template {HastRootContent} Type\n *   Node type.\n * @param {Array<Type>} nodes\n *   List of nodes to wrap.\n * @param {boolean | undefined} [loose=false]\n *   Whether to add line endings at start and end (default: `false`).\n * @returns {Array<HastText | Type>}\n *   Wrapped nodes.\n */\nexport function wrap(nodes, loose) {\n  /** @type {Array<HastText | Type>} */\n  const result = []\n  let index = -1\n\n  if (loose) {\n    result.push({type: 'text', value: '\\n'})\n  }\n\n  while (++index < nodes.length) {\n    if (index) result.push({type: 'text', value: '\\n'})\n    result.push(nodes[index])\n  }\n\n  if (loose && nodes.length > 0) {\n    result.push({type: 'text', value: '\\n'})\n  }\n\n  return result\n}\n\n/**\n * Trim spaces and tabs at the start of `value`.\n *\n * @param {string} value\n *   Value to trim.\n * @returns {string}\n *   Result.\n */\nfunction trimMarkdownSpaceStart(value) {\n  let index = 0\n  let code = value.charCodeAt(index)\n\n  while (code === 9 || code === 32) {\n    index++\n    code = value.charCodeAt(index)\n  }\n\n  return value.slice(index)\n}\n","/**\n * @import {Nodes as HastNodes} from 'hast'\n * @import {Nodes as MdastNodes} from 'mdast'\n * @import {Options} from './state.js'\n */\n\nimport {ok as assert} from 'devlop'\nimport {footer} from './footer.js'\nimport {createState} from './state.js'\n\n/**\n * Transform mdast to hast.\n *\n * ##### Notes\n *\n * ###### HTML\n *\n * Raw HTML is available in mdast as `html` nodes and can be embedded in hast\n * as semistandard `raw` nodes.\n * Most utilities ignore `raw` nodes but two notable ones don’t:\n *\n * *   `hast-util-to-html` also has an option `allowDangerousHtml` which will\n *     output the raw HTML.\n *     This is typically discouraged as noted by the option name but is useful\n *     if you completely trust authors\n * *   `hast-util-raw` can handle the raw embedded HTML strings by parsing them\n *     into standard hast nodes (`element`, `text`, etc).\n *     This is a heavy task as it needs a full HTML parser, but it is the only\n *     way to support untrusted content\n *\n * ###### Footnotes\n *\n * Many options supported here relate to footnotes.\n * Footnotes are not specified by CommonMark, which we follow by default.\n * They are supported by GitHub, so footnotes can be enabled in markdown with\n * `mdast-util-gfm`.\n *\n * The options `footnoteBackLabel` and `footnoteLabel` define natural language\n * that explains footnotes, which is hidden for sighted users but shown to\n * assistive technology.\n * When your page is not in English, you must define translated values.\n *\n * Back references use ARIA attributes, but the section label itself uses a\n * heading that is hidden with an `sr-only` class.\n * To show it to sighted users, define different attributes in\n * `footnoteLabelProperties`.\n *\n * ###### Clobbering\n *\n * Footnotes introduces a problem, as it links footnote calls to footnote\n * definitions on the page through `id` attributes generated from user content,\n * which results in DOM clobbering.\n *\n * DOM clobbering is this:\n *\n * ```html\n * <p id=x></p>\n * <script>alert(x) // `x` now refers to the DOM `p#x` element</script>\n * ```\n *\n * Elements by their ID are made available by browsers on the `window` object,\n * which is a security risk.\n * Using a prefix solves this problem.\n *\n * More information on how to handle clobbering and the prefix is explained in\n * Example: headings (DOM clobbering) in `rehype-sanitize`.\n *\n * ###### Unknown nodes\n *\n * Unknown nodes are nodes with a type that isn’t in `handlers` or `passThrough`.\n * The default behavior for unknown nodes is:\n *\n * *   when the node has a `value` (and doesn’t have `data.hName`,\n *     `data.hProperties`, or `data.hChildren`, see later), create a hast `text`\n *     node\n * *   otherwise, create a `<div>` element (which could be changed with\n *     `data.hName`), with its children mapped from mdast to hast as well\n *\n * This behavior can be changed by passing an `unknownHandler`.\n *\n * @param {MdastNodes} tree\n *   mdast tree.\n * @param {Options | null | undefined} [options]\n *   Configuration (optional).\n * @returns {HastNodes}\n *   hast tree.\n */\nexport function toHast(tree, options) {\n  const state = createState(tree, options)\n  const node = state.one(tree, undefined)\n  const foot = footer(state)\n  /** @type {HastNodes} */\n  const result = Array.isArray(node)\n    ? {type: 'root', children: node}\n    : node || {type: 'root', children: []}\n\n  if (foot) {\n    // If there’s a footer, there were definitions, meaning block\n    // content.\n    // So `result` is a parent node.\n    assert('children' in result)\n    result.children.push({type: 'text', value: '\\n'}, foot)\n  }\n\n  return result\n}\n","/**\n * @import {Root as HastRoot} from 'hast'\n * @import {Root as MdastRoot} from 'mdast'\n * @import {Options as ToHastOptions} from 'mdast-util-to-hast'\n * @import {Processor} from 'unified'\n * @import {VFile} from 'vfile'\n */\n\n/**\n * @typedef {Omit<ToHastOptions, 'file'>} Options\n *\n * @callback TransformBridge\n *   Bridge-mode.\n *\n *   Runs the destination with the new hast tree.\n *   Discards result.\n * @param {MdastRoot} tree\n *   Tree.\n * @param {VFile} file\n *   File.\n * @returns {Promise<undefined>}\n *   Nothing.\n *\n * @callback TransformMutate\n *  Mutate-mode.\n *\n *  Further transformers run on the hast tree.\n * @param {MdastRoot} tree\n *   Tree.\n * @param {VFile} file\n *   File.\n * @returns {HastRoot}\n *   Tree (hast).\n */\n\nimport {toHast} from 'mdast-util-to-hast'\n\n/**\n * Turn markdown into HTML.\n *\n * ##### Notes\n *\n * ###### Signature\n *\n * * if a processor is given,\n *   runs the (rehype) plugins used on it with a hast tree,\n *   then discards the result (*bridge mode*)\n * * otherwise,\n *   returns a hast tree,\n *   the plugins used after `remarkRehype` are rehype plugins (*mutate mode*)\n *\n * > 👉 **Note**:\n * > It’s highly unlikely that you want to pass a `processor`.\n *\n * ###### HTML\n *\n * Raw HTML is available in mdast as `html` nodes and can be embedded in hast\n * as semistandard `raw` nodes.\n * Most plugins ignore `raw` nodes but two notable ones don’t:\n *\n * * `rehype-stringify` also has an option `allowDangerousHtml` which will\n *   output the raw HTML.\n *   This is typically discouraged as noted by the option name but is useful if\n *   you completely trust authors\n * * `rehype-raw` can handle the raw embedded HTML strings by parsing them\n *   into standard hast nodes (`element`, `text`, etc);\n *   this is a heavy task as it needs a full HTML parser,\n *   but it is the only way to support untrusted content\n *\n * ###### Footnotes\n *\n * Many options supported here relate to footnotes.\n * Footnotes are not specified by CommonMark,\n * which we follow by default.\n * They are supported by GitHub,\n * so footnotes can be enabled in markdown with `remark-gfm`.\n *\n * The options `footnoteBackLabel` and `footnoteLabel` define natural language\n * that explains footnotes,\n * which is hidden for sighted users but shown to assistive technology.\n * When your page is not in English,\n * you must define translated values.\n *\n * Back references use ARIA attributes,\n * but the section label itself uses a heading that is hidden with an\n * `sr-only` class.\n * To show it to sighted users,\n * define different attributes in `footnoteLabelProperties`.\n *\n * ###### Clobbering\n *\n * Footnotes introduces a problem,\n * as it links footnote calls to footnote definitions on the page through `id`\n * attributes generated from user content,\n * which results in DOM clobbering.\n *\n * DOM clobbering is this:\n *\n * ```html\n * <p id=x></p>\n * <script>alert(x) // `x` now refers to the DOM `p#x` element</script>\n * ```\n *\n * Elements by their ID are made available by browsers on the `window` object,\n * which is a security risk.\n * Using a prefix solves this problem.\n *\n * More information on how to handle clobbering and the prefix is explained in\n * *Example: headings (DOM clobbering)* in `rehype-sanitize`.\n *\n * ###### Unknown nodes\n *\n * Unknown nodes are nodes with a type that isn’t in `handlers` or `passThrough`.\n * The default behavior for unknown nodes is:\n *\n * * when the node has a `value`\n *   (and doesn’t have `data.hName`, `data.hProperties`, or `data.hChildren`,\n *   see later),\n *   create a hast `text` node\n * * otherwise,\n *   create a `<div>` element (which could be changed with `data.hName`),\n *   with its children mapped from mdast to hast as well\n *\n * This behavior can be changed by passing an `unknownHandler`.\n *\n * @overload\n * @param {Processor} processor\n * @param {Readonly<Options> | null | undefined} [options]\n * @returns {TransformBridge}\n *\n * @overload\n * @param {Readonly<Options> | null | undefined} [options]\n * @returns {TransformMutate}\n *\n * @overload\n * @param {Readonly<Options> | Processor | null | undefined} [destination]\n * @param {Readonly<Options> | null | undefined} [options]\n * @returns {TransformBridge | TransformMutate}\n *\n * @param {Readonly<Options> | Processor | null | undefined} [destination]\n *   Processor or configuration (optional).\n * @param {Readonly<Options> | null | undefined} [options]\n *   When a processor was given,\n *   configuration (optional).\n * @returns {TransformBridge | TransformMutate}\n *   Transform.\n */\nexport default function remarkRehype(destination, options) {\n  if (destination && 'run' in destination) {\n    /**\n     * @type {TransformBridge}\n     */\n    return async function (tree, file) {\n      // Cast because root in -> root out.\n      const hastTree = /** @type {HastRoot} */ (\n        toHast(tree, {file, ...options})\n      )\n      await destination.run(hastTree, file)\n    }\n  }\n\n  /**\n   * @type {TransformMutate}\n   */\n  return function (tree, file) {\n    // Cast because root in -> root out.\n    // To do: in the future, disallow ` || options` fallback.\n    // With `unified-engine`, `destination` can be `undefined` but\n    // `options` will be the file set.\n    // We should not pass that as `options`.\n    return /** @type {HastRoot} */ (\n      toHast(tree, {file, ...(destination || options)})\n    )\n  }\n}\n","/**\n * Throw a given error.\n *\n * @param {Error|null|undefined} [error]\n *   Maybe error.\n * @returns {asserts error is null|undefined}\n */\nexport function bail(error) {\n  if (error) {\n    throw error\n  }\n}\n","'use strict';\n\nvar hasOwn = Object.prototype.hasOwnProperty;\nvar toStr = Object.prototype.toString;\nvar defineProperty = Object.defineProperty;\nvar gOPD = Object.getOwnPropertyDescriptor;\n\nvar isArray = function isArray(arr) {\n\tif (typeof Array.isArray === 'function') {\n\t\treturn Array.isArray(arr);\n\t}\n\n\treturn toStr.call(arr) === '[object Array]';\n};\n\nvar isPlainObject = function isPlainObject(obj) {\n\tif (!obj || toStr.call(obj) !== '[object Object]') {\n\t\treturn false;\n\t}\n\n\tvar hasOwnConstructor = hasOwn.call(obj, 'constructor');\n\tvar hasIsPrototypeOf = obj.constructor && obj.constructor.prototype && hasOwn.call(obj.constructor.prototype, 'isPrototypeOf');\n\t// Not own constructor property must be Object\n\tif (obj.constructor && !hasOwnConstructor && !hasIsPrototypeOf) {\n\t\treturn false;\n\t}\n\n\t// Own properties are enumerated firstly, so to speed up,\n\t// if last one is own, then all properties are own.\n\tvar key;\n\tfor (key in obj) { /**/ }\n\n\treturn typeof key === 'undefined' || hasOwn.call(obj, key);\n};\n\n// If name is '__proto__', and Object.defineProperty is available, define __proto__ as an own property on target\nvar setProperty = function setProperty(target, options) {\n\tif (defineProperty && options.name === '__proto__') {\n\t\tdefineProperty(target, options.name, {\n\t\t\tenumerable: true,\n\t\t\tconfigurable: true,\n\t\t\tvalue: options.newValue,\n\t\t\twritable: true\n\t\t});\n\t} else {\n\t\ttarget[options.name] = options.newValue;\n\t}\n};\n\n// Return undefined instead of __proto__ if '__proto__' is not an own property\nvar getProperty = function getProperty(obj, name) {\n\tif (name === '__proto__') {\n\t\tif (!hasOwn.call(obj, name)) {\n\t\t\treturn void 0;\n\t\t} else if (gOPD) {\n\t\t\t// In early versions of node, obj['__proto__'] is buggy when obj has\n\t\t\t// __proto__ as an own property. Object.getOwnPropertyDescriptor() works.\n\t\t\treturn gOPD(obj, name).value;\n\t\t}\n\t}\n\n\treturn obj[name];\n};\n\nmodule.exports = function extend() {\n\tvar options, name, src, copy, copyIsArray, clone;\n\tvar target = arguments[0];\n\tvar i = 1;\n\tvar length = arguments.length;\n\tvar deep = false;\n\n\t// Handle a deep copy situation\n\tif (typeof target === 'boolean') {\n\t\tdeep = target;\n\t\ttarget = arguments[1] || {};\n\t\t// skip the boolean and the target\n\t\ti = 2;\n\t}\n\tif (target == null || (typeof target !== 'object' && typeof target !== 'function')) {\n\t\ttarget = {};\n\t}\n\n\tfor (; i < length; ++i) {\n\t\toptions = arguments[i];\n\t\t// Only deal with non-null/undefined values\n\t\tif (options != null) {\n\t\t\t// Extend the base object\n\t\t\tfor (name in options) {\n\t\t\t\tsrc = getProperty(target, name);\n\t\t\t\tcopy = getProperty(options, name);\n\n\t\t\t\t// Prevent never-ending loop\n\t\t\t\tif (target !== copy) {\n\t\t\t\t\t// Recurse if we're merging plain objects or arrays\n\t\t\t\t\tif (deep && copy && (isPlainObject(copy) || (copyIsArray = isArray(copy)))) {\n\t\t\t\t\t\tif (copyIsArray) {\n\t\t\t\t\t\t\tcopyIsArray = false;\n\t\t\t\t\t\t\tclone = src && isArray(src) ? src : [];\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tclone = src && isPlainObject(src) ? src : {};\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Never move original objects, clone them\n\t\t\t\t\t\tsetProperty(target, { name: name, newValue: extend(deep, clone, copy) });\n\n\t\t\t\t\t// Don't bring in undefined values\n\t\t\t\t\t} else if (typeof copy !== 'undefined') {\n\t\t\t\t\t\tsetProperty(target, { name: name, newValue: copy });\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Return the modified object\n\treturn target;\n};\n","export default function isPlainObject(value) {\n\tif (typeof value !== 'object' || value === null) {\n\t\treturn false;\n\t}\n\n\tconst prototype = Object.getPrototypeOf(value);\n\treturn (prototype === null || prototype === Object.prototype || Object.getPrototypeOf(prototype) === null) && !(Symbol.toStringTag in value) && !(Symbol.iterator in value);\n}\n","// To do: remove `void`s\n// To do: remove `null` from output of our APIs, allow it as user APIs.\n\n/**\n * @typedef {(error?: Error | null | undefined, ...output: Array<any>) => void} Callback\n *   Callback.\n *\n * @typedef {(...input: Array<any>) => any} Middleware\n *   Ware.\n *\n * @typedef Pipeline\n *   Pipeline.\n * @property {Run} run\n *   Run the pipeline.\n * @property {Use} use\n *   Add middleware.\n *\n * @typedef {(...input: Array<any>) => void} Run\n *   Call all middleware.\n *\n *   Calls `done` on completion with either an error or the output of the\n *   last middleware.\n *\n *   > 👉 **Note**: as the length of input defines whether async functions get a\n *   > `next` function,\n *   > it’s recommended to keep `input` at one value normally.\n\n *\n * @typedef {(fn: Middleware) => Pipeline} Use\n *   Add middleware.\n */\n\n/**\n * Create new middleware.\n *\n * @returns {Pipeline}\n *   Pipeline.\n */\nexport function trough() {\n  /** @type {Array<Middleware>} */\n  const fns = []\n  /** @type {Pipeline} */\n  const pipeline = {run, use}\n\n  return pipeline\n\n  /** @type {Run} */\n  function run(...values) {\n    let middlewareIndex = -1\n    /** @type {Callback} */\n    const callback = values.pop()\n\n    if (typeof callback !== 'function') {\n      throw new TypeError('Expected function as last argument, not ' + callback)\n    }\n\n    next(null, ...values)\n\n    /**\n     * Run the next `fn`, or we’re done.\n     *\n     * @param {Error | null | undefined} error\n     * @param {Array<any>} output\n     */\n    function next(error, ...output) {\n      const fn = fns[++middlewareIndex]\n      let index = -1\n\n      if (error) {\n        callback(error)\n        return\n      }\n\n      // Copy non-nullish input into values.\n      while (++index < values.length) {\n        if (output[index] === null || output[index] === undefined) {\n          output[index] = values[index]\n        }\n      }\n\n      // Save the newly created `output` for the next call.\n      values = output\n\n      // Next or done.\n      if (fn) {\n        wrap(fn, next)(...output)\n      } else {\n        callback(null, ...output)\n      }\n    }\n  }\n\n  /** @type {Use} */\n  function use(middelware) {\n    if (typeof middelware !== 'function') {\n      throw new TypeError(\n        'Expected `middelware` to be a function, not ' + middelware\n      )\n    }\n\n    fns.push(middelware)\n    return pipeline\n  }\n}\n\n/**\n * Wrap `middleware` into a uniform interface.\n *\n * You can pass all input to the resulting function.\n * `callback` is then called with the output of `middleware`.\n *\n * If `middleware` accepts more arguments than the later given in input,\n * an extra `done` function is passed to it after that input,\n * which must be called by `middleware`.\n *\n * The first value in `input` is the main input value.\n * All other input values are the rest input values.\n * The values given to `callback` are the input values,\n * merged with every non-nullish output value.\n *\n * * if `middleware` throws an error,\n *   returns a promise that is rejected,\n *   or calls the given `done` function with an error,\n *   `callback` is called with that error\n * * if `middleware` returns a value or returns a promise that is resolved,\n *   that value is the main output value\n * * if `middleware` calls `done`,\n *   all non-nullish values except for the first one (the error) overwrite the\n *   output values\n *\n * @param {Middleware} middleware\n *   Function to wrap.\n * @param {Callback} callback\n *   Callback called with the output of `middleware`.\n * @returns {Run}\n *   Wrapped middleware.\n */\nexport function wrap(middleware, callback) {\n  /** @type {boolean} */\n  let called\n\n  return wrapped\n\n  /**\n   * Call `middleware`.\n   * @this {any}\n   * @param {Array<any>} parameters\n   * @returns {void}\n   */\n  function wrapped(...parameters) {\n    const fnExpectsCallback = middleware.length > parameters.length\n    /** @type {any} */\n    let result\n\n    if (fnExpectsCallback) {\n      parameters.push(done)\n    }\n\n    try {\n      result = middleware.apply(this, parameters)\n    } catch (error) {\n      const exception = /** @type {Error} */ (error)\n\n      // Well, this is quite the pickle.\n      // `middleware` received a callback and called it synchronously, but that\n      // threw an error.\n      // The only thing left to do is to throw the thing instead.\n      if (fnExpectsCallback && called) {\n        throw exception\n      }\n\n      return done(exception)\n    }\n\n    if (!fnExpectsCallback) {\n      if (result && result.then && typeof result.then === 'function') {\n        result.then(then, done)\n      } else if (result instanceof Error) {\n        done(result)\n      } else {\n        then(result)\n      }\n    }\n  }\n\n  /**\n   * Call `callback`, only once.\n   *\n   * @type {Callback}\n   */\n  function done(error, ...output) {\n    if (!called) {\n      called = true\n      callback(error, ...output)\n    }\n  }\n\n  /**\n   * Call `done` with one value.\n   *\n   * @param {any} [value]\n   */\n  function then(value) {\n    done(null, value)\n  }\n}\n","// A derivative work based on:\n// <https://github.com/browserify/path-browserify>.\n// Which is licensed:\n//\n// MIT License\n//\n// Copyright (c) 2013 James Halliday\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy of\n// this software and associated documentation files (the \"Software\"), to deal in\n// the Software without restriction, including without limitation the rights to\n// use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of\n// the Software, and to permit persons to whom the Software is furnished to do so,\n// subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in all\n// copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS\n// FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR\n// COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\n// IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\n// CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n// A derivative work based on:\n//\n// Parts of that are extracted from Node’s internal `path` module:\n// <https://github.com/nodejs/node/blob/master/lib/path.js>.\n// Which is licensed:\n//\n// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\nexport const minpath = {basename, dirname, extname, join, sep: '/'}\n\n/* eslint-disable max-depth, complexity */\n\n/**\n * Get the basename from a path.\n *\n * @param {string} path\n *   File path.\n * @param {string | null | undefined} [extname]\n *   Extension to strip.\n * @returns {string}\n *   Stem or basename.\n */\nfunction basename(path, extname) {\n  if (extname !== undefined && typeof extname !== 'string') {\n    throw new TypeError('\"ext\" argument must be a string')\n  }\n\n  assertPath(path)\n  let start = 0\n  let end = -1\n  let index = path.length\n  /** @type {boolean | undefined} */\n  let seenNonSlash\n\n  if (\n    extname === undefined ||\n    extname.length === 0 ||\n    extname.length > path.length\n  ) {\n    while (index--) {\n      if (path.codePointAt(index) === 47 /* `/` */) {\n        // If we reached a path separator that was not part of a set of path\n        // separators at the end of the string, stop now.\n        if (seenNonSlash) {\n          start = index + 1\n          break\n        }\n      } else if (end < 0) {\n        // We saw the first non-path separator, mark this as the end of our\n        // path component.\n        seenNonSlash = true\n        end = index + 1\n      }\n    }\n\n    return end < 0 ? '' : path.slice(start, end)\n  }\n\n  if (extname === path) {\n    return ''\n  }\n\n  let firstNonSlashEnd = -1\n  let extnameIndex = extname.length - 1\n\n  while (index--) {\n    if (path.codePointAt(index) === 47 /* `/` */) {\n      // If we reached a path separator that was not part of a set of path\n      // separators at the end of the string, stop now.\n      if (seenNonSlash) {\n        start = index + 1\n        break\n      }\n    } else {\n      if (firstNonSlashEnd < 0) {\n        // We saw the first non-path separator, remember this index in case\n        // we need it if the extension ends up not matching.\n        seenNonSlash = true\n        firstNonSlashEnd = index + 1\n      }\n\n      if (extnameIndex > -1) {\n        // Try to match the explicit extension.\n        if (path.codePointAt(index) === extname.codePointAt(extnameIndex--)) {\n          if (extnameIndex < 0) {\n            // We matched the extension, so mark this as the end of our path\n            // component\n            end = index\n          }\n        } else {\n          // Extension does not match, so our result is the entire path\n          // component\n          extnameIndex = -1\n          end = firstNonSlashEnd\n        }\n      }\n    }\n  }\n\n  if (start === end) {\n    end = firstNonSlashEnd\n  } else if (end < 0) {\n    end = path.length\n  }\n\n  return path.slice(start, end)\n}\n\n/**\n * Get the dirname from a path.\n *\n * @param {string} path\n *   File path.\n * @returns {string}\n *   File path.\n */\nfunction dirname(path) {\n  assertPath(path)\n\n  if (path.length === 0) {\n    return '.'\n  }\n\n  let end = -1\n  let index = path.length\n  /** @type {boolean | undefined} */\n  let unmatchedSlash\n\n  // Prefix `--` is important to not run on `0`.\n  while (--index) {\n    if (path.codePointAt(index) === 47 /* `/` */) {\n      if (unmatchedSlash) {\n        end = index\n        break\n      }\n    } else if (!unmatchedSlash) {\n      // We saw the first non-path separator\n      unmatchedSlash = true\n    }\n  }\n\n  return end < 0\n    ? path.codePointAt(0) === 47 /* `/` */\n      ? '/'\n      : '.'\n    : end === 1 && path.codePointAt(0) === 47 /* `/` */\n      ? '//'\n      : path.slice(0, end)\n}\n\n/**\n * Get an extname from a path.\n *\n * @param {string} path\n *   File path.\n * @returns {string}\n *   Extname.\n */\nfunction extname(path) {\n  assertPath(path)\n\n  let index = path.length\n\n  let end = -1\n  let startPart = 0\n  let startDot = -1\n  // Track the state of characters (if any) we see before our first dot and\n  // after any path separator we find.\n  let preDotState = 0\n  /** @type {boolean | undefined} */\n  let unmatchedSlash\n\n  while (index--) {\n    const code = path.codePointAt(index)\n\n    if (code === 47 /* `/` */) {\n      // If we reached a path separator that was not part of a set of path\n      // separators at the end of the string, stop now.\n      if (unmatchedSlash) {\n        startPart = index + 1\n        break\n      }\n\n      continue\n    }\n\n    if (end < 0) {\n      // We saw the first non-path separator, mark this as the end of our\n      // extension.\n      unmatchedSlash = true\n      end = index + 1\n    }\n\n    if (code === 46 /* `.` */) {\n      // If this is our first dot, mark it as the start of our extension.\n      if (startDot < 0) {\n        startDot = index\n      } else if (preDotState !== 1) {\n        preDotState = 1\n      }\n    } else if (startDot > -1) {\n      // We saw a non-dot and non-path separator before our dot, so we should\n      // have a good chance at having a non-empty extension.\n      preDotState = -1\n    }\n  }\n\n  if (\n    startDot < 0 ||\n    end < 0 ||\n    // We saw a non-dot character immediately before the dot.\n    preDotState === 0 ||\n    // The (right-most) trimmed path component is exactly `..`.\n    (preDotState === 1 && startDot === end - 1 && startDot === startPart + 1)\n  ) {\n    return ''\n  }\n\n  return path.slice(startDot, end)\n}\n\n/**\n * Join segments from a path.\n *\n * @param {Array<string>} segments\n *   Path segments.\n * @returns {string}\n *   File path.\n */\nfunction join(...segments) {\n  let index = -1\n  /** @type {string | undefined} */\n  let joined\n\n  while (++index < segments.length) {\n    assertPath(segments[index])\n\n    if (segments[index]) {\n      joined =\n        joined === undefined ? segments[index] : joined + '/' + segments[index]\n    }\n  }\n\n  return joined === undefined ? '.' : normalize(joined)\n}\n\n/**\n * Normalize a basic file path.\n *\n * @param {string} path\n *   File path.\n * @returns {string}\n *   File path.\n */\n// Note: `normalize` is not exposed as `path.normalize`, so some code is\n// manually removed from it.\nfunction normalize(path) {\n  assertPath(path)\n\n  const absolute = path.codePointAt(0) === 47 /* `/` */\n\n  // Normalize the path according to POSIX rules.\n  let value = normalizeString(path, !absolute)\n\n  if (value.length === 0 && !absolute) {\n    value = '.'\n  }\n\n  if (value.length > 0 && path.codePointAt(path.length - 1) === 47 /* / */) {\n    value += '/'\n  }\n\n  return absolute ? '/' + value : value\n}\n\n/**\n * Resolve `.` and `..` elements in a path with directory names.\n *\n * @param {string} path\n *   File path.\n * @param {boolean} allowAboveRoot\n *   Whether `..` can move above root.\n * @returns {string}\n *   File path.\n */\nfunction normalizeString(path, allowAboveRoot) {\n  let result = ''\n  let lastSegmentLength = 0\n  let lastSlash = -1\n  let dots = 0\n  let index = -1\n  /** @type {number | undefined} */\n  let code\n  /** @type {number} */\n  let lastSlashIndex\n\n  while (++index <= path.length) {\n    if (index < path.length) {\n      code = path.codePointAt(index)\n    } else if (code === 47 /* `/` */) {\n      break\n    } else {\n      code = 47 /* `/` */\n    }\n\n    if (code === 47 /* `/` */) {\n      if (lastSlash === index - 1 || dots === 1) {\n        // Empty.\n      } else if (lastSlash !== index - 1 && dots === 2) {\n        if (\n          result.length < 2 ||\n          lastSegmentLength !== 2 ||\n          result.codePointAt(result.length - 1) !== 46 /* `.` */ ||\n          result.codePointAt(result.length - 2) !== 46 /* `.` */\n        ) {\n          if (result.length > 2) {\n            lastSlashIndex = result.lastIndexOf('/')\n\n            if (lastSlashIndex !== result.length - 1) {\n              if (lastSlashIndex < 0) {\n                result = ''\n                lastSegmentLength = 0\n              } else {\n                result = result.slice(0, lastSlashIndex)\n                lastSegmentLength = result.length - 1 - result.lastIndexOf('/')\n              }\n\n              lastSlash = index\n              dots = 0\n              continue\n            }\n          } else if (result.length > 0) {\n            result = ''\n            lastSegmentLength = 0\n            lastSlash = index\n            dots = 0\n            continue\n          }\n        }\n\n        if (allowAboveRoot) {\n          result = result.length > 0 ? result + '/..' : '..'\n          lastSegmentLength = 2\n        }\n      } else {\n        if (result.length > 0) {\n          result += '/' + path.slice(lastSlash + 1, index)\n        } else {\n          result = path.slice(lastSlash + 1, index)\n        }\n\n        lastSegmentLength = index - lastSlash - 1\n      }\n\n      lastSlash = index\n      dots = 0\n    } else if (code === 46 /* `.` */ && dots > -1) {\n      dots++\n    } else {\n      dots = -1\n    }\n  }\n\n  return result\n}\n\n/**\n * Make sure `path` is a string.\n *\n * @param {string} path\n *   File path.\n * @returns {asserts path is string}\n *   Nothing.\n */\nfunction assertPath(path) {\n  if (typeof path !== 'string') {\n    throw new TypeError(\n      'Path must be a string. Received ' + JSON.stringify(path)\n    )\n  }\n}\n\n/* eslint-enable max-depth, complexity */\n","// Somewhat based on:\n// <https://github.com/defunctzombie/node-process/blob/master/browser.js>.\n// But I don’t think one tiny line of code can be copyrighted. 😅\nexport const minproc = {cwd}\n\nfunction cwd() {\n  return '/'\n}\n","/**\n * Checks if a value has the shape of a WHATWG URL object.\n *\n * Using a symbol or instanceof would not be able to recognize URL objects\n * coming from other implementations (e.g. in Electron), so instead we are\n * checking some well known properties for a lack of a better test.\n *\n * We use `href` and `protocol` as they are the only properties that are\n * easy to retrieve and calculate due to the lazy nature of the getters.\n *\n * We check for auth attribute to distinguish legacy url instance with\n * WHATWG URL instance.\n *\n * @param {unknown} fileUrlOrPath\n *   File path or URL.\n * @returns {fileUrlOrPath is URL}\n *   Whether it’s a URL.\n */\n// From: <https://github.com/nodejs/node/blob/6a3403c/lib/internal/url.js#L720>\nexport function isUrl(fileUrlOrPath) {\n  return Boolean(\n    fileUrlOrPath !== null &&\n      typeof fileUrlOrPath === 'object' &&\n      'href' in fileUrlOrPath &&\n      fileUrlOrPath.href &&\n      'protocol' in fileUrlOrPath &&\n      fileUrlOrPath.protocol &&\n      // @ts-expect-error: indexing is fine.\n      fileUrlOrPath.auth === undefined\n  )\n}\n","import {isUrl} from './minurl.shared.js'\n\nexport {isUrl} from './minurl.shared.js'\n\n// See: <https://github.com/nodejs/node/blob/6a3403c/lib/internal/url.js>\n\n/**\n * @param {URL | string} path\n *   File URL.\n * @returns {string}\n *   File URL.\n */\nexport function urlToPath(path) {\n  if (typeof path === 'string') {\n    path = new URL(path)\n  } else if (!isUrl(path)) {\n    /** @type {NodeJS.ErrnoException} */\n    const error = new TypeError(\n      'The \"path\" argument must be of type string or an instance of URL. Received `' +\n        path +\n        '`'\n    )\n    error.code = 'ERR_INVALID_ARG_TYPE'\n    throw error\n  }\n\n  if (path.protocol !== 'file:') {\n    /** @type {NodeJS.ErrnoException} */\n    const error = new TypeError('The URL must be of scheme file')\n    error.code = 'ERR_INVALID_URL_SCHEME'\n    throw error\n  }\n\n  return getPathFromURLPosix(path)\n}\n\n/**\n * Get a path from a POSIX URL.\n *\n * @param {URL} url\n *   URL.\n * @returns {string}\n *   File path.\n */\nfunction getPathFromURLPosix(url) {\n  if (url.hostname !== '') {\n    /** @type {NodeJS.ErrnoException} */\n    const error = new TypeError(\n      'File URL host must be \"localhost\" or empty on darwin'\n    )\n    error.code = 'ERR_INVALID_FILE_URL_HOST'\n    throw error\n  }\n\n  const pathname = url.pathname\n  let index = -1\n\n  while (++index < pathname.length) {\n    if (\n      pathname.codePointAt(index) === 37 /* `%` */ &&\n      pathname.codePointAt(index + 1) === 50 /* `2` */\n    ) {\n      const third = pathname.codePointAt(index + 2)\n      if (third === 70 /* `F` */ || third === 102 /* `f` */) {\n        /** @type {NodeJS.ErrnoException} */\n        const error = new TypeError(\n          'File URL path must not include encoded / characters'\n        )\n        error.code = 'ERR_INVALID_FILE_URL_PATH'\n        throw error\n      }\n    }\n  }\n\n  return decodeURIComponent(pathname)\n}\n","/**\n * @import {Node, Point, Position} from 'unist'\n * @import {Options as MessageOptions} from 'vfile-message'\n * @import {Compatible, Data, Map, Options, Value} from 'vfile'\n */\n\n/**\n * @typedef {object & {type: string, position?: Position | undefined}} NodeLike\n */\n\nimport {VFileMessage} from 'vfile-message'\nimport {minpath} from '#minpath'\nimport {minproc} from '#minproc'\nimport {urlToPath, isUrl} from '#minurl'\n\n/**\n * Order of setting (least specific to most), we need this because otherwise\n * `{stem: 'a', path: '~/b.js'}` would throw, as a path is needed before a\n * stem can be set.\n */\nconst order = /** @type {const} */ ([\n  'history',\n  'path',\n  'basename',\n  'stem',\n  'extname',\n  'dirname'\n])\n\nexport class VFile {\n  /**\n   * Create a new virtual file.\n   *\n   * `options` is treated as:\n   *\n   * *   `string` or `Uint8Array` — `{value: options}`\n   * *   `URL` — `{path: options}`\n   * *   `VFile` — shallow copies its data over to the new file\n   * *   `object` — all fields are shallow copied over to the new file\n   *\n   * Path related fields are set in the following order (least specific to\n   * most specific): `history`, `path`, `basename`, `stem`, `extname`,\n   * `dirname`.\n   *\n   * You cannot set `dirname` or `extname` without setting either `history`,\n   * `path`, `basename`, or `stem` too.\n   *\n   * @param {Compatible | null | undefined} [value]\n   *   File value.\n   * @returns\n   *   New instance.\n   */\n  constructor(value) {\n    /** @type {Options | VFile} */\n    let options\n\n    if (!value) {\n      options = {}\n    } else if (isUrl(value)) {\n      options = {path: value}\n    } else if (typeof value === 'string' || isUint8Array(value)) {\n      options = {value}\n    } else {\n      options = value\n    }\n\n    /* eslint-disable no-unused-expressions */\n\n    /**\n     * Base of `path` (default: `process.cwd()` or `'/'` in browsers).\n     *\n     * @type {string}\n     */\n    // Prevent calling `cwd` (which could be expensive) if it’s not needed;\n    // the empty string will be overridden in the next block.\n    this.cwd = 'cwd' in options ? '' : minproc.cwd()\n\n    /**\n     * Place to store custom info (default: `{}`).\n     *\n     * It’s OK to store custom data directly on the file but moving it to\n     * `data` is recommended.\n     *\n     * @type {Data}\n     */\n    this.data = {}\n\n    /**\n     * List of file paths the file moved between.\n     *\n     * The first is the original path and the last is the current path.\n     *\n     * @type {Array<string>}\n     */\n    this.history = []\n\n    /**\n     * List of messages associated with the file.\n     *\n     * @type {Array<VFileMessage>}\n     */\n    this.messages = []\n\n    /**\n     * Raw value.\n     *\n     * @type {Value}\n     */\n    this.value\n\n    // The below are non-standard, they are “well-known”.\n    // As in, used in several tools.\n    /**\n     * Source map.\n     *\n     * This type is equivalent to the `RawSourceMap` type from the `source-map`\n     * module.\n     *\n     * @type {Map | null | undefined}\n     */\n    this.map\n\n    /**\n     * Custom, non-string, compiled, representation.\n     *\n     * This is used by unified to store non-string results.\n     * One example is when turning markdown into React nodes.\n     *\n     * @type {unknown}\n     */\n    this.result\n\n    /**\n     * Whether a file was saved to disk.\n     *\n     * This is used by vfile reporters.\n     *\n     * @type {boolean}\n     */\n    this.stored\n    /* eslint-enable no-unused-expressions */\n\n    // Set path related properties in the correct order.\n    let index = -1\n\n    while (++index < order.length) {\n      const field = order[index]\n\n      // Note: we specifically use `in` instead of `hasOwnProperty` to accept\n      // `vfile`s too.\n      if (\n        field in options &&\n        options[field] !== undefined &&\n        options[field] !== null\n      ) {\n        // @ts-expect-error: TS doesn’t understand basic reality.\n        this[field] = field === 'history' ? [...options[field]] : options[field]\n      }\n    }\n\n    /** @type {string} */\n    let field\n\n    // Set non-path related properties.\n    for (field in options) {\n      // @ts-expect-error: fine to set other things.\n      if (!order.includes(field)) {\n        // @ts-expect-error: fine to set other things.\n        this[field] = options[field]\n      }\n    }\n  }\n\n  /**\n   * Get the basename (including extname) (example: `'index.min.js'`).\n   *\n   * @returns {string | undefined}\n   *   Basename.\n   */\n  get basename() {\n    return typeof this.path === 'string'\n      ? minpath.basename(this.path)\n      : undefined\n  }\n\n  /**\n   * Set basename (including extname) (`'index.min.js'`).\n   *\n   * Cannot contain path separators (`'/'` on unix, macOS, and browsers, `'\\'`\n   * on windows).\n   * Cannot be nullified (use `file.path = file.dirname` instead).\n   *\n   * @param {string} basename\n   *   Basename.\n   * @returns {undefined}\n   *   Nothing.\n   */\n  set basename(basename) {\n    assertNonEmpty(basename, 'basename')\n    assertPart(basename, 'basename')\n    this.path = minpath.join(this.dirname || '', basename)\n  }\n\n  /**\n   * Get the parent path (example: `'~'`).\n   *\n   * @returns {string | undefined}\n   *   Dirname.\n   */\n  get dirname() {\n    return typeof this.path === 'string'\n      ? minpath.dirname(this.path)\n      : undefined\n  }\n\n  /**\n   * Set the parent path (example: `'~'`).\n   *\n   * Cannot be set if there’s no `path` yet.\n   *\n   * @param {string | undefined} dirname\n   *   Dirname.\n   * @returns {undefined}\n   *   Nothing.\n   */\n  set dirname(dirname) {\n    assertPath(this.basename, 'dirname')\n    this.path = minpath.join(dirname || '', this.basename)\n  }\n\n  /**\n   * Get the extname (including dot) (example: `'.js'`).\n   *\n   * @returns {string | undefined}\n   *   Extname.\n   */\n  get extname() {\n    return typeof this.path === 'string'\n      ? minpath.extname(this.path)\n      : undefined\n  }\n\n  /**\n   * Set the extname (including dot) (example: `'.js'`).\n   *\n   * Cannot contain path separators (`'/'` on unix, macOS, and browsers, `'\\'`\n   * on windows).\n   * Cannot be set if there’s no `path` yet.\n   *\n   * @param {string | undefined} extname\n   *   Extname.\n   * @returns {undefined}\n   *   Nothing.\n   */\n  set extname(extname) {\n    assertPart(extname, 'extname')\n    assertPath(this.dirname, 'extname')\n\n    if (extname) {\n      if (extname.codePointAt(0) !== 46 /* `.` */) {\n        throw new Error('`extname` must start with `.`')\n      }\n\n      if (extname.includes('.', 1)) {\n        throw new Error('`extname` cannot contain multiple dots')\n      }\n    }\n\n    this.path = minpath.join(this.dirname, this.stem + (extname || ''))\n  }\n\n  /**\n   * Get the full path (example: `'~/index.min.js'`).\n   *\n   * @returns {string}\n   *   Path.\n   */\n  get path() {\n    return this.history[this.history.length - 1]\n  }\n\n  /**\n   * Set the full path (example: `'~/index.min.js'`).\n   *\n   * Cannot be nullified.\n   * You can set a file URL (a `URL` object with a `file:` protocol) which will\n   * be turned into a path with `url.fileURLToPath`.\n   *\n   * @param {URL | string} path\n   *   Path.\n   * @returns {undefined}\n   *   Nothing.\n   */\n  set path(path) {\n    if (isUrl(path)) {\n      path = urlToPath(path)\n    }\n\n    assertNonEmpty(path, 'path')\n\n    if (this.path !== path) {\n      this.history.push(path)\n    }\n  }\n\n  /**\n   * Get the stem (basename w/o extname) (example: `'index.min'`).\n   *\n   * @returns {string | undefined}\n   *   Stem.\n   */\n  get stem() {\n    return typeof this.path === 'string'\n      ? minpath.basename(this.path, this.extname)\n      : undefined\n  }\n\n  /**\n   * Set the stem (basename w/o extname) (example: `'index.min'`).\n   *\n   * Cannot contain path separators (`'/'` on unix, macOS, and browsers, `'\\'`\n   * on windows).\n   * Cannot be nullified (use `file.path = file.dirname` instead).\n   *\n   * @param {string} stem\n   *   Stem.\n   * @returns {undefined}\n   *   Nothing.\n   */\n  set stem(stem) {\n    assertNonEmpty(stem, 'stem')\n    assertPart(stem, 'stem')\n    this.path = minpath.join(this.dirname || '', stem + (this.extname || ''))\n  }\n\n  // Normal prototypal methods.\n  /**\n   * Create a fatal message for `reason` associated with the file.\n   *\n   * The `fatal` field of the message is set to `true` (error; file not usable)\n   * and the `file` field is set to the current file path.\n   * The message is added to the `messages` field on `file`.\n   *\n   * > 🪦 **Note**: also has obsolete signatures.\n   *\n   * @overload\n   * @param {string} reason\n   * @param {MessageOptions | null | undefined} [options]\n   * @returns {never}\n   *\n   * @overload\n   * @param {string} reason\n   * @param {Node | NodeLike | null | undefined} parent\n   * @param {string | null | undefined} [origin]\n   * @returns {never}\n   *\n   * @overload\n   * @param {string} reason\n   * @param {Point | Position | null | undefined} place\n   * @param {string | null | undefined} [origin]\n   * @returns {never}\n   *\n   * @overload\n   * @param {string} reason\n   * @param {string | null | undefined} [origin]\n   * @returns {never}\n   *\n   * @overload\n   * @param {Error | VFileMessage} cause\n   * @param {Node | NodeLike | null | undefined} parent\n   * @param {string | null | undefined} [origin]\n   * @returns {never}\n   *\n   * @overload\n   * @param {Error | VFileMessage} cause\n   * @param {Point | Position | null | undefined} place\n   * @param {string | null | undefined} [origin]\n   * @returns {never}\n   *\n   * @overload\n   * @param {Error | VFileMessage} cause\n   * @param {string | null | undefined} [origin]\n   * @returns {never}\n   *\n   * @param {Error | VFileMessage | string} causeOrReason\n   *   Reason for message, should use markdown.\n   * @param {Node | NodeLike | MessageOptions | Point | Position | string | null | undefined} [optionsOrParentOrPlace]\n   *   Configuration (optional).\n   * @param {string | null | undefined} [origin]\n   *   Place in code where the message originates (example:\n   *   `'my-package:my-rule'` or `'my-rule'`).\n   * @returns {never}\n   *   Never.\n   * @throws {VFileMessage}\n   *   Message.\n   */\n  fail(causeOrReason, optionsOrParentOrPlace, origin) {\n    // @ts-expect-error: the overloads are fine.\n    const message = this.message(causeOrReason, optionsOrParentOrPlace, origin)\n\n    message.fatal = true\n\n    throw message\n  }\n\n  /**\n   * Create an info message for `reason` associated with the file.\n   *\n   * The `fatal` field of the message is set to `undefined` (info; change\n   * likely not needed) and the `file` field is set to the current file path.\n   * The message is added to the `messages` field on `file`.\n   *\n   * > 🪦 **Note**: also has obsolete signatures.\n   *\n   * @overload\n   * @param {string} reason\n   * @param {MessageOptions | null | undefined} [options]\n   * @returns {VFileMessage}\n   *\n   * @overload\n   * @param {string} reason\n   * @param {Node | NodeLike | null | undefined} parent\n   * @param {string | null | undefined} [origin]\n   * @returns {VFileMessage}\n   *\n   * @overload\n   * @param {string} reason\n   * @param {Point | Position | null | undefined} place\n   * @param {string | null | undefined} [origin]\n   * @returns {VFileMessage}\n   *\n   * @overload\n   * @param {string} reason\n   * @param {string | null | undefined} [origin]\n   * @returns {VFileMessage}\n   *\n   * @overload\n   * @param {Error | VFileMessage} cause\n   * @param {Node | NodeLike | null | undefined} parent\n   * @param {string | null | undefined} [origin]\n   * @returns {VFileMessage}\n   *\n   * @overload\n   * @param {Error | VFileMessage} cause\n   * @param {Point | Position | null | undefined} place\n   * @param {string | null | undefined} [origin]\n   * @returns {VFileMessage}\n   *\n   * @overload\n   * @param {Error | VFileMessage} cause\n   * @param {string | null | undefined} [origin]\n   * @returns {VFileMessage}\n   *\n   * @param {Error | VFileMessage | string} causeOrReason\n   *   Reason for message, should use markdown.\n   * @param {Node | NodeLike | MessageOptions | Point | Position | string | null | undefined} [optionsOrParentOrPlace]\n   *   Configuration (optional).\n   * @param {string | null | undefined} [origin]\n   *   Place in code where the message originates (example:\n   *   `'my-package:my-rule'` or `'my-rule'`).\n   * @returns {VFileMessage}\n   *   Message.\n   */\n  info(causeOrReason, optionsOrParentOrPlace, origin) {\n    // @ts-expect-error: the overloads are fine.\n    const message = this.message(causeOrReason, optionsOrParentOrPlace, origin)\n\n    message.fatal = undefined\n\n    return message\n  }\n\n  /**\n   * Create a message for `reason` associated with the file.\n   *\n   * The `fatal` field of the message is set to `false` (warning; change may be\n   * needed) and the `file` field is set to the current file path.\n   * The message is added to the `messages` field on `file`.\n   *\n   * > 🪦 **Note**: also has obsolete signatures.\n   *\n   * @overload\n   * @param {string} reason\n   * @param {MessageOptions | null | undefined} [options]\n   * @returns {VFileMessage}\n   *\n   * @overload\n   * @param {string} reason\n   * @param {Node | NodeLike | null | undefined} parent\n   * @param {string | null | undefined} [origin]\n   * @returns {VFileMessage}\n   *\n   * @overload\n   * @param {string} reason\n   * @param {Point | Position | null | undefined} place\n   * @param {string | null | undefined} [origin]\n   * @returns {VFileMessage}\n   *\n   * @overload\n   * @param {string} reason\n   * @param {string | null | undefined} [origin]\n   * @returns {VFileMessage}\n   *\n   * @overload\n   * @param {Error | VFileMessage} cause\n   * @param {Node | NodeLike | null | undefined} parent\n   * @param {string | null | undefined} [origin]\n   * @returns {VFileMessage}\n   *\n   * @overload\n   * @param {Error | VFileMessage} cause\n   * @param {Point | Position | null | undefined} place\n   * @param {string | null | undefined} [origin]\n   * @returns {VFileMessage}\n   *\n   * @overload\n   * @param {Error | VFileMessage} cause\n   * @param {string | null | undefined} [origin]\n   * @returns {VFileMessage}\n   *\n   * @param {Error | VFileMessage | string} causeOrReason\n   *   Reason for message, should use markdown.\n   * @param {Node | NodeLike | MessageOptions | Point | Position | string | null | undefined} [optionsOrParentOrPlace]\n   *   Configuration (optional).\n   * @param {string | null | undefined} [origin]\n   *   Place in code where the message originates (example:\n   *   `'my-package:my-rule'` or `'my-rule'`).\n   * @returns {VFileMessage}\n   *   Message.\n   */\n  message(causeOrReason, optionsOrParentOrPlace, origin) {\n    const message = new VFileMessage(\n      // @ts-expect-error: the overloads are fine.\n      causeOrReason,\n      optionsOrParentOrPlace,\n      origin\n    )\n\n    if (this.path) {\n      message.name = this.path + ':' + message.name\n      message.file = this.path\n    }\n\n    message.fatal = false\n\n    this.messages.push(message)\n\n    return message\n  }\n\n  /**\n   * Serialize the file.\n   *\n   * > **Note**: which encodings are supported depends on the engine.\n   * > For info on Node.js, see:\n   * > <https://nodejs.org/api/util.html#whatwg-supported-encodings>.\n   *\n   * @param {string | null | undefined} [encoding='utf8']\n   *   Character encoding to understand `value` as when it’s a `Uint8Array`\n   *   (default: `'utf-8'`).\n   * @returns {string}\n   *   Serialized file.\n   */\n  toString(encoding) {\n    if (this.value === undefined) {\n      return ''\n    }\n\n    if (typeof this.value === 'string') {\n      return this.value\n    }\n\n    const decoder = new TextDecoder(encoding || undefined)\n    return decoder.decode(this.value)\n  }\n}\n\n/**\n * Assert that `part` is not a path (as in, does not contain `path.sep`).\n *\n * @param {string | null | undefined} part\n *   File path part.\n * @param {string} name\n *   Part name.\n * @returns {undefined}\n *   Nothing.\n */\nfunction assertPart(part, name) {\n  if (part && part.includes(minpath.sep)) {\n    throw new Error(\n      '`' + name + '` cannot be a path: did not expect `' + minpath.sep + '`'\n    )\n  }\n}\n\n/**\n * Assert that `part` is not empty.\n *\n * @param {string | undefined} part\n *   Thing.\n * @param {string} name\n *   Part name.\n * @returns {asserts part is string}\n *   Nothing.\n */\nfunction assertNonEmpty(part, name) {\n  if (!part) {\n    throw new Error('`' + name + '` cannot be empty')\n  }\n}\n\n/**\n * Assert `path` exists.\n *\n * @param {string | undefined} path\n *   Path.\n * @param {string} name\n *   Dependency name.\n * @returns {asserts path is string}\n *   Nothing.\n */\nfunction assertPath(path, name) {\n  if (!path) {\n    throw new Error('Setting `' + name + '` requires `path` to be set too')\n  }\n}\n\n/**\n * Assert `value` is an `Uint8Array`.\n *\n * @param {unknown} value\n *   thing.\n * @returns {value is Uint8Array}\n *   Whether `value` is an `Uint8Array`.\n */\nfunction isUint8Array(value) {\n  return Boolean(\n    value &&\n      typeof value === 'object' &&\n      'byteLength' in value &&\n      'byteOffset' in value\n  )\n}\n","export const CallableInstance =\n  /**\n   * @type {new <Parameters extends Array<unknown>, Result>(property: string | symbol) => (...parameters: Parameters) => Result}\n   */\n  (\n    /** @type {unknown} */\n    (\n      /**\n       * @this {Function}\n       * @param {string | symbol} property\n       * @returns {(...parameters: Array<unknown>) => unknown}\n       */\n      function (property) {\n        const self = this\n        const constr = self.constructor\n        const proto = /** @type {Record<string | symbol, Function>} */ (\n          // Prototypes do exist.\n          // type-coverage:ignore-next-line\n          constr.prototype\n        )\n        const value = proto[property]\n        /** @type {(...parameters: Array<unknown>) => unknown} */\n        const apply = function () {\n          return value.apply(apply, arguments)\n        }\n\n        Object.setPrototypeOf(apply, proto)\n\n        // Not needed for us in `unified`: we only call this on the `copy`\n        // function,\n        // and we don't need to add its fields (`length`, `name`)\n        // over.\n        // See also: GH-246.\n        // const names = Object.getOwnPropertyNames(value)\n        //\n        // for (const p of names) {\n        //   const descriptor = Object.getOwnPropertyDescriptor(value, p)\n        //   if (descriptor) Object.defineProperty(apply, p, descriptor)\n        // }\n\n        return apply\n      }\n    )\n  )\n","/**\n * @typedef {import('trough').Pipeline} Pipeline\n *\n * @typedef {import('unist').Node} Node\n *\n * @typedef {import('vfile').Compatible} Compatible\n * @typedef {import('vfile').Value} Value\n *\n * @typedef {import('../index.js').CompileResultMap} CompileResultMap\n * @typedef {import('../index.js').Data} Data\n * @typedef {import('../index.js').Settings} Settings\n */\n\n/**\n * @typedef {CompileResultMap[keyof CompileResultMap]} CompileResults\n *   Acceptable results from compilers.\n *\n *   To register custom results, add them to\n *   {@linkcode CompileResultMap}.\n */\n\n/**\n * @template {Node} [Tree=Node]\n *   The node that the compiler receives (default: `Node`).\n * @template {CompileResults} [Result=CompileResults]\n *   The thing that the compiler yields (default: `CompileResults`).\n * @callback Compiler\n *   A **compiler** handles the compiling of a syntax tree to something else\n *   (in most cases, text) (TypeScript type).\n *\n *   It is used in the stringify phase and called with a {@linkcode Node}\n *   and {@linkcode VFile} representation of the document to compile.\n *   It should return the textual representation of the given tree (typically\n *   `string`).\n *\n *   > **Note**: unified typically compiles by serializing: most compilers\n *   > return `string` (or `Uint8Array`).\n *   > Some compilers, such as the one configured with\n *   > [`rehype-react`][rehype-react], return other values (in this case, a\n *   > React tree).\n *   > If you’re using a compiler that doesn’t serialize, expect different\n *   > result values.\n *   >\n *   > To register custom results in TypeScript, add them to\n *   > {@linkcode CompileResultMap}.\n *\n *   [rehype-react]: https://github.com/rehypejs/rehype-react\n * @param {Tree} tree\n *   Tree to compile.\n * @param {VFile} file\n *   File associated with `tree`.\n * @returns {Result}\n *   New content: compiled text (`string` or `Uint8Array`, for `file.value`) or\n *   something else (for `file.result`).\n */\n\n/**\n * @template {Node} [Tree=Node]\n *   The node that the parser yields (default: `Node`)\n * @callback Parser\n *   A **parser** handles the parsing of text to a syntax tree.\n *\n *   It is used in the parse phase and is called with a `string` and\n *   {@linkcode VFile} of the document to parse.\n *   It must return the syntax tree representation of the given file\n *   ({@linkcode Node}).\n * @param {string} document\n *   Document to parse.\n * @param {VFile} file\n *   File associated with `document`.\n * @returns {Tree}\n *   Node representing the given file.\n */\n\n/**\n * @typedef {(\n *   Plugin<Array<any>, any, any> |\n *   PluginTuple<Array<any>, any, any> |\n *   Preset\n * )} Pluggable\n *   Union of the different ways to add plugins and settings.\n */\n\n/**\n * @typedef {Array<Pluggable>} PluggableList\n *   List of plugins and presets.\n */\n\n// Note: we can’t use `callback` yet as it messes up `this`:\n//  <https://github.com/microsoft/TypeScript/issues/55197>.\n/**\n * @template {Array<unknown>} [PluginParameters=[]]\n *   Arguments passed to the plugin (default: `[]`, the empty tuple).\n * @template {Node | string | undefined} [Input=Node]\n *   Value that is expected as input (default: `Node`).\n *\n *   *   If the plugin returns a {@linkcode Transformer}, this\n *       should be the node it expects.\n *   *   If the plugin sets a {@linkcode Parser}, this should be\n *       `string`.\n *   *   If the plugin sets a {@linkcode Compiler}, this should be the\n *       node it expects.\n * @template [Output=Input]\n *   Value that is yielded as output (default: `Input`).\n *\n *   *   If the plugin returns a {@linkcode Transformer}, this\n *       should be the node that that yields.\n *   *   If the plugin sets a {@linkcode Parser}, this should be the\n *       node that it yields.\n *   *   If the plugin sets a {@linkcode Compiler}, this should be\n *       result it yields.\n * @typedef {(\n *   (this: Processor, ...parameters: PluginParameters) =>\n *     Input extends string ? // Parser.\n *        Output extends Node | undefined ? undefined | void : never :\n *     Output extends CompileResults ? // Compiler.\n *        Input extends Node | undefined ? undefined | void : never :\n *     Transformer<\n *       Input extends Node ? Input : Node,\n *       Output extends Node ? Output : Node\n *     > | undefined | void\n * )} Plugin\n *   Single plugin.\n *\n *   Plugins configure the processors they are applied on in the following\n *   ways:\n *\n *   *   they change the processor, such as the parser, the compiler, or by\n *       configuring data\n *   *   they specify how to handle trees and files\n *\n *   In practice, they are functions that can receive options and configure the\n *   processor (`this`).\n *\n *   > **Note**: plugins are called when the processor is *frozen*, not when\n *   > they are applied.\n */\n\n/**\n * Tuple of a plugin and its configuration.\n *\n * The first item is a plugin, the rest are its parameters.\n *\n * @template {Array<unknown>} [TupleParameters=[]]\n *   Arguments passed to the plugin (default: `[]`, the empty tuple).\n * @template {Node | string | undefined} [Input=undefined]\n *   Value that is expected as input (optional).\n *\n *   *   If the plugin returns a {@linkcode Transformer}, this\n *       should be the node it expects.\n *   *   If the plugin sets a {@linkcode Parser}, this should be\n *       `string`.\n *   *   If the plugin sets a {@linkcode Compiler}, this should be the\n *       node it expects.\n * @template [Output=undefined] (optional).\n *   Value that is yielded as output.\n *\n *   *   If the plugin returns a {@linkcode Transformer}, this\n *       should be the node that that yields.\n *   *   If the plugin sets a {@linkcode Parser}, this should be the\n *       node that it yields.\n *   *   If the plugin sets a {@linkcode Compiler}, this should be\n *       result it yields.\n * @typedef {(\n *   [\n *     plugin: Plugin<TupleParameters, Input, Output>,\n *     ...parameters: TupleParameters\n *   ]\n * )} PluginTuple\n */\n\n/**\n * @typedef Preset\n *   Sharable configuration.\n *\n *   They can contain plugins and settings.\n * @property {PluggableList | undefined} [plugins]\n *   List of plugins and presets (optional).\n * @property {Settings | undefined} [settings]\n *   Shared settings for parsers and compilers (optional).\n */\n\n/**\n * @template {VFile} [File=VFile]\n *   The file that the callback receives (default: `VFile`).\n * @callback ProcessCallback\n *   Callback called when the process is done.\n *\n *   Called with either an error or a result.\n * @param {Error | undefined} [error]\n *   Fatal error (optional).\n * @param {File | undefined} [file]\n *   Processed file (optional).\n * @returns {undefined}\n *   Nothing.\n */\n\n/**\n * @template {Node} [Tree=Node]\n *   The tree that the callback receives (default: `Node`).\n * @callback RunCallback\n *   Callback called when transformers are done.\n *\n *   Called with either an error or results.\n * @param {Error | undefined} [error]\n *   Fatal error (optional).\n * @param {Tree | undefined} [tree]\n *   Transformed tree (optional).\n * @param {VFile | undefined} [file]\n *   File (optional).\n * @returns {undefined}\n *   Nothing.\n */\n\n/**\n * @template {Node} [Output=Node]\n *   Node type that the transformer yields (default: `Node`).\n * @callback TransformCallback\n *   Callback passed to transforms.\n *\n *   If the signature of a `transformer` accepts a third argument, the\n *   transformer may perform asynchronous operations, and must call it.\n * @param {Error | undefined} [error]\n *   Fatal error to stop the process (optional).\n * @param {Output | undefined} [tree]\n *   New, changed, tree (optional).\n * @param {VFile | undefined} [file]\n *   New, changed, file (optional).\n * @returns {undefined}\n *   Nothing.\n */\n\n/**\n * @template {Node} [Input=Node]\n *   Node type that the transformer expects (default: `Node`).\n * @template {Node} [Output=Input]\n *   Node type that the transformer yields (default: `Input`).\n * @callback Transformer\n *   Transformers handle syntax trees and files.\n *\n *   They are functions that are called each time a syntax tree and file are\n *   passed through the run phase.\n *   When an error occurs in them (either because it’s thrown, returned,\n *   rejected, or passed to `next`), the process stops.\n *\n *   The run phase is handled by [`trough`][trough], see its documentation for\n *   the exact semantics of these functions.\n *\n *   > **Note**: you should likely ignore `next`: don’t accept it.\n *   > it supports callback-style async work.\n *   > But promises are likely easier to reason about.\n *\n *   [trough]: https://github.com/wooorm/trough#function-fninput-next\n * @param {Input} tree\n *   Tree to handle.\n * @param {VFile} file\n *   File to handle.\n * @param {TransformCallback<Output>} next\n *   Callback.\n * @returns {(\n *   Promise<Output | undefined | void> |\n *   Promise<never> | // For some reason this is needed separately.\n *   Output |\n *   Error |\n *   undefined |\n *   void\n * )}\n *   If you accept `next`, nothing.\n *   Otherwise:\n *\n *   *   `Error` — fatal error to stop the process\n *   *   `Promise<undefined>` or `undefined` — the next transformer keeps using\n *       same tree\n *   *   `Promise<Node>` or `Node` — new, changed, tree\n */\n\n/**\n * @template {Node | undefined} ParseTree\n *   Output of `parse`.\n * @template {Node | undefined} HeadTree\n *   Input for `run`.\n * @template {Node | undefined} TailTree\n *   Output for `run`.\n * @template {Node | undefined} CompileTree\n *   Input of `stringify`.\n * @template {CompileResults | undefined} CompileResult\n *   Output of `stringify`.\n * @template {Node | string | undefined} Input\n *   Input of plugin.\n * @template Output\n *   Output of plugin (optional).\n * @typedef {(\n *   Input extends string\n *     ? Output extends Node | undefined\n *       ? // Parser.\n *         Processor<\n *           Output extends undefined ? ParseTree : Output,\n *           HeadTree,\n *           TailTree,\n *           CompileTree,\n *           CompileResult\n *         >\n *       : // Unknown.\n *         Processor<ParseTree, HeadTree, TailTree, CompileTree, CompileResult>\n *     : Output extends CompileResults\n *     ? Input extends Node | undefined\n *       ? // Compiler.\n *         Processor<\n *           ParseTree,\n *           HeadTree,\n *           TailTree,\n *           Input extends undefined ? CompileTree : Input,\n *           Output extends undefined ? CompileResult : Output\n *         >\n *       : // Unknown.\n *         Processor<ParseTree, HeadTree, TailTree, CompileTree, CompileResult>\n *     : Input extends Node | undefined\n *     ? Output extends Node | undefined\n *       ? // Transform.\n *         Processor<\n *           ParseTree,\n *           HeadTree extends undefined ? Input : HeadTree,\n *           Output extends undefined ? TailTree : Output,\n *           CompileTree,\n *           CompileResult\n *         >\n *       : // Unknown.\n *         Processor<ParseTree, HeadTree, TailTree, CompileTree, CompileResult>\n *     : // Unknown.\n *       Processor<ParseTree, HeadTree, TailTree, CompileTree, CompileResult>\n * )} UsePlugin\n *   Create a processor based on the input/output of a {@link Plugin plugin}.\n */\n\n/**\n * @template {CompileResults | undefined} Result\n *   Node type that the transformer yields.\n * @typedef {(\n *   Result extends Value | undefined ?\n *     VFile :\n *     VFile & {result: Result}\n *   )} VFileWithOutput\n *   Type to generate a {@linkcode VFile} corresponding to a compiler result.\n *\n *   If a result that is not acceptable on a `VFile` is used, that will\n *   be stored on the `result` field of {@linkcode VFile}.\n */\n\nimport {bail} from 'bail'\nimport extend from 'extend'\nimport {ok as assert} from 'devlop'\nimport isPlainObj from 'is-plain-obj'\nimport {trough} from 'trough'\nimport {VFile} from 'vfile'\nimport {CallableInstance} from './callable-instance.js'\n\n// To do: next major: drop `Compiler`, `Parser`: prefer lowercase.\n\n// To do: we could start yielding `never` in TS when a parser is missing and\n// `parse` is called.\n// Currently, we allow directly setting `processor.parser`, which is untyped.\n\nconst own = {}.hasOwnProperty\n\n/**\n * @template {Node | undefined} [ParseTree=undefined]\n *   Output of `parse` (optional).\n * @template {Node | undefined} [HeadTree=undefined]\n *   Input for `run` (optional).\n * @template {Node | undefined} [TailTree=undefined]\n *   Output for `run` (optional).\n * @template {Node | undefined} [CompileTree=undefined]\n *   Input of `stringify` (optional).\n * @template {CompileResults | undefined} [CompileResult=undefined]\n *   Output of `stringify` (optional).\n * @extends {CallableInstance<[], Processor<ParseTree, HeadTree, TailTree, CompileTree, CompileResult>>}\n */\nexport class Processor extends CallableInstance {\n  /**\n   * Create a processor.\n   */\n  constructor() {\n    // If `Processor()` is called (w/o new), `copy` is called instead.\n    super('copy')\n\n    /**\n     * Compiler to use (deprecated).\n     *\n     * @deprecated\n     *   Use `compiler` instead.\n     * @type {(\n     *   Compiler<\n     *     CompileTree extends undefined ? Node : CompileTree,\n     *     CompileResult extends undefined ? CompileResults : CompileResult\n     *   > |\n     *   undefined\n     * )}\n     */\n    this.Compiler = undefined\n\n    /**\n     * Parser to use (deprecated).\n     *\n     * @deprecated\n     *   Use `parser` instead.\n     * @type {(\n     *   Parser<ParseTree extends undefined ? Node : ParseTree> |\n     *   undefined\n     * )}\n     */\n    this.Parser = undefined\n\n    // Note: the following fields are considered private.\n    // However, they are needed for tests, and TSC generates an untyped\n    // `private freezeIndex` field for, which trips `type-coverage` up.\n    // Instead, we use `@deprecated` to visualize that they shouldn’t be used.\n    /**\n     * Internal list of configured plugins.\n     *\n     * @deprecated\n     *   This is a private internal property and should not be used.\n     * @type {Array<PluginTuple<Array<unknown>>>}\n     */\n    this.attachers = []\n\n    /**\n     * Compiler to use.\n     *\n     * @type {(\n     *   Compiler<\n     *     CompileTree extends undefined ? Node : CompileTree,\n     *     CompileResult extends undefined ? CompileResults : CompileResult\n     *   > |\n     *   undefined\n     * )}\n     */\n    this.compiler = undefined\n\n    /**\n     * Internal state to track where we are while freezing.\n     *\n     * @deprecated\n     *   This is a private internal property and should not be used.\n     * @type {number}\n     */\n    this.freezeIndex = -1\n\n    /**\n     * Internal state to track whether we’re frozen.\n     *\n     * @deprecated\n     *   This is a private internal property and should not be used.\n     * @type {boolean | undefined}\n     */\n    this.frozen = undefined\n\n    /**\n     * Internal state.\n     *\n     * @deprecated\n     *   This is a private internal property and should not be used.\n     * @type {Data}\n     */\n    this.namespace = {}\n\n    /**\n     * Parser to use.\n     *\n     * @type {(\n     *   Parser<ParseTree extends undefined ? Node : ParseTree> |\n     *   undefined\n     * )}\n     */\n    this.parser = undefined\n\n    /**\n     * Internal list of configured transformers.\n     *\n     * @deprecated\n     *   This is a private internal property and should not be used.\n     * @type {Pipeline}\n     */\n    this.transformers = trough()\n  }\n\n  /**\n   * Copy a processor.\n   *\n   * @deprecated\n   *   This is a private internal method and should not be used.\n   * @returns {Processor<ParseTree, HeadTree, TailTree, CompileTree, CompileResult>}\n   *   New *unfrozen* processor ({@linkcode Processor}) that is\n   *   configured to work the same as its ancestor.\n   *   When the descendant processor is configured in the future it does not\n   *   affect the ancestral processor.\n   */\n  copy() {\n    // Cast as the type parameters will be the same after attaching.\n    const destination =\n      /** @type {Processor<ParseTree, HeadTree, TailTree, CompileTree, CompileResult>} */ (\n        new Processor()\n      )\n    let index = -1\n\n    while (++index < this.attachers.length) {\n      const attacher = this.attachers[index]\n      destination.use(...attacher)\n    }\n\n    destination.data(extend(true, {}, this.namespace))\n\n    return destination\n  }\n\n  /**\n   * Configure the processor with info available to all plugins.\n   * Information is stored in an object.\n   *\n   * Typically, options can be given to a specific plugin, but sometimes it\n   * makes sense to have information shared with several plugins.\n   * For example, a list of HTML elements that are self-closing, which is\n   * needed during all phases.\n   *\n   * > **Note**: setting information cannot occur on *frozen* processors.\n   * > Call the processor first to create a new unfrozen processor.\n   *\n   * > **Note**: to register custom data in TypeScript, augment the\n   * > {@linkcode Data} interface.\n   *\n   * @example\n   *   This example show how to get and set info:\n   *\n   *   ```js\n   *   import {unified} from 'unified'\n   *\n   *   const processor = unified().data('alpha', 'bravo')\n   *\n   *   processor.data('alpha') // => 'bravo'\n   *\n   *   processor.data() // => {alpha: 'bravo'}\n   *\n   *   processor.data({charlie: 'delta'})\n   *\n   *   processor.data() // => {charlie: 'delta'}\n   *   ```\n   *\n   * @template {keyof Data} Key\n   *\n   * @overload\n   * @returns {Data}\n   *\n   * @overload\n   * @param {Data} dataset\n   * @returns {Processor<ParseTree, HeadTree, TailTree, CompileTree, CompileResult>}\n   *\n   * @overload\n   * @param {Key} key\n   * @returns {Data[Key]}\n   *\n   * @overload\n   * @param {Key} key\n   * @param {Data[Key]} value\n   * @returns {Processor<ParseTree, HeadTree, TailTree, CompileTree, CompileResult>}\n   *\n   * @param {Data | Key} [key]\n   *   Key to get or set, or entire dataset to set, or nothing to get the\n   *   entire dataset (optional).\n   * @param {Data[Key]} [value]\n   *   Value to set (optional).\n   * @returns {unknown}\n   *   The current processor when setting, the value at `key` when getting, or\n   *   the entire dataset when getting without key.\n   */\n  data(key, value) {\n    if (typeof key === 'string') {\n      // Set `key`.\n      if (arguments.length === 2) {\n        assertUnfrozen('data', this.frozen)\n        this.namespace[key] = value\n        return this\n      }\n\n      // Get `key`.\n      return (own.call(this.namespace, key) && this.namespace[key]) || undefined\n    }\n\n    // Set space.\n    if (key) {\n      assertUnfrozen('data', this.frozen)\n      this.namespace = key\n      return this\n    }\n\n    // Get space.\n    return this.namespace\n  }\n\n  /**\n   * Freeze a processor.\n   *\n   * Frozen processors are meant to be extended and not to be configured\n   * directly.\n   *\n   * When a processor is frozen it cannot be unfrozen.\n   * New processors working the same way can be created by calling the\n   * processor.\n   *\n   * It’s possible to freeze processors explicitly by calling `.freeze()`.\n   * Processors freeze automatically when `.parse()`, `.run()`, `.runSync()`,\n   * `.stringify()`, `.process()`, or `.processSync()` are called.\n   *\n   * @returns {Processor<ParseTree, HeadTree, TailTree, CompileTree, CompileResult>}\n   *   The current processor.\n   */\n  freeze() {\n    if (this.frozen) {\n      return this\n    }\n\n    // Cast so that we can type plugins easier.\n    // Plugins are supposed to be usable on different processors, not just on\n    // this exact processor.\n    const self = /** @type {Processor} */ (/** @type {unknown} */ (this))\n\n    while (++this.freezeIndex < this.attachers.length) {\n      const [attacher, ...options] = this.attachers[this.freezeIndex]\n\n      if (options[0] === false) {\n        continue\n      }\n\n      if (options[0] === true) {\n        options[0] = undefined\n      }\n\n      const transformer = attacher.call(self, ...options)\n\n      if (typeof transformer === 'function') {\n        this.transformers.use(transformer)\n      }\n    }\n\n    this.frozen = true\n    this.freezeIndex = Number.POSITIVE_INFINITY\n\n    return this\n  }\n\n  /**\n   * Parse text to a syntax tree.\n   *\n   * > **Note**: `parse` freezes the processor if not already *frozen*.\n   *\n   * > **Note**: `parse` performs the parse phase, not the run phase or other\n   * > phases.\n   *\n   * @param {Compatible | undefined} [file]\n   *   file to parse (optional); typically `string` or `VFile`; any value\n   *   accepted as `x` in `new VFile(x)`.\n   * @returns {ParseTree extends undefined ? Node : ParseTree}\n   *   Syntax tree representing `file`.\n   */\n  parse(file) {\n    this.freeze()\n    const realFile = vfile(file)\n    const parser = this.parser || this.Parser\n    assertParser('parse', parser)\n    return parser(String(realFile), realFile)\n  }\n\n  /**\n   * Process the given file as configured on the processor.\n   *\n   * > **Note**: `process` freezes the processor if not already *frozen*.\n   *\n   * > **Note**: `process` performs the parse, run, and stringify phases.\n   *\n   * @overload\n   * @param {Compatible | undefined} file\n   * @param {ProcessCallback<VFileWithOutput<CompileResult>>} done\n   * @returns {undefined}\n   *\n   * @overload\n   * @param {Compatible | undefined} [file]\n   * @returns {Promise<VFileWithOutput<CompileResult>>}\n   *\n   * @param {Compatible | undefined} [file]\n   *   File (optional); typically `string` or `VFile`]; any value accepted as\n   *   `x` in `new VFile(x)`.\n   * @param {ProcessCallback<VFileWithOutput<CompileResult>> | undefined} [done]\n   *   Callback (optional).\n   * @returns {Promise<VFile> | undefined}\n   *   Nothing if `done` is given.\n   *   Otherwise a promise, rejected with a fatal error or resolved with the\n   *   processed file.\n   *\n   *   The parsed, transformed, and compiled value is available at\n   *   `file.value` (see note).\n   *\n   *   > **Note**: unified typically compiles by serializing: most\n   *   > compilers return `string` (or `Uint8Array`).\n   *   > Some compilers, such as the one configured with\n   *   > [`rehype-react`][rehype-react], return other values (in this case, a\n   *   > React tree).\n   *   > If you’re using a compiler that doesn’t serialize, expect different\n   *   > result values.\n   *   >\n   *   > To register custom results in TypeScript, add them to\n   *   > {@linkcode CompileResultMap}.\n   *\n   *   [rehype-react]: https://github.com/rehypejs/rehype-react\n   */\n  process(file, done) {\n    const self = this\n\n    this.freeze()\n    assertParser('process', this.parser || this.Parser)\n    assertCompiler('process', this.compiler || this.Compiler)\n\n    return done ? executor(undefined, done) : new Promise(executor)\n\n    // Note: `void`s needed for TS.\n    /**\n     * @param {((file: VFileWithOutput<CompileResult>) => undefined | void) | undefined} resolve\n     * @param {(error: Error | undefined) => undefined | void} reject\n     * @returns {undefined}\n     */\n    function executor(resolve, reject) {\n      const realFile = vfile(file)\n      // Assume `ParseTree` (the result of the parser) matches `HeadTree` (the\n      // input of the first transform).\n      const parseTree =\n        /** @type {HeadTree extends undefined ? Node : HeadTree} */ (\n          /** @type {unknown} */ (self.parse(realFile))\n        )\n\n      self.run(parseTree, realFile, function (error, tree, file) {\n        if (error || !tree || !file) {\n          return realDone(error)\n        }\n\n        // Assume `TailTree` (the output of the last transform) matches\n        // `CompileTree` (the input of the compiler).\n        const compileTree =\n          /** @type {CompileTree extends undefined ? Node : CompileTree} */ (\n            /** @type {unknown} */ (tree)\n          )\n\n        const compileResult = self.stringify(compileTree, file)\n\n        if (looksLikeAValue(compileResult)) {\n          file.value = compileResult\n        } else {\n          file.result = compileResult\n        }\n\n        realDone(error, /** @type {VFileWithOutput<CompileResult>} */ (file))\n      })\n\n      /**\n       * @param {Error | undefined} error\n       * @param {VFileWithOutput<CompileResult> | undefined} [file]\n       * @returns {undefined}\n       */\n      function realDone(error, file) {\n        if (error || !file) {\n          reject(error)\n        } else if (resolve) {\n          resolve(file)\n        } else {\n          assert(done, '`done` is defined if `resolve` is not')\n          done(undefined, file)\n        }\n      }\n    }\n  }\n\n  /**\n   * Process the given file as configured on the processor.\n   *\n   * An error is thrown if asynchronous transforms are configured.\n   *\n   * > **Note**: `processSync` freezes the processor if not already *frozen*.\n   *\n   * > **Note**: `processSync` performs the parse, run, and stringify phases.\n   *\n   * @param {Compatible | undefined} [file]\n   *   File (optional); typically `string` or `VFile`; any value accepted as\n   *   `x` in `new VFile(x)`.\n   * @returns {VFileWithOutput<CompileResult>}\n   *   The processed file.\n   *\n   *   The parsed, transformed, and compiled value is available at\n   *   `file.value` (see note).\n   *\n   *   > **Note**: unified typically compiles by serializing: most\n   *   > compilers return `string` (or `Uint8Array`).\n   *   > Some compilers, such as the one configured with\n   *   > [`rehype-react`][rehype-react], return other values (in this case, a\n   *   > React tree).\n   *   > If you’re using a compiler that doesn’t serialize, expect different\n   *   > result values.\n   *   >\n   *   > To register custom results in TypeScript, add them to\n   *   > {@linkcode CompileResultMap}.\n   *\n   *   [rehype-react]: https://github.com/rehypejs/rehype-react\n   */\n  processSync(file) {\n    /** @type {boolean} */\n    let complete = false\n    /** @type {VFileWithOutput<CompileResult> | undefined} */\n    let result\n\n    this.freeze()\n    assertParser('processSync', this.parser || this.Parser)\n    assertCompiler('processSync', this.compiler || this.Compiler)\n\n    this.process(file, realDone)\n    assertDone('processSync', 'process', complete)\n    assert(result, 'we either bailed on an error or have a tree')\n\n    return result\n\n    /**\n     * @type {ProcessCallback<VFileWithOutput<CompileResult>>}\n     */\n    function realDone(error, file) {\n      complete = true\n      bail(error)\n      result = file\n    }\n  }\n\n  /**\n   * Run *transformers* on a syntax tree.\n   *\n   * > **Note**: `run` freezes the processor if not already *frozen*.\n   *\n   * > **Note**: `run` performs the run phase, not other phases.\n   *\n   * @overload\n   * @param {HeadTree extends undefined ? Node : HeadTree} tree\n   * @param {RunCallback<TailTree extends undefined ? Node : TailTree>} done\n   * @returns {undefined}\n   *\n   * @overload\n   * @param {HeadTree extends undefined ? Node : HeadTree} tree\n   * @param {Compatible | undefined} file\n   * @param {RunCallback<TailTree extends undefined ? Node : TailTree>} done\n   * @returns {undefined}\n   *\n   * @overload\n   * @param {HeadTree extends undefined ? Node : HeadTree} tree\n   * @param {Compatible | undefined} [file]\n   * @returns {Promise<TailTree extends undefined ? Node : TailTree>}\n   *\n   * @param {HeadTree extends undefined ? Node : HeadTree} tree\n   *   Tree to transform and inspect.\n   * @param {(\n   *   RunCallback<TailTree extends undefined ? Node : TailTree> |\n   *   Compatible\n   * )} [file]\n   *   File associated with `node` (optional); any value accepted as `x` in\n   *   `new VFile(x)`.\n   * @param {RunCallback<TailTree extends undefined ? Node : TailTree>} [done]\n   *   Callback (optional).\n   * @returns {Promise<TailTree extends undefined ? Node : TailTree> | undefined}\n   *   Nothing if `done` is given.\n   *   Otherwise, a promise rejected with a fatal error or resolved with the\n   *   transformed tree.\n   */\n  run(tree, file, done) {\n    assertNode(tree)\n    this.freeze()\n\n    const transformers = this.transformers\n\n    if (!done && typeof file === 'function') {\n      done = file\n      file = undefined\n    }\n\n    return done ? executor(undefined, done) : new Promise(executor)\n\n    // Note: `void`s needed for TS.\n    /**\n     * @param {(\n     *   ((tree: TailTree extends undefined ? Node : TailTree) => undefined | void) |\n     *   undefined\n     * )} resolve\n     * @param {(error: Error) => undefined | void} reject\n     * @returns {undefined}\n     */\n    function executor(resolve, reject) {\n      assert(\n        typeof file !== 'function',\n        '`file` can’t be a `done` anymore, we checked'\n      )\n      const realFile = vfile(file)\n      transformers.run(tree, realFile, realDone)\n\n      /**\n       * @param {Error | undefined} error\n       * @param {Node} outputTree\n       * @param {VFile} file\n       * @returns {undefined}\n       */\n      function realDone(error, outputTree, file) {\n        const resultingTree =\n          /** @type {TailTree extends undefined ? Node : TailTree} */ (\n            outputTree || tree\n          )\n\n        if (error) {\n          reject(error)\n        } else if (resolve) {\n          resolve(resultingTree)\n        } else {\n          assert(done, '`done` is defined if `resolve` is not')\n          done(undefined, resultingTree, file)\n        }\n      }\n    }\n  }\n\n  /**\n   * Run *transformers* on a syntax tree.\n   *\n   * An error is thrown if asynchronous transforms are configured.\n   *\n   * > **Note**: `runSync` freezes the processor if not already *frozen*.\n   *\n   * > **Note**: `runSync` performs the run phase, not other phases.\n   *\n   * @param {HeadTree extends undefined ? Node : HeadTree} tree\n   *   Tree to transform and inspect.\n   * @param {Compatible | undefined} [file]\n   *   File associated with `node` (optional); any value accepted as `x` in\n   *   `new VFile(x)`.\n   * @returns {TailTree extends undefined ? Node : TailTree}\n   *   Transformed tree.\n   */\n  runSync(tree, file) {\n    /** @type {boolean} */\n    let complete = false\n    /** @type {(TailTree extends undefined ? Node : TailTree) | undefined} */\n    let result\n\n    this.run(tree, file, realDone)\n\n    assertDone('runSync', 'run', complete)\n    assert(result, 'we either bailed on an error or have a tree')\n    return result\n\n    /**\n     * @type {RunCallback<TailTree extends undefined ? Node : TailTree>}\n     */\n    function realDone(error, tree) {\n      bail(error)\n      result = tree\n      complete = true\n    }\n  }\n\n  /**\n   * Compile a syntax tree.\n   *\n   * > **Note**: `stringify` freezes the processor if not already *frozen*.\n   *\n   * > **Note**: `stringify` performs the stringify phase, not the run phase\n   * > or other phases.\n   *\n   * @param {CompileTree extends undefined ? Node : CompileTree} tree\n   *   Tree to compile.\n   * @param {Compatible | undefined} [file]\n   *   File associated with `node` (optional); any value accepted as `x` in\n   *   `new VFile(x)`.\n   * @returns {CompileResult extends undefined ? Value : CompileResult}\n   *   Textual representation of the tree (see note).\n   *\n   *   > **Note**: unified typically compiles by serializing: most compilers\n   *   > return `string` (or `Uint8Array`).\n   *   > Some compilers, such as the one configured with\n   *   > [`rehype-react`][rehype-react], return other values (in this case, a\n   *   > React tree).\n   *   > If you’re using a compiler that doesn’t serialize, expect different\n   *   > result values.\n   *   >\n   *   > To register custom results in TypeScript, add them to\n   *   > {@linkcode CompileResultMap}.\n   *\n   *   [rehype-react]: https://github.com/rehypejs/rehype-react\n   */\n  stringify(tree, file) {\n    this.freeze()\n    const realFile = vfile(file)\n    const compiler = this.compiler || this.Compiler\n    assertCompiler('stringify', compiler)\n    assertNode(tree)\n\n    return compiler(tree, realFile)\n  }\n\n  /**\n   * Configure the processor to use a plugin, a list of usable values, or a\n   * preset.\n   *\n   * If the processor is already using a plugin, the previous plugin\n   * configuration is changed based on the options that are passed in.\n   * In other words, the plugin is not added a second time.\n   *\n   * > **Note**: `use` cannot be called on *frozen* processors.\n   * > Call the processor first to create a new unfrozen processor.\n   *\n   * @example\n   *   There are many ways to pass plugins to `.use()`.\n   *   This example gives an overview:\n   *\n   *   ```js\n   *   import {unified} from 'unified'\n   *\n   *   unified()\n   *     // Plugin with options:\n   *     .use(pluginA, {x: true, y: true})\n   *     // Passing the same plugin again merges configuration (to `{x: true, y: false, z: true}`):\n   *     .use(pluginA, {y: false, z: true})\n   *     // Plugins:\n   *     .use([pluginB, pluginC])\n   *     // Two plugins, the second with options:\n   *     .use([pluginD, [pluginE, {}]])\n   *     // Preset with plugins and settings:\n   *     .use({plugins: [pluginF, [pluginG, {}]], settings: {position: false}})\n   *     // Settings only:\n   *     .use({settings: {position: false}})\n   *   ```\n   *\n   * @template {Array<unknown>} [Parameters=[]]\n   * @template {Node | string | undefined} [Input=undefined]\n   * @template [Output=Input]\n   *\n   * @overload\n   * @param {Preset | null | undefined} [preset]\n   * @returns {Processor<ParseTree, HeadTree, TailTree, CompileTree, CompileResult>}\n   *\n   * @overload\n   * @param {PluggableList} list\n   * @returns {Processor<ParseTree, HeadTree, TailTree, CompileTree, CompileResult>}\n   *\n   * @overload\n   * @param {Plugin<Parameters, Input, Output>} plugin\n   * @param {...(Parameters | [boolean])} parameters\n   * @returns {UsePlugin<ParseTree, HeadTree, TailTree, CompileTree, CompileResult, Input, Output>}\n   *\n   * @param {PluggableList | Plugin | Preset | null | undefined} value\n   *   Usable value.\n   * @param {...unknown} parameters\n   *   Parameters, when a plugin is given as a usable value.\n   * @returns {Processor<ParseTree, HeadTree, TailTree, CompileTree, CompileResult>}\n   *   Current processor.\n   */\n  use(value, ...parameters) {\n    const attachers = this.attachers\n    const namespace = this.namespace\n\n    assertUnfrozen('use', this.frozen)\n\n    if (value === null || value === undefined) {\n      // Empty.\n    } else if (typeof value === 'function') {\n      addPlugin(value, parameters)\n    } else if (typeof value === 'object') {\n      if (Array.isArray(value)) {\n        addList(value)\n      } else {\n        addPreset(value)\n      }\n    } else {\n      throw new TypeError('Expected usable value, not `' + value + '`')\n    }\n\n    return this\n\n    /**\n     * @param {Pluggable} value\n     * @returns {undefined}\n     */\n    function add(value) {\n      if (typeof value === 'function') {\n        addPlugin(value, [])\n      } else if (typeof value === 'object') {\n        if (Array.isArray(value)) {\n          const [plugin, ...parameters] =\n            /** @type {PluginTuple<Array<unknown>>} */ (value)\n          addPlugin(plugin, parameters)\n        } else {\n          addPreset(value)\n        }\n      } else {\n        throw new TypeError('Expected usable value, not `' + value + '`')\n      }\n    }\n\n    /**\n     * @param {Preset} result\n     * @returns {undefined}\n     */\n    function addPreset(result) {\n      if (!('plugins' in result) && !('settings' in result)) {\n        throw new Error(\n          'Expected usable value but received an empty preset, which is probably a mistake: presets typically come with `plugins` and sometimes with `settings`, but this has neither'\n        )\n      }\n\n      addList(result.plugins)\n\n      if (result.settings) {\n        namespace.settings = extend(true, namespace.settings, result.settings)\n      }\n    }\n\n    /**\n     * @param {PluggableList | null | undefined} plugins\n     * @returns {undefined}\n     */\n    function addList(plugins) {\n      let index = -1\n\n      if (plugins === null || plugins === undefined) {\n        // Empty.\n      } else if (Array.isArray(plugins)) {\n        while (++index < plugins.length) {\n          const thing = plugins[index]\n          add(thing)\n        }\n      } else {\n        throw new TypeError('Expected a list of plugins, not `' + plugins + '`')\n      }\n    }\n\n    /**\n     * @param {Plugin} plugin\n     * @param {Array<unknown>} parameters\n     * @returns {undefined}\n     */\n    function addPlugin(plugin, parameters) {\n      let index = -1\n      let entryIndex = -1\n\n      while (++index < attachers.length) {\n        if (attachers[index][0] === plugin) {\n          entryIndex = index\n          break\n        }\n      }\n\n      if (entryIndex === -1) {\n        attachers.push([plugin, ...parameters])\n      }\n      // Only set if there was at least a `primary` value, otherwise we’d change\n      // `arguments.length`.\n      else if (parameters.length > 0) {\n        let [primary, ...rest] = parameters\n        const currentPrimary = attachers[entryIndex][1]\n        if (isPlainObj(currentPrimary) && isPlainObj(primary)) {\n          primary = extend(true, currentPrimary, primary)\n        }\n\n        attachers[entryIndex] = [plugin, primary, ...rest]\n      }\n    }\n  }\n}\n\n// Note: this returns a *callable* instance.\n// That’s why it’s documented as a function.\n/**\n * Create a new processor.\n *\n * @example\n *   This example shows how a new processor can be created (from `remark`) and linked\n *   to **stdin**(4) and **stdout**(4).\n *\n *   ```js\n *   import process from 'node:process'\n *   import concatStream from 'concat-stream'\n *   import {remark} from 'remark'\n *\n *   process.stdin.pipe(\n *     concatStream(function (buf) {\n *       process.stdout.write(String(remark().processSync(buf)))\n *     })\n *   )\n *   ```\n *\n * @returns\n *   New *unfrozen* processor (`processor`).\n *\n *   This processor is configured to work the same as its ancestor.\n *   When the descendant processor is configured in the future it does not\n *   affect the ancestral processor.\n */\nexport const unified = new Processor().freeze()\n\n/**\n * Assert a parser is available.\n *\n * @param {string} name\n * @param {unknown} value\n * @returns {asserts value is Parser}\n */\nfunction assertParser(name, value) {\n  if (typeof value !== 'function') {\n    throw new TypeError('Cannot `' + name + '` without `parser`')\n  }\n}\n\n/**\n * Assert a compiler is available.\n *\n * @param {string} name\n * @param {unknown} value\n * @returns {asserts value is Compiler}\n */\nfunction assertCompiler(name, value) {\n  if (typeof value !== 'function') {\n    throw new TypeError('Cannot `' + name + '` without `compiler`')\n  }\n}\n\n/**\n * Assert the processor is not frozen.\n *\n * @param {string} name\n * @param {unknown} frozen\n * @returns {asserts frozen is false}\n */\nfunction assertUnfrozen(name, frozen) {\n  if (frozen) {\n    throw new Error(\n      'Cannot call `' +\n        name +\n        '` on a frozen processor.\\nCreate a new processor first, by calling it: use `processor()` instead of `processor`.'\n    )\n  }\n}\n\n/**\n * Assert `node` is a unist node.\n *\n * @param {unknown} node\n * @returns {asserts node is Node}\n */\nfunction assertNode(node) {\n  // `isPlainObj` unfortunately uses `any` instead of `unknown`.\n  // type-coverage:ignore-next-line\n  if (!isPlainObj(node) || typeof node.type !== 'string') {\n    throw new TypeError('Expected node, got `' + node + '`')\n    // Fine.\n  }\n}\n\n/**\n * Assert that `complete` is `true`.\n *\n * @param {string} name\n * @param {string} asyncName\n * @param {unknown} complete\n * @returns {asserts complete is true}\n */\nfunction assertDone(name, asyncName, complete) {\n  if (!complete) {\n    throw new Error(\n      '`' + name + '` finished async. Use `' + asyncName + '` instead'\n    )\n  }\n}\n\n/**\n * @param {Compatible | undefined} [value]\n * @returns {VFile}\n */\nfunction vfile(value) {\n  return looksLikeAVFile(value) ? value : new VFile(value)\n}\n\n/**\n * @param {Compatible | undefined} [value]\n * @returns {value is VFile}\n */\nfunction looksLikeAVFile(value) {\n  return Boolean(\n    value &&\n      typeof value === 'object' &&\n      'message' in value &&\n      'messages' in value\n  )\n}\n\n/**\n * @param {unknown} [value]\n * @returns {value is Value}\n */\nfunction looksLikeAValue(value) {\n  return typeof value === 'string' || isUint8Array(value)\n}\n\n/**\n * Assert `value` is an `Uint8Array`.\n *\n * @param {unknown} value\n *   thing.\n * @returns {value is Uint8Array}\n *   Whether `value` is an `Uint8Array`.\n */\nfunction isUint8Array(value) {\n  return Boolean(\n    value &&\n      typeof value === 'object' &&\n      'byteLength' in value &&\n      'byteOffset' in value\n  )\n}\n","/**\n * @import {Element, Nodes, Parents, Root} from 'hast'\n * @import {Root as MdastRoot} from 'mdast'\n * @import {ComponentType, JSX, ReactElement, ReactNode} from 'react'\n * @import {Options as RemarkRehypeOptions} from 'remark-rehype'\n * @import {BuildVisitor} from 'unist-util-visit'\n * @import {PluggableList, Processor} from 'unified'\n */\n\n/**\n * @callback AllowElement\n *   Filter elements.\n * @param {Readonly<Element>} element\n *   Element to check.\n * @param {number} index\n *   Index of `element` in `parent`.\n * @param {Readonly<Parents> | undefined} parent\n *   Parent of `element`.\n * @returns {boolean | null | undefined}\n *   Whether to allow `element` (default: `false`).\n */\n\n/**\n * @typedef ExtraProps\n *   Extra fields we pass.\n * @property {Element | undefined} [node]\n *   passed when `passNode` is on.\n */\n\n/**\n * @typedef {{\n *   [Key in keyof JSX.IntrinsicElements]?: ComponentType<JSX.IntrinsicElements[Key] & ExtraProps> | keyof JSX.IntrinsicElements\n * }} Components\n *   Map tag names to components.\n */\n\n/**\n * @typedef Deprecation\n *   Deprecation.\n * @property {string} from\n *   Old field.\n * @property {string} id\n *   ID in readme.\n * @property {keyof Options} [to]\n *   New field.\n */\n\n/**\n * @typedef Options\n *   Configuration.\n * @property {AllowElement | null | undefined} [allowElement]\n *   Filter elements (optional);\n *   `allowedElements` / `disallowedElements` is used first.\n * @property {ReadonlyArray<string> | null | undefined} [allowedElements]\n *   Tag names to allow (default: all tag names);\n *   cannot combine w/ `disallowedElements`.\n * @property {string | null | undefined} [children]\n *   Markdown.\n * @property {Components | null | undefined} [components]\n *   Map tag names to components.\n * @property {ReadonlyArray<string> | null | undefined} [disallowedElements]\n *   Tag names to disallow (default: `[]`);\n *   cannot combine w/ `allowedElements`.\n * @property {PluggableList | null | undefined} [rehypePlugins]\n *   List of rehype plugins to use.\n * @property {PluggableList | null | undefined} [remarkPlugins]\n *   List of remark plugins to use.\n * @property {Readonly<RemarkRehypeOptions> | null | undefined} [remarkRehypeOptions]\n *   Options to pass through to `remark-rehype`.\n * @property {boolean | null | undefined} [skipHtml=false]\n *   Ignore HTML in markdown completely (default: `false`).\n * @property {boolean | null | undefined} [unwrapDisallowed=false]\n *   Extract (unwrap) what’s in disallowed elements (default: `false`);\n *   normally when say `strong` is not allowed, it and it’s children are dropped,\n *   with `unwrapDisallowed` the element itself is replaced by its children.\n * @property {UrlTransform | null | undefined} [urlTransform]\n *   Change URLs (default: `defaultUrlTransform`)\n */\n\n/**\n * @typedef HooksOptionsOnly\n *   Configuration specifically for {@linkcode MarkdownHooks}.\n * @property {ReactNode | null | undefined} [fallback]\n *   Content to render while the processor processing the markdown (optional).\n */\n\n/**\n * @typedef {Options & HooksOptionsOnly} HooksOptions\n *   Configuration for {@linkcode MarkdownHooks};\n *   extends the regular {@linkcode Options} with a `fallback` prop.\n */\n\n/**\n * @callback UrlTransform\n *   Transform all URLs.\n * @param {string} url\n *   URL.\n * @param {string} key\n *   Property name (example: `'href'`).\n * @param {Readonly<Element>} node\n *   Node.\n * @returns {string | null | undefined}\n *   Transformed URL (optional).\n */\n\nimport {unreachable} from 'devlop'\nimport {toJsxRuntime} from 'hast-util-to-jsx-runtime'\nimport {urlAttributes} from 'html-url-attributes'\nimport {Fragment, jsx, jsxs} from 'react/jsx-runtime'\nimport {useEffect, useState} from 'react'\nimport remarkParse from 'remark-parse'\nimport remarkRehype from 'remark-rehype'\nimport {unified} from 'unified'\nimport {visit} from 'unist-util-visit'\nimport {VFile} from 'vfile'\n\nconst changelog =\n  'https://github.com/remarkjs/react-markdown/blob/main/changelog.md'\n\n/** @type {PluggableList} */\nconst emptyPlugins = []\n/** @type {Readonly<RemarkRehypeOptions>} */\nconst emptyRemarkRehypeOptions = {allowDangerousHtml: true}\nconst safeProtocol = /^(https?|ircs?|mailto|xmpp)$/i\n\n// Mutable because we `delete` any time it’s used and a message is sent.\n/** @type {ReadonlyArray<Readonly<Deprecation>>} */\nconst deprecations = [\n  {from: 'astPlugins', id: 'remove-buggy-html-in-markdown-parser'},\n  {from: 'allowDangerousHtml', id: 'remove-buggy-html-in-markdown-parser'},\n  {\n    from: 'allowNode',\n    id: 'replace-allownode-allowedtypes-and-disallowedtypes',\n    to: 'allowElement'\n  },\n  {\n    from: 'allowedTypes',\n    id: 'replace-allownode-allowedtypes-and-disallowedtypes',\n    to: 'allowedElements'\n  },\n  {from: 'className', id: 'remove-classname'},\n  {\n    from: 'disallowedTypes',\n    id: 'replace-allownode-allowedtypes-and-disallowedtypes',\n    to: 'disallowedElements'\n  },\n  {from: 'escapeHtml', id: 'remove-buggy-html-in-markdown-parser'},\n  {from: 'includeElementIndex', id: '#remove-includeelementindex'},\n  {\n    from: 'includeNodeIndex',\n    id: 'change-includenodeindex-to-includeelementindex'\n  },\n  {from: 'linkTarget', id: 'remove-linktarget'},\n  {from: 'plugins', id: 'change-plugins-to-remarkplugins', to: 'remarkPlugins'},\n  {from: 'rawSourcePos', id: '#remove-rawsourcepos'},\n  {from: 'renderers', id: 'change-renderers-to-components', to: 'components'},\n  {from: 'source', id: 'change-source-to-children', to: 'children'},\n  {from: 'sourcePos', id: '#remove-sourcepos'},\n  {from: 'transformImageUri', id: '#add-urltransform', to: 'urlTransform'},\n  {from: 'transformLinkUri', id: '#add-urltransform', to: 'urlTransform'}\n]\n\n/**\n * Component to render markdown.\n *\n * This is a synchronous component.\n * When using async plugins,\n * see {@linkcode MarkdownAsync} or {@linkcode MarkdownHooks}.\n *\n * @param {Readonly<Options>} options\n *   Props.\n * @returns {ReactElement}\n *   React element.\n */\nexport function Markdown(options) {\n  const processor = createProcessor(options)\n  const file = createFile(options)\n  return post(processor.runSync(processor.parse(file), file), options)\n}\n\n/**\n * Component to render markdown with support for async plugins\n * through async/await.\n *\n * Components returning promises are supported on the server.\n * For async support on the client,\n * see {@linkcode MarkdownHooks}.\n *\n * @param {Readonly<Options>} options\n *   Props.\n * @returns {Promise<ReactElement>}\n *   Promise to a React element.\n */\nexport async function MarkdownAsync(options) {\n  const processor = createProcessor(options)\n  const file = createFile(options)\n  const tree = await processor.run(processor.parse(file), file)\n  return post(tree, options)\n}\n\n/**\n * Component to render markdown with support for async plugins through hooks.\n *\n * This uses `useEffect` and `useState` hooks.\n * Hooks run on the client and do not immediately render something.\n * For async support on the server,\n * see {@linkcode MarkdownAsync}.\n *\n * @param {Readonly<HooksOptions>} options\n *   Props.\n * @returns {ReactNode}\n *   React node.\n */\nexport function MarkdownHooks(options) {\n  const processor = createProcessor(options)\n  const [error, setError] = useState(\n    /** @type {Error | undefined} */ (undefined)\n  )\n  const [tree, setTree] = useState(/** @type {Root | undefined} */ (undefined))\n\n  useEffect(\n    function () {\n      let cancelled = false\n      const file = createFile(options)\n\n      processor.run(processor.parse(file), file, function (error, tree) {\n        if (!cancelled) {\n          setError(error)\n          setTree(tree)\n        }\n      })\n\n      /**\n       * @returns {undefined}\n       *   Nothing.\n       */\n      return function () {\n        cancelled = true\n      }\n    },\n    [\n      options.children,\n      options.rehypePlugins,\n      options.remarkPlugins,\n      options.remarkRehypeOptions\n    ]\n  )\n\n  if (error) throw error\n\n  return tree ? post(tree, options) : options.fallback\n}\n\n/**\n * Set up the `unified` processor.\n *\n * @param {Readonly<Options>} options\n *   Props.\n * @returns {Processor<MdastRoot, MdastRoot, Root, undefined, undefined>}\n *   Result.\n */\nfunction createProcessor(options) {\n  const rehypePlugins = options.rehypePlugins || emptyPlugins\n  const remarkPlugins = options.remarkPlugins || emptyPlugins\n  const remarkRehypeOptions = options.remarkRehypeOptions\n    ? {...options.remarkRehypeOptions, ...emptyRemarkRehypeOptions}\n    : emptyRemarkRehypeOptions\n\n  const processor = unified()\n    .use(remarkParse)\n    .use(remarkPlugins)\n    .use(remarkRehype, remarkRehypeOptions)\n    .use(rehypePlugins)\n\n  return processor\n}\n\n/**\n * Set up the virtual file.\n *\n * @param {Readonly<Options>} options\n *   Props.\n * @returns {VFile}\n *   Result.\n */\nfunction createFile(options) {\n  const children = options.children || ''\n  const file = new VFile()\n\n  if (typeof children === 'string') {\n    file.value = children\n  } else {\n    unreachable(\n      'Unexpected value `' +\n        children +\n        '` for `children` prop, expected `string`'\n    )\n  }\n\n  return file\n}\n\n/**\n * Process the result from unified some more.\n *\n * @param {Nodes} tree\n *   Tree.\n * @param {Readonly<Options>} options\n *   Props.\n * @returns {ReactElement}\n *   React element.\n */\nfunction post(tree, options) {\n  const allowedElements = options.allowedElements\n  const allowElement = options.allowElement\n  const components = options.components\n  const disallowedElements = options.disallowedElements\n  const skipHtml = options.skipHtml\n  const unwrapDisallowed = options.unwrapDisallowed\n  const urlTransform = options.urlTransform || defaultUrlTransform\n\n  for (const deprecation of deprecations) {\n    if (Object.hasOwn(options, deprecation.from)) {\n      unreachable(\n        'Unexpected `' +\n          deprecation.from +\n          '` prop, ' +\n          (deprecation.to\n            ? 'use `' + deprecation.to + '` instead'\n            : 'remove it') +\n          ' (see <' +\n          changelog +\n          '#' +\n          deprecation.id +\n          '> for more info)'\n      )\n    }\n  }\n\n  if (allowedElements && disallowedElements) {\n    unreachable(\n      'Unexpected combined `allowedElements` and `disallowedElements`, expected one or the other'\n    )\n  }\n\n  visit(tree, transform)\n\n  return toJsxRuntime(tree, {\n    Fragment,\n    components,\n    ignoreInvalidStyle: true,\n    jsx,\n    jsxs,\n    passKeys: true,\n    passNode: true\n  })\n\n  /** @type {BuildVisitor<Root>} */\n  function transform(node, index, parent) {\n    if (node.type === 'raw' && parent && typeof index === 'number') {\n      if (skipHtml) {\n        parent.children.splice(index, 1)\n      } else {\n        parent.children[index] = {type: 'text', value: node.value}\n      }\n\n      return index\n    }\n\n    if (node.type === 'element') {\n      /** @type {string} */\n      let key\n\n      for (key in urlAttributes) {\n        if (\n          Object.hasOwn(urlAttributes, key) &&\n          Object.hasOwn(node.properties, key)\n        ) {\n          const value = node.properties[key]\n          const test = urlAttributes[key]\n          if (test === null || test.includes(node.tagName)) {\n            node.properties[key] = urlTransform(String(value || ''), key, node)\n          }\n        }\n      }\n    }\n\n    if (node.type === 'element') {\n      let remove = allowedElements\n        ? !allowedElements.includes(node.tagName)\n        : disallowedElements\n          ? disallowedElements.includes(node.tagName)\n          : false\n\n      if (!remove && allowElement && typeof index === 'number') {\n        remove = !allowElement(node, index, parent)\n      }\n\n      if (remove && parent && typeof index === 'number') {\n        if (unwrapDisallowed && node.children) {\n          parent.children.splice(index, 1, ...node.children)\n        } else {\n          parent.children.splice(index, 1)\n        }\n\n        return index\n      }\n    }\n  }\n}\n\n/**\n * Make a URL safe.\n *\n * @satisfies {UrlTransform}\n * @param {string} value\n *   URL.\n * @returns {string}\n *   Safe URL.\n */\nexport function defaultUrlTransform(value) {\n  // Same as:\n  // <https://github.com/micromark/micromark/blob/929275e/packages/micromark-util-sanitize-uri/dev/index.js#L34>\n  // But without the `encode` part.\n  const colon = value.indexOf(':')\n  const questionMark = value.indexOf('?')\n  const numberSign = value.indexOf('#')\n  const slash = value.indexOf('/')\n\n  if (\n    // If there is no protocol, it’s relative.\n    colon === -1 ||\n    // If the first colon is after a `?`, `#`, or `/`, it’s not a protocol.\n    (slash !== -1 && colon > slash) ||\n    (questionMark !== -1 && colon > questionMark) ||\n    (numberSign !== -1 && colon > numberSign) ||\n    // It is a protocol, it should be allowed.\n    safeProtocol.test(value.slice(0, colon))\n  ) {\n    return value\n  }\n\n  return ''\n}\n","/**\n * @typedef {import('hast').Element} Element\n * @typedef {import('hast').Properties} Properties\n */\n\n/**\n * @template {string} SimpleSelector\n *   Selector type.\n * @template {string} DefaultTagName\n *   Default tag name.\n * @typedef {(\n *   SimpleSelector extends ''\n *     ? DefaultTagName\n *     : SimpleSelector extends `${infer TagName}.${infer Rest}`\n *     ? ExtractTagName<TagName, DefaultTagName>\n *     : SimpleSelector extends `${infer TagName}#${infer Rest}`\n *     ? ExtractTagName<TagName, DefaultTagName>\n *     : SimpleSelector extends string\n *     ? SimpleSelector\n *     : DefaultTagName\n * )} ExtractTagName\n *   Extract tag name from a simple selector.\n */\n\nconst search = /[#.]/g\n\n/**\n * Create a hast element from a simple CSS selector.\n *\n * @template {string} Selector\n *   Type of selector.\n * @template {string} [DefaultTagName='div']\n *   Type of default tag name (default: `'div'`).\n * @param {Selector | null | undefined} [selector]\n *   Simple CSS selector (optional).\n *\n *   Can contain a tag name (`foo`), classes (`.bar`), and an ID (`#baz`).\n *   Multiple classes are allowed.\n *   Uses the last ID if multiple IDs are found.\n * @param {DefaultTagName | null | undefined} [defaultTagName='div']\n *   Tag name to use if `selector` does not specify one (default: `'div'`).\n * @returns {Element & {tagName: ExtractTagName<Selector, DefaultTagName>}}\n *   Built element.\n */\nexport function parseSelector(selector, defaultTagName) {\n  const value = selector || ''\n  /** @type {Properties} */\n  const props = {}\n  let start = 0\n  /** @type {string | undefined} */\n  let previous\n  /** @type {string | undefined} */\n  let tagName\n\n  while (start < value.length) {\n    search.lastIndex = start\n    const match = search.exec(value)\n    const subvalue = value.slice(start, match ? match.index : value.length)\n\n    if (subvalue) {\n      if (!previous) {\n        tagName = subvalue\n      } else if (previous === '#') {\n        props.id = subvalue\n      } else if (Array.isArray(props.className)) {\n        props.className.push(subvalue)\n      } else {\n        props.className = [subvalue]\n      }\n\n      start += subvalue.length\n    }\n\n    if (match) {\n      previous = match[0]\n      start++\n    }\n  }\n\n  return {\n    type: 'element',\n    // @ts-expect-error: tag name is parsed.\n    tagName: tagName || defaultTagName || 'div',\n    properties: props,\n    children: []\n  }\n}\n","/**\n * @import {Element, Nodes, RootContent, Root} from 'hast'\n * @import {Info, Schema} from 'property-information'\n */\n\n/**\n * @typedef {Array<Nodes | PrimitiveChild>} ArrayChildNested\n *   List of children (deep).\n */\n\n/**\n * @typedef {Array<ArrayChildNested | Nodes | PrimitiveChild>} ArrayChild\n *   List of children.\n */\n\n/**\n * @typedef {Array<number | string>} ArrayValue\n *   List of property values for space- or comma separated values (such as `className`).\n */\n\n/**\n * @typedef {ArrayChild | Nodes | PrimitiveChild} Child\n *   Acceptable child value.\n */\n\n/**\n * @typedef {number | string | null | undefined} PrimitiveChild\n *   Primitive children, either ignored (nullish), or turned into text nodes.\n */\n\n/**\n * @typedef {boolean | number | string | null | undefined} PrimitiveValue\n *   Primitive property value.\n */\n\n/**\n * @typedef {Record<string, PropertyValue | Style>} Properties\n *   Acceptable value for element properties.\n */\n\n/**\n * @typedef {ArrayValue | PrimitiveValue} PropertyValue\n *   Primitive value or list value.\n */\n\n/**\n * @typedef {Element | Root} Result\n *   Result from a `h` (or `s`) call.\n */\n\n/**\n * @typedef {number | string} StyleValue\n *   Value for a CSS style field.\n */\n\n/**\n * @typedef {Record<string, StyleValue>} Style\n *   Supported value of a `style` prop.\n */\n\nimport {parse as parseCommas} from 'comma-separated-tokens'\nimport {parseSelector} from 'hast-util-parse-selector'\nimport {find, normalize} from 'property-information'\nimport {parse as parseSpaces} from 'space-separated-tokens'\n\n/**\n * @param {Schema} schema\n *   Schema to use.\n * @param {string} defaultTagName\n *   Default tag name.\n * @param {ReadonlyArray<string> | undefined} [caseSensitive]\n *   Case-sensitive tag names (default: `undefined`).\n * @returns\n *   `h`.\n */\nexport function createH(schema, defaultTagName, caseSensitive) {\n  const adjust = caseSensitive ? createAdjustMap(caseSensitive) : undefined\n\n  /**\n   * Hyperscript compatible DSL for creating virtual hast trees.\n   *\n   * @overload\n   * @param {null | undefined} [selector]\n   * @param {...Child} children\n   * @returns {Root}\n   *\n   * @overload\n   * @param {string} selector\n   * @param {Properties} properties\n   * @param {...Child} children\n   * @returns {Element}\n   *\n   * @overload\n   * @param {string} selector\n   * @param {...Child} children\n   * @returns {Element}\n   *\n   * @param {string | null | undefined} [selector]\n   *   Selector.\n   * @param {Child | Properties | null | undefined} [properties]\n   *   Properties (or first child) (default: `undefined`).\n   * @param {...Child} children\n   *   Children.\n   * @returns {Result}\n   *   Result.\n   */\n  function h(selector, properties, ...children) {\n    /** @type {Result} */\n    let node\n\n    if (selector === null || selector === undefined) {\n      node = {type: 'root', children: []}\n      // Properties are not supported for roots.\n      const child = /** @type {Child} */ (properties)\n      children.unshift(child)\n    } else {\n      node = parseSelector(selector, defaultTagName)\n      // Normalize the name.\n      const lower = node.tagName.toLowerCase()\n      const adjusted = adjust ? adjust.get(lower) : undefined\n      node.tagName = adjusted || lower\n\n      // Handle properties.\n      if (isChild(properties)) {\n        children.unshift(properties)\n      } else {\n        for (const [key, value] of Object.entries(properties)) {\n          addProperty(schema, node.properties, key, value)\n        }\n      }\n    }\n\n    // Handle children.\n    for (const child of children) {\n      addChild(node.children, child)\n    }\n\n    if (node.type === 'element' && node.tagName === 'template') {\n      node.content = {type: 'root', children: node.children}\n      node.children = []\n    }\n\n    return node\n  }\n\n  return h\n}\n\n/**\n * Check if something is properties or a child.\n *\n * @param {Child | Properties} value\n *   Value to check.\n * @returns {value is Child}\n *   Whether `value` is definitely a child.\n */\nfunction isChild(value) {\n  // Never properties if not an object.\n  if (value === null || typeof value !== 'object' || Array.isArray(value)) {\n    return true\n  }\n\n  // Never node without `type`; that’s the main discriminator.\n  if (typeof value.type !== 'string') return false\n\n  // Slower check: never property value if object or array with\n  // non-number/strings.\n  const record = /** @type {Record<string, unknown>} */ (value)\n  const keys = Object.keys(value)\n\n  for (const key of keys) {\n    const value = record[key]\n\n    if (value && typeof value === 'object') {\n      if (!Array.isArray(value)) return true\n\n      const list = /** @type {ReadonlyArray<unknown>} */ (value)\n\n      for (const item of list) {\n        if (typeof item !== 'number' && typeof item !== 'string') {\n          return true\n        }\n      }\n    }\n  }\n\n  // Also see empty `children` as a node.\n  if ('children' in value && Array.isArray(value.children)) {\n    return true\n  }\n\n  // Default to properties, someone can always pass an empty object,\n  // put `data: {}` in a node,\n  // or wrap it in an array.\n  return false\n}\n\n/**\n * @param {Schema} schema\n *   Schema.\n * @param {Properties} properties\n *   Properties object.\n * @param {string} key\n *   Property name.\n * @param {PropertyValue | Style} value\n *   Property value.\n * @returns {undefined}\n *   Nothing.\n */\nfunction addProperty(schema, properties, key, value) {\n  const info = find(schema, key)\n  /** @type {PropertyValue} */\n  let result\n\n  // Ignore nullish and NaN values.\n  if (value === null || value === undefined) return\n\n  if (typeof value === 'number') {\n    // Ignore NaN.\n    if (Number.isNaN(value)) return\n\n    result = value\n  }\n  // Booleans.\n  else if (typeof value === 'boolean') {\n    result = value\n  }\n  // Handle list values.\n  else if (typeof value === 'string') {\n    if (info.spaceSeparated) {\n      result = parseSpaces(value)\n    } else if (info.commaSeparated) {\n      result = parseCommas(value)\n    } else if (info.commaOrSpaceSeparated) {\n      result = parseSpaces(parseCommas(value).join(' '))\n    } else {\n      result = parsePrimitive(info, info.property, value)\n    }\n  } else if (Array.isArray(value)) {\n    result = [...value]\n  } else {\n    result = info.property === 'style' ? style(value) : String(value)\n  }\n\n  if (Array.isArray(result)) {\n    /** @type {Array<number | string>} */\n    const finalResult = []\n\n    for (const item of result) {\n      // Assume no booleans in array.\n      finalResult.push(\n        /** @type {number | string} */ (\n          parsePrimitive(info, info.property, item)\n        )\n      )\n    }\n\n    result = finalResult\n  }\n\n  // Class names (which can be added both on the `selector` and here).\n  if (info.property === 'className' && Array.isArray(properties.className)) {\n    // Assume no booleans in `className`.\n    result = properties.className.concat(\n      /** @type {Array<number | string> | number | string} */ (result)\n    )\n  }\n\n  properties[info.property] = result\n}\n\n/**\n * @param {Array<RootContent>} nodes\n *   Children.\n * @param {Child} value\n *   Child.\n * @returns {undefined}\n *   Nothing.\n */\nfunction addChild(nodes, value) {\n  if (value === null || value === undefined) {\n    // Empty.\n  } else if (typeof value === 'number' || typeof value === 'string') {\n    nodes.push({type: 'text', value: String(value)})\n  } else if (Array.isArray(value)) {\n    for (const child of value) {\n      addChild(nodes, child)\n    }\n  } else if (typeof value === 'object' && 'type' in value) {\n    if (value.type === 'root') {\n      addChild(nodes, value.children)\n    } else {\n      nodes.push(value)\n    }\n  } else {\n    throw new Error('Expected node, nodes, or string, got `' + value + '`')\n  }\n}\n\n/**\n * Parse a single primitives.\n *\n * @param {Info} info\n *   Property information.\n * @param {string} name\n *   Property name.\n * @param {PrimitiveValue} value\n *   Property value.\n * @returns {PrimitiveValue}\n *   Property value.\n */\nfunction parsePrimitive(info, name, value) {\n  if (typeof value === 'string') {\n    if (info.number && value && !Number.isNaN(Number(value))) {\n      return Number(value)\n    }\n\n    if (\n      (info.boolean || info.overloadedBoolean) &&\n      (value === '' || normalize(value) === normalize(name))\n    ) {\n      return true\n    }\n  }\n\n  return value\n}\n\n/**\n * Serialize a `style` object as a string.\n *\n * @param {Style} styles\n *   Style object.\n * @returns {string}\n *   CSS string.\n */\nfunction style(styles) {\n  /** @type {Array<string>} */\n  const result = []\n\n  for (const [key, value] of Object.entries(styles)) {\n    result.push([key, value].join(': '))\n  }\n\n  return result.join('; ')\n}\n\n/**\n * Create a map to adjust casing.\n *\n * @param {ReadonlyArray<string>} values\n *   List of properly cased keys.\n * @returns {Map<string, string>}\n *   Map of lowercase keys to uppercase keys.\n */\nfunction createAdjustMap(values) {\n  /** @type {Map<string, string>} */\n  const result = new Map()\n\n  for (const value of values) {\n    result.set(value.toLowerCase(), value)\n  }\n\n  return result\n}\n","/**\n * List of case-sensitive SVG tag names.\n *\n * @type {ReadonlyArray<string>}\n */\nexport const svgCaseSensitiveTagNames = [\n  'altGlyph',\n  'altGlyphDef',\n  'altGlyphItem',\n  'animateColor',\n  'animateMotion',\n  'animateTransform',\n  'clipPath',\n  'feBlend',\n  'feColorMatrix',\n  'feComponentTransfer',\n  'feComposite',\n  'feConvolveMatrix',\n  'feDiffuseLighting',\n  'feDisplacementMap',\n  'feDistantLight',\n  'feDropShadow',\n  'feFlood',\n  'feFuncA',\n  'feFuncB',\n  'feFuncG',\n  'feFuncR',\n  'feGaussianBlur',\n  'feImage',\n  'feMerge',\n  'feMergeNode',\n  'feMorphology',\n  'feOffset',\n  'fePointLight',\n  'feSpecularLighting',\n  'feSpotLight',\n  'feTile',\n  'feTurbulence',\n  'foreignObject',\n  'glyphRef',\n  'linearGradient',\n  'radialGradient',\n  'solidColor',\n  'textArea',\n  'textPath'\n]\n","// Register the JSX namespace on `h`.\n/**\n * @typedef {import('./jsx-classic.js').Element} h.JSX.Element\n * @typedef {import('./jsx-classic.js').ElementChildrenAttribute} h.JSX.ElementChildrenAttribute\n * @typedef {import('./jsx-classic.js').IntrinsicAttributes} h.JSX.IntrinsicAttributes\n * @typedef {import('./jsx-classic.js').IntrinsicElements} h.JSX.IntrinsicElements\n */\n\n// Register the JSX namespace on `s`.\n/**\n * @typedef {import('./jsx-classic.js').Element} s.JSX.Element\n * @typedef {import('./jsx-classic.js').ElementChildrenAttribute} s.JSX.ElementChildrenAttribute\n * @typedef {import('./jsx-classic.js').IntrinsicAttributes} s.JSX.IntrinsicAttributes\n * @typedef {import('./jsx-classic.js').IntrinsicElements} s.JSX.IntrinsicElements\n */\n\nimport {html, svg} from 'property-information'\nimport {createH} from './create-h.js'\nimport {svgCaseSensitiveTagNames} from './svg-case-sensitive-tag-names.js'\n\n// Note: this explicit type is needed, otherwise TS creates broken types.\n/** @type {ReturnType<createH>} */\nexport const h = createH(html, 'div')\n\n// Note: this explicit type is needed, otherwise TS creates broken types.\n/** @type {ReturnType<createH>} */\nexport const s = createH(svg, 'g', svgCaseSensitiveTagNames)\n","/**\n * Map of web namespaces.\n *\n * @type {Record<string, string>}\n */\nexport const webNamespaces = {\n  html: 'http://www.w3.org/1999/xhtml',\n  mathml: 'http://www.w3.org/1998/Math/MathML',\n  svg: 'http://www.w3.org/2000/svg',\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","/**\n * @import {\n *   Comment as HastComment,\n *   Doctype as HastDoctype,\n *   Element as HastElement,\n *   Nodes as HastNodes,\n *   RootContent as HastRootContent,\n *   Root as HastRoot,\n *   Text as HastText,\n * } from 'hast'\n */\n\n/**\n * @callback AfterTransform\n *   Callback called when each node is transformed.\n * @param {Node} domNode\n *   DOM node that was handled.\n * @param {HastNodes} hastNode\n *   Corresponding hast node.\n * @returns {undefined | void}\n *   Nothing.\n *\n *   Note: `void` included until TS infers `undefined` nicely.\n *\n * @typedef Options\n *   Configuration.\n * @property {AfterTransform | null | undefined} [afterTransform]\n *   Callback called when each node is transformed (optional).\n */\n\nimport {h, s} from 'hastscript'\nimport {webNamespaces} from 'web-namespaces'\n\n/**\n * Transform a DOM tree to a hast tree.\n *\n * @param {Node} tree\n *   DOM tree to transform.\n * @param {Options | null | undefined} [options]\n *   Configuration (optional).\n * @returns {HastNodes}\n *   Equivalent hast node.\n */\nexport function fromDom(tree, options) {\n  return transform(tree, options || {}) || {type: 'root', children: []}\n}\n\n/**\n * @param {Node} node\n *   DOM node to transform.\n * @param {Options} options\n *   Configuration.\n * @returns {HastNodes | undefined}\n *   Equivalent hast node.\n *\n *   Note that certain legacy DOM nodes (i.e., Attr nodes (2),  CDATA, processing instructions)\n */\nfunction transform(node, options) {\n  const transformed = one(node, options)\n  if (transformed && options.afterTransform)\n    options.afterTransform(node, transformed)\n  return transformed\n}\n\n/**\n * @param {Node} node\n *   DOM node to transform.\n * @param {Options} options\n *   Configuration.\n * @returns {HastNodes | undefined}\n *   Equivalent hast node.\n */\nfunction one(node, options) {\n  switch (node.nodeType) {\n    case 1 /* Element */: {\n      const domNode = /** @type {Element} */ (node)\n      return element(domNode, options)\n    }\n\n    // Ignore: Attr (2).\n\n    case 3 /* Text */: {\n      const domNode = /** @type {Text} */ (node)\n      return text(domNode)\n    }\n\n    // Ignore: CDATA (4).\n    // Removed: Entity reference (5)\n    // Removed: Entity (6)\n    // Ignore: Processing instruction (7).\n\n    case 8 /* Comment */: {\n      const domNode = /** @type {Comment} */ (node)\n      return comment(domNode)\n    }\n\n    case 9 /* Document */: {\n      const domNode = /** @type {Document} */ (node)\n      return root(domNode, options)\n    }\n\n    case 10 /* Document type */: {\n      return doctype()\n    }\n\n    case 11 /* Document fragment */: {\n      const domNode = /** @type {DocumentFragment} */ (node)\n      return root(domNode, options)\n    }\n\n    default: {\n      return undefined\n    }\n  }\n}\n\n/**\n * Transform a document.\n *\n * @param {Document | DocumentFragment} node\n *   DOM node to transform.\n * @param {Options} options\n *   Configuration.\n * @returns {HastRoot}\n *   Equivalent hast node.\n */\nfunction root(node, options) {\n  return {type: 'root', children: all(node, options)}\n}\n\n/**\n * Transform a doctype.\n *\n * @returns {HastDoctype}\n *   Equivalent hast node.\n */\nfunction doctype() {\n  return {type: 'doctype'}\n}\n\n/**\n * Transform a text.\n *\n * @param {Text} node\n *   DOM node to transform.\n * @returns {HastText}\n *   Equivalent hast node.\n */\nfunction text(node) {\n  return {type: 'text', value: node.nodeValue || ''}\n}\n\n/**\n * Transform a comment.\n *\n * @param {Comment} node\n *   DOM node to transform.\n * @returns {HastComment}\n *   Equivalent hast node.\n */\nfunction comment(node) {\n  return {type: 'comment', value: node.nodeValue || ''}\n}\n\n/**\n * Transform an element.\n *\n * @param {Element} node\n *   DOM node to transform.\n * @param {Options} options\n *   Configuration.\n * @returns {HastElement}\n *   Equivalent hast node.\n */\nfunction element(node, options) {\n  const space = node.namespaceURI\n  const x = space === webNamespaces.svg ? s : h\n  const tagName =\n    space === webNamespaces.html ? node.tagName.toLowerCase() : node.tagName\n  /** @type {DocumentFragment | Element} */\n  const content =\n    // @ts-expect-error: DOM types are wrong, content can exist.\n    space === webNamespaces.html && tagName === 'template' ? node.content : node\n  const attributes = node.getAttributeNames()\n  /** @type {Record<string, string>} */\n  const properties = {}\n  let index = -1\n\n  while (++index < attributes.length) {\n    properties[attributes[index]] = node.getAttribute(attributes[index]) || ''\n  }\n\n  return x(tagName, properties, all(content, options))\n}\n\n/**\n * Transform child nodes in a parent.\n *\n * @param {Document | DocumentFragment | Element} node\n *   DOM node to transform.\n * @param {Options} options\n *   Configuration.\n * @returns {Array<HastRootContent>}\n *   Equivalent hast nodes.\n */\nfunction all(node, options) {\n  const nodes = node.childNodes\n  /** @type {Array<HastRootContent>} */\n  const children = []\n  let index = -1\n\n  while (++index < nodes.length) {\n    const child = transform(nodes[index], options)\n\n    if (child !== undefined) {\n      // @ts-expect-error Assume no document inside document.\n      children.push(child)\n    }\n  }\n\n  return children\n}\n","/**\n * @typedef {import('hast').Root} Root\n *\n * @typedef {typeof import('./index.js').fromHtmlIsomorphic} FromHtmlIsomorphic\n */\n\nimport {fromDom} from 'hast-util-from-dom'\n\nconst parser = new DOMParser()\n\n/** @type {FromHtmlIsomorphic} */\nexport function fromHtmlIsomorphic(value, options) {\n  const node = options?.fragment\n    ? parseFragment(value)\n    : parser.parseFromString(value, 'text/html')\n\n  return /** @type {Root} */ (fromDom(node))\n}\n\n/**\n * Parse as a fragment.\n *\n * @param {string} value\n * @returns {DocumentFragment}\n */\nfunction parseFragment(value) {\n  const template = document.createElement('template')\n  template.innerHTML = value\n  return template.content\n}\n","/**\n * @typedef {import('unist').Node} UnistNode\n * @typedef {import('unist').Parent} UnistParent\n */\n\n/**\n * @typedef {Exclude<import('unist-util-is').Test, undefined> | undefined} Test\n *   Test from `unist-util-is`.\n *\n *   Note: we have remove and add `undefined`, because otherwise when generating\n *   automatic `.d.ts` files, TS tries to flatten paths from a local perspective,\n *   which doesn’t work when publishing on npm.\n */\n\n/**\n * @typedef {(\n *   Fn extends (value: any) => value is infer Thing\n *   ? Thing\n *   : Fallback\n * )} Predicate\n *   Get the value of a type guard `Fn`.\n * @template Fn\n *   Value; typically function that is a type guard (such as `(x): x is Y`).\n * @template Fallback\n *   Value to yield if `Fn` is not a type guard.\n */\n\n/**\n * @typedef {(\n *   Check extends null | undefined // No test.\n *   ? Value\n *   : Value extends {type: Check} // String (type) test.\n *   ? Value\n *   : Value extends Check // Partial test.\n *   ? Value\n *   : Check extends Function // Function test.\n *   ? Predicate<Check, Value> extends Value\n *     ? Predicate<Check, Value>\n *     : never\n *   : never // Some other test?\n * )} MatchesOne\n *   Check whether a node matches a primitive check in the type system.\n * @template Value\n *   Value; typically unist `Node`.\n * @template Check\n *   Value; typically `unist-util-is`-compatible test, but not arrays.\n */\n\n/**\n * @typedef {(\n *   Check extends Array<any>\n *   ? MatchesOne<Value, Check[keyof Check]>\n *   : MatchesOne<Value, Check>\n * )} Matches\n *   Check whether a node matches a check in the type system.\n * @template Value\n *   Value; typically unist `Node`.\n * @template Check\n *   Value; typically `unist-util-is`-compatible test.\n */\n\n/**\n * @typedef {(\n *   Kind extends {children: Array<infer Child>}\n *   ? Child\n *   : never\n * )} Child\n *   Collect nodes that can be parents of `Child`.\n * @template {UnistNode} Kind\n *   All node types.\n */\n\nimport {convert} from 'unist-util-is'\n\n/**\n * Find the first node in `parent` after another `node` or after an index,\n * that passes `test`.\n *\n * @param parent\n *   Parent node.\n * @param index\n *   Child node or index.\n * @param [test=undefined]\n *   Test for child to look for (optional).\n * @returns\n *   A child (matching `test`, if given) or `undefined`.\n */\nexport const findAfter =\n  // Note: overloads like this are needed to support optional generics.\n  /**\n   * @type {(\n   *   (<Kind extends UnistParent, Check extends Test>(parent: Kind, index: Child<Kind> | number, test: Check) => Matches<Child<Kind>, Check> | undefined) &\n   *   (<Kind extends UnistParent>(parent: Kind, index: Child<Kind> | number, test?: null | undefined) => Child<Kind> | undefined)\n   * )}\n   */\n  (\n    /**\n     * @param {UnistParent} parent\n     * @param {UnistNode | number} index\n     * @param {Test} [test]\n     * @returns {UnistNode | undefined}\n     */\n    function (parent, index, test) {\n      const is = convert(test)\n\n      if (!parent || !parent.type || !parent.children) {\n        throw new Error('Expected parent node')\n      }\n\n      if (typeof index === 'number') {\n        if (index < 0 || index === Number.POSITIVE_INFINITY) {\n          throw new Error('Expected positive finite number as index')\n        }\n      } else {\n        index = parent.children.indexOf(index)\n\n        if (index < 0) {\n          throw new Error('Expected child node or index')\n        }\n      }\n\n      while (++index < parent.children.length) {\n        if (is(parent.children[index], index, parent)) {\n          return parent.children[index]\n        }\n      }\n\n      return undefined\n    }\n  )\n","/**\n * @typedef {import('hast').Element} Element\n * @typedef {import('hast').Parents} Parents\n */\n\n/**\n * @template Fn\n * @template Fallback\n * @typedef {Fn extends (value: any) => value is infer Thing ? Thing : Fallback} Predicate\n */\n\n/**\n * @callback Check\n *   Check that an arbitrary value is an element.\n * @param {unknown} this\n *   Context object (`this`) to call `test` with\n * @param {unknown} [element]\n *   Anything (typically a node).\n * @param {number | null | undefined} [index]\n *   Position of `element` in its parent.\n * @param {Parents | null | undefined} [parent]\n *   Parent of `element`.\n * @returns {boolean}\n *   Whether this is an element and passes a test.\n *\n * @typedef {Array<TestFunction | string> | TestFunction | string | null | undefined} Test\n *   Check for an arbitrary element.\n *\n *   * when `string`, checks that the element has that tag name\n *   * when `function`, see `TestFunction`\n *   * when `Array`, checks if one of the subtests pass\n *\n * @callback TestFunction\n *   Check if an element passes a test.\n * @param {unknown} this\n *   The given context.\n * @param {Element} element\n *   An element.\n * @param {number | undefined} [index]\n *   Position of `element` in its parent.\n * @param {Parents | undefined} [parent]\n *   Parent of `element`.\n * @returns {boolean | undefined | void}\n *   Whether this element passes the test.\n *\n *   Note: `void` is included until TS sees no return as `undefined`.\n */\n\n/**\n * Check if `element` is an `Element` and whether it passes the given test.\n *\n * @param element\n *   Thing to check, typically `element`.\n * @param test\n *   Check for a specific element.\n * @param index\n *   Position of `element` in its parent.\n * @param parent\n *   Parent of `element`.\n * @param context\n *   Context object (`this`) to call `test` with.\n * @returns\n *   Whether `element` is an `Element` and passes a test.\n * @throws\n *   When an incorrect `test`, `index`, or `parent` is given; there is no error\n *   thrown when `element` is not a node or not an element.\n */\nexport const isElement =\n  // Note: overloads in JSDoc can’t yet use different `@template`s.\n  /**\n   * @type {(\n   *   (<Condition extends TestFunction>(element: unknown, test: Condition, index?: number | null | undefined, parent?: Parents | null | undefined, context?: unknown) => element is Element & Predicate<Condition, Element>) &\n   *   (<Condition extends string>(element: unknown, test: Condition, index?: number | null | undefined, parent?: Parents | null | undefined, context?: unknown) => element is Element & {tagName: Condition}) &\n   *   ((element?: null | undefined) => false) &\n   *   ((element: unknown, test?: null | undefined, index?: number | null | undefined, parent?: Parents | null | undefined, context?: unknown) => element is Element) &\n   *   ((element: unknown, test?: Test, index?: number | null | undefined, parent?: Parents | null | undefined, context?: unknown) => boolean)\n   * )}\n   */\n  (\n    /**\n     * @param {unknown} [element]\n     * @param {Test | undefined} [test]\n     * @param {number | null | undefined} [index]\n     * @param {Parents | null | undefined} [parent]\n     * @param {unknown} [context]\n     * @returns {boolean}\n     */\n    // eslint-disable-next-line max-params\n    function (element, test, index, parent, context) {\n      const check = convertElement(test)\n\n      if (\n        index !== null &&\n        index !== undefined &&\n        (typeof index !== 'number' ||\n          index < 0 ||\n          index === Number.POSITIVE_INFINITY)\n      ) {\n        throw new Error('Expected positive finite `index`')\n      }\n\n      if (\n        parent !== null &&\n        parent !== undefined &&\n        (!parent.type || !parent.children)\n      ) {\n        throw new Error('Expected valid `parent`')\n      }\n\n      if (\n        (index === null || index === undefined) !==\n        (parent === null || parent === undefined)\n      ) {\n        throw new Error('Expected both `index` and `parent`')\n      }\n\n      return looksLikeAnElement(element)\n        ? check.call(context, element, index, parent)\n        : false\n    }\n  )\n\n/**\n * Generate a check from a test.\n *\n * Useful if you’re going to test many nodes, for example when creating a\n * utility where something else passes a compatible test.\n *\n * The created function is a bit faster because it expects valid input only:\n * an `element`, `index`, and `parent`.\n *\n * @param test\n *   A test for a specific element.\n * @returns\n *   A check.\n */\nexport const convertElement =\n  // Note: overloads in JSDoc can’t yet use different `@template`s.\n  /**\n   * @type {(\n   *   (<Condition extends TestFunction>(test: Condition) => (element: unknown, index?: number | null | undefined, parent?: Parents | null | undefined, context?: unknown) => element is Element & Predicate<Condition, Element>) &\n   *   (<Condition extends string>(test: Condition) => (element: unknown, index?: number | null | undefined, parent?: Parents | null | undefined, context?: unknown) => element is Element & {tagName: Condition}) &\n   *   ((test?: null | undefined) => (element?: unknown, index?: number | null | undefined, parent?: Parents | null | undefined, context?: unknown) => element is Element) &\n   *   ((test?: Test) => Check)\n   * )}\n   */\n  (\n    /**\n     * @param {Test | null | undefined} [test]\n     * @returns {Check}\n     */\n    function (test) {\n      if (test === null || test === undefined) {\n        return element\n      }\n\n      if (typeof test === 'string') {\n        return tagNameFactory(test)\n      }\n\n      // Assume array.\n      if (typeof test === 'object') {\n        return anyFactory(test)\n      }\n\n      if (typeof test === 'function') {\n        return castFactory(test)\n      }\n\n      throw new Error('Expected function, string, or array as `test`')\n    }\n  )\n\n/**\n * Handle multiple tests.\n *\n * @param {Array<TestFunction | string>} tests\n * @returns {Check}\n */\nfunction anyFactory(tests) {\n  /** @type {Array<Check>} */\n  const checks = []\n  let index = -1\n\n  while (++index < tests.length) {\n    checks[index] = convertElement(tests[index])\n  }\n\n  return castFactory(any)\n\n  /**\n   * @this {unknown}\n   * @type {TestFunction}\n   */\n  function any(...parameters) {\n    let index = -1\n\n    while (++index < checks.length) {\n      if (checks[index].apply(this, parameters)) return true\n    }\n\n    return false\n  }\n}\n\n/**\n * Turn a string into a test for an element with a certain type.\n *\n * @param {string} check\n * @returns {Check}\n */\nfunction tagNameFactory(check) {\n  return castFactory(tagName)\n\n  /**\n   * @param {Element} element\n   * @returns {boolean}\n   */\n  function tagName(element) {\n    return element.tagName === check\n  }\n}\n\n/**\n * Turn a custom test into a test for an element that passes that test.\n *\n * @param {TestFunction} testFunction\n * @returns {Check}\n */\nfunction castFactory(testFunction) {\n  return check\n\n  /**\n   * @this {unknown}\n   * @type {Check}\n   */\n  function check(value, index, parent) {\n    return Boolean(\n      looksLikeAnElement(value) &&\n        testFunction.call(\n          this,\n          value,\n          typeof index === 'number' ? index : undefined,\n          parent || undefined\n        )\n    )\n  }\n}\n\n/**\n * Make sure something is an element.\n *\n * @param {unknown} element\n * @returns {element is Element}\n */\nfunction element(element) {\n  return Boolean(\n    element &&\n      typeof element === 'object' &&\n      'type' in element &&\n      element.type === 'element' &&\n      'tagName' in element &&\n      typeof element.tagName === 'string'\n  )\n}\n\n/**\n * @param {unknown} value\n * @returns {value is Element}\n */\nfunction looksLikeAnElement(value) {\n  return (\n    value !== null &&\n    typeof value === 'object' &&\n    'type' in value &&\n    'tagName' in value\n  )\n}\n","/**\n * @typedef {import('hast').Comment} Comment\n * @typedef {import('hast').Element} Element\n * @typedef {import('hast').Nodes} Nodes\n * @typedef {import('hast').Parents} Parents\n * @typedef {import('hast').Text} Text\n * @typedef {import('hast-util-is-element').TestFunction} TestFunction\n */\n\n/**\n * @typedef {'normal' | 'nowrap' | 'pre' | 'pre-wrap'} Whitespace\n *   Valid and useful whitespace values (from CSS).\n *\n * @typedef {0 | 1 | 2} BreakNumber\n *   Specific break:\n *\n *   *   `0` — space\n *   *   `1` — line ending\n *   *   `2` — blank line\n *\n * @typedef {'\\n'} BreakForce\n *   Forced break.\n *\n * @typedef {boolean} BreakValue\n *   Whether there was a break.\n *\n * @typedef {BreakNumber | BreakValue | undefined} BreakBefore\n *   Any value for a break before.\n *\n * @typedef {BreakForce | BreakNumber | BreakValue | undefined} BreakAfter\n *   Any value for a break after.\n *\n * @typedef CollectionInfo\n *   Info on current collection.\n * @property {BreakAfter} breakAfter\n *   Whether there was a break after.\n * @property {BreakBefore} breakBefore\n *   Whether there was a break before.\n * @property {Whitespace} whitespace\n *   Current whitespace setting.\n *\n * @typedef Options\n *   Configuration.\n * @property {Whitespace | null | undefined} [whitespace='normal']\n *   Initial CSS whitespace setting to use (default: `'normal'`).\n */\n\nimport {findAfter} from 'unist-util-find-after'\nimport {convertElement} from 'hast-util-is-element'\n\nconst searchLineFeeds = /\\n/g\nconst searchTabOrSpaces = /[\\t ]+/g\n\nconst br = convertElement('br')\nconst cell = convertElement(isCell)\nconst p = convertElement('p')\nconst row = convertElement('tr')\n\n// Note that we don’t need to include void elements here as they don’t have text.\n// See: <https://github.com/wooorm/html-void-elements>\nconst notRendered = convertElement([\n  // List from: <https://html.spec.whatwg.org/multipage/rendering.html#hidden-elements>\n  'datalist',\n  'head',\n  'noembed',\n  'noframes',\n  'noscript', // Act as if we support scripting.\n  'rp',\n  'script',\n  'style',\n  'template',\n  'title',\n  // Hidden attribute.\n  hidden,\n  // From: <https://html.spec.whatwg.org/multipage/rendering.html#flow-content-3>\n  closedDialog\n])\n\n// See: <https://html.spec.whatwg.org/multipage/rendering.html#the-css-user-agent-style-sheet-and-presentational-hints>\nconst blockOrCaption = convertElement([\n  'address', // Flow content\n  'article', // Sections and headings\n  'aside', // Sections and headings\n  'blockquote', // Flow content\n  'body', // Page\n  'caption', // `table-caption`\n  'center', // Flow content (legacy)\n  'dd', // Lists\n  'dialog', // Flow content\n  'dir', // Lists (legacy)\n  'dl', // Lists\n  'dt', // Lists\n  'div', // Flow content\n  'figure', // Flow content\n  'figcaption', // Flow content\n  'footer', // Flow content\n  'form,', // Flow content\n  'h1', // Sections and headings\n  'h2', // Sections and headings\n  'h3', // Sections and headings\n  'h4', // Sections and headings\n  'h5', // Sections and headings\n  'h6', // Sections and headings\n  'header', // Flow content\n  'hgroup', // Sections and headings\n  'hr', // Flow content\n  'html', // Page\n  'legend', // Flow content\n  'li', // Lists (as `display: list-item`)\n  'listing', // Flow content (legacy)\n  'main', // Flow content\n  'menu', // Lists\n  'nav', // Sections and headings\n  'ol', // Lists\n  'p', // Flow content\n  'plaintext', // Flow content (legacy)\n  'pre', // Flow content\n  'section', // Sections and headings\n  'ul', // Lists\n  'xmp' // Flow content (legacy)\n])\n\n/**\n * Get the plain-text value of a node.\n *\n * ###### Algorithm\n *\n * *   if `tree` is a comment, returns its `value`\n * *   if `tree` is a text, applies normal whitespace collapsing to its\n *     `value`, as defined by the CSS Text spec\n * *   if `tree` is a root or element, applies an algorithm similar to the\n *     `innerText` getter as defined by HTML\n *\n * ###### Notes\n *\n * > 👉 **Note**: the algorithm acts as if `tree` is being rendered, and as if\n * > we’re a CSS-supporting user agent, with scripting enabled.\n *\n * *   if `tree` is an element that is not displayed (such as a `head`), we’ll\n *     still use the `innerText` algorithm instead of switching to `textContent`\n * *   if descendants of `tree` are elements that are not displayed, they are\n *     ignored\n * *   CSS is not considered, except for the default user agent style sheet\n * *   a line feed is collapsed instead of ignored in cases where Fullwidth, Wide,\n *     or Halfwidth East Asian Width characters are used, the same goes for a case\n *     with Chinese, Japanese, or Yi writing systems\n * *   replaced elements (such as `audio`) are treated like non-replaced elements\n *\n * @param {Nodes} tree\n *   Tree to turn into text.\n * @param {Readonly<Options> | null | undefined} [options]\n *   Configuration (optional).\n * @returns {string}\n *   Serialized `tree`.\n */\nexport function toText(tree, options) {\n  const options_ = options || {}\n  const children = 'children' in tree ? tree.children : []\n  const block = blockOrCaption(tree)\n  const whitespace = inferWhitespace(tree, {\n    whitespace: options_.whitespace || 'normal',\n    breakBefore: false,\n    breakAfter: false\n  })\n\n  /** @type {Array<BreakNumber | string>} */\n  const results = []\n\n  // Treat `text` and `comment` as having normal white-space.\n  // This deviates from the spec as in the DOM the node’s `.data` has to be\n  // returned.\n  // If you want that behavior use `hast-util-to-string`.\n  // All other nodes are later handled as if they are `element`s (so the\n  // algorithm also works on a `root`).\n  // Nodes without children are treated as a void element, so `doctype` is thus\n  // ignored.\n  if (tree.type === 'text' || tree.type === 'comment') {\n    results.push(\n      ...collectText(tree, {\n        whitespace,\n        breakBefore: true,\n        breakAfter: true\n      })\n    )\n  }\n\n  // 1.  If this element is not being rendered, or if the user agent is a\n  //     non-CSS user agent, then return the same value as the textContent IDL\n  //     attribute on this element.\n  //\n  //     Note: we’re not supporting stylesheets so we’re acting as if the node\n  //     is rendered.\n  //\n  //     If you want that behavior use `hast-util-to-string`.\n  //     Important: we’ll have to account for this later though.\n\n  // 2.  Let results be a new empty list.\n  let index = -1\n\n  // 3.  For each child node node of this element:\n  while (++index < children.length) {\n    // 3.1. Let current be the list resulting in running the inner text\n    //      collection steps with node.\n    //      Each item in results will either be a JavaScript string or a\n    //      positive integer (a required line break count).\n    // 3.2. For each item item in current, append item to results.\n    results.push(\n      ...renderedTextCollection(\n        children[index],\n        // @ts-expect-error: `tree` is a parent if we’re here.\n        tree,\n        {\n          whitespace,\n          breakBefore: index ? undefined : block,\n          breakAfter:\n            index < children.length - 1 ? br(children[index + 1]) : block\n        }\n      )\n    )\n  }\n\n  // 4.  Remove any items from results that are the empty string.\n  // 5.  Remove any runs of consecutive required line break count items at the\n  //     start or end of results.\n  // 6.  Replace each remaining run of consecutive required line break count\n  //     items with a string consisting of as many U+000A LINE FEED (LF)\n  //     characters as the maximum of the values in the required line break\n  //     count items.\n  /** @type {Array<string>} */\n  const result = []\n  /** @type {number | undefined} */\n  let count\n\n  index = -1\n\n  while (++index < results.length) {\n    const value = results[index]\n\n    if (typeof value === 'number') {\n      if (count !== undefined && value > count) count = value\n    } else if (value) {\n      if (count !== undefined && count > -1) {\n        result.push('\\n'.repeat(count) || ' ')\n      }\n\n      count = -1\n      result.push(value)\n    }\n  }\n\n  // 7.  Return the concatenation of the string items in results.\n  return result.join('')\n}\n\n/**\n * <https://html.spec.whatwg.org/multipage/dom.html#rendered-text-collection-steps>\n *\n * @param {Nodes} node\n * @param {Parents} parent\n * @param {CollectionInfo} info\n * @returns {Array<BreakNumber | string>}\n */\nfunction renderedTextCollection(node, parent, info) {\n  if (node.type === 'element') {\n    return collectElement(node, parent, info)\n  }\n\n  if (node.type === 'text') {\n    return info.whitespace === 'normal'\n      ? collectText(node, info)\n      : collectPreText(node)\n  }\n\n  return []\n}\n\n/**\n * Collect an element.\n *\n * @param {Element} node\n *   Element node.\n * @param {Parents} parent\n * @param {CollectionInfo} info\n *   Info on current collection.\n * @returns {Array<BreakNumber | string>}\n */\nfunction collectElement(node, parent, info) {\n  // First we infer the `white-space` property.\n  const whitespace = inferWhitespace(node, info)\n  const children = node.children || []\n  let index = -1\n  /** @type {Array<BreakNumber | string>} */\n  let items = []\n\n  // We’re ignoring point 3, and exiting without any content here, because we\n  // deviated from the spec in `toText` at step 3.\n  if (notRendered(node)) {\n    return items\n  }\n\n  /** @type {BreakNumber | undefined} */\n  let prefix\n  /** @type {BreakForce | BreakNumber | undefined} */\n  let suffix\n  // Note: we first detect if there is going to be a break before or after the\n  // contents, as that changes the white-space handling.\n\n  // 2.  If node’s computed value of `visibility` is not `visible`, then return\n  //     items.\n  //\n  //     Note: Ignored, as everything is visible by default user agent styles.\n\n  // 3.  If node is not being rendered, then return items. [...]\n  //\n  //     Note: We already did this above.\n\n  // See `collectText` for step 4.\n\n  // 5.  If node is a `<br>` element, then append a string containing a single\n  //     U+000A LINE FEED (LF) character to items.\n  if (br(node)) {\n    suffix = '\\n'\n  }\n\n  // 7.  If node’s computed value of `display` is `table-row`, and node’s CSS\n  //     box is not the last `table-row` box of the nearest ancestor `table`\n  //     box, then append a string containing a single U+000A LINE FEED (LF)\n  //     character to items.\n  //\n  //     See: <https://html.spec.whatwg.org/multipage/rendering.html#tables-2>\n  //     Note: needs further investigation as this does not account for implicit\n  //     rows.\n  else if (\n    row(node) &&\n    // @ts-expect-error: something up with types of parents.\n    findAfter(parent, node, row)\n  ) {\n    suffix = '\\n'\n  }\n\n  // 8.  If node is a `<p>` element, then append 2 (a required line break count)\n  //     at the beginning and end of items.\n  else if (p(node)) {\n    prefix = 2\n    suffix = 2\n  }\n\n  // 9.  If node’s used value of `display` is block-level or `table-caption`,\n  //     then append 1 (a required line break count) at the beginning and end of\n  //     items.\n  else if (blockOrCaption(node)) {\n    prefix = 1\n    suffix = 1\n  }\n\n  // 1.  Let items be the result of running the inner text collection steps with\n  //     each child node of node in tree order, and then concatenating the\n  //     results to a single list.\n  while (++index < children.length) {\n    items = items.concat(\n      renderedTextCollection(children[index], node, {\n        whitespace,\n        breakBefore: index ? undefined : prefix,\n        breakAfter:\n          index < children.length - 1 ? br(children[index + 1]) : suffix\n      })\n    )\n  }\n\n  // 6.  If node’s computed value of `display` is `table-cell`, and node’s CSS\n  //     box is not the last `table-cell` box of its enclosing `table-row` box,\n  //     then append a string containing a single U+0009 CHARACTER TABULATION\n  //     (tab) character to items.\n  //\n  //     See: <https://html.spec.whatwg.org/multipage/rendering.html#tables-2>\n  if (\n    cell(node) &&\n    // @ts-expect-error: something up with types of parents.\n    findAfter(parent, node, cell)\n  ) {\n    items.push('\\t')\n  }\n\n  // Add the pre- and suffix.\n  if (prefix) items.unshift(prefix)\n  if (suffix) items.push(suffix)\n\n  return items\n}\n\n/**\n * 4.  If node is a Text node, then for each CSS text box produced by node,\n *     in content order, compute the text of the box after application of the\n *     CSS `white-space` processing rules and `text-transform` rules, set\n *     items to the list of the resulting strings, and return items.\n *     The CSS `white-space` processing rules are slightly modified:\n *     collapsible spaces at the end of lines are always collapsed, but they\n *     are only removed if the line is the last line of the block, or it ends\n *     with a br element.\n *     Soft hyphens should be preserved.\n *\n *     Note: See `collectText` and `collectPreText`.\n *     Note: we don’t deal with `text-transform`, no element has that by\n *     default.\n *\n * See: <https://drafts.csswg.org/css-text/#white-space-phase-1>\n *\n * @param {Comment | Text} node\n *   Text node.\n * @param {CollectionInfo} info\n *   Info on current collection.\n * @returns {Array<BreakNumber | string>}\n *   Result.\n */\nfunction collectText(node, info) {\n  const value = String(node.value)\n  /** @type {Array<string>} */\n  const lines = []\n  /** @type {Array<BreakNumber | string>} */\n  const result = []\n  let start = 0\n\n  while (start <= value.length) {\n    searchLineFeeds.lastIndex = start\n\n    const match = searchLineFeeds.exec(value)\n    const end = match && 'index' in match ? match.index : value.length\n\n    lines.push(\n      // Any sequence of collapsible spaces and tabs immediately preceding or\n      // following a segment break is removed.\n      trimAndCollapseSpacesAndTabs(\n        // […] ignoring bidi formatting characters (characters with the\n        // Bidi_Control property [UAX9]: ALM, LTR, RTL, LRE-RLO, LRI-PDI) as if\n        // they were not there.\n        value\n          .slice(start, end)\n          .replace(/[\\u061C\\u200E\\u200F\\u202A-\\u202E\\u2066-\\u2069]/g, ''),\n        start === 0 ? info.breakBefore : true,\n        end === value.length ? info.breakAfter : true\n      )\n    )\n\n    start = end + 1\n  }\n\n  // Collapsible segment breaks are transformed for rendering according to the\n  // segment break transformation rules.\n  // So here we jump to 4.1.2 of [CSSTEXT]:\n  // Any collapsible segment break immediately following another collapsible\n  // segment break is removed\n  let index = -1\n  /** @type {BreakNumber | undefined} */\n  let join\n\n  while (++index < lines.length) {\n    // *   If the character immediately before or immediately after the segment\n    //     break is the zero-width space character (U+200B), then the break is\n    //     removed, leaving behind the zero-width space.\n    if (\n      lines[index].charCodeAt(lines[index].length - 1) === 0x20_0b /* ZWSP */ ||\n      (index < lines.length - 1 &&\n        lines[index + 1].charCodeAt(0) === 0x20_0b) /* ZWSP */\n    ) {\n      result.push(lines[index])\n      join = undefined\n    }\n\n    // *   Otherwise, if the East Asian Width property [UAX11] of both the\n    //     character before and after the segment break is Fullwidth, Wide, or\n    //     Halfwidth (not Ambiguous), and neither side is Hangul, then the\n    //     segment break is removed.\n    //\n    //     Note: ignored.\n    // *   Otherwise, if the writing system of the segment break is Chinese,\n    //     Japanese, or Yi, and the character before or after the segment break\n    //     is punctuation or a symbol (Unicode general category P* or S*) and\n    //     has an East Asian Width property of Ambiguous, and the character on\n    //     the other side of the segment break is Fullwidth, Wide, or Halfwidth,\n    //     and not Hangul, then the segment break is removed.\n    //\n    //     Note: ignored.\n\n    // *   Otherwise, the segment break is converted to a space (U+0020).\n    else if (lines[index]) {\n      if (typeof join === 'number') result.push(join)\n      result.push(lines[index])\n      join = 0\n    } else if (index === 0 || index === lines.length - 1) {\n      // If this line is empty, and it’s the first or last, add a space.\n      // Note that this function is only called in normal whitespace, so we\n      // don’t worry about `pre`.\n      result.push(0)\n    }\n  }\n\n  return result\n}\n\n/**\n * Collect a text node as “pre” whitespace.\n *\n * @param {Text} node\n *   Text node.\n * @returns {Array<BreakNumber | string>}\n *   Result.\n */\nfunction collectPreText(node) {\n  return [String(node.value)]\n}\n\n/**\n * 3.  Every collapsible tab is converted to a collapsible space (U+0020).\n * 4.  Any collapsible space immediately following another collapsible\n *     space—even one outside the boundary of the inline containing that\n *     space, provided both spaces are within the same inline formatting\n *     context—is collapsed to have zero advance width. (It is invisible,\n *     but retains its soft wrap opportunity, if any.)\n *\n * @param {string} value\n *   Value to collapse.\n * @param {BreakBefore} breakBefore\n *   Whether there was a break before.\n * @param {BreakAfter} breakAfter\n *   Whether there was a break after.\n * @returns {string}\n *   Result.\n */\nfunction trimAndCollapseSpacesAndTabs(value, breakBefore, breakAfter) {\n  /** @type {Array<string>} */\n  const result = []\n  let start = 0\n  /** @type {number | undefined} */\n  let end\n\n  while (start < value.length) {\n    searchTabOrSpaces.lastIndex = start\n    const match = searchTabOrSpaces.exec(value)\n    end = match ? match.index : value.length\n\n    // If we’re not directly after a segment break, but there was white space,\n    // add an empty value that will be turned into a space.\n    if (!start && !end && match && !breakBefore) {\n      result.push('')\n    }\n\n    if (start !== end) {\n      result.push(value.slice(start, end))\n    }\n\n    start = match ? end + match[0].length : end\n  }\n\n  // If we reached the end, there was trailing white space, and there’s no\n  // segment break after this node, add an empty value that will be turned\n  // into a space.\n  if (start !== end && !breakAfter) {\n    result.push('')\n  }\n\n  return result.join(' ')\n}\n\n/**\n * Figure out the whitespace of a node.\n *\n * We don’t support void elements here (so `nobr wbr` -> `normal` is ignored).\n *\n * @param {Nodes} node\n *   Node (typically `Element`).\n * @param {CollectionInfo} info\n *   Info on current collection.\n * @returns {Whitespace}\n *   Applied whitespace.\n */\nfunction inferWhitespace(node, info) {\n  if (node.type === 'element') {\n    const properties = node.properties || {}\n    switch (node.tagName) {\n      case 'listing':\n      case 'plaintext':\n      case 'xmp': {\n        return 'pre'\n      }\n\n      case 'nobr': {\n        return 'nowrap'\n      }\n\n      case 'pre': {\n        return properties.wrap ? 'pre-wrap' : 'pre'\n      }\n\n      case 'td':\n      case 'th': {\n        return properties.noWrap ? 'nowrap' : info.whitespace\n      }\n\n      case 'textarea': {\n        return 'pre-wrap'\n      }\n\n      default:\n    }\n  }\n\n  return info.whitespace\n}\n\n/**\n * @type {TestFunction}\n * @param {Element} node\n * @returns {node is {properties: {hidden: true}}}\n */\nfunction hidden(node) {\n  return Boolean((node.properties || {}).hidden)\n}\n\n/**\n * @type {TestFunction}\n * @param {Element} node\n * @returns {node is {tagName: 'td' | 'th'}}\n */\nfunction isCell(node) {\n  return node.tagName === 'td' || node.tagName === 'th'\n}\n\n/**\n * @type {TestFunction}\n */\nfunction closedDialog(node) {\n  return node.tagName === 'dialog' && !(node.properties || {}).open\n}\n","/**\n * This is the ParseError class, which is the main error thrown by KaTeX\n * functions when something has gone wrong. This is used to distinguish internal\n * errors from errors in the expression that the user provided.\n *\n * If possible, a caller should provide a Token or ParseNode with information\n * about where in the source string the problem occurred.\n */\nclass ParseError extends Error {\n  // Error start position based on passed-in Token or ParseNode.\n\n  // Length of affected text based on passed-in Token or ParseNode.\n\n  // The underlying error message without any context added.\n  constructor(message,\n  // The error message\n  token) {\n    var error = \"KaTeX parse error: \" + message;\n    var start;\n    var end;\n    var loc = token && token.loc;\n    if (loc && loc.start <= loc.end) {\n      // If we have the input and a position, make the error a bit fancier\n      // Get the input\n      var input = loc.lexer.input;\n      // Prepend some information\n      start = loc.start;\n      end = loc.end;\n      if (start === input.length) {\n        error += \" at end of input: \";\n      } else {\n        error += \" at position \" + (start + 1) + \": \";\n      }\n      // Underline token in question using combining underscores\n      var underlined = input.slice(start, end).replace(/[^]/g, \"$&\\u0332\");\n      // Extract some context from the input and add it to the error\n      var left;\n      if (start > 15) {\n        left = \"…\" + input.slice(start - 15, start);\n      } else {\n        left = input.slice(0, start);\n      }\n      var right;\n      if (end + 15 < input.length) {\n        right = input.slice(end, end + 15) + \"…\";\n      } else {\n        right = input.slice(end);\n      }\n      error += left + underlined + right;\n    }\n    super(error);\n    this.name = \"ParseError\";\n    Object.setPrototypeOf(this, ParseError.prototype);\n    this.position = start;\n    if (start != null && end != null) {\n      this.length = end - start;\n    }\n    this.rawMessage = message;\n  }\n}\n\n/**\n * This file contains a list of utility functions which are useful in other\n * files.\n */\n// hyphenate and escape adapted from Facebook's React under Apache 2 license\nvar uppercase = /([A-Z])/g;\nvar hyphenate = str => str.replace(uppercase, \"-$1\").toLowerCase();\nvar ESCAPE_LOOKUP = {\n  \"&\": \"&amp;\",\n  \">\": \"&gt;\",\n  \"<\": \"&lt;\",\n  \"\\\"\": \"&quot;\",\n  \"'\": \"&#x27;\"\n};\nvar ESCAPE_REGEX = /[&><\"']/g;\n/**\n * Escapes text to prevent scripting attacks.\n */\nvar escape = text => String(text).replace(ESCAPE_REGEX, match => ESCAPE_LOOKUP[match]);\n/**\n * Sometimes we want to pull out the innermost element of a group. In most\n * cases, this will just be the group itself, but when ordgroups and colors have\n * a single element, we want to pull that out.\n */\nvar getBaseElem = group => {\n  if (group.type === \"ordgroup\") {\n    if (group.body.length === 1) {\n      return getBaseElem(group.body[0]);\n    } else {\n      return group;\n    }\n  } else if (group.type === \"color\") {\n    if (group.body.length === 1) {\n      return getBaseElem(group.body[0]);\n    } else {\n      return group;\n    }\n  } else if (group.type === \"font\") {\n    return getBaseElem(group.body);\n  } else {\n    return group;\n  }\n};\nvar characterNodesTypes = new Set([\"mathord\", \"textord\", \"atom\"]);\n/**\n * TeXbook algorithms often reference \"character boxes\", which are simply groups\n * with a single character in them. To decide if something is a character box,\n * we find its innermost group, and see if it is a single character.\n */\nvar isCharacterBox = group => characterNodesTypes.has(getBaseElem(group).type);\n/**\n * Return the protocol of a URL, or \"_relative\" if the URL does not specify a\n * protocol (and thus is relative), or `null` if URL has invalid protocol\n * (so should be outright rejected).\n */\nvar protocolFromUrl = url => {\n  // Check for possible leading protocol.\n  // https://url.spec.whatwg.org/#url-parsing strips leading whitespace\n  // (U+20) or C0 control (U+00-U+1F) characters.\n  // eslint-disable-next-line no-control-regex\n  var protocol = /^[\\x00-\\x20]*([^\\\\/#?]*?)(:|&#0*58|&#x0*3a|&colon)/i.exec(url);\n  if (!protocol) {\n    return \"_relative\";\n  }\n  // Reject weird colons\n  if (protocol[2] !== \":\") {\n    return null;\n  }\n  // Reject invalid characters in scheme according to\n  // https://datatracker.ietf.org/doc/html/rfc3986#section-3.1\n  if (!/^[a-zA-Z][a-zA-Z0-9+\\-.]*$/.test(protocol[1])) {\n    return null;\n  }\n  // Lowercase the protocol\n  return protocol[1].toLowerCase();\n};\n\n/* eslint no-console:0 */\n// TODO: automatically generate documentation\n// TODO: check all properties on Settings exist\n// TODO: check the type of a property on Settings matches\nvar SETTINGS_SCHEMA = {\n  displayMode: {\n    type: \"boolean\",\n    description: \"Render math in display mode, which puts the math in \" + \"display style (so \\\\int and \\\\sum are large, for example), and \" + \"centers the math on the page on its own line.\",\n    cli: \"-d, --display-mode\"\n  },\n  output: {\n    type: {\n      enum: [\"htmlAndMathml\", \"html\", \"mathml\"]\n    },\n    description: \"Determines the markup language of the output.\",\n    cli: \"-F, --format <type>\"\n  },\n  leqno: {\n    type: \"boolean\",\n    description: \"Render display math in leqno style (left-justified tags).\"\n  },\n  fleqn: {\n    type: \"boolean\",\n    description: \"Render display math flush left.\"\n  },\n  throwOnError: {\n    type: \"boolean\",\n    default: true,\n    cli: \"-t, --no-throw-on-error\",\n    cliDescription: \"Render errors (in the color given by --error-color) ins\" + \"tead of throwing a ParseError exception when encountering an error.\"\n  },\n  errorColor: {\n    type: \"string\",\n    default: \"#cc0000\",\n    cli: \"-c, --error-color <color>\",\n    cliDescription: \"A color string given in the format 'rgb' or 'rrggbb' \" + \"(no #). This option determines the color of errors rendered by the \" + \"-t option.\",\n    cliProcessor: color => \"#\" + color\n  },\n  macros: {\n    type: \"object\",\n    cli: \"-m, --macro <def>\",\n    cliDescription: \"Define custom macro of the form '\\\\foo:expansion' (use \" + \"multiple -m arguments for multiple macros).\",\n    cliDefault: [],\n    cliProcessor: (def, defs) => {\n      defs.push(def);\n      return defs;\n    }\n  },\n  minRuleThickness: {\n    type: \"number\",\n    description: \"Specifies a minimum thickness, in ems, for fraction lines,\" + \" `\\\\sqrt` top lines, `{array}` vertical lines, `\\\\hline`, \" + \"`\\\\hdashline`, `\\\\underline`, `\\\\overline`, and the borders of \" + \"`\\\\fbox`, `\\\\boxed`, and `\\\\fcolorbox`.\",\n    processor: t => Math.max(0, t),\n    cli: \"--min-rule-thickness <size>\",\n    cliProcessor: parseFloat\n  },\n  colorIsTextColor: {\n    type: \"boolean\",\n    description: \"Makes \\\\color behave like LaTeX's 2-argument \\\\textcolor, \" + \"instead of LaTeX's one-argument \\\\color mode change.\",\n    cli: \"-b, --color-is-text-color\"\n  },\n  strict: {\n    type: [{\n      enum: [\"warn\", \"ignore\", \"error\"]\n    }, \"boolean\", \"function\"],\n    description: \"Turn on strict / LaTeX faithfulness mode, which throws an \" + \"error if the input uses features that are not supported by LaTeX.\",\n    cli: \"-S, --strict\",\n    cliDefault: false\n  },\n  trust: {\n    type: [\"boolean\", \"function\"],\n    description: \"Trust the input, enabling all HTML features such as \\\\url.\",\n    cli: \"-T, --trust\"\n  },\n  maxSize: {\n    type: \"number\",\n    default: Infinity,\n    description: \"If non-zero, all user-specified sizes, e.g. in \" + \"\\\\rule{500em}{500em}, will be capped to maxSize ems. Otherwise, \" + \"elements and spaces can be arbitrarily large\",\n    processor: s => Math.max(0, s),\n    cli: \"-s, --max-size <n>\",\n    cliProcessor: parseInt\n  },\n  maxExpand: {\n    type: \"number\",\n    default: 1000,\n    description: \"Limit the number of macro expansions to the specified \" + \"number, to prevent e.g. infinite macro loops. If set to Infinity, \" + \"the macro expander will try to fully expand as in LaTeX.\",\n    processor: n => Math.max(0, n),\n    cli: \"-e, --max-expand <n>\",\n    cliProcessor: n => n === \"Infinity\" ? Infinity : parseInt(n)\n  },\n  globalGroup: {\n    type: \"boolean\",\n    cli: false\n  }\n};\nfunction getDefaultValue(schema) {\n  if (\"default\" in schema) {\n    return schema.default;\n  }\n  var type = schema.type;\n  var defaultType = Array.isArray(type) ? type[0] : type;\n  if (typeof defaultType !== 'string') {\n    return defaultType.enum[0];\n  }\n  switch (defaultType) {\n    case 'boolean':\n      return false;\n    case 'string':\n      return '';\n    case 'number':\n      return 0;\n    case 'object':\n      return {};\n  }\n}\n/**\n * The main Settings object\n *\n * The current options stored are:\n *  - displayMode: Whether the expression should be typeset as inline math\n *                 (false, the default), meaning that the math starts in\n *                 \\textstyle and is placed in an inline-block); or as display\n *                 math (true), meaning that the math starts in \\displaystyle\n *                 and is placed in a block with vertical margin.\n */\nclass Settings {\n  constructor(options) {\n    if (options === void 0) {\n      options = {};\n    }\n    // allow null options\n    options = options || {};\n    for (var prop of Object.keys(SETTINGS_SCHEMA)) {\n      var schema = SETTINGS_SCHEMA[prop];\n      var optionValue = options[prop];\n      // TODO: validate options\n      this[prop] = optionValue !== undefined ? schema.processor ? schema.processor(optionValue) : optionValue : getDefaultValue(schema);\n    }\n  }\n  /**\n   * Report nonstrict (non-LaTeX-compatible) input.\n   * Can safely not be called if `this.strict` is false in JavaScript.\n   */\n  reportNonstrict(errorCode, errorMsg, token) {\n    var strict = this.strict;\n    if (typeof strict === \"function\") {\n      // Allow return value of strict function to be boolean or string\n      // (or null/undefined, meaning no further processing).\n      strict = strict(errorCode, errorMsg, token);\n    }\n    if (!strict || strict === \"ignore\") {\n      return;\n    } else if (strict === true || strict === \"error\") {\n      throw new ParseError(\"LaTeX-incompatible input and strict mode is set to 'error': \" + (errorMsg + \" [\" + errorCode + \"]\"), token);\n    } else if (strict === \"warn\") {\n      typeof console !== \"undefined\" && console.warn(\"LaTeX-incompatible input and strict mode is set to 'warn': \" + (errorMsg + \" [\" + errorCode + \"]\"));\n    } else {\n      // won't happen in type-safe code\n      typeof console !== \"undefined\" && console.warn(\"LaTeX-incompatible input and strict mode is set to \" + (\"unrecognized '\" + strict + \"': \" + errorMsg + \" [\" + errorCode + \"]\"));\n    }\n  }\n  /**\n   * Check whether to apply strict (LaTeX-adhering) behavior for unusual\n   * input (like `\\\\`).  Unlike `nonstrict`, will not throw an error;\n   * instead, \"error\" translates to a return value of `true`, while \"ignore\"\n   * translates to a return value of `false`.  May still print a warning:\n   * \"warn\" prints a warning and returns `false`.\n   * This is for the second category of `errorCode`s listed in the README.\n   */\n  useStrictBehavior(errorCode, errorMsg, token) {\n    var strict = this.strict;\n    if (typeof strict === \"function\") {\n      // Allow return value of strict function to be boolean or string\n      // (or null/undefined, meaning no further processing).\n      // But catch any exceptions thrown by function, treating them\n      // like \"error\".\n      try {\n        strict = strict(errorCode, errorMsg, token);\n      } catch (error) {\n        strict = \"error\";\n      }\n    }\n    if (!strict || strict === \"ignore\") {\n      return false;\n    } else if (strict === true || strict === \"error\") {\n      return true;\n    } else if (strict === \"warn\") {\n      typeof console !== \"undefined\" && console.warn(\"LaTeX-incompatible input and strict mode is set to 'warn': \" + (errorMsg + \" [\" + errorCode + \"]\"));\n      return false;\n    } else {\n      // won't happen in type-safe code\n      typeof console !== \"undefined\" && console.warn(\"LaTeX-incompatible input and strict mode is set to \" + (\"unrecognized '\" + strict + \"': \" + errorMsg + \" [\" + errorCode + \"]\"));\n      return false;\n    }\n  }\n  /**\n   * Check whether to test potentially dangerous input, and return\n   * `true` (trusted) or `false` (untrusted).  The sole argument `context`\n   * should be an object with `command` field specifying the relevant LaTeX\n   * command (as a string starting with `\\`), and any other arguments, etc.\n   * If `context` has a `url` field, a `protocol` field will automatically\n   * get added by this function (changing the specified object).\n   */\n  isTrusted(context) {\n    if (\"url\" in context && context.url && !context.protocol) {\n      var protocol = protocolFromUrl(context.url);\n      if (protocol == null) {\n        return false;\n      }\n      context.protocol = protocol;\n    }\n    var trust = typeof this.trust === \"function\" ? this.trust(context) : this.trust;\n    return Boolean(trust);\n  }\n}\n\n/**\n * This file contains information and classes for the various kinds of styles\n * used in TeX. It provides a generic `Style` class, which holds information\n * about a specific style. It then provides instances of all the different kinds\n * of styles possible, and provides functions to move between them and get\n * information about them.\n */\n/**\n * The main style class. Contains a unique id for the style, a size (which is\n * the same for cramped and uncramped version of a style), and a cramped flag.\n */\nclass Style {\n  constructor(id, size, cramped) {\n    this.id = id;\n    this.size = size;\n    this.cramped = cramped;\n  }\n  /**\n   * Get the style of a superscript given a base in the current style.\n   */\n  sup() {\n    return styles[sup[this.id]];\n  }\n  /**\n   * Get the style of a subscript given a base in the current style.\n   */\n  sub() {\n    return styles[sub[this.id]];\n  }\n  /**\n   * Get the style of a fraction numerator given the fraction in the current\n   * style.\n   */\n  fracNum() {\n    return styles[fracNum[this.id]];\n  }\n  /**\n   * Get the style of a fraction denominator given the fraction in the current\n   * style.\n   */\n  fracDen() {\n    return styles[fracDen[this.id]];\n  }\n  /**\n   * Get the cramped version of a style (in particular, cramping a cramped style\n   * doesn't change the style).\n   */\n  cramp() {\n    return styles[cramp[this.id]];\n  }\n  /**\n   * Get a text or display version of this style.\n   */\n  text() {\n    return styles[text$1[this.id]];\n  }\n  /**\n   * Return true if this style is tightly spaced (scriptstyle/scriptscriptstyle)\n   */\n  isTight() {\n    return this.size >= 2;\n  }\n}\n// IDs of the different styles\nvar D = 0;\nvar Dc = 1;\nvar T = 2;\nvar Tc = 3;\nvar S = 4;\nvar Sc = 5;\nvar SS = 6;\nvar SSc = 7;\n// Instances of the different styles\nvar styles = [new Style(D, 0, false), new Style(Dc, 0, true), new Style(T, 1, false), new Style(Tc, 1, true), new Style(S, 2, false), new Style(Sc, 2, true), new Style(SS, 3, false), new Style(SSc, 3, true)];\n// Lookup tables for switching from one style to another\nvar sup = [S, Sc, S, Sc, SS, SSc, SS, SSc];\nvar sub = [Sc, Sc, Sc, Sc, SSc, SSc, SSc, SSc];\nvar fracNum = [T, Tc, S, Sc, SS, SSc, SS, SSc];\nvar fracDen = [Tc, Tc, Sc, Sc, SSc, SSc, SSc, SSc];\nvar cramp = [Dc, Dc, Tc, Tc, Sc, Sc, SSc, SSc];\nvar text$1 = [D, Dc, T, Tc, T, Tc, T, Tc];\n// We only export some of the styles.\nvar Style$1 = {\n  DISPLAY: styles[D],\n  TEXT: styles[T],\n  SCRIPT: styles[S],\n  SCRIPTSCRIPT: styles[SS]\n};\n\n/*\n * This file defines the Unicode scripts and script families that we\n * support. To add new scripts or families, just add a new entry to the\n * scriptData array below. Adding scripts to the scriptData array allows\n * characters from that script to appear in \\text{} environments.\n */\n/**\n * Unicode block data for the families of scripts we support in \\text{}.\n * Scripts only need to appear here if they do not have font metrics.\n */\nvar scriptData = [{\n  // Latin characters beyond the Latin-1 characters we have metrics for.\n  // Needed for Czech, Hungarian and Turkish text, for example.\n  name: 'latin',\n  blocks: [[0x0100, 0x024f],\n  // Latin Extended-A and Latin Extended-B\n  [0x0300, 0x036f] // Combining Diacritical marks\n  ]\n}, {\n  // The Cyrillic script used by Russian and related languages.\n  // A Cyrillic subset used to be supported as explicitly defined\n  // symbols in symbols.js\n  name: 'cyrillic',\n  blocks: [[0x0400, 0x04ff]]\n}, {\n  // Armenian\n  name: 'armenian',\n  blocks: [[0x0530, 0x058F]]\n}, {\n  // The Brahmic scripts of South and Southeast Asia\n  // Devanagari (0900–097F)\n  // Bengali (0980–09FF)\n  // Gurmukhi (0A00–0A7F)\n  // Gujarati (0A80–0AFF)\n  // Oriya (0B00–0B7F)\n  // Tamil (0B80–0BFF)\n  // Telugu (0C00–0C7F)\n  // Kannada (0C80–0CFF)\n  // Malayalam (0D00–0D7F)\n  // Sinhala (0D80–0DFF)\n  // Thai (0E00–0E7F)\n  // Lao (0E80–0EFF)\n  // Tibetan (0F00–0FFF)\n  // Myanmar (1000–109F)\n  name: 'brahmic',\n  blocks: [[0x0900, 0x109F]]\n}, {\n  name: 'georgian',\n  blocks: [[0x10A0, 0x10ff]]\n}, {\n  // Chinese and Japanese.\n  // The \"k\" in cjk is for Korean, but we've separated Korean out\n  name: \"cjk\",\n  blocks: [[0x3000, 0x30FF],\n  // CJK symbols and punctuation, Hiragana, Katakana\n  [0x4E00, 0x9FAF],\n  // CJK ideograms\n  [0xFF00, 0xFF60] // Fullwidth punctuation\n  // TODO: add halfwidth Katakana and Romanji glyphs\n  ]\n}, {\n  // Korean\n  name: 'hangul',\n  blocks: [[0xAC00, 0xD7AF]]\n}];\n/**\n * Given a codepoint, return the name of the script or script family\n * it is from, or null if it is not part of a known block\n */\nfunction scriptFromCodepoint(codepoint) {\n  for (var i = 0; i < scriptData.length; i++) {\n    var script = scriptData[i];\n    for (var _i = 0; _i < script.blocks.length; _i++) {\n      var block = script.blocks[_i];\n      if (codepoint >= block[0] && codepoint <= block[1]) {\n        return script.name;\n      }\n    }\n  }\n  return null;\n}\n/**\n * A flattened version of all the supported blocks in a single array.\n * This is an optimization to make supportedCodepoint() fast.\n */\nvar allBlocks = [];\nscriptData.forEach(s => s.blocks.forEach(b => allBlocks.push(...b)));\n/**\n * Given a codepoint, return true if it falls within one of the\n * scripts or script families defined above and false otherwise.\n *\n * Micro benchmarks shows that this is faster than\n * /[\\u3000-\\u30FF\\u4E00-\\u9FAF\\uFF00-\\uFF60\\uAC00-\\uD7AF\\u0900-\\u109F]/.test()\n * in Firefox, Chrome and Node.\n */\nfunction supportedCodepoint(codepoint) {\n  for (var i = 0; i < allBlocks.length; i += 2) {\n    if (codepoint >= allBlocks[i] && codepoint <= allBlocks[i + 1]) {\n      return true;\n    }\n  }\n  return false;\n}\n\n/**\n * This file provides support to domTree.js and delimiter.js.\n * It's a storehouse of path geometry for SVG images.\n */\n// In all paths below, the viewBox-to-em scale is 1000:1.\n// Second Brush Stroke\n//    Low resolution monitors struggle to display images in fine detail.\n//    So browsers apply anti-aliasing. A long straight arrow shaft therefore\n//    will sometimes appear as if it has a blurred edge.\n//    To mitigate this, these SVG files contain a second \"brush-stroke\" on the\n//    arrow shafts. That is, a second long thin rectangular SVG path has been\n//    written directly on top of each arrow shaft. This reinforcement causes\n//    some of the screen pixels to display as black instead of the anti-aliased\n//    gray pixel that a  single path would generate. So we get arrow shafts\n//    whose edges appear to be sharper.\nvar doubleBrushStroke = svgPath => svgPath + \" \" + svgPath;\nvar hLinePad = 80; // padding above a sqrt vinculum. Prevents image cropping.\n// The vinculum of a \\sqrt can be made thicker by a KaTeX rendering option.\n// Think of variable extraVinculum as two detours in the SVG path.\n// The detour begins at the lower left of the area labeled extraVinculum below.\n// The detour proceeds one extraVinculum distance up and slightly to the right,\n// displacing the radiused corner between surd and vinculum. The radius is\n// traversed as usual, then the detour resumes. It goes right, to the end of\n// the very long vinculum, then down one extraVinculum distance,\n// after which it resumes regular path geometry for the radical.\n/*                                                  vinculum\n                                                   /\n         /▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒←extraVinculum\n        / █████████████████████←0.04em (40 unit) std vinculum thickness\n       / /\n      / /\n     / /\\\n    / / surd\n*/\nvar sqrtMain = function sqrtMain(extraVinculum, hLinePad) {\n  // sqrtMain path geometry is from glyph U221A in the font KaTeX Main\n  return \"M95,\" + (622 + extraVinculum + hLinePad) + \"\\nc-2.7,0,-7.17,-2.7,-13.5,-8c-5.8,-5.3,-9.5,-10,-9.5,-14\\nc0,-2,0.3,-3.3,1,-4c1.3,-2.7,23.83,-20.7,67.5,-54\\nc44.2,-33.3,65.8,-50.3,66.5,-51c1.3,-1.3,3,-2,5,-2c4.7,0,8.7,3.3,12,10\\ns173,378,173,378c0.7,0,35.3,-71,104,-213c68.7,-142,137.5,-285,206.5,-429\\nc69,-144,104.5,-217.7,106.5,-221\\nl\" + extraVinculum / 2.075 + \" -\" + extraVinculum + \"\\nc5.3,-9.3,12,-14,20,-14\\nH400000v\" + (40 + extraVinculum) + \"H845.2724\\ns-225.272,467,-225.272,467s-235,486,-235,486c-2.7,4.7,-9,7,-19,7\\nc-6,0,-10,-1,-12,-3s-194,-422,-194,-422s-65,47,-65,47z\\nM\" + (834 + extraVinculum) + \" \" + hLinePad + \"h400000v\" + (40 + extraVinculum) + \"h-400000z\";\n};\nvar sqrtSize1 = function sqrtSize1(extraVinculum, hLinePad) {\n  // size1 is from glyph U221A in the font KaTeX_Size1-Regular\n  return \"M263,\" + (601 + extraVinculum + hLinePad) + \"c0.7,0,18,39.7,52,119\\nc34,79.3,68.167,158.7,102.5,238c34.3,79.3,51.8,119.3,52.5,120\\nc340,-704.7,510.7,-1060.3,512,-1067\\nl\" + extraVinculum / 2.084 + \" -\" + extraVinculum + \"\\nc4.7,-7.3,11,-11,19,-11\\nH40000v\" + (40 + extraVinculum) + \"H1012.3\\ns-271.3,567,-271.3,567c-38.7,80.7,-84,175,-136,283c-52,108,-89.167,185.3,-111.5,232\\nc-22.3,46.7,-33.8,70.3,-34.5,71c-4.7,4.7,-12.3,7,-23,7s-12,-1,-12,-1\\ns-109,-253,-109,-253c-72.7,-168,-109.3,-252,-110,-252c-10.7,8,-22,16.7,-34,26\\nc-22,17.3,-33.3,26,-34,26s-26,-26,-26,-26s76,-59,76,-59s76,-60,76,-60z\\nM\" + (1001 + extraVinculum) + \" \" + hLinePad + \"h400000v\" + (40 + extraVinculum) + \"h-400000z\";\n};\nvar sqrtSize2 = function sqrtSize2(extraVinculum, hLinePad) {\n  // size2 is from glyph U221A in the font KaTeX_Size2-Regular\n  return \"M983 \" + (10 + extraVinculum + hLinePad) + \"\\nl\" + extraVinculum / 3.13 + \" -\" + extraVinculum + \"\\nc4,-6.7,10,-10,18,-10 H400000v\" + (40 + extraVinculum) + \"\\nH1013.1s-83.4,268,-264.1,840c-180.7,572,-277,876.3,-289,913c-4.7,4.7,-12.7,7,-24,7\\ns-12,0,-12,0c-1.3,-3.3,-3.7,-11.7,-7,-25c-35.3,-125.3,-106.7,-373.3,-214,-744\\nc-10,12,-21,25,-33,39s-32,39,-32,39c-6,-5.3,-15,-14,-27,-26s25,-30,25,-30\\nc26.7,-32.7,52,-63,76,-91s52,-60,52,-60s208,722,208,722\\nc56,-175.3,126.3,-397.3,211,-666c84.7,-268.7,153.8,-488.2,207.5,-658.5\\nc53.7,-170.3,84.5,-266.8,92.5,-289.5z\\nM\" + (1001 + extraVinculum) + \" \" + hLinePad + \"h400000v\" + (40 + extraVinculum) + \"h-400000z\";\n};\nvar sqrtSize3 = function sqrtSize3(extraVinculum, hLinePad) {\n  // size3 is from glyph U221A in the font KaTeX_Size3-Regular\n  return \"M424,\" + (2398 + extraVinculum + hLinePad) + \"\\nc-1.3,-0.7,-38.5,-172,-111.5,-514c-73,-342,-109.8,-513.3,-110.5,-514\\nc0,-2,-10.7,14.3,-32,49c-4.7,7.3,-9.8,15.7,-15.5,25c-5.7,9.3,-9.8,16,-12.5,20\\ns-5,7,-5,7c-4,-3.3,-8.3,-7.7,-13,-13s-13,-13,-13,-13s76,-122,76,-122s77,-121,77,-121\\ns209,968,209,968c0,-2,84.7,-361.7,254,-1079c169.3,-717.3,254.7,-1077.7,256,-1081\\nl\" + extraVinculum / 4.223 + \" -\" + extraVinculum + \"c4,-6.7,10,-10,18,-10 H400000\\nv\" + (40 + extraVinculum) + \"H1014.6\\ns-87.3,378.7,-272.6,1166c-185.3,787.3,-279.3,1182.3,-282,1185\\nc-2,6,-10,9,-24,9\\nc-8,0,-12,-0.7,-12,-2z M\" + (1001 + extraVinculum) + \" \" + hLinePad + \"\\nh400000v\" + (40 + extraVinculum) + \"h-400000z\";\n};\nvar sqrtSize4 = function sqrtSize4(extraVinculum, hLinePad) {\n  // size4 is from glyph U221A in the font KaTeX_Size4-Regular\n  return \"M473,\" + (2713 + extraVinculum + hLinePad) + \"\\nc339.3,-1799.3,509.3,-2700,510,-2702 l\" + extraVinculum / 5.298 + \" -\" + extraVinculum + \"\\nc3.3,-7.3,9.3,-11,18,-11 H400000v\" + (40 + extraVinculum) + \"H1017.7\\ns-90.5,478,-276.2,1466c-185.7,988,-279.5,1483,-281.5,1485c-2,6,-10,9,-24,9\\nc-8,0,-12,-0.7,-12,-2c0,-1.3,-5.3,-32,-16,-92c-50.7,-293.3,-119.7,-693.3,-207,-1200\\nc0,-1.3,-5.3,8.7,-16,30c-10.7,21.3,-21.3,42.7,-32,64s-16,33,-16,33s-26,-26,-26,-26\\ns76,-153,76,-153s77,-151,77,-151c0.7,0.7,35.7,202,105,604c67.3,400.7,102,602.7,104,\\n606zM\" + (1001 + extraVinculum) + \" \" + hLinePad + \"h400000v\" + (40 + extraVinculum) + \"H1017.7z\";\n};\nvar phasePath = function phasePath(y) {\n  var x = y / 2; // x coordinate at top of angle\n  return \"M400000 \" + y + \" H0 L\" + x + \" 0 l65 45 L145 \" + (y - 80) + \" H400000z\";\n};\nvar sqrtTall = function sqrtTall(extraVinculum, hLinePad, viewBoxHeight) {\n  // sqrtTall is from glyph U23B7 in the font KaTeX_Size4-Regular\n  // One path edge has a variable length. It runs vertically from the vinculum\n  // to a point near (14 units) the bottom of the surd. The vinculum\n  // is normally 40 units thick. So the length of the line in question is:\n  var vertSegment = viewBoxHeight - 54 - hLinePad - extraVinculum;\n  return \"M702 \" + (extraVinculum + hLinePad) + \"H400000\" + (40 + extraVinculum) + \"\\nH742v\" + vertSegment + \"l-4 4-4 4c-.667.7 -2 1.5-4 2.5s-4.167 1.833-6.5 2.5-5.5 1-9.5 1\\nh-12l-28-84c-16.667-52-96.667 -294.333-240-727l-212 -643 -85 170\\nc-4-3.333-8.333-7.667-13 -13l-13-13l77-155 77-156c66 199.333 139 419.667\\n219 661 l218 661zM702 \" + hLinePad + \"H400000v\" + (40 + extraVinculum) + \"H742z\";\n};\nvar sqrtPath = function sqrtPath(size, extraVinculum, viewBoxHeight) {\n  extraVinculum = 1000 * extraVinculum; // Convert from document ems to viewBox.\n  var path = \"\";\n  switch (size) {\n    case \"sqrtMain\":\n      path = sqrtMain(extraVinculum, hLinePad);\n      break;\n    case \"sqrtSize1\":\n      path = sqrtSize1(extraVinculum, hLinePad);\n      break;\n    case \"sqrtSize2\":\n      path = sqrtSize2(extraVinculum, hLinePad);\n      break;\n    case \"sqrtSize3\":\n      path = sqrtSize3(extraVinculum, hLinePad);\n      break;\n    case \"sqrtSize4\":\n      path = sqrtSize4(extraVinculum, hLinePad);\n      break;\n    case \"sqrtTall\":\n      path = sqrtTall(extraVinculum, hLinePad, viewBoxHeight);\n  }\n  return path;\n};\nvar innerPath = function innerPath(name, height) {\n  // The inner part of stretchy tall delimiters\n  switch (name) {\n    case \"\\u239c\":\n      return doubleBrushStroke(\"M291 0 H417 V\" + height + \" H291z\");\n    case \"\\u2223\":\n      return doubleBrushStroke(\"M145 0 H188 V\" + height + \" H145z\");\n    case \"\\u2225\":\n      return doubleBrushStroke(\"M145 0 H188 V\" + height + \" H145z\") + doubleBrushStroke(\"M367 0 H410 V\" + height + \" H367z\");\n    case \"\\u239f\":\n      return doubleBrushStroke(\"M457 0 H583 V\" + height + \" H457z\");\n    case \"\\u23a2\":\n      return doubleBrushStroke(\"M319 0 H403 V\" + height + \" H319z\");\n    case \"\\u23a5\":\n      return doubleBrushStroke(\"M263 0 H347 V\" + height + \" H263z\");\n    case \"\\u23aa\":\n      return doubleBrushStroke(\"M384 0 H504 V\" + height + \" H384z\");\n    case \"\\u23d0\":\n      return doubleBrushStroke(\"M312 0 H355 V\" + height + \" H312z\");\n    case \"\\u2016\":\n      return doubleBrushStroke(\"M257 0 H300 V\" + height + \" H257z\") + doubleBrushStroke(\"M478 0 H521 V\" + height + \" H478z\");\n    default:\n      return \"\";\n  }\n};\nvar path = {\n  // The doubleleftarrow geometry is from glyph U+21D0 in the font KaTeX Main\n  doubleleftarrow: \"M262 157\\nl10-10c34-36 62.7-77 86-123 3.3-8 5-13.3 5-16 0-5.3-6.7-8-20-8-7.3\\n 0-12.2.5-14.5 1.5-2.3 1-4.8 4.5-7.5 10.5-49.3 97.3-121.7 169.3-217 216-28\\n 14-57.3 25-88 33-6.7 2-11 3.8-13 5.5-2 1.7-3 4.2-3 7.5s1 5.8 3 7.5\\nc2 1.7 6.3 3.5 13 5.5 68 17.3 128.2 47.8 180.5 91.5 52.3 43.7 93.8 96.2 124.5\\n 157.5 9.3 8 15.3 12.3 18 13h6c12-.7 18-4 18-10 0-2-1.7-7-5-15-23.3-46-52-87\\n-86-123l-10-10h399738v-40H218c328 0 0 0 0 0l-10-8c-26.7-20-65.7-43-117-69 2.7\\n-2 6-3.7 10-5 36.7-16 72.3-37.3 107-64l10-8h399782v-40z\\nm8 0v40h399730v-40zm0 194v40h399730v-40z\",\n  // doublerightarrow is from glyph U+21D2 in font KaTeX Main\n  doublerightarrow: \"M399738 392l\\n-10 10c-34 36-62.7 77-86 123-3.3 8-5 13.3-5 16 0 5.3 6.7 8 20 8 7.3 0 12.2-.5\\n 14.5-1.5 2.3-1 4.8-4.5 7.5-10.5 49.3-97.3 121.7-169.3 217-216 28-14 57.3-25 88\\n-33 6.7-2 11-3.8 13-5.5 2-1.7 3-4.2 3-7.5s-1-5.8-3-7.5c-2-1.7-6.3-3.5-13-5.5-68\\n-17.3-128.2-47.8-180.5-91.5-52.3-43.7-93.8-96.2-124.5-157.5-9.3-8-15.3-12.3-18\\n-13h-6c-12 .7-18 4-18 10 0 2 1.7 7 5 15 23.3 46 52 87 86 123l10 10H0v40h399782\\nc-328 0 0 0 0 0l10 8c26.7 20 65.7 43 117 69-2.7 2-6 3.7-10 5-36.7 16-72.3 37.3\\n-107 64l-10 8H0v40zM0 157v40h399730v-40zm0 194v40h399730v-40z\",\n  // leftarrow is from glyph U+2190 in font KaTeX Main\n  leftarrow: \"M400000 241H110l3-3c68.7-52.7 113.7-120\\n 135-202 4-14.7 6-23 6-25 0-7.3-7-11-21-11-8 0-13.2.8-15.5 2.5-2.3 1.7-4.2 5.8\\n-5.5 12.5-1.3 4.7-2.7 10.3-4 17-12 48.7-34.8 92-68.5 130S65.3 228.3 18 247\\nc-10 4-16 7.7-18 11 0 8.7 6 14.3 18 17 47.3 18.7 87.8 47 121.5 85S196 441.3 208\\n 490c.7 2 1.3 5 2 9s1.2 6.7 1.5 8c.3 1.3 1 3.3 2 6s2.2 4.5 3.5 5.5c1.3 1 3.3\\n 1.8 6 2.5s6 1 10 1c14 0 21-3.7 21-11 0-2-2-10.3-6-25-20-79.3-65-146.7-135-202\\n l-3-3h399890zM100 241v40h399900v-40z\",\n  // overbrace is from glyphs U+23A9/23A8/23A7 in font KaTeX_Size4-Regular\n  leftbrace: \"M6 548l-6-6v-35l6-11c56-104 135.3-181.3 238-232 57.3-28.7 117\\n-45 179-50h399577v120H403c-43.3 7-81 15-113 26-100.7 33-179.7 91-237 174-2.7\\n 5-6 9-10 13-.7 1-7.3 1-20 1H6z\",\n  leftbraceunder: \"M0 6l6-6h17c12.688 0 19.313.3 20 1 4 4 7.313 8.3 10 13\\n 35.313 51.3 80.813 93.8 136.5 127.5 55.688 33.7 117.188 55.8 184.5 66.5.688\\n 0 2 .3 4 1 18.688 2.7 76 4.3 172 5h399450v120H429l-6-1c-124.688-8-235-61.7\\n-331-161C60.687 138.7 32.312 99.3 7 54L0 41V6z\",\n  // overgroup is from the MnSymbol package (public domain)\n  leftgroup: \"M400000 80\\nH435C64 80 168.3 229.4 21 260c-5.9 1.2-18 0-18 0-2 0-3-1-3-3v-38C76 61 257 0\\n 435 0h399565z\",\n  leftgroupunder: \"M400000 262\\nH435C64 262 168.3 112.6 21 82c-5.9-1.2-18 0-18 0-2 0-3 1-3 3v38c76 158 257 219\\n 435 219h399565z\",\n  // Harpoons are from glyph U+21BD in font KaTeX Main\n  leftharpoon: \"M0 267c.7 5.3 3 10 7 14h399993v-40H93c3.3\\n-3.3 10.2-9.5 20.5-18.5s17.8-15.8 22.5-20.5c50.7-52 88-110.3 112-175 4-11.3 5\\n-18.3 3-21-1.3-4-7.3-6-18-6-8 0-13 .7-15 2s-4.7 6.7-8 16c-42 98.7-107.3 174.7\\n-196 228-6.7 4.7-10.7 8-12 10-1.3 2-2 5.7-2 11zm100-26v40h399900v-40z\",\n  leftharpoonplus: \"M0 267c.7 5.3 3 10 7 14h399993v-40H93c3.3-3.3 10.2-9.5\\n 20.5-18.5s17.8-15.8 22.5-20.5c50.7-52 88-110.3 112-175 4-11.3 5-18.3 3-21-1.3\\n-4-7.3-6-18-6-8 0-13 .7-15 2s-4.7 6.7-8 16c-42 98.7-107.3 174.7-196 228-6.7 4.7\\n-10.7 8-12 10-1.3 2-2 5.7-2 11zm100-26v40h399900v-40zM0 435v40h400000v-40z\\nm0 0v40h400000v-40z\",\n  leftharpoondown: \"M7 241c-4 4-6.333 8.667-7 14 0 5.333.667 9 2 11s5.333\\n 5.333 12 10c90.667 54 156 130 196 228 3.333 10.667 6.333 16.333 9 17 2 .667 5\\n 1 9 1h5c10.667 0 16.667-2 18-6 2-2.667 1-9.667-3-21-32-87.333-82.667-157.667\\n-152-211l-3-3h399907v-40zM93 281 H400000 v-40L7 241z\",\n  leftharpoondownplus: \"M7 435c-4 4-6.3 8.7-7 14 0 5.3.7 9 2 11s5.3 5.3 12\\n 10c90.7 54 156 130 196 228 3.3 10.7 6.3 16.3 9 17 2 .7 5 1 9 1h5c10.7 0 16.7\\n-2 18-6 2-2.7 1-9.7-3-21-32-87.3-82.7-157.7-152-211l-3-3h399907v-40H7zm93 0\\nv40h399900v-40zM0 241v40h399900v-40zm0 0v40h399900v-40z\",\n  // hook is from glyph U+21A9 in font KaTeX Main\n  lefthook: \"M400000 281 H103s-33-11.2-61-33.5S0 197.3 0 164s14.2-61.2 42.5\\n-83.5C70.8 58.2 104 47 142 47 c16.7 0 25 6.7 25 20 0 12-8.7 18.7-26 20-40 3.3\\n-68.7 15.7-86 37-10 12-15 25.3-15 40 0 22.7 9.8 40.7 29.5 54 19.7 13.3 43.5 21\\n 71.5 23h399859zM103 281v-40h399897v40z\",\n  leftlinesegment: doubleBrushStroke(\"M40 281 V428 H0 V94 H40 V241 H400000 v40z\"),\n  leftbracketunder: doubleBrushStroke(\"M0 0 h120 V290 H399995 v120 H0z\"),\n  leftbracketover: doubleBrushStroke(\"M0 440 h120 V150 H399995 v-120 H0z\"),\n  leftmapsto: doubleBrushStroke(\"M40 281 V448H0V74H40V241H400000v40z\"),\n  // tofrom is from glyph U+21C4 in font KaTeX AMS Regular\n  leftToFrom: \"M0 147h400000v40H0zm0 214c68 40 115.7 95.7 143 167h22c15.3 0 23\\n-.3 23-1 0-1.3-5.3-13.7-16-37-18-35.3-41.3-69-70-101l-7-8h399905v-40H95l7-8\\nc28.7-32 52-65.7 70-101 10.7-23.3 16-35.7 16-37 0-.7-7.7-1-23-1h-22C115.7 265.3\\n 68 321 0 361zm0-174v-40h399900v40zm100 154v40h399900v-40z\",\n  longequal: doubleBrushStroke(\"M0 50 h400000 v40H0z m0 194h40000v40H0z\"),\n  midbrace: \"M200428 334\\nc-100.7-8.3-195.3-44-280-108-55.3-42-101.7-93-139-153l-9-14c-2.7 4-5.7 8.7-9 14\\n-53.3 86.7-123.7 153-211 199-66.7 36-137.3 56.3-212 62H0V214h199568c178.3-11.7\\n 311.7-78.3 403-201 6-8 9.7-12 11-12 .7-.7 6.7-1 18-1s17.3.3 18 1c1.3 0 5 4 11\\n 12 44.7 59.3 101.3 106.3 170 141s145.3 54.3 229 60h199572v120z\",\n  midbraceunder: \"M199572 214\\nc100.7 8.3 195.3 44 280 108 55.3 42 101.7 93 139 153l9 14c2.7-4 5.7-8.7 9-14\\n 53.3-86.7 123.7-153 211-199 66.7-36 137.3-56.3 212-62h199568v120H200432c-178.3\\n 11.7-311.7 78.3-403 201-6 8-9.7 12-11 12-.7.7-6.7 1-18 1s-17.3-.3-18-1c-1.3 0\\n-5-4-11-12-44.7-59.3-101.3-106.3-170-141s-145.3-54.3-229-60H0V214z\",\n  oiintSize1: \"M512.6 71.6c272.6 0 320.3 106.8 320.3 178.2 0 70.8-47.7 177.6\\n-320.3 177.6S193.1 320.6 193.1 249.8c0-71.4 46.9-178.2 319.5-178.2z\\nm368.1 178.2c0-86.4-60.9-215.4-368.1-215.4-306.4 0-367.3 129-367.3 215.4 0 85.8\\n60.9 214.8 367.3 214.8 307.2 0 368.1-129 368.1-214.8z\",\n  oiintSize2: \"M757.8 100.1c384.7 0 451.1 137.6 451.1 230 0 91.3-66.4 228.8\\n-451.1 228.8-386.3 0-452.7-137.5-452.7-228.8 0-92.4 66.4-230 452.7-230z\\nm502.4 230c0-111.2-82.4-277.2-502.4-277.2s-504 166-504 277.2\\nc0 110 84 276 504 276s502.4-166 502.4-276z\",\n  oiiintSize1: \"M681.4 71.6c408.9 0 480.5 106.8 480.5 178.2 0 70.8-71.6 177.6\\n-480.5 177.6S202.1 320.6 202.1 249.8c0-71.4 70.5-178.2 479.3-178.2z\\nm525.8 178.2c0-86.4-86.8-215.4-525.7-215.4-437.9 0-524.7 129-524.7 215.4 0\\n85.8 86.8 214.8 524.7 214.8 438.9 0 525.7-129 525.7-214.8z\",\n  oiiintSize2: \"M1021.2 53c603.6 0 707.8 165.8 707.8 277.2 0 110-104.2 275.8\\n-707.8 275.8-606 0-710.2-165.8-710.2-275.8C311 218.8 415.2 53 1021.2 53z\\nm770.4 277.1c0-131.2-126.4-327.6-770.5-327.6S248.4 198.9 248.4 330.1\\nc0 130 128.8 326.4 772.7 326.4s770.5-196.4 770.5-326.4z\",\n  rightarrow: \"M0 241v40h399891c-47.3 35.3-84 78-110 128\\n-16.7 32-27.7 63.7-33 95 0 1.3-.2 2.7-.5 4-.3 1.3-.5 2.3-.5 3 0 7.3 6.7 11 20\\n 11 8 0 13.2-.8 15.5-2.5 2.3-1.7 4.2-5.5 5.5-11.5 2-13.3 5.7-27 11-41 14.7-44.7\\n 39-84.5 73-119.5s73.7-60.2 119-75.5c6-2 9-5.7 9-11s-3-9-9-11c-45.3-15.3-85\\n-40.5-119-75.5s-58.3-74.8-73-119.5c-4.7-14-8.3-27.3-11-40-1.3-6.7-3.2-10.8-5.5\\n-12.5-2.3-1.7-7.5-2.5-15.5-2.5-14 0-21 3.7-21 11 0 2 2 10.3 6 25 20.7 83.3 67\\n 151.7 139 205zm0 0v40h399900v-40z\",\n  rightbrace: \"M400000 542l\\n-6 6h-17c-12.7 0-19.3-.3-20-1-4-4-7.3-8.3-10-13-35.3-51.3-80.8-93.8-136.5-127.5\\ns-117.2-55.8-184.5-66.5c-.7 0-2-.3-4-1-18.7-2.7-76-4.3-172-5H0V214h399571l6 1\\nc124.7 8 235 61.7 331 161 31.3 33.3 59.7 72.7 85 118l7 13v35z\",\n  rightbraceunder: \"M399994 0l6 6v35l-6 11c-56 104-135.3 181.3-238 232-57.3\\n 28.7-117 45-179 50H-300V214h399897c43.3-7 81-15 113-26 100.7-33 179.7-91 237\\n-174 2.7-5 6-9 10-13 .7-1 7.3-1 20-1h17z\",\n  rightgroup: \"M0 80h399565c371 0 266.7 149.4 414 180 5.9 1.2 18 0 18 0 2 0\\n 3-1 3-3v-38c-76-158-257-219-435-219H0z\",\n  rightgroupunder: \"M0 262h399565c371 0 266.7-149.4 414-180 5.9-1.2 18 0 18\\n 0 2 0 3 1 3 3v38c-76 158-257 219-435 219H0z\",\n  rightharpoon: \"M0 241v40h399993c4.7-4.7 7-9.3 7-14 0-9.3\\n-3.7-15.3-11-18-92.7-56.7-159-133.7-199-231-3.3-9.3-6-14.7-8-16-2-1.3-7-2-15-2\\n-10.7 0-16.7 2-18 6-2 2.7-1 9.7 3 21 15.3 42 36.7 81.8 64 119.5 27.3 37.7 58\\n 69.2 92 94.5zm0 0v40h399900v-40z\",\n  rightharpoonplus: \"M0 241v40h399993c4.7-4.7 7-9.3 7-14 0-9.3-3.7-15.3-11\\n-18-92.7-56.7-159-133.7-199-231-3.3-9.3-6-14.7-8-16-2-1.3-7-2-15-2-10.7 0-16.7\\n 2-18 6-2 2.7-1 9.7 3 21 15.3 42 36.7 81.8 64 119.5 27.3 37.7 58 69.2 92 94.5z\\nm0 0v40h399900v-40z m100 194v40h399900v-40zm0 0v40h399900v-40z\",\n  rightharpoondown: \"M399747 511c0 7.3 6.7 11 20 11 8 0 13-.8 15-2.5s4.7-6.8\\n 8-15.5c40-94 99.3-166.3 178-217 13.3-8 20.3-12.3 21-13 5.3-3.3 8.5-5.8 9.5\\n-7.5 1-1.7 1.5-5.2 1.5-10.5s-2.3-10.3-7-15H0v40h399908c-34 25.3-64.7 57-92 95\\n-27.3 38-48.7 77.7-64 119-3.3 8.7-5 14-5 16zM0 241v40h399900v-40z\",\n  rightharpoondownplus: \"M399747 705c0 7.3 6.7 11 20 11 8 0 13-.8\\n 15-2.5s4.7-6.8 8-15.5c40-94 99.3-166.3 178-217 13.3-8 20.3-12.3 21-13 5.3-3.3\\n 8.5-5.8 9.5-7.5 1-1.7 1.5-5.2 1.5-10.5s-2.3-10.3-7-15H0v40h399908c-34 25.3\\n-64.7 57-92 95-27.3 38-48.7 77.7-64 119-3.3 8.7-5 14-5 16zM0 435v40h399900v-40z\\nm0-194v40h400000v-40zm0 0v40h400000v-40z\",\n  righthook: \"M399859 241c-764 0 0 0 0 0 40-3.3 68.7-15.7 86-37 10-12 15-25.3\\n 15-40 0-22.7-9.8-40.7-29.5-54-19.7-13.3-43.5-21-71.5-23-17.3-1.3-26-8-26-20 0\\n-13.3 8.7-20 26-20 38 0 71 11.2 99 33.5 0 0 7 5.6 21 16.7 14 11.2 21 33.5 21\\n 66.8s-14 61.2-42 83.5c-28 22.3-61 33.5-99 33.5L0 241z M0 281v-40h399859v40z\",\n  rightlinesegment: doubleBrushStroke(\"M399960 241 V94 h40 V428 h-40 V281 H0 v-40z\"),\n  rightbracketunder: doubleBrushStroke(\"M399995 0 h-120 V290 H0 v120 H400000z\"),\n  rightbracketover: doubleBrushStroke(\"M399995 440 h-120 V150 H0 v-120 H399995z\"),\n  rightToFrom: \"M400000 167c-70.7-42-118-97.7-142-167h-23c-15.3 0-23 .3-23\\n 1 0 1.3 5.3 13.7 16 37 18 35.3 41.3 69 70 101l7 8H0v40h399905l-7 8c-28.7 32\\n-52 65.7-70 101-10.7 23.3-16 35.7-16 37 0 .7 7.7 1 23 1h23c24-69.3 71.3-125 142\\n-167z M100 147v40h399900v-40zM0 341v40h399900v-40z\",\n  // twoheadleftarrow is from glyph U+219E in font KaTeX AMS Regular\n  twoheadleftarrow: \"M0 167c68 40\\n 115.7 95.7 143 167h22c15.3 0 23-.3 23-1 0-1.3-5.3-13.7-16-37-18-35.3-41.3-69\\n-70-101l-7-8h125l9 7c50.7 39.3 85 86 103 140h46c0-4.7-6.3-18.7-19-42-18-35.3\\n-40-67.3-66-96l-9-9h399716v-40H284l9-9c26-28.7 48-60.7 66-96 12.7-23.333 19\\n-37.333 19-42h-46c-18 54-52.3 100.7-103 140l-9 7H95l7-8c28.7-32 52-65.7 70-101\\n 10.7-23.333 16-35.7 16-37 0-.7-7.7-1-23-1h-22C115.7 71.3 68 127 0 167z\",\n  twoheadrightarrow: \"M400000 167\\nc-68-40-115.7-95.7-143-167h-22c-15.3 0-23 .3-23 1 0 1.3 5.3 13.7 16 37 18 35.3\\n 41.3 69 70 101l7 8h-125l-9-7c-50.7-39.3-85-86-103-140h-46c0 4.7 6.3 18.7 19 42\\n 18 35.3 40 67.3 66 96l9 9H0v40h399716l-9 9c-26 28.7-48 60.7-66 96-12.7 23.333\\n-19 37.333-19 42h46c18-54 52.3-100.7 103-140l9-7h125l-7 8c-28.7 32-52 65.7-70\\n 101-10.7 23.333-16 35.7-16 37 0 .7 7.7 1 23 1h22c27.3-71.3 75-127 143-167z\",\n  // tilde1 is a modified version of a glyph from the MnSymbol package\n  tilde1: \"M200 55.538c-77 0-168 73.953-177 73.953-3 0-7\\n-2.175-9-5.437L2 97c-1-2-2-4-2-6 0-4 2-7 5-9l20-12C116 12 171 0 207 0c86 0\\n 114 68 191 68 78 0 168-68 177-68 4 0 7 2 9 5l12 19c1 2.175 2 4.35 2 6.525 0\\n 4.35-2 7.613-5 9.788l-19 13.05c-92 63.077-116.937 75.308-183 76.128\\n-68.267.847-113-73.952-191-73.952z\",\n  // ditto tilde2, tilde3, & tilde4\n  tilde2: \"M344 55.266c-142 0-300.638 81.316-311.5 86.418\\n-8.01 3.762-22.5 10.91-23.5 5.562L1 120c-1-2-1-3-1-4 0-5 3-9 8-10l18.4-9C160.9\\n 31.9 283 0 358 0c148 0 188 122 331 122s314-97 326-97c4 0 8 2 10 7l7 21.114\\nc1 2.14 1 3.21 1 4.28 0 5.347-3 9.626-7 10.696l-22.3 12.622C852.6 158.372 751\\n 181.476 676 181.476c-149 0-189-126.21-332-126.21z\",\n  tilde3: \"M786 59C457 59 32 175.242 13 175.242c-6 0-10-3.457\\n-11-10.37L.15 138c-1-7 3-12 10-13l19.2-6.4C378.4 40.7 634.3 0 804.3 0c337 0\\n 411.8 157 746.8 157 328 0 754-112 773-112 5 0 10 3 11 9l1 14.075c1 8.066-.697\\n 16.595-6.697 17.492l-21.052 7.31c-367.9 98.146-609.15 122.696-778.15 122.696\\n -338 0-409-156.573-744-156.573z\",\n  tilde4: \"M786 58C457 58 32 177.487 13 177.487c-6 0-10-3.345\\n-11-10.035L.15 143c-1-7 3-12 10-13l22-6.7C381.2 35 637.15 0 807.15 0c337 0 409\\n 177 744 177 328 0 754-127 773-127 5 0 10 3 11 9l1 14.794c1 7.805-3 13.38-9\\n 14.495l-20.7 5.574c-366.85 99.79-607.3 139.372-776.3 139.372-338 0-409\\n -175.236-744-175.236z\",\n  // vec is from glyph U+20D7 in font KaTeX Main\n  vec: \"M377 20c0-5.333 1.833-10 5.5-14S391 0 397 0c4.667 0 8.667 1.667 12 5\\n3.333 2.667 6.667 9 10 19 6.667 24.667 20.333 43.667 41 57 7.333 4.667 11\\n10.667 11 18 0 6-1 10-3 12s-6.667 5-14 9c-28.667 14.667-53.667 35.667-75 63\\n-1.333 1.333-3.167 3.5-5.5 6.5s-4 4.833-5 5.5c-1 .667-2.5 1.333-4.5 2s-4.333 1\\n-7 1c-4.667 0-9.167-1.833-13.5-5.5S337 184 337 178c0-12.667 15.667-32.333 47-59\\nH213l-171-1c-8.667-6-13-12.333-13-19 0-4.667 4.333-11.333 13-20h359\\nc-16-25.333-24-45-24-59z\",\n  // widehat1 is a modified version of a glyph from the MnSymbol package\n  widehat1: \"M529 0h5l519 115c5 1 9 5 9 10 0 1-1 2-1 3l-4 22\\nc-1 5-5 9-11 9h-2L532 67 19 159h-2c-5 0-9-4-11-9l-5-22c-1-6 2-12 8-13z\",\n  // ditto widehat2, widehat3, & widehat4\n  widehat2: \"M1181 0h2l1171 176c6 0 10 5 10 11l-2 23c-1 6-5 10\\n-11 10h-1L1182 67 15 220h-1c-6 0-10-4-11-10l-2-23c-1-6 4-11 10-11z\",\n  widehat3: \"M1181 0h2l1171 236c6 0 10 5 10 11l-2 23c-1 6-5 10\\n-11 10h-1L1182 67 15 280h-1c-6 0-10-4-11-10l-2-23c-1-6 4-11 10-11z\",\n  widehat4: \"M1181 0h2l1171 296c6 0 10 5 10 11l-2 23c-1 6-5 10\\n-11 10h-1L1182 67 15 340h-1c-6 0-10-4-11-10l-2-23c-1-6 4-11 10-11z\",\n  // widecheck paths are all inverted versions of widehat\n  widecheck1: \"M529,159h5l519,-115c5,-1,9,-5,9,-10c0,-1,-1,-2,-1,-3l-4,-22c-1,\\n-5,-5,-9,-11,-9h-2l-512,92l-513,-92h-2c-5,0,-9,4,-11,9l-5,22c-1,6,2,12,8,13z\",\n  widecheck2: \"M1181,220h2l1171,-176c6,0,10,-5,10,-11l-2,-23c-1,-6,-5,-10,\\n-11,-10h-1l-1168,153l-1167,-153h-1c-6,0,-10,4,-11,10l-2,23c-1,6,4,11,10,11z\",\n  widecheck3: \"M1181,280h2l1171,-236c6,0,10,-5,10,-11l-2,-23c-1,-6,-5,-10,\\n-11,-10h-1l-1168,213l-1167,-213h-1c-6,0,-10,4,-11,10l-2,23c-1,6,4,11,10,11z\",\n  widecheck4: \"M1181,340h2l1171,-296c6,0,10,-5,10,-11l-2,-23c-1,-6,-5,-10,\\n-11,-10h-1l-1168,273l-1167,-273h-1c-6,0,-10,4,-11,10l-2,23c-1,6,4,11,10,11z\",\n  // The next ten paths support reaction arrows from the mhchem package.\n  // Arrows for \\ce{<-->} are offset from xAxis by 0.22ex, per mhchem in LaTeX\n  // baraboveleftarrow is mostly from glyph U+2190 in font KaTeX Main\n  baraboveleftarrow: \"M400000 620h-399890l3 -3c68.7 -52.7 113.7 -120 135 -202\\nc4 -14.7 6 -23 6 -25c0 -7.3 -7 -11 -21 -11c-8 0 -13.2 0.8 -15.5 2.5\\nc-2.3 1.7 -4.2 5.8 -5.5 12.5c-1.3 4.7 -2.7 10.3 -4 17c-12 48.7 -34.8 92 -68.5 130\\ns-74.2 66.3 -121.5 85c-10 4 -16 7.7 -18 11c0 8.7 6 14.3 18 17c47.3 18.7 87.8 47\\n121.5 85s56.5 81.3 68.5 130c0.7 2 1.3 5 2 9s1.2 6.7 1.5 8c0.3 1.3 1 3.3 2 6\\ns2.2 4.5 3.5 5.5c1.3 1 3.3 1.8 6 2.5s6 1 10 1c14 0 21 -3.7 21 -11\\nc0 -2 -2 -10.3 -6 -25c-20 -79.3 -65 -146.7 -135 -202l-3 -3h399890z\\nM100 620v40h399900v-40z M0 241v40h399900v-40zM0 241v40h399900v-40z\",\n  // rightarrowabovebar is mostly from glyph U+2192, KaTeX Main\n  rightarrowabovebar: \"M0 241v40h399891c-47.3 35.3-84 78-110 128-16.7 32\\n-27.7 63.7-33 95 0 1.3-.2 2.7-.5 4-.3 1.3-.5 2.3-.5 3 0 7.3 6.7 11 20 11 8 0\\n13.2-.8 15.5-2.5 2.3-1.7 4.2-5.5 5.5-11.5 2-13.3 5.7-27 11-41 14.7-44.7 39\\n-84.5 73-119.5s73.7-60.2 119-75.5c6-2 9-5.7 9-11s-3-9-9-11c-45.3-15.3-85-40.5\\n-119-75.5s-58.3-74.8-73-119.5c-4.7-14-8.3-27.3-11-40-1.3-6.7-3.2-10.8-5.5\\n-12.5-2.3-1.7-7.5-2.5-15.5-2.5-14 0-21 3.7-21 11 0 2 2 10.3 6 25 20.7 83.3 67\\n151.7 139 205zm96 379h399894v40H0zm0 0h399904v40H0z\",\n  // The short left harpoon has 0.5em (i.e. 500 units) kern on the left end.\n  // Ref from mhchem.sty: \\rlap{\\raisebox{-.22ex}{$\\kern0.5em\n  baraboveshortleftharpoon: \"M507,435c-4,4,-6.3,8.7,-7,14c0,5.3,0.7,9,2,11\\nc1.3,2,5.3,5.3,12,10c90.7,54,156,130,196,228c3.3,10.7,6.3,16.3,9,17\\nc2,0.7,5,1,9,1c0,0,5,0,5,0c10.7,0,16.7,-2,18,-6c2,-2.7,1,-9.7,-3,-21\\nc-32,-87.3,-82.7,-157.7,-152,-211c0,0,-3,-3,-3,-3l399351,0l0,-40\\nc-398570,0,-399437,0,-399437,0z M593 435 v40 H399500 v-40z\\nM0 281 v-40 H399908 v40z M0 281 v-40 H399908 v40z\",\n  rightharpoonaboveshortbar: \"M0,241 l0,40c399126,0,399993,0,399993,0\\nc4.7,-4.7,7,-9.3,7,-14c0,-9.3,-3.7,-15.3,-11,-18c-92.7,-56.7,-159,-133.7,-199,\\n-231c-3.3,-9.3,-6,-14.7,-8,-16c-2,-1.3,-7,-2,-15,-2c-10.7,0,-16.7,2,-18,6\\nc-2,2.7,-1,9.7,3,21c15.3,42,36.7,81.8,64,119.5c27.3,37.7,58,69.2,92,94.5z\\nM0 241 v40 H399908 v-40z M0 475 v-40 H399500 v40z M0 475 v-40 H399500 v40z\",\n  shortbaraboveleftharpoon: \"M7,435c-4,4,-6.3,8.7,-7,14c0,5.3,0.7,9,2,11\\nc1.3,2,5.3,5.3,12,10c90.7,54,156,130,196,228c3.3,10.7,6.3,16.3,9,17c2,0.7,5,1,9,\\n1c0,0,5,0,5,0c10.7,0,16.7,-2,18,-6c2,-2.7,1,-9.7,-3,-21c-32,-87.3,-82.7,-157.7,\\n-152,-211c0,0,-3,-3,-3,-3l399907,0l0,-40c-399126,0,-399993,0,-399993,0z\\nM93 435 v40 H400000 v-40z M500 241 v40 H400000 v-40z M500 241 v40 H400000 v-40z\",\n  shortrightharpoonabovebar: \"M53,241l0,40c398570,0,399437,0,399437,0\\nc4.7,-4.7,7,-9.3,7,-14c0,-9.3,-3.7,-15.3,-11,-18c-92.7,-56.7,-159,-133.7,-199,\\n-231c-3.3,-9.3,-6,-14.7,-8,-16c-2,-1.3,-7,-2,-15,-2c-10.7,0,-16.7,2,-18,6\\nc-2,2.7,-1,9.7,3,21c15.3,42,36.7,81.8,64,119.5c27.3,37.7,58,69.2,92,94.5z\\nM500 241 v40 H399408 v-40z M500 435 v40 H400000 v-40z\"\n};\nvar tallDelim = function tallDelim(label, midHeight) {\n  switch (label) {\n    case \"lbrack\":\n      return \"M403 1759 V84 H666 V0 H319 V1759 v\" + midHeight + \" v1759 h347 v-84\\nH403z M403 1759 V0 H319 V1759 v\" + midHeight + \" v1759 h84z\";\n    case \"rbrack\":\n      return \"M347 1759 V0 H0 V84 H263 V1759 v\" + midHeight + \" v1759 H0 v84 H347z\\nM347 1759 V0 H263 V1759 v\" + midHeight + \" v1759 h84z\";\n    case \"vert\":\n      return \"M145 15 v585 v\" + midHeight + \" v585 c2.667,10,9.667,15,21,15\\nc10,0,16.667,-5,20,-15 v-585 v\" + -midHeight + \" v-585 c-2.667,-10,-9.667,-15,-21,-15\\nc-10,0,-16.667,5,-20,15z M188 15 H145 v585 v\" + midHeight + \" v585 h43z\";\n    case \"doublevert\":\n      return \"M145 15 v585 v\" + midHeight + \" v585 c2.667,10,9.667,15,21,15\\nc10,0,16.667,-5,20,-15 v-585 v\" + -midHeight + \" v-585 c-2.667,-10,-9.667,-15,-21,-15\\nc-10,0,-16.667,5,-20,15z M188 15 H145 v585 v\" + midHeight + \" v585 h43z\\nM367 15 v585 v\" + midHeight + \" v585 c2.667,10,9.667,15,21,15\\nc10,0,16.667,-5,20,-15 v-585 v\" + -midHeight + \" v-585 c-2.667,-10,-9.667,-15,-21,-15\\nc-10,0,-16.667,5,-20,15z M410 15 H367 v585 v\" + midHeight + \" v585 h43z\";\n    case \"lfloor\":\n      return \"M319 602 V0 H403 V602 v\" + midHeight + \" v1715 h263 v84 H319z\\nMM319 602 V0 H403 V602 v\" + midHeight + \" v1715 H319z\";\n    case \"rfloor\":\n      return \"M319 602 V0 H403 V602 v\" + midHeight + \" v1799 H0 v-84 H319z\\nMM319 602 V0 H403 V602 v\" + midHeight + \" v1715 H319z\";\n    case \"lceil\":\n      return \"M403 1759 V84 H666 V0 H319 V1759 v\" + midHeight + \" v602 h84z\\nM403 1759 V0 H319 V1759 v\" + midHeight + \" v602 h84z\";\n    case \"rceil\":\n      return \"M347 1759 V0 H0 V84 H263 V1759 v\" + midHeight + \" v602 h84z\\nM347 1759 V0 h-84 V1759 v\" + midHeight + \" v602 h84z\";\n    case \"lparen\":\n      return \"M863,9c0,-2,-2,-5,-6,-9c0,0,-17,0,-17,0c-12.7,0,-19.3,0.3,-20,1\\nc-5.3,5.3,-10.3,11,-15,17c-242.7,294.7,-395.3,682,-458,1162c-21.3,163.3,-33.3,349,\\n-36,557 l0,\" + (midHeight + 84) + \"c0.2,6,0,26,0,60c2,159.3,10,310.7,24,454c53.3,528,210,\\n949.7,470,1265c4.7,6,9.7,11.7,15,17c0.7,0.7,7,1,19,1c0,0,18,0,18,0c4,-4,6,-7,6,-9\\nc0,-2.7,-3.3,-8.7,-10,-18c-135.3,-192.7,-235.5,-414.3,-300.5,-665c-65,-250.7,-102.5,\\n-544.7,-112.5,-882c-2,-104,-3,-167,-3,-189\\nl0,-\" + (midHeight + 92) + \"c0,-162.7,5.7,-314,17,-454c20.7,-272,63.7,-513,129,-723c65.3,\\n-210,155.3,-396.3,270,-559c6.7,-9.3,10,-15.3,10,-18z\";\n    case \"rparen\":\n      return \"M76,0c-16.7,0,-25,3,-25,9c0,2,2,6.3,6,13c21.3,28.7,42.3,60.3,\\n63,95c96.7,156.7,172.8,332.5,228.5,527.5c55.7,195,92.8,416.5,111.5,664.5\\nc11.3,139.3,17,290.7,17,454c0,28,1.7,43,3.3,45l0,\" + (midHeight + 9) + \"\\nc-3,4,-3.3,16.7,-3.3,38c0,162,-5.7,313.7,-17,455c-18.7,248,-55.8,469.3,-111.5,664\\nc-55.7,194.7,-131.8,370.3,-228.5,527c-20.7,34.7,-41.7,66.3,-63,95c-2,3.3,-4,7,-6,11\\nc0,7.3,5.7,11,17,11c0,0,11,0,11,0c9.3,0,14.3,-0.3,15,-1c5.3,-5.3,10.3,-11,15,-17\\nc242.7,-294.7,395.3,-681.7,458,-1161c21.3,-164.7,33.3,-350.7,36,-558\\nl0,-\" + (midHeight + 144) + \"c-2,-159.3,-10,-310.7,-24,-454c-53.3,-528,-210,-949.7,\\n-470,-1265c-4.7,-6,-9.7,-11.7,-15,-17c-0.7,-0.7,-6.7,-1,-18,-1z\";\n    default:\n      // We should not ever get here.\n      throw new Error(\"Unknown stretchy delimiter.\");\n  }\n};\n\n/**\n * This node represents a document fragment, which contains elements, but when\n * placed into the DOM doesn't have any representation itself. It only contains\n * children and doesn't have any DOM node properties.\n */\nclass DocumentFragment {\n  // Never used; needed for satisfying interface.\n  constructor(children) {\n    this.children = children;\n    this.classes = [];\n    this.height = 0;\n    this.depth = 0;\n    this.maxFontSize = 0;\n    this.style = {};\n  }\n  hasClass(className) {\n    return this.classes.includes(className);\n  }\n  /** Convert the fragment into a node. */\n  toNode() {\n    var frag = document.createDocumentFragment();\n    for (var i = 0; i < this.children.length; i++) {\n      frag.appendChild(this.children[i].toNode());\n    }\n    return frag;\n  }\n  /** Convert the fragment into HTML markup. */\n  toMarkup() {\n    var markup = \"\";\n    // Simply concatenate the markup for the children together.\n    for (var i = 0; i < this.children.length; i++) {\n      markup += this.children[i].toMarkup();\n    }\n    return markup;\n  }\n  /**\n   * Converts the math node into a string, similar to innerText. Applies to\n   * MathDomNode's only.\n   */\n  toText() {\n    // To avoid this, we would subclass documentFragment separately for\n    // MathML, but polyfills for subclassing is expensive per PR 1469.\n    // TODO(ts): Only works for ChildType = MathDomNode.\n    var toText = child => child.toText();\n    return this.children.map(toText).join(\"\");\n  }\n}\n\n/**\n * This file does conversion between units.  In particular, it provides\n * calculateSize to convert other units into ems.\n */\n// This table gives the number of TeX pts in one of each *absolute* TeX unit.\n// Thus, multiplying a length by this number converts the length from units\n// into pts.  Dividing the result by ptPerEm gives the number of ems\n// *assuming* a font size of ptPerEm (normal size, normal style).\nvar ptPerUnit = {\n  // https://en.wikibooks.org/wiki/LaTeX/Lengths and\n  // https://tex.stackexchange.com/a/8263\n  \"pt\": 1,\n  // TeX point\n  \"mm\": 7227 / 2540,\n  // millimeter\n  \"cm\": 7227 / 254,\n  // centimeter\n  \"in\": 72.27,\n  // inch\n  \"bp\": 803 / 800,\n  // big (PostScript) points\n  \"pc\": 12,\n  // pica\n  \"dd\": 1238 / 1157,\n  // didot\n  \"cc\": 14856 / 1157,\n  // cicero (12 didot)\n  \"nd\": 685 / 642,\n  // new didot\n  \"nc\": 1370 / 107,\n  // new cicero (12 new didot)\n  \"sp\": 1 / 65536,\n  // scaled point (TeX's internal smallest unit)\n  // https://tex.stackexchange.com/a/41371\n  \"px\": 803 / 800 // \\pdfpxdimen defaults to 1 bp in pdfTeX and LuaTeX\n};\n// Dictionary of relative units, for fast validity testing.\nvar relativeUnit = {\n  \"ex\": true,\n  \"em\": true,\n  \"mu\": true\n};\n/**\n * Determine whether the specified unit (either a string defining the unit\n * or a \"size\" parse node containing a unit field) is valid.\n */\nvar validUnit = function validUnit(unit) {\n  if (typeof unit !== \"string\") {\n    unit = unit.unit;\n  }\n  return unit in ptPerUnit || unit in relativeUnit || unit === \"ex\";\n};\n/*\n * Convert a \"size\" parse node (with numeric \"number\" and string \"unit\" fields,\n * as parsed by functions.js argType \"size\") into a CSS em value for the\n * current style/scale.  `options` gives the current options.\n */\nvar calculateSize = function calculateSize(sizeValue, options) {\n  var scale;\n  if (sizeValue.unit in ptPerUnit) {\n    // Absolute units\n    scale = ptPerUnit[sizeValue.unit] // Convert unit to pt\n    / options.fontMetrics().ptPerEm // Convert pt to CSS em\n    / options.sizeMultiplier; // Unscale to make absolute units\n  } else if (sizeValue.unit === \"mu\") {\n    // `mu` units scale with scriptstyle/scriptscriptstyle.\n    scale = options.fontMetrics().cssEmPerMu;\n  } else {\n    // Other relative units always refer to the *textstyle* font\n    // in the current size.\n    var unitOptions;\n    if (options.style.isTight()) {\n      // isTight() means current style is script/scriptscript.\n      unitOptions = options.havingStyle(options.style.text());\n    } else {\n      unitOptions = options;\n    }\n    // TODO: In TeX these units are relative to the quad of the current\n    // *text* font, e.g. cmr10. KaTeX instead uses values from the\n    // comparably-sized *Computer Modern symbol* font. At 10pt, these\n    // match. At 7pt and 5pt, they differ: cmr7=1.138894, cmsy7=1.170641;\n    // cmr5=1.361133, cmsy5=1.472241. Consider $\\scriptsize a\\kern1emb$.\n    // TeX \\showlists shows a kern of 1.13889 * fontsize;\n    // KaTeX shows a kern of 1.171 * fontsize.\n    if (sizeValue.unit === \"ex\") {\n      scale = unitOptions.fontMetrics().xHeight;\n    } else if (sizeValue.unit === \"em\") {\n      scale = unitOptions.fontMetrics().quad;\n    } else {\n      throw new ParseError(\"Invalid unit: '\" + sizeValue.unit + \"'\");\n    }\n    if (unitOptions !== options) {\n      scale *= unitOptions.sizeMultiplier / options.sizeMultiplier;\n    }\n  }\n  return Math.min(sizeValue.number * scale, options.maxSize);\n};\n/**\n * Round `n` to 4 decimal places, or to the nearest 1/10,000th em. See\n * https://github.com/KaTeX/KaTeX/pull/2460.\n */\nvar makeEm = function makeEm(n) {\n  return +n.toFixed(4) + \"em\";\n};\n\n/**\n * These objects store the data about the DOM nodes we create, as well as some\n * extra data. They can then be transformed into real DOM nodes with the\n * `toNode` function or HTML markup using `toMarkup`. They are useful for both\n * storing extra properties on the nodes, as well as providing a way to easily\n * work with the DOM.\n *\n * Similar functions for working with MathML nodes exist in mathMLTree.js.\n *\n * TODO: refactor `span` and `anchor` into common superclass when\n * target environments support class inheritance\n */\n/**\n * Create an HTML className based on a list of classes. In addition to joining\n * with spaces, we also remove empty classes.\n */\nvar createClass = function createClass(classes) {\n  return classes.filter(cls => cls).join(\" \");\n};\nvar initNode = function initNode(classes, options, style) {\n  this.classes = classes || [];\n  this.attributes = {};\n  this.height = 0;\n  this.depth = 0;\n  this.maxFontSize = 0;\n  this.style = style || {};\n  if (options) {\n    if (options.style.isTight()) {\n      this.classes.push(\"mtight\");\n    }\n    var color = options.getColor();\n    if (color) {\n      this.style.color = color;\n    }\n  }\n};\n/**\n * Convert into an HTML node\n */\nvar toNode = function toNode(tagName) {\n  var node = document.createElement(tagName);\n  // Apply the class\n  node.className = createClass(this.classes);\n  // Apply inline styles\n  for (var key of Object.keys(this.style)) {\n    node.style[key] = this.style[key];\n  }\n  // Apply attributes\n  for (var attr of Object.keys(this.attributes)) {\n    node.setAttribute(attr, this.attributes[attr]);\n  }\n  // Append the children, also as HTML nodes\n  for (var i = 0; i < this.children.length; i++) {\n    node.appendChild(this.children[i].toNode());\n  }\n  return node;\n};\n/**\n * https://w3c.github.io/html-reference/syntax.html#syntax-attributes\n *\n * > Attribute Names must consist of one or more characters\n * other than the space characters, U+0000 NULL,\n * '\"', \"'\", \">\", \"/\", \"=\", the control characters,\n * and any characters that are not defined by Unicode.\n */\nvar invalidAttributeNameRegex = /[\\s\"'>/=\\x00-\\x1f]/;\n/**\n * Convert into an HTML markup string\n */\nvar toMarkup = function toMarkup(tagName) {\n  var markup = \"<\" + tagName;\n  // Add the class\n  if (this.classes.length) {\n    markup += \" class=\\\"\" + escape(createClass(this.classes)) + \"\\\"\";\n  }\n  var styles = \"\";\n  // Add the styles, after hyphenation\n  for (var key of Object.keys(this.style)) {\n    styles += hyphenate(key) + \":\" + this.style[key] + \";\";\n  }\n  if (styles) {\n    markup += \" style=\\\"\" + escape(styles) + \"\\\"\";\n  }\n  // Add the attributes\n  for (var attr of Object.keys(this.attributes)) {\n    if (invalidAttributeNameRegex.test(attr)) {\n      throw new ParseError(\"Invalid attribute name '\" + attr + \"'\");\n    }\n    markup += \" \" + attr + \"=\\\"\" + escape(this.attributes[attr]) + \"\\\"\";\n  }\n  markup += \">\";\n  // Add the markup of the children, also as markup\n  for (var i = 0; i < this.children.length; i++) {\n    markup += this.children[i].toMarkup();\n  }\n  markup += \"</\" + tagName + \">\";\n  return markup;\n};\n/**\n * This node represents a span node, with a className, a list of children, and\n * an inline style. It also contains information about its height, depth, and\n * maxFontSize.\n *\n * Represents two types with different uses: SvgSpan to wrap an SVG and DomSpan\n * otherwise. This typesafety is important when HTML builders access a span's\n * children.\n */\nclass Span {\n  constructor(classes, children, options, style) {\n    initNode.call(this, classes, options, style);\n    this.children = children || [];\n  }\n  /**\n   * Sets an arbitrary attribute on the span. Warning: use this wisely. Not\n   * all browsers support attributes the same, and having too many custom\n   * attributes is probably bad.\n   */\n  setAttribute(attribute, value) {\n    this.attributes[attribute] = value;\n  }\n  hasClass(className) {\n    return this.classes.includes(className);\n  }\n  toNode() {\n    return toNode.call(this, \"span\");\n  }\n  toMarkup() {\n    return toMarkup.call(this, \"span\");\n  }\n}\n/**\n * This node represents an anchor (<a>) element with a hyperlink.  See `span`\n * for further details.\n */\nclass Anchor {\n  constructor(href, classes, children, options) {\n    initNode.call(this, classes, options);\n    this.children = children || [];\n    this.setAttribute('href', href);\n  }\n  setAttribute(attribute, value) {\n    this.attributes[attribute] = value;\n  }\n  hasClass(className) {\n    return this.classes.includes(className);\n  }\n  toNode() {\n    return toNode.call(this, \"a\");\n  }\n  toMarkup() {\n    return toMarkup.call(this, \"a\");\n  }\n}\n/**\n * This node represents an image embed (<img>) element.\n */\nclass Img {\n  constructor(src, alt, style) {\n    this.alt = alt;\n    this.src = src;\n    this.classes = [\"mord\"];\n    this.height = 0;\n    this.depth = 0;\n    this.maxFontSize = 0;\n    this.style = style;\n  }\n  hasClass(className) {\n    return this.classes.includes(className);\n  }\n  toNode() {\n    var node = document.createElement(\"img\");\n    node.src = this.src;\n    node.alt = this.alt;\n    node.className = \"mord\";\n    // Apply inline styles\n    for (var key of Object.keys(this.style)) {\n      node.style[key] = this.style[key];\n    }\n    return node;\n  }\n  toMarkup() {\n    var markup = \"<img src=\\\"\" + escape(this.src) + \"\\\"\" + (\" alt=\\\"\" + escape(this.alt) + \"\\\"\");\n    // Add the styles, after hyphenation\n    var styles = \"\";\n    for (var key of Object.keys(this.style)) {\n      styles += hyphenate(key) + \":\" + this.style[key] + \";\";\n    }\n    if (styles) {\n      markup += \" style=\\\"\" + escape(styles) + \"\\\"\";\n    }\n    markup += \"'/>\";\n    return markup;\n  }\n}\nvar iCombinations = {\n  'î': '\\u0131\\u0302',\n  'ï': '\\u0131\\u0308',\n  'í': '\\u0131\\u0301',\n  // 'ī': '\\u0131\\u0304', // enable when we add Extended Latin\n  'ì': '\\u0131\\u0300'\n};\n/**\n * A symbol node contains information about a single symbol. It either renders\n * to a single text node, or a span with a single text node in it, depending on\n * whether it has CSS classes, styles, or needs italic correction.\n */\nclass SymbolNode {\n  constructor(text, height, depth, italic, skew, width, classes, style) {\n    this.text = text;\n    this.height = height || 0;\n    this.depth = depth || 0;\n    this.italic = italic || 0;\n    this.skew = skew || 0;\n    this.width = width || 0;\n    this.classes = classes || [];\n    this.style = style || {};\n    this.maxFontSize = 0;\n    // Mark text from non-Latin scripts with specific classes so that we\n    // can specify which fonts to use.  This allows us to render these\n    // characters with a serif font in situations where the browser would\n    // either default to a sans serif or render a placeholder character.\n    // We use CSS class names like cjk_fallback, hangul_fallback and\n    // brahmic_fallback. See ./unicodeScripts.js for the set of possible\n    // script names\n    var script = scriptFromCodepoint(this.text.charCodeAt(0));\n    if (script) {\n      this.classes.push(script + \"_fallback\");\n    }\n    if (/[îïíì]/.test(this.text)) {\n      // add ī when we add Extended Latin\n      this.text = iCombinations[this.text];\n    }\n  }\n  hasClass(className) {\n    return this.classes.includes(className);\n  }\n  /**\n   * Creates a text node or span from a symbol node. Note that a span is only\n   * created if it is needed.\n   */\n  toNode() {\n    var node = document.createTextNode(this.text);\n    var span = null;\n    if (this.italic > 0) {\n      span = document.createElement(\"span\");\n      span.style.marginRight = makeEm(this.italic);\n    }\n    if (this.classes.length > 0) {\n      span = span || document.createElement(\"span\");\n      span.className = createClass(this.classes);\n    }\n    for (var key of Object.keys(this.style)) {\n      span = span || document.createElement(\"span\");\n      span.style[key] = this.style[key];\n    }\n    if (span) {\n      span.appendChild(node);\n      return span;\n    } else {\n      return node;\n    }\n  }\n  /**\n   * Creates markup for a symbol node.\n   */\n  toMarkup() {\n    // TODO(alpert): More duplication than I'd like from\n    // span.prototype.toMarkup and symbolNode.prototype.toNode...\n    var needsSpan = false;\n    var markup = \"<span\";\n    if (this.classes.length) {\n      needsSpan = true;\n      markup += \" class=\\\"\";\n      markup += escape(createClass(this.classes));\n      markup += \"\\\"\";\n    }\n    var styles = \"\";\n    if (this.italic > 0) {\n      styles += \"margin-right:\" + makeEm(this.italic) + \";\";\n    }\n    for (var key of Object.keys(this.style)) {\n      styles += hyphenate(key) + \":\" + this.style[key] + \";\";\n    }\n    if (styles) {\n      needsSpan = true;\n      markup += \" style=\\\"\" + escape(styles) + \"\\\"\";\n    }\n    var escaped = escape(this.text);\n    if (needsSpan) {\n      markup += \">\";\n      markup += escaped;\n      markup += \"</span>\";\n      return markup;\n    } else {\n      return escaped;\n    }\n  }\n}\n/**\n * SVG nodes are used to render stretchy wide elements.\n */\nclass SvgNode {\n  constructor(children, attributes) {\n    this.children = children || [];\n    this.attributes = attributes || {};\n  }\n  toNode() {\n    var svgNS = \"http://www.w3.org/2000/svg\";\n    var node = document.createElementNS(svgNS, \"svg\");\n    // Apply attributes\n    for (var attr of Object.keys(this.attributes)) {\n      node.setAttribute(attr, this.attributes[attr]);\n    }\n    for (var i = 0; i < this.children.length; i++) {\n      node.appendChild(this.children[i].toNode());\n    }\n    return node;\n  }\n  toMarkup() {\n    var markup = \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\"\";\n    // Apply attributes\n    for (var attr of Object.keys(this.attributes)) {\n      markup += \" \" + attr + \"=\\\"\" + escape(this.attributes[attr]) + \"\\\"\";\n    }\n    markup += \">\";\n    for (var i = 0; i < this.children.length; i++) {\n      markup += this.children[i].toMarkup();\n    }\n    markup += \"</svg>\";\n    return markup;\n  }\n}\nclass PathNode {\n  constructor(pathName, alternate) {\n    this.pathName = pathName;\n    this.alternate = alternate; // Used only for \\sqrt, \\phase, & tall delims\n  }\n  toNode() {\n    var svgNS = \"http://www.w3.org/2000/svg\";\n    var node = document.createElementNS(svgNS, \"path\");\n    if (this.alternate) {\n      node.setAttribute(\"d\", this.alternate);\n    } else {\n      node.setAttribute(\"d\", path[this.pathName]);\n    }\n    return node;\n  }\n  toMarkup() {\n    if (this.alternate) {\n      return \"<path d=\\\"\" + escape(this.alternate) + \"\\\"/>\";\n    } else {\n      return \"<path d=\\\"\" + escape(path[this.pathName]) + \"\\\"/>\";\n    }\n  }\n}\nclass LineNode {\n  constructor(attributes) {\n    this.attributes = attributes || {};\n  }\n  toNode() {\n    var svgNS = \"http://www.w3.org/2000/svg\";\n    var node = document.createElementNS(svgNS, \"line\");\n    // Apply attributes\n    for (var attr of Object.keys(this.attributes)) {\n      node.setAttribute(attr, this.attributes[attr]);\n    }\n    return node;\n  }\n  toMarkup() {\n    var markup = \"<line\";\n    for (var attr of Object.keys(this.attributes)) {\n      markup += \" \" + attr + \"=\\\"\" + escape(this.attributes[attr]) + \"\\\"\";\n    }\n    markup += \"/>\";\n    return markup;\n  }\n}\nfunction assertSymbolDomNode(group) {\n  if (group instanceof SymbolNode) {\n    return group;\n  } else {\n    throw new Error(\"Expected symbolNode but got \" + String(group) + \".\");\n  }\n}\nfunction assertSpan(group) {\n  if (group instanceof Span) {\n    return group;\n  } else {\n    throw new Error(\"Expected span<HtmlDomNode> but got \" + String(group) + \".\");\n  }\n}\n/**\n * Whether an HtmlDomNode has HtmlDomNode children.\n * HtmlDomNode is a base type representing a union of\n * SymbolNode, SvgSpan, DomSpan, Anchor, and documentFragment.\n * In the last three cases, the children are HtmlDomNode[].\n */\nvar hasHtmlDomChildren = node => node instanceof Span || node instanceof Anchor || node instanceof DocumentFragment;\n\n// This file is GENERATED by buildMetrics.sh. DO NOT MODIFY.\nvar fontMetricsData = {\n  \"AMS-Regular\": {\n    \"32\": [0, 0, 0, 0, 0.25],\n    \"65\": [0, 0.68889, 0, 0, 0.72222],\n    \"66\": [0, 0.68889, 0, 0, 0.66667],\n    \"67\": [0, 0.68889, 0, 0, 0.72222],\n    \"68\": [0, 0.68889, 0, 0, 0.72222],\n    \"69\": [0, 0.68889, 0, 0, 0.66667],\n    \"70\": [0, 0.68889, 0, 0, 0.61111],\n    \"71\": [0, 0.68889, 0, 0, 0.77778],\n    \"72\": [0, 0.68889, 0, 0, 0.77778],\n    \"73\": [0, 0.68889, 0, 0, 0.38889],\n    \"74\": [0.16667, 0.68889, 0, 0, 0.5],\n    \"75\": [0, 0.68889, 0, 0, 0.77778],\n    \"76\": [0, 0.68889, 0, 0, 0.66667],\n    \"77\": [0, 0.68889, 0, 0, 0.94445],\n    \"78\": [0, 0.68889, 0, 0, 0.72222],\n    \"79\": [0.16667, 0.68889, 0, 0, 0.77778],\n    \"80\": [0, 0.68889, 0, 0, 0.61111],\n    \"81\": [0.16667, 0.68889, 0, 0, 0.77778],\n    \"82\": [0, 0.68889, 0, 0, 0.72222],\n    \"83\": [0, 0.68889, 0, 0, 0.55556],\n    \"84\": [0, 0.68889, 0, 0, 0.66667],\n    \"85\": [0, 0.68889, 0, 0, 0.72222],\n    \"86\": [0, 0.68889, 0, 0, 0.72222],\n    \"87\": [0, 0.68889, 0, 0, 1.0],\n    \"88\": [0, 0.68889, 0, 0, 0.72222],\n    \"89\": [0, 0.68889, 0, 0, 0.72222],\n    \"90\": [0, 0.68889, 0, 0, 0.66667],\n    \"107\": [0, 0.68889, 0, 0, 0.55556],\n    \"160\": [0, 0, 0, 0, 0.25],\n    \"165\": [0, 0.675, 0.025, 0, 0.75],\n    \"174\": [0.15559, 0.69224, 0, 0, 0.94666],\n    \"240\": [0, 0.68889, 0, 0, 0.55556],\n    \"295\": [0, 0.68889, 0, 0, 0.54028],\n    \"710\": [0, 0.825, 0, 0, 2.33334],\n    \"732\": [0, 0.9, 0, 0, 2.33334],\n    \"770\": [0, 0.825, 0, 0, 2.33334],\n    \"771\": [0, 0.9, 0, 0, 2.33334],\n    \"989\": [0.08167, 0.58167, 0, 0, 0.77778],\n    \"1008\": [0, 0.43056, 0.04028, 0, 0.66667],\n    \"8245\": [0, 0.54986, 0, 0, 0.275],\n    \"8463\": [0, 0.68889, 0, 0, 0.54028],\n    \"8487\": [0, 0.68889, 0, 0, 0.72222],\n    \"8498\": [0, 0.68889, 0, 0, 0.55556],\n    \"8502\": [0, 0.68889, 0, 0, 0.66667],\n    \"8503\": [0, 0.68889, 0, 0, 0.44445],\n    \"8504\": [0, 0.68889, 0, 0, 0.66667],\n    \"8513\": [0, 0.68889, 0, 0, 0.63889],\n    \"8592\": [-0.03598, 0.46402, 0, 0, 0.5],\n    \"8594\": [-0.03598, 0.46402, 0, 0, 0.5],\n    \"8602\": [-0.13313, 0.36687, 0, 0, 1.0],\n    \"8603\": [-0.13313, 0.36687, 0, 0, 1.0],\n    \"8606\": [0.01354, 0.52239, 0, 0, 1.0],\n    \"8608\": [0.01354, 0.52239, 0, 0, 1.0],\n    \"8610\": [0.01354, 0.52239, 0, 0, 1.11111],\n    \"8611\": [0.01354, 0.52239, 0, 0, 1.11111],\n    \"8619\": [0, 0.54986, 0, 0, 1.0],\n    \"8620\": [0, 0.54986, 0, 0, 1.0],\n    \"8621\": [-0.13313, 0.37788, 0, 0, 1.38889],\n    \"8622\": [-0.13313, 0.36687, 0, 0, 1.0],\n    \"8624\": [0, 0.69224, 0, 0, 0.5],\n    \"8625\": [0, 0.69224, 0, 0, 0.5],\n    \"8630\": [0, 0.43056, 0, 0, 1.0],\n    \"8631\": [0, 0.43056, 0, 0, 1.0],\n    \"8634\": [0.08198, 0.58198, 0, 0, 0.77778],\n    \"8635\": [0.08198, 0.58198, 0, 0, 0.77778],\n    \"8638\": [0.19444, 0.69224, 0, 0, 0.41667],\n    \"8639\": [0.19444, 0.69224, 0, 0, 0.41667],\n    \"8642\": [0.19444, 0.69224, 0, 0, 0.41667],\n    \"8643\": [0.19444, 0.69224, 0, 0, 0.41667],\n    \"8644\": [0.1808, 0.675, 0, 0, 1.0],\n    \"8646\": [0.1808, 0.675, 0, 0, 1.0],\n    \"8647\": [0.1808, 0.675, 0, 0, 1.0],\n    \"8648\": [0.19444, 0.69224, 0, 0, 0.83334],\n    \"8649\": [0.1808, 0.675, 0, 0, 1.0],\n    \"8650\": [0.19444, 0.69224, 0, 0, 0.83334],\n    \"8651\": [0.01354, 0.52239, 0, 0, 1.0],\n    \"8652\": [0.01354, 0.52239, 0, 0, 1.0],\n    \"8653\": [-0.13313, 0.36687, 0, 0, 1.0],\n    \"8654\": [-0.13313, 0.36687, 0, 0, 1.0],\n    \"8655\": [-0.13313, 0.36687, 0, 0, 1.0],\n    \"8666\": [0.13667, 0.63667, 0, 0, 1.0],\n    \"8667\": [0.13667, 0.63667, 0, 0, 1.0],\n    \"8669\": [-0.13313, 0.37788, 0, 0, 1.0],\n    \"8672\": [-0.064, 0.437, 0, 0, 1.334],\n    \"8674\": [-0.064, 0.437, 0, 0, 1.334],\n    \"8705\": [0, 0.825, 0, 0, 0.5],\n    \"8708\": [0, 0.68889, 0, 0, 0.55556],\n    \"8709\": [0.08167, 0.58167, 0, 0, 0.77778],\n    \"8717\": [0, 0.43056, 0, 0, 0.42917],\n    \"8722\": [-0.03598, 0.46402, 0, 0, 0.5],\n    \"8724\": [0.08198, 0.69224, 0, 0, 0.77778],\n    \"8726\": [0.08167, 0.58167, 0, 0, 0.77778],\n    \"8733\": [0, 0.69224, 0, 0, 0.77778],\n    \"8736\": [0, 0.69224, 0, 0, 0.72222],\n    \"8737\": [0, 0.69224, 0, 0, 0.72222],\n    \"8738\": [0.03517, 0.52239, 0, 0, 0.72222],\n    \"8739\": [0.08167, 0.58167, 0, 0, 0.22222],\n    \"8740\": [0.25142, 0.74111, 0, 0, 0.27778],\n    \"8741\": [0.08167, 0.58167, 0, 0, 0.38889],\n    \"8742\": [0.25142, 0.74111, 0, 0, 0.5],\n    \"8756\": [0, 0.69224, 0, 0, 0.66667],\n    \"8757\": [0, 0.69224, 0, 0, 0.66667],\n    \"8764\": [-0.13313, 0.36687, 0, 0, 0.77778],\n    \"8765\": [-0.13313, 0.37788, 0, 0, 0.77778],\n    \"8769\": [-0.13313, 0.36687, 0, 0, 0.77778],\n    \"8770\": [-0.03625, 0.46375, 0, 0, 0.77778],\n    \"8774\": [0.30274, 0.79383, 0, 0, 0.77778],\n    \"8776\": [-0.01688, 0.48312, 0, 0, 0.77778],\n    \"8778\": [0.08167, 0.58167, 0, 0, 0.77778],\n    \"8782\": [0.06062, 0.54986, 0, 0, 0.77778],\n    \"8783\": [0.06062, 0.54986, 0, 0, 0.77778],\n    \"8785\": [0.08198, 0.58198, 0, 0, 0.77778],\n    \"8786\": [0.08198, 0.58198, 0, 0, 0.77778],\n    \"8787\": [0.08198, 0.58198, 0, 0, 0.77778],\n    \"8790\": [0, 0.69224, 0, 0, 0.77778],\n    \"8791\": [0.22958, 0.72958, 0, 0, 0.77778],\n    \"8796\": [0.08198, 0.91667, 0, 0, 0.77778],\n    \"8806\": [0.25583, 0.75583, 0, 0, 0.77778],\n    \"8807\": [0.25583, 0.75583, 0, 0, 0.77778],\n    \"8808\": [0.25142, 0.75726, 0, 0, 0.77778],\n    \"8809\": [0.25142, 0.75726, 0, 0, 0.77778],\n    \"8812\": [0.25583, 0.75583, 0, 0, 0.5],\n    \"8814\": [0.20576, 0.70576, 0, 0, 0.77778],\n    \"8815\": [0.20576, 0.70576, 0, 0, 0.77778],\n    \"8816\": [0.30274, 0.79383, 0, 0, 0.77778],\n    \"8817\": [0.30274, 0.79383, 0, 0, 0.77778],\n    \"8818\": [0.22958, 0.72958, 0, 0, 0.77778],\n    \"8819\": [0.22958, 0.72958, 0, 0, 0.77778],\n    \"8822\": [0.1808, 0.675, 0, 0, 0.77778],\n    \"8823\": [0.1808, 0.675, 0, 0, 0.77778],\n    \"8828\": [0.13667, 0.63667, 0, 0, 0.77778],\n    \"8829\": [0.13667, 0.63667, 0, 0, 0.77778],\n    \"8830\": [0.22958, 0.72958, 0, 0, 0.77778],\n    \"8831\": [0.22958, 0.72958, 0, 0, 0.77778],\n    \"8832\": [0.20576, 0.70576, 0, 0, 0.77778],\n    \"8833\": [0.20576, 0.70576, 0, 0, 0.77778],\n    \"8840\": [0.30274, 0.79383, 0, 0, 0.77778],\n    \"8841\": [0.30274, 0.79383, 0, 0, 0.77778],\n    \"8842\": [0.13597, 0.63597, 0, 0, 0.77778],\n    \"8843\": [0.13597, 0.63597, 0, 0, 0.77778],\n    \"8847\": [0.03517, 0.54986, 0, 0, 0.77778],\n    \"8848\": [0.03517, 0.54986, 0, 0, 0.77778],\n    \"8858\": [0.08198, 0.58198, 0, 0, 0.77778],\n    \"8859\": [0.08198, 0.58198, 0, 0, 0.77778],\n    \"8861\": [0.08198, 0.58198, 0, 0, 0.77778],\n    \"8862\": [0, 0.675, 0, 0, 0.77778],\n    \"8863\": [0, 0.675, 0, 0, 0.77778],\n    \"8864\": [0, 0.675, 0, 0, 0.77778],\n    \"8865\": [0, 0.675, 0, 0, 0.77778],\n    \"8872\": [0, 0.69224, 0, 0, 0.61111],\n    \"8873\": [0, 0.69224, 0, 0, 0.72222],\n    \"8874\": [0, 0.69224, 0, 0, 0.88889],\n    \"8876\": [0, 0.68889, 0, 0, 0.61111],\n    \"8877\": [0, 0.68889, 0, 0, 0.61111],\n    \"8878\": [0, 0.68889, 0, 0, 0.72222],\n    \"8879\": [0, 0.68889, 0, 0, 0.72222],\n    \"8882\": [0.03517, 0.54986, 0, 0, 0.77778],\n    \"8883\": [0.03517, 0.54986, 0, 0, 0.77778],\n    \"8884\": [0.13667, 0.63667, 0, 0, 0.77778],\n    \"8885\": [0.13667, 0.63667, 0, 0, 0.77778],\n    \"8888\": [0, 0.54986, 0, 0, 1.11111],\n    \"8890\": [0.19444, 0.43056, 0, 0, 0.55556],\n    \"8891\": [0.19444, 0.69224, 0, 0, 0.61111],\n    \"8892\": [0.19444, 0.69224, 0, 0, 0.61111],\n    \"8901\": [0, 0.54986, 0, 0, 0.27778],\n    \"8903\": [0.08167, 0.58167, 0, 0, 0.77778],\n    \"8905\": [0.08167, 0.58167, 0, 0, 0.77778],\n    \"8906\": [0.08167, 0.58167, 0, 0, 0.77778],\n    \"8907\": [0, 0.69224, 0, 0, 0.77778],\n    \"8908\": [0, 0.69224, 0, 0, 0.77778],\n    \"8909\": [-0.03598, 0.46402, 0, 0, 0.77778],\n    \"8910\": [0, 0.54986, 0, 0, 0.76042],\n    \"8911\": [0, 0.54986, 0, 0, 0.76042],\n    \"8912\": [0.03517, 0.54986, 0, 0, 0.77778],\n    \"8913\": [0.03517, 0.54986, 0, 0, 0.77778],\n    \"8914\": [0, 0.54986, 0, 0, 0.66667],\n    \"8915\": [0, 0.54986, 0, 0, 0.66667],\n    \"8916\": [0, 0.69224, 0, 0, 0.66667],\n    \"8918\": [0.0391, 0.5391, 0, 0, 0.77778],\n    \"8919\": [0.0391, 0.5391, 0, 0, 0.77778],\n    \"8920\": [0.03517, 0.54986, 0, 0, 1.33334],\n    \"8921\": [0.03517, 0.54986, 0, 0, 1.33334],\n    \"8922\": [0.38569, 0.88569, 0, 0, 0.77778],\n    \"8923\": [0.38569, 0.88569, 0, 0, 0.77778],\n    \"8926\": [0.13667, 0.63667, 0, 0, 0.77778],\n    \"8927\": [0.13667, 0.63667, 0, 0, 0.77778],\n    \"8928\": [0.30274, 0.79383, 0, 0, 0.77778],\n    \"8929\": [0.30274, 0.79383, 0, 0, 0.77778],\n    \"8934\": [0.23222, 0.74111, 0, 0, 0.77778],\n    \"8935\": [0.23222, 0.74111, 0, 0, 0.77778],\n    \"8936\": [0.23222, 0.74111, 0, 0, 0.77778],\n    \"8937\": [0.23222, 0.74111, 0, 0, 0.77778],\n    \"8938\": [0.20576, 0.70576, 0, 0, 0.77778],\n    \"8939\": [0.20576, 0.70576, 0, 0, 0.77778],\n    \"8940\": [0.30274, 0.79383, 0, 0, 0.77778],\n    \"8941\": [0.30274, 0.79383, 0, 0, 0.77778],\n    \"8994\": [0.19444, 0.69224, 0, 0, 0.77778],\n    \"8995\": [0.19444, 0.69224, 0, 0, 0.77778],\n    \"9416\": [0.15559, 0.69224, 0, 0, 0.90222],\n    \"9484\": [0, 0.69224, 0, 0, 0.5],\n    \"9488\": [0, 0.69224, 0, 0, 0.5],\n    \"9492\": [0, 0.37788, 0, 0, 0.5],\n    \"9496\": [0, 0.37788, 0, 0, 0.5],\n    \"9585\": [0.19444, 0.68889, 0, 0, 0.88889],\n    \"9586\": [0.19444, 0.74111, 0, 0, 0.88889],\n    \"9632\": [0, 0.675, 0, 0, 0.77778],\n    \"9633\": [0, 0.675, 0, 0, 0.77778],\n    \"9650\": [0, 0.54986, 0, 0, 0.72222],\n    \"9651\": [0, 0.54986, 0, 0, 0.72222],\n    \"9654\": [0.03517, 0.54986, 0, 0, 0.77778],\n    \"9660\": [0, 0.54986, 0, 0, 0.72222],\n    \"9661\": [0, 0.54986, 0, 0, 0.72222],\n    \"9664\": [0.03517, 0.54986, 0, 0, 0.77778],\n    \"9674\": [0.11111, 0.69224, 0, 0, 0.66667],\n    \"9733\": [0.19444, 0.69224, 0, 0, 0.94445],\n    \"10003\": [0, 0.69224, 0, 0, 0.83334],\n    \"10016\": [0, 0.69224, 0, 0, 0.83334],\n    \"10731\": [0.11111, 0.69224, 0, 0, 0.66667],\n    \"10846\": [0.19444, 0.75583, 0, 0, 0.61111],\n    \"10877\": [0.13667, 0.63667, 0, 0, 0.77778],\n    \"10878\": [0.13667, 0.63667, 0, 0, 0.77778],\n    \"10885\": [0.25583, 0.75583, 0, 0, 0.77778],\n    \"10886\": [0.25583, 0.75583, 0, 0, 0.77778],\n    \"10887\": [0.13597, 0.63597, 0, 0, 0.77778],\n    \"10888\": [0.13597, 0.63597, 0, 0, 0.77778],\n    \"10889\": [0.26167, 0.75726, 0, 0, 0.77778],\n    \"10890\": [0.26167, 0.75726, 0, 0, 0.77778],\n    \"10891\": [0.48256, 0.98256, 0, 0, 0.77778],\n    \"10892\": [0.48256, 0.98256, 0, 0, 0.77778],\n    \"10901\": [0.13667, 0.63667, 0, 0, 0.77778],\n    \"10902\": [0.13667, 0.63667, 0, 0, 0.77778],\n    \"10933\": [0.25142, 0.75726, 0, 0, 0.77778],\n    \"10934\": [0.25142, 0.75726, 0, 0, 0.77778],\n    \"10935\": [0.26167, 0.75726, 0, 0, 0.77778],\n    \"10936\": [0.26167, 0.75726, 0, 0, 0.77778],\n    \"10937\": [0.26167, 0.75726, 0, 0, 0.77778],\n    \"10938\": [0.26167, 0.75726, 0, 0, 0.77778],\n    \"10949\": [0.25583, 0.75583, 0, 0, 0.77778],\n    \"10950\": [0.25583, 0.75583, 0, 0, 0.77778],\n    \"10955\": [0.28481, 0.79383, 0, 0, 0.77778],\n    \"10956\": [0.28481, 0.79383, 0, 0, 0.77778],\n    \"57350\": [0.08167, 0.58167, 0, 0, 0.22222],\n    \"57351\": [0.08167, 0.58167, 0, 0, 0.38889],\n    \"57352\": [0.08167, 0.58167, 0, 0, 0.77778],\n    \"57353\": [0, 0.43056, 0.04028, 0, 0.66667],\n    \"57356\": [0.25142, 0.75726, 0, 0, 0.77778],\n    \"57357\": [0.25142, 0.75726, 0, 0, 0.77778],\n    \"57358\": [0.41951, 0.91951, 0, 0, 0.77778],\n    \"57359\": [0.30274, 0.79383, 0, 0, 0.77778],\n    \"57360\": [0.30274, 0.79383, 0, 0, 0.77778],\n    \"57361\": [0.41951, 0.91951, 0, 0, 0.77778],\n    \"57366\": [0.25142, 0.75726, 0, 0, 0.77778],\n    \"57367\": [0.25142, 0.75726, 0, 0, 0.77778],\n    \"57368\": [0.25142, 0.75726, 0, 0, 0.77778],\n    \"57369\": [0.25142, 0.75726, 0, 0, 0.77778],\n    \"57370\": [0.13597, 0.63597, 0, 0, 0.77778],\n    \"57371\": [0.13597, 0.63597, 0, 0, 0.77778]\n  },\n  \"Caligraphic-Regular\": {\n    \"32\": [0, 0, 0, 0, 0.25],\n    \"65\": [0, 0.68333, 0, 0.19445, 0.79847],\n    \"66\": [0, 0.68333, 0.03041, 0.13889, 0.65681],\n    \"67\": [0, 0.68333, 0.05834, 0.13889, 0.52653],\n    \"68\": [0, 0.68333, 0.02778, 0.08334, 0.77139],\n    \"69\": [0, 0.68333, 0.08944, 0.11111, 0.52778],\n    \"70\": [0, 0.68333, 0.09931, 0.11111, 0.71875],\n    \"71\": [0.09722, 0.68333, 0.0593, 0.11111, 0.59487],\n    \"72\": [0, 0.68333, 0.00965, 0.11111, 0.84452],\n    \"73\": [0, 0.68333, 0.07382, 0, 0.54452],\n    \"74\": [0.09722, 0.68333, 0.18472, 0.16667, 0.67778],\n    \"75\": [0, 0.68333, 0.01445, 0.05556, 0.76195],\n    \"76\": [0, 0.68333, 0, 0.13889, 0.68972],\n    \"77\": [0, 0.68333, 0, 0.13889, 1.2009],\n    \"78\": [0, 0.68333, 0.14736, 0.08334, 0.82049],\n    \"79\": [0, 0.68333, 0.02778, 0.11111, 0.79611],\n    \"80\": [0, 0.68333, 0.08222, 0.08334, 0.69556],\n    \"81\": [0.09722, 0.68333, 0, 0.11111, 0.81667],\n    \"82\": [0, 0.68333, 0, 0.08334, 0.8475],\n    \"83\": [0, 0.68333, 0.075, 0.13889, 0.60556],\n    \"84\": [0, 0.68333, 0.25417, 0, 0.54464],\n    \"85\": [0, 0.68333, 0.09931, 0.08334, 0.62583],\n    \"86\": [0, 0.68333, 0.08222, 0, 0.61278],\n    \"87\": [0, 0.68333, 0.08222, 0.08334, 0.98778],\n    \"88\": [0, 0.68333, 0.14643, 0.13889, 0.7133],\n    \"89\": [0.09722, 0.68333, 0.08222, 0.08334, 0.66834],\n    \"90\": [0, 0.68333, 0.07944, 0.13889, 0.72473],\n    \"160\": [0, 0, 0, 0, 0.25]\n  },\n  \"Fraktur-Regular\": {\n    \"32\": [0, 0, 0, 0, 0.25],\n    \"33\": [0, 0.69141, 0, 0, 0.29574],\n    \"34\": [0, 0.69141, 0, 0, 0.21471],\n    \"38\": [0, 0.69141, 0, 0, 0.73786],\n    \"39\": [0, 0.69141, 0, 0, 0.21201],\n    \"40\": [0.24982, 0.74947, 0, 0, 0.38865],\n    \"41\": [0.24982, 0.74947, 0, 0, 0.38865],\n    \"42\": [0, 0.62119, 0, 0, 0.27764],\n    \"43\": [0.08319, 0.58283, 0, 0, 0.75623],\n    \"44\": [0, 0.10803, 0, 0, 0.27764],\n    \"45\": [0.08319, 0.58283, 0, 0, 0.75623],\n    \"46\": [0, 0.10803, 0, 0, 0.27764],\n    \"47\": [0.24982, 0.74947, 0, 0, 0.50181],\n    \"48\": [0, 0.47534, 0, 0, 0.50181],\n    \"49\": [0, 0.47534, 0, 0, 0.50181],\n    \"50\": [0, 0.47534, 0, 0, 0.50181],\n    \"51\": [0.18906, 0.47534, 0, 0, 0.50181],\n    \"52\": [0.18906, 0.47534, 0, 0, 0.50181],\n    \"53\": [0.18906, 0.47534, 0, 0, 0.50181],\n    \"54\": [0, 0.69141, 0, 0, 0.50181],\n    \"55\": [0.18906, 0.47534, 0, 0, 0.50181],\n    \"56\": [0, 0.69141, 0, 0, 0.50181],\n    \"57\": [0.18906, 0.47534, 0, 0, 0.50181],\n    \"58\": [0, 0.47534, 0, 0, 0.21606],\n    \"59\": [0.12604, 0.47534, 0, 0, 0.21606],\n    \"61\": [-0.13099, 0.36866, 0, 0, 0.75623],\n    \"63\": [0, 0.69141, 0, 0, 0.36245],\n    \"65\": [0, 0.69141, 0, 0, 0.7176],\n    \"66\": [0, 0.69141, 0, 0, 0.88397],\n    \"67\": [0, 0.69141, 0, 0, 0.61254],\n    \"68\": [0, 0.69141, 0, 0, 0.83158],\n    \"69\": [0, 0.69141, 0, 0, 0.66278],\n    \"70\": [0.12604, 0.69141, 0, 0, 0.61119],\n    \"71\": [0, 0.69141, 0, 0, 0.78539],\n    \"72\": [0.06302, 0.69141, 0, 0, 0.7203],\n    \"73\": [0, 0.69141, 0, 0, 0.55448],\n    \"74\": [0.12604, 0.69141, 0, 0, 0.55231],\n    \"75\": [0, 0.69141, 0, 0, 0.66845],\n    \"76\": [0, 0.69141, 0, 0, 0.66602],\n    \"77\": [0, 0.69141, 0, 0, 1.04953],\n    \"78\": [0, 0.69141, 0, 0, 0.83212],\n    \"79\": [0, 0.69141, 0, 0, 0.82699],\n    \"80\": [0.18906, 0.69141, 0, 0, 0.82753],\n    \"81\": [0.03781, 0.69141, 0, 0, 0.82699],\n    \"82\": [0, 0.69141, 0, 0, 0.82807],\n    \"83\": [0, 0.69141, 0, 0, 0.82861],\n    \"84\": [0, 0.69141, 0, 0, 0.66899],\n    \"85\": [0, 0.69141, 0, 0, 0.64576],\n    \"86\": [0, 0.69141, 0, 0, 0.83131],\n    \"87\": [0, 0.69141, 0, 0, 1.04602],\n    \"88\": [0, 0.69141, 0, 0, 0.71922],\n    \"89\": [0.18906, 0.69141, 0, 0, 0.83293],\n    \"90\": [0.12604, 0.69141, 0, 0, 0.60201],\n    \"91\": [0.24982, 0.74947, 0, 0, 0.27764],\n    \"93\": [0.24982, 0.74947, 0, 0, 0.27764],\n    \"94\": [0, 0.69141, 0, 0, 0.49965],\n    \"97\": [0, 0.47534, 0, 0, 0.50046],\n    \"98\": [0, 0.69141, 0, 0, 0.51315],\n    \"99\": [0, 0.47534, 0, 0, 0.38946],\n    \"100\": [0, 0.62119, 0, 0, 0.49857],\n    \"101\": [0, 0.47534, 0, 0, 0.40053],\n    \"102\": [0.18906, 0.69141, 0, 0, 0.32626],\n    \"103\": [0.18906, 0.47534, 0, 0, 0.5037],\n    \"104\": [0.18906, 0.69141, 0, 0, 0.52126],\n    \"105\": [0, 0.69141, 0, 0, 0.27899],\n    \"106\": [0, 0.69141, 0, 0, 0.28088],\n    \"107\": [0, 0.69141, 0, 0, 0.38946],\n    \"108\": [0, 0.69141, 0, 0, 0.27953],\n    \"109\": [0, 0.47534, 0, 0, 0.76676],\n    \"110\": [0, 0.47534, 0, 0, 0.52666],\n    \"111\": [0, 0.47534, 0, 0, 0.48885],\n    \"112\": [0.18906, 0.52396, 0, 0, 0.50046],\n    \"113\": [0.18906, 0.47534, 0, 0, 0.48912],\n    \"114\": [0, 0.47534, 0, 0, 0.38919],\n    \"115\": [0, 0.47534, 0, 0, 0.44266],\n    \"116\": [0, 0.62119, 0, 0, 0.33301],\n    \"117\": [0, 0.47534, 0, 0, 0.5172],\n    \"118\": [0, 0.52396, 0, 0, 0.5118],\n    \"119\": [0, 0.52396, 0, 0, 0.77351],\n    \"120\": [0.18906, 0.47534, 0, 0, 0.38865],\n    \"121\": [0.18906, 0.47534, 0, 0, 0.49884],\n    \"122\": [0.18906, 0.47534, 0, 0, 0.39054],\n    \"160\": [0, 0, 0, 0, 0.25],\n    \"8216\": [0, 0.69141, 0, 0, 0.21471],\n    \"8217\": [0, 0.69141, 0, 0, 0.21471],\n    \"58112\": [0, 0.62119, 0, 0, 0.49749],\n    \"58113\": [0, 0.62119, 0, 0, 0.4983],\n    \"58114\": [0.18906, 0.69141, 0, 0, 0.33328],\n    \"58115\": [0.18906, 0.69141, 0, 0, 0.32923],\n    \"58116\": [0.18906, 0.47534, 0, 0, 0.50343],\n    \"58117\": [0, 0.69141, 0, 0, 0.33301],\n    \"58118\": [0, 0.62119, 0, 0, 0.33409],\n    \"58119\": [0, 0.47534, 0, 0, 0.50073]\n  },\n  \"Main-Bold\": {\n    \"32\": [0, 0, 0, 0, 0.25],\n    \"33\": [0, 0.69444, 0, 0, 0.35],\n    \"34\": [0, 0.69444, 0, 0, 0.60278],\n    \"35\": [0.19444, 0.69444, 0, 0, 0.95833],\n    \"36\": [0.05556, 0.75, 0, 0, 0.575],\n    \"37\": [0.05556, 0.75, 0, 0, 0.95833],\n    \"38\": [0, 0.69444, 0, 0, 0.89444],\n    \"39\": [0, 0.69444, 0, 0, 0.31944],\n    \"40\": [0.25, 0.75, 0, 0, 0.44722],\n    \"41\": [0.25, 0.75, 0, 0, 0.44722],\n    \"42\": [0, 0.75, 0, 0, 0.575],\n    \"43\": [0.13333, 0.63333, 0, 0, 0.89444],\n    \"44\": [0.19444, 0.15556, 0, 0, 0.31944],\n    \"45\": [0, 0.44444, 0, 0, 0.38333],\n    \"46\": [0, 0.15556, 0, 0, 0.31944],\n    \"47\": [0.25, 0.75, 0, 0, 0.575],\n    \"48\": [0, 0.64444, 0, 0, 0.575],\n    \"49\": [0, 0.64444, 0, 0, 0.575],\n    \"50\": [0, 0.64444, 0, 0, 0.575],\n    \"51\": [0, 0.64444, 0, 0, 0.575],\n    \"52\": [0, 0.64444, 0, 0, 0.575],\n    \"53\": [0, 0.64444, 0, 0, 0.575],\n    \"54\": [0, 0.64444, 0, 0, 0.575],\n    \"55\": [0, 0.64444, 0, 0, 0.575],\n    \"56\": [0, 0.64444, 0, 0, 0.575],\n    \"57\": [0, 0.64444, 0, 0, 0.575],\n    \"58\": [0, 0.44444, 0, 0, 0.31944],\n    \"59\": [0.19444, 0.44444, 0, 0, 0.31944],\n    \"60\": [0.08556, 0.58556, 0, 0, 0.89444],\n    \"61\": [-0.10889, 0.39111, 0, 0, 0.89444],\n    \"62\": [0.08556, 0.58556, 0, 0, 0.89444],\n    \"63\": [0, 0.69444, 0, 0, 0.54305],\n    \"64\": [0, 0.69444, 0, 0, 0.89444],\n    \"65\": [0, 0.68611, 0, 0, 0.86944],\n    \"66\": [0, 0.68611, 0, 0, 0.81805],\n    \"67\": [0, 0.68611, 0, 0, 0.83055],\n    \"68\": [0, 0.68611, 0, 0, 0.88194],\n    \"69\": [0, 0.68611, 0, 0, 0.75555],\n    \"70\": [0, 0.68611, 0, 0, 0.72361],\n    \"71\": [0, 0.68611, 0, 0, 0.90416],\n    \"72\": [0, 0.68611, 0, 0, 0.9],\n    \"73\": [0, 0.68611, 0, 0, 0.43611],\n    \"74\": [0, 0.68611, 0, 0, 0.59444],\n    \"75\": [0, 0.68611, 0, 0, 0.90138],\n    \"76\": [0, 0.68611, 0, 0, 0.69166],\n    \"77\": [0, 0.68611, 0, 0, 1.09166],\n    \"78\": [0, 0.68611, 0, 0, 0.9],\n    \"79\": [0, 0.68611, 0, 0, 0.86388],\n    \"80\": [0, 0.68611, 0, 0, 0.78611],\n    \"81\": [0.19444, 0.68611, 0, 0, 0.86388],\n    \"82\": [0, 0.68611, 0, 0, 0.8625],\n    \"83\": [0, 0.68611, 0, 0, 0.63889],\n    \"84\": [0, 0.68611, 0, 0, 0.8],\n    \"85\": [0, 0.68611, 0, 0, 0.88472],\n    \"86\": [0, 0.68611, 0.01597, 0, 0.86944],\n    \"87\": [0, 0.68611, 0.01597, 0, 1.18888],\n    \"88\": [0, 0.68611, 0, 0, 0.86944],\n    \"89\": [0, 0.68611, 0.02875, 0, 0.86944],\n    \"90\": [0, 0.68611, 0, 0, 0.70277],\n    \"91\": [0.25, 0.75, 0, 0, 0.31944],\n    \"92\": [0.25, 0.75, 0, 0, 0.575],\n    \"93\": [0.25, 0.75, 0, 0, 0.31944],\n    \"94\": [0, 0.69444, 0, 0, 0.575],\n    \"95\": [0.31, 0.13444, 0.03194, 0, 0.575],\n    \"97\": [0, 0.44444, 0, 0, 0.55902],\n    \"98\": [0, 0.69444, 0, 0, 0.63889],\n    \"99\": [0, 0.44444, 0, 0, 0.51111],\n    \"100\": [0, 0.69444, 0, 0, 0.63889],\n    \"101\": [0, 0.44444, 0, 0, 0.52708],\n    \"102\": [0, 0.69444, 0.10903, 0, 0.35139],\n    \"103\": [0.19444, 0.44444, 0.01597, 0, 0.575],\n    \"104\": [0, 0.69444, 0, 0, 0.63889],\n    \"105\": [0, 0.69444, 0, 0, 0.31944],\n    \"106\": [0.19444, 0.69444, 0, 0, 0.35139],\n    \"107\": [0, 0.69444, 0, 0, 0.60694],\n    \"108\": [0, 0.69444, 0, 0, 0.31944],\n    \"109\": [0, 0.44444, 0, 0, 0.95833],\n    \"110\": [0, 0.44444, 0, 0, 0.63889],\n    \"111\": [0, 0.44444, 0, 0, 0.575],\n    \"112\": [0.19444, 0.44444, 0, 0, 0.63889],\n    \"113\": [0.19444, 0.44444, 0, 0, 0.60694],\n    \"114\": [0, 0.44444, 0, 0, 0.47361],\n    \"115\": [0, 0.44444, 0, 0, 0.45361],\n    \"116\": [0, 0.63492, 0, 0, 0.44722],\n    \"117\": [0, 0.44444, 0, 0, 0.63889],\n    \"118\": [0, 0.44444, 0.01597, 0, 0.60694],\n    \"119\": [0, 0.44444, 0.01597, 0, 0.83055],\n    \"120\": [0, 0.44444, 0, 0, 0.60694],\n    \"121\": [0.19444, 0.44444, 0.01597, 0, 0.60694],\n    \"122\": [0, 0.44444, 0, 0, 0.51111],\n    \"123\": [0.25, 0.75, 0, 0, 0.575],\n    \"124\": [0.25, 0.75, 0, 0, 0.31944],\n    \"125\": [0.25, 0.75, 0, 0, 0.575],\n    \"126\": [0.35, 0.34444, 0, 0, 0.575],\n    \"160\": [0, 0, 0, 0, 0.25],\n    \"163\": [0, 0.69444, 0, 0, 0.86853],\n    \"168\": [0, 0.69444, 0, 0, 0.575],\n    \"172\": [0, 0.44444, 0, 0, 0.76666],\n    \"176\": [0, 0.69444, 0, 0, 0.86944],\n    \"177\": [0.13333, 0.63333, 0, 0, 0.89444],\n    \"184\": [0.17014, 0, 0, 0, 0.51111],\n    \"198\": [0, 0.68611, 0, 0, 1.04166],\n    \"215\": [0.13333, 0.63333, 0, 0, 0.89444],\n    \"216\": [0.04861, 0.73472, 0, 0, 0.89444],\n    \"223\": [0, 0.69444, 0, 0, 0.59722],\n    \"230\": [0, 0.44444, 0, 0, 0.83055],\n    \"247\": [0.13333, 0.63333, 0, 0, 0.89444],\n    \"248\": [0.09722, 0.54167, 0, 0, 0.575],\n    \"305\": [0, 0.44444, 0, 0, 0.31944],\n    \"338\": [0, 0.68611, 0, 0, 1.16944],\n    \"339\": [0, 0.44444, 0, 0, 0.89444],\n    \"567\": [0.19444, 0.44444, 0, 0, 0.35139],\n    \"710\": [0, 0.69444, 0, 0, 0.575],\n    \"711\": [0, 0.63194, 0, 0, 0.575],\n    \"713\": [0, 0.59611, 0, 0, 0.575],\n    \"714\": [0, 0.69444, 0, 0, 0.575],\n    \"715\": [0, 0.69444, 0, 0, 0.575],\n    \"728\": [0, 0.69444, 0, 0, 0.575],\n    \"729\": [0, 0.69444, 0, 0, 0.31944],\n    \"730\": [0, 0.69444, 0, 0, 0.86944],\n    \"732\": [0, 0.69444, 0, 0, 0.575],\n    \"733\": [0, 0.69444, 0, 0, 0.575],\n    \"915\": [0, 0.68611, 0, 0, 0.69166],\n    \"916\": [0, 0.68611, 0, 0, 0.95833],\n    \"920\": [0, 0.68611, 0, 0, 0.89444],\n    \"923\": [0, 0.68611, 0, 0, 0.80555],\n    \"926\": [0, 0.68611, 0, 0, 0.76666],\n    \"928\": [0, 0.68611, 0, 0, 0.9],\n    \"931\": [0, 0.68611, 0, 0, 0.83055],\n    \"933\": [0, 0.68611, 0, 0, 0.89444],\n    \"934\": [0, 0.68611, 0, 0, 0.83055],\n    \"936\": [0, 0.68611, 0, 0, 0.89444],\n    \"937\": [0, 0.68611, 0, 0, 0.83055],\n    \"8211\": [0, 0.44444, 0.03194, 0, 0.575],\n    \"8212\": [0, 0.44444, 0.03194, 0, 1.14999],\n    \"8216\": [0, 0.69444, 0, 0, 0.31944],\n    \"8217\": [0, 0.69444, 0, 0, 0.31944],\n    \"8220\": [0, 0.69444, 0, 0, 0.60278],\n    \"8221\": [0, 0.69444, 0, 0, 0.60278],\n    \"8224\": [0.19444, 0.69444, 0, 0, 0.51111],\n    \"8225\": [0.19444, 0.69444, 0, 0, 0.51111],\n    \"8242\": [0, 0.55556, 0, 0, 0.34444],\n    \"8407\": [0, 0.72444, 0.15486, 0, 0.575],\n    \"8463\": [0, 0.69444, 0, 0, 0.66759],\n    \"8465\": [0, 0.69444, 0, 0, 0.83055],\n    \"8467\": [0, 0.69444, 0, 0, 0.47361],\n    \"8472\": [0.19444, 0.44444, 0, 0, 0.74027],\n    \"8476\": [0, 0.69444, 0, 0, 0.83055],\n    \"8501\": [0, 0.69444, 0, 0, 0.70277],\n    \"8592\": [-0.10889, 0.39111, 0, 0, 1.14999],\n    \"8593\": [0.19444, 0.69444, 0, 0, 0.575],\n    \"8594\": [-0.10889, 0.39111, 0, 0, 1.14999],\n    \"8595\": [0.19444, 0.69444, 0, 0, 0.575],\n    \"8596\": [-0.10889, 0.39111, 0, 0, 1.14999],\n    \"8597\": [0.25, 0.75, 0, 0, 0.575],\n    \"8598\": [0.19444, 0.69444, 0, 0, 1.14999],\n    \"8599\": [0.19444, 0.69444, 0, 0, 1.14999],\n    \"8600\": [0.19444, 0.69444, 0, 0, 1.14999],\n    \"8601\": [0.19444, 0.69444, 0, 0, 1.14999],\n    \"8636\": [-0.10889, 0.39111, 0, 0, 1.14999],\n    \"8637\": [-0.10889, 0.39111, 0, 0, 1.14999],\n    \"8640\": [-0.10889, 0.39111, 0, 0, 1.14999],\n    \"8641\": [-0.10889, 0.39111, 0, 0, 1.14999],\n    \"8656\": [-0.10889, 0.39111, 0, 0, 1.14999],\n    \"8657\": [0.19444, 0.69444, 0, 0, 0.70277],\n    \"8658\": [-0.10889, 0.39111, 0, 0, 1.14999],\n    \"8659\": [0.19444, 0.69444, 0, 0, 0.70277],\n    \"8660\": [-0.10889, 0.39111, 0, 0, 1.14999],\n    \"8661\": [0.25, 0.75, 0, 0, 0.70277],\n    \"8704\": [0, 0.69444, 0, 0, 0.63889],\n    \"8706\": [0, 0.69444, 0.06389, 0, 0.62847],\n    \"8707\": [0, 0.69444, 0, 0, 0.63889],\n    \"8709\": [0.05556, 0.75, 0, 0, 0.575],\n    \"8711\": [0, 0.68611, 0, 0, 0.95833],\n    \"8712\": [0.08556, 0.58556, 0, 0, 0.76666],\n    \"8715\": [0.08556, 0.58556, 0, 0, 0.76666],\n    \"8722\": [0.13333, 0.63333, 0, 0, 0.89444],\n    \"8723\": [0.13333, 0.63333, 0, 0, 0.89444],\n    \"8725\": [0.25, 0.75, 0, 0, 0.575],\n    \"8726\": [0.25, 0.75, 0, 0, 0.575],\n    \"8727\": [-0.02778, 0.47222, 0, 0, 0.575],\n    \"8728\": [-0.02639, 0.47361, 0, 0, 0.575],\n    \"8729\": [-0.02639, 0.47361, 0, 0, 0.575],\n    \"8730\": [0.18, 0.82, 0, 0, 0.95833],\n    \"8733\": [0, 0.44444, 0, 0, 0.89444],\n    \"8734\": [0, 0.44444, 0, 0, 1.14999],\n    \"8736\": [0, 0.69224, 0, 0, 0.72222],\n    \"8739\": [0.25, 0.75, 0, 0, 0.31944],\n    \"8741\": [0.25, 0.75, 0, 0, 0.575],\n    \"8743\": [0, 0.55556, 0, 0, 0.76666],\n    \"8744\": [0, 0.55556, 0, 0, 0.76666],\n    \"8745\": [0, 0.55556, 0, 0, 0.76666],\n    \"8746\": [0, 0.55556, 0, 0, 0.76666],\n    \"8747\": [0.19444, 0.69444, 0.12778, 0, 0.56875],\n    \"8764\": [-0.10889, 0.39111, 0, 0, 0.89444],\n    \"8768\": [0.19444, 0.69444, 0, 0, 0.31944],\n    \"8771\": [0.00222, 0.50222, 0, 0, 0.89444],\n    \"8773\": [0.027, 0.638, 0, 0, 0.894],\n    \"8776\": [0.02444, 0.52444, 0, 0, 0.89444],\n    \"8781\": [0.00222, 0.50222, 0, 0, 0.89444],\n    \"8801\": [0.00222, 0.50222, 0, 0, 0.89444],\n    \"8804\": [0.19667, 0.69667, 0, 0, 0.89444],\n    \"8805\": [0.19667, 0.69667, 0, 0, 0.89444],\n    \"8810\": [0.08556, 0.58556, 0, 0, 1.14999],\n    \"8811\": [0.08556, 0.58556, 0, 0, 1.14999],\n    \"8826\": [0.08556, 0.58556, 0, 0, 0.89444],\n    \"8827\": [0.08556, 0.58556, 0, 0, 0.89444],\n    \"8834\": [0.08556, 0.58556, 0, 0, 0.89444],\n    \"8835\": [0.08556, 0.58556, 0, 0, 0.89444],\n    \"8838\": [0.19667, 0.69667, 0, 0, 0.89444],\n    \"8839\": [0.19667, 0.69667, 0, 0, 0.89444],\n    \"8846\": [0, 0.55556, 0, 0, 0.76666],\n    \"8849\": [0.19667, 0.69667, 0, 0, 0.89444],\n    \"8850\": [0.19667, 0.69667, 0, 0, 0.89444],\n    \"8851\": [0, 0.55556, 0, 0, 0.76666],\n    \"8852\": [0, 0.55556, 0, 0, 0.76666],\n    \"8853\": [0.13333, 0.63333, 0, 0, 0.89444],\n    \"8854\": [0.13333, 0.63333, 0, 0, 0.89444],\n    \"8855\": [0.13333, 0.63333, 0, 0, 0.89444],\n    \"8856\": [0.13333, 0.63333, 0, 0, 0.89444],\n    \"8857\": [0.13333, 0.63333, 0, 0, 0.89444],\n    \"8866\": [0, 0.69444, 0, 0, 0.70277],\n    \"8867\": [0, 0.69444, 0, 0, 0.70277],\n    \"8868\": [0, 0.69444, 0, 0, 0.89444],\n    \"8869\": [0, 0.69444, 0, 0, 0.89444],\n    \"8900\": [-0.02639, 0.47361, 0, 0, 0.575],\n    \"8901\": [-0.02639, 0.47361, 0, 0, 0.31944],\n    \"8902\": [-0.02778, 0.47222, 0, 0, 0.575],\n    \"8968\": [0.25, 0.75, 0, 0, 0.51111],\n    \"8969\": [0.25, 0.75, 0, 0, 0.51111],\n    \"8970\": [0.25, 0.75, 0, 0, 0.51111],\n    \"8971\": [0.25, 0.75, 0, 0, 0.51111],\n    \"8994\": [-0.13889, 0.36111, 0, 0, 1.14999],\n    \"8995\": [-0.13889, 0.36111, 0, 0, 1.14999],\n    \"9651\": [0.19444, 0.69444, 0, 0, 1.02222],\n    \"9657\": [-0.02778, 0.47222, 0, 0, 0.575],\n    \"9661\": [0.19444, 0.69444, 0, 0, 1.02222],\n    \"9667\": [-0.02778, 0.47222, 0, 0, 0.575],\n    \"9711\": [0.19444, 0.69444, 0, 0, 1.14999],\n    \"9824\": [0.12963, 0.69444, 0, 0, 0.89444],\n    \"9825\": [0.12963, 0.69444, 0, 0, 0.89444],\n    \"9826\": [0.12963, 0.69444, 0, 0, 0.89444],\n    \"9827\": [0.12963, 0.69444, 0, 0, 0.89444],\n    \"9837\": [0, 0.75, 0, 0, 0.44722],\n    \"9838\": [0.19444, 0.69444, 0, 0, 0.44722],\n    \"9839\": [0.19444, 0.69444, 0, 0, 0.44722],\n    \"10216\": [0.25, 0.75, 0, 0, 0.44722],\n    \"10217\": [0.25, 0.75, 0, 0, 0.44722],\n    \"10815\": [0, 0.68611, 0, 0, 0.9],\n    \"10927\": [0.19667, 0.69667, 0, 0, 0.89444],\n    \"10928\": [0.19667, 0.69667, 0, 0, 0.89444],\n    \"57376\": [0.19444, 0.69444, 0, 0, 0]\n  },\n  \"Main-BoldItalic\": {\n    \"32\": [0, 0, 0, 0, 0.25],\n    \"33\": [0, 0.69444, 0.11417, 0, 0.38611],\n    \"34\": [0, 0.69444, 0.07939, 0, 0.62055],\n    \"35\": [0.19444, 0.69444, 0.06833, 0, 0.94444],\n    \"37\": [0.05556, 0.75, 0.12861, 0, 0.94444],\n    \"38\": [0, 0.69444, 0.08528, 0, 0.88555],\n    \"39\": [0, 0.69444, 0.12945, 0, 0.35555],\n    \"40\": [0.25, 0.75, 0.15806, 0, 0.47333],\n    \"41\": [0.25, 0.75, 0.03306, 0, 0.47333],\n    \"42\": [0, 0.75, 0.14333, 0, 0.59111],\n    \"43\": [0.10333, 0.60333, 0.03306, 0, 0.88555],\n    \"44\": [0.19444, 0.14722, 0, 0, 0.35555],\n    \"45\": [0, 0.44444, 0.02611, 0, 0.41444],\n    \"46\": [0, 0.14722, 0, 0, 0.35555],\n    \"47\": [0.25, 0.75, 0.15806, 0, 0.59111],\n    \"48\": [0, 0.64444, 0.13167, 0, 0.59111],\n    \"49\": [0, 0.64444, 0.13167, 0, 0.59111],\n    \"50\": [0, 0.64444, 0.13167, 0, 0.59111],\n    \"51\": [0, 0.64444, 0.13167, 0, 0.59111],\n    \"52\": [0.19444, 0.64444, 0.13167, 0, 0.59111],\n    \"53\": [0, 0.64444, 0.13167, 0, 0.59111],\n    \"54\": [0, 0.64444, 0.13167, 0, 0.59111],\n    \"55\": [0.19444, 0.64444, 0.13167, 0, 0.59111],\n    \"56\": [0, 0.64444, 0.13167, 0, 0.59111],\n    \"57\": [0, 0.64444, 0.13167, 0, 0.59111],\n    \"58\": [0, 0.44444, 0.06695, 0, 0.35555],\n    \"59\": [0.19444, 0.44444, 0.06695, 0, 0.35555],\n    \"61\": [-0.10889, 0.39111, 0.06833, 0, 0.88555],\n    \"63\": [0, 0.69444, 0.11472, 0, 0.59111],\n    \"64\": [0, 0.69444, 0.09208, 0, 0.88555],\n    \"65\": [0, 0.68611, 0, 0, 0.86555],\n    \"66\": [0, 0.68611, 0.0992, 0, 0.81666],\n    \"67\": [0, 0.68611, 0.14208, 0, 0.82666],\n    \"68\": [0, 0.68611, 0.09062, 0, 0.87555],\n    \"69\": [0, 0.68611, 0.11431, 0, 0.75666],\n    \"70\": [0, 0.68611, 0.12903, 0, 0.72722],\n    \"71\": [0, 0.68611, 0.07347, 0, 0.89527],\n    \"72\": [0, 0.68611, 0.17208, 0, 0.8961],\n    \"73\": [0, 0.68611, 0.15681, 0, 0.47166],\n    \"74\": [0, 0.68611, 0.145, 0, 0.61055],\n    \"75\": [0, 0.68611, 0.14208, 0, 0.89499],\n    \"76\": [0, 0.68611, 0, 0, 0.69777],\n    \"77\": [0, 0.68611, 0.17208, 0, 1.07277],\n    \"78\": [0, 0.68611, 0.17208, 0, 0.8961],\n    \"79\": [0, 0.68611, 0.09062, 0, 0.85499],\n    \"80\": [0, 0.68611, 0.0992, 0, 0.78721],\n    \"81\": [0.19444, 0.68611, 0.09062, 0, 0.85499],\n    \"82\": [0, 0.68611, 0.02559, 0, 0.85944],\n    \"83\": [0, 0.68611, 0.11264, 0, 0.64999],\n    \"84\": [0, 0.68611, 0.12903, 0, 0.7961],\n    \"85\": [0, 0.68611, 0.17208, 0, 0.88083],\n    \"86\": [0, 0.68611, 0.18625, 0, 0.86555],\n    \"87\": [0, 0.68611, 0.18625, 0, 1.15999],\n    \"88\": [0, 0.68611, 0.15681, 0, 0.86555],\n    \"89\": [0, 0.68611, 0.19803, 0, 0.86555],\n    \"90\": [0, 0.68611, 0.14208, 0, 0.70888],\n    \"91\": [0.25, 0.75, 0.1875, 0, 0.35611],\n    \"93\": [0.25, 0.75, 0.09972, 0, 0.35611],\n    \"94\": [0, 0.69444, 0.06709, 0, 0.59111],\n    \"95\": [0.31, 0.13444, 0.09811, 0, 0.59111],\n    \"97\": [0, 0.44444, 0.09426, 0, 0.59111],\n    \"98\": [0, 0.69444, 0.07861, 0, 0.53222],\n    \"99\": [0, 0.44444, 0.05222, 0, 0.53222],\n    \"100\": [0, 0.69444, 0.10861, 0, 0.59111],\n    \"101\": [0, 0.44444, 0.085, 0, 0.53222],\n    \"102\": [0.19444, 0.69444, 0.21778, 0, 0.4],\n    \"103\": [0.19444, 0.44444, 0.105, 0, 0.53222],\n    \"104\": [0, 0.69444, 0.09426, 0, 0.59111],\n    \"105\": [0, 0.69326, 0.11387, 0, 0.35555],\n    \"106\": [0.19444, 0.69326, 0.1672, 0, 0.35555],\n    \"107\": [0, 0.69444, 0.11111, 0, 0.53222],\n    \"108\": [0, 0.69444, 0.10861, 0, 0.29666],\n    \"109\": [0, 0.44444, 0.09426, 0, 0.94444],\n    \"110\": [0, 0.44444, 0.09426, 0, 0.64999],\n    \"111\": [0, 0.44444, 0.07861, 0, 0.59111],\n    \"112\": [0.19444, 0.44444, 0.07861, 0, 0.59111],\n    \"113\": [0.19444, 0.44444, 0.105, 0, 0.53222],\n    \"114\": [0, 0.44444, 0.11111, 0, 0.50167],\n    \"115\": [0, 0.44444, 0.08167, 0, 0.48694],\n    \"116\": [0, 0.63492, 0.09639, 0, 0.385],\n    \"117\": [0, 0.44444, 0.09426, 0, 0.62055],\n    \"118\": [0, 0.44444, 0.11111, 0, 0.53222],\n    \"119\": [0, 0.44444, 0.11111, 0, 0.76777],\n    \"120\": [0, 0.44444, 0.12583, 0, 0.56055],\n    \"121\": [0.19444, 0.44444, 0.105, 0, 0.56166],\n    \"122\": [0, 0.44444, 0.13889, 0, 0.49055],\n    \"126\": [0.35, 0.34444, 0.11472, 0, 0.59111],\n    \"160\": [0, 0, 0, 0, 0.25],\n    \"168\": [0, 0.69444, 0.11473, 0, 0.59111],\n    \"176\": [0, 0.69444, 0, 0, 0.94888],\n    \"184\": [0.17014, 0, 0, 0, 0.53222],\n    \"198\": [0, 0.68611, 0.11431, 0, 1.02277],\n    \"216\": [0.04861, 0.73472, 0.09062, 0, 0.88555],\n    \"223\": [0.19444, 0.69444, 0.09736, 0, 0.665],\n    \"230\": [0, 0.44444, 0.085, 0, 0.82666],\n    \"248\": [0.09722, 0.54167, 0.09458, 0, 0.59111],\n    \"305\": [0, 0.44444, 0.09426, 0, 0.35555],\n    \"338\": [0, 0.68611, 0.11431, 0, 1.14054],\n    \"339\": [0, 0.44444, 0.085, 0, 0.82666],\n    \"567\": [0.19444, 0.44444, 0.04611, 0, 0.385],\n    \"710\": [0, 0.69444, 0.06709, 0, 0.59111],\n    \"711\": [0, 0.63194, 0.08271, 0, 0.59111],\n    \"713\": [0, 0.59444, 0.10444, 0, 0.59111],\n    \"714\": [0, 0.69444, 0.08528, 0, 0.59111],\n    \"715\": [0, 0.69444, 0, 0, 0.59111],\n    \"728\": [0, 0.69444, 0.10333, 0, 0.59111],\n    \"729\": [0, 0.69444, 0.12945, 0, 0.35555],\n    \"730\": [0, 0.69444, 0, 0, 0.94888],\n    \"732\": [0, 0.69444, 0.11472, 0, 0.59111],\n    \"733\": [0, 0.69444, 0.11472, 0, 0.59111],\n    \"915\": [0, 0.68611, 0.12903, 0, 0.69777],\n    \"916\": [0, 0.68611, 0, 0, 0.94444],\n    \"920\": [0, 0.68611, 0.09062, 0, 0.88555],\n    \"923\": [0, 0.68611, 0, 0, 0.80666],\n    \"926\": [0, 0.68611, 0.15092, 0, 0.76777],\n    \"928\": [0, 0.68611, 0.17208, 0, 0.8961],\n    \"931\": [0, 0.68611, 0.11431, 0, 0.82666],\n    \"933\": [0, 0.68611, 0.10778, 0, 0.88555],\n    \"934\": [0, 0.68611, 0.05632, 0, 0.82666],\n    \"936\": [0, 0.68611, 0.10778, 0, 0.88555],\n    \"937\": [0, 0.68611, 0.0992, 0, 0.82666],\n    \"8211\": [0, 0.44444, 0.09811, 0, 0.59111],\n    \"8212\": [0, 0.44444, 0.09811, 0, 1.18221],\n    \"8216\": [0, 0.69444, 0.12945, 0, 0.35555],\n    \"8217\": [0, 0.69444, 0.12945, 0, 0.35555],\n    \"8220\": [0, 0.69444, 0.16772, 0, 0.62055],\n    \"8221\": [0, 0.69444, 0.07939, 0, 0.62055]\n  },\n  \"Main-Italic\": {\n    \"32\": [0, 0, 0, 0, 0.25],\n    \"33\": [0, 0.69444, 0.12417, 0, 0.30667],\n    \"34\": [0, 0.69444, 0.06961, 0, 0.51444],\n    \"35\": [0.19444, 0.69444, 0.06616, 0, 0.81777],\n    \"37\": [0.05556, 0.75, 0.13639, 0, 0.81777],\n    \"38\": [0, 0.69444, 0.09694, 0, 0.76666],\n    \"39\": [0, 0.69444, 0.12417, 0, 0.30667],\n    \"40\": [0.25, 0.75, 0.16194, 0, 0.40889],\n    \"41\": [0.25, 0.75, 0.03694, 0, 0.40889],\n    \"42\": [0, 0.75, 0.14917, 0, 0.51111],\n    \"43\": [0.05667, 0.56167, 0.03694, 0, 0.76666],\n    \"44\": [0.19444, 0.10556, 0, 0, 0.30667],\n    \"45\": [0, 0.43056, 0.02826, 0, 0.35778],\n    \"46\": [0, 0.10556, 0, 0, 0.30667],\n    \"47\": [0.25, 0.75, 0.16194, 0, 0.51111],\n    \"48\": [0, 0.64444, 0.13556, 0, 0.51111],\n    \"49\": [0, 0.64444, 0.13556, 0, 0.51111],\n    \"50\": [0, 0.64444, 0.13556, 0, 0.51111],\n    \"51\": [0, 0.64444, 0.13556, 0, 0.51111],\n    \"52\": [0.19444, 0.64444, 0.13556, 0, 0.51111],\n    \"53\": [0, 0.64444, 0.13556, 0, 0.51111],\n    \"54\": [0, 0.64444, 0.13556, 0, 0.51111],\n    \"55\": [0.19444, 0.64444, 0.13556, 0, 0.51111],\n    \"56\": [0, 0.64444, 0.13556, 0, 0.51111],\n    \"57\": [0, 0.64444, 0.13556, 0, 0.51111],\n    \"58\": [0, 0.43056, 0.0582, 0, 0.30667],\n    \"59\": [0.19444, 0.43056, 0.0582, 0, 0.30667],\n    \"61\": [-0.13313, 0.36687, 0.06616, 0, 0.76666],\n    \"63\": [0, 0.69444, 0.1225, 0, 0.51111],\n    \"64\": [0, 0.69444, 0.09597, 0, 0.76666],\n    \"65\": [0, 0.68333, 0, 0, 0.74333],\n    \"66\": [0, 0.68333, 0.10257, 0, 0.70389],\n    \"67\": [0, 0.68333, 0.14528, 0, 0.71555],\n    \"68\": [0, 0.68333, 0.09403, 0, 0.755],\n    \"69\": [0, 0.68333, 0.12028, 0, 0.67833],\n    \"70\": [0, 0.68333, 0.13305, 0, 0.65277],\n    \"71\": [0, 0.68333, 0.08722, 0, 0.77361],\n    \"72\": [0, 0.68333, 0.16389, 0, 0.74333],\n    \"73\": [0, 0.68333, 0.15806, 0, 0.38555],\n    \"74\": [0, 0.68333, 0.14028, 0, 0.525],\n    \"75\": [0, 0.68333, 0.14528, 0, 0.76888],\n    \"76\": [0, 0.68333, 0, 0, 0.62722],\n    \"77\": [0, 0.68333, 0.16389, 0, 0.89666],\n    \"78\": [0, 0.68333, 0.16389, 0, 0.74333],\n    \"79\": [0, 0.68333, 0.09403, 0, 0.76666],\n    \"80\": [0, 0.68333, 0.10257, 0, 0.67833],\n    \"81\": [0.19444, 0.68333, 0.09403, 0, 0.76666],\n    \"82\": [0, 0.68333, 0.03868, 0, 0.72944],\n    \"83\": [0, 0.68333, 0.11972, 0, 0.56222],\n    \"84\": [0, 0.68333, 0.13305, 0, 0.71555],\n    \"85\": [0, 0.68333, 0.16389, 0, 0.74333],\n    \"86\": [0, 0.68333, 0.18361, 0, 0.74333],\n    \"87\": [0, 0.68333, 0.18361, 0, 0.99888],\n    \"88\": [0, 0.68333, 0.15806, 0, 0.74333],\n    \"89\": [0, 0.68333, 0.19383, 0, 0.74333],\n    \"90\": [0, 0.68333, 0.14528, 0, 0.61333],\n    \"91\": [0.25, 0.75, 0.1875, 0, 0.30667],\n    \"93\": [0.25, 0.75, 0.10528, 0, 0.30667],\n    \"94\": [0, 0.69444, 0.06646, 0, 0.51111],\n    \"95\": [0.31, 0.12056, 0.09208, 0, 0.51111],\n    \"97\": [0, 0.43056, 0.07671, 0, 0.51111],\n    \"98\": [0, 0.69444, 0.06312, 0, 0.46],\n    \"99\": [0, 0.43056, 0.05653, 0, 0.46],\n    \"100\": [0, 0.69444, 0.10333, 0, 0.51111],\n    \"101\": [0, 0.43056, 0.07514, 0, 0.46],\n    \"102\": [0.19444, 0.69444, 0.21194, 0, 0.30667],\n    \"103\": [0.19444, 0.43056, 0.08847, 0, 0.46],\n    \"104\": [0, 0.69444, 0.07671, 0, 0.51111],\n    \"105\": [0, 0.65536, 0.1019, 0, 0.30667],\n    \"106\": [0.19444, 0.65536, 0.14467, 0, 0.30667],\n    \"107\": [0, 0.69444, 0.10764, 0, 0.46],\n    \"108\": [0, 0.69444, 0.10333, 0, 0.25555],\n    \"109\": [0, 0.43056, 0.07671, 0, 0.81777],\n    \"110\": [0, 0.43056, 0.07671, 0, 0.56222],\n    \"111\": [0, 0.43056, 0.06312, 0, 0.51111],\n    \"112\": [0.19444, 0.43056, 0.06312, 0, 0.51111],\n    \"113\": [0.19444, 0.43056, 0.08847, 0, 0.46],\n    \"114\": [0, 0.43056, 0.10764, 0, 0.42166],\n    \"115\": [0, 0.43056, 0.08208, 0, 0.40889],\n    \"116\": [0, 0.61508, 0.09486, 0, 0.33222],\n    \"117\": [0, 0.43056, 0.07671, 0, 0.53666],\n    \"118\": [0, 0.43056, 0.10764, 0, 0.46],\n    \"119\": [0, 0.43056, 0.10764, 0, 0.66444],\n    \"120\": [0, 0.43056, 0.12042, 0, 0.46389],\n    \"121\": [0.19444, 0.43056, 0.08847, 0, 0.48555],\n    \"122\": [0, 0.43056, 0.12292, 0, 0.40889],\n    \"126\": [0.35, 0.31786, 0.11585, 0, 0.51111],\n    \"160\": [0, 0, 0, 0, 0.25],\n    \"168\": [0, 0.66786, 0.10474, 0, 0.51111],\n    \"176\": [0, 0.69444, 0, 0, 0.83129],\n    \"184\": [0.17014, 0, 0, 0, 0.46],\n    \"198\": [0, 0.68333, 0.12028, 0, 0.88277],\n    \"216\": [0.04861, 0.73194, 0.09403, 0, 0.76666],\n    \"223\": [0.19444, 0.69444, 0.10514, 0, 0.53666],\n    \"230\": [0, 0.43056, 0.07514, 0, 0.71555],\n    \"248\": [0.09722, 0.52778, 0.09194, 0, 0.51111],\n    \"338\": [0, 0.68333, 0.12028, 0, 0.98499],\n    \"339\": [0, 0.43056, 0.07514, 0, 0.71555],\n    \"710\": [0, 0.69444, 0.06646, 0, 0.51111],\n    \"711\": [0, 0.62847, 0.08295, 0, 0.51111],\n    \"713\": [0, 0.56167, 0.10333, 0, 0.51111],\n    \"714\": [0, 0.69444, 0.09694, 0, 0.51111],\n    \"715\": [0, 0.69444, 0, 0, 0.51111],\n    \"728\": [0, 0.69444, 0.10806, 0, 0.51111],\n    \"729\": [0, 0.66786, 0.11752, 0, 0.30667],\n    \"730\": [0, 0.69444, 0, 0, 0.83129],\n    \"732\": [0, 0.66786, 0.11585, 0, 0.51111],\n    \"733\": [0, 0.69444, 0.1225, 0, 0.51111],\n    \"915\": [0, 0.68333, 0.13305, 0, 0.62722],\n    \"916\": [0, 0.68333, 0, 0, 0.81777],\n    \"920\": [0, 0.68333, 0.09403, 0, 0.76666],\n    \"923\": [0, 0.68333, 0, 0, 0.69222],\n    \"926\": [0, 0.68333, 0.15294, 0, 0.66444],\n    \"928\": [0, 0.68333, 0.16389, 0, 0.74333],\n    \"931\": [0, 0.68333, 0.12028, 0, 0.71555],\n    \"933\": [0, 0.68333, 0.11111, 0, 0.76666],\n    \"934\": [0, 0.68333, 0.05986, 0, 0.71555],\n    \"936\": [0, 0.68333, 0.11111, 0, 0.76666],\n    \"937\": [0, 0.68333, 0.10257, 0, 0.71555],\n    \"8211\": [0, 0.43056, 0.09208, 0, 0.51111],\n    \"8212\": [0, 0.43056, 0.09208, 0, 1.02222],\n    \"8216\": [0, 0.69444, 0.12417, 0, 0.30667],\n    \"8217\": [0, 0.69444, 0.12417, 0, 0.30667],\n    \"8220\": [0, 0.69444, 0.1685, 0, 0.51444],\n    \"8221\": [0, 0.69444, 0.06961, 0, 0.51444],\n    \"8463\": [0, 0.68889, 0, 0, 0.54028]\n  },\n  \"Main-Regular\": {\n    \"32\": [0, 0, 0, 0, 0.25],\n    \"33\": [0, 0.69444, 0, 0, 0.27778],\n    \"34\": [0, 0.69444, 0, 0, 0.5],\n    \"35\": [0.19444, 0.69444, 0, 0, 0.83334],\n    \"36\": [0.05556, 0.75, 0, 0, 0.5],\n    \"37\": [0.05556, 0.75, 0, 0, 0.83334],\n    \"38\": [0, 0.69444, 0, 0, 0.77778],\n    \"39\": [0, 0.69444, 0, 0, 0.27778],\n    \"40\": [0.25, 0.75, 0, 0, 0.38889],\n    \"41\": [0.25, 0.75, 0, 0, 0.38889],\n    \"42\": [0, 0.75, 0, 0, 0.5],\n    \"43\": [0.08333, 0.58333, 0, 0, 0.77778],\n    \"44\": [0.19444, 0.10556, 0, 0, 0.27778],\n    \"45\": [0, 0.43056, 0, 0, 0.33333],\n    \"46\": [0, 0.10556, 0, 0, 0.27778],\n    \"47\": [0.25, 0.75, 0, 0, 0.5],\n    \"48\": [0, 0.64444, 0, 0, 0.5],\n    \"49\": [0, 0.64444, 0, 0, 0.5],\n    \"50\": [0, 0.64444, 0, 0, 0.5],\n    \"51\": [0, 0.64444, 0, 0, 0.5],\n    \"52\": [0, 0.64444, 0, 0, 0.5],\n    \"53\": [0, 0.64444, 0, 0, 0.5],\n    \"54\": [0, 0.64444, 0, 0, 0.5],\n    \"55\": [0, 0.64444, 0, 0, 0.5],\n    \"56\": [0, 0.64444, 0, 0, 0.5],\n    \"57\": [0, 0.64444, 0, 0, 0.5],\n    \"58\": [0, 0.43056, 0, 0, 0.27778],\n    \"59\": [0.19444, 0.43056, 0, 0, 0.27778],\n    \"60\": [0.0391, 0.5391, 0, 0, 0.77778],\n    \"61\": [-0.13313, 0.36687, 0, 0, 0.77778],\n    \"62\": [0.0391, 0.5391, 0, 0, 0.77778],\n    \"63\": [0, 0.69444, 0, 0, 0.47222],\n    \"64\": [0, 0.69444, 0, 0, 0.77778],\n    \"65\": [0, 0.68333, 0, 0, 0.75],\n    \"66\": [0, 0.68333, 0, 0, 0.70834],\n    \"67\": [0, 0.68333, 0, 0, 0.72222],\n    \"68\": [0, 0.68333, 0, 0, 0.76389],\n    \"69\": [0, 0.68333, 0, 0, 0.68056],\n    \"70\": [0, 0.68333, 0, 0, 0.65278],\n    \"71\": [0, 0.68333, 0, 0, 0.78472],\n    \"72\": [0, 0.68333, 0, 0, 0.75],\n    \"73\": [0, 0.68333, 0, 0, 0.36111],\n    \"74\": [0, 0.68333, 0, 0, 0.51389],\n    \"75\": [0, 0.68333, 0, 0, 0.77778],\n    \"76\": [0, 0.68333, 0, 0, 0.625],\n    \"77\": [0, 0.68333, 0, 0, 0.91667],\n    \"78\": [0, 0.68333, 0, 0, 0.75],\n    \"79\": [0, 0.68333, 0, 0, 0.77778],\n    \"80\": [0, 0.68333, 0, 0, 0.68056],\n    \"81\": [0.19444, 0.68333, 0, 0, 0.77778],\n    \"82\": [0, 0.68333, 0, 0, 0.73611],\n    \"83\": [0, 0.68333, 0, 0, 0.55556],\n    \"84\": [0, 0.68333, 0, 0, 0.72222],\n    \"85\": [0, 0.68333, 0, 0, 0.75],\n    \"86\": [0, 0.68333, 0.01389, 0, 0.75],\n    \"87\": [0, 0.68333, 0.01389, 0, 1.02778],\n    \"88\": [0, 0.68333, 0, 0, 0.75],\n    \"89\": [0, 0.68333, 0.025, 0, 0.75],\n    \"90\": [0, 0.68333, 0, 0, 0.61111],\n    \"91\": [0.25, 0.75, 0, 0, 0.27778],\n    \"92\": [0.25, 0.75, 0, 0, 0.5],\n    \"93\": [0.25, 0.75, 0, 0, 0.27778],\n    \"94\": [0, 0.69444, 0, 0, 0.5],\n    \"95\": [0.31, 0.12056, 0.02778, 0, 0.5],\n    \"97\": [0, 0.43056, 0, 0, 0.5],\n    \"98\": [0, 0.69444, 0, 0, 0.55556],\n    \"99\": [0, 0.43056, 0, 0, 0.44445],\n    \"100\": [0, 0.69444, 0, 0, 0.55556],\n    \"101\": [0, 0.43056, 0, 0, 0.44445],\n    \"102\": [0, 0.69444, 0.07778, 0, 0.30556],\n    \"103\": [0.19444, 0.43056, 0.01389, 0, 0.5],\n    \"104\": [0, 0.69444, 0, 0, 0.55556],\n    \"105\": [0, 0.66786, 0, 0, 0.27778],\n    \"106\": [0.19444, 0.66786, 0, 0, 0.30556],\n    \"107\": [0, 0.69444, 0, 0, 0.52778],\n    \"108\": [0, 0.69444, 0, 0, 0.27778],\n    \"109\": [0, 0.43056, 0, 0, 0.83334],\n    \"110\": [0, 0.43056, 0, 0, 0.55556],\n    \"111\": [0, 0.43056, 0, 0, 0.5],\n    \"112\": [0.19444, 0.43056, 0, 0, 0.55556],\n    \"113\": [0.19444, 0.43056, 0, 0, 0.52778],\n    \"114\": [0, 0.43056, 0, 0, 0.39167],\n    \"115\": [0, 0.43056, 0, 0, 0.39445],\n    \"116\": [0, 0.61508, 0, 0, 0.38889],\n    \"117\": [0, 0.43056, 0, 0, 0.55556],\n    \"118\": [0, 0.43056, 0.01389, 0, 0.52778],\n    \"119\": [0, 0.43056, 0.01389, 0, 0.72222],\n    \"120\": [0, 0.43056, 0, 0, 0.52778],\n    \"121\": [0.19444, 0.43056, 0.01389, 0, 0.52778],\n    \"122\": [0, 0.43056, 0, 0, 0.44445],\n    \"123\": [0.25, 0.75, 0, 0, 0.5],\n    \"124\": [0.25, 0.75, 0, 0, 0.27778],\n    \"125\": [0.25, 0.75, 0, 0, 0.5],\n    \"126\": [0.35, 0.31786, 0, 0, 0.5],\n    \"160\": [0, 0, 0, 0, 0.25],\n    \"163\": [0, 0.69444, 0, 0, 0.76909],\n    \"167\": [0.19444, 0.69444, 0, 0, 0.44445],\n    \"168\": [0, 0.66786, 0, 0, 0.5],\n    \"172\": [0, 0.43056, 0, 0, 0.66667],\n    \"176\": [0, 0.69444, 0, 0, 0.75],\n    \"177\": [0.08333, 0.58333, 0, 0, 0.77778],\n    \"182\": [0.19444, 0.69444, 0, 0, 0.61111],\n    \"184\": [0.17014, 0, 0, 0, 0.44445],\n    \"198\": [0, 0.68333, 0, 0, 0.90278],\n    \"215\": [0.08333, 0.58333, 0, 0, 0.77778],\n    \"216\": [0.04861, 0.73194, 0, 0, 0.77778],\n    \"223\": [0, 0.69444, 0, 0, 0.5],\n    \"230\": [0, 0.43056, 0, 0, 0.72222],\n    \"247\": [0.08333, 0.58333, 0, 0, 0.77778],\n    \"248\": [0.09722, 0.52778, 0, 0, 0.5],\n    \"305\": [0, 0.43056, 0, 0, 0.27778],\n    \"338\": [0, 0.68333, 0, 0, 1.01389],\n    \"339\": [0, 0.43056, 0, 0, 0.77778],\n    \"567\": [0.19444, 0.43056, 0, 0, 0.30556],\n    \"710\": [0, 0.69444, 0, 0, 0.5],\n    \"711\": [0, 0.62847, 0, 0, 0.5],\n    \"713\": [0, 0.56778, 0, 0, 0.5],\n    \"714\": [0, 0.69444, 0, 0, 0.5],\n    \"715\": [0, 0.69444, 0, 0, 0.5],\n    \"728\": [0, 0.69444, 0, 0, 0.5],\n    \"729\": [0, 0.66786, 0, 0, 0.27778],\n    \"730\": [0, 0.69444, 0, 0, 0.75],\n    \"732\": [0, 0.66786, 0, 0, 0.5],\n    \"733\": [0, 0.69444, 0, 0, 0.5],\n    \"915\": [0, 0.68333, 0, 0, 0.625],\n    \"916\": [0, 0.68333, 0, 0, 0.83334],\n    \"920\": [0, 0.68333, 0, 0, 0.77778],\n    \"923\": [0, 0.68333, 0, 0, 0.69445],\n    \"926\": [0, 0.68333, 0, 0, 0.66667],\n    \"928\": [0, 0.68333, 0, 0, 0.75],\n    \"931\": [0, 0.68333, 0, 0, 0.72222],\n    \"933\": [0, 0.68333, 0, 0, 0.77778],\n    \"934\": [0, 0.68333, 0, 0, 0.72222],\n    \"936\": [0, 0.68333, 0, 0, 0.77778],\n    \"937\": [0, 0.68333, 0, 0, 0.72222],\n    \"8211\": [0, 0.43056, 0.02778, 0, 0.5],\n    \"8212\": [0, 0.43056, 0.02778, 0, 1.0],\n    \"8216\": [0, 0.69444, 0, 0, 0.27778],\n    \"8217\": [0, 0.69444, 0, 0, 0.27778],\n    \"8220\": [0, 0.69444, 0, 0, 0.5],\n    \"8221\": [0, 0.69444, 0, 0, 0.5],\n    \"8224\": [0.19444, 0.69444, 0, 0, 0.44445],\n    \"8225\": [0.19444, 0.69444, 0, 0, 0.44445],\n    \"8230\": [0, 0.123, 0, 0, 1.172],\n    \"8242\": [0, 0.55556, 0, 0, 0.275],\n    \"8407\": [0, 0.71444, 0.15382, 0, 0.5],\n    \"8463\": [0, 0.68889, 0, 0, 0.54028],\n    \"8465\": [0, 0.69444, 0, 0, 0.72222],\n    \"8467\": [0, 0.69444, 0, 0.11111, 0.41667],\n    \"8472\": [0.19444, 0.43056, 0, 0.11111, 0.63646],\n    \"8476\": [0, 0.69444, 0, 0, 0.72222],\n    \"8501\": [0, 0.69444, 0, 0, 0.61111],\n    \"8592\": [-0.13313, 0.36687, 0, 0, 1.0],\n    \"8593\": [0.19444, 0.69444, 0, 0, 0.5],\n    \"8594\": [-0.13313, 0.36687, 0, 0, 1.0],\n    \"8595\": [0.19444, 0.69444, 0, 0, 0.5],\n    \"8596\": [-0.13313, 0.36687, 0, 0, 1.0],\n    \"8597\": [0.25, 0.75, 0, 0, 0.5],\n    \"8598\": [0.19444, 0.69444, 0, 0, 1.0],\n    \"8599\": [0.19444, 0.69444, 0, 0, 1.0],\n    \"8600\": [0.19444, 0.69444, 0, 0, 1.0],\n    \"8601\": [0.19444, 0.69444, 0, 0, 1.0],\n    \"8614\": [0.011, 0.511, 0, 0, 1.0],\n    \"8617\": [0.011, 0.511, 0, 0, 1.126],\n    \"8618\": [0.011, 0.511, 0, 0, 1.126],\n    \"8636\": [-0.13313, 0.36687, 0, 0, 1.0],\n    \"8637\": [-0.13313, 0.36687, 0, 0, 1.0],\n    \"8640\": [-0.13313, 0.36687, 0, 0, 1.0],\n    \"8641\": [-0.13313, 0.36687, 0, 0, 1.0],\n    \"8652\": [0.011, 0.671, 0, 0, 1.0],\n    \"8656\": [-0.13313, 0.36687, 0, 0, 1.0],\n    \"8657\": [0.19444, 0.69444, 0, 0, 0.61111],\n    \"8658\": [-0.13313, 0.36687, 0, 0, 1.0],\n    \"8659\": [0.19444, 0.69444, 0, 0, 0.61111],\n    \"8660\": [-0.13313, 0.36687, 0, 0, 1.0],\n    \"8661\": [0.25, 0.75, 0, 0, 0.61111],\n    \"8704\": [0, 0.69444, 0, 0, 0.55556],\n    \"8706\": [0, 0.69444, 0.05556, 0.08334, 0.5309],\n    \"8707\": [0, 0.69444, 0, 0, 0.55556],\n    \"8709\": [0.05556, 0.75, 0, 0, 0.5],\n    \"8711\": [0, 0.68333, 0, 0, 0.83334],\n    \"8712\": [0.0391, 0.5391, 0, 0, 0.66667],\n    \"8715\": [0.0391, 0.5391, 0, 0, 0.66667],\n    \"8722\": [0.08333, 0.58333, 0, 0, 0.77778],\n    \"8723\": [0.08333, 0.58333, 0, 0, 0.77778],\n    \"8725\": [0.25, 0.75, 0, 0, 0.5],\n    \"8726\": [0.25, 0.75, 0, 0, 0.5],\n    \"8727\": [-0.03472, 0.46528, 0, 0, 0.5],\n    \"8728\": [-0.05555, 0.44445, 0, 0, 0.5],\n    \"8729\": [-0.05555, 0.44445, 0, 0, 0.5],\n    \"8730\": [0.2, 0.8, 0, 0, 0.83334],\n    \"8733\": [0, 0.43056, 0, 0, 0.77778],\n    \"8734\": [0, 0.43056, 0, 0, 1.0],\n    \"8736\": [0, 0.69224, 0, 0, 0.72222],\n    \"8739\": [0.25, 0.75, 0, 0, 0.27778],\n    \"8741\": [0.25, 0.75, 0, 0, 0.5],\n    \"8743\": [0, 0.55556, 0, 0, 0.66667],\n    \"8744\": [0, 0.55556, 0, 0, 0.66667],\n    \"8745\": [0, 0.55556, 0, 0, 0.66667],\n    \"8746\": [0, 0.55556, 0, 0, 0.66667],\n    \"8747\": [0.19444, 0.69444, 0.11111, 0, 0.41667],\n    \"8764\": [-0.13313, 0.36687, 0, 0, 0.77778],\n    \"8768\": [0.19444, 0.69444, 0, 0, 0.27778],\n    \"8771\": [-0.03625, 0.46375, 0, 0, 0.77778],\n    \"8773\": [-0.022, 0.589, 0, 0, 0.778],\n    \"8776\": [-0.01688, 0.48312, 0, 0, 0.77778],\n    \"8781\": [-0.03625, 0.46375, 0, 0, 0.77778],\n    \"8784\": [-0.133, 0.673, 0, 0, 0.778],\n    \"8801\": [-0.03625, 0.46375, 0, 0, 0.77778],\n    \"8804\": [0.13597, 0.63597, 0, 0, 0.77778],\n    \"8805\": [0.13597, 0.63597, 0, 0, 0.77778],\n    \"8810\": [0.0391, 0.5391, 0, 0, 1.0],\n    \"8811\": [0.0391, 0.5391, 0, 0, 1.0],\n    \"8826\": [0.0391, 0.5391, 0, 0, 0.77778],\n    \"8827\": [0.0391, 0.5391, 0, 0, 0.77778],\n    \"8834\": [0.0391, 0.5391, 0, 0, 0.77778],\n    \"8835\": [0.0391, 0.5391, 0, 0, 0.77778],\n    \"8838\": [0.13597, 0.63597, 0, 0, 0.77778],\n    \"8839\": [0.13597, 0.63597, 0, 0, 0.77778],\n    \"8846\": [0, 0.55556, 0, 0, 0.66667],\n    \"8849\": [0.13597, 0.63597, 0, 0, 0.77778],\n    \"8850\": [0.13597, 0.63597, 0, 0, 0.77778],\n    \"8851\": [0, 0.55556, 0, 0, 0.66667],\n    \"8852\": [0, 0.55556, 0, 0, 0.66667],\n    \"8853\": [0.08333, 0.58333, 0, 0, 0.77778],\n    \"8854\": [0.08333, 0.58333, 0, 0, 0.77778],\n    \"8855\": [0.08333, 0.58333, 0, 0, 0.77778],\n    \"8856\": [0.08333, 0.58333, 0, 0, 0.77778],\n    \"8857\": [0.08333, 0.58333, 0, 0, 0.77778],\n    \"8866\": [0, 0.69444, 0, 0, 0.61111],\n    \"8867\": [0, 0.69444, 0, 0, 0.61111],\n    \"8868\": [0, 0.69444, 0, 0, 0.77778],\n    \"8869\": [0, 0.69444, 0, 0, 0.77778],\n    \"8872\": [0.249, 0.75, 0, 0, 0.867],\n    \"8900\": [-0.05555, 0.44445, 0, 0, 0.5],\n    \"8901\": [-0.05555, 0.44445, 0, 0, 0.27778],\n    \"8902\": [-0.03472, 0.46528, 0, 0, 0.5],\n    \"8904\": [0.005, 0.505, 0, 0, 0.9],\n    \"8942\": [0.03, 0.903, 0, 0, 0.278],\n    \"8943\": [-0.19, 0.313, 0, 0, 1.172],\n    \"8945\": [-0.1, 0.823, 0, 0, 1.282],\n    \"8968\": [0.25, 0.75, 0, 0, 0.44445],\n    \"8969\": [0.25, 0.75, 0, 0, 0.44445],\n    \"8970\": [0.25, 0.75, 0, 0, 0.44445],\n    \"8971\": [0.25, 0.75, 0, 0, 0.44445],\n    \"8994\": [-0.14236, 0.35764, 0, 0, 1.0],\n    \"8995\": [-0.14236, 0.35764, 0, 0, 1.0],\n    \"9136\": [0.244, 0.744, 0, 0, 0.412],\n    \"9137\": [0.244, 0.745, 0, 0, 0.412],\n    \"9651\": [0.19444, 0.69444, 0, 0, 0.88889],\n    \"9657\": [-0.03472, 0.46528, 0, 0, 0.5],\n    \"9661\": [0.19444, 0.69444, 0, 0, 0.88889],\n    \"9667\": [-0.03472, 0.46528, 0, 0, 0.5],\n    \"9711\": [0.19444, 0.69444, 0, 0, 1.0],\n    \"9824\": [0.12963, 0.69444, 0, 0, 0.77778],\n    \"9825\": [0.12963, 0.69444, 0, 0, 0.77778],\n    \"9826\": [0.12963, 0.69444, 0, 0, 0.77778],\n    \"9827\": [0.12963, 0.69444, 0, 0, 0.77778],\n    \"9837\": [0, 0.75, 0, 0, 0.38889],\n    \"9838\": [0.19444, 0.69444, 0, 0, 0.38889],\n    \"9839\": [0.19444, 0.69444, 0, 0, 0.38889],\n    \"10216\": [0.25, 0.75, 0, 0, 0.38889],\n    \"10217\": [0.25, 0.75, 0, 0, 0.38889],\n    \"10222\": [0.244, 0.744, 0, 0, 0.412],\n    \"10223\": [0.244, 0.745, 0, 0, 0.412],\n    \"10229\": [0.011, 0.511, 0, 0, 1.609],\n    \"10230\": [0.011, 0.511, 0, 0, 1.638],\n    \"10231\": [0.011, 0.511, 0, 0, 1.859],\n    \"10232\": [0.024, 0.525, 0, 0, 1.609],\n    \"10233\": [0.024, 0.525, 0, 0, 1.638],\n    \"10234\": [0.024, 0.525, 0, 0, 1.858],\n    \"10236\": [0.011, 0.511, 0, 0, 1.638],\n    \"10815\": [0, 0.68333, 0, 0, 0.75],\n    \"10927\": [0.13597, 0.63597, 0, 0, 0.77778],\n    \"10928\": [0.13597, 0.63597, 0, 0, 0.77778],\n    \"57376\": [0.19444, 0.69444, 0, 0, 0]\n  },\n  \"Math-BoldItalic\": {\n    \"32\": [0, 0, 0, 0, 0.25],\n    \"48\": [0, 0.44444, 0, 0, 0.575],\n    \"49\": [0, 0.44444, 0, 0, 0.575],\n    \"50\": [0, 0.44444, 0, 0, 0.575],\n    \"51\": [0.19444, 0.44444, 0, 0, 0.575],\n    \"52\": [0.19444, 0.44444, 0, 0, 0.575],\n    \"53\": [0.19444, 0.44444, 0, 0, 0.575],\n    \"54\": [0, 0.64444, 0, 0, 0.575],\n    \"55\": [0.19444, 0.44444, 0, 0, 0.575],\n    \"56\": [0, 0.64444, 0, 0, 0.575],\n    \"57\": [0.19444, 0.44444, 0, 0, 0.575],\n    \"65\": [0, 0.68611, 0, 0, 0.86944],\n    \"66\": [0, 0.68611, 0.04835, 0, 0.8664],\n    \"67\": [0, 0.68611, 0.06979, 0, 0.81694],\n    \"68\": [0, 0.68611, 0.03194, 0, 0.93812],\n    \"69\": [0, 0.68611, 0.05451, 0, 0.81007],\n    \"70\": [0, 0.68611, 0.15972, 0, 0.68889],\n    \"71\": [0, 0.68611, 0, 0, 0.88673],\n    \"72\": [0, 0.68611, 0.08229, 0, 0.98229],\n    \"73\": [0, 0.68611, 0.07778, 0, 0.51111],\n    \"74\": [0, 0.68611, 0.10069, 0, 0.63125],\n    \"75\": [0, 0.68611, 0.06979, 0, 0.97118],\n    \"76\": [0, 0.68611, 0, 0, 0.75555],\n    \"77\": [0, 0.68611, 0.11424, 0, 1.14201],\n    \"78\": [0, 0.68611, 0.11424, 0, 0.95034],\n    \"79\": [0, 0.68611, 0.03194, 0, 0.83666],\n    \"80\": [0, 0.68611, 0.15972, 0, 0.72309],\n    \"81\": [0.19444, 0.68611, 0, 0, 0.86861],\n    \"82\": [0, 0.68611, 0.00421, 0, 0.87235],\n    \"83\": [0, 0.68611, 0.05382, 0, 0.69271],\n    \"84\": [0, 0.68611, 0.15972, 0, 0.63663],\n    \"85\": [0, 0.68611, 0.11424, 0, 0.80027],\n    \"86\": [0, 0.68611, 0.25555, 0, 0.67778],\n    \"87\": [0, 0.68611, 0.15972, 0, 1.09305],\n    \"88\": [0, 0.68611, 0.07778, 0, 0.94722],\n    \"89\": [0, 0.68611, 0.25555, 0, 0.67458],\n    \"90\": [0, 0.68611, 0.06979, 0, 0.77257],\n    \"97\": [0, 0.44444, 0, 0, 0.63287],\n    \"98\": [0, 0.69444, 0, 0, 0.52083],\n    \"99\": [0, 0.44444, 0, 0, 0.51342],\n    \"100\": [0, 0.69444, 0, 0, 0.60972],\n    \"101\": [0, 0.44444, 0, 0, 0.55361],\n    \"102\": [0.19444, 0.69444, 0.11042, 0, 0.56806],\n    \"103\": [0.19444, 0.44444, 0.03704, 0, 0.5449],\n    \"104\": [0, 0.69444, 0, 0, 0.66759],\n    \"105\": [0, 0.69326, 0, 0, 0.4048],\n    \"106\": [0.19444, 0.69326, 0.0622, 0, 0.47083],\n    \"107\": [0, 0.69444, 0.01852, 0, 0.6037],\n    \"108\": [0, 0.69444, 0.0088, 0, 0.34815],\n    \"109\": [0, 0.44444, 0, 0, 1.0324],\n    \"110\": [0, 0.44444, 0, 0, 0.71296],\n    \"111\": [0, 0.44444, 0, 0, 0.58472],\n    \"112\": [0.19444, 0.44444, 0, 0, 0.60092],\n    \"113\": [0.19444, 0.44444, 0.03704, 0, 0.54213],\n    \"114\": [0, 0.44444, 0.03194, 0, 0.5287],\n    \"115\": [0, 0.44444, 0, 0, 0.53125],\n    \"116\": [0, 0.63492, 0, 0, 0.41528],\n    \"117\": [0, 0.44444, 0, 0, 0.68102],\n    \"118\": [0, 0.44444, 0.03704, 0, 0.56666],\n    \"119\": [0, 0.44444, 0.02778, 0, 0.83148],\n    \"120\": [0, 0.44444, 0, 0, 0.65903],\n    \"121\": [0.19444, 0.44444, 0.03704, 0, 0.59028],\n    \"122\": [0, 0.44444, 0.04213, 0, 0.55509],\n    \"160\": [0, 0, 0, 0, 0.25],\n    \"915\": [0, 0.68611, 0.15972, 0, 0.65694],\n    \"916\": [0, 0.68611, 0, 0, 0.95833],\n    \"920\": [0, 0.68611, 0.03194, 0, 0.86722],\n    \"923\": [0, 0.68611, 0, 0, 0.80555],\n    \"926\": [0, 0.68611, 0.07458, 0, 0.84125],\n    \"928\": [0, 0.68611, 0.08229, 0, 0.98229],\n    \"931\": [0, 0.68611, 0.05451, 0, 0.88507],\n    \"933\": [0, 0.68611, 0.15972, 0, 0.67083],\n    \"934\": [0, 0.68611, 0, 0, 0.76666],\n    \"936\": [0, 0.68611, 0.11653, 0, 0.71402],\n    \"937\": [0, 0.68611, 0.04835, 0, 0.8789],\n    \"945\": [0, 0.44444, 0, 0, 0.76064],\n    \"946\": [0.19444, 0.69444, 0.03403, 0, 0.65972],\n    \"947\": [0.19444, 0.44444, 0.06389, 0, 0.59003],\n    \"948\": [0, 0.69444, 0.03819, 0, 0.52222],\n    \"949\": [0, 0.44444, 0, 0, 0.52882],\n    \"950\": [0.19444, 0.69444, 0.06215, 0, 0.50833],\n    \"951\": [0.19444, 0.44444, 0.03704, 0, 0.6],\n    \"952\": [0, 0.69444, 0.03194, 0, 0.5618],\n    \"953\": [0, 0.44444, 0, 0, 0.41204],\n    \"954\": [0, 0.44444, 0, 0, 0.66759],\n    \"955\": [0, 0.69444, 0, 0, 0.67083],\n    \"956\": [0.19444, 0.44444, 0, 0, 0.70787],\n    \"957\": [0, 0.44444, 0.06898, 0, 0.57685],\n    \"958\": [0.19444, 0.69444, 0.03021, 0, 0.50833],\n    \"959\": [0, 0.44444, 0, 0, 0.58472],\n    \"960\": [0, 0.44444, 0.03704, 0, 0.68241],\n    \"961\": [0.19444, 0.44444, 0, 0, 0.6118],\n    \"962\": [0.09722, 0.44444, 0.07917, 0, 0.42361],\n    \"963\": [0, 0.44444, 0.03704, 0, 0.68588],\n    \"964\": [0, 0.44444, 0.13472, 0, 0.52083],\n    \"965\": [0, 0.44444, 0.03704, 0, 0.63055],\n    \"966\": [0.19444, 0.44444, 0, 0, 0.74722],\n    \"967\": [0.19444, 0.44444, 0, 0, 0.71805],\n    \"968\": [0.19444, 0.69444, 0.03704, 0, 0.75833],\n    \"969\": [0, 0.44444, 0.03704, 0, 0.71782],\n    \"977\": [0, 0.69444, 0, 0, 0.69155],\n    \"981\": [0.19444, 0.69444, 0, 0, 0.7125],\n    \"982\": [0, 0.44444, 0.03194, 0, 0.975],\n    \"1009\": [0.19444, 0.44444, 0, 0, 0.6118],\n    \"1013\": [0, 0.44444, 0, 0, 0.48333],\n    \"57649\": [0, 0.44444, 0, 0, 0.39352],\n    \"57911\": [0.19444, 0.44444, 0, 0, 0.43889]\n  },\n  \"Math-Italic\": {\n    \"32\": [0, 0, 0, 0, 0.25],\n    \"48\": [0, 0.43056, 0, 0, 0.5],\n    \"49\": [0, 0.43056, 0, 0, 0.5],\n    \"50\": [0, 0.43056, 0, 0, 0.5],\n    \"51\": [0.19444, 0.43056, 0, 0, 0.5],\n    \"52\": [0.19444, 0.43056, 0, 0, 0.5],\n    \"53\": [0.19444, 0.43056, 0, 0, 0.5],\n    \"54\": [0, 0.64444, 0, 0, 0.5],\n    \"55\": [0.19444, 0.43056, 0, 0, 0.5],\n    \"56\": [0, 0.64444, 0, 0, 0.5],\n    \"57\": [0.19444, 0.43056, 0, 0, 0.5],\n    \"65\": [0, 0.68333, 0, 0.13889, 0.75],\n    \"66\": [0, 0.68333, 0.05017, 0.08334, 0.75851],\n    \"67\": [0, 0.68333, 0.07153, 0.08334, 0.71472],\n    \"68\": [0, 0.68333, 0.02778, 0.05556, 0.82792],\n    \"69\": [0, 0.68333, 0.05764, 0.08334, 0.7382],\n    \"70\": [0, 0.68333, 0.13889, 0.08334, 0.64306],\n    \"71\": [0, 0.68333, 0, 0.08334, 0.78625],\n    \"72\": [0, 0.68333, 0.08125, 0.05556, 0.83125],\n    \"73\": [0, 0.68333, 0.07847, 0.11111, 0.43958],\n    \"74\": [0, 0.68333, 0.09618, 0.16667, 0.55451],\n    \"75\": [0, 0.68333, 0.07153, 0.05556, 0.84931],\n    \"76\": [0, 0.68333, 0, 0.02778, 0.68056],\n    \"77\": [0, 0.68333, 0.10903, 0.08334, 0.97014],\n    \"78\": [0, 0.68333, 0.10903, 0.08334, 0.80347],\n    \"79\": [0, 0.68333, 0.02778, 0.08334, 0.76278],\n    \"80\": [0, 0.68333, 0.13889, 0.08334, 0.64201],\n    \"81\": [0.19444, 0.68333, 0, 0.08334, 0.79056],\n    \"82\": [0, 0.68333, 0.00773, 0.08334, 0.75929],\n    \"83\": [0, 0.68333, 0.05764, 0.08334, 0.6132],\n    \"84\": [0, 0.68333, 0.13889, 0.08334, 0.58438],\n    \"85\": [0, 0.68333, 0.10903, 0.02778, 0.68278],\n    \"86\": [0, 0.68333, 0.22222, 0, 0.58333],\n    \"87\": [0, 0.68333, 0.13889, 0, 0.94445],\n    \"88\": [0, 0.68333, 0.07847, 0.08334, 0.82847],\n    \"89\": [0, 0.68333, 0.22222, 0, 0.58056],\n    \"90\": [0, 0.68333, 0.07153, 0.08334, 0.68264],\n    \"97\": [0, 0.43056, 0, 0, 0.52859],\n    \"98\": [0, 0.69444, 0, 0, 0.42917],\n    \"99\": [0, 0.43056, 0, 0.05556, 0.43276],\n    \"100\": [0, 0.69444, 0, 0.16667, 0.52049],\n    \"101\": [0, 0.43056, 0, 0.05556, 0.46563],\n    \"102\": [0.19444, 0.69444, 0.10764, 0.16667, 0.48959],\n    \"103\": [0.19444, 0.43056, 0.03588, 0.02778, 0.47697],\n    \"104\": [0, 0.69444, 0, 0, 0.57616],\n    \"105\": [0, 0.65952, 0, 0, 0.34451],\n    \"106\": [0.19444, 0.65952, 0.05724, 0, 0.41181],\n    \"107\": [0, 0.69444, 0.03148, 0, 0.5206],\n    \"108\": [0, 0.69444, 0.01968, 0.08334, 0.29838],\n    \"109\": [0, 0.43056, 0, 0, 0.87801],\n    \"110\": [0, 0.43056, 0, 0, 0.60023],\n    \"111\": [0, 0.43056, 0, 0.05556, 0.48472],\n    \"112\": [0.19444, 0.43056, 0, 0.08334, 0.50313],\n    \"113\": [0.19444, 0.43056, 0.03588, 0.08334, 0.44641],\n    \"114\": [0, 0.43056, 0.02778, 0.05556, 0.45116],\n    \"115\": [0, 0.43056, 0, 0.05556, 0.46875],\n    \"116\": [0, 0.61508, 0, 0.08334, 0.36111],\n    \"117\": [0, 0.43056, 0, 0.02778, 0.57246],\n    \"118\": [0, 0.43056, 0.03588, 0.02778, 0.48472],\n    \"119\": [0, 0.43056, 0.02691, 0.08334, 0.71592],\n    \"120\": [0, 0.43056, 0, 0.02778, 0.57153],\n    \"121\": [0.19444, 0.43056, 0.03588, 0.05556, 0.49028],\n    \"122\": [0, 0.43056, 0.04398, 0.05556, 0.46505],\n    \"160\": [0, 0, 0, 0, 0.25],\n    \"915\": [0, 0.68333, 0.13889, 0.08334, 0.61528],\n    \"916\": [0, 0.68333, 0, 0.16667, 0.83334],\n    \"920\": [0, 0.68333, 0.02778, 0.08334, 0.76278],\n    \"923\": [0, 0.68333, 0, 0.16667, 0.69445],\n    \"926\": [0, 0.68333, 0.07569, 0.08334, 0.74236],\n    \"928\": [0, 0.68333, 0.08125, 0.05556, 0.83125],\n    \"931\": [0, 0.68333, 0.05764, 0.08334, 0.77986],\n    \"933\": [0, 0.68333, 0.13889, 0.05556, 0.58333],\n    \"934\": [0, 0.68333, 0, 0.08334, 0.66667],\n    \"936\": [0, 0.68333, 0.11, 0.05556, 0.61222],\n    \"937\": [0, 0.68333, 0.05017, 0.08334, 0.7724],\n    \"945\": [0, 0.43056, 0.0037, 0.02778, 0.6397],\n    \"946\": [0.19444, 0.69444, 0.05278, 0.08334, 0.56563],\n    \"947\": [0.19444, 0.43056, 0.05556, 0, 0.51773],\n    \"948\": [0, 0.69444, 0.03785, 0.05556, 0.44444],\n    \"949\": [0, 0.43056, 0, 0.08334, 0.46632],\n    \"950\": [0.19444, 0.69444, 0.07378, 0.08334, 0.4375],\n    \"951\": [0.19444, 0.43056, 0.03588, 0.05556, 0.49653],\n    \"952\": [0, 0.69444, 0.02778, 0.08334, 0.46944],\n    \"953\": [0, 0.43056, 0, 0.05556, 0.35394],\n    \"954\": [0, 0.43056, 0, 0, 0.57616],\n    \"955\": [0, 0.69444, 0, 0, 0.58334],\n    \"956\": [0.19444, 0.43056, 0, 0.02778, 0.60255],\n    \"957\": [0, 0.43056, 0.06366, 0.02778, 0.49398],\n    \"958\": [0.19444, 0.69444, 0.04601, 0.11111, 0.4375],\n    \"959\": [0, 0.43056, 0, 0.05556, 0.48472],\n    \"960\": [0, 0.43056, 0.03588, 0, 0.57003],\n    \"961\": [0.19444, 0.43056, 0, 0.08334, 0.51702],\n    \"962\": [0.09722, 0.43056, 0.07986, 0.08334, 0.36285],\n    \"963\": [0, 0.43056, 0.03588, 0, 0.57141],\n    \"964\": [0, 0.43056, 0.1132, 0.02778, 0.43715],\n    \"965\": [0, 0.43056, 0.03588, 0.02778, 0.54028],\n    \"966\": [0.19444, 0.43056, 0, 0.08334, 0.65417],\n    \"967\": [0.19444, 0.43056, 0, 0.05556, 0.62569],\n    \"968\": [0.19444, 0.69444, 0.03588, 0.11111, 0.65139],\n    \"969\": [0, 0.43056, 0.03588, 0, 0.62245],\n    \"977\": [0, 0.69444, 0, 0.08334, 0.59144],\n    \"981\": [0.19444, 0.69444, 0, 0.08334, 0.59583],\n    \"982\": [0, 0.43056, 0.02778, 0, 0.82813],\n    \"1009\": [0.19444, 0.43056, 0, 0.08334, 0.51702],\n    \"1013\": [0, 0.43056, 0, 0.05556, 0.4059],\n    \"57649\": [0, 0.43056, 0, 0.02778, 0.32246],\n    \"57911\": [0.19444, 0.43056, 0, 0.08334, 0.38403]\n  },\n  \"SansSerif-Bold\": {\n    \"32\": [0, 0, 0, 0, 0.25],\n    \"33\": [0, 0.69444, 0, 0, 0.36667],\n    \"34\": [0, 0.69444, 0, 0, 0.55834],\n    \"35\": [0.19444, 0.69444, 0, 0, 0.91667],\n    \"36\": [0.05556, 0.75, 0, 0, 0.55],\n    \"37\": [0.05556, 0.75, 0, 0, 1.02912],\n    \"38\": [0, 0.69444, 0, 0, 0.83056],\n    \"39\": [0, 0.69444, 0, 0, 0.30556],\n    \"40\": [0.25, 0.75, 0, 0, 0.42778],\n    \"41\": [0.25, 0.75, 0, 0, 0.42778],\n    \"42\": [0, 0.75, 0, 0, 0.55],\n    \"43\": [0.11667, 0.61667, 0, 0, 0.85556],\n    \"44\": [0.10556, 0.13056, 0, 0, 0.30556],\n    \"45\": [0, 0.45833, 0, 0, 0.36667],\n    \"46\": [0, 0.13056, 0, 0, 0.30556],\n    \"47\": [0.25, 0.75, 0, 0, 0.55],\n    \"48\": [0, 0.69444, 0, 0, 0.55],\n    \"49\": [0, 0.69444, 0, 0, 0.55],\n    \"50\": [0, 0.69444, 0, 0, 0.55],\n    \"51\": [0, 0.69444, 0, 0, 0.55],\n    \"52\": [0, 0.69444, 0, 0, 0.55],\n    \"53\": [0, 0.69444, 0, 0, 0.55],\n    \"54\": [0, 0.69444, 0, 0, 0.55],\n    \"55\": [0, 0.69444, 0, 0, 0.55],\n    \"56\": [0, 0.69444, 0, 0, 0.55],\n    \"57\": [0, 0.69444, 0, 0, 0.55],\n    \"58\": [0, 0.45833, 0, 0, 0.30556],\n    \"59\": [0.10556, 0.45833, 0, 0, 0.30556],\n    \"61\": [-0.09375, 0.40625, 0, 0, 0.85556],\n    \"63\": [0, 0.69444, 0, 0, 0.51945],\n    \"64\": [0, 0.69444, 0, 0, 0.73334],\n    \"65\": [0, 0.69444, 0, 0, 0.73334],\n    \"66\": [0, 0.69444, 0, 0, 0.73334],\n    \"67\": [0, 0.69444, 0, 0, 0.70278],\n    \"68\": [0, 0.69444, 0, 0, 0.79445],\n    \"69\": [0, 0.69444, 0, 0, 0.64167],\n    \"70\": [0, 0.69444, 0, 0, 0.61111],\n    \"71\": [0, 0.69444, 0, 0, 0.73334],\n    \"72\": [0, 0.69444, 0, 0, 0.79445],\n    \"73\": [0, 0.69444, 0, 0, 0.33056],\n    \"74\": [0, 0.69444, 0, 0, 0.51945],\n    \"75\": [0, 0.69444, 0, 0, 0.76389],\n    \"76\": [0, 0.69444, 0, 0, 0.58056],\n    \"77\": [0, 0.69444, 0, 0, 0.97778],\n    \"78\": [0, 0.69444, 0, 0, 0.79445],\n    \"79\": [0, 0.69444, 0, 0, 0.79445],\n    \"80\": [0, 0.69444, 0, 0, 0.70278],\n    \"81\": [0.10556, 0.69444, 0, 0, 0.79445],\n    \"82\": [0, 0.69444, 0, 0, 0.70278],\n    \"83\": [0, 0.69444, 0, 0, 0.61111],\n    \"84\": [0, 0.69444, 0, 0, 0.73334],\n    \"85\": [0, 0.69444, 0, 0, 0.76389],\n    \"86\": [0, 0.69444, 0.01528, 0, 0.73334],\n    \"87\": [0, 0.69444, 0.01528, 0, 1.03889],\n    \"88\": [0, 0.69444, 0, 0, 0.73334],\n    \"89\": [0, 0.69444, 0.0275, 0, 0.73334],\n    \"90\": [0, 0.69444, 0, 0, 0.67223],\n    \"91\": [0.25, 0.75, 0, 0, 0.34306],\n    \"93\": [0.25, 0.75, 0, 0, 0.34306],\n    \"94\": [0, 0.69444, 0, 0, 0.55],\n    \"95\": [0.35, 0.10833, 0.03056, 0, 0.55],\n    \"97\": [0, 0.45833, 0, 0, 0.525],\n    \"98\": [0, 0.69444, 0, 0, 0.56111],\n    \"99\": [0, 0.45833, 0, 0, 0.48889],\n    \"100\": [0, 0.69444, 0, 0, 0.56111],\n    \"101\": [0, 0.45833, 0, 0, 0.51111],\n    \"102\": [0, 0.69444, 0.07639, 0, 0.33611],\n    \"103\": [0.19444, 0.45833, 0.01528, 0, 0.55],\n    \"104\": [0, 0.69444, 0, 0, 0.56111],\n    \"105\": [0, 0.69444, 0, 0, 0.25556],\n    \"106\": [0.19444, 0.69444, 0, 0, 0.28611],\n    \"107\": [0, 0.69444, 0, 0, 0.53056],\n    \"108\": [0, 0.69444, 0, 0, 0.25556],\n    \"109\": [0, 0.45833, 0, 0, 0.86667],\n    \"110\": [0, 0.45833, 0, 0, 0.56111],\n    \"111\": [0, 0.45833, 0, 0, 0.55],\n    \"112\": [0.19444, 0.45833, 0, 0, 0.56111],\n    \"113\": [0.19444, 0.45833, 0, 0, 0.56111],\n    \"114\": [0, 0.45833, 0.01528, 0, 0.37222],\n    \"115\": [0, 0.45833, 0, 0, 0.42167],\n    \"116\": [0, 0.58929, 0, 0, 0.40417],\n    \"117\": [0, 0.45833, 0, 0, 0.56111],\n    \"118\": [0, 0.45833, 0.01528, 0, 0.5],\n    \"119\": [0, 0.45833, 0.01528, 0, 0.74445],\n    \"120\": [0, 0.45833, 0, 0, 0.5],\n    \"121\": [0.19444, 0.45833, 0.01528, 0, 0.5],\n    \"122\": [0, 0.45833, 0, 0, 0.47639],\n    \"126\": [0.35, 0.34444, 0, 0, 0.55],\n    \"160\": [0, 0, 0, 0, 0.25],\n    \"168\": [0, 0.69444, 0, 0, 0.55],\n    \"176\": [0, 0.69444, 0, 0, 0.73334],\n    \"180\": [0, 0.69444, 0, 0, 0.55],\n    \"184\": [0.17014, 0, 0, 0, 0.48889],\n    \"305\": [0, 0.45833, 0, 0, 0.25556],\n    \"567\": [0.19444, 0.45833, 0, 0, 0.28611],\n    \"710\": [0, 0.69444, 0, 0, 0.55],\n    \"711\": [0, 0.63542, 0, 0, 0.55],\n    \"713\": [0, 0.63778, 0, 0, 0.55],\n    \"728\": [0, 0.69444, 0, 0, 0.55],\n    \"729\": [0, 0.69444, 0, 0, 0.30556],\n    \"730\": [0, 0.69444, 0, 0, 0.73334],\n    \"732\": [0, 0.69444, 0, 0, 0.55],\n    \"733\": [0, 0.69444, 0, 0, 0.55],\n    \"915\": [0, 0.69444, 0, 0, 0.58056],\n    \"916\": [0, 0.69444, 0, 0, 0.91667],\n    \"920\": [0, 0.69444, 0, 0, 0.85556],\n    \"923\": [0, 0.69444, 0, 0, 0.67223],\n    \"926\": [0, 0.69444, 0, 0, 0.73334],\n    \"928\": [0, 0.69444, 0, 0, 0.79445],\n    \"931\": [0, 0.69444, 0, 0, 0.79445],\n    \"933\": [0, 0.69444, 0, 0, 0.85556],\n    \"934\": [0, 0.69444, 0, 0, 0.79445],\n    \"936\": [0, 0.69444, 0, 0, 0.85556],\n    \"937\": [0, 0.69444, 0, 0, 0.79445],\n    \"8211\": [0, 0.45833, 0.03056, 0, 0.55],\n    \"8212\": [0, 0.45833, 0.03056, 0, 1.10001],\n    \"8216\": [0, 0.69444, 0, 0, 0.30556],\n    \"8217\": [0, 0.69444, 0, 0, 0.30556],\n    \"8220\": [0, 0.69444, 0, 0, 0.55834],\n    \"8221\": [0, 0.69444, 0, 0, 0.55834]\n  },\n  \"SansSerif-Italic\": {\n    \"32\": [0, 0, 0, 0, 0.25],\n    \"33\": [0, 0.69444, 0.05733, 0, 0.31945],\n    \"34\": [0, 0.69444, 0.00316, 0, 0.5],\n    \"35\": [0.19444, 0.69444, 0.05087, 0, 0.83334],\n    \"36\": [0.05556, 0.75, 0.11156, 0, 0.5],\n    \"37\": [0.05556, 0.75, 0.03126, 0, 0.83334],\n    \"38\": [0, 0.69444, 0.03058, 0, 0.75834],\n    \"39\": [0, 0.69444, 0.07816, 0, 0.27778],\n    \"40\": [0.25, 0.75, 0.13164, 0, 0.38889],\n    \"41\": [0.25, 0.75, 0.02536, 0, 0.38889],\n    \"42\": [0, 0.75, 0.11775, 0, 0.5],\n    \"43\": [0.08333, 0.58333, 0.02536, 0, 0.77778],\n    \"44\": [0.125, 0.08333, 0, 0, 0.27778],\n    \"45\": [0, 0.44444, 0.01946, 0, 0.33333],\n    \"46\": [0, 0.08333, 0, 0, 0.27778],\n    \"47\": [0.25, 0.75, 0.13164, 0, 0.5],\n    \"48\": [0, 0.65556, 0.11156, 0, 0.5],\n    \"49\": [0, 0.65556, 0.11156, 0, 0.5],\n    \"50\": [0, 0.65556, 0.11156, 0, 0.5],\n    \"51\": [0, 0.65556, 0.11156, 0, 0.5],\n    \"52\": [0, 0.65556, 0.11156, 0, 0.5],\n    \"53\": [0, 0.65556, 0.11156, 0, 0.5],\n    \"54\": [0, 0.65556, 0.11156, 0, 0.5],\n    \"55\": [0, 0.65556, 0.11156, 0, 0.5],\n    \"56\": [0, 0.65556, 0.11156, 0, 0.5],\n    \"57\": [0, 0.65556, 0.11156, 0, 0.5],\n    \"58\": [0, 0.44444, 0.02502, 0, 0.27778],\n    \"59\": [0.125, 0.44444, 0.02502, 0, 0.27778],\n    \"61\": [-0.13, 0.37, 0.05087, 0, 0.77778],\n    \"63\": [0, 0.69444, 0.11809, 0, 0.47222],\n    \"64\": [0, 0.69444, 0.07555, 0, 0.66667],\n    \"65\": [0, 0.69444, 0, 0, 0.66667],\n    \"66\": [0, 0.69444, 0.08293, 0, 0.66667],\n    \"67\": [0, 0.69444, 0.11983, 0, 0.63889],\n    \"68\": [0, 0.69444, 0.07555, 0, 0.72223],\n    \"69\": [0, 0.69444, 0.11983, 0, 0.59722],\n    \"70\": [0, 0.69444, 0.13372, 0, 0.56945],\n    \"71\": [0, 0.69444, 0.11983, 0, 0.66667],\n    \"72\": [0, 0.69444, 0.08094, 0, 0.70834],\n    \"73\": [0, 0.69444, 0.13372, 0, 0.27778],\n    \"74\": [0, 0.69444, 0.08094, 0, 0.47222],\n    \"75\": [0, 0.69444, 0.11983, 0, 0.69445],\n    \"76\": [0, 0.69444, 0, 0, 0.54167],\n    \"77\": [0, 0.69444, 0.08094, 0, 0.875],\n    \"78\": [0, 0.69444, 0.08094, 0, 0.70834],\n    \"79\": [0, 0.69444, 0.07555, 0, 0.73611],\n    \"80\": [0, 0.69444, 0.08293, 0, 0.63889],\n    \"81\": [0.125, 0.69444, 0.07555, 0, 0.73611],\n    \"82\": [0, 0.69444, 0.08293, 0, 0.64584],\n    \"83\": [0, 0.69444, 0.09205, 0, 0.55556],\n    \"84\": [0, 0.69444, 0.13372, 0, 0.68056],\n    \"85\": [0, 0.69444, 0.08094, 0, 0.6875],\n    \"86\": [0, 0.69444, 0.1615, 0, 0.66667],\n    \"87\": [0, 0.69444, 0.1615, 0, 0.94445],\n    \"88\": [0, 0.69444, 0.13372, 0, 0.66667],\n    \"89\": [0, 0.69444, 0.17261, 0, 0.66667],\n    \"90\": [0, 0.69444, 0.11983, 0, 0.61111],\n    \"91\": [0.25, 0.75, 0.15942, 0, 0.28889],\n    \"93\": [0.25, 0.75, 0.08719, 0, 0.28889],\n    \"94\": [0, 0.69444, 0.0799, 0, 0.5],\n    \"95\": [0.35, 0.09444, 0.08616, 0, 0.5],\n    \"97\": [0, 0.44444, 0.00981, 0, 0.48056],\n    \"98\": [0, 0.69444, 0.03057, 0, 0.51667],\n    \"99\": [0, 0.44444, 0.08336, 0, 0.44445],\n    \"100\": [0, 0.69444, 0.09483, 0, 0.51667],\n    \"101\": [0, 0.44444, 0.06778, 0, 0.44445],\n    \"102\": [0, 0.69444, 0.21705, 0, 0.30556],\n    \"103\": [0.19444, 0.44444, 0.10836, 0, 0.5],\n    \"104\": [0, 0.69444, 0.01778, 0, 0.51667],\n    \"105\": [0, 0.67937, 0.09718, 0, 0.23889],\n    \"106\": [0.19444, 0.67937, 0.09162, 0, 0.26667],\n    \"107\": [0, 0.69444, 0.08336, 0, 0.48889],\n    \"108\": [0, 0.69444, 0.09483, 0, 0.23889],\n    \"109\": [0, 0.44444, 0.01778, 0, 0.79445],\n    \"110\": [0, 0.44444, 0.01778, 0, 0.51667],\n    \"111\": [0, 0.44444, 0.06613, 0, 0.5],\n    \"112\": [0.19444, 0.44444, 0.0389, 0, 0.51667],\n    \"113\": [0.19444, 0.44444, 0.04169, 0, 0.51667],\n    \"114\": [0, 0.44444, 0.10836, 0, 0.34167],\n    \"115\": [0, 0.44444, 0.0778, 0, 0.38333],\n    \"116\": [0, 0.57143, 0.07225, 0, 0.36111],\n    \"117\": [0, 0.44444, 0.04169, 0, 0.51667],\n    \"118\": [0, 0.44444, 0.10836, 0, 0.46111],\n    \"119\": [0, 0.44444, 0.10836, 0, 0.68334],\n    \"120\": [0, 0.44444, 0.09169, 0, 0.46111],\n    \"121\": [0.19444, 0.44444, 0.10836, 0, 0.46111],\n    \"122\": [0, 0.44444, 0.08752, 0, 0.43472],\n    \"126\": [0.35, 0.32659, 0.08826, 0, 0.5],\n    \"160\": [0, 0, 0, 0, 0.25],\n    \"168\": [0, 0.67937, 0.06385, 0, 0.5],\n    \"176\": [0, 0.69444, 0, 0, 0.73752],\n    \"184\": [0.17014, 0, 0, 0, 0.44445],\n    \"305\": [0, 0.44444, 0.04169, 0, 0.23889],\n    \"567\": [0.19444, 0.44444, 0.04169, 0, 0.26667],\n    \"710\": [0, 0.69444, 0.0799, 0, 0.5],\n    \"711\": [0, 0.63194, 0.08432, 0, 0.5],\n    \"713\": [0, 0.60889, 0.08776, 0, 0.5],\n    \"714\": [0, 0.69444, 0.09205, 0, 0.5],\n    \"715\": [0, 0.69444, 0, 0, 0.5],\n    \"728\": [0, 0.69444, 0.09483, 0, 0.5],\n    \"729\": [0, 0.67937, 0.07774, 0, 0.27778],\n    \"730\": [0, 0.69444, 0, 0, 0.73752],\n    \"732\": [0, 0.67659, 0.08826, 0, 0.5],\n    \"733\": [0, 0.69444, 0.09205, 0, 0.5],\n    \"915\": [0, 0.69444, 0.13372, 0, 0.54167],\n    \"916\": [0, 0.69444, 0, 0, 0.83334],\n    \"920\": [0, 0.69444, 0.07555, 0, 0.77778],\n    \"923\": [0, 0.69444, 0, 0, 0.61111],\n    \"926\": [0, 0.69444, 0.12816, 0, 0.66667],\n    \"928\": [0, 0.69444, 0.08094, 0, 0.70834],\n    \"931\": [0, 0.69444, 0.11983, 0, 0.72222],\n    \"933\": [0, 0.69444, 0.09031, 0, 0.77778],\n    \"934\": [0, 0.69444, 0.04603, 0, 0.72222],\n    \"936\": [0, 0.69444, 0.09031, 0, 0.77778],\n    \"937\": [0, 0.69444, 0.08293, 0, 0.72222],\n    \"8211\": [0, 0.44444, 0.08616, 0, 0.5],\n    \"8212\": [0, 0.44444, 0.08616, 0, 1.0],\n    \"8216\": [0, 0.69444, 0.07816, 0, 0.27778],\n    \"8217\": [0, 0.69444, 0.07816, 0, 0.27778],\n    \"8220\": [0, 0.69444, 0.14205, 0, 0.5],\n    \"8221\": [0, 0.69444, 0.00316, 0, 0.5]\n  },\n  \"SansSerif-Regular\": {\n    \"32\": [0, 0, 0, 0, 0.25],\n    \"33\": [0, 0.69444, 0, 0, 0.31945],\n    \"34\": [0, 0.69444, 0, 0, 0.5],\n    \"35\": [0.19444, 0.69444, 0, 0, 0.83334],\n    \"36\": [0.05556, 0.75, 0, 0, 0.5],\n    \"37\": [0.05556, 0.75, 0, 0, 0.83334],\n    \"38\": [0, 0.69444, 0, 0, 0.75834],\n    \"39\": [0, 0.69444, 0, 0, 0.27778],\n    \"40\": [0.25, 0.75, 0, 0, 0.38889],\n    \"41\": [0.25, 0.75, 0, 0, 0.38889],\n    \"42\": [0, 0.75, 0, 0, 0.5],\n    \"43\": [0.08333, 0.58333, 0, 0, 0.77778],\n    \"44\": [0.125, 0.08333, 0, 0, 0.27778],\n    \"45\": [0, 0.44444, 0, 0, 0.33333],\n    \"46\": [0, 0.08333, 0, 0, 0.27778],\n    \"47\": [0.25, 0.75, 0, 0, 0.5],\n    \"48\": [0, 0.65556, 0, 0, 0.5],\n    \"49\": [0, 0.65556, 0, 0, 0.5],\n    \"50\": [0, 0.65556, 0, 0, 0.5],\n    \"51\": [0, 0.65556, 0, 0, 0.5],\n    \"52\": [0, 0.65556, 0, 0, 0.5],\n    \"53\": [0, 0.65556, 0, 0, 0.5],\n    \"54\": [0, 0.65556, 0, 0, 0.5],\n    \"55\": [0, 0.65556, 0, 0, 0.5],\n    \"56\": [0, 0.65556, 0, 0, 0.5],\n    \"57\": [0, 0.65556, 0, 0, 0.5],\n    \"58\": [0, 0.44444, 0, 0, 0.27778],\n    \"59\": [0.125, 0.44444, 0, 0, 0.27778],\n    \"61\": [-0.13, 0.37, 0, 0, 0.77778],\n    \"63\": [0, 0.69444, 0, 0, 0.47222],\n    \"64\": [0, 0.69444, 0, 0, 0.66667],\n    \"65\": [0, 0.69444, 0, 0, 0.66667],\n    \"66\": [0, 0.69444, 0, 0, 0.66667],\n    \"67\": [0, 0.69444, 0, 0, 0.63889],\n    \"68\": [0, 0.69444, 0, 0, 0.72223],\n    \"69\": [0, 0.69444, 0, 0, 0.59722],\n    \"70\": [0, 0.69444, 0, 0, 0.56945],\n    \"71\": [0, 0.69444, 0, 0, 0.66667],\n    \"72\": [0, 0.69444, 0, 0, 0.70834],\n    \"73\": [0, 0.69444, 0, 0, 0.27778],\n    \"74\": [0, 0.69444, 0, 0, 0.47222],\n    \"75\": [0, 0.69444, 0, 0, 0.69445],\n    \"76\": [0, 0.69444, 0, 0, 0.54167],\n    \"77\": [0, 0.69444, 0, 0, 0.875],\n    \"78\": [0, 0.69444, 0, 0, 0.70834],\n    \"79\": [0, 0.69444, 0, 0, 0.73611],\n    \"80\": [0, 0.69444, 0, 0, 0.63889],\n    \"81\": [0.125, 0.69444, 0, 0, 0.73611],\n    \"82\": [0, 0.69444, 0, 0, 0.64584],\n    \"83\": [0, 0.69444, 0, 0, 0.55556],\n    \"84\": [0, 0.69444, 0, 0, 0.68056],\n    \"85\": [0, 0.69444, 0, 0, 0.6875],\n    \"86\": [0, 0.69444, 0.01389, 0, 0.66667],\n    \"87\": [0, 0.69444, 0.01389, 0, 0.94445],\n    \"88\": [0, 0.69444, 0, 0, 0.66667],\n    \"89\": [0, 0.69444, 0.025, 0, 0.66667],\n    \"90\": [0, 0.69444, 0, 0, 0.61111],\n    \"91\": [0.25, 0.75, 0, 0, 0.28889],\n    \"93\": [0.25, 0.75, 0, 0, 0.28889],\n    \"94\": [0, 0.69444, 0, 0, 0.5],\n    \"95\": [0.35, 0.09444, 0.02778, 0, 0.5],\n    \"97\": [0, 0.44444, 0, 0, 0.48056],\n    \"98\": [0, 0.69444, 0, 0, 0.51667],\n    \"99\": [0, 0.44444, 0, 0, 0.44445],\n    \"100\": [0, 0.69444, 0, 0, 0.51667],\n    \"101\": [0, 0.44444, 0, 0, 0.44445],\n    \"102\": [0, 0.69444, 0.06944, 0, 0.30556],\n    \"103\": [0.19444, 0.44444, 0.01389, 0, 0.5],\n    \"104\": [0, 0.69444, 0, 0, 0.51667],\n    \"105\": [0, 0.67937, 0, 0, 0.23889],\n    \"106\": [0.19444, 0.67937, 0, 0, 0.26667],\n    \"107\": [0, 0.69444, 0, 0, 0.48889],\n    \"108\": [0, 0.69444, 0, 0, 0.23889],\n    \"109\": [0, 0.44444, 0, 0, 0.79445],\n    \"110\": [0, 0.44444, 0, 0, 0.51667],\n    \"111\": [0, 0.44444, 0, 0, 0.5],\n    \"112\": [0.19444, 0.44444, 0, 0, 0.51667],\n    \"113\": [0.19444, 0.44444, 0, 0, 0.51667],\n    \"114\": [0, 0.44444, 0.01389, 0, 0.34167],\n    \"115\": [0, 0.44444, 0, 0, 0.38333],\n    \"116\": [0, 0.57143, 0, 0, 0.36111],\n    \"117\": [0, 0.44444, 0, 0, 0.51667],\n    \"118\": [0, 0.44444, 0.01389, 0, 0.46111],\n    \"119\": [0, 0.44444, 0.01389, 0, 0.68334],\n    \"120\": [0, 0.44444, 0, 0, 0.46111],\n    \"121\": [0.19444, 0.44444, 0.01389, 0, 0.46111],\n    \"122\": [0, 0.44444, 0, 0, 0.43472],\n    \"126\": [0.35, 0.32659, 0, 0, 0.5],\n    \"160\": [0, 0, 0, 0, 0.25],\n    \"168\": [0, 0.67937, 0, 0, 0.5],\n    \"176\": [0, 0.69444, 0, 0, 0.66667],\n    \"184\": [0.17014, 0, 0, 0, 0.44445],\n    \"305\": [0, 0.44444, 0, 0, 0.23889],\n    \"567\": [0.19444, 0.44444, 0, 0, 0.26667],\n    \"710\": [0, 0.69444, 0, 0, 0.5],\n    \"711\": [0, 0.63194, 0, 0, 0.5],\n    \"713\": [0, 0.60889, 0, 0, 0.5],\n    \"714\": [0, 0.69444, 0, 0, 0.5],\n    \"715\": [0, 0.69444, 0, 0, 0.5],\n    \"728\": [0, 0.69444, 0, 0, 0.5],\n    \"729\": [0, 0.67937, 0, 0, 0.27778],\n    \"730\": [0, 0.69444, 0, 0, 0.66667],\n    \"732\": [0, 0.67659, 0, 0, 0.5],\n    \"733\": [0, 0.69444, 0, 0, 0.5],\n    \"915\": [0, 0.69444, 0, 0, 0.54167],\n    \"916\": [0, 0.69444, 0, 0, 0.83334],\n    \"920\": [0, 0.69444, 0, 0, 0.77778],\n    \"923\": [0, 0.69444, 0, 0, 0.61111],\n    \"926\": [0, 0.69444, 0, 0, 0.66667],\n    \"928\": [0, 0.69444, 0, 0, 0.70834],\n    \"931\": [0, 0.69444, 0, 0, 0.72222],\n    \"933\": [0, 0.69444, 0, 0, 0.77778],\n    \"934\": [0, 0.69444, 0, 0, 0.72222],\n    \"936\": [0, 0.69444, 0, 0, 0.77778],\n    \"937\": [0, 0.69444, 0, 0, 0.72222],\n    \"8211\": [0, 0.44444, 0.02778, 0, 0.5],\n    \"8212\": [0, 0.44444, 0.02778, 0, 1.0],\n    \"8216\": [0, 0.69444, 0, 0, 0.27778],\n    \"8217\": [0, 0.69444, 0, 0, 0.27778],\n    \"8220\": [0, 0.69444, 0, 0, 0.5],\n    \"8221\": [0, 0.69444, 0, 0, 0.5]\n  },\n  \"Script-Regular\": {\n    \"32\": [0, 0, 0, 0, 0.25],\n    \"65\": [0, 0.7, 0.22925, 0, 0.80253],\n    \"66\": [0, 0.7, 0.04087, 0, 0.90757],\n    \"67\": [0, 0.7, 0.1689, 0, 0.66619],\n    \"68\": [0, 0.7, 0.09371, 0, 0.77443],\n    \"69\": [0, 0.7, 0.18583, 0, 0.56162],\n    \"70\": [0, 0.7, 0.13634, 0, 0.89544],\n    \"71\": [0, 0.7, 0.17322, 0, 0.60961],\n    \"72\": [0, 0.7, 0.29694, 0, 0.96919],\n    \"73\": [0, 0.7, 0.19189, 0, 0.80907],\n    \"74\": [0.27778, 0.7, 0.19189, 0, 1.05159],\n    \"75\": [0, 0.7, 0.31259, 0, 0.91364],\n    \"76\": [0, 0.7, 0.19189, 0, 0.87373],\n    \"77\": [0, 0.7, 0.15981, 0, 1.08031],\n    \"78\": [0, 0.7, 0.3525, 0, 0.9015],\n    \"79\": [0, 0.7, 0.08078, 0, 0.73787],\n    \"80\": [0, 0.7, 0.08078, 0, 1.01262],\n    \"81\": [0, 0.7, 0.03305, 0, 0.88282],\n    \"82\": [0, 0.7, 0.06259, 0, 0.85],\n    \"83\": [0, 0.7, 0.19189, 0, 0.86767],\n    \"84\": [0, 0.7, 0.29087, 0, 0.74697],\n    \"85\": [0, 0.7, 0.25815, 0, 0.79996],\n    \"86\": [0, 0.7, 0.27523, 0, 0.62204],\n    \"87\": [0, 0.7, 0.27523, 0, 0.80532],\n    \"88\": [0, 0.7, 0.26006, 0, 0.94445],\n    \"89\": [0, 0.7, 0.2939, 0, 0.70961],\n    \"90\": [0, 0.7, 0.24037, 0, 0.8212],\n    \"160\": [0, 0, 0, 0, 0.25]\n  },\n  \"Size1-Regular\": {\n    \"32\": [0, 0, 0, 0, 0.25],\n    \"40\": [0.35001, 0.85, 0, 0, 0.45834],\n    \"41\": [0.35001, 0.85, 0, 0, 0.45834],\n    \"47\": [0.35001, 0.85, 0, 0, 0.57778],\n    \"91\": [0.35001, 0.85, 0, 0, 0.41667],\n    \"92\": [0.35001, 0.85, 0, 0, 0.57778],\n    \"93\": [0.35001, 0.85, 0, 0, 0.41667],\n    \"123\": [0.35001, 0.85, 0, 0, 0.58334],\n    \"125\": [0.35001, 0.85, 0, 0, 0.58334],\n    \"160\": [0, 0, 0, 0, 0.25],\n    \"710\": [0, 0.72222, 0, 0, 0.55556],\n    \"732\": [0, 0.72222, 0, 0, 0.55556],\n    \"770\": [0, 0.72222, 0, 0, 0.55556],\n    \"771\": [0, 0.72222, 0, 0, 0.55556],\n    \"8214\": [-0.00099, 0.601, 0, 0, 0.77778],\n    \"8593\": [1e-05, 0.6, 0, 0, 0.66667],\n    \"8595\": [1e-05, 0.6, 0, 0, 0.66667],\n    \"8657\": [1e-05, 0.6, 0, 0, 0.77778],\n    \"8659\": [1e-05, 0.6, 0, 0, 0.77778],\n    \"8719\": [0.25001, 0.75, 0, 0, 0.94445],\n    \"8720\": [0.25001, 0.75, 0, 0, 0.94445],\n    \"8721\": [0.25001, 0.75, 0, 0, 1.05556],\n    \"8730\": [0.35001, 0.85, 0, 0, 1.0],\n    \"8739\": [-0.00599, 0.606, 0, 0, 0.33333],\n    \"8741\": [-0.00599, 0.606, 0, 0, 0.55556],\n    \"8747\": [0.30612, 0.805, 0.19445, 0, 0.47222],\n    \"8748\": [0.306, 0.805, 0.19445, 0, 0.47222],\n    \"8749\": [0.306, 0.805, 0.19445, 0, 0.47222],\n    \"8750\": [0.30612, 0.805, 0.19445, 0, 0.47222],\n    \"8896\": [0.25001, 0.75, 0, 0, 0.83334],\n    \"8897\": [0.25001, 0.75, 0, 0, 0.83334],\n    \"8898\": [0.25001, 0.75, 0, 0, 0.83334],\n    \"8899\": [0.25001, 0.75, 0, 0, 0.83334],\n    \"8968\": [0.35001, 0.85, 0, 0, 0.47222],\n    \"8969\": [0.35001, 0.85, 0, 0, 0.47222],\n    \"8970\": [0.35001, 0.85, 0, 0, 0.47222],\n    \"8971\": [0.35001, 0.85, 0, 0, 0.47222],\n    \"9168\": [-0.00099, 0.601, 0, 0, 0.66667],\n    \"10216\": [0.35001, 0.85, 0, 0, 0.47222],\n    \"10217\": [0.35001, 0.85, 0, 0, 0.47222],\n    \"10752\": [0.25001, 0.75, 0, 0, 1.11111],\n    \"10753\": [0.25001, 0.75, 0, 0, 1.11111],\n    \"10754\": [0.25001, 0.75, 0, 0, 1.11111],\n    \"10756\": [0.25001, 0.75, 0, 0, 0.83334],\n    \"10758\": [0.25001, 0.75, 0, 0, 0.83334]\n  },\n  \"Size2-Regular\": {\n    \"32\": [0, 0, 0, 0, 0.25],\n    \"40\": [0.65002, 1.15, 0, 0, 0.59722],\n    \"41\": [0.65002, 1.15, 0, 0, 0.59722],\n    \"47\": [0.65002, 1.15, 0, 0, 0.81111],\n    \"91\": [0.65002, 1.15, 0, 0, 0.47222],\n    \"92\": [0.65002, 1.15, 0, 0, 0.81111],\n    \"93\": [0.65002, 1.15, 0, 0, 0.47222],\n    \"123\": [0.65002, 1.15, 0, 0, 0.66667],\n    \"125\": [0.65002, 1.15, 0, 0, 0.66667],\n    \"160\": [0, 0, 0, 0, 0.25],\n    \"710\": [0, 0.75, 0, 0, 1.0],\n    \"732\": [0, 0.75, 0, 0, 1.0],\n    \"770\": [0, 0.75, 0, 0, 1.0],\n    \"771\": [0, 0.75, 0, 0, 1.0],\n    \"8719\": [0.55001, 1.05, 0, 0, 1.27778],\n    \"8720\": [0.55001, 1.05, 0, 0, 1.27778],\n    \"8721\": [0.55001, 1.05, 0, 0, 1.44445],\n    \"8730\": [0.65002, 1.15, 0, 0, 1.0],\n    \"8747\": [0.86225, 1.36, 0.44445, 0, 0.55556],\n    \"8748\": [0.862, 1.36, 0.44445, 0, 0.55556],\n    \"8749\": [0.862, 1.36, 0.44445, 0, 0.55556],\n    \"8750\": [0.86225, 1.36, 0.44445, 0, 0.55556],\n    \"8896\": [0.55001, 1.05, 0, 0, 1.11111],\n    \"8897\": [0.55001, 1.05, 0, 0, 1.11111],\n    \"8898\": [0.55001, 1.05, 0, 0, 1.11111],\n    \"8899\": [0.55001, 1.05, 0, 0, 1.11111],\n    \"8968\": [0.65002, 1.15, 0, 0, 0.52778],\n    \"8969\": [0.65002, 1.15, 0, 0, 0.52778],\n    \"8970\": [0.65002, 1.15, 0, 0, 0.52778],\n    \"8971\": [0.65002, 1.15, 0, 0, 0.52778],\n    \"10216\": [0.65002, 1.15, 0, 0, 0.61111],\n    \"10217\": [0.65002, 1.15, 0, 0, 0.61111],\n    \"10752\": [0.55001, 1.05, 0, 0, 1.51112],\n    \"10753\": [0.55001, 1.05, 0, 0, 1.51112],\n    \"10754\": [0.55001, 1.05, 0, 0, 1.51112],\n    \"10756\": [0.55001, 1.05, 0, 0, 1.11111],\n    \"10758\": [0.55001, 1.05, 0, 0, 1.11111]\n  },\n  \"Size3-Regular\": {\n    \"32\": [0, 0, 0, 0, 0.25],\n    \"40\": [0.95003, 1.45, 0, 0, 0.73611],\n    \"41\": [0.95003, 1.45, 0, 0, 0.73611],\n    \"47\": [0.95003, 1.45, 0, 0, 1.04445],\n    \"91\": [0.95003, 1.45, 0, 0, 0.52778],\n    \"92\": [0.95003, 1.45, 0, 0, 1.04445],\n    \"93\": [0.95003, 1.45, 0, 0, 0.52778],\n    \"123\": [0.95003, 1.45, 0, 0, 0.75],\n    \"125\": [0.95003, 1.45, 0, 0, 0.75],\n    \"160\": [0, 0, 0, 0, 0.25],\n    \"710\": [0, 0.75, 0, 0, 1.44445],\n    \"732\": [0, 0.75, 0, 0, 1.44445],\n    \"770\": [0, 0.75, 0, 0, 1.44445],\n    \"771\": [0, 0.75, 0, 0, 1.44445],\n    \"8730\": [0.95003, 1.45, 0, 0, 1.0],\n    \"8968\": [0.95003, 1.45, 0, 0, 0.58334],\n    \"8969\": [0.95003, 1.45, 0, 0, 0.58334],\n    \"8970\": [0.95003, 1.45, 0, 0, 0.58334],\n    \"8971\": [0.95003, 1.45, 0, 0, 0.58334],\n    \"10216\": [0.95003, 1.45, 0, 0, 0.75],\n    \"10217\": [0.95003, 1.45, 0, 0, 0.75]\n  },\n  \"Size4-Regular\": {\n    \"32\": [0, 0, 0, 0, 0.25],\n    \"40\": [1.25003, 1.75, 0, 0, 0.79167],\n    \"41\": [1.25003, 1.75, 0, 0, 0.79167],\n    \"47\": [1.25003, 1.75, 0, 0, 1.27778],\n    \"91\": [1.25003, 1.75, 0, 0, 0.58334],\n    \"92\": [1.25003, 1.75, 0, 0, 1.27778],\n    \"93\": [1.25003, 1.75, 0, 0, 0.58334],\n    \"123\": [1.25003, 1.75, 0, 0, 0.80556],\n    \"125\": [1.25003, 1.75, 0, 0, 0.80556],\n    \"160\": [0, 0, 0, 0, 0.25],\n    \"710\": [0, 0.825, 0, 0, 1.8889],\n    \"732\": [0, 0.825, 0, 0, 1.8889],\n    \"770\": [0, 0.825, 0, 0, 1.8889],\n    \"771\": [0, 0.825, 0, 0, 1.8889],\n    \"8730\": [1.25003, 1.75, 0, 0, 1.0],\n    \"8968\": [1.25003, 1.75, 0, 0, 0.63889],\n    \"8969\": [1.25003, 1.75, 0, 0, 0.63889],\n    \"8970\": [1.25003, 1.75, 0, 0, 0.63889],\n    \"8971\": [1.25003, 1.75, 0, 0, 0.63889],\n    \"9115\": [0.64502, 1.155, 0, 0, 0.875],\n    \"9116\": [1e-05, 0.6, 0, 0, 0.875],\n    \"9117\": [0.64502, 1.155, 0, 0, 0.875],\n    \"9118\": [0.64502, 1.155, 0, 0, 0.875],\n    \"9119\": [1e-05, 0.6, 0, 0, 0.875],\n    \"9120\": [0.64502, 1.155, 0, 0, 0.875],\n    \"9121\": [0.64502, 1.155, 0, 0, 0.66667],\n    \"9122\": [-0.00099, 0.601, 0, 0, 0.66667],\n    \"9123\": [0.64502, 1.155, 0, 0, 0.66667],\n    \"9124\": [0.64502, 1.155, 0, 0, 0.66667],\n    \"9125\": [-0.00099, 0.601, 0, 0, 0.66667],\n    \"9126\": [0.64502, 1.155, 0, 0, 0.66667],\n    \"9127\": [1e-05, 0.9, 0, 0, 0.88889],\n    \"9128\": [0.65002, 1.15, 0, 0, 0.88889],\n    \"9129\": [0.90001, 0, 0, 0, 0.88889],\n    \"9130\": [0, 0.3, 0, 0, 0.88889],\n    \"9131\": [1e-05, 0.9, 0, 0, 0.88889],\n    \"9132\": [0.65002, 1.15, 0, 0, 0.88889],\n    \"9133\": [0.90001, 0, 0, 0, 0.88889],\n    \"9143\": [0.88502, 0.915, 0, 0, 1.05556],\n    \"10216\": [1.25003, 1.75, 0, 0, 0.80556],\n    \"10217\": [1.25003, 1.75, 0, 0, 0.80556],\n    \"57344\": [-0.00499, 0.605, 0, 0, 1.05556],\n    \"57345\": [-0.00499, 0.605, 0, 0, 1.05556],\n    \"57680\": [0, 0.12, 0, 0, 0.45],\n    \"57681\": [0, 0.12, 0, 0, 0.45],\n    \"57682\": [0, 0.12, 0, 0, 0.45],\n    \"57683\": [0, 0.12, 0, 0, 0.45]\n  },\n  \"Typewriter-Regular\": {\n    \"32\": [0, 0, 0, 0, 0.525],\n    \"33\": [0, 0.61111, 0, 0, 0.525],\n    \"34\": [0, 0.61111, 0, 0, 0.525],\n    \"35\": [0, 0.61111, 0, 0, 0.525],\n    \"36\": [0.08333, 0.69444, 0, 0, 0.525],\n    \"37\": [0.08333, 0.69444, 0, 0, 0.525],\n    \"38\": [0, 0.61111, 0, 0, 0.525],\n    \"39\": [0, 0.61111, 0, 0, 0.525],\n    \"40\": [0.08333, 0.69444, 0, 0, 0.525],\n    \"41\": [0.08333, 0.69444, 0, 0, 0.525],\n    \"42\": [0, 0.52083, 0, 0, 0.525],\n    \"43\": [-0.08056, 0.53055, 0, 0, 0.525],\n    \"44\": [0.13889, 0.125, 0, 0, 0.525],\n    \"45\": [-0.08056, 0.53055, 0, 0, 0.525],\n    \"46\": [0, 0.125, 0, 0, 0.525],\n    \"47\": [0.08333, 0.69444, 0, 0, 0.525],\n    \"48\": [0, 0.61111, 0, 0, 0.525],\n    \"49\": [0, 0.61111, 0, 0, 0.525],\n    \"50\": [0, 0.61111, 0, 0, 0.525],\n    \"51\": [0, 0.61111, 0, 0, 0.525],\n    \"52\": [0, 0.61111, 0, 0, 0.525],\n    \"53\": [0, 0.61111, 0, 0, 0.525],\n    \"54\": [0, 0.61111, 0, 0, 0.525],\n    \"55\": [0, 0.61111, 0, 0, 0.525],\n    \"56\": [0, 0.61111, 0, 0, 0.525],\n    \"57\": [0, 0.61111, 0, 0, 0.525],\n    \"58\": [0, 0.43056, 0, 0, 0.525],\n    \"59\": [0.13889, 0.43056, 0, 0, 0.525],\n    \"60\": [-0.05556, 0.55556, 0, 0, 0.525],\n    \"61\": [-0.19549, 0.41562, 0, 0, 0.525],\n    \"62\": [-0.05556, 0.55556, 0, 0, 0.525],\n    \"63\": [0, 0.61111, 0, 0, 0.525],\n    \"64\": [0, 0.61111, 0, 0, 0.525],\n    \"65\": [0, 0.61111, 0, 0, 0.525],\n    \"66\": [0, 0.61111, 0, 0, 0.525],\n    \"67\": [0, 0.61111, 0, 0, 0.525],\n    \"68\": [0, 0.61111, 0, 0, 0.525],\n    \"69\": [0, 0.61111, 0, 0, 0.525],\n    \"70\": [0, 0.61111, 0, 0, 0.525],\n    \"71\": [0, 0.61111, 0, 0, 0.525],\n    \"72\": [0, 0.61111, 0, 0, 0.525],\n    \"73\": [0, 0.61111, 0, 0, 0.525],\n    \"74\": [0, 0.61111, 0, 0, 0.525],\n    \"75\": [0, 0.61111, 0, 0, 0.525],\n    \"76\": [0, 0.61111, 0, 0, 0.525],\n    \"77\": [0, 0.61111, 0, 0, 0.525],\n    \"78\": [0, 0.61111, 0, 0, 0.525],\n    \"79\": [0, 0.61111, 0, 0, 0.525],\n    \"80\": [0, 0.61111, 0, 0, 0.525],\n    \"81\": [0.13889, 0.61111, 0, 0, 0.525],\n    \"82\": [0, 0.61111, 0, 0, 0.525],\n    \"83\": [0, 0.61111, 0, 0, 0.525],\n    \"84\": [0, 0.61111, 0, 0, 0.525],\n    \"85\": [0, 0.61111, 0, 0, 0.525],\n    \"86\": [0, 0.61111, 0, 0, 0.525],\n    \"87\": [0, 0.61111, 0, 0, 0.525],\n    \"88\": [0, 0.61111, 0, 0, 0.525],\n    \"89\": [0, 0.61111, 0, 0, 0.525],\n    \"90\": [0, 0.61111, 0, 0, 0.525],\n    \"91\": [0.08333, 0.69444, 0, 0, 0.525],\n    \"92\": [0.08333, 0.69444, 0, 0, 0.525],\n    \"93\": [0.08333, 0.69444, 0, 0, 0.525],\n    \"94\": [0, 0.61111, 0, 0, 0.525],\n    \"95\": [0.09514, 0, 0, 0, 0.525],\n    \"96\": [0, 0.61111, 0, 0, 0.525],\n    \"97\": [0, 0.43056, 0, 0, 0.525],\n    \"98\": [0, 0.61111, 0, 0, 0.525],\n    \"99\": [0, 0.43056, 0, 0, 0.525],\n    \"100\": [0, 0.61111, 0, 0, 0.525],\n    \"101\": [0, 0.43056, 0, 0, 0.525],\n    \"102\": [0, 0.61111, 0, 0, 0.525],\n    \"103\": [0.22222, 0.43056, 0, 0, 0.525],\n    \"104\": [0, 0.61111, 0, 0, 0.525],\n    \"105\": [0, 0.61111, 0, 0, 0.525],\n    \"106\": [0.22222, 0.61111, 0, 0, 0.525],\n    \"107\": [0, 0.61111, 0, 0, 0.525],\n    \"108\": [0, 0.61111, 0, 0, 0.525],\n    \"109\": [0, 0.43056, 0, 0, 0.525],\n    \"110\": [0, 0.43056, 0, 0, 0.525],\n    \"111\": [0, 0.43056, 0, 0, 0.525],\n    \"112\": [0.22222, 0.43056, 0, 0, 0.525],\n    \"113\": [0.22222, 0.43056, 0, 0, 0.525],\n    \"114\": [0, 0.43056, 0, 0, 0.525],\n    \"115\": [0, 0.43056, 0, 0, 0.525],\n    \"116\": [0, 0.55358, 0, 0, 0.525],\n    \"117\": [0, 0.43056, 0, 0, 0.525],\n    \"118\": [0, 0.43056, 0, 0, 0.525],\n    \"119\": [0, 0.43056, 0, 0, 0.525],\n    \"120\": [0, 0.43056, 0, 0, 0.525],\n    \"121\": [0.22222, 0.43056, 0, 0, 0.525],\n    \"122\": [0, 0.43056, 0, 0, 0.525],\n    \"123\": [0.08333, 0.69444, 0, 0, 0.525],\n    \"124\": [0.08333, 0.69444, 0, 0, 0.525],\n    \"125\": [0.08333, 0.69444, 0, 0, 0.525],\n    \"126\": [0, 0.61111, 0, 0, 0.525],\n    \"127\": [0, 0.61111, 0, 0, 0.525],\n    \"160\": [0, 0, 0, 0, 0.525],\n    \"176\": [0, 0.61111, 0, 0, 0.525],\n    \"184\": [0.19445, 0, 0, 0, 0.525],\n    \"305\": [0, 0.43056, 0, 0, 0.525],\n    \"567\": [0.22222, 0.43056, 0, 0, 0.525],\n    \"711\": [0, 0.56597, 0, 0, 0.525],\n    \"713\": [0, 0.56555, 0, 0, 0.525],\n    \"714\": [0, 0.61111, 0, 0, 0.525],\n    \"715\": [0, 0.61111, 0, 0, 0.525],\n    \"728\": [0, 0.61111, 0, 0, 0.525],\n    \"730\": [0, 0.61111, 0, 0, 0.525],\n    \"770\": [0, 0.61111, 0, 0, 0.525],\n    \"771\": [0, 0.61111, 0, 0, 0.525],\n    \"776\": [0, 0.61111, 0, 0, 0.525],\n    \"915\": [0, 0.61111, 0, 0, 0.525],\n    \"916\": [0, 0.61111, 0, 0, 0.525],\n    \"920\": [0, 0.61111, 0, 0, 0.525],\n    \"923\": [0, 0.61111, 0, 0, 0.525],\n    \"926\": [0, 0.61111, 0, 0, 0.525],\n    \"928\": [0, 0.61111, 0, 0, 0.525],\n    \"931\": [0, 0.61111, 0, 0, 0.525],\n    \"933\": [0, 0.61111, 0, 0, 0.525],\n    \"934\": [0, 0.61111, 0, 0, 0.525],\n    \"936\": [0, 0.61111, 0, 0, 0.525],\n    \"937\": [0, 0.61111, 0, 0, 0.525],\n    \"8216\": [0, 0.61111, 0, 0, 0.525],\n    \"8217\": [0, 0.61111, 0, 0, 0.525],\n    \"8242\": [0, 0.61111, 0, 0, 0.525],\n    \"9251\": [0.11111, 0.21944, 0, 0, 0.525]\n  }\n};\n\n/**\n * This file contains metrics regarding fonts and individual symbols. The sigma\n * and xi variables, as well as the metricMap map contain data extracted from\n * TeX, TeX font metrics, and the TTF files. These data are then exposed via the\n * `metrics` variable and the getCharacterMetrics function.\n */\n// In TeX, there are actually three sets of dimensions, one for each of\n// textstyle (size index 5 and higher: >=9pt), scriptstyle (size index 3 and 4:\n// 7-8pt), and scriptscriptstyle (size index 1 and 2: 5-6pt).  These are\n// provided in the arrays below, in that order.\n//\n// The font metrics are stored in fonts cmsy10, cmsy7, and cmsy5 respectively.\n// This was determined by running the following script:\n//\n//     latex -interaction=nonstopmode \\\n//     '\\documentclass{article}\\usepackage{amsmath}\\begin{document}' \\\n//     '$a$ \\expandafter\\show\\the\\textfont2' \\\n//     '\\expandafter\\show\\the\\scriptfont2' \\\n//     '\\expandafter\\show\\the\\scriptscriptfont2' \\\n//     '\\stop'\n//\n// The metrics themselves were retrieved using the following commands:\n//\n//     tftopl cmsy10\n//     tftopl cmsy7\n//     tftopl cmsy5\n//\n// The output of each of these commands is quite lengthy.  The only part we\n// care about is the FONTDIMEN section. Each value is measured in EMs.\nvar sigmasAndXis = {\n  slant: [0.250, 0.250, 0.250],\n  // sigma1\n  space: [0.000, 0.000, 0.000],\n  // sigma2\n  stretch: [0.000, 0.000, 0.000],\n  // sigma3\n  shrink: [0.000, 0.000, 0.000],\n  // sigma4\n  xHeight: [0.431, 0.431, 0.431],\n  // sigma5\n  quad: [1.000, 1.171, 1.472],\n  // sigma6\n  extraSpace: [0.000, 0.000, 0.000],\n  // sigma7\n  num1: [0.677, 0.732, 0.925],\n  // sigma8\n  num2: [0.394, 0.384, 0.387],\n  // sigma9\n  num3: [0.444, 0.471, 0.504],\n  // sigma10\n  denom1: [0.686, 0.752, 1.025],\n  // sigma11\n  denom2: [0.345, 0.344, 0.532],\n  // sigma12\n  sup1: [0.413, 0.503, 0.504],\n  // sigma13\n  sup2: [0.363, 0.431, 0.404],\n  // sigma14\n  sup3: [0.289, 0.286, 0.294],\n  // sigma15\n  sub1: [0.150, 0.143, 0.200],\n  // sigma16\n  sub2: [0.247, 0.286, 0.400],\n  // sigma17\n  supDrop: [0.386, 0.353, 0.494],\n  // sigma18\n  subDrop: [0.050, 0.071, 0.100],\n  // sigma19\n  delim1: [2.390, 1.700, 1.980],\n  // sigma20\n  delim2: [1.010, 1.157, 1.420],\n  // sigma21\n  axisHeight: [0.250, 0.250, 0.250],\n  // sigma22\n  // These font metrics are extracted from TeX by using tftopl on cmex10.tfm;\n  // they correspond to the font parameters of the extension fonts (family 3).\n  // See the TeXbook, page 441. In AMSTeX, the extension fonts scale; to\n  // match cmex7, we'd use cmex7.tfm values for script and scriptscript\n  // values.\n  defaultRuleThickness: [0.04, 0.049, 0.049],\n  // xi8; cmex7: 0.049\n  bigOpSpacing1: [0.111, 0.111, 0.111],\n  // xi9\n  bigOpSpacing2: [0.166, 0.166, 0.166],\n  // xi10\n  bigOpSpacing3: [0.2, 0.2, 0.2],\n  // xi11\n  bigOpSpacing4: [0.6, 0.611, 0.611],\n  // xi12; cmex7: 0.611\n  bigOpSpacing5: [0.1, 0.143, 0.143],\n  // xi13; cmex7: 0.143\n  // The \\sqrt rule width is taken from the height of the surd character.\n  // Since we use the same font at all sizes, this thickness doesn't scale.\n  sqrtRuleThickness: [0.04, 0.04, 0.04],\n  // This value determines how large a pt is, for metrics which are defined\n  // in terms of pts.\n  // This value is also used in katex.scss; if you change it make sure the\n  // values match.\n  ptPerEm: [10.0, 10.0, 10.0],\n  // The space between adjacent `|` columns in an array definition. From\n  // `\\showthe\\doublerulesep` in LaTeX. Equals 2.0 / ptPerEm.\n  doubleRuleSep: [0.2, 0.2, 0.2],\n  // The width of separator lines in {array} environments. From\n  // `\\showthe\\arrayrulewidth` in LaTeX. Equals 0.4 / ptPerEm.\n  arrayRuleWidth: [0.04, 0.04, 0.04],\n  // Two values from LaTeX source2e:\n  fboxsep: [0.3, 0.3, 0.3],\n  //        3 pt / ptPerEm\n  fboxrule: [0.04, 0.04, 0.04] // 0.4 pt / ptPerEm\n};\n// These are very rough approximations.  We default to Times New Roman which\n// should have Latin-1 and Cyrillic characters, but may not depending on the\n// operating system.  The metrics do not account for extra height from the\n// accents.  In the case of Cyrillic characters which have both ascenders and\n// descenders we prefer approximations with ascenders, primarily to prevent\n// the fraction bar or root line from intersecting the glyph.\n// TODO(kevinb) allow union of multiple glyph metrics for better accuracy.\nvar extraCharacterMap = {\n  // Latin-1\n  'Å': 'A',\n  'Ð': 'D',\n  'Þ': 'o',\n  'å': 'a',\n  'ð': 'd',\n  'þ': 'o',\n  // Cyrillic\n  'А': 'A',\n  'Б': 'B',\n  'В': 'B',\n  'Г': 'F',\n  'Д': 'A',\n  'Е': 'E',\n  'Ж': 'K',\n  'З': '3',\n  'И': 'N',\n  'Й': 'N',\n  'К': 'K',\n  'Л': 'N',\n  'М': 'M',\n  'Н': 'H',\n  'О': 'O',\n  'П': 'N',\n  'Р': 'P',\n  'С': 'C',\n  'Т': 'T',\n  'У': 'y',\n  'Ф': 'O',\n  'Х': 'X',\n  'Ц': 'U',\n  'Ч': 'h',\n  'Ш': 'W',\n  'Щ': 'W',\n  'Ъ': 'B',\n  'Ы': 'X',\n  'Ь': 'B',\n  'Э': '3',\n  'Ю': 'X',\n  'Я': 'R',\n  'а': 'a',\n  'б': 'b',\n  'в': 'a',\n  'г': 'r',\n  'д': 'y',\n  'е': 'e',\n  'ж': 'm',\n  'з': 'e',\n  'и': 'n',\n  'й': 'n',\n  'к': 'n',\n  'л': 'n',\n  'м': 'm',\n  'н': 'n',\n  'о': 'o',\n  'п': 'n',\n  'р': 'p',\n  'с': 'c',\n  'т': 'o',\n  'у': 'y',\n  'ф': 'b',\n  'х': 'x',\n  'ц': 'n',\n  'ч': 'n',\n  'ш': 'w',\n  'щ': 'w',\n  'ъ': 'a',\n  'ы': 'm',\n  'ь': 'a',\n  'э': 'e',\n  'ю': 'm',\n  'я': 'r'\n};\n/**\n * This function adds new font metrics to default metricMap\n * It can also override existing metrics\n */\nfunction setFontMetrics(fontName, metrics) {\n  fontMetricsData[fontName] = metrics;\n}\n/**\n * This function is a convenience function for looking up information in the\n * metricMap table. It takes a character as a string, and a font.\n *\n * Note: the `width` property may be undefined if fontMetricsData.js wasn't\n * built using `Make extended_metrics`.\n */\nfunction getCharacterMetrics(character, font, mode) {\n  if (!fontMetricsData[font]) {\n    throw new Error(\"Font metrics not found for font: \" + font + \".\");\n  }\n  var ch = character.charCodeAt(0);\n  var metrics = fontMetricsData[font][ch];\n  if (!metrics && character[0] in extraCharacterMap) {\n    ch = extraCharacterMap[character[0]].charCodeAt(0);\n    metrics = fontMetricsData[font][ch];\n  }\n  if (!metrics && mode === 'text') {\n    // We don't typically have font metrics for Asian scripts.\n    // But since we support them in text mode, we need to return\n    // some sort of metrics.\n    // So if the character is in a script we support but we\n    // don't have metrics for it, just use the metrics for\n    // the Latin capital letter M. This is close enough because\n    // we (currently) only care about the height of the glyph\n    // not its width.\n    if (supportedCodepoint(ch)) {\n      metrics = fontMetricsData[font][77]; // 77 is the charcode for 'M'\n    }\n  }\n  if (metrics) {\n    return {\n      depth: metrics[0],\n      height: metrics[1],\n      italic: metrics[2],\n      skew: metrics[3],\n      width: metrics[4]\n    };\n  }\n}\nvar fontMetricsBySizeIndex = {};\n/**\n * Get the font metrics for a given size.\n */\nfunction getGlobalMetrics(size) {\n  var sizeIndex;\n  if (size >= 5) {\n    sizeIndex = 0;\n  } else if (size >= 3) {\n    sizeIndex = 1;\n  } else {\n    sizeIndex = 2;\n  }\n  if (!fontMetricsBySizeIndex[sizeIndex]) {\n    var metrics = fontMetricsBySizeIndex[sizeIndex] = {\n      cssEmPerMu: sigmasAndXis.quad[sizeIndex] / 18\n    };\n    for (var key in sigmasAndXis) {\n      if (sigmasAndXis.hasOwnProperty(key)) {\n        metrics[key] = sigmasAndXis[key][sizeIndex];\n      }\n    }\n  }\n  return fontMetricsBySizeIndex[sizeIndex];\n}\n\n/**\n * This file holds a list of all no-argument functions and single-character\n * symbols (like 'a' or ';').\n *\n * For each of the symbols, there are three properties they can have:\n * - font (required): the font to be used for this symbol. Either \"main\" (the\n     normal font), or \"ams\" (the ams fonts).\n * - group (required): the ParseNode group type the symbol should have (i.e.\n     \"textord\", \"mathord\", etc).\n     See https://github.com/KaTeX/KaTeX/wiki/Examining-TeX#group-types\n * - replace: the character that this symbol or function should be\n *   replaced with (i.e. \"\\phi\" has a replace value of \"\\u03d5\", the phi\n *   character in the main font).\n *\n * The outermost map in the table indicates what mode the symbols should be\n * accepted in (e.g. \"math\" or \"text\").\n */\n// Some of these have a \"-token\" suffix since these are also used as `ParseNode`\n// types for raw text tokens, and we want to avoid conflicts with higher-level\n// `ParseNode` types. These `ParseNode`s are constructed within `Parser` by\n// looking up the `symbols` map.\nvar ATOMS = {\n  \"bin\": 1,\n  \"close\": 1,\n  \"inner\": 1,\n  \"open\": 1,\n  \"punct\": 1,\n  \"rel\": 1\n};\nvar NON_ATOMS = {\n  \"accent-token\": 1,\n  \"mathord\": 1,\n  \"op-token\": 1,\n  \"spacing\": 1,\n  \"textord\": 1\n};\nvar symbols = {\n  \"math\": {},\n  \"text\": {}\n};\n/** `acceptUnicodeChar = true` is only applicable if `replace` is set. */\nfunction defineSymbol(mode, font, group, replace, name, acceptUnicodeChar) {\n  symbols[mode][name] = {\n    font,\n    group,\n    replace\n  };\n  if (acceptUnicodeChar && replace) {\n    symbols[mode][replace] = symbols[mode][name];\n  }\n}\n// Some abbreviations for commonly used strings.\n// This helps minify the code, and also spotting typos using jshint.\n// modes:\nvar math = \"math\";\nvar text = \"text\";\n// fonts:\nvar main = \"main\";\nvar ams = \"ams\";\n// groups:\nvar accent = \"accent-token\";\nvar bin = \"bin\";\nvar close = \"close\";\nvar inner = \"inner\";\nvar mathord = \"mathord\";\nvar op = \"op-token\";\nvar open = \"open\";\nvar punct = \"punct\";\nvar rel = \"rel\";\nvar spacing = \"spacing\";\nvar textord = \"textord\";\n// Now comes the symbol table\n// Relation Symbols\ndefineSymbol(math, main, rel, \"\\u2261\", \"\\\\equiv\", true);\ndefineSymbol(math, main, rel, \"\\u227a\", \"\\\\prec\", true);\ndefineSymbol(math, main, rel, \"\\u227b\", \"\\\\succ\", true);\ndefineSymbol(math, main, rel, \"\\u223c\", \"\\\\sim\", true);\ndefineSymbol(math, main, rel, \"\\u22a5\", \"\\\\perp\");\ndefineSymbol(math, main, rel, \"\\u2aaf\", \"\\\\preceq\", true);\ndefineSymbol(math, main, rel, \"\\u2ab0\", \"\\\\succeq\", true);\ndefineSymbol(math, main, rel, \"\\u2243\", \"\\\\simeq\", true);\ndefineSymbol(math, main, rel, \"\\u2223\", \"\\\\mid\", true);\ndefineSymbol(math, main, rel, \"\\u226a\", \"\\\\ll\", true);\ndefineSymbol(math, main, rel, \"\\u226b\", \"\\\\gg\", true);\ndefineSymbol(math, main, rel, \"\\u224d\", \"\\\\asymp\", true);\ndefineSymbol(math, main, rel, \"\\u2225\", \"\\\\parallel\");\ndefineSymbol(math, main, rel, \"\\u22c8\", \"\\\\bowtie\", true);\ndefineSymbol(math, main, rel, \"\\u2323\", \"\\\\smile\", true);\ndefineSymbol(math, main, rel, \"\\u2291\", \"\\\\sqsubseteq\", true);\ndefineSymbol(math, main, rel, \"\\u2292\", \"\\\\sqsupseteq\", true);\ndefineSymbol(math, main, rel, \"\\u2250\", \"\\\\doteq\", true);\ndefineSymbol(math, main, rel, \"\\u2322\", \"\\\\frown\", true);\ndefineSymbol(math, main, rel, \"\\u220b\", \"\\\\ni\", true);\ndefineSymbol(math, main, rel, \"\\u221d\", \"\\\\propto\", true);\ndefineSymbol(math, main, rel, \"\\u22a2\", \"\\\\vdash\", true);\ndefineSymbol(math, main, rel, \"\\u22a3\", \"\\\\dashv\", true);\ndefineSymbol(math, main, rel, \"\\u220b\", \"\\\\owns\");\n// Punctuation\ndefineSymbol(math, main, punct, \"\\u002e\", \"\\\\ldotp\");\ndefineSymbol(math, main, punct, \"\\u22c5\", \"\\\\cdotp\");\n// The KaTeX fonts do not contain U+00B7. Use the centered dot glyph at U+22C5\n// in both modes, but keep math-mode punctuation spacing only in math mode.\ndefineSymbol(math, main, punct, \"\\u22c5\", \"\\u00b7\");\ndefineSymbol(text, main, textord, \"\\u22c5\", \"\\u00b7\");\n// Misc Symbols\ndefineSymbol(math, main, textord, \"\\u0023\", \"\\\\#\");\ndefineSymbol(text, main, textord, \"\\u0023\", \"\\\\#\");\ndefineSymbol(math, main, textord, \"\\u0026\", \"\\\\&\");\ndefineSymbol(text, main, textord, \"\\u0026\", \"\\\\&\");\ndefineSymbol(math, main, textord, \"\\u2135\", \"\\\\aleph\", true);\ndefineSymbol(math, main, textord, \"\\u2200\", \"\\\\forall\", true);\ndefineSymbol(math, main, textord, \"\\u210f\", \"\\\\hbar\", true);\ndefineSymbol(math, main, textord, \"\\u2203\", \"\\\\exists\", true);\ndefineSymbol(math, main, textord, \"\\u2207\", \"\\\\nabla\", true);\ndefineSymbol(math, main, textord, \"\\u266d\", \"\\\\flat\", true);\ndefineSymbol(math, main, textord, \"\\u2113\", \"\\\\ell\", true);\ndefineSymbol(math, main, textord, \"\\u266e\", \"\\\\natural\", true);\ndefineSymbol(math, main, textord, \"\\u2663\", \"\\\\clubsuit\", true);\ndefineSymbol(math, main, textord, \"\\u2118\", \"\\\\wp\", true);\ndefineSymbol(math, main, textord, \"\\u266f\", \"\\\\sharp\", true);\ndefineSymbol(math, main, textord, \"\\u2662\", \"\\\\diamondsuit\", true);\ndefineSymbol(math, main, textord, \"\\u211c\", \"\\\\Re\", true);\ndefineSymbol(math, main, textord, \"\\u2661\", \"\\\\heartsuit\", true);\ndefineSymbol(math, main, textord, \"\\u2111\", \"\\\\Im\", true);\ndefineSymbol(math, main, textord, \"\\u2660\", \"\\\\spadesuit\", true);\ndefineSymbol(math, main, textord, \"\\u00a7\", \"\\\\S\", true);\ndefineSymbol(text, main, textord, \"\\u00a7\", \"\\\\S\");\ndefineSymbol(math, main, textord, \"\\u00b6\", \"\\\\P\", true);\ndefineSymbol(text, main, textord, \"\\u00b6\", \"\\\\P\");\n// Math and Text\ndefineSymbol(math, main, textord, \"\\u2020\", \"\\\\dag\");\ndefineSymbol(text, main, textord, \"\\u2020\", \"\\\\dag\");\ndefineSymbol(text, main, textord, \"\\u2020\", \"\\\\textdagger\");\ndefineSymbol(math, main, textord, \"\\u2021\", \"\\\\ddag\");\ndefineSymbol(text, main, textord, \"\\u2021\", \"\\\\ddag\");\ndefineSymbol(text, main, textord, \"\\u2021\", \"\\\\textdaggerdbl\");\n// Large Delimiters\ndefineSymbol(math, main, close, \"\\u23b1\", \"\\\\rmoustache\", true);\ndefineSymbol(math, main, open, \"\\u23b0\", \"\\\\lmoustache\", true);\ndefineSymbol(math, main, close, \"\\u27ef\", \"\\\\rgroup\", true);\ndefineSymbol(math, main, open, \"\\u27ee\", \"\\\\lgroup\", true);\n// Binary Operators\ndefineSymbol(math, main, bin, \"\\u2213\", \"\\\\mp\", true);\ndefineSymbol(math, main, bin, \"\\u2296\", \"\\\\ominus\", true);\ndefineSymbol(math, main, bin, \"\\u228e\", \"\\\\uplus\", true);\ndefineSymbol(math, main, bin, \"\\u2293\", \"\\\\sqcap\", true);\ndefineSymbol(math, main, bin, \"\\u2217\", \"\\\\ast\");\ndefineSymbol(math, main, bin, \"\\u2294\", \"\\\\sqcup\", true);\ndefineSymbol(math, main, bin, \"\\u25ef\", \"\\\\bigcirc\", true);\ndefineSymbol(math, main, bin, \"\\u2219\", \"\\\\bullet\", true);\ndefineSymbol(math, main, bin, \"\\u2021\", \"\\\\ddagger\");\ndefineSymbol(math, main, bin, \"\\u2240\", \"\\\\wr\", true);\ndefineSymbol(math, main, bin, \"\\u2a3f\", \"\\\\amalg\");\ndefineSymbol(math, main, bin, \"\\u0026\", \"\\\\And\"); // from amsmath\n// Arrow Symbols\ndefineSymbol(math, main, rel, \"\\u27f5\", \"\\\\longleftarrow\", true);\ndefineSymbol(math, main, rel, \"\\u21d0\", \"\\\\Leftarrow\", true);\ndefineSymbol(math, main, rel, \"\\u27f8\", \"\\\\Longleftarrow\", true);\ndefineSymbol(math, main, rel, \"\\u27f6\", \"\\\\longrightarrow\", true);\ndefineSymbol(math, main, rel, \"\\u21d2\", \"\\\\Rightarrow\", true);\ndefineSymbol(math, main, rel, \"\\u27f9\", \"\\\\Longrightarrow\", true);\ndefineSymbol(math, main, rel, \"\\u2194\", \"\\\\leftrightarrow\", true);\ndefineSymbol(math, main, rel, \"\\u27f7\", \"\\\\longleftrightarrow\", true);\ndefineSymbol(math, main, rel, \"\\u21d4\", \"\\\\Leftrightarrow\", true);\ndefineSymbol(math, main, rel, \"\\u27fa\", \"\\\\Longleftrightarrow\", true);\ndefineSymbol(math, main, rel, \"\\u21a6\", \"\\\\mapsto\", true);\ndefineSymbol(math, main, rel, \"\\u27fc\", \"\\\\longmapsto\", true);\ndefineSymbol(math, main, rel, \"\\u2197\", \"\\\\nearrow\", true);\ndefineSymbol(math, main, rel, \"\\u21a9\", \"\\\\hookleftarrow\", true);\ndefineSymbol(math, main, rel, \"\\u21aa\", \"\\\\hookrightarrow\", true);\ndefineSymbol(math, main, rel, \"\\u2198\", \"\\\\searrow\", true);\ndefineSymbol(math, main, rel, \"\\u21bc\", \"\\\\leftharpoonup\", true);\ndefineSymbol(math, main, rel, \"\\u21c0\", \"\\\\rightharpoonup\", true);\ndefineSymbol(math, main, rel, \"\\u2199\", \"\\\\swarrow\", true);\ndefineSymbol(math, main, rel, \"\\u21bd\", \"\\\\leftharpoondown\", true);\ndefineSymbol(math, main, rel, \"\\u21c1\", \"\\\\rightharpoondown\", true);\ndefineSymbol(math, main, rel, \"\\u2196\", \"\\\\nwarrow\", true);\ndefineSymbol(math, main, rel, \"\\u21cc\", \"\\\\rightleftharpoons\", true);\n// AMS Negated Binary Relations\ndefineSymbol(math, ams, rel, \"\\u226e\", \"\\\\nless\", true);\n// Symbol names preceded by \"@\" each have a corresponding macro.\ndefineSymbol(math, ams, rel, \"\\ue010\", \"\\\\@nleqslant\");\ndefineSymbol(math, ams, rel, \"\\ue011\", \"\\\\@nleqq\");\ndefineSymbol(math, ams, rel, \"\\u2a87\", \"\\\\lneq\", true);\ndefineSymbol(math, ams, rel, \"\\u2268\", \"\\\\lneqq\", true);\ndefineSymbol(math, ams, rel, \"\\ue00c\", \"\\\\@lvertneqq\");\ndefineSymbol(math, ams, rel, \"\\u22e6\", \"\\\\lnsim\", true);\ndefineSymbol(math, ams, rel, \"\\u2a89\", \"\\\\lnapprox\", true);\ndefineSymbol(math, ams, rel, \"\\u2280\", \"\\\\nprec\", true);\n// unicode-math maps \\u22e0 to \\npreccurlyeq. We'll use the AMS synonym.\ndefineSymbol(math, ams, rel, \"\\u22e0\", \"\\\\npreceq\", true);\ndefineSymbol(math, ams, rel, \"\\u22e8\", \"\\\\precnsim\", true);\ndefineSymbol(math, ams, rel, \"\\u2ab9\", \"\\\\precnapprox\", true);\ndefineSymbol(math, ams, rel, \"\\u2241\", \"\\\\nsim\", true);\ndefineSymbol(math, ams, rel, \"\\ue006\", \"\\\\@nshortmid\");\ndefineSymbol(math, ams, rel, \"\\u2224\", \"\\\\nmid\", true);\ndefineSymbol(math, ams, rel, \"\\u22ac\", \"\\\\nvdash\", true);\ndefineSymbol(math, ams, rel, \"\\u22ad\", \"\\\\nvDash\", true);\ndefineSymbol(math, ams, rel, \"\\u22ea\", \"\\\\ntriangleleft\");\ndefineSymbol(math, ams, rel, \"\\u22ec\", \"\\\\ntrianglelefteq\", true);\ndefineSymbol(math, ams, rel, \"\\u228a\", \"\\\\subsetneq\", true);\ndefineSymbol(math, ams, rel, \"\\ue01a\", \"\\\\@varsubsetneq\");\ndefineSymbol(math, ams, rel, \"\\u2acb\", \"\\\\subsetneqq\", true);\ndefineSymbol(math, ams, rel, \"\\ue017\", \"\\\\@varsubsetneqq\");\ndefineSymbol(math, ams, rel, \"\\u226f\", \"\\\\ngtr\", true);\ndefineSymbol(math, ams, rel, \"\\ue00f\", \"\\\\@ngeqslant\");\ndefineSymbol(math, ams, rel, \"\\ue00e\", \"\\\\@ngeqq\");\ndefineSymbol(math, ams, rel, \"\\u2a88\", \"\\\\gneq\", true);\ndefineSymbol(math, ams, rel, \"\\u2269\", \"\\\\gneqq\", true);\ndefineSymbol(math, ams, rel, \"\\ue00d\", \"\\\\@gvertneqq\");\ndefineSymbol(math, ams, rel, \"\\u22e7\", \"\\\\gnsim\", true);\ndefineSymbol(math, ams, rel, \"\\u2a8a\", \"\\\\gnapprox\", true);\ndefineSymbol(math, ams, rel, \"\\u2281\", \"\\\\nsucc\", true);\n// unicode-math maps \\u22e1 to \\nsucccurlyeq. We'll use the AMS synonym.\ndefineSymbol(math, ams, rel, \"\\u22e1\", \"\\\\nsucceq\", true);\ndefineSymbol(math, ams, rel, \"\\u22e9\", \"\\\\succnsim\", true);\ndefineSymbol(math, ams, rel, \"\\u2aba\", \"\\\\succnapprox\", true);\n// unicode-math maps \\u2246 to \\simneqq. We'll use the AMS synonym.\ndefineSymbol(math, ams, rel, \"\\u2246\", \"\\\\ncong\", true);\ndefineSymbol(math, ams, rel, \"\\ue007\", \"\\\\@nshortparallel\");\ndefineSymbol(math, ams, rel, \"\\u2226\", \"\\\\nparallel\", true);\ndefineSymbol(math, ams, rel, \"\\u22af\", \"\\\\nVDash\", true);\ndefineSymbol(math, ams, rel, \"\\u22eb\", \"\\\\ntriangleright\");\ndefineSymbol(math, ams, rel, \"\\u22ed\", \"\\\\ntrianglerighteq\", true);\ndefineSymbol(math, ams, rel, \"\\ue018\", \"\\\\@nsupseteqq\");\ndefineSymbol(math, ams, rel, \"\\u228b\", \"\\\\supsetneq\", true);\ndefineSymbol(math, ams, rel, \"\\ue01b\", \"\\\\@varsupsetneq\");\ndefineSymbol(math, ams, rel, \"\\u2acc\", \"\\\\supsetneqq\", true);\ndefineSymbol(math, ams, rel, \"\\ue019\", \"\\\\@varsupsetneqq\");\ndefineSymbol(math, ams, rel, \"\\u22ae\", \"\\\\nVdash\", true);\ndefineSymbol(math, ams, rel, \"\\u2ab5\", \"\\\\precneqq\", true);\ndefineSymbol(math, ams, rel, \"\\u2ab6\", \"\\\\succneqq\", true);\ndefineSymbol(math, ams, rel, \"\\ue016\", \"\\\\@nsubseteqq\");\ndefineSymbol(math, ams, bin, \"\\u22b4\", \"\\\\unlhd\");\ndefineSymbol(math, ams, bin, \"\\u22b5\", \"\\\\unrhd\");\n// AMS Negated Arrows\ndefineSymbol(math, ams, rel, \"\\u219a\", \"\\\\nleftarrow\", true);\ndefineSymbol(math, ams, rel, \"\\u219b\", \"\\\\nrightarrow\", true);\ndefineSymbol(math, ams, rel, \"\\u21cd\", \"\\\\nLeftarrow\", true);\ndefineSymbol(math, ams, rel, \"\\u21cf\", \"\\\\nRightarrow\", true);\ndefineSymbol(math, ams, rel, \"\\u21ae\", \"\\\\nleftrightarrow\", true);\ndefineSymbol(math, ams, rel, \"\\u21ce\", \"\\\\nLeftrightarrow\", true);\n// AMS Misc\ndefineSymbol(math, ams, rel, \"\\u25b3\", \"\\\\vartriangle\");\ndefineSymbol(math, ams, textord, \"\\u210f\", \"\\\\hslash\");\ndefineSymbol(math, ams, textord, \"\\u25bd\", \"\\\\triangledown\");\ndefineSymbol(math, ams, textord, \"\\u25ca\", \"\\\\lozenge\");\ndefineSymbol(math, ams, textord, \"\\u24c8\", \"\\\\circledS\");\ndefineSymbol(math, ams, textord, \"\\u00ae\", \"\\\\circledR\");\ndefineSymbol(text, ams, textord, \"\\u00ae\", \"\\\\circledR\");\ndefineSymbol(math, ams, textord, \"\\u2221\", \"\\\\measuredangle\", true);\ndefineSymbol(math, ams, textord, \"\\u2204\", \"\\\\nexists\");\ndefineSymbol(math, ams, textord, \"\\u2127\", \"\\\\mho\");\ndefineSymbol(math, ams, textord, \"\\u2132\", \"\\\\Finv\", true);\ndefineSymbol(math, ams, textord, \"\\u2141\", \"\\\\Game\", true);\ndefineSymbol(math, ams, textord, \"\\u2035\", \"\\\\backprime\");\ndefineSymbol(math, ams, textord, \"\\u25b2\", \"\\\\blacktriangle\");\ndefineSymbol(math, ams, textord, \"\\u25bc\", \"\\\\blacktriangledown\");\ndefineSymbol(math, ams, textord, \"\\u25a0\", \"\\\\blacksquare\");\ndefineSymbol(math, ams, textord, \"\\u29eb\", \"\\\\blacklozenge\");\ndefineSymbol(math, ams, textord, \"\\u2605\", \"\\\\bigstar\");\ndefineSymbol(math, ams, textord, \"\\u2222\", \"\\\\sphericalangle\", true);\ndefineSymbol(math, ams, textord, \"\\u2201\", \"\\\\complement\", true);\n// unicode-math maps U+F0 to \\matheth. We map to AMS function \\eth\ndefineSymbol(math, ams, textord, \"\\u00f0\", \"\\\\eth\", true);\ndefineSymbol(text, main, textord, \"\\u00f0\", \"\\u00f0\");\ndefineSymbol(math, ams, textord, \"\\u2571\", \"\\\\diagup\");\ndefineSymbol(math, ams, textord, \"\\u2572\", \"\\\\diagdown\");\ndefineSymbol(math, ams, textord, \"\\u25a1\", \"\\\\square\");\ndefineSymbol(math, ams, textord, \"\\u25a1\", \"\\\\Box\");\ndefineSymbol(math, ams, textord, \"\\u25ca\", \"\\\\Diamond\");\n// unicode-math maps U+A5 to \\mathyen. We map to AMS function \\yen\ndefineSymbol(math, ams, textord, \"\\u00a5\", \"\\\\yen\", true);\ndefineSymbol(text, ams, textord, \"\\u00a5\", \"\\\\yen\", true);\ndefineSymbol(math, ams, textord, \"\\u2713\", \"\\\\checkmark\", true);\ndefineSymbol(text, ams, textord, \"\\u2713\", \"\\\\checkmark\");\n// AMS Hebrew\ndefineSymbol(math, ams, textord, \"\\u2136\", \"\\\\beth\", true);\ndefineSymbol(math, ams, textord, \"\\u2138\", \"\\\\daleth\", true);\ndefineSymbol(math, ams, textord, \"\\u2137\", \"\\\\gimel\", true);\n// AMS Greek\ndefineSymbol(math, ams, textord, \"\\u03dd\", \"\\\\digamma\", true);\ndefineSymbol(math, ams, textord, \"\\u03f0\", \"\\\\varkappa\");\n// AMS Delimiters\ndefineSymbol(math, ams, open, \"\\u250c\", \"\\\\@ulcorner\", true);\ndefineSymbol(math, ams, close, \"\\u2510\", \"\\\\@urcorner\", true);\ndefineSymbol(math, ams, open, \"\\u2514\", \"\\\\@llcorner\", true);\ndefineSymbol(math, ams, close, \"\\u2518\", \"\\\\@lrcorner\", true);\n// AMS Binary Relations\ndefineSymbol(math, ams, rel, \"\\u2266\", \"\\\\leqq\", true);\ndefineSymbol(math, ams, rel, \"\\u2a7d\", \"\\\\leqslant\", true);\ndefineSymbol(math, ams, rel, \"\\u2a95\", \"\\\\eqslantless\", true);\ndefineSymbol(math, ams, rel, \"\\u2272\", \"\\\\lesssim\", true);\ndefineSymbol(math, ams, rel, \"\\u2a85\", \"\\\\lessapprox\", true);\ndefineSymbol(math, ams, rel, \"\\u224a\", \"\\\\approxeq\", true);\ndefineSymbol(math, ams, bin, \"\\u22d6\", \"\\\\lessdot\");\ndefineSymbol(math, ams, rel, \"\\u22d8\", \"\\\\lll\", true);\ndefineSymbol(math, ams, rel, \"\\u2276\", \"\\\\lessgtr\", true);\ndefineSymbol(math, ams, rel, \"\\u22da\", \"\\\\lesseqgtr\", true);\ndefineSymbol(math, ams, rel, \"\\u2a8b\", \"\\\\lesseqqgtr\", true);\ndefineSymbol(math, ams, rel, \"\\u2251\", \"\\\\doteqdot\");\ndefineSymbol(math, ams, rel, \"\\u2253\", \"\\\\risingdotseq\", true);\ndefineSymbol(math, ams, rel, \"\\u2252\", \"\\\\fallingdotseq\", true);\ndefineSymbol(math, ams, rel, \"\\u223d\", \"\\\\backsim\", true);\ndefineSymbol(math, ams, rel, \"\\u22cd\", \"\\\\backsimeq\", true);\ndefineSymbol(math, ams, rel, \"\\u2ac5\", \"\\\\subseteqq\", true);\ndefineSymbol(math, ams, rel, \"\\u22d0\", \"\\\\Subset\", true);\ndefineSymbol(math, ams, rel, \"\\u228f\", \"\\\\sqsubset\", true);\ndefineSymbol(math, ams, rel, \"\\u227c\", \"\\\\preccurlyeq\", true);\ndefineSymbol(math, ams, rel, \"\\u22de\", \"\\\\curlyeqprec\", true);\ndefineSymbol(math, ams, rel, \"\\u227e\", \"\\\\precsim\", true);\ndefineSymbol(math, ams, rel, \"\\u2ab7\", \"\\\\precapprox\", true);\ndefineSymbol(math, ams, rel, \"\\u22b2\", \"\\\\vartriangleleft\");\ndefineSymbol(math, ams, rel, \"\\u22b4\", \"\\\\trianglelefteq\");\ndefineSymbol(math, ams, rel, \"\\u22a8\", \"\\\\vDash\", true);\ndefineSymbol(math, ams, rel, \"\\u22aa\", \"\\\\Vvdash\", true);\ndefineSymbol(math, ams, rel, \"\\u2323\", \"\\\\smallsmile\");\ndefineSymbol(math, ams, rel, \"\\u2322\", \"\\\\smallfrown\");\ndefineSymbol(math, ams, rel, \"\\u224f\", \"\\\\bumpeq\", true);\ndefineSymbol(math, ams, rel, \"\\u224e\", \"\\\\Bumpeq\", true);\ndefineSymbol(math, ams, rel, \"\\u2267\", \"\\\\geqq\", true);\ndefineSymbol(math, ams, rel, \"\\u2a7e\", \"\\\\geqslant\", true);\ndefineSymbol(math, ams, rel, \"\\u2a96\", \"\\\\eqslantgtr\", true);\ndefineSymbol(math, ams, rel, \"\\u2273\", \"\\\\gtrsim\", true);\ndefineSymbol(math, ams, rel, \"\\u2a86\", \"\\\\gtrapprox\", true);\ndefineSymbol(math, ams, bin, \"\\u22d7\", \"\\\\gtrdot\");\ndefineSymbol(math, ams, rel, \"\\u22d9\", \"\\\\ggg\", true);\ndefineSymbol(math, ams, rel, \"\\u2277\", \"\\\\gtrless\", true);\ndefineSymbol(math, ams, rel, \"\\u22db\", \"\\\\gtreqless\", true);\ndefineSymbol(math, ams, rel, \"\\u2a8c\", \"\\\\gtreqqless\", true);\ndefineSymbol(math, ams, rel, \"\\u2256\", \"\\\\eqcirc\", true);\ndefineSymbol(math, ams, rel, \"\\u2257\", \"\\\\circeq\", true);\ndefineSymbol(math, ams, rel, \"\\u225c\", \"\\\\triangleq\", true);\ndefineSymbol(math, ams, rel, \"\\u223c\", \"\\\\thicksim\");\ndefineSymbol(math, ams, rel, \"\\u2248\", \"\\\\thickapprox\");\ndefineSymbol(math, ams, rel, \"\\u2ac6\", \"\\\\supseteqq\", true);\ndefineSymbol(math, ams, rel, \"\\u22d1\", \"\\\\Supset\", true);\ndefineSymbol(math, ams, rel, \"\\u2290\", \"\\\\sqsupset\", true);\ndefineSymbol(math, ams, rel, \"\\u227d\", \"\\\\succcurlyeq\", true);\ndefineSymbol(math, ams, rel, \"\\u22df\", \"\\\\curlyeqsucc\", true);\ndefineSymbol(math, ams, rel, \"\\u227f\", \"\\\\succsim\", true);\ndefineSymbol(math, ams, rel, \"\\u2ab8\", \"\\\\succapprox\", true);\ndefineSymbol(math, ams, rel, \"\\u22b3\", \"\\\\vartriangleright\");\ndefineSymbol(math, ams, rel, \"\\u22b5\", \"\\\\trianglerighteq\");\ndefineSymbol(math, ams, rel, \"\\u22a9\", \"\\\\Vdash\", true);\ndefineSymbol(math, ams, rel, \"\\u2223\", \"\\\\shortmid\");\ndefineSymbol(math, ams, rel, \"\\u2225\", \"\\\\shortparallel\");\ndefineSymbol(math, ams, rel, \"\\u226c\", \"\\\\between\", true);\ndefineSymbol(math, ams, rel, \"\\u22d4\", \"\\\\pitchfork\", true);\ndefineSymbol(math, ams, rel, \"\\u221d\", \"\\\\varpropto\");\ndefineSymbol(math, ams, rel, \"\\u25c0\", \"\\\\blacktriangleleft\");\n// unicode-math says that \\therefore is a mathord atom.\n// We kept the amssymb atom type, which is rel.\ndefineSymbol(math, ams, rel, \"\\u2234\", \"\\\\therefore\", true);\ndefineSymbol(math, ams, rel, \"\\u220d\", \"\\\\backepsilon\");\ndefineSymbol(math, ams, rel, \"\\u25b6\", \"\\\\blacktriangleright\");\n// unicode-math says that \\because is a mathord atom.\n// We kept the amssymb atom type, which is rel.\ndefineSymbol(math, ams, rel, \"\\u2235\", \"\\\\because\", true);\ndefineSymbol(math, ams, rel, \"\\u22d8\", \"\\\\llless\");\ndefineSymbol(math, ams, rel, \"\\u22d9\", \"\\\\gggtr\");\ndefineSymbol(math, ams, bin, \"\\u22b2\", \"\\\\lhd\");\ndefineSymbol(math, ams, bin, \"\\u22b3\", \"\\\\rhd\");\ndefineSymbol(math, ams, rel, \"\\u2242\", \"\\\\eqsim\", true);\ndefineSymbol(math, main, rel, \"\\u22c8\", \"\\\\Join\");\ndefineSymbol(math, ams, rel, \"\\u2251\", \"\\\\Doteq\", true);\n// AMS Binary Operators\ndefineSymbol(math, ams, bin, \"\\u2214\", \"\\\\dotplus\", true);\ndefineSymbol(math, ams, bin, \"\\u2216\", \"\\\\smallsetminus\");\ndefineSymbol(math, ams, bin, \"\\u22d2\", \"\\\\Cap\", true);\ndefineSymbol(math, ams, bin, \"\\u22d3\", \"\\\\Cup\", true);\ndefineSymbol(math, ams, bin, \"\\u2a5e\", \"\\\\doublebarwedge\", true);\ndefineSymbol(math, ams, bin, \"\\u229f\", \"\\\\boxminus\", true);\ndefineSymbol(math, ams, bin, \"\\u229e\", \"\\\\boxplus\", true);\ndefineSymbol(math, ams, bin, \"\\u22c7\", \"\\\\divideontimes\", true);\ndefineSymbol(math, ams, bin, \"\\u22c9\", \"\\\\ltimes\", true);\ndefineSymbol(math, ams, bin, \"\\u22ca\", \"\\\\rtimes\", true);\ndefineSymbol(math, ams, bin, \"\\u22cb\", \"\\\\leftthreetimes\", true);\ndefineSymbol(math, ams, bin, \"\\u22cc\", \"\\\\rightthreetimes\", true);\ndefineSymbol(math, ams, bin, \"\\u22cf\", \"\\\\curlywedge\", true);\ndefineSymbol(math, ams, bin, \"\\u22ce\", \"\\\\curlyvee\", true);\ndefineSymbol(math, ams, bin, \"\\u229d\", \"\\\\circleddash\", true);\ndefineSymbol(math, ams, bin, \"\\u229b\", \"\\\\circledast\", true);\ndefineSymbol(math, ams, bin, \"\\u22c5\", \"\\\\centerdot\");\ndefineSymbol(math, ams, bin, \"\\u22ba\", \"\\\\intercal\", true);\ndefineSymbol(math, ams, bin, \"\\u22d2\", \"\\\\doublecap\");\ndefineSymbol(math, ams, bin, \"\\u22d3\", \"\\\\doublecup\");\ndefineSymbol(math, ams, bin, \"\\u22a0\", \"\\\\boxtimes\", true);\n// AMS Arrows\n// Note: unicode-math maps \\u21e2 to their own function \\rightdasharrow.\n// We'll map it to AMS function \\dashrightarrow. It produces the same atom.\ndefineSymbol(math, ams, rel, \"\\u21e2\", \"\\\\dashrightarrow\", true);\n// unicode-math maps \\u21e0 to \\leftdasharrow. We'll use the AMS synonym.\ndefineSymbol(math, ams, rel, \"\\u21e0\", \"\\\\dashleftarrow\", true);\ndefineSymbol(math, ams, rel, \"\\u21c7\", \"\\\\leftleftarrows\", true);\ndefineSymbol(math, ams, rel, \"\\u21c6\", \"\\\\leftrightarrows\", true);\ndefineSymbol(math, ams, rel, \"\\u21da\", \"\\\\Lleftarrow\", true);\ndefineSymbol(math, ams, rel, \"\\u219e\", \"\\\\twoheadleftarrow\", true);\ndefineSymbol(math, ams, rel, \"\\u21a2\", \"\\\\leftarrowtail\", true);\ndefineSymbol(math, ams, rel, \"\\u21ab\", \"\\\\looparrowleft\", true);\ndefineSymbol(math, ams, rel, \"\\u21cb\", \"\\\\leftrightharpoons\", true);\ndefineSymbol(math, ams, rel, \"\\u21b6\", \"\\\\curvearrowleft\", true);\n// unicode-math maps \\u21ba to \\acwopencirclearrow. We'll use the AMS synonym.\ndefineSymbol(math, ams, rel, \"\\u21ba\", \"\\\\circlearrowleft\", true);\ndefineSymbol(math, ams, rel, \"\\u21b0\", \"\\\\Lsh\", true);\ndefineSymbol(math, ams, rel, \"\\u21c8\", \"\\\\upuparrows\", true);\ndefineSymbol(math, ams, rel, \"\\u21bf\", \"\\\\upharpoonleft\", true);\ndefineSymbol(math, ams, rel, \"\\u21c3\", \"\\\\downharpoonleft\", true);\ndefineSymbol(math, main, rel, \"\\u22b6\", \"\\\\origof\", true); // not in font\ndefineSymbol(math, main, rel, \"\\u22b7\", \"\\\\imageof\", true); // not in font\ndefineSymbol(math, ams, rel, \"\\u22b8\", \"\\\\multimap\", true);\ndefineSymbol(math, ams, rel, \"\\u21ad\", \"\\\\leftrightsquigarrow\", true);\ndefineSymbol(math, ams, rel, \"\\u21c9\", \"\\\\rightrightarrows\", true);\ndefineSymbol(math, ams, rel, \"\\u21c4\", \"\\\\rightleftarrows\", true);\ndefineSymbol(math, ams, rel, \"\\u21a0\", \"\\\\twoheadrightarrow\", true);\ndefineSymbol(math, ams, rel, \"\\u21a3\", \"\\\\rightarrowtail\", true);\ndefineSymbol(math, ams, rel, \"\\u21ac\", \"\\\\looparrowright\", true);\ndefineSymbol(math, ams, rel, \"\\u21b7\", \"\\\\curvearrowright\", true);\n// unicode-math maps \\u21bb to \\cwopencirclearrow. We'll use the AMS synonym.\ndefineSymbol(math, ams, rel, \"\\u21bb\", \"\\\\circlearrowright\", true);\ndefineSymbol(math, ams, rel, \"\\u21b1\", \"\\\\Rsh\", true);\ndefineSymbol(math, ams, rel, \"\\u21ca\", \"\\\\downdownarrows\", true);\ndefineSymbol(math, ams, rel, \"\\u21be\", \"\\\\upharpoonright\", true);\ndefineSymbol(math, ams, rel, \"\\u21c2\", \"\\\\downharpoonright\", true);\ndefineSymbol(math, ams, rel, \"\\u21dd\", \"\\\\rightsquigarrow\", true);\ndefineSymbol(math, ams, rel, \"\\u21dd\", \"\\\\leadsto\");\ndefineSymbol(math, ams, rel, \"\\u21db\", \"\\\\Rrightarrow\", true);\ndefineSymbol(math, ams, rel, \"\\u21be\", \"\\\\restriction\");\ndefineSymbol(math, main, textord, \"\\u2018\", \"`\");\ndefineSymbol(math, main, textord, \"$\", \"\\\\$\");\ndefineSymbol(text, main, textord, \"$\", \"\\\\$\");\ndefineSymbol(text, main, textord, \"$\", \"\\\\textdollar\");\ndefineSymbol(math, main, textord, \"%\", \"\\\\%\");\ndefineSymbol(text, main, textord, \"%\", \"\\\\%\");\ndefineSymbol(math, main, textord, \"_\", \"\\\\_\");\ndefineSymbol(text, main, textord, \"_\", \"\\\\_\");\ndefineSymbol(text, main, textord, \"_\", \"\\\\textunderscore\");\ndefineSymbol(math, main, textord, \"\\u2220\", \"\\\\angle\", true);\ndefineSymbol(math, main, textord, \"\\u221e\", \"\\\\infty\", true);\ndefineSymbol(math, main, textord, \"\\u2032\", \"\\\\prime\");\ndefineSymbol(math, main, textord, \"\\u25b3\", \"\\\\triangle\");\ndefineSymbol(math, main, textord, \"\\u0393\", \"\\\\Gamma\", true);\ndefineSymbol(math, main, textord, \"\\u0394\", \"\\\\Delta\", true);\ndefineSymbol(math, main, textord, \"\\u0398\", \"\\\\Theta\", true);\ndefineSymbol(math, main, textord, \"\\u039b\", \"\\\\Lambda\", true);\ndefineSymbol(math, main, textord, \"\\u039e\", \"\\\\Xi\", true);\ndefineSymbol(math, main, textord, \"\\u03a0\", \"\\\\Pi\", true);\ndefineSymbol(math, main, textord, \"\\u03a3\", \"\\\\Sigma\", true);\ndefineSymbol(math, main, textord, \"\\u03a5\", \"\\\\Upsilon\", true);\ndefineSymbol(math, main, textord, \"\\u03a6\", \"\\\\Phi\", true);\ndefineSymbol(math, main, textord, \"\\u03a8\", \"\\\\Psi\", true);\ndefineSymbol(math, main, textord, \"\\u03a9\", \"\\\\Omega\", true);\ndefineSymbol(math, main, textord, \"A\", \"\\u0391\");\ndefineSymbol(math, main, textord, \"B\", \"\\u0392\");\ndefineSymbol(math, main, textord, \"E\", \"\\u0395\");\ndefineSymbol(math, main, textord, \"Z\", \"\\u0396\");\ndefineSymbol(math, main, textord, \"H\", \"\\u0397\");\ndefineSymbol(math, main, textord, \"I\", \"\\u0399\");\ndefineSymbol(math, main, textord, \"K\", \"\\u039A\");\ndefineSymbol(math, main, textord, \"M\", \"\\u039C\");\ndefineSymbol(math, main, textord, \"N\", \"\\u039D\");\ndefineSymbol(math, main, textord, \"O\", \"\\u039F\");\ndefineSymbol(math, main, textord, \"P\", \"\\u03A1\");\ndefineSymbol(math, main, textord, \"T\", \"\\u03A4\");\ndefineSymbol(math, main, textord, \"X\", \"\\u03A7\");\ndefineSymbol(math, main, textord, \"\\u00ac\", \"\\\\neg\", true);\ndefineSymbol(math, main, textord, \"\\u00ac\", \"\\\\lnot\");\ndefineSymbol(math, main, textord, \"\\u22a4\", \"\\\\top\");\ndefineSymbol(math, main, textord, \"\\u22a5\", \"\\\\bot\");\ndefineSymbol(math, main, textord, \"\\u2205\", \"\\\\emptyset\");\ndefineSymbol(math, ams, textord, \"\\u2205\", \"\\\\varnothing\");\ndefineSymbol(math, main, mathord, \"\\u03b1\", \"\\\\alpha\", true);\ndefineSymbol(math, main, mathord, \"\\u03b2\", \"\\\\beta\", true);\ndefineSymbol(math, main, mathord, \"\\u03b3\", \"\\\\gamma\", true);\ndefineSymbol(math, main, mathord, \"\\u03b4\", \"\\\\delta\", true);\ndefineSymbol(math, main, mathord, \"\\u03f5\", \"\\\\epsilon\", true);\ndefineSymbol(math, main, mathord, \"\\u03b6\", \"\\\\zeta\", true);\ndefineSymbol(math, main, mathord, \"\\u03b7\", \"\\\\eta\", true);\ndefineSymbol(math, main, mathord, \"\\u03b8\", \"\\\\theta\", true);\ndefineSymbol(math, main, mathord, \"\\u03b9\", \"\\\\iota\", true);\ndefineSymbol(math, main, mathord, \"\\u03ba\", \"\\\\kappa\", true);\ndefineSymbol(math, main, mathord, \"\\u03bb\", \"\\\\lambda\", true);\ndefineSymbol(math, main, mathord, \"\\u03bc\", \"\\\\mu\", true);\ndefineSymbol(math, main, mathord, \"\\u03bd\", \"\\\\nu\", true);\ndefineSymbol(math, main, mathord, \"\\u03be\", \"\\\\xi\", true);\ndefineSymbol(math, main, mathord, \"\\u03bf\", \"\\\\omicron\", true);\ndefineSymbol(math, main, mathord, \"\\u03c0\", \"\\\\pi\", true);\ndefineSymbol(math, main, mathord, \"\\u03c1\", \"\\\\rho\", true);\ndefineSymbol(math, main, mathord, \"\\u03c3\", \"\\\\sigma\", true);\ndefineSymbol(math, main, mathord, \"\\u03c4\", \"\\\\tau\", true);\ndefineSymbol(math, main, mathord, \"\\u03c5\", \"\\\\upsilon\", true);\ndefineSymbol(math, main, mathord, \"\\u03d5\", \"\\\\phi\", true);\ndefineSymbol(math, main, mathord, \"\\u03c7\", \"\\\\chi\", true);\ndefineSymbol(math, main, mathord, \"\\u03c8\", \"\\\\psi\", true);\ndefineSymbol(math, main, mathord, \"\\u03c9\", \"\\\\omega\", true);\ndefineSymbol(math, main, mathord, \"\\u03b5\", \"\\\\varepsilon\", true);\ndefineSymbol(math, main, mathord, \"\\u03d1\", \"\\\\vartheta\", true);\ndefineSymbol(math, main, mathord, \"\\u03d6\", \"\\\\varpi\", true);\ndefineSymbol(math, main, mathord, \"\\u03f1\", \"\\\\varrho\", true);\ndefineSymbol(math, main, mathord, \"\\u03c2\", \"\\\\varsigma\", true);\ndefineSymbol(math, main, mathord, \"\\u03c6\", \"\\\\varphi\", true);\ndefineSymbol(math, main, bin, \"\\u2217\", \"*\", true);\ndefineSymbol(math, main, bin, \"+\", \"+\");\ndefineSymbol(math, main, bin, \"\\u2212\", \"-\", true);\ndefineSymbol(math, main, bin, \"\\u22c5\", \"\\\\cdot\", true);\ndefineSymbol(math, main, bin, \"\\u2218\", \"\\\\circ\", true);\ndefineSymbol(math, main, bin, \"\\u00f7\", \"\\\\div\", true);\ndefineSymbol(math, main, bin, \"\\u00b1\", \"\\\\pm\", true);\ndefineSymbol(math, main, bin, \"\\u00d7\", \"\\\\times\", true);\ndefineSymbol(math, main, bin, \"\\u2229\", \"\\\\cap\", true);\ndefineSymbol(math, main, bin, \"\\u222a\", \"\\\\cup\", true);\ndefineSymbol(math, main, bin, \"\\u2216\", \"\\\\setminus\", true);\ndefineSymbol(math, main, bin, \"\\u2227\", \"\\\\land\");\ndefineSymbol(math, main, bin, \"\\u2228\", \"\\\\lor\");\ndefineSymbol(math, main, bin, \"\\u2227\", \"\\\\wedge\", true);\ndefineSymbol(math, main, bin, \"\\u2228\", \"\\\\vee\", true);\ndefineSymbol(math, main, textord, \"\\u221a\", \"\\\\surd\");\ndefineSymbol(math, main, open, \"\\u27e8\", \"\\\\langle\", true);\ndefineSymbol(math, main, open, \"\\u2223\", \"\\\\lvert\");\ndefineSymbol(math, main, open, \"\\u2225\", \"\\\\lVert\");\ndefineSymbol(math, main, close, \"?\", \"?\");\ndefineSymbol(math, main, close, \"!\", \"!\");\ndefineSymbol(math, main, close, \"\\u27e9\", \"\\\\rangle\", true);\ndefineSymbol(math, main, close, \"\\u2223\", \"\\\\rvert\");\ndefineSymbol(math, main, close, \"\\u2225\", \"\\\\rVert\");\ndefineSymbol(math, main, rel, \"=\", \"=\");\ndefineSymbol(math, main, rel, \":\", \":\");\ndefineSymbol(math, main, rel, \"\\u2248\", \"\\\\approx\", true);\ndefineSymbol(math, main, rel, \"\\u2245\", \"\\\\cong\", true);\ndefineSymbol(math, main, rel, \"\\u2265\", \"\\\\ge\");\ndefineSymbol(math, main, rel, \"\\u2265\", \"\\\\geq\", true);\ndefineSymbol(math, main, rel, \"\\u2190\", \"\\\\gets\");\ndefineSymbol(math, main, rel, \">\", \"\\\\gt\", true);\ndefineSymbol(math, main, rel, \"\\u2208\", \"\\\\in\", true);\ndefineSymbol(math, main, rel, \"\\ue020\", \"\\\\@not\");\ndefineSymbol(math, main, rel, \"\\u2282\", \"\\\\subset\", true);\ndefineSymbol(math, main, rel, \"\\u2283\", \"\\\\supset\", true);\ndefineSymbol(math, main, rel, \"\\u2286\", \"\\\\subseteq\", true);\ndefineSymbol(math, main, rel, \"\\u2287\", \"\\\\supseteq\", true);\ndefineSymbol(math, ams, rel, \"\\u2288\", \"\\\\nsubseteq\", true);\ndefineSymbol(math, ams, rel, \"\\u2289\", \"\\\\nsupseteq\", true);\ndefineSymbol(math, main, rel, \"\\u22a8\", \"\\\\models\");\ndefineSymbol(math, main, rel, \"\\u2190\", \"\\\\leftarrow\", true);\ndefineSymbol(math, main, rel, \"\\u2264\", \"\\\\le\");\ndefineSymbol(math, main, rel, \"\\u2264\", \"\\\\leq\", true);\ndefineSymbol(math, main, rel, \"<\", \"\\\\lt\", true);\ndefineSymbol(math, main, rel, \"\\u2192\", \"\\\\rightarrow\", true);\ndefineSymbol(math, main, rel, \"\\u2192\", \"\\\\to\");\ndefineSymbol(math, ams, rel, \"\\u2271\", \"\\\\ngeq\", true);\ndefineSymbol(math, ams, rel, \"\\u2270\", \"\\\\nleq\", true);\ndefineSymbol(math, main, spacing, \"\\u00a0\", \"\\\\ \");\ndefineSymbol(math, main, spacing, \"\\u00a0\", \"\\\\space\");\n// Ref: LaTeX Source 2e: \\DeclareRobustCommand{\\nobreakspace}{%\ndefineSymbol(math, main, spacing, \"\\u00a0\", \"\\\\nobreakspace\");\ndefineSymbol(text, main, spacing, \"\\u00a0\", \"\\\\ \");\ndefineSymbol(text, main, spacing, \"\\u00a0\", \" \");\ndefineSymbol(text, main, spacing, \"\\u00a0\", \"\\\\space\");\ndefineSymbol(text, main, spacing, \"\\u00a0\", \"\\\\nobreakspace\");\ndefineSymbol(math, main, spacing, null, \"\\\\nobreak\");\ndefineSymbol(math, main, spacing, null, \"\\\\allowbreak\");\ndefineSymbol(math, main, punct, \",\", \",\");\ndefineSymbol(math, main, punct, \";\", \";\");\ndefineSymbol(math, ams, bin, \"\\u22bc\", \"\\\\barwedge\", true);\ndefineSymbol(math, ams, bin, \"\\u22bb\", \"\\\\veebar\", true);\ndefineSymbol(math, main, bin, \"\\u2299\", \"\\\\odot\", true);\ndefineSymbol(math, main, bin, \"\\u2295\", \"\\\\oplus\", true);\ndefineSymbol(math, main, bin, \"\\u2297\", \"\\\\otimes\", true);\ndefineSymbol(math, main, textord, \"\\u2202\", \"\\\\partial\", true);\ndefineSymbol(math, main, bin, \"\\u2298\", \"\\\\oslash\", true);\ndefineSymbol(math, ams, bin, \"\\u229a\", \"\\\\circledcirc\", true);\ndefineSymbol(math, ams, bin, \"\\u22a1\", \"\\\\boxdot\", true);\ndefineSymbol(math, main, bin, \"\\u25b3\", \"\\\\bigtriangleup\");\ndefineSymbol(math, main, bin, \"\\u25bd\", \"\\\\bigtriangledown\");\ndefineSymbol(math, main, bin, \"\\u2020\", \"\\\\dagger\");\ndefineSymbol(math, main, bin, \"\\u22c4\", \"\\\\diamond\");\ndefineSymbol(math, main, bin, \"\\u22c6\", \"\\\\star\");\ndefineSymbol(math, main, bin, \"\\u25c3\", \"\\\\triangleleft\");\ndefineSymbol(math, main, bin, \"\\u25b9\", \"\\\\triangleright\");\ndefineSymbol(math, main, open, \"{\", \"\\\\{\");\ndefineSymbol(text, main, textord, \"{\", \"\\\\{\");\ndefineSymbol(text, main, textord, \"{\", \"\\\\textbraceleft\");\ndefineSymbol(math, main, close, \"}\", \"\\\\}\");\ndefineSymbol(text, main, textord, \"}\", \"\\\\}\");\ndefineSymbol(text, main, textord, \"}\", \"\\\\textbraceright\");\ndefineSymbol(math, main, open, \"{\", \"\\\\lbrace\");\ndefineSymbol(math, main, close, \"}\", \"\\\\rbrace\");\ndefineSymbol(math, main, open, \"[\", \"\\\\lbrack\", true);\ndefineSymbol(text, main, textord, \"[\", \"\\\\lbrack\", true);\ndefineSymbol(math, main, close, \"]\", \"\\\\rbrack\", true);\ndefineSymbol(text, main, textord, \"]\", \"\\\\rbrack\", true);\ndefineSymbol(math, main, open, \"(\", \"\\\\lparen\", true);\ndefineSymbol(math, main, close, \")\", \"\\\\rparen\", true);\ndefineSymbol(text, main, textord, \"<\", \"\\\\textless\", true); // in T1 fontenc\ndefineSymbol(text, main, textord, \">\", \"\\\\textgreater\", true); // in T1 fontenc\ndefineSymbol(math, main, open, \"\\u230a\", \"\\\\lfloor\", true);\ndefineSymbol(math, main, close, \"\\u230b\", \"\\\\rfloor\", true);\ndefineSymbol(math, main, open, \"\\u2308\", \"\\\\lceil\", true);\ndefineSymbol(math, main, close, \"\\u2309\", \"\\\\rceil\", true);\ndefineSymbol(math, main, textord, \"\\\\\", \"\\\\backslash\");\ndefineSymbol(math, main, textord, \"\\u2223\", \"|\");\ndefineSymbol(math, main, textord, \"\\u2223\", \"\\\\vert\");\ndefineSymbol(text, main, textord, \"|\", \"\\\\textbar\", true); // in T1 fontenc\ndefineSymbol(math, main, textord, \"\\u2225\", \"\\\\|\");\ndefineSymbol(math, main, textord, \"\\u2225\", \"\\\\Vert\");\ndefineSymbol(text, main, textord, \"\\u2225\", \"\\\\textbardbl\");\ndefineSymbol(text, main, textord, \"~\", \"\\\\textasciitilde\");\ndefineSymbol(text, main, textord, \"\\\\\", \"\\\\textbackslash\");\ndefineSymbol(text, main, textord, \"^\", \"\\\\textasciicircum\");\ndefineSymbol(math, main, rel, \"\\u2191\", \"\\\\uparrow\", true);\ndefineSymbol(math, main, rel, \"\\u21d1\", \"\\\\Uparrow\", true);\ndefineSymbol(math, main, rel, \"\\u2193\", \"\\\\downarrow\", true);\ndefineSymbol(math, main, rel, \"\\u21d3\", \"\\\\Downarrow\", true);\ndefineSymbol(math, main, rel, \"\\u2195\", \"\\\\updownarrow\", true);\ndefineSymbol(math, main, rel, \"\\u21d5\", \"\\\\Updownarrow\", true);\ndefineSymbol(math, main, op, \"\\u2210\", \"\\\\coprod\");\ndefineSymbol(math, main, op, \"\\u22c1\", \"\\\\bigvee\");\ndefineSymbol(math, main, op, \"\\u22c0\", \"\\\\bigwedge\");\ndefineSymbol(math, main, op, \"\\u2a04\", \"\\\\biguplus\");\ndefineSymbol(math, main, op, \"\\u22c2\", \"\\\\bigcap\");\ndefineSymbol(math, main, op, \"\\u22c3\", \"\\\\bigcup\");\ndefineSymbol(math, main, op, \"\\u222b\", \"\\\\int\");\ndefineSymbol(math, main, op, \"\\u222b\", \"\\\\intop\");\ndefineSymbol(math, main, op, \"\\u222c\", \"\\\\iint\");\ndefineSymbol(math, main, op, \"\\u222d\", \"\\\\iiint\");\ndefineSymbol(math, main, op, \"\\u220f\", \"\\\\prod\");\ndefineSymbol(math, main, op, \"\\u2211\", \"\\\\sum\");\ndefineSymbol(math, main, op, \"\\u2a02\", \"\\\\bigotimes\");\ndefineSymbol(math, main, op, \"\\u2a01\", \"\\\\bigoplus\");\ndefineSymbol(math, main, op, \"\\u2a00\", \"\\\\bigodot\");\ndefineSymbol(math, main, op, \"\\u222e\", \"\\\\oint\");\ndefineSymbol(math, main, op, \"\\u222f\", \"\\\\oiint\");\ndefineSymbol(math, main, op, \"\\u2230\", \"\\\\oiiint\");\ndefineSymbol(math, main, op, \"\\u2a06\", \"\\\\bigsqcup\");\ndefineSymbol(math, main, op, \"\\u222b\", \"\\\\smallint\");\ndefineSymbol(text, main, inner, \"\\u2026\", \"\\\\textellipsis\");\ndefineSymbol(math, main, inner, \"\\u2026\", \"\\\\mathellipsis\");\ndefineSymbol(text, main, inner, \"\\u2026\", \"\\\\ldots\", true);\ndefineSymbol(math, main, inner, \"\\u2026\", \"\\\\ldots\", true);\ndefineSymbol(math, main, inner, \"\\u22ef\", \"\\\\@cdots\", true);\ndefineSymbol(math, main, inner, \"\\u22f1\", \"\\\\ddots\", true);\n// \\vdots is a macro that uses one of these two symbols (with made-up names):\ndefineSymbol(math, main, textord, \"\\u22ee\", \"\\\\varvdots\");\ndefineSymbol(text, main, textord, \"\\u22ee\", \"\\\\varvdots\");\ndefineSymbol(math, main, accent, \"\\u02ca\", \"\\\\acute\");\ndefineSymbol(math, main, accent, \"\\u02cb\", \"\\\\grave\");\ndefineSymbol(math, main, accent, \"\\u00a8\", \"\\\\ddot\");\ndefineSymbol(math, main, accent, \"\\u007e\", \"\\\\tilde\");\ndefineSymbol(math, main, accent, \"\\u02c9\", \"\\\\bar\");\ndefineSymbol(math, main, accent, \"\\u02d8\", \"\\\\breve\");\ndefineSymbol(math, main, accent, \"\\u02c7\", \"\\\\check\");\ndefineSymbol(math, main, accent, \"\\u005e\", \"\\\\hat\");\ndefineSymbol(math, main, accent, \"\\u20d7\", \"\\\\vec\");\ndefineSymbol(math, main, accent, \"\\u02d9\", \"\\\\dot\");\ndefineSymbol(math, main, accent, \"\\u02da\", \"\\\\mathring\");\n// \\imath and \\jmath should be invariant to \\mathrm, \\mathbf, etc., so use PUA\ndefineSymbol(math, main, mathord, \"\\ue131\", \"\\\\@imath\");\ndefineSymbol(math, main, mathord, \"\\ue237\", \"\\\\@jmath\");\ndefineSymbol(math, main, textord, \"\\u0131\", \"\\u0131\");\ndefineSymbol(math, main, textord, \"\\u0237\", \"\\u0237\");\ndefineSymbol(text, main, textord, \"\\u0131\", \"\\\\i\", true);\ndefineSymbol(text, main, textord, \"\\u0237\", \"\\\\j\", true);\ndefineSymbol(text, main, textord, \"\\u00df\", \"\\\\ss\", true);\ndefineSymbol(text, main, textord, \"\\u00e6\", \"\\\\ae\", true);\ndefineSymbol(text, main, textord, \"\\u0153\", \"\\\\oe\", true);\ndefineSymbol(text, main, textord, \"\\u00f8\", \"\\\\o\", true);\ndefineSymbol(text, main, textord, \"\\u00c6\", \"\\\\AE\", true);\ndefineSymbol(text, main, textord, \"\\u0152\", \"\\\\OE\", true);\ndefineSymbol(text, main, textord, \"\\u00d8\", \"\\\\O\", true);\ndefineSymbol(text, main, accent, \"\\u02ca\", \"\\\\'\"); // acute\ndefineSymbol(text, main, accent, \"\\u02cb\", \"\\\\`\"); // grave\ndefineSymbol(text, main, accent, \"\\u02c6\", \"\\\\^\"); // circumflex\ndefineSymbol(text, main, accent, \"\\u02dc\", \"\\\\~\"); // tilde\ndefineSymbol(text, main, accent, \"\\u02c9\", \"\\\\=\"); // macron\ndefineSymbol(text, main, accent, \"\\u02d8\", \"\\\\u\"); // breve\ndefineSymbol(text, main, accent, \"\\u02d9\", \"\\\\.\"); // dot above\ndefineSymbol(text, main, accent, \"\\u00b8\", \"\\\\c\"); // cedilla\ndefineSymbol(text, main, accent, \"\\u02da\", \"\\\\r\"); // ring above\ndefineSymbol(text, main, accent, \"\\u02c7\", \"\\\\v\"); // caron\ndefineSymbol(text, main, accent, \"\\u00a8\", '\\\\\"'); // diaeresis\ndefineSymbol(text, main, accent, \"\\u02dd\", \"\\\\H\"); // double acute\ndefineSymbol(text, main, accent, \"\\u25ef\", \"\\\\textcircled\"); // \\bigcirc glyph\n// These ligatures are detected and created in Parser.js's `formLigatures`.\nvar ligatures = {\n  \"--\": true,\n  \"---\": true,\n  \"``\": true,\n  \"''\": true\n};\ndefineSymbol(text, main, textord, \"\\u2013\", \"--\", true);\ndefineSymbol(text, main, textord, \"\\u2013\", \"\\\\textendash\");\ndefineSymbol(text, main, textord, \"\\u2014\", \"---\", true);\ndefineSymbol(text, main, textord, \"\\u2014\", \"\\\\textemdash\");\ndefineSymbol(text, main, textord, \"\\u2018\", \"`\", true);\ndefineSymbol(text, main, textord, \"\\u2018\", \"\\\\textquoteleft\");\ndefineSymbol(text, main, textord, \"\\u2019\", \"'\", true);\ndefineSymbol(text, main, textord, \"\\u2019\", \"\\\\textquoteright\");\ndefineSymbol(text, main, textord, \"\\u201c\", \"``\", true);\ndefineSymbol(text, main, textord, \"\\u201c\", \"\\\\textquotedblleft\");\ndefineSymbol(text, main, textord, \"\\u201d\", \"''\", true);\ndefineSymbol(text, main, textord, \"\\u201d\", \"\\\\textquotedblright\");\n//  \\degree from gensymb package\ndefineSymbol(math, main, textord, \"\\u00b0\", \"\\\\degree\", true);\ndefineSymbol(text, main, textord, \"\\u00b0\", \"\\\\degree\");\n// \\textdegree from inputenc package\ndefineSymbol(text, main, textord, \"\\u00b0\", \"\\\\textdegree\", true);\n// TODO: In LaTeX, \\pounds can generate a different character in text and math\n// mode, but among our fonts, only Main-Regular defines this character \"163\".\ndefineSymbol(math, main, textord, \"\\u00a3\", \"\\\\pounds\");\ndefineSymbol(math, main, textord, \"\\u00a3\", \"\\\\mathsterling\", true);\ndefineSymbol(text, main, textord, \"\\u00a3\", \"\\\\pounds\");\ndefineSymbol(text, main, textord, \"\\u00a3\", \"\\\\textsterling\", true);\ndefineSymbol(math, ams, textord, \"\\u2720\", \"\\\\maltese\");\ndefineSymbol(text, ams, textord, \"\\u2720\", \"\\\\maltese\");\n// There are lots of symbols which are the same, so we add them in afterwards.\n// All of these are textords in math mode\nvar mathTextSymbols = \"0123456789/@.\\\"\";\nfor (var i = 0; i < mathTextSymbols.length; i++) {\n  var ch = mathTextSymbols.charAt(i);\n  defineSymbol(math, main, textord, ch, ch);\n}\n// All of these are textords in text mode\nvar textSymbols = \"0123456789!@*()-=+\\\";:?/.,\";\nfor (var _i = 0; _i < textSymbols.length; _i++) {\n  var _ch = textSymbols.charAt(_i);\n  defineSymbol(text, main, textord, _ch, _ch);\n}\n// All of these are textords in text mode, and mathords in math mode\nvar letters = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz\";\nfor (var _i2 = 0; _i2 < letters.length; _i2++) {\n  var _ch2 = letters.charAt(_i2);\n  defineSymbol(math, main, mathord, _ch2, _ch2);\n  defineSymbol(text, main, textord, _ch2, _ch2);\n}\n// Blackboard bold and script letters in Unicode range\ndefineSymbol(math, ams, textord, \"C\", \"\\u2102\"); // blackboard bold\ndefineSymbol(text, ams, textord, \"C\", \"\\u2102\");\ndefineSymbol(math, ams, textord, \"H\", \"\\u210D\");\ndefineSymbol(text, ams, textord, \"H\", \"\\u210D\");\ndefineSymbol(math, ams, textord, \"N\", \"\\u2115\");\ndefineSymbol(text, ams, textord, \"N\", \"\\u2115\");\ndefineSymbol(math, ams, textord, \"P\", \"\\u2119\");\ndefineSymbol(text, ams, textord, \"P\", \"\\u2119\");\ndefineSymbol(math, ams, textord, \"Q\", \"\\u211A\");\ndefineSymbol(text, ams, textord, \"Q\", \"\\u211A\");\ndefineSymbol(math, ams, textord, \"R\", \"\\u211D\");\ndefineSymbol(text, ams, textord, \"R\", \"\\u211D\");\ndefineSymbol(math, ams, textord, \"Z\", \"\\u2124\");\ndefineSymbol(text, ams, textord, \"Z\", \"\\u2124\");\ndefineSymbol(math, main, mathord, \"h\", \"\\u210E\"); // italic h, Planck constant\ndefineSymbol(text, main, mathord, \"h\", \"\\u210E\");\n// The next loop loads wide (surrogate pair) characters.\n// We support some letters in the Unicode range U+1D400 to U+1D7FF,\n// Mathematical Alphanumeric Symbols.\n// Some editors do not deal well with wide characters. So don't write the\n// string into this file. Instead, create the string from the surrogate pair.\nvar wideChar = \"\";\nfor (var _i3 = 0; _i3 < letters.length; _i3++) {\n  var _ch3 = letters.charAt(_i3);\n  // The hex numbers in the next line are a surrogate pair.\n  // 0xD835 is the high surrogate for all letters in the range we support.\n  // 0xDC00 is the low surrogate for bold A.\n  wideChar = String.fromCharCode(0xD835, 0xDC00 + _i3); // A-Z a-z bold\n  defineSymbol(math, main, mathord, _ch3, wideChar);\n  defineSymbol(text, main, textord, _ch3, wideChar);\n  wideChar = String.fromCharCode(0xD835, 0xDC34 + _i3); // A-Z a-z italic\n  defineSymbol(math, main, mathord, _ch3, wideChar);\n  defineSymbol(text, main, textord, _ch3, wideChar);\n  wideChar = String.fromCharCode(0xD835, 0xDC68 + _i3); // A-Z a-z bold italic\n  defineSymbol(math, main, mathord, _ch3, wideChar);\n  defineSymbol(text, main, textord, _ch3, wideChar);\n  wideChar = String.fromCharCode(0xD835, 0xDD04 + _i3); // A-Z a-z Fraktur\n  defineSymbol(math, main, mathord, _ch3, wideChar);\n  defineSymbol(text, main, textord, _ch3, wideChar);\n  wideChar = String.fromCharCode(0xD835, 0xDD6C + _i3); // A-Z a-z bold Fraktur\n  defineSymbol(math, main, mathord, _ch3, wideChar);\n  defineSymbol(text, main, textord, _ch3, wideChar);\n  wideChar = String.fromCharCode(0xD835, 0xDDA0 + _i3); // A-Z a-z sans-serif\n  defineSymbol(math, main, mathord, _ch3, wideChar);\n  defineSymbol(text, main, textord, _ch3, wideChar);\n  wideChar = String.fromCharCode(0xD835, 0xDDD4 + _i3); // A-Z a-z sans bold\n  defineSymbol(math, main, mathord, _ch3, wideChar);\n  defineSymbol(text, main, textord, _ch3, wideChar);\n  wideChar = String.fromCharCode(0xD835, 0xDE08 + _i3); // A-Z a-z sans italic\n  defineSymbol(math, main, mathord, _ch3, wideChar);\n  defineSymbol(text, main, textord, _ch3, wideChar);\n  wideChar = String.fromCharCode(0xD835, 0xDE70 + _i3); // A-Z a-z monospace\n  defineSymbol(math, main, mathord, _ch3, wideChar);\n  defineSymbol(text, main, textord, _ch3, wideChar);\n  if (_i3 < 26) {\n    // KaTeX fonts have only capital letters for blackboard bold and script.\n    // See exception for k below.\n    wideChar = String.fromCharCode(0xD835, 0xDD38 + _i3); // A-Z double struck\n    defineSymbol(math, main, mathord, _ch3, wideChar);\n    defineSymbol(text, main, textord, _ch3, wideChar);\n    wideChar = String.fromCharCode(0xD835, 0xDC9C + _i3); // A-Z script\n    defineSymbol(math, main, mathord, _ch3, wideChar);\n    defineSymbol(text, main, textord, _ch3, wideChar);\n  }\n  // TODO: Add bold script when it is supported by a KaTeX font.\n}\n// \"k\" is the only double struck lower case letter in the KaTeX fonts.\nwideChar = String.fromCharCode(0xD835, 0xDD5C); // k double struck\ndefineSymbol(math, main, mathord, \"k\", wideChar);\ndefineSymbol(text, main, textord, \"k\", wideChar);\n// Next, some wide character numerals\nfor (var _i4 = 0; _i4 < 10; _i4++) {\n  var _ch4 = _i4.toString();\n  wideChar = String.fromCharCode(0xD835, 0xDFCE + _i4); // 0-9 bold\n  defineSymbol(math, main, mathord, _ch4, wideChar);\n  defineSymbol(text, main, textord, _ch4, wideChar);\n  wideChar = String.fromCharCode(0xD835, 0xDFE2 + _i4); // 0-9 sans serif\n  defineSymbol(math, main, mathord, _ch4, wideChar);\n  defineSymbol(text, main, textord, _ch4, wideChar);\n  wideChar = String.fromCharCode(0xD835, 0xDFEC + _i4); // 0-9 bold sans\n  defineSymbol(math, main, mathord, _ch4, wideChar);\n  defineSymbol(text, main, textord, _ch4, wideChar);\n  wideChar = String.fromCharCode(0xD835, 0xDFF6 + _i4); // 0-9 monospace\n  defineSymbol(math, main, mathord, _ch4, wideChar);\n  defineSymbol(text, main, textord, _ch4, wideChar);\n}\n// We add these Latin-1 letters as symbols for backwards-compatibility,\n// but they are not actually in the font, nor are they supported by the\n// Unicode accent mechanism, so they fall back to Times font and look ugly.\n// TODO(edemaine): Fix this.\nvar extraLatin = \"\\u00d0\\u00de\\u00fe\";\nfor (var _i5 = 0; _i5 < extraLatin.length; _i5++) {\n  var _ch5 = extraLatin.charAt(_i5);\n  defineSymbol(math, main, mathord, _ch5, _ch5);\n  defineSymbol(text, main, textord, _ch5, _ch5);\n}\n\n/**\n * This file provides support for Unicode range U+1D400 to U+1D7FF,\n * Mathematical Alphanumeric Symbols.\n *\n * Function wideCharacterFont takes a wide character as input and returns\n * the font information necessary to render it properly.\n */\n/**\n * Data below is from https://www.unicode.org/charts/PDF/U1D400.pdf\n * That document sorts characters into groups by font type, say bold or italic.\n *\n * In the arrays below, each subarray consists three elements:\n *      * The CSS class of that group when in math mode.\n *      * The CSS class of that group when in text mode.\n *      * The font name, so that KaTeX can get font metrics.\n */\nvar wideLatinLetterData = [[\"mathbf\", \"textbf\", \"Main-Bold\"],\n// A-Z bold upright\n[\"mathbf\", \"textbf\", \"Main-Bold\"],\n// a-z bold upright\n[\"mathnormal\", \"textit\", \"Math-Italic\"],\n// A-Z italic\n[\"mathnormal\", \"textit\", \"Math-Italic\"],\n// a-z italic\n[\"boldsymbol\", \"boldsymbol\", \"Main-BoldItalic\"],\n// A-Z bold italic\n[\"boldsymbol\", \"boldsymbol\", \"Main-BoldItalic\"],\n// a-z bold italic\n// Map fancy A-Z letters to script, not calligraphic.\n// This aligns with unicode-math and math fonts (except Cambria Math).\n[\"mathscr\", \"textscr\", \"Script-Regular\"],\n// A-Z script\n[\"\", \"\", \"\"],\n// a-z script.  No font\n[\"\", \"\", \"\"],\n// A-Z bold script. No font\n[\"\", \"\", \"\"],\n// a-z bold script. No font\n[\"mathfrak\", \"textfrak\", \"Fraktur-Regular\"],\n// A-Z Fraktur\n[\"mathfrak\", \"textfrak\", \"Fraktur-Regular\"],\n// a-z Fraktur\n[\"mathbb\", \"textbb\", \"AMS-Regular\"],\n// A-Z double-struck\n[\"mathbb\", \"textbb\", \"AMS-Regular\"],\n// k double-struck\n// Note that we are using a bold font, but font metrics for regular Fraktur.\n[\"mathboldfrak\", \"textboldfrak\", \"Fraktur-Regular\"],\n// A-Z bold Fraktur\n[\"mathboldfrak\", \"textboldfrak\", \"Fraktur-Regular\"],\n// a-z bold Fraktur\n[\"mathsf\", \"textsf\", \"SansSerif-Regular\"],\n// A-Z sans-serif\n[\"mathsf\", \"textsf\", \"SansSerif-Regular\"],\n// a-z sans-serif\n[\"mathboldsf\", \"textboldsf\", \"SansSerif-Bold\"],\n// A-Z bold sans-serif\n[\"mathboldsf\", \"textboldsf\", \"SansSerif-Bold\"],\n// a-z bold sans-serif\n[\"mathitsf\", \"textitsf\", \"SansSerif-Italic\"],\n// A-Z italic sans-serif\n[\"mathitsf\", \"textitsf\", \"SansSerif-Italic\"],\n// a-z italic sans-serif\n[\"\", \"\", \"\"],\n// A-Z bold italic sans. No font\n[\"\", \"\", \"\"],\n// a-z bold italic sans. No font\n[\"mathtt\", \"texttt\", \"Typewriter-Regular\"],\n// A-Z monospace\n[\"mathtt\", \"texttt\", \"Typewriter-Regular\"] // a-z monospace\n];\nvar wideNumeralData = [[\"mathbf\", \"textbf\", \"Main-Bold\"],\n// 0-9 bold\n[\"\", \"\", \"\"],\n// 0-9 double-struck. No KaTeX font.\n[\"mathsf\", \"textsf\", \"SansSerif-Regular\"],\n// 0-9 sans-serif\n[\"mathboldsf\", \"textboldsf\", \"SansSerif-Bold\"],\n// 0-9 bold sans-serif\n[\"mathtt\", \"texttt\", \"Typewriter-Regular\"] // 0-9 monospace\n];\nvar wideCharacterFont = (wideChar, mode) => {\n  // IE doesn't support codePointAt(). So work with the surrogate pair.\n  var H = wideChar.charCodeAt(0); // high surrogate\n  var L = wideChar.charCodeAt(1); // low surrogate\n  var codePoint = (H - 0xD800) * 0x400 + (L - 0xDC00) + 0x10000;\n  var j = mode === \"math\" ? 0 : 1; // column index for CSS class.\n  if (0x1D400 <= codePoint && codePoint < 0x1D6A4) {\n    // wideLatinLetterData contains exactly 26 chars on each row.\n    // So we can calculate the relevant row. No traverse necessary.\n    var i = Math.floor((codePoint - 0x1D400) / 26);\n    return [wideLatinLetterData[i][2], wideLatinLetterData[i][j]];\n  } else if (0x1D7CE <= codePoint && codePoint <= 0x1D7FF) {\n    // Numerals, ten per row.\n    var _i = Math.floor((codePoint - 0x1D7CE) / 10);\n    return [wideNumeralData[_i][2], wideNumeralData[_i][j]];\n  } else if (codePoint === 0x1D6A5 || codePoint === 0x1D6A6) {\n    // dotless i or j\n    return [wideLatinLetterData[0][2], wideLatinLetterData[0][j]];\n  } else if (0x1D6A6 < codePoint && codePoint < 0x1D7CE) {\n    // Greek letters. Not supported, yet.\n    return [\"\", \"\"];\n  } else {\n    // We don't support any wide characters outside 1D400–1D7FF.\n    throw new ParseError(\"Unsupported character: \" + wideChar);\n  }\n};\n\n/* eslint no-console:0 */\n/**\n * Looks up the given symbol in fontMetrics, after applying any symbol\n * replacements defined in symbol.js\n */\nvar lookupSymbol = function lookupSymbol(value,\n// TODO(#963): Use a union type for this.\nfontName, mode) {\n  // Replace the value with its replaced value from symbol.js\n  if (symbols[mode][value]) {\n    var replacement = symbols[mode][value].replace;\n    if (replacement) {\n      value = replacement;\n    }\n  }\n  return {\n    value,\n    metrics: getCharacterMetrics(value, fontName, mode)\n  };\n};\n/**\n * Makes a symbolNode after translation via the list of symbols in symbols.js.\n * Correctly pulls out metrics for the character, and optionally takes a list of\n * classes to be attached to the node.\n *\n * TODO: make argument order closer to makeSpan\n * TODO: add a separate argument for math class (e.g. `mop`, `mbin`), which\n * should if present come first in `classes`.\n * TODO(#953): Make `options` mandatory and always pass it in.\n */\nvar makeSymbol = function makeSymbol(value, fontName, mode, options, classes) {\n  var lookup = lookupSymbol(value, fontName, mode);\n  var metrics = lookup.metrics;\n  value = lookup.value;\n  var symbolNode;\n  if (metrics) {\n    var italic = metrics.italic;\n    if (mode === \"text\" || options && options.font === \"mathit\") {\n      italic = 0;\n    }\n    symbolNode = new SymbolNode(value, metrics.height, metrics.depth, italic, metrics.skew, metrics.width, classes);\n  } else {\n    // TODO(emily): Figure out a good way to only print this in development\n    typeof console !== \"undefined\" && console.warn(\"No character metrics \" + (\"for '\" + value + \"' in style '\" + fontName + \"' and mode '\" + mode + \"'\"));\n    symbolNode = new SymbolNode(value, 0, 0, 0, 0, 0, classes);\n  }\n  if (options) {\n    symbolNode.maxFontSize = options.sizeMultiplier;\n    if (options.style.isTight()) {\n      symbolNode.classes.push(\"mtight\");\n    }\n    var color = options.getColor();\n    if (color) {\n      symbolNode.style.color = color;\n    }\n  }\n  return symbolNode;\n};\n/**\n * Makes a symbol in Main-Regular or AMS-Regular.\n * Used for rel, bin, open, close, inner, and punct.\n */\nvar mathsym = function mathsym(value, mode, options, classes) {\n  if (classes === void 0) {\n    classes = [];\n  }\n  // Decide what font to render the symbol in by its entry in the symbols\n  // table.\n  // Have a special case for when the value = \\ because the \\ is used as a\n  // textord in unsupported command errors but cannot be parsed as a regular\n  // text ordinal and is therefore not present as a symbol in the symbols\n  // table for text, as well as a special case for boldsymbol because it\n  // can be used for bold + and -\n  if (options.font === \"boldsymbol\" && lookupSymbol(value, \"Main-Bold\", mode).metrics) {\n    return makeSymbol(value, \"Main-Bold\", mode, options, classes.concat([\"mathbf\"]));\n  } else if (value === \"\\\\\" || symbols[mode][value].font === \"main\") {\n    return makeSymbol(value, \"Main-Regular\", mode, options, classes);\n  } else {\n    return makeSymbol(value, \"AMS-Regular\", mode, options, classes.concat([\"amsrm\"]));\n  }\n};\n/**\n * Determines which of the two font names (Main-Bold and Math-BoldItalic) and\n * corresponding style tags (mathbf or boldsymbol) to use for font \"boldsymbol\",\n * depending on the symbol.  Use this function instead of fontMap for font\n * \"boldsymbol\".\n */\nvar boldsymbol = function boldsymbol(value, mode, options, classes, type) {\n  if (type !== \"textord\" && lookupSymbol(value, \"Math-BoldItalic\", mode).metrics) {\n    return {\n      fontName: \"Math-BoldItalic\",\n      fontClass: \"boldsymbol\"\n    };\n  } else {\n    // Some glyphs do not exist in Math-BoldItalic so we need to use\n    // Main-Bold instead.\n    return {\n      fontName: \"Main-Bold\",\n      fontClass: \"mathbf\"\n    };\n  }\n};\n/**\n * Makes either a mathord or textord in the correct font and color.\n */\nvar makeOrd = function makeOrd(group, options, type) {\n  var mode = group.mode;\n  var text = group.text;\n  var classes = [\"mord\"];\n  // Math mode or Old font (i.e. \\rm)\n  var isFont = mode === \"math\" || mode === \"text\" && options.font;\n  var fontOrFamily = isFont ? options.font : options.fontFamily;\n  var wideFontName = \"\";\n  var wideFontClass = \"\";\n  if (text.charCodeAt(0) === 0xD835) {\n    [wideFontName, wideFontClass] = wideCharacterFont(text, mode);\n  }\n  if (wideFontName.length > 0) {\n    // surrogate pairs get special treatment\n    return makeSymbol(text, wideFontName, mode, options, classes.concat(wideFontClass));\n  } else if (fontOrFamily) {\n    var fontName;\n    var fontClasses;\n    if (fontOrFamily === \"boldsymbol\") {\n      var fontData = boldsymbol(text, mode, options, classes, type);\n      fontName = fontData.fontName;\n      fontClasses = [fontData.fontClass];\n    } else if (isFont) {\n      fontName = fontMap[fontOrFamily].fontName;\n      fontClasses = [fontOrFamily];\n    } else {\n      fontName = retrieveTextFontName(fontOrFamily, options.fontWeight, options.fontShape);\n      fontClasses = [fontOrFamily, options.fontWeight, options.fontShape];\n    }\n    if (lookupSymbol(text, fontName, mode).metrics) {\n      return makeSymbol(text, fontName, mode, options, classes.concat(fontClasses));\n    } else if (ligatures.hasOwnProperty(text) && fontName.slice(0, 10) === \"Typewriter\") {\n      // Deconstruct ligatures in monospace fonts (\\texttt, \\tt).\n      var parts = [];\n      for (var i = 0; i < text.length; i++) {\n        parts.push(makeSymbol(text[i], fontName, mode, options, classes.concat(fontClasses)));\n      }\n      return makeFragment(parts);\n    }\n  }\n  // Makes a symbol in the default font for mathords and textords.\n  if (type === \"mathord\") {\n    return makeSymbol(text, \"Math-Italic\", mode, options, classes.concat([\"mathnormal\"]));\n  } else if (type === \"textord\") {\n    var font = symbols[mode][text] && symbols[mode][text].font;\n    if (font === \"ams\") {\n      var _fontName = retrieveTextFontName(\"amsrm\", options.fontWeight, options.fontShape);\n      return makeSymbol(text, _fontName, mode, options, classes.concat(\"amsrm\", options.fontWeight, options.fontShape));\n    } else if (font === \"main\" || !font) {\n      var _fontName2 = retrieveTextFontName(\"textrm\", options.fontWeight, options.fontShape);\n      return makeSymbol(text, _fontName2, mode, options, classes.concat(options.fontWeight, options.fontShape));\n    } else {\n      // fonts added by plugins\n      var _fontName3 = retrieveTextFontName(font, options.fontWeight, options.fontShape);\n      // We add font name as a css class\n      return makeSymbol(text, _fontName3, mode, options, classes.concat(_fontName3, options.fontWeight, options.fontShape));\n    }\n  } else {\n    throw new Error(\"unexpected type: \" + type + \" in makeOrd\");\n  }\n};\n/**\n * Returns true if subsequent symbolNodes have the same classes, skew, maxFont,\n * and styles. For mathnormal text, the left node must also have zero italic\n * correction so we don't lose spacing between combined glyphs.\n */\nvar canCombine = (prev, next) => {\n  if (createClass(prev.classes) !== createClass(next.classes) || prev.skew !== next.skew || prev.maxFontSize !== next.maxFontSize || prev.italic !== 0 && prev.hasClass(\"mathnormal\")) {\n    return false;\n  }\n  // If prev and next both are just \"mbin\"s or \"mord\"s we don't combine them\n  // so that the proper spacing can be preserved.\n  if (prev.classes.length === 1) {\n    var cls = prev.classes[0];\n    if (cls === \"mbin\" || cls === \"mord\") {\n      return false;\n    }\n  }\n  for (var key of Object.keys(prev.style)) {\n    if (prev.style[key] !== next.style[key]) {\n      return false;\n    }\n  }\n  for (var _key of Object.keys(next.style)) {\n    if (prev.style[_key] !== next.style[_key]) {\n      return false;\n    }\n  }\n  return true;\n};\n/**\n * Combine consecutive domTree.symbolNodes into a single symbolNode.\n * Note: this function mutates the argument.\n */\nvar tryCombineChars = chars => {\n  for (var i = 0; i < chars.length - 1; i++) {\n    var prev = chars[i];\n    var next = chars[i + 1];\n    if (prev instanceof SymbolNode && next instanceof SymbolNode && canCombine(prev, next)) {\n      prev.text += next.text;\n      prev.height = Math.max(prev.height, next.height);\n      prev.depth = Math.max(prev.depth, next.depth);\n      // Use the last character's italic correction since we use\n      // it to add padding to the right of the span created from\n      // the combined characters.\n      prev.italic = next.italic;\n      chars.splice(i + 1, 1);\n      i--;\n    }\n  }\n  return chars;\n};\n/**\n * Calculate the height, depth, and maxFontSize of an element based on its\n * children.\n */\nvar sizeElementFromChildren = function sizeElementFromChildren(elem) {\n  var height = 0;\n  var depth = 0;\n  var maxFontSize = 0;\n  for (var i = 0; i < elem.children.length; i++) {\n    var child = elem.children[i];\n    if (child.height > height) {\n      height = child.height;\n    }\n    if (child.depth > depth) {\n      depth = child.depth;\n    }\n    if (child.maxFontSize > maxFontSize) {\n      maxFontSize = child.maxFontSize;\n    }\n  }\n  elem.height = height;\n  elem.depth = depth;\n  elem.maxFontSize = maxFontSize;\n};\n/**\n * Makes a span with the given list of classes, list of children, and options.\n *\n * TODO(#953): Ensure that `options` is always provided (currently some call\n * sites don't pass it) and make the type below mandatory.\n * TODO: add a separate argument for math class (e.g. `mop`, `mbin`), which\n * should if present come first in `classes`.\n */\nvar makeSpan = function makeSpan(classes, children, options, style) {\n  var span = new Span(classes, children, options, style);\n  sizeElementFromChildren(span);\n  return span;\n};\n// SVG one is simpler -- doesn't require height, depth, max-font setting.\n// This is also a separate method for typesafety.\nvar makeSvgSpan = (classes, children, options, style) => new Span(classes, children, options, style);\nvar makeLineSpan = function makeLineSpan(className, options, thickness) {\n  var line = makeSpan([className], [], options);\n  line.height = Math.max(thickness || options.fontMetrics().defaultRuleThickness, options.minRuleThickness);\n  line.style.borderBottomWidth = makeEm(line.height);\n  line.maxFontSize = 1.0;\n  return line;\n};\n/**\n * Makes an anchor with the given href, list of classes, list of children,\n * and options.\n */\nvar makeAnchor = function makeAnchor(href, classes, children, options) {\n  var anchor = new Anchor(href, classes, children, options);\n  sizeElementFromChildren(anchor);\n  return anchor;\n};\n/**\n * Makes a document fragment with the given list of children.\n */\nvar makeFragment = function makeFragment(children) {\n  var fragment = new DocumentFragment(children);\n  sizeElementFromChildren(fragment);\n  return fragment;\n};\n/**\n * Wraps group in a span if it's a document fragment, allowing to apply classes\n * and styles\n */\nvar wrapFragment = function wrapFragment(group, options) {\n  if (group instanceof DocumentFragment) {\n    return makeSpan([], [group], options);\n  }\n  return group;\n};\n// Computes the updated `children` list and the overall depth.\n//\n// This helper function for makeVList makes it easier to enforce type safety by\n// allowing early exits (returns) in the logic.\nvar getVListChildrenAndDepth = function getVListChildrenAndDepth(params) {\n  if (params.positionType === \"individualShift\") {\n    var oldChildren = params.children;\n    var children = [oldChildren[0]];\n    // Add in kerns to the list of params.children to get each element to be\n    // shifted to the correct specified shift\n    var _depth = -oldChildren[0].shift - oldChildren[0].elem.depth;\n    var currPos = _depth;\n    for (var i = 1; i < oldChildren.length; i++) {\n      var diff = -oldChildren[i].shift - currPos - oldChildren[i].elem.depth;\n      var size = diff - (oldChildren[i - 1].elem.height + oldChildren[i - 1].elem.depth);\n      currPos = currPos + diff;\n      children.push({\n        type: \"kern\",\n        size\n      });\n      children.push(oldChildren[i]);\n    }\n    return {\n      children,\n      depth: _depth\n    };\n  }\n  var depth;\n  if (params.positionType === \"top\") {\n    // We always start at the bottom, so calculate the bottom by adding up\n    // all the sizes\n    var bottom = params.positionData;\n    for (var _i = 0; _i < params.children.length; _i++) {\n      var child = params.children[_i];\n      bottom -= child.type === \"kern\" ? child.size : child.elem.height + child.elem.depth;\n    }\n    depth = bottom;\n  } else if (params.positionType === \"bottom\") {\n    depth = -params.positionData;\n  } else {\n    var firstChild = params.children[0];\n    if (firstChild.type !== \"elem\") {\n      throw new Error('First child must have type \"elem\".');\n    }\n    if (params.positionType === \"shift\") {\n      depth = -firstChild.elem.depth - params.positionData;\n    } else if (params.positionType === \"firstBaseline\") {\n      depth = -firstChild.elem.depth;\n    } else {\n      throw new Error(\"Invalid positionType \" + params.positionType + \".\");\n    }\n  }\n  return {\n    children: params.children,\n    depth\n  };\n};\n/**\n * Makes a vertical list by stacking elements and kerns on top of each other.\n * Allows for many different ways of specifying the positioning method.\n *\n * See VListParam documentation above.\n */\nvar makeVList = function makeVList(params, options) {\n  var {\n    children,\n    depth\n  } = getVListChildrenAndDepth(params);\n  // Create a strut that is taller than any list item. The strut is added to\n  // each item, where it will determine the item's baseline. Since it has\n  // `overflow:hidden`, the strut's top edge will sit on the item's line box's\n  // top edge and the strut's bottom edge will sit on the item's baseline,\n  // with no additional line-height spacing. This allows the item baseline to\n  // be positioned precisely without worrying about font ascent and\n  // line-height.\n  var pstrutSize = 0;\n  for (var i = 0; i < children.length; i++) {\n    var child = children[i];\n    if (child.type === \"elem\") {\n      var elem = child.elem;\n      pstrutSize = Math.max(pstrutSize, elem.maxFontSize, elem.height);\n    }\n  }\n  pstrutSize += 2;\n  var pstrut = makeSpan([\"pstrut\"], []);\n  pstrut.style.height = makeEm(pstrutSize);\n  // Create a new list of actual children at the correct offsets\n  var realChildren = [];\n  var minPos = depth;\n  var maxPos = depth;\n  var currPos = depth;\n  for (var _i2 = 0; _i2 < children.length; _i2++) {\n    var _child = children[_i2];\n    if (_child.type === \"kern\") {\n      currPos += _child.size;\n    } else {\n      var _elem = _child.elem;\n      var classes = _child.wrapperClasses || [];\n      var style = _child.wrapperStyle || {};\n      var childWrap = makeSpan(classes, [pstrut, _elem], undefined, style);\n      childWrap.style.top = makeEm(-pstrutSize - currPos - _elem.depth);\n      if (_child.marginLeft) {\n        childWrap.style.marginLeft = _child.marginLeft;\n      }\n      if (_child.marginRight) {\n        childWrap.style.marginRight = _child.marginRight;\n      }\n      realChildren.push(childWrap);\n      currPos += _elem.height + _elem.depth;\n    }\n    minPos = Math.min(minPos, currPos);\n    maxPos = Math.max(maxPos, currPos);\n  }\n  // The vlist contents go in a table-cell with `vertical-align:bottom`.\n  // This cell's bottom edge will determine the containing table's baseline\n  // without overly expanding the containing line-box.\n  var vlist = makeSpan([\"vlist\"], realChildren);\n  vlist.style.height = makeEm(maxPos);\n  // A second row is used if necessary to represent the vlist's depth.\n  var rows;\n  if (minPos < 0) {\n    // We will define depth in an empty span with display: table-cell.\n    // It should render with the height that we define. But Chrome, in\n    // contenteditable mode only, treats that span as if it contains some\n    // text content. And that min-height over-rides our desired height.\n    // So we put another empty span inside the depth strut span.\n    var emptySpan = makeSpan([], []);\n    var depthStrut = makeSpan([\"vlist\"], [emptySpan]);\n    depthStrut.style.height = makeEm(-minPos);\n    // Safari wants the first row to have inline content; otherwise it\n    // puts the bottom of the *second* row on the baseline.\n    var topStrut = makeSpan([\"vlist-s\"], [new SymbolNode(\"\\u200b\")]);\n    rows = [makeSpan([\"vlist-r\"], [vlist, topStrut]), makeSpan([\"vlist-r\"], [depthStrut])];\n  } else {\n    rows = [makeSpan([\"vlist-r\"], [vlist])];\n  }\n  var vtable = makeSpan([\"vlist-t\"], rows);\n  if (rows.length === 2) {\n    vtable.classes.push(\"vlist-t2\");\n  }\n  vtable.height = maxPos;\n  vtable.depth = -minPos;\n  return vtable;\n};\n// Glue is a concept from TeX which is a flexible space between elements in\n// either a vertical or horizontal list. In KaTeX, at least for now, it's\n// static space between elements in a horizontal layout.\nvar makeGlue = (measurement, options) => {\n  // Make an empty span for the space\n  var rule = makeSpan([\"mspace\"], [], options);\n  var size = calculateSize(measurement, options);\n  rule.style.marginRight = makeEm(size);\n  return rule;\n};\n// Takes font options, and returns the appropriate fontLookup name\nvar retrieveTextFontName = function retrieveTextFontName(fontFamily, fontWeight, fontShape) {\n  var baseFontName = \"\";\n  switch (fontFamily) {\n    case \"amsrm\":\n      baseFontName = \"AMS\";\n      break;\n    case \"textrm\":\n      baseFontName = \"Main\";\n      break;\n    case \"textsf\":\n      baseFontName = \"SansSerif\";\n      break;\n    case \"texttt\":\n      baseFontName = \"Typewriter\";\n      break;\n    default:\n      baseFontName = fontFamily;\n    // use fonts added by a plugin\n  }\n  var fontStylesName;\n  if (fontWeight === \"textbf\" && fontShape === \"textit\") {\n    fontStylesName = \"BoldItalic\";\n  } else if (fontWeight === \"textbf\") {\n    fontStylesName = \"Bold\";\n  } else if (fontWeight === \"textit\") {\n    fontStylesName = \"Italic\";\n  } else {\n    fontStylesName = \"Regular\";\n  }\n  return baseFontName + \"-\" + fontStylesName;\n};\n/**\n * Maps TeX font commands to objects containing:\n * - variant: string used for \"mathvariant\" attribute in buildMathML.js\n * - fontName: the \"style\" parameter to fontMetrics.getCharacterMetrics\n */\n// A map between tex font commands an MathML mathvariant attribute values\nvar fontMap = {\n  // styles\n  \"mathbf\": {\n    variant: \"bold\",\n    fontName: \"Main-Bold\"\n  },\n  \"mathrm\": {\n    variant: \"normal\",\n    fontName: \"Main-Regular\"\n  },\n  \"textit\": {\n    variant: \"italic\",\n    fontName: \"Main-Italic\"\n  },\n  \"mathit\": {\n    variant: \"italic\",\n    fontName: \"Main-Italic\"\n  },\n  \"mathnormal\": {\n    variant: \"italic\",\n    fontName: \"Math-Italic\"\n  },\n  \"mathsfit\": {\n    variant: \"sans-serif-italic\",\n    fontName: \"SansSerif-Italic\"\n  },\n  // \"boldsymbol\" is missing because they require the use of multiple fonts:\n  // Math-BoldItalic and Main-Bold.  This is handled by a special case in\n  // makeOrd which ends up calling boldsymbol.\n  // families\n  \"mathbb\": {\n    variant: \"double-struck\",\n    fontName: \"AMS-Regular\"\n  },\n  \"mathcal\": {\n    variant: \"script\",\n    fontName: \"Caligraphic-Regular\"\n  },\n  \"mathfrak\": {\n    variant: \"fraktur\",\n    fontName: \"Fraktur-Regular\"\n  },\n  \"mathscr\": {\n    variant: \"script\",\n    fontName: \"Script-Regular\"\n  },\n  \"mathsf\": {\n    variant: \"sans-serif\",\n    fontName: \"SansSerif-Regular\"\n  },\n  \"mathtt\": {\n    variant: \"monospace\",\n    fontName: \"Typewriter-Regular\"\n  }\n};\nvar svgData = {\n  //   path, width, height\n  vec: [\"vec\", 0.471, 0.714],\n  // values from the font glyph\n  oiintSize1: [\"oiintSize1\", 0.957, 0.499],\n  // oval to overlay the integrand\n  oiintSize2: [\"oiintSize2\", 1.472, 0.659],\n  oiiintSize1: [\"oiiintSize1\", 1.304, 0.499],\n  oiiintSize2: [\"oiiintSize2\", 1.98, 0.659]\n};\nvar staticSvg = function staticSvg(value, options) {\n  // Create a span with inline SVG for the element.\n  var [pathName, width, height] = svgData[value];\n  var path = new PathNode(pathName);\n  var svgNode = new SvgNode([path], {\n    \"width\": makeEm(width),\n    \"height\": makeEm(height),\n    // Override CSS rule `.katex svg { width: 100% }`\n    \"style\": \"width:\" + makeEm(width),\n    \"viewBox\": \"0 0 \" + 1000 * width + \" \" + 1000 * height,\n    \"preserveAspectRatio\": \"xMinYMin\"\n  });\n  var span = makeSvgSpan([\"overlay\"], [svgNode], options);\n  span.height = height;\n  span.style.height = makeEm(height);\n  span.style.width = makeEm(width);\n  return span;\n};\n\nvar thinspace = {\n  number: 3,\n  unit: \"mu\"\n};\nvar mediumspace = {\n  number: 4,\n  unit: \"mu\"\n};\nvar thickspace = {\n  number: 5,\n  unit: \"mu\"\n};\n// Spacing relationships for display and text styles\nvar spacings = {\n  mord: {\n    mop: thinspace,\n    mbin: mediumspace,\n    mrel: thickspace,\n    minner: thinspace\n  },\n  mop: {\n    mord: thinspace,\n    mop: thinspace,\n    mrel: thickspace,\n    minner: thinspace\n  },\n  mbin: {\n    mord: mediumspace,\n    mop: mediumspace,\n    mopen: mediumspace,\n    minner: mediumspace\n  },\n  mrel: {\n    mord: thickspace,\n    mop: thickspace,\n    mopen: thickspace,\n    minner: thickspace\n  },\n  mopen: {},\n  mclose: {\n    mop: thinspace,\n    mbin: mediumspace,\n    mrel: thickspace,\n    minner: thinspace\n  },\n  mpunct: {\n    mord: thinspace,\n    mop: thinspace,\n    mrel: thickspace,\n    mopen: thinspace,\n    mclose: thinspace,\n    mpunct: thinspace,\n    minner: thinspace\n  },\n  minner: {\n    mord: thinspace,\n    mop: thinspace,\n    mbin: mediumspace,\n    mrel: thickspace,\n    mopen: thinspace,\n    mpunct: thinspace,\n    minner: thinspace\n  }\n};\n// Spacing relationships for script and scriptscript styles\nvar tightSpacings = {\n  mord: {\n    mop: thinspace\n  },\n  mop: {\n    mord: thinspace,\n    mop: thinspace\n  },\n  mbin: {},\n  mrel: {},\n  mopen: {},\n  mclose: {\n    mop: thinspace\n  },\n  mpunct: {},\n  minner: {\n    mop: thinspace\n  }\n};\n\n/**\n * All registered functions.\n * `functions.js` just exports this same dictionary again and makes it public.\n * `Parser.js` requires this dictionary.\n */\nvar _functions = {};\n/**\n * All HTML builders. Should be only used in the `define*` and the `build*ML`\n * functions.\n */\nvar _htmlGroupBuilders = {};\n/**\n * All MathML builders. Should be only used in the `define*` and the `build*ML`\n * functions.\n */\nvar _mathmlGroupBuilders = {};\nfunction defineFunction(_ref) {\n  var {\n    type,\n    names,\n    props,\n    handler,\n    htmlBuilder,\n    mathmlBuilder\n  } = _ref;\n  // Set default values of functions\n  var data = {\n    type,\n    numArgs: props.numArgs,\n    argTypes: props.argTypes,\n    allowedInArgument: !!props.allowedInArgument,\n    allowedInText: !!props.allowedInText,\n    allowedInMath: props.allowedInMath === undefined ? true : props.allowedInMath,\n    numOptionalArgs: props.numOptionalArgs || 0,\n    infix: !!props.infix,\n    primitive: !!props.primitive,\n    handler\n  };\n  for (var i = 0; i < names.length; ++i) {\n    _functions[names[i]] = data;\n  }\n  if (type) {\n    if (htmlBuilder) {\n      _htmlGroupBuilders[type] = htmlBuilder;\n    }\n    if (mathmlBuilder) {\n      _mathmlGroupBuilders[type] = mathmlBuilder;\n    }\n  }\n}\n/**\n * Use this to register only the HTML and MathML builders for a function (e.g.\n * if the function's ParseNode is generated in Parser.js rather than via a\n * stand-alone handler provided to `defineFunction`).\n */\nfunction defineFunctionBuilders(_ref2) {\n  var {\n    type,\n    htmlBuilder,\n    mathmlBuilder\n  } = _ref2;\n  defineFunction({\n    type,\n    names: [],\n    props: {\n      numArgs: 0\n    },\n    handler() {\n      throw new Error('Should never be called.');\n    },\n    htmlBuilder,\n    mathmlBuilder\n  });\n}\nvar normalizeArgument = function normalizeArgument(arg) {\n  return arg.type === \"ordgroup\" && arg.body.length === 1 ? arg.body[0] : arg;\n};\n// Since the corresponding buildHTML/buildMathML function expects a\n// list of elements, we normalize for different kinds of arguments\nvar ordargument = function ordargument(arg) {\n  return arg.type === \"ordgroup\" ? arg.body : [arg];\n};\n\n/**\n * This file does the main work of building a domTree structure from a parse\n * tree. The entry point is the `buildHTML` function, which takes a parse tree.\n * Then, the buildExpression, buildGroup, and various groupBuilders functions\n * are called, to produce a final HTML tree.\n */\n// Binary atoms (first class `mbin`) change into ordinary atoms (`mord`)\n// depending on their surroundings. See TeXbook pg. 442-446, Rules 5 and 6,\n// and the text before Rule 19.\nvar binLeftCanceller = new Set([\"leftmost\", \"mbin\", \"mopen\", \"mrel\", \"mop\", \"mpunct\"]);\nvar binRightCanceller = new Set([\"rightmost\", \"mrel\", \"mclose\", \"mpunct\"]);\nvar styleMap$1 = {\n  \"display\": Style$1.DISPLAY,\n  \"text\": Style$1.TEXT,\n  \"script\": Style$1.SCRIPT,\n  \"scriptscript\": Style$1.SCRIPTSCRIPT\n};\nvar DomEnum = {\n  mord: \"mord\",\n  mop: \"mop\",\n  mbin: \"mbin\",\n  mrel: \"mrel\",\n  mopen: \"mopen\",\n  mclose: \"mclose\",\n  mpunct: \"mpunct\",\n  minner: \"minner\"\n};\n/**\n * Take a list of nodes, build them in order, and return a list of the built\n * nodes. documentFragments are flattened into their contents, so the\n * returned list contains no fragments. `isRealGroup` is true if `expression`\n * is a real group (no atoms will be added on either side), as opposed to\n * a partial group (e.g. one created by \\color). `surrounding` is an array\n * consisting type of nodes that will be added to the left and right.\n */\nvar buildExpression$1 = function buildExpression(expression, options, isRealGroup, surrounding) {\n  if (surrounding === void 0) {\n    surrounding = [null, null];\n  }\n  // Parse expressions into `groups`.\n  var groups = [];\n  for (var i = 0; i < expression.length; i++) {\n    var output = buildGroup$1(expression[i], options);\n    if (output instanceof DocumentFragment) {\n      var children = output.children;\n      groups.push(...children);\n    } else {\n      groups.push(output);\n    }\n  }\n  // Combine consecutive domTree.symbolNodes into a single symbolNode.\n  tryCombineChars(groups);\n  // If `expression` is a partial group, let the parent handle spacings\n  // to avoid processing groups multiple times.\n  if (!isRealGroup) {\n    return groups;\n  }\n  var glueOptions = options;\n  if (expression.length === 1) {\n    var node = expression[0];\n    if (node.type === \"sizing\") {\n      glueOptions = options.havingSize(node.size);\n    } else if (node.type === \"styling\") {\n      glueOptions = options.havingStyle(styleMap$1[node.style]);\n    }\n  }\n  // Dummy spans for determining spacings between surrounding atoms.\n  // If `expression` has no atoms on the left or right, class \"leftmost\"\n  // or \"rightmost\", respectively, is used to indicate it.\n  var dummyPrev = makeSpan([surrounding[0] || \"leftmost\"], [], options);\n  var dummyNext = makeSpan([surrounding[1] || \"rightmost\"], [], options);\n  // TODO: These code assumes that a node's math class is the first element\n  // of its `classes` array. A later cleanup should ensure this, for\n  // instance by changing the signature of `makeSpan`.\n  // Before determining what spaces to insert, perform bin cancellation.\n  // Binary operators change to ordinary symbols in some contexts.\n  var isRoot = isRealGroup === \"root\";\n  _traverseNonSpaceNodes(groups, (node, prev) => {\n    var prevType = prev.classes[0];\n    var type = node.classes[0];\n    if (prevType === \"mbin\" && binRightCanceller.has(type)) {\n      prev.classes[0] = \"mord\";\n    } else if (type === \"mbin\" && binLeftCanceller.has(prevType)) {\n      node.classes[0] = \"mord\";\n    }\n  }, {\n    node: dummyPrev\n  }, dummyNext, isRoot);\n  _traverseNonSpaceNodes(groups, (node, prev) => {\n    var _tightSpacings$prevTy, _spacings$prevType;\n    var prevType = getTypeOfDomTree(prev);\n    var type = getTypeOfDomTree(node);\n    // 'mtight' indicates that the node is script or scriptscript style.\n    var space = prevType && type ? node.hasClass(\"mtight\") ? (_tightSpacings$prevTy = tightSpacings[prevType]) == null ? void 0 : _tightSpacings$prevTy[type] : (_spacings$prevType = spacings[prevType]) == null ? void 0 : _spacings$prevType[type] : null;\n    if (space) {\n      // Insert glue (spacing) after the `prev`.\n      return makeGlue(space, glueOptions);\n    }\n  }, {\n    node: dummyPrev\n  }, dummyNext, isRoot);\n  return groups;\n};\n// Depth-first traverse non-space `nodes`, calling `callback` with the current and\n// previous node as arguments, optionally returning a node to insert after the\n// previous node. `prev` is an object with the previous node and `insertAfter`\n// function to insert after it. `next` is a node that will be added to the right.\n// Used for bin cancellation and inserting spacings.\nvar _traverseNonSpaceNodes = function traverseNonSpaceNodes(nodes, callback, prev, next, isRoot) {\n  if (next) {\n    // temporarily append the right node, if exists\n    nodes.push(next);\n  }\n  var i = 0;\n  for (; i < nodes.length; i++) {\n    var node = nodes[i];\n    var partialGroup = checkPartialGroup(node);\n    if (partialGroup) {\n      // Recursive DFS\n      // TODO(ts): make nodes a $ReadOnlyArray by returning a new array\n      _traverseNonSpaceNodes(partialGroup.children, callback, prev, null, isRoot);\n      continue;\n    }\n    // Ignore explicit spaces (e.g., \\;, \\,) when determining what implicit\n    // spacing should go between atoms of different classes\n    var nonspace = !node.hasClass(\"mspace\");\n    if (nonspace) {\n      var result = callback(node, prev.node);\n      if (result) {\n        if (prev.insertAfter) {\n          prev.insertAfter(result);\n        } else {\n          // insert at front\n          nodes.unshift(result);\n          i++;\n        }\n      }\n    }\n    if (nonspace) {\n      prev.node = node;\n    } else if (isRoot && node.hasClass(\"newline\")) {\n      prev.node = makeSpan([\"leftmost\"]); // treat like beginning of line\n    }\n    prev.insertAfter = (index => n => {\n      nodes.splice(index + 1, 0, n);\n      i++;\n    })(i);\n  }\n  if (next) {\n    nodes.pop();\n  }\n};\n// Check if given node is a partial group, i.e., does not affect spacing around.\nvar checkPartialGroup = function checkPartialGroup(node) {\n  if (node instanceof DocumentFragment || node instanceof Anchor || node instanceof Span && node.hasClass(\"enclosing\")) {\n    return node;\n  }\n  return null;\n};\n// Return the outermost node of a domTree.\nvar _getOutermostNode = function getOutermostNode(node, side) {\n  var partialGroup = checkPartialGroup(node);\n  if (partialGroup) {\n    var children = partialGroup.children;\n    if (children.length) {\n      if (side === \"right\") {\n        return _getOutermostNode(children[children.length - 1], \"right\");\n      } else if (side === \"left\") {\n        return _getOutermostNode(children[0], \"left\");\n      }\n    }\n  }\n  return node;\n};\n// Return math atom class (mclass) of a domTree.\n// If `side` is given, it will get the type of the outermost node at given side.\nvar getTypeOfDomTree = function getTypeOfDomTree(node, side) {\n  if (!node) {\n    return null;\n  }\n  if (side) {\n    node = _getOutermostNode(node, side);\n  }\n  // This makes a lot of assumptions as to where the type of atom\n  // appears.  We should do a better job of enforcing this.\n  var className = node.classes[0];\n  return DomEnum[className] || null;\n};\nvar makeNullDelimiter = function makeNullDelimiter(options, classes) {\n  var moreClasses = [\"nulldelimiter\"].concat(options.baseSizingClasses());\n  return makeSpan(classes.concat(moreClasses));\n};\n/**\n * buildGroup is the function that takes a group and calls the correct groupType\n * function for it. It also handles the interaction of size and style changes\n * between parents and children.\n */\nvar buildGroup$1 = function buildGroup(group, options, baseOptions) {\n  if (!group) {\n    return makeSpan();\n  }\n  if (_htmlGroupBuilders[group.type]) {\n    // Call the groupBuilders function\n    // TODO(ts)\n    var groupNode = _htmlGroupBuilders[group.type](group, options);\n    // If the size changed between the parent and the current group, account\n    // for that size difference.\n    if (baseOptions && options.size !== baseOptions.size) {\n      groupNode = makeSpan(options.sizingClasses(baseOptions), [groupNode], options);\n      var multiplier = options.sizeMultiplier / baseOptions.sizeMultiplier;\n      groupNode.height *= multiplier;\n      groupNode.depth *= multiplier;\n    }\n    return groupNode;\n  } else {\n    throw new ParseError(\"Got group of unknown type: '\" + group.type + \"'\");\n  }\n};\n/**\n * Combine an array of HTML DOM nodes (e.g., the output of `buildExpression`)\n * into an unbreakable HTML node of class .base, with proper struts to\n * guarantee correct vertical extent.  `buildHTML` calls this repeatedly to\n * make up the entire expression as a sequence of unbreakable units.\n */\nfunction buildHTMLUnbreakable(children, options) {\n  // Compute height and depth of this chunk.\n  var body = makeSpan([\"base\"], children, options);\n  // Add strut, which ensures that the top of the HTML element falls at\n  // the height of the expression, and the bottom of the HTML element\n  // falls at the depth of the expression.\n  var strut = makeSpan([\"strut\"]);\n  strut.style.height = makeEm(body.height + body.depth);\n  if (body.depth) {\n    strut.style.verticalAlign = makeEm(-body.depth);\n  }\n  body.children.unshift(strut);\n  return body;\n}\n/**\n * Take an entire parse tree, and build it into an appropriate set of HTML\n * nodes.\n */\nfunction buildHTML(tree, options) {\n  // Strip off outer tag wrapper for processing below.\n  var tag = null;\n  if (tree.length === 1 && tree[0].type === \"tag\") {\n    tag = tree[0].tag;\n    tree = tree[0].body;\n  }\n  // Build the expression contained in the tree\n  var expression = buildExpression$1(tree, options, \"root\");\n  var eqnNum;\n  if (expression.length === 2 && expression[1].hasClass(\"tag\")) {\n    // An environment with automatic equation numbers, e.g. {gather}.\n    eqnNum = expression.pop();\n  }\n  var children = [];\n  // Create one base node for each chunk between potential line breaks.\n  // The TeXBook [p.173] says \"A formula will be broken only after a\n  // relation symbol like $=$ or $<$ or $\\rightarrow$, or after a binary\n  // operation symbol like $+$ or $-$ or $\\times$, where the relation or\n  // binary operation is on the ``outer level'' of the formula (i.e., not\n  // enclosed in {...} and not part of an \\over construction).\"\n  var parts = [];\n  for (var i = 0; i < expression.length; i++) {\n    parts.push(expression[i]);\n    if (expression[i].hasClass(\"mbin\") || expression[i].hasClass(\"mrel\") || expression[i].hasClass(\"allowbreak\")) {\n      // Put any post-operator glue on same line as operator.\n      // Watch for \\nobreak along the way, and stop at \\newline.\n      var nobreak = false;\n      while (i < expression.length - 1 && expression[i + 1].hasClass(\"mspace\") && !expression[i + 1].hasClass(\"newline\")) {\n        i++;\n        parts.push(expression[i]);\n        if (expression[i].hasClass(\"nobreak\")) {\n          nobreak = true;\n        }\n      }\n      // Don't allow break if \\nobreak among the post-operator glue.\n      if (!nobreak) {\n        children.push(buildHTMLUnbreakable(parts, options));\n        parts = [];\n      }\n    } else if (expression[i].hasClass(\"newline\")) {\n      // Write the line except the newline\n      parts.pop();\n      if (parts.length > 0) {\n        children.push(buildHTMLUnbreakable(parts, options));\n        parts = [];\n      }\n      // Put the newline at the top level\n      children.push(expression[i]);\n    }\n  }\n  if (parts.length > 0) {\n    children.push(buildHTMLUnbreakable(parts, options));\n  }\n  // Now, if there was a tag, build it too and append it as a final child.\n  var tagChild;\n  if (tag) {\n    tagChild = buildHTMLUnbreakable(buildExpression$1(tag, options, true), options);\n    tagChild.classes = [\"tag\"];\n    children.push(tagChild);\n  } else if (eqnNum) {\n    children.push(eqnNum);\n  }\n  var htmlNode = makeSpan([\"katex-html\"], children);\n  htmlNode.setAttribute(\"aria-hidden\", \"true\");\n  // Adjust the strut of the tag to be the maximum height of all children\n  // (the height of the enclosing htmlNode) for proper vertical alignment.\n  if (tagChild) {\n    var strut = tagChild.children[0];\n    strut.style.height = makeEm(htmlNode.height + htmlNode.depth);\n    if (htmlNode.depth) {\n      strut.style.verticalAlign = makeEm(-htmlNode.depth);\n    }\n  }\n  return htmlNode;\n}\n\n/**\n * These objects store data about MathML nodes. This is the MathML equivalent\n * of the types in domTree.js. Since MathML handles its own rendering, and\n * since we're mainly using MathML to improve accessibility, we don't manage\n * any of the styling state that the plain DOM nodes do.\n *\n * The `toNode` and `toMarkup` functions work similarly to how they do in\n * domTree.js, creating namespaced DOM nodes and HTML text markup respectively.\n */\nfunction newDocumentFragment(children) {\n  return new DocumentFragment(children);\n}\n/**\n * This node represents a general purpose MathML node of any type. The\n * constructor requires the type of node to create (for example, `\"mo\"` or\n * `\"mspace\"`, corresponding to `<mo>` and `<mspace>` tags).\n */\nclass MathNode {\n  constructor(type, children, classes) {\n    this.type = type;\n    this.attributes = {};\n    this.children = children || [];\n    this.classes = classes || [];\n  }\n  /**\n   * Sets an attribute on a MathML node. MathML depends on attributes to convey a\n   * semantic content, so this is used heavily.\n   */\n  setAttribute(name, value) {\n    this.attributes[name] = value;\n  }\n  /**\n   * Gets an attribute on a MathML node.\n   */\n  getAttribute(name) {\n    return this.attributes[name];\n  }\n  /**\n   * Converts the math node into a MathML-namespaced DOM element.\n   */\n  toNode() {\n    var node = document.createElementNS(\"http://www.w3.org/1998/Math/MathML\", this.type);\n    for (var attr in this.attributes) {\n      if (Object.prototype.hasOwnProperty.call(this.attributes, attr)) {\n        node.setAttribute(attr, this.attributes[attr]);\n      }\n    }\n    if (this.classes.length > 0) {\n      node.className = createClass(this.classes);\n    }\n    for (var i = 0; i < this.children.length; i++) {\n      // Combine multiple TextNodes into one TextNode, to prevent\n      // screen readers from reading each as a separate word [#3995]\n      if (this.children[i] instanceof TextNode && this.children[i + 1] instanceof TextNode) {\n        var text = this.children[i].toText() + this.children[++i].toText();\n        while (this.children[i + 1] instanceof TextNode) {\n          text += this.children[++i].toText();\n        }\n        node.appendChild(new TextNode(text).toNode());\n      } else {\n        node.appendChild(this.children[i].toNode());\n      }\n    }\n    return node;\n  }\n  /**\n   * Converts the math node into an HTML markup string.\n   */\n  toMarkup() {\n    var markup = \"<\" + this.type;\n    // Add the attributes\n    for (var attr in this.attributes) {\n      if (Object.prototype.hasOwnProperty.call(this.attributes, attr)) {\n        markup += \" \" + attr + \"=\\\"\";\n        markup += escape(this.attributes[attr]);\n        markup += \"\\\"\";\n      }\n    }\n    if (this.classes.length > 0) {\n      markup += \" class =\\\"\" + escape(createClass(this.classes)) + \"\\\"\";\n    }\n    markup += \">\";\n    for (var i = 0; i < this.children.length; i++) {\n      markup += this.children[i].toMarkup();\n    }\n    markup += \"</\" + this.type + \">\";\n    return markup;\n  }\n  /**\n   * Converts the math node into a string, similar to innerText, but escaped.\n   */\n  toText() {\n    return this.children.map(child => child.toText()).join(\"\");\n  }\n}\n/**\n * This node represents a piece of text.\n */\nclass TextNode {\n  constructor(text) {\n    this.text = text;\n  }\n  /**\n   * Converts the text node into a DOM text node.\n   */\n  toNode() {\n    return document.createTextNode(this.text);\n  }\n  /**\n   * Converts the text node into escaped HTML markup\n   * (representing the text itself).\n   */\n  toMarkup() {\n    return escape(this.toText());\n  }\n  /**\n   * Converts the text node into a string\n   * (representing the text itself).\n   */\n  toText() {\n    return this.text;\n  }\n}\n/**\n * This node represents a space, but may render as <mspace.../> or as text,\n * depending on the width.\n */\nclass SpaceNode {\n  /**\n   * Create a Space node with width given in CSS ems.\n   */\n  constructor(width) {\n    this.width = width;\n    // See https://www.w3.org/TR/2000/WD-MathML2-20000328/chapter6.html\n    // for a table of space-like characters.  We use Unicode\n    // representations instead of &LongNames; as it's not clear how to\n    // make the latter via document.createTextNode.\n    if (width >= 0.05555 && width <= 0.05556) {\n      this.character = \"\\u200a\"; // &VeryThinSpace;\n    } else if (width >= 0.1666 && width <= 0.1667) {\n      this.character = \"\\u2009\"; // &ThinSpace;\n    } else if (width >= 0.2222 && width <= 0.2223) {\n      this.character = \"\\u2005\"; // &MediumSpace;\n    } else if (width >= 0.2777 && width <= 0.2778) {\n      this.character = \"\\u2005\\u200a\"; // &ThickSpace;\n    } else if (width >= -0.05556 && width <= -0.05555) {\n      this.character = \"\\u200a\\u2063\"; // &NegativeVeryThinSpace;\n    } else if (width >= -0.1667 && width <= -0.1666) {\n      this.character = \"\\u2009\\u2063\"; // &NegativeThinSpace;\n    } else if (width >= -0.2223 && width <= -0.2222) {\n      this.character = \"\\u205f\\u2063\"; // &NegativeMediumSpace;\n    } else if (width >= -0.2778 && width <= -0.2777) {\n      this.character = \"\\u2005\\u2063\"; // &NegativeThickSpace;\n    } else {\n      this.character = null;\n    }\n  }\n  /**\n   * Converts the math node into a MathML-namespaced DOM element.\n   */\n  toNode() {\n    if (this.character) {\n      return document.createTextNode(this.character);\n    } else {\n      var node = document.createElementNS(\"http://www.w3.org/1998/Math/MathML\", \"mspace\");\n      node.setAttribute(\"width\", makeEm(this.width));\n      return node;\n    }\n  }\n  /**\n   * Converts the math node into an HTML markup string.\n   */\n  toMarkup() {\n    if (this.character) {\n      return \"<mtext>\" + this.character + \"</mtext>\";\n    } else {\n      return \"<mspace width=\\\"\" + makeEm(this.width) + \"\\\"/>\";\n    }\n  }\n  /**\n   * Converts the math node into a string, similar to innerText.\n   */\n  toText() {\n    if (this.character) {\n      return this.character;\n    } else {\n      return \" \";\n    }\n  }\n}\n\n/**\n * This file converts a parse tree into a corresponding MathML tree. The main\n * entry point is the `buildMathML` function, which takes a parse tree from the\n * parser.\n */\nvar noVariantSymbols = new Set([\"\\\\imath\", \"\\\\jmath\"]);\nvar rowLikeTypes = new Set([\"mrow\", \"mtable\"]);\n/**\n * Takes a symbol and converts it into a MathML text node after performing\n * optional replacement from symbols.js.\n */\nvar makeText = function makeText(text, mode, options) {\n  if (symbols[mode][text] && symbols[mode][text].replace && text.charCodeAt(0) !== 0xD835 && !(ligatures.hasOwnProperty(text) && options && (options.fontFamily && options.fontFamily.slice(4, 6) === \"tt\" || options.font && options.font.slice(4, 6) === \"tt\"))) {\n    text = symbols[mode][text].replace;\n  }\n  return new TextNode(text);\n};\n/**\n * Wrap the given array of nodes in an <mrow> node if needed, i.e.,\n * unless the array has length 1.  Always returns a single node.\n */\nvar makeRow = function makeRow(body) {\n  if (body.length === 1) {\n    return body[0];\n  } else {\n    return new MathNode(\"mrow\", body);\n  }\n};\n/**\n * Returns the math variant as a string or null if none is required.\n */\nvar getVariant = function getVariant(group, options) {\n  // Handle \\text... font specifiers as best we can.\n  // MathML has a limited list of allowable mathvariant specifiers; see\n  // https://www.w3.org/TR/MathML3/chapter3.html#presm.commatt\n  if (options.fontFamily === \"texttt\") {\n    return \"monospace\";\n  } else if (options.fontFamily === \"textsf\") {\n    if (options.fontShape === \"textit\" && options.fontWeight === \"textbf\") {\n      return \"sans-serif-bold-italic\";\n    } else if (options.fontShape === \"textit\") {\n      return \"sans-serif-italic\";\n    } else if (options.fontWeight === \"textbf\") {\n      return \"bold-sans-serif\";\n    } else {\n      return \"sans-serif\";\n    }\n  } else if (options.fontShape === \"textit\" && options.fontWeight === \"textbf\") {\n    return \"bold-italic\";\n  } else if (options.fontShape === \"textit\") {\n    return \"italic\";\n  } else if (options.fontWeight === \"textbf\") {\n    return \"bold\";\n  }\n  var font = options.font;\n  if (!font || font === \"mathnormal\") {\n    return null;\n  }\n  var mode = group.mode;\n  if (font === \"mathit\") {\n    return \"italic\";\n  } else if (font === \"boldsymbol\") {\n    return group.type === \"textord\" ? \"bold\" : \"bold-italic\";\n  } else if (font === \"mathbf\") {\n    return \"bold\";\n  } else if (font === \"mathbb\") {\n    return \"double-struck\";\n  } else if (font === \"mathsfit\") {\n    return \"sans-serif-italic\";\n  } else if (font === \"mathfrak\") {\n    return \"fraktur\";\n  } else if (font === \"mathscr\" || font === \"mathcal\") {\n    // MathML makes no distinction between script and calligraphic\n    return \"script\";\n  } else if (font === \"mathsf\") {\n    return \"sans-serif\";\n  } else if (font === \"mathtt\") {\n    return \"monospace\";\n  }\n  var text = group.text;\n  if (noVariantSymbols.has(text)) {\n    return null;\n  }\n  if (symbols[mode][text]) {\n    var replacement = symbols[mode][text].replace;\n    if (replacement) {\n      text = replacement;\n    }\n  }\n  var fontName = fontMap[font].fontName;\n  if (getCharacterMetrics(text, fontName, mode)) {\n    return fontMap[font].variant;\n  }\n  return null;\n};\n/**\n * Check for <mi>.</mi> which is how a dot renders in MathML,\n * or <mo separator=\"true\" lspace=\"0em\" rspace=\"0em\">,</mo>\n * which is how a braced comma {,} renders in MathML\n */\nfunction isNumberPunctuation(group) {\n  if (!group) {\n    return false;\n  }\n  if (group.type === 'mi' && group.children.length === 1) {\n    var child = group.children[0];\n    return child instanceof TextNode && child.text === '.';\n  } else if (group.type === 'mo' && group.children.length === 1 && group.getAttribute('separator') === 'true' && group.getAttribute('lspace') === '0em' && group.getAttribute('rspace') === '0em') {\n    var _child = group.children[0];\n    return _child instanceof TextNode && _child.text === ',';\n  } else {\n    return false;\n  }\n}\n/**\n * Takes a list of nodes, builds them, and returns a list of the generated\n * MathML nodes.  Also combine consecutive <mtext> outputs into a single\n * <mtext> tag.\n */\nvar buildExpression = function buildExpression(expression, options, isOrdgroup) {\n  if (expression.length === 1) {\n    var group = buildGroup(expression[0], options);\n    if (isOrdgroup && group instanceof MathNode && group.type === \"mo\") {\n      // When TeX writers want to suppress spacing on an operator,\n      // they often put the operator by itself inside braces.\n      group.setAttribute(\"lspace\", \"0em\");\n      group.setAttribute(\"rspace\", \"0em\");\n    }\n    return [group];\n  }\n  var groups = [];\n  var lastGroup;\n  for (var i = 0; i < expression.length; i++) {\n    var _group = buildGroup(expression[i], options);\n    if (_group instanceof MathNode && lastGroup instanceof MathNode) {\n      // Concatenate adjacent <mtext>s\n      if (_group.type === 'mtext' && lastGroup.type === 'mtext' && _group.getAttribute('mathvariant') === lastGroup.getAttribute('mathvariant')) {\n        lastGroup.children.push(..._group.children);\n        continue;\n        // Concatenate adjacent <mn>s\n      } else if (_group.type === 'mn' && lastGroup.type === 'mn') {\n        lastGroup.children.push(..._group.children);\n        continue;\n        // Concatenate <mn>...</mn> followed by <mi>.</mi>\n      } else if (isNumberPunctuation(_group) && lastGroup.type === 'mn') {\n        lastGroup.children.push(..._group.children);\n        continue;\n        // Concatenate <mi>.</mi> followed by <mn>...</mn>\n      } else if (_group.type === 'mn' && isNumberPunctuation(lastGroup)) {\n        _group.children = [...lastGroup.children, ..._group.children];\n        groups.pop();\n        // Put preceding <mn>...</mn> or <mi>.</mi> inside base of\n        // <msup><mn>...base...</mn>...exponent...</msup> (or <msub>)\n      } else if ((_group.type === 'msup' || _group.type === 'msub') && _group.children.length >= 1 && (lastGroup.type === 'mn' || isNumberPunctuation(lastGroup))) {\n        var base = _group.children[0];\n        if (base instanceof MathNode && base.type === 'mn') {\n          base.children = [...lastGroup.children, ...base.children];\n          groups.pop();\n        }\n        // \\not\n      } else if (lastGroup.type === 'mi' && lastGroup.children.length === 1) {\n        var lastChild = lastGroup.children[0];\n        if (lastChild instanceof TextNode && lastChild.text === '\\u0338' && (_group.type === 'mo' || _group.type === 'mi' || _group.type === 'mn')) {\n          var child = _group.children[0];\n          if (child instanceof TextNode && child.text.length > 0) {\n            // Overlay with combining character long solidus\n            child.text = child.text.slice(0, 1) + \"\\u0338\" + child.text.slice(1);\n            groups.pop();\n          }\n        }\n      }\n    }\n    groups.push(_group);\n    lastGroup = _group;\n  }\n  return groups;\n};\n/**\n * Equivalent to buildExpression, but wraps the elements in an <mrow>\n * if there's more than one.  Returns a single node instead of an array.\n */\nvar buildExpressionRow = function buildExpressionRow(expression, options, isOrdgroup) {\n  return makeRow(buildExpression(expression, options, isOrdgroup));\n};\n/**\n * Takes a group from the parser and calls the appropriate groupBuilders function\n * on it to produce a MathML node.\n */\nvar buildGroup = function buildGroup(group, options) {\n  if (!group) {\n    return new MathNode(\"mrow\");\n  }\n  if (_mathmlGroupBuilders[group.type]) {\n    // Call the groupBuilders function\n    // TODO(ts)\n    var result = _mathmlGroupBuilders[group.type](group, options);\n    // TODO(ts)\n    return result;\n  } else {\n    throw new ParseError(\"Got group of unknown type: '\" + group.type + \"'\");\n  }\n};\n/**\n * Takes a full parse tree and settings and builds a MathML representation of\n * it. In particular, we put the elements from building the parse tree into a\n * <semantics> tag so we can also include that TeX source as an annotation.\n *\n * Note that we actually return a domTree element with a `<math>` inside it so\n * we can do appropriate styling.\n */\nfunction buildMathML(tree, texExpression, options, isDisplayMode, forMathmlOnly) {\n  var expression = buildExpression(tree, options);\n  // TODO: Make a pass thru the MathML similar to buildHTML.traverseNonSpaceNodes\n  // and add spacing nodes. This is necessary only adjacent to math operators\n  // like \\sin or \\lim or to subsup elements that contain math operators.\n  // MathML takes care of the other spacing issues.\n  // Wrap up the expression in an mrow so it is presented in the semantics\n  // tag correctly, unless it's a single <mrow> or <mtable>.\n  var wrapper;\n  if (expression.length === 1 && expression[0] instanceof MathNode && rowLikeTypes.has(expression[0].type)) {\n    wrapper = expression[0];\n  } else {\n    wrapper = new MathNode(\"mrow\", expression);\n  }\n  // Build a TeX annotation of the source\n  var annotation = new MathNode(\"annotation\", [new TextNode(texExpression)]);\n  annotation.setAttribute(\"encoding\", \"application/x-tex\");\n  var semantics = new MathNode(\"semantics\", [wrapper, annotation]);\n  var math = new MathNode(\"math\", [semantics]);\n  math.setAttribute(\"xmlns\", \"http://www.w3.org/1998/Math/MathML\");\n  if (isDisplayMode) {\n    math.setAttribute(\"display\", \"block\");\n  }\n  // You can't style <math> nodes, so we wrap the node in a span.\n  // NOTE: The span class is not typed to have <math> nodes as children, and\n  // we don't want to make the children type more generic since the children\n  // of span are expected to have more fields in `buildHtml` contexts.\n  var wrapperClass = forMathmlOnly ? \"katex\" : \"katex-mathml\";\n  // TODO(ts)\n  return makeSpan([wrapperClass], [math]);\n}\n\n/**\n * This file contains information about the options that the Parser carries\n * around with it while parsing. Data is held in an `Options` object, and when\n * recursing, a new `Options` object can be created with the `.with*` and\n * `.reset` functions.\n */\nvar sizeStyleMap = [\n// Each element contains [textsize, scriptsize, scriptscriptsize].\n// The size mappings are taken from TeX with \\normalsize=10pt.\n[1, 1, 1],\n// size1: [5, 5, 5]              \\tiny\n[2, 1, 1],\n// size2: [6, 5, 5]\n[3, 1, 1],\n// size3: [7, 5, 5]              \\scriptsize\n[4, 2, 1],\n// size4: [8, 6, 5]              \\footnotesize\n[5, 2, 1],\n// size5: [9, 6, 5]              \\small\n[6, 3, 1],\n// size6: [10, 7, 5]             \\normalsize\n[7, 4, 2],\n// size7: [12, 8, 6]             \\large\n[8, 6, 3],\n// size8: [14.4, 10, 7]          \\Large\n[9, 7, 6],\n// size9: [17.28, 12, 10]        \\LARGE\n[10, 8, 7],\n// size10: [20.74, 14.4, 12]     \\huge\n[11, 10, 9] // size11: [24.88, 20.74, 17.28] \\HUGE\n];\nvar sizeMultipliers = [\n// fontMetrics.js:getGlobalMetrics also uses size indexes, so if\n// you change size indexes, change that function.\n0.5, 0.6, 0.7, 0.8, 0.9, 1.0, 1.2, 1.44, 1.728, 2.074, 2.488];\nvar sizeAtStyle = function sizeAtStyle(size, style) {\n  return style.size < 2 ? size : sizeStyleMap[size - 1][style.size - 1];\n};\n/**\n * This is the main options class. It contains the current style, size, color,\n * and font.\n *\n * Options objects should not be modified. To create a new Options with\n * different properties, call a `.having*` method.\n */\nclass Options {\n  constructor(data) {\n    this.style = data.style;\n    this.color = data.color;\n    this.size = data.size || Options.BASESIZE;\n    this.textSize = data.textSize || this.size;\n    this.phantom = !!data.phantom;\n    this.font = data.font || \"\";\n    this.fontFamily = data.fontFamily || \"\";\n    this.fontWeight = data.fontWeight || '';\n    this.fontShape = data.fontShape || '';\n    this.sizeMultiplier = sizeMultipliers[this.size - 1];\n    this.maxSize = data.maxSize;\n    this.minRuleThickness = data.minRuleThickness;\n    this._fontMetrics = undefined;\n  }\n  /**\n   * Returns a new options object with the same properties as \"this\".  Properties\n   * from \"extension\" will be copied to the new options object.\n   */\n  extend(extension) {\n    var data = {\n      style: this.style,\n      size: this.size,\n      textSize: this.textSize,\n      color: this.color,\n      phantom: this.phantom,\n      font: this.font,\n      fontFamily: this.fontFamily,\n      fontWeight: this.fontWeight,\n      fontShape: this.fontShape,\n      maxSize: this.maxSize,\n      minRuleThickness: this.minRuleThickness\n    };\n    Object.assign(data, extension);\n    return new Options(data);\n  }\n  /**\n   * Return an options object with the given style. If `this.style === style`,\n   * returns `this`.\n   */\n  havingStyle(style) {\n    if (this.style === style) {\n      return this;\n    } else {\n      return this.extend({\n        style: style,\n        size: sizeAtStyle(this.textSize, style)\n      });\n    }\n  }\n  /**\n   * Return an options object with a cramped version of the current style. If\n   * the current style is cramped, returns `this`.\n   */\n  havingCrampedStyle() {\n    return this.havingStyle(this.style.cramp());\n  }\n  /**\n   * Return an options object with the given size and in at least `\\textstyle`.\n   * Returns `this` if appropriate.\n   */\n  havingSize(size) {\n    if (this.size === size && this.textSize === size) {\n      return this;\n    } else {\n      return this.extend({\n        style: this.style.text(),\n        size: size,\n        textSize: size,\n        sizeMultiplier: sizeMultipliers[size - 1]\n      });\n    }\n  }\n  /**\n   * Like `this.havingSize(BASESIZE).havingStyle(style)`. If `style` is omitted,\n   * changes to at least `\\textstyle`.\n   */\n  havingBaseStyle(style) {\n    style = style || this.style.text();\n    var wantSize = sizeAtStyle(Options.BASESIZE, style);\n    if (this.size === wantSize && this.textSize === Options.BASESIZE && this.style === style) {\n      return this;\n    } else {\n      return this.extend({\n        style: style,\n        size: wantSize\n      });\n    }\n  }\n  /**\n   * Remove the effect of sizing changes such as \\Huge.\n   * Keep the effect of the current style, such as \\scriptstyle.\n   */\n  havingBaseSizing() {\n    var size;\n    switch (this.style.id) {\n      case 4:\n      case 5:\n        size = 3; // normalsize in scriptstyle\n        break;\n      case 6:\n      case 7:\n        size = 1; // normalsize in scriptscriptstyle\n        break;\n      default:\n        size = 6;\n      // normalsize in textstyle or displaystyle\n    }\n    return this.extend({\n      style: this.style.text(),\n      size: size\n    });\n  }\n  /**\n   * Create a new options object with the given color.\n   */\n  withColor(color) {\n    return this.extend({\n      color: color\n    });\n  }\n  /**\n   * Create a new options object with \"phantom\" set to true.\n   */\n  withPhantom() {\n    return this.extend({\n      phantom: true\n    });\n  }\n  /**\n   * Creates a new options object with the given math font or old text font.\n   * @type {[type]}\n   */\n  withFont(font) {\n    return this.extend({\n      font\n    });\n  }\n  /**\n   * Create a new options objects with the given fontFamily.\n   */\n  withTextFontFamily(fontFamily) {\n    return this.extend({\n      fontFamily,\n      font: \"\"\n    });\n  }\n  /**\n   * Creates a new options object with the given font weight\n   */\n  withTextFontWeight(fontWeight) {\n    return this.extend({\n      fontWeight,\n      font: \"\"\n    });\n  }\n  /**\n   * Creates a new options object with the given font weight\n   */\n  withTextFontShape(fontShape) {\n    return this.extend({\n      fontShape,\n      font: \"\"\n    });\n  }\n  /**\n   * Return the CSS sizing classes required to switch from enclosing options\n   * `oldOptions` to `this`. Returns an array of classes.\n   */\n  sizingClasses(oldOptions) {\n    if (oldOptions.size !== this.size) {\n      return [\"sizing\", \"reset-size\" + oldOptions.size, \"size\" + this.size];\n    } else {\n      return [];\n    }\n  }\n  /**\n   * Return the CSS sizing classes required to switch to the base size. Like\n   * `this.havingSize(BASESIZE).sizingClasses(this)`.\n   */\n  baseSizingClasses() {\n    if (this.size !== Options.BASESIZE) {\n      return [\"sizing\", \"reset-size\" + this.size, \"size\" + Options.BASESIZE];\n    } else {\n      return [];\n    }\n  }\n  /**\n   * Return the font metrics for this size.\n   */\n  fontMetrics() {\n    if (!this._fontMetrics) {\n      this._fontMetrics = getGlobalMetrics(this.size);\n    }\n    return this._fontMetrics;\n  }\n  /**\n   * Gets the CSS color of the current options object\n   */\n  getColor() {\n    if (this.phantom) {\n      return \"transparent\";\n    } else {\n      return this.color;\n    }\n  }\n}\n// A font family applies to a group of fonts (i.e. SansSerif), while a font\n// represents a specific font (i.e. SansSerif Bold).\n// See: https://tex.stackexchange.com/questions/22350/difference-between-textrm-and-mathrm\n/**\n * The base size index.\n */\nOptions.BASESIZE = 6;\n\nvar optionsFromSettings = function optionsFromSettings(settings) {\n  return new Options({\n    style: settings.displayMode ? Style$1.DISPLAY : Style$1.TEXT,\n    maxSize: settings.maxSize,\n    minRuleThickness: settings.minRuleThickness\n  });\n};\nvar displayWrap = function displayWrap(node, settings) {\n  if (settings.displayMode) {\n    var classes = [\"katex-display\"];\n    if (settings.leqno) {\n      classes.push(\"leqno\");\n    }\n    if (settings.fleqn) {\n      classes.push(\"fleqn\");\n    }\n    node = makeSpan(classes, [node]);\n  }\n  return node;\n};\nvar buildTree = function buildTree(tree, expression, settings) {\n  var options = optionsFromSettings(settings);\n  var katexNode;\n  if (settings.output === \"mathml\") {\n    return buildMathML(tree, expression, options, settings.displayMode, true);\n  } else if (settings.output === \"html\") {\n    var htmlNode = buildHTML(tree, options);\n    katexNode = makeSpan([\"katex\"], [htmlNode]);\n  } else {\n    var mathMLNode = buildMathML(tree, expression, options, settings.displayMode, false);\n    var _htmlNode = buildHTML(tree, options);\n    katexNode = makeSpan([\"katex\"], [mathMLNode, _htmlNode]);\n  }\n  return displayWrap(katexNode, settings);\n};\nvar buildHTMLTree = function buildHTMLTree(tree, expression, settings) {\n  var options = optionsFromSettings(settings);\n  var htmlNode = buildHTML(tree, options);\n  var katexNode = makeSpan([\"katex\"], [htmlNode]);\n  return displayWrap(katexNode, settings);\n};\n\n/**\n * This file provides support to buildMathML.js and buildHTML.js\n * for stretchy wide elements rendered from SVG files\n * and other CSS trickery.\n */\nvar stretchyCodePoint = {\n  widehat: \"^\",\n  widecheck: \"ˇ\",\n  widetilde: \"~\",\n  utilde: \"~\",\n  overleftarrow: \"\\u2190\",\n  underleftarrow: \"\\u2190\",\n  xleftarrow: \"\\u2190\",\n  overrightarrow: \"\\u2192\",\n  underrightarrow: \"\\u2192\",\n  xrightarrow: \"\\u2192\",\n  underbrace: \"\\u23df\",\n  overbrace: \"\\u23de\",\n  underbracket: \"\\u23b5\",\n  overbracket: \"\\u23b4\",\n  overgroup: \"\\u23e0\",\n  undergroup: \"\\u23e1\",\n  overleftrightarrow: \"\\u2194\",\n  underleftrightarrow: \"\\u2194\",\n  xleftrightarrow: \"\\u2194\",\n  Overrightarrow: \"\\u21d2\",\n  xRightarrow: \"\\u21d2\",\n  overleftharpoon: \"\\u21bc\",\n  xleftharpoonup: \"\\u21bc\",\n  overrightharpoon: \"\\u21c0\",\n  xrightharpoonup: \"\\u21c0\",\n  xLeftarrow: \"\\u21d0\",\n  xLeftrightarrow: \"\\u21d4\",\n  xhookleftarrow: \"\\u21a9\",\n  xhookrightarrow: \"\\u21aa\",\n  xmapsto: \"\\u21a6\",\n  xrightharpoondown: \"\\u21c1\",\n  xleftharpoondown: \"\\u21bd\",\n  xrightleftharpoons: \"\\u21cc\",\n  xleftrightharpoons: \"\\u21cb\",\n  xtwoheadleftarrow: \"\\u219e\",\n  xtwoheadrightarrow: \"\\u21a0\",\n  xlongequal: \"=\",\n  xtofrom: \"\\u21c4\",\n  xrightleftarrows: \"\\u21c4\",\n  xrightequilibrium: \"\\u21cc\",\n  // Not a perfect match.\n  xleftequilibrium: \"\\u21cb\",\n  // None better available.\n  \"\\\\cdrightarrow\": \"\\u2192\",\n  \"\\\\cdleftarrow\": \"\\u2190\",\n  \"\\\\cdlongequal\": \"=\"\n};\nvar stretchyMathML = function stretchyMathML(label) {\n  var node = new MathNode(\"mo\", [new TextNode(stretchyCodePoint[label.replace(/^\\\\/, '')])]);\n  node.setAttribute(\"stretchy\", \"true\");\n  return node;\n};\n// Many of the KaTeX SVG images have been adapted from glyphs in KaTeX fonts.\n// Copyright (c) 2009-2010, Design Science, Inc. (<www.mathjax.org>)\n// Copyright (c) 2014-2017 Khan Academy (<www.khanacademy.org>)\n// Licensed under the SIL Open Font License, Version 1.1.\n// See \\nhttp://scripts.sil.org/OFL\n// Very Long SVGs\n//    Many of the KaTeX stretchy wide elements use a long SVG image and an\n//    overflow: hidden tactic to achieve a stretchy image while avoiding\n//    distortion of arrowheads or brace corners.\n//    The SVG typically contains a very long (400 em) arrow.\n//    The SVG is in a container span that has overflow: hidden, so the span\n//    acts like a window that exposes only part of the  SVG.\n//    The SVG always has a longer, thinner aspect ratio than the container span.\n//    After the SVG fills 100% of the height of the container span,\n//    there is a long arrow shaft left over. That left-over shaft is not shown.\n//    Instead, it is sliced off because the span's CSS has overflow: hidden.\n//    Thus, the reader sees an arrow that matches the subject matter width\n//    without distortion.\n//    Some functions, such as \\cancel, need to vary their aspect ratio. These\n//    functions do not get the overflow SVG treatment.\n// In the katexImagesData object just below, the dimensions all\n// correspond to path geometry inside the relevant SVG.\n// For example, \\overrightarrow uses the same arrowhead as glyph U+2192\n// from the KaTeX Main font. The scaling factor is 1000.\n// That is, inside the font, that arrowhead is 522 units tall, which\n// corresponds to 0.522 em inside the document.\nvar katexImagesData = {\n  //   path(s), minWidth, height, align\n  overrightarrow: [[\"rightarrow\"], 0.888, 522, \"xMaxYMin\"],\n  overleftarrow: [[\"leftarrow\"], 0.888, 522, \"xMinYMin\"],\n  underrightarrow: [[\"rightarrow\"], 0.888, 522, \"xMaxYMin\"],\n  underleftarrow: [[\"leftarrow\"], 0.888, 522, \"xMinYMin\"],\n  xrightarrow: [[\"rightarrow\"], 1.469, 522, \"xMaxYMin\"],\n  \"\\\\cdrightarrow\": [[\"rightarrow\"], 3.0, 522, \"xMaxYMin\"],\n  // CD minwwidth2.5pc\n  xleftarrow: [[\"leftarrow\"], 1.469, 522, \"xMinYMin\"],\n  \"\\\\cdleftarrow\": [[\"leftarrow\"], 3.0, 522, \"xMinYMin\"],\n  Overrightarrow: [[\"doublerightarrow\"], 0.888, 560, \"xMaxYMin\"],\n  xRightarrow: [[\"doublerightarrow\"], 1.526, 560, \"xMaxYMin\"],\n  xLeftarrow: [[\"doubleleftarrow\"], 1.526, 560, \"xMinYMin\"],\n  overleftharpoon: [[\"leftharpoon\"], 0.888, 522, \"xMinYMin\"],\n  xleftharpoonup: [[\"leftharpoon\"], 0.888, 522, \"xMinYMin\"],\n  xleftharpoondown: [[\"leftharpoondown\"], 0.888, 522, \"xMinYMin\"],\n  overrightharpoon: [[\"rightharpoon\"], 0.888, 522, \"xMaxYMin\"],\n  xrightharpoonup: [[\"rightharpoon\"], 0.888, 522, \"xMaxYMin\"],\n  xrightharpoondown: [[\"rightharpoondown\"], 0.888, 522, \"xMaxYMin\"],\n  xlongequal: [[\"longequal\"], 0.888, 334, \"xMinYMin\"],\n  \"\\\\cdlongequal\": [[\"longequal\"], 3.0, 334, \"xMinYMin\"],\n  xtwoheadleftarrow: [[\"twoheadleftarrow\"], 0.888, 334, \"xMinYMin\"],\n  xtwoheadrightarrow: [[\"twoheadrightarrow\"], 0.888, 334, \"xMaxYMin\"],\n  overleftrightarrow: [[\"leftarrow\", \"rightarrow\"], 0.888, 522],\n  overbrace: [[\"leftbrace\", \"midbrace\", \"rightbrace\"], 1.6, 548],\n  underbrace: [[\"leftbraceunder\", \"midbraceunder\", \"rightbraceunder\"], 1.6, 548],\n  underleftrightarrow: [[\"leftarrow\", \"rightarrow\"], 0.888, 522],\n  xleftrightarrow: [[\"leftarrow\", \"rightarrow\"], 1.75, 522],\n  xLeftrightarrow: [[\"doubleleftarrow\", \"doublerightarrow\"], 1.75, 560],\n  xrightleftharpoons: [[\"leftharpoondownplus\", \"rightharpoonplus\"], 1.75, 716],\n  xleftrightharpoons: [[\"leftharpoonplus\", \"rightharpoondownplus\"], 1.75, 716],\n  xhookleftarrow: [[\"leftarrow\", \"righthook\"], 1.08, 522],\n  xhookrightarrow: [[\"lefthook\", \"rightarrow\"], 1.08, 522],\n  overlinesegment: [[\"leftlinesegment\", \"rightlinesegment\"], 0.888, 522],\n  underlinesegment: [[\"leftlinesegment\", \"rightlinesegment\"], 0.888, 522],\n  overbracket: [[\"leftbracketover\", \"rightbracketover\"], 1.6, 440],\n  underbracket: [[\"leftbracketunder\", \"rightbracketunder\"], 1.6, 410],\n  overgroup: [[\"leftgroup\", \"rightgroup\"], 0.888, 342],\n  undergroup: [[\"leftgroupunder\", \"rightgroupunder\"], 0.888, 342],\n  xmapsto: [[\"leftmapsto\", \"rightarrow\"], 1.5, 522],\n  xtofrom: [[\"leftToFrom\", \"rightToFrom\"], 1.75, 528],\n  // The next three arrows are from the mhchem package.\n  // In mhchem.sty, min-length is 2.0em. But these arrows might appear in the\n  // document as \\xrightarrow or \\xrightleftharpoons. Those have\n  // min-length = 1.75em, so we set min-length on these next three to match.\n  xrightleftarrows: [[\"baraboveleftarrow\", \"rightarrowabovebar\"], 1.75, 901],\n  xrightequilibrium: [[\"baraboveshortleftharpoon\", \"rightharpoonaboveshortbar\"], 1.75, 716],\n  xleftequilibrium: [[\"shortbaraboveleftharpoon\", \"shortrightharpoonabovebar\"], 1.75, 716]\n};\nvar wideAccentLabels = new Set([\"widehat\", \"widecheck\", \"widetilde\", \"utilde\"]);\nvar stretchySvg = function stretchySvg(group, options) {\n  // Create a span with inline SVG for the element.\n  function buildSvgSpan_() {\n    var viewBoxWidth = 400000; // default\n    var label = group.label.slice(1);\n    if (wideAccentLabels.has(label)) {\n      // Each type in the `if` statement corresponds to one of the ParseNode\n      // types below. This narrowing is required to access `grp.base`.\n      // TODO(ts)\n      var grp = group;\n      // There are four SVG images available for each function.\n      // Choose a taller image when there are more characters.\n      var numChars = grp.base.type === \"ordgroup\" ? grp.base.body.length : 1;\n      var viewBoxHeight;\n      var pathName;\n      var _height;\n      if (numChars > 5) {\n        if (label === \"widehat\" || label === \"widecheck\") {\n          viewBoxHeight = 420;\n          viewBoxWidth = 2364;\n          _height = 0.42;\n          pathName = label + \"4\";\n        } else {\n          viewBoxHeight = 312;\n          viewBoxWidth = 2340;\n          _height = 0.34;\n          pathName = \"tilde4\";\n        }\n      } else {\n        var imgIndex = [1, 1, 2, 2, 3, 3][numChars];\n        if (label === \"widehat\" || label === \"widecheck\") {\n          viewBoxWidth = [0, 1062, 2364, 2364, 2364][imgIndex];\n          viewBoxHeight = [0, 239, 300, 360, 420][imgIndex];\n          _height = [0, 0.24, 0.3, 0.3, 0.36, 0.42][imgIndex];\n          pathName = label + imgIndex;\n        } else {\n          viewBoxWidth = [0, 600, 1033, 2339, 2340][imgIndex];\n          viewBoxHeight = [0, 260, 286, 306, 312][imgIndex];\n          _height = [0, 0.26, 0.286, 0.3, 0.306, 0.34][imgIndex];\n          pathName = \"tilde\" + imgIndex;\n        }\n      }\n      var path = new PathNode(pathName);\n      var svgNode = new SvgNode([path], {\n        \"width\": \"100%\",\n        \"height\": makeEm(_height),\n        \"viewBox\": \"0 0 \" + viewBoxWidth + \" \" + viewBoxHeight,\n        \"preserveAspectRatio\": \"none\"\n      });\n      return {\n        span: makeSvgSpan([], [svgNode], options),\n        minWidth: 0,\n        height: _height\n      };\n    } else {\n      var spans = [];\n      var data = katexImagesData[label];\n      var [paths, _minWidth, _viewBoxHeight] = data;\n      var _height2 = _viewBoxHeight / 1000;\n      var numSvgChildren = paths.length;\n      var widthClasses;\n      var aligns;\n      if (numSvgChildren === 1) {\n        // TODO(ts): All these cases must be of the 4-tuple type.\n        var align1 = data[3];\n        widthClasses = [\"hide-tail\"];\n        aligns = [align1];\n      } else if (numSvgChildren === 2) {\n        widthClasses = [\"halfarrow-left\", \"halfarrow-right\"];\n        aligns = [\"xMinYMin\", \"xMaxYMin\"];\n      } else if (numSvgChildren === 3) {\n        widthClasses = [\"brace-left\", \"brace-center\", \"brace-right\"];\n        aligns = [\"xMinYMin\", \"xMidYMin\", \"xMaxYMin\"];\n      } else {\n        throw new Error(\"Correct katexImagesData or update code here to support\\n                    \" + numSvgChildren + \" children.\");\n      }\n      for (var i = 0; i < numSvgChildren; i++) {\n        var _path = new PathNode(paths[i]);\n        var _svgNode = new SvgNode([_path], {\n          \"width\": \"400em\",\n          \"height\": makeEm(_height2),\n          \"viewBox\": \"0 0 \" + viewBoxWidth + \" \" + _viewBoxHeight,\n          \"preserveAspectRatio\": aligns[i] + \" slice\"\n        });\n        var _span = makeSvgSpan([widthClasses[i]], [_svgNode], options);\n        if (numSvgChildren === 1) {\n          return {\n            span: _span,\n            minWidth: _minWidth,\n            height: _height2\n          };\n        } else {\n          _span.style.height = makeEm(_height2);\n          spans.push(_span);\n        }\n      }\n      return {\n        span: makeSpan([\"stretchy\"], spans, options),\n        minWidth: _minWidth,\n        height: _height2\n      };\n    }\n  } // buildSvgSpan_()\n  var {\n    span,\n    minWidth,\n    height\n  } = buildSvgSpan_();\n  // Note that we are returning span.depth = 0.\n  // Any adjustments relative to the baseline must be done in buildHTML.\n  span.height = height;\n  span.style.height = makeEm(height);\n  if (minWidth > 0) {\n    span.style.minWidth = makeEm(minWidth);\n  }\n  return span;\n};\nvar stretchyEnclose = function stretchyEnclose(inner, label, topPad, bottomPad, options) {\n  // Return an image span for \\cancel, \\bcancel, \\xcancel, \\fbox, or \\angl\n  var img;\n  var totalHeight = inner.height + inner.depth + topPad + bottomPad;\n  if (/fbox|color|angl/.test(label)) {\n    img = makeSpan([\"stretchy\", label], [], options);\n    if (label === \"fbox\") {\n      var color = options.color && options.getColor();\n      if (color) {\n        img.style.borderColor = color;\n      }\n    }\n  } else {\n    // \\cancel, \\bcancel, or \\xcancel\n    // Since \\cancel's SVG is inline and it omits the viewBox attribute,\n    // its stroke-width will not vary with span area.\n    var lines = [];\n    if (/^[bx]cancel$/.test(label)) {\n      lines.push(new LineNode({\n        \"x1\": \"0\",\n        \"y1\": \"0\",\n        \"x2\": \"100%\",\n        \"y2\": \"100%\",\n        \"stroke-width\": \"0.046em\"\n      }));\n    }\n    if (/^x?cancel$/.test(label)) {\n      lines.push(new LineNode({\n        \"x1\": \"0\",\n        \"y1\": \"100%\",\n        \"x2\": \"100%\",\n        \"y2\": \"0\",\n        \"stroke-width\": \"0.046em\"\n      }));\n    }\n    var svgNode = new SvgNode(lines, {\n      \"width\": \"100%\",\n      \"height\": makeEm(totalHeight)\n    });\n    img = makeSvgSpan([], [svgNode], options);\n  }\n  img.height = totalHeight;\n  img.style.height = makeEm(totalHeight);\n  return img;\n};\n\n/**\n * Asserts that the node is of the given type and returns it with stricter\n * typing. Throws if the node's type does not match.\n */\nfunction assertNodeType(node, type) {\n  if (!node || node.type !== type) {\n    throw new Error(\"Expected node of type \" + type + \", but got \" + (node ? \"node of type \" + node.type : String(node)));\n  }\n  return node;\n}\n/**\n * Returns the node more strictly typed iff it is of the given type. Otherwise,\n * returns null.\n */\nfunction assertSymbolNodeType(node) {\n  var typedNode = checkSymbolNodeType(node);\n  if (!typedNode) {\n    throw new Error(\"Expected node of symbol group type, but got \" + (node ? \"node of type \" + node.type : String(node)));\n  }\n  return typedNode;\n}\n/**\n * Returns the node more strictly typed iff it is of the given type. Otherwise,\n * returns null.\n */\nfunction checkSymbolNodeType(node) {\n  if (node && (node.type === \"atom\" || NON_ATOMS.hasOwnProperty(node.type))) {\n    return node;\n  }\n  return null;\n}\n\nvar getBaseSymbol = group => {\n  if (group instanceof SymbolNode) {\n    return group;\n  }\n  if (hasHtmlDomChildren(group) && group.children.length === 1) {\n    return getBaseSymbol(group.children[0]);\n  }\n};\n// NOTE: Unlike most `htmlBuilder`s, this one handles not only \"accent\", but\n// also \"supsub\" since an accent can affect super/subscripting.\nvar htmlBuilder$a = (grp, options) => {\n  // Accents are handled in the TeXbook pg. 443, rule 12.\n  var base;\n  var group;\n  var supSubGroup;\n  if (grp && grp.type === \"supsub\") {\n    // If our base is a character box, and we have superscripts and\n    // subscripts, the supsub will defer to us. In particular, we want\n    // to attach the superscripts and subscripts to the inner body (so\n    // that the position of the superscripts and subscripts won't be\n    // affected by the height of the accent). We accomplish this by\n    // sticking the base of the accent into the base of the supsub, and\n    // rendering that, while keeping track of where the accent is.\n    // The real accent group is the base of the supsub group\n    group = assertNodeType(grp.base, \"accent\");\n    // The character box is the base of the accent group\n    base = group.base;\n    // Stick the character box into the base of the supsub group\n    grp.base = base;\n    // Rerender the supsub group with its new base, and store that\n    // result.\n    supSubGroup = assertSpan(buildGroup$1(grp, options));\n    // reset original base\n    grp.base = group;\n  } else {\n    group = assertNodeType(grp, \"accent\");\n    base = group.base;\n  }\n  // Build the base group\n  var body = buildGroup$1(base, options.havingCrampedStyle());\n  // Does the accent need to shift for the skew of a character?\n  var mustShift = group.isShifty && isCharacterBox(base);\n  // Calculate the skew of the accent. This is based on the line \"If the\n  // nucleus is not a single character, let s = 0; otherwise set s to the\n  // kern amount for the nucleus followed by the \\skewchar of its font.\"\n  // Note that our skew metrics are just the kern between each character\n  // and the skewchar.\n  var skew = 0;\n  if (mustShift) {\n    var _getBaseSymbol$skew, _getBaseSymbol;\n    // Read the skew from the rendered base symbol.\n    // This preserves font metrics from font wrappers like \\mathbb.\n    skew = (_getBaseSymbol$skew = (_getBaseSymbol = getBaseSymbol(body)) == null ? void 0 : _getBaseSymbol.skew) != null ? _getBaseSymbol$skew : 0;\n  }\n  var accentBelow = group.label === \"\\\\c\";\n  // calculate the amount of space between the body and the accent\n  var clearance = accentBelow ? body.height + body.depth : Math.min(body.height, options.fontMetrics().xHeight);\n  // Build the accent\n  var accentBody;\n  if (!group.isStretchy) {\n    var accent;\n    var width;\n    if (group.label === \"\\\\vec\") {\n      // Before version 0.9, \\vec used the combining font glyph U+20D7.\n      // But browsers, especially Safari, are not consistent in how they\n      // render combining characters when not preceded by a character.\n      // So now we use an SVG.\n      // If Safari reforms, we should consider reverting to the glyph.\n      accent = staticSvg(\"vec\", options);\n      width = svgData.vec[1];\n    } else {\n      accent = makeOrd({\n        type: \"textord\",\n        mode: group.mode,\n        text: group.label\n      }, options, \"textord\");\n      accent = assertSymbolDomNode(accent);\n      // Remove the italic correction of the accent, because it only serves to\n      // shift the accent over to a place we don't want.\n      accent.italic = 0;\n      width = accent.width;\n      if (accentBelow) {\n        clearance += accent.depth;\n      }\n    }\n    accentBody = makeSpan([\"accent-body\"], [accent]);\n    // \"Full\" accents expand the width of the resulting symbol to be\n    // at least the width of the accent, and overlap directly onto the\n    // character without any vertical offset.\n    var accentFull = group.label === \"\\\\textcircled\";\n    if (accentFull) {\n      accentBody.classes.push('accent-full');\n      clearance = body.height;\n    }\n    // Shift the accent over by the skew.\n    var left = skew;\n    // CSS defines `.katex .accent .accent-body:not(.accent-full) { width: 0 }`\n    // so that the accent doesn't contribute to the bounding box.\n    // We need to shift the character by its width (effectively half\n    // its width) to compensate.\n    if (!accentFull) {\n      left -= width / 2;\n    }\n    accentBody.style.left = makeEm(left);\n    // \\textcircled uses the \\bigcirc glyph, so it needs some\n    // vertical adjustment to match LaTeX.\n    if (group.label === \"\\\\textcircled\") {\n      accentBody.style.top = \".2em\";\n    }\n    accentBody = makeVList({\n      positionType: \"firstBaseline\",\n      children: [{\n        type: \"elem\",\n        elem: body\n      }, {\n        type: \"kern\",\n        size: -clearance\n      }, {\n        type: \"elem\",\n        elem: accentBody\n      }]\n    });\n  } else {\n    accentBody = stretchySvg(group, options);\n    accentBody = makeVList({\n      positionType: \"firstBaseline\",\n      children: [{\n        type: \"elem\",\n        elem: body\n      }, {\n        type: \"elem\",\n        elem: accentBody,\n        wrapperClasses: [\"svg-align\"],\n        wrapperStyle: skew > 0 ? {\n          width: \"calc(100% - \" + makeEm(2 * skew) + \")\",\n          marginLeft: makeEm(2 * skew)\n        } : undefined\n      }]\n    });\n  }\n  var accentWrap = makeSpan([\"mord\", \"accent\"], [accentBody], options);\n  if (supSubGroup) {\n    // Here, we replace the \"base\" child of the supsub with our newly\n    // generated accent.\n    supSubGroup.children[0] = accentWrap;\n    // Since we don't rerun the height calculation after replacing the\n    // accent, we manually recalculate height.\n    supSubGroup.height = Math.max(accentWrap.height, supSubGroup.height);\n    // Accents should always be ords, even when their innards are not.\n    supSubGroup.classes[0] = \"mord\";\n    return supSubGroup;\n  } else {\n    return accentWrap;\n  }\n};\nvar mathmlBuilder$9 = (group, options) => {\n  var accentNode = group.isStretchy ? stretchyMathML(group.label) : new MathNode(\"mo\", [makeText(group.label, group.mode)]);\n  var node = new MathNode(\"mover\", [buildGroup(group.base, options), accentNode]);\n  node.setAttribute(\"accent\", \"true\");\n  return node;\n};\nvar NON_STRETCHY_ACCENT_REGEX = new RegExp([\"\\\\acute\", \"\\\\grave\", \"\\\\ddot\", \"\\\\tilde\", \"\\\\bar\", \"\\\\breve\", \"\\\\check\", \"\\\\hat\", \"\\\\vec\", \"\\\\dot\", \"\\\\mathring\"].map(accent => \"\\\\\" + accent).join(\"|\"));\n// Accents\ndefineFunction({\n  type: \"accent\",\n  names: [\"\\\\acute\", \"\\\\grave\", \"\\\\ddot\", \"\\\\tilde\", \"\\\\bar\", \"\\\\breve\", \"\\\\check\", \"\\\\hat\", \"\\\\vec\", \"\\\\dot\", \"\\\\mathring\", \"\\\\widecheck\", \"\\\\widehat\", \"\\\\widetilde\", \"\\\\overrightarrow\", \"\\\\overleftarrow\", \"\\\\Overrightarrow\", \"\\\\overleftrightarrow\", \"\\\\overgroup\", \"\\\\overlinesegment\", \"\\\\overleftharpoon\", \"\\\\overrightharpoon\"],\n  props: {\n    numArgs: 1\n  },\n  handler: (context, args) => {\n    var base = normalizeArgument(args[0]);\n    var isStretchy = !NON_STRETCHY_ACCENT_REGEX.test(context.funcName);\n    var isShifty = !isStretchy || context.funcName === \"\\\\widehat\" || context.funcName === \"\\\\widetilde\" || context.funcName === \"\\\\widecheck\";\n    return {\n      type: \"accent\",\n      mode: context.parser.mode,\n      label: context.funcName,\n      isStretchy: isStretchy,\n      isShifty: isShifty,\n      base: base\n    };\n  },\n  htmlBuilder: htmlBuilder$a,\n  mathmlBuilder: mathmlBuilder$9\n});\n// Text-mode accents\ndefineFunction({\n  type: \"accent\",\n  names: [\"\\\\'\", \"\\\\`\", \"\\\\^\", \"\\\\~\", \"\\\\=\", \"\\\\u\", \"\\\\.\", '\\\\\"', \"\\\\c\", \"\\\\r\", \"\\\\H\", \"\\\\v\", \"\\\\textcircled\"],\n  props: {\n    numArgs: 1,\n    allowedInText: true,\n    allowedInMath: true,\n    // unless in strict mode\n    argTypes: [\"primitive\"]\n  },\n  handler: (context, args) => {\n    var base = args[0];\n    var mode = context.parser.mode;\n    if (mode === \"math\") {\n      context.parser.settings.reportNonstrict(\"mathVsTextAccents\", \"LaTeX's accent \" + context.funcName + \" works only in text mode\");\n      mode = \"text\";\n    }\n    return {\n      type: \"accent\",\n      mode: mode,\n      label: context.funcName,\n      isStretchy: false,\n      isShifty: true,\n      base: base\n    };\n  },\n  htmlBuilder: htmlBuilder$a,\n  mathmlBuilder: mathmlBuilder$9\n});\n\n// Horizontal overlap functions\ndefineFunction({\n  type: \"accentUnder\",\n  names: [\"\\\\underleftarrow\", \"\\\\underrightarrow\", \"\\\\underleftrightarrow\", \"\\\\undergroup\", \"\\\\underlinesegment\", \"\\\\utilde\"],\n  props: {\n    numArgs: 1\n  },\n  handler: (_ref, args) => {\n    var {\n      parser,\n      funcName\n    } = _ref;\n    var base = args[0];\n    return {\n      type: \"accentUnder\",\n      mode: parser.mode,\n      label: funcName,\n      base: base\n    };\n  },\n  htmlBuilder: (group, options) => {\n    // Treat under accents much like underlines.\n    var innerGroup = buildGroup$1(group.base, options);\n    var accentBody = stretchySvg(group, options);\n    var kern = group.label === \"\\\\utilde\" ? 0.12 : 0;\n    // Generate the vlist, with the appropriate kerns\n    var vlist = makeVList({\n      positionType: \"top\",\n      positionData: innerGroup.height,\n      children: [{\n        type: \"elem\",\n        elem: accentBody,\n        wrapperClasses: [\"svg-align\"]\n      }, {\n        type: \"kern\",\n        size: kern\n      }, {\n        type: \"elem\",\n        elem: innerGroup\n      }]\n    });\n    return makeSpan([\"mord\", \"accentunder\"], [vlist], options);\n  },\n  mathmlBuilder: (group, options) => {\n    var accentNode = stretchyMathML(group.label);\n    var node = new MathNode(\"munder\", [buildGroup(group.base, options), accentNode]);\n    node.setAttribute(\"accentunder\", \"true\");\n    return node;\n  }\n});\n\n// Helper function\nvar paddedNode = group => {\n  var node = new MathNode(\"mpadded\", group ? [group] : []);\n  node.setAttribute(\"width\", \"+0.6em\");\n  node.setAttribute(\"lspace\", \"0.3em\");\n  return node;\n};\n// Stretchy arrows with an optional argument\ndefineFunction({\n  type: \"xArrow\",\n  names: [\"\\\\xleftarrow\", \"\\\\xrightarrow\", \"\\\\xLeftarrow\", \"\\\\xRightarrow\", \"\\\\xleftrightarrow\", \"\\\\xLeftrightarrow\", \"\\\\xhookleftarrow\", \"\\\\xhookrightarrow\", \"\\\\xmapsto\", \"\\\\xrightharpoondown\", \"\\\\xrightharpoonup\", \"\\\\xleftharpoondown\", \"\\\\xleftharpoonup\", \"\\\\xrightleftharpoons\", \"\\\\xleftrightharpoons\", \"\\\\xlongequal\", \"\\\\xtwoheadrightarrow\", \"\\\\xtwoheadleftarrow\", \"\\\\xtofrom\",\n  // The next 3 functions are here to support the mhchem extension.\n  // Direct use of these functions is discouraged and may break someday.\n  \"\\\\xrightleftarrows\", \"\\\\xrightequilibrium\", \"\\\\xleftequilibrium\",\n  // The next 3 functions are here only to support the {CD} environment.\n  \"\\\\\\\\cdrightarrow\", \"\\\\\\\\cdleftarrow\", \"\\\\\\\\cdlongequal\"],\n  props: {\n    numArgs: 1,\n    numOptionalArgs: 1\n  },\n  handler(_ref, args, optArgs) {\n    var {\n      parser,\n      funcName\n    } = _ref;\n    return {\n      type: \"xArrow\",\n      mode: parser.mode,\n      label: funcName,\n      body: args[0],\n      below: optArgs[0]\n    };\n  },\n  htmlBuilder(group, options) {\n    var style = options.style;\n    // Build the argument groups in the appropriate style.\n    // Ref: amsmath.dtx:   \\hbox{$\\scriptstyle\\mkern#3mu{#6}\\mkern#4mu$}%\n    // Some groups can return document fragments.  Handle those by wrapping\n    // them in a span.\n    var newOptions = options.havingStyle(style.sup());\n    var upperGroup = wrapFragment(buildGroup$1(group.body, newOptions, options), options);\n    var arrowPrefix = group.label.slice(0, 2) === \"\\\\x\" ? \"x\" : \"cd\";\n    upperGroup.classes.push(arrowPrefix + \"-arrow-pad\");\n    var lowerGroup;\n    if (group.below) {\n      // Build the lower group\n      newOptions = options.havingStyle(style.sub());\n      lowerGroup = wrapFragment(buildGroup$1(group.below, newOptions, options), options);\n      lowerGroup.classes.push(arrowPrefix + \"-arrow-pad\");\n    }\n    var arrowBody = stretchySvg(group, options);\n    // Re shift: Note that stretchySvg returned arrowBody.depth = 0.\n    // The point we want on the math axis is at 0.5 * arrowBody.height.\n    var arrowShift = -options.fontMetrics().axisHeight + 0.5 * arrowBody.height;\n    // 2 mu kern. Ref: amsmath.dtx: #7\\if0#2\\else\\mkern#2mu\\fi\n    var upperShift = -options.fontMetrics().axisHeight - 0.5 * arrowBody.height - 0.111; // 0.111 em = 2 mu\n    if (upperGroup.depth > 0.25 || group.label === \"\\\\xleftequilibrium\") {\n      upperShift -= upperGroup.depth; // shift up if depth encroaches\n    }\n    // Generate the vlist\n    var vlist;\n    if (lowerGroup) {\n      var lowerShift = -options.fontMetrics().axisHeight + lowerGroup.height + 0.5 * arrowBody.height + 0.111;\n      vlist = makeVList({\n        positionType: \"individualShift\",\n        children: [{\n          type: \"elem\",\n          elem: upperGroup,\n          shift: upperShift\n        }, {\n          type: \"elem\",\n          elem: arrowBody,\n          shift: arrowShift\n        }, {\n          type: \"elem\",\n          elem: lowerGroup,\n          shift: lowerShift\n        }]\n      });\n    } else {\n      vlist = makeVList({\n        positionType: \"individualShift\",\n        children: [{\n          type: \"elem\",\n          elem: upperGroup,\n          shift: upperShift\n        }, {\n          type: \"elem\",\n          elem: arrowBody,\n          shift: arrowShift\n        }]\n      });\n    }\n    // TODO(ts): Replace this with passing \"svg-align\" into makeVList.\n    vlist.children[0].children[0].children[1].classes.push(\"svg-align\");\n    return makeSpan([\"mrel\", \"x-arrow\"], [vlist], options);\n  },\n  mathmlBuilder(group, options) {\n    var arrowNode = stretchyMathML(group.label);\n    arrowNode.setAttribute(\"minsize\", group.label.charAt(0) === \"x\" ? \"1.75em\" : \"3.0em\");\n    var node;\n    if (group.body) {\n      var upperNode = paddedNode(buildGroup(group.body, options));\n      if (group.below) {\n        var lowerNode = paddedNode(buildGroup(group.below, options));\n        node = new MathNode(\"munderover\", [arrowNode, lowerNode, upperNode]);\n      } else {\n        node = new MathNode(\"mover\", [arrowNode, upperNode]);\n      }\n    } else if (group.below) {\n      var _lowerNode = paddedNode(buildGroup(group.below, options));\n      node = new MathNode(\"munder\", [arrowNode, _lowerNode]);\n    } else {\n      // This should never happen.\n      // Parser.js throws an error if there is no argument.\n      node = paddedNode();\n      node = new MathNode(\"mover\", [arrowNode, node]);\n    }\n    return node;\n  }\n});\n\nfunction htmlBuilder$9(group, options) {\n  var elements = buildExpression$1(group.body, options, true);\n  return makeSpan([group.mclass], elements, options);\n}\nfunction mathmlBuilder$8(group, options) {\n  var node;\n  var inner = buildExpression(group.body, options);\n  if (group.mclass === \"minner\") {\n    node = new MathNode(\"mpadded\", inner);\n  } else if (group.mclass === \"mord\") {\n    if (group.isCharacterBox) {\n      node = inner[0];\n      node.type = \"mi\";\n    } else {\n      node = new MathNode(\"mi\", inner);\n    }\n  } else {\n    if (group.isCharacterBox) {\n      node = inner[0];\n      node.type = \"mo\";\n    } else {\n      node = new MathNode(\"mo\", inner);\n    }\n    // Set spacing based on what is the most likely adjacent atom type.\n    // See TeXbook p170.\n    if (group.mclass === \"mbin\") {\n      node.attributes.lspace = \"0.22em\"; // medium space\n      node.attributes.rspace = \"0.22em\";\n    } else if (group.mclass === \"mpunct\") {\n      node.attributes.lspace = \"0em\";\n      node.attributes.rspace = \"0.17em\"; // thinspace\n    } else if (group.mclass === \"mopen\" || group.mclass === \"mclose\") {\n      node.attributes.lspace = \"0em\";\n      node.attributes.rspace = \"0em\";\n    } else if (group.mclass === \"minner\") {\n      node.attributes.lspace = \"0.0556em\"; // 1 mu is the most likely option\n      node.attributes.width = \"+0.1111em\";\n    }\n    // MathML <mo> default space is 5/18 em, so <mrel> needs no action.\n    // Ref: https://developer.mozilla.org/en-US/docs/Web/MathML/Element/mo\n  }\n  return node;\n}\n// Math class commands except \\mathop\ndefineFunction({\n  type: \"mclass\",\n  names: [\"\\\\mathord\", \"\\\\mathbin\", \"\\\\mathrel\", \"\\\\mathopen\", \"\\\\mathclose\", \"\\\\mathpunct\", \"\\\\mathinner\"],\n  props: {\n    numArgs: 1,\n    primitive: true\n  },\n  handler(_ref, args) {\n    var {\n      parser,\n      funcName\n    } = _ref;\n    var body = args[0];\n    return {\n      type: \"mclass\",\n      mode: parser.mode,\n      mclass: \"m\" + funcName.slice(5),\n      // TODO(kevinb): don't prefix with 'm'\n      body: ordargument(body),\n      isCharacterBox: isCharacterBox(body)\n    };\n  },\n  htmlBuilder: htmlBuilder$9,\n  mathmlBuilder: mathmlBuilder$8\n});\nvar binrelClass = arg => {\n  // \\binrel@ spacing varies with (bin|rel|ord) of the atom in the argument.\n  // (by rendering separately and with {}s before and after, and measuring\n  // the change in spacing).  We'll do roughly the same by detecting the\n  // atom type directly.\n  var atom = arg.type === \"ordgroup\" && arg.body.length ? arg.body[0] : arg;\n  if (atom.type === \"atom\" && (atom.family === \"bin\" || atom.family === \"rel\")) {\n    return \"m\" + atom.family;\n  } else {\n    return \"mord\";\n  }\n};\n// \\@binrel{x}{y} renders like y but as mbin/mrel/mord if x is mbin/mrel/mord.\n// This is equivalent to \\binrel@{x}\\binrel@@{y} in AMSTeX.\ndefineFunction({\n  type: \"mclass\",\n  names: [\"\\\\@binrel\"],\n  props: {\n    numArgs: 2\n  },\n  handler(_ref2, args) {\n    var {\n      parser\n    } = _ref2;\n    return {\n      type: \"mclass\",\n      mode: parser.mode,\n      mclass: binrelClass(args[0]),\n      body: ordargument(args[1]),\n      isCharacterBox: isCharacterBox(args[1])\n    };\n  }\n});\n// Build a relation or stacked op by placing one symbol on top of another\ndefineFunction({\n  type: \"mclass\",\n  names: [\"\\\\stackrel\", \"\\\\overset\", \"\\\\underset\"],\n  props: {\n    numArgs: 2\n  },\n  handler(_ref3, args) {\n    var {\n      parser,\n      funcName\n    } = _ref3;\n    var baseArg = args[1];\n    var shiftedArg = args[0];\n    var mclass;\n    if (funcName !== \"\\\\stackrel\") {\n      // LaTeX applies \\binrel spacing to \\overset and \\underset.\n      mclass = binrelClass(baseArg);\n    } else {\n      mclass = \"mrel\"; // for \\stackrel\n    }\n    var baseOp = {\n      type: \"op\",\n      mode: baseArg.mode,\n      limits: true,\n      alwaysHandleSupSub: true,\n      parentIsSupSub: false,\n      symbol: false,\n      suppressBaseShift: funcName !== \"\\\\stackrel\",\n      body: ordargument(baseArg)\n    };\n    var supsub = {\n      type: \"supsub\",\n      mode: shiftedArg.mode,\n      base: baseOp,\n      sup: funcName === \"\\\\underset\" ? null : shiftedArg,\n      sub: funcName === \"\\\\underset\" ? shiftedArg : null\n    };\n    return {\n      type: \"mclass\",\n      mode: parser.mode,\n      mclass,\n      body: [supsub],\n      isCharacterBox: isCharacterBox(supsub)\n    };\n  },\n  htmlBuilder: htmlBuilder$9,\n  mathmlBuilder: mathmlBuilder$8\n});\n\n// \\pmb is a simulation of bold font.\n// The version of \\pmb in ambsy.sty works by typesetting three copies\n// with small offsets. We use CSS text-shadow.\n// It's a hack. Not as good as a real bold font. Better than nothing.\ndefineFunction({\n  type: \"pmb\",\n  names: [\"\\\\pmb\"],\n  props: {\n    numArgs: 1,\n    allowedInText: true\n  },\n  handler(_ref, args) {\n    var {\n      parser\n    } = _ref;\n    return {\n      type: \"pmb\",\n      mode: parser.mode,\n      mclass: binrelClass(args[0]),\n      body: ordargument(args[0])\n    };\n  },\n  htmlBuilder(group, options) {\n    var elements = buildExpression$1(group.body, options, true);\n    var node = makeSpan([group.mclass], elements, options);\n    node.style.textShadow = \"0.02em 0.01em 0.04px\";\n    return node;\n  },\n  mathmlBuilder(group, style) {\n    var inner = buildExpression(group.body, style);\n    // Wrap with an <mstyle> element.\n    var node = new MathNode(\"mstyle\", inner);\n    node.setAttribute(\"style\", \"text-shadow: 0.02em 0.01em 0.04px\");\n    return node;\n  }\n});\n\nvar cdArrowFunctionName = {\n  \">\": \"\\\\\\\\cdrightarrow\",\n  \"<\": \"\\\\\\\\cdleftarrow\",\n  \"=\": \"\\\\\\\\cdlongequal\",\n  \"A\": \"\\\\uparrow\",\n  \"V\": \"\\\\downarrow\",\n  \"|\": \"\\\\Vert\",\n  \".\": \"no arrow\"\n};\nvar newCell = () => {\n  // Create an empty cell, to be filled below with parse nodes.\n  // The parseTree from this module must be constructed like the\n  // one created by parseArray(), so an empty CD cell must\n  // be a ParseNode<\"styling\">. And CD is always displaystyle.\n  return {\n    type: \"styling\",\n    body: [],\n    mode: \"math\",\n    style: \"display\"\n  };\n};\nvar isStartOfArrow = node => {\n  return node.type === \"textord\" && node.text === \"@\";\n};\nvar isLabelEnd = (node, endChar) => {\n  return (node.type === \"mathord\" || node.type === \"atom\") && node.text === endChar;\n};\nfunction cdArrow(arrowChar, labels, parser) {\n  // Return a parse tree of an arrow and its labels.\n  // This acts in a way similar to a macro expansion.\n  var funcName = cdArrowFunctionName[arrowChar];\n  switch (funcName) {\n    case \"\\\\\\\\cdrightarrow\":\n    case \"\\\\\\\\cdleftarrow\":\n      return parser.callFunction(funcName, [labels[0]], [labels[1]]);\n    case \"\\\\uparrow\":\n    case \"\\\\downarrow\":\n      {\n        var leftLabel = parser.callFunction(\"\\\\\\\\cdleft\", [labels[0]], []);\n        var bareArrow = {\n          type: \"atom\",\n          text: funcName,\n          mode: \"math\",\n          family: \"rel\"\n        };\n        var sizedArrow = parser.callFunction(\"\\\\Big\", [bareArrow], []);\n        var rightLabel = parser.callFunction(\"\\\\\\\\cdright\", [labels[1]], []);\n        var arrowGroup = {\n          type: \"ordgroup\",\n          mode: \"math\",\n          body: [leftLabel, sizedArrow, rightLabel]\n        };\n        return parser.callFunction(\"\\\\\\\\cdparent\", [arrowGroup], []);\n      }\n    case \"\\\\\\\\cdlongequal\":\n      return parser.callFunction(\"\\\\\\\\cdlongequal\", [], []);\n    case \"\\\\Vert\":\n      {\n        var arrow = {\n          type: \"textord\",\n          text: \"\\\\Vert\",\n          mode: \"math\"\n        };\n        return parser.callFunction(\"\\\\Big\", [arrow], []);\n      }\n    default:\n      return {\n        type: \"textord\",\n        text: \" \",\n        mode: \"math\"\n      };\n  }\n}\nfunction parseCD(parser) {\n  // Get the array's parse nodes with \\\\ temporarily mapped to \\cr.\n  var parsedRows = [];\n  parser.gullet.beginGroup();\n  parser.gullet.macros.set(\"\\\\cr\", \"\\\\\\\\\\\\relax\");\n  parser.gullet.beginGroup();\n  while (true) {\n    // eslint-disable-line no-constant-condition\n    // Get the parse nodes for the next row.\n    parsedRows.push(parser.parseExpression(false, \"\\\\\\\\\"));\n    parser.gullet.endGroup();\n    parser.gullet.beginGroup();\n    var next = parser.fetch().text;\n    if (next === \"&\" || next === \"\\\\\\\\\") {\n      parser.consume();\n    } else if (next === \"\\\\end\") {\n      if (parsedRows[parsedRows.length - 1].length === 0) {\n        parsedRows.pop(); // final row ended in \\\\\n      }\n      break;\n    } else {\n      throw new ParseError(\"Expected \\\\\\\\ or \\\\cr or \\\\end\", parser.nextToken);\n    }\n  }\n  var row = [];\n  var body = [row];\n  // Loop thru the parse nodes. Collect them into cells and arrows.\n  for (var i = 0; i < parsedRows.length; i++) {\n    // Start a new row.\n    var rowNodes = parsedRows[i];\n    // Create the first cell.\n    var cell = newCell();\n    for (var j = 0; j < rowNodes.length; j++) {\n      if (!isStartOfArrow(rowNodes[j])) {\n        // If a parseNode is not an arrow, it goes into a cell.\n        cell.body.push(rowNodes[j]);\n      } else {\n        // Parse node j is an \"@\", the start of an arrow.\n        // Before starting on the arrow, push the cell into `row`.\n        row.push(cell);\n        // Now collect parseNodes into an arrow.\n        // The character after \"@\" defines the arrow type.\n        j += 1;\n        var arrowChar = assertSymbolNodeType(rowNodes[j]).text;\n        // Create two empty label nodes. We may or may not use them.\n        var labels = new Array(2);\n        labels[0] = {\n          type: \"ordgroup\",\n          mode: \"math\",\n          body: []\n        };\n        labels[1] = {\n          type: \"ordgroup\",\n          mode: \"math\",\n          body: []\n        };\n        // Process the arrow.\n        if (\"=|.\".includes(arrowChar)) ; else if (\"<>AV\".includes(arrowChar)) {\n          // Four arrows, `@>>>`, `@<<<`, `@AAA`, and `@VVV`, each take\n          // two optional labels. E.g. the right-point arrow syntax is\n          // really:  @>{optional label}>{optional label}>\n          // Collect parseNodes into labels.\n          for (var labelNum = 0; labelNum < 2; labelNum++) {\n            var inLabel = true;\n            for (var k = j + 1; k < rowNodes.length; k++) {\n              if (isLabelEnd(rowNodes[k], arrowChar)) {\n                inLabel = false;\n                j = k;\n                break;\n              }\n              if (isStartOfArrow(rowNodes[k])) {\n                throw new ParseError(\"Missing a \" + arrowChar + \" character to complete a CD arrow.\", rowNodes[k]);\n              }\n              labels[labelNum].body.push(rowNodes[k]);\n            }\n            if (inLabel) {\n              // isLabelEnd never returned a true.\n              throw new ParseError(\"Missing a \" + arrowChar + \" character to complete a CD arrow.\", rowNodes[j]);\n            }\n          }\n        } else {\n          throw new ParseError(\"Expected one of \\\"<>AV=|.\\\" after @\", rowNodes[j]);\n        }\n        // Now join the arrow to its labels.\n        var arrow = cdArrow(arrowChar, labels, parser);\n        // Wrap the arrow in  ParseNode<\"styling\">.\n        // This is done to match parseArray() behavior.\n        var wrappedArrow = {\n          type: \"styling\",\n          body: [arrow],\n          mode: \"math\",\n          style: \"display\" // CD is always displaystyle.\n        };\n        row.push(wrappedArrow);\n        // In CD's syntax, cells are implicit. That is, everything that\n        // is not an arrow gets collected into a cell. So create an empty\n        // cell now. It will collect upcoming parseNodes.\n        cell = newCell();\n      }\n    }\n    if (i % 2 === 0) {\n      // Even-numbered rows consist of: cell, arrow, cell, arrow, ... cell\n      // The last cell is not yet pushed into `row`, so:\n      row.push(cell);\n    } else {\n      // Odd-numbered rows consist of: vert arrow, empty cell, ... vert arrow\n      // Remove the empty cell that was placed at the beginning of `row`.\n      row.shift();\n    }\n    row = [];\n    body.push(row);\n  }\n  // End row group\n  parser.gullet.endGroup();\n  // End array group defining \\\\\n  parser.gullet.endGroup();\n  // define column separation.\n  var cols = new Array(body[0].length).fill({\n    type: \"align\",\n    align: \"c\",\n    pregap: 0.25,\n    // CD package sets \\enskip between columns.\n    postgap: 0.25 // So pre and post each get half an \\enskip, i.e. 0.25em.\n  });\n  return {\n    type: \"array\",\n    mode: \"math\",\n    body,\n    arraystretch: 1,\n    addJot: true,\n    rowGaps: [null],\n    cols,\n    colSeparationType: \"CD\",\n    hLinesBeforeRow: new Array(body.length + 1).fill([])\n  };\n}\n// The functions below are not available for general use.\n// They are here only for internal use by the {CD} environment in placing labels\n// next to vertical arrows.\n// We don't need any such functions for horizontal arrows because we can reuse\n// the functionality that already exists for extensible arrows.\ndefineFunction({\n  type: \"cdlabel\",\n  names: [\"\\\\\\\\cdleft\", \"\\\\\\\\cdright\"],\n  props: {\n    numArgs: 1\n  },\n  handler(_ref, args) {\n    var {\n      parser,\n      funcName\n    } = _ref;\n    return {\n      type: \"cdlabel\",\n      mode: parser.mode,\n      side: funcName.slice(4),\n      label: args[0]\n    };\n  },\n  htmlBuilder(group, options) {\n    var newOptions = options.havingStyle(options.style.sup());\n    var label = wrapFragment(buildGroup$1(group.label, newOptions, options), options);\n    label.classes.push(\"cd-label-\" + group.side);\n    label.style.bottom = makeEm(0.8 - label.depth);\n    // Zero out label height & depth, so vertical align of arrow is set\n    // by the arrow height, not by the label.\n    label.height = 0;\n    label.depth = 0;\n    return label;\n  },\n  mathmlBuilder(group, options) {\n    var label = new MathNode(\"mrow\", [buildGroup(group.label, options)]);\n    label = new MathNode(\"mpadded\", [label]);\n    label.setAttribute(\"width\", \"0\");\n    if (group.side === \"left\") {\n      label.setAttribute(\"lspace\", \"-1width\");\n    }\n    // We have to guess at vertical alignment. We know the arrow is 1.8em tall,\n    // But we don't know the height or depth of the label.\n    label.setAttribute(\"voffset\", \"0.7em\");\n    label = new MathNode(\"mstyle\", [label]);\n    label.setAttribute(\"displaystyle\", \"false\");\n    label.setAttribute(\"scriptlevel\", \"1\");\n    return label;\n  }\n});\ndefineFunction({\n  type: \"cdlabelparent\",\n  names: [\"\\\\\\\\cdparent\"],\n  props: {\n    numArgs: 1\n  },\n  handler(_ref2, args) {\n    var {\n      parser\n    } = _ref2;\n    return {\n      type: \"cdlabelparent\",\n      mode: parser.mode,\n      fragment: args[0]\n    };\n  },\n  htmlBuilder(group, options) {\n    // Wrap the vertical arrow and its labels.\n    // The parent gets position: relative. The child gets position: absolute.\n    // So CSS can locate the label correctly.\n    var parent = wrapFragment(buildGroup$1(group.fragment, options), options);\n    parent.classes.push(\"cd-vert-arrow\");\n    return parent;\n  },\n  mathmlBuilder(group, options) {\n    return new MathNode(\"mrow\", [buildGroup(group.fragment, options)]);\n  }\n});\n\n// \\@char is an internal function that takes a grouped decimal argument like\n// {123} and converts into symbol with code 123.  It is used by the *macro*\n// \\char defined in macros.js.\ndefineFunction({\n  type: \"textord\",\n  names: [\"\\\\@char\"],\n  props: {\n    numArgs: 1,\n    allowedInText: true\n  },\n  handler(_ref, args) {\n    var {\n      parser\n    } = _ref;\n    var arg = assertNodeType(args[0], \"ordgroup\");\n    var group = arg.body;\n    var number = \"\";\n    for (var i = 0; i < group.length; i++) {\n      var node = assertNodeType(group[i], \"textord\");\n      number += node.text;\n    }\n    var code = parseInt(number);\n    var text;\n    if (isNaN(code)) {\n      throw new ParseError(\"\\\\@char has non-numeric argument \" + number);\n      // If we drop IE support, the following code could be replaced with\n      // text = String.fromCodePoint(code)\n    } else if (code < 0 || code >= 0x10ffff) {\n      throw new ParseError(\"\\\\@char with invalid code point \" + number);\n    } else if (code <= 0xffff) {\n      text = String.fromCharCode(code);\n    } else {\n      // Astral code point; split into surrogate halves\n      code -= 0x10000;\n      text = String.fromCharCode((code >> 10) + 0xd800, (code & 0x3ff) + 0xdc00);\n    }\n    return {\n      type: \"textord\",\n      mode: parser.mode,\n      text: text\n    };\n  }\n});\n\nvar htmlBuilder$8 = (group, options) => {\n  var elements = buildExpression$1(group.body, options.withColor(group.color), false);\n  // \\color isn't supposed to affect the type of the elements it contains.\n  // To accomplish this, we wrap the results in a fragment, so the inner\n  // elements will be able to directly interact with their neighbors. For\n  // example, `\\color{red}{2 +} 3` has the same spacing as `2 + 3`\n  return makeFragment(elements);\n};\nvar mathmlBuilder$7 = (group, options) => {\n  var inner = buildExpression(group.body, options.withColor(group.color));\n  var node = new MathNode(\"mstyle\", inner);\n  node.setAttribute(\"mathcolor\", group.color);\n  return node;\n};\ndefineFunction({\n  type: \"color\",\n  names: [\"\\\\textcolor\"],\n  props: {\n    numArgs: 2,\n    allowedInText: true,\n    argTypes: [\"color\", \"original\"]\n  },\n  handler(_ref, args) {\n    var {\n      parser\n    } = _ref;\n    var color = assertNodeType(args[0], \"color-token\").color;\n    var body = args[1];\n    return {\n      type: \"color\",\n      mode: parser.mode,\n      color,\n      body: ordargument(body)\n    };\n  },\n  htmlBuilder: htmlBuilder$8,\n  mathmlBuilder: mathmlBuilder$7\n});\ndefineFunction({\n  type: \"color\",\n  names: [\"\\\\color\"],\n  props: {\n    numArgs: 1,\n    allowedInText: true,\n    argTypes: [\"color\"]\n  },\n  handler(_ref2, args) {\n    var {\n      parser,\n      breakOnTokenText\n    } = _ref2;\n    var color = assertNodeType(args[0], \"color-token\").color;\n    // Set macro \\current@color in current namespace to store the current\n    // color, mimicking the behavior of color.sty.\n    // This is currently used just to correctly color a \\right\n    // that follows a \\color command.\n    parser.gullet.macros.set(\"\\\\current@color\", color);\n    // Parse out the implicit body that should be colored.\n    var body = parser.parseExpression(true, breakOnTokenText);\n    return {\n      type: \"color\",\n      mode: parser.mode,\n      color,\n      body\n    };\n  },\n  htmlBuilder: htmlBuilder$8,\n  mathmlBuilder: mathmlBuilder$7\n});\n\n// Row breaks within tabular environments, and line breaks at top level\n// \\DeclareRobustCommand\\\\{...\\@xnewline}\ndefineFunction({\n  type: \"cr\",\n  names: [\"\\\\\\\\\"],\n  props: {\n    numArgs: 0,\n    numOptionalArgs: 0,\n    allowedInText: true\n  },\n  handler(_ref, args, optArgs) {\n    var {\n      parser\n    } = _ref;\n    var size = parser.gullet.future().text === \"[\" ? parser.parseSizeGroup(true) : null;\n    var newLine = !parser.settings.displayMode || !parser.settings.useStrictBehavior(\"newLineInDisplayMode\", \"In LaTeX, \\\\\\\\ or \\\\newline \" + \"does nothing in display mode\");\n    return {\n      type: \"cr\",\n      mode: parser.mode,\n      newLine,\n      size: size && assertNodeType(size, \"size\").value\n    };\n  },\n  // The following builders are called only at the top level,\n  // not within tabular/array environments.\n  htmlBuilder(group, options) {\n    var span = makeSpan([\"mspace\"], [], options);\n    if (group.newLine) {\n      span.classes.push(\"newline\");\n      if (group.size) {\n        span.style.marginTop = makeEm(calculateSize(group.size, options));\n      }\n    }\n    return span;\n  },\n  mathmlBuilder(group, options) {\n    var node = new MathNode(\"mspace\");\n    if (group.newLine) {\n      node.setAttribute(\"linebreak\", \"newline\");\n      if (group.size) {\n        node.setAttribute(\"height\", makeEm(calculateSize(group.size, options)));\n      }\n    }\n    return node;\n  }\n});\n\nvar globalMap = {\n  \"\\\\global\": \"\\\\global\",\n  \"\\\\long\": \"\\\\\\\\globallong\",\n  \"\\\\\\\\globallong\": \"\\\\\\\\globallong\",\n  \"\\\\def\": \"\\\\gdef\",\n  \"\\\\gdef\": \"\\\\gdef\",\n  \"\\\\edef\": \"\\\\xdef\",\n  \"\\\\xdef\": \"\\\\xdef\",\n  \"\\\\let\": \"\\\\\\\\globallet\",\n  \"\\\\futurelet\": \"\\\\\\\\globalfuture\"\n};\nvar checkControlSequence = tok => {\n  var name = tok.text;\n  if (/^(?:[\\\\{}$&#^_]|EOF)$/.test(name)) {\n    throw new ParseError(\"Expected a control sequence\", tok);\n  }\n  return name;\n};\nvar getRHS = parser => {\n  var tok = parser.gullet.popToken();\n  if (tok.text === \"=\") {\n    // consume optional equals\n    tok = parser.gullet.popToken();\n    if (tok.text === \" \") {\n      // consume one optional space\n      tok = parser.gullet.popToken();\n    }\n  }\n  return tok;\n};\nvar letCommand = (parser, name, tok, global) => {\n  var macro = parser.gullet.macros.get(tok.text);\n  if (macro == null) {\n    // don't expand it later even if a macro with the same name is defined\n    // e.g., \\let\\foo=\\frac \\def\\frac{\\relax} \\frac12\n    tok.noexpand = true;\n    macro = {\n      tokens: [tok],\n      numArgs: 0,\n      // reproduce the same behavior in expansion\n      unexpandable: !parser.gullet.isExpandable(tok.text)\n    };\n  }\n  parser.gullet.macros.set(name, macro, global);\n};\n// <assignment> -> <non-macro assignment>|<macro assignment>\n// <non-macro assignment> -> <simple assignment>|\\global<non-macro assignment>\n// <macro assignment> -> <definition>|<prefix><macro assignment>\n// <prefix> -> \\global|\\long|\\outer\ndefineFunction({\n  type: \"internal\",\n  names: [\"\\\\global\", \"\\\\long\", \"\\\\\\\\globallong\" // can’t be entered directly\n  ],\n  props: {\n    numArgs: 0,\n    allowedInText: true\n  },\n  handler(_ref) {\n    var {\n      parser,\n      funcName\n    } = _ref;\n    parser.consumeSpaces();\n    var token = parser.fetch();\n    if (globalMap[token.text]) {\n      // KaTeX doesn't have \\par, so ignore \\long\n      if (funcName === \"\\\\global\" || funcName === \"\\\\\\\\globallong\") {\n        token.text = globalMap[token.text];\n      }\n      return assertNodeType(parser.parseFunction(), \"internal\");\n    }\n    throw new ParseError(\"Invalid token after macro prefix\", token);\n  }\n});\n// Basic support for macro definitions: \\def, \\gdef, \\edef, \\xdef\n// <definition> -> <def><control sequence><definition text>\n// <def> -> \\def|\\gdef|\\edef|\\xdef\n// <definition text> -> <parameter text><left brace><balanced text><right brace>\ndefineFunction({\n  type: \"internal\",\n  names: [\"\\\\def\", \"\\\\gdef\", \"\\\\edef\", \"\\\\xdef\"],\n  props: {\n    numArgs: 0,\n    allowedInText: true,\n    primitive: true\n  },\n  handler(_ref2) {\n    var {\n      parser,\n      funcName\n    } = _ref2;\n    var tok = parser.gullet.popToken();\n    var name = tok.text;\n    if (/^(?:[\\\\{}$&#^_]|EOF)$/.test(name)) {\n      throw new ParseError(\"Expected a control sequence\", tok);\n    }\n    var numArgs = 0;\n    var insert;\n    var delimiters = [[]];\n    // <parameter text> contains no braces\n    while (parser.gullet.future().text !== \"{\") {\n      tok = parser.gullet.popToken();\n      if (tok.text === \"#\") {\n        // If the very last character of the <parameter text> is #, so that\n        // this # is immediately followed by {, TeX will behave as if the {\n        // had been inserted at the right end of both the parameter text\n        // and the replacement text.\n        if (parser.gullet.future().text === \"{\") {\n          insert = parser.gullet.future();\n          delimiters[numArgs].push(\"{\");\n          break;\n        }\n        // A parameter, the first appearance of # must be followed by 1,\n        // the next by 2, and so on; up to nine #’s are allowed\n        tok = parser.gullet.popToken();\n        if (!/^[1-9]$/.test(tok.text)) {\n          throw new ParseError(\"Invalid argument number \\\"\" + tok.text + \"\\\"\");\n        }\n        if (parseInt(tok.text) !== numArgs + 1) {\n          throw new ParseError(\"Argument number \\\"\" + tok.text + \"\\\" out of order\");\n        }\n        numArgs++;\n        delimiters.push([]);\n      } else if (tok.text === \"EOF\") {\n        throw new ParseError(\"Expected a macro definition\");\n      } else {\n        delimiters[numArgs].push(tok.text);\n      }\n    }\n    // replacement text, enclosed in '{' and '}' and properly nested\n    var {\n      tokens\n    } = parser.gullet.consumeArg();\n    if (insert) {\n      tokens.unshift(insert);\n    }\n    if (funcName === \"\\\\edef\" || funcName === \"\\\\xdef\") {\n      tokens = parser.gullet.expandTokens(tokens);\n      tokens.reverse(); // to fit in with stack order\n    }\n    // Final arg is the expansion of the macro\n    parser.gullet.macros.set(name, {\n      tokens,\n      numArgs,\n      delimiters\n    }, funcName === globalMap[funcName]);\n    return {\n      type: \"internal\",\n      mode: parser.mode\n    };\n  }\n});\n// <simple assignment> -> <let assignment>\n// <let assignment> -> \\futurelet<control sequence><token><token>\n//     | \\let<control sequence><equals><one optional space><token>\n// <equals> -> <optional spaces>|<optional spaces>=\ndefineFunction({\n  type: \"internal\",\n  names: [\"\\\\let\", \"\\\\\\\\globallet\" // can’t be entered directly\n  ],\n  props: {\n    numArgs: 0,\n    allowedInText: true,\n    primitive: true\n  },\n  handler(_ref3) {\n    var {\n      parser,\n      funcName\n    } = _ref3;\n    var name = checkControlSequence(parser.gullet.popToken());\n    parser.gullet.consumeSpaces();\n    var tok = getRHS(parser);\n    letCommand(parser, name, tok, funcName === \"\\\\\\\\globallet\");\n    return {\n      type: \"internal\",\n      mode: parser.mode\n    };\n  }\n});\n// ref: https://www.tug.org/TUGboat/tb09-3/tb22bechtolsheim.pdf\ndefineFunction({\n  type: \"internal\",\n  names: [\"\\\\futurelet\", \"\\\\\\\\globalfuture\" // can’t be entered directly\n  ],\n  props: {\n    numArgs: 0,\n    allowedInText: true,\n    primitive: true\n  },\n  handler(_ref4) {\n    var {\n      parser,\n      funcName\n    } = _ref4;\n    var name = checkControlSequence(parser.gullet.popToken());\n    var middle = parser.gullet.popToken();\n    var tok = parser.gullet.popToken();\n    letCommand(parser, name, tok, funcName === \"\\\\\\\\globalfuture\");\n    parser.gullet.pushToken(tok);\n    parser.gullet.pushToken(middle);\n    return {\n      type: \"internal\",\n      mode: parser.mode\n    };\n  }\n});\n\n/**\n * This file deals with creating delimiters of various sizes. The TeXbook\n * discusses these routines on page 441-442, in the \"Another subroutine sets box\n * x to a specified variable delimiter\" paragraph.\n *\n * There are three main routines here. `makeSmallDelim` makes a delimiter in the\n * normal font, but in either text, script, or scriptscript style.\n * `makeLargeDelim` makes a delimiter in textstyle, but in one of the Size1,\n * Size2, Size3, or Size4 fonts. `makeStackedDelim` makes a delimiter out of\n * smaller pieces that are stacked on top of one another.\n *\n * The functions take a parameter `center`, which determines if the delimiter\n * should be centered around the axis.\n *\n * Then, there are three exposed functions. `sizedDelim` makes a delimiter in\n * one of the given sizes. This is used for things like `\\bigl`.\n * `customSizedDelim` makes a delimiter with a given total height+depth. It is\n * called in places like `\\sqrt`. `leftRightDelim` makes an appropriate\n * delimiter which surrounds an expression of a given height an depth. It is\n * used in `\\left` and `\\right`.\n */\n/**\n * Get the metrics for a given symbol and font, after transformation (i.e.\n * after following replacement from symbols.js)\n */\nvar getMetrics = function getMetrics(symbol, font, mode) {\n  var replace = symbols.math[symbol] && symbols.math[symbol].replace;\n  var metrics = getCharacterMetrics(replace || symbol, font, mode);\n  if (!metrics) {\n    throw new Error(\"Unsupported symbol \" + symbol + \" and font size \" + font + \".\");\n  }\n  return metrics;\n};\n/**\n * Puts a delimiter span in a given style, and adds appropriate height, depth,\n * and maxFontSizes.\n */\nvar styleWrap = function styleWrap(delim, toStyle, options, classes) {\n  var newOptions = options.havingBaseStyle(toStyle);\n  var span = makeSpan(classes.concat(newOptions.sizingClasses(options)), [delim], options);\n  var delimSizeMultiplier = newOptions.sizeMultiplier / options.sizeMultiplier;\n  span.height *= delimSizeMultiplier;\n  span.depth *= delimSizeMultiplier;\n  span.maxFontSize = newOptions.sizeMultiplier;\n  return span;\n};\nvar centerSpan = function centerSpan(span, options, style) {\n  var newOptions = options.havingBaseStyle(style);\n  var shift = (1 - options.sizeMultiplier / newOptions.sizeMultiplier) * options.fontMetrics().axisHeight;\n  span.classes.push(\"delimcenter\");\n  span.style.top = makeEm(shift);\n  span.height -= shift;\n  span.depth += shift;\n};\n/**\n * Makes a small delimiter. This is a delimiter that comes in the Main-Regular\n * font, but is restyled to either be in textstyle, scriptstyle, or\n * scriptscriptstyle.\n */\nvar makeSmallDelim = function makeSmallDelim(delim, style, center, options, mode, classes) {\n  var text = makeSymbol(delim, \"Main-Regular\", mode, options);\n  var span = styleWrap(text, style, options, classes);\n  if (center) {\n    centerSpan(span, options, style);\n  }\n  return span;\n};\n/**\n * Builds a symbol in the given font size (note size is an integer)\n */\nvar mathrmSize = function mathrmSize(value, size, mode, options) {\n  return makeSymbol(value, \"Size\" + size + \"-Regular\", mode, options);\n};\n/**\n * Makes a large delimiter. This is a delimiter that comes in the Size1, Size2,\n * Size3, or Size4 fonts. It is always rendered in textstyle.\n */\nvar makeLargeDelim = function makeLargeDelim(delim, size, center, options, mode, classes) {\n  var inner = mathrmSize(delim, size, mode, options);\n  var span = styleWrap(makeSpan([\"delimsizing\", \"size\" + size], [inner], options), Style$1.TEXT, options, classes);\n  if (center) {\n    centerSpan(span, options, Style$1.TEXT);\n  }\n  return span;\n};\n/**\n * Make a span from a font glyph with the given offset and in the given font.\n * This is used in makeStackedDelim to make the stacking pieces for the delimiter.\n */\nvar makeGlyphSpan = function makeGlyphSpan(symbol, font, mode) {\n  var sizeClass;\n  // Apply the correct CSS class to choose the right font.\n  if (font === \"Size1-Regular\") {\n    sizeClass = \"delim-size1\";\n  } else /* if (font === \"Size4-Regular\") */{\n      sizeClass = \"delim-size4\";\n    }\n  var corner = makeSpan([\"delimsizinginner\", sizeClass], [makeSpan([], [makeSymbol(symbol, font, mode)])]);\n  // Since this will be passed into `makeVList` in the end, wrap the element\n  // in the appropriate tag that VList uses.\n  return {\n    type: \"elem\",\n    elem: corner\n  };\n};\nvar makeInner = function makeInner(ch, height, options) {\n  // Create a span with inline SVG for the inner part of a tall stacked delimiter.\n  var width = fontMetricsData['Size4-Regular'][ch.charCodeAt(0)] ? fontMetricsData['Size4-Regular'][ch.charCodeAt(0)][4] : fontMetricsData['Size1-Regular'][ch.charCodeAt(0)][4];\n  var path = new PathNode(\"inner\", innerPath(ch, Math.round(1000 * height)));\n  var svgNode = new SvgNode([path], {\n    \"width\": makeEm(width),\n    \"height\": makeEm(height),\n    // Override CSS rule `.katex svg { width: 100% }`\n    \"style\": \"width:\" + makeEm(width),\n    \"viewBox\": \"0 0 \" + 1000 * width + \" \" + Math.round(1000 * height),\n    \"preserveAspectRatio\": \"xMinYMin\"\n  });\n  var span = makeSvgSpan([], [svgNode], options);\n  span.height = height;\n  span.style.height = makeEm(height);\n  span.style.width = makeEm(width);\n  return {\n    type: \"elem\",\n    elem: span\n  };\n};\n// Helpers for makeStackedDelim\nvar lapInEms = 0.008;\nvar lap = {\n  type: \"kern\",\n  size: -1 * lapInEms\n};\nvar verts = new Set([\"|\", \"\\\\lvert\", \"\\\\rvert\", \"\\\\vert\"]);\nvar doubleVerts = new Set([\"\\\\|\", \"\\\\lVert\", \"\\\\rVert\", \"\\\\Vert\"]);\n/**\n * Make a stacked delimiter out of a given delimiter, with the total height at\n * least `heightTotal`. This routine is mentioned on page 442 of the TeXbook.\n */\nvar makeStackedDelim = function makeStackedDelim(delim, heightTotal, center, options, mode, classes) {\n  // There are four parts, the top, an optional middle, a repeated part, and a\n  // bottom.\n  var top;\n  var middle;\n  var repeat;\n  var bottom;\n  var svgLabel = \"\";\n  var viewBoxWidth = 0;\n  top = repeat = bottom = delim;\n  middle = null;\n  // Also keep track of what font the delimiters are in\n  var font = \"Size1-Regular\";\n  // We set the parts and font based on the symbol. Note that we use\n  // '\\u23d0' instead of '|' and '\\u2016' instead of '\\\\|' for the\n  // repeats of the arrows\n  if (delim === \"\\\\uparrow\") {\n    repeat = bottom = \"\\u23d0\";\n  } else if (delim === \"\\\\Uparrow\") {\n    repeat = bottom = \"\\u2016\";\n  } else if (delim === \"\\\\downarrow\") {\n    top = repeat = \"\\u23d0\";\n  } else if (delim === \"\\\\Downarrow\") {\n    top = repeat = \"\\u2016\";\n  } else if (delim === \"\\\\updownarrow\") {\n    top = \"\\\\uparrow\";\n    repeat = \"\\u23d0\";\n    bottom = \"\\\\downarrow\";\n  } else if (delim === \"\\\\Updownarrow\") {\n    top = \"\\\\Uparrow\";\n    repeat = \"\\u2016\";\n    bottom = \"\\\\Downarrow\";\n  } else if (verts.has(delim)) {\n    repeat = \"\\u2223\";\n    svgLabel = \"vert\";\n    viewBoxWidth = 333;\n  } else if (doubleVerts.has(delim)) {\n    repeat = \"\\u2225\";\n    svgLabel = \"doublevert\";\n    viewBoxWidth = 556;\n  } else if (delim === \"[\" || delim === \"\\\\lbrack\") {\n    top = \"\\u23a1\";\n    repeat = \"\\u23a2\";\n    bottom = \"\\u23a3\";\n    font = \"Size4-Regular\";\n    svgLabel = \"lbrack\";\n    viewBoxWidth = 667;\n  } else if (delim === \"]\" || delim === \"\\\\rbrack\") {\n    top = \"\\u23a4\";\n    repeat = \"\\u23a5\";\n    bottom = \"\\u23a6\";\n    font = \"Size4-Regular\";\n    svgLabel = \"rbrack\";\n    viewBoxWidth = 667;\n  } else if (delim === \"\\\\lfloor\" || delim === \"\\u230a\") {\n    repeat = top = \"\\u23a2\";\n    bottom = \"\\u23a3\";\n    font = \"Size4-Regular\";\n    svgLabel = \"lfloor\";\n    viewBoxWidth = 667;\n  } else if (delim === \"\\\\lceil\" || delim === \"\\u2308\") {\n    top = \"\\u23a1\";\n    repeat = bottom = \"\\u23a2\";\n    font = \"Size4-Regular\";\n    svgLabel = \"lceil\";\n    viewBoxWidth = 667;\n  } else if (delim === \"\\\\rfloor\" || delim === \"\\u230b\") {\n    repeat = top = \"\\u23a5\";\n    bottom = \"\\u23a6\";\n    font = \"Size4-Regular\";\n    svgLabel = \"rfloor\";\n    viewBoxWidth = 667;\n  } else if (delim === \"\\\\rceil\" || delim === \"\\u2309\") {\n    top = \"\\u23a4\";\n    repeat = bottom = \"\\u23a5\";\n    font = \"Size4-Regular\";\n    svgLabel = \"rceil\";\n    viewBoxWidth = 667;\n  } else if (delim === \"(\" || delim === \"\\\\lparen\") {\n    top = \"\\u239b\";\n    repeat = \"\\u239c\";\n    bottom = \"\\u239d\";\n    font = \"Size4-Regular\";\n    svgLabel = \"lparen\";\n    viewBoxWidth = 875;\n  } else if (delim === \")\" || delim === \"\\\\rparen\") {\n    top = \"\\u239e\";\n    repeat = \"\\u239f\";\n    bottom = \"\\u23a0\";\n    font = \"Size4-Regular\";\n    svgLabel = \"rparen\";\n    viewBoxWidth = 875;\n  } else if (delim === \"\\\\{\" || delim === \"\\\\lbrace\") {\n    top = \"\\u23a7\";\n    middle = \"\\u23a8\";\n    bottom = \"\\u23a9\";\n    repeat = \"\\u23aa\";\n    font = \"Size4-Regular\";\n  } else if (delim === \"\\\\}\" || delim === \"\\\\rbrace\") {\n    top = \"\\u23ab\";\n    middle = \"\\u23ac\";\n    bottom = \"\\u23ad\";\n    repeat = \"\\u23aa\";\n    font = \"Size4-Regular\";\n  } else if (delim === \"\\\\lgroup\" || delim === \"\\u27ee\") {\n    top = \"\\u23a7\";\n    bottom = \"\\u23a9\";\n    repeat = \"\\u23aa\";\n    font = \"Size4-Regular\";\n  } else if (delim === \"\\\\rgroup\" || delim === \"\\u27ef\") {\n    top = \"\\u23ab\";\n    bottom = \"\\u23ad\";\n    repeat = \"\\u23aa\";\n    font = \"Size4-Regular\";\n  } else if (delim === \"\\\\lmoustache\" || delim === \"\\u23b0\") {\n    top = \"\\u23a7\";\n    bottom = \"\\u23ad\";\n    repeat = \"\\u23aa\";\n    font = \"Size4-Regular\";\n  } else if (delim === \"\\\\rmoustache\" || delim === \"\\u23b1\") {\n    top = \"\\u23ab\";\n    bottom = \"\\u23a9\";\n    repeat = \"\\u23aa\";\n    font = \"Size4-Regular\";\n  }\n  // Get the metrics of the four sections\n  var topMetrics = getMetrics(top, font, mode);\n  var topHeightTotal = topMetrics.height + topMetrics.depth;\n  var repeatMetrics = getMetrics(repeat, font, mode);\n  var repeatHeightTotal = repeatMetrics.height + repeatMetrics.depth;\n  var bottomMetrics = getMetrics(bottom, font, mode);\n  var bottomHeightTotal = bottomMetrics.height + bottomMetrics.depth;\n  var middleHeightTotal = 0;\n  var middleFactor = 1;\n  if (middle !== null) {\n    var middleMetrics = getMetrics(middle, font, mode);\n    middleHeightTotal = middleMetrics.height + middleMetrics.depth;\n    middleFactor = 2; // repeat symmetrically above and below middle\n  }\n  // Calculate the minimal height that the delimiter can have.\n  // It is at least the size of the top, bottom, and optional middle combined.\n  var minHeight = topHeightTotal + bottomHeightTotal + middleHeightTotal;\n  // Compute the number of copies of the repeat symbol we will need\n  var repeatCount = Math.max(0, Math.ceil((heightTotal - minHeight) / (middleFactor * repeatHeightTotal)));\n  // Compute the total height of the delimiter including all the symbols\n  var realHeightTotal = minHeight + repeatCount * middleFactor * repeatHeightTotal;\n  // The center of the delimiter is placed at the center of the axis. Note\n  // that in this context, \"center\" means that the delimiter should be\n  // centered around the axis in the current style, while normally it is\n  // centered around the axis in textstyle.\n  var axisHeight = options.fontMetrics().axisHeight;\n  if (center) {\n    axisHeight *= options.sizeMultiplier;\n  }\n  // Calculate the depth\n  var depth = realHeightTotal / 2 - axisHeight;\n  // Now, we start building the pieces that will go into the vlist\n  // Keep a list of the pieces of the stacked delimiter\n  var stack = [];\n  if (svgLabel.length > 0) {\n    // Instead of stacking glyphs, create a single SVG.\n    // This evades browser problems with imprecise positioning of spans.\n    var midHeight = realHeightTotal - topHeightTotal - bottomHeightTotal;\n    var viewBoxHeight = Math.round(realHeightTotal * 1000);\n    var pathStr = tallDelim(svgLabel, Math.round(midHeight * 1000));\n    var path = new PathNode(svgLabel, pathStr);\n    var width = makeEm(viewBoxWidth / 1000);\n    var height = makeEm(viewBoxHeight / 1000);\n    var svg = new SvgNode([path], {\n      \"width\": width,\n      \"height\": height,\n      \"viewBox\": \"0 0 \" + viewBoxWidth + \" \" + viewBoxHeight\n    });\n    var wrapper = makeSvgSpan([], [svg], options);\n    wrapper.height = viewBoxHeight / 1000;\n    wrapper.style.width = width;\n    wrapper.style.height = height;\n    stack.push({\n      type: \"elem\",\n      elem: wrapper\n    });\n  } else {\n    // Stack glyphs\n    // Start by adding the bottom symbol\n    stack.push(makeGlyphSpan(bottom, font, mode));\n    stack.push(lap); // overlap\n    if (middle === null) {\n      // The middle section will be an SVG. Make it an extra 0.016em tall.\n      // We'll overlap by 0.008em at top and bottom.\n      var innerHeight = realHeightTotal - topHeightTotal - bottomHeightTotal + 2 * lapInEms;\n      stack.push(makeInner(repeat, innerHeight, options));\n    } else {\n      // When there is a middle bit, we need the middle part and two repeated\n      // sections\n      var _innerHeight = (realHeightTotal - topHeightTotal - bottomHeightTotal - middleHeightTotal) / 2 + 2 * lapInEms;\n      stack.push(makeInner(repeat, _innerHeight, options));\n      // Now insert the middle of the brace.\n      stack.push(lap);\n      stack.push(makeGlyphSpan(middle, font, mode));\n      stack.push(lap);\n      stack.push(makeInner(repeat, _innerHeight, options));\n    }\n    // Add the top symbol\n    stack.push(lap);\n    stack.push(makeGlyphSpan(top, font, mode));\n  }\n  // Finally, build the vlist\n  var newOptions = options.havingBaseStyle(Style$1.TEXT);\n  var inner = makeVList({\n    positionType: \"bottom\",\n    positionData: depth,\n    children: stack\n  });\n  return styleWrap(makeSpan([\"delimsizing\", \"mult\"], [inner], newOptions), Style$1.TEXT, options, classes);\n};\n// All surds have 0.08em padding above the vinculum inside the SVG.\n// That keeps browser span height rounding error from pinching the line.\nvar vbPad = 80; // padding above the surd, measured inside the viewBox.\nvar emPad = 0.08; // padding, in ems, measured in the document.\nvar sqrtSvg = function sqrtSvg(sqrtName, height, viewBoxHeight, extraVinculum, options) {\n  var path = sqrtPath(sqrtName, extraVinculum, viewBoxHeight);\n  var pathNode = new PathNode(sqrtName, path);\n  var svg = new SvgNode([pathNode], {\n    // Note: 1000:1 ratio of viewBox to document em width.\n    \"width\": \"400em\",\n    \"height\": makeEm(height),\n    \"viewBox\": \"0 0 400000 \" + viewBoxHeight,\n    \"preserveAspectRatio\": \"xMinYMin slice\"\n  });\n  return makeSvgSpan([\"hide-tail\"], [svg], options);\n};\n/**\n * Make a sqrt image of the given height,\n */\nvar makeSqrtImage = function makeSqrtImage(height, options) {\n  // Define a newOptions that removes the effect of size changes such as \\Huge.\n  // We don't pick different a height surd for \\Huge. For it, we scale up.\n  var newOptions = options.havingBaseSizing();\n  // Pick the desired surd glyph from a sequence of surds.\n  var delim = traverseSequence(\"\\\\surd\", height * newOptions.sizeMultiplier, stackLargeDelimiterSequence, newOptions);\n  var sizeMultiplier = newOptions.sizeMultiplier; // default\n  // The standard sqrt SVGs each have a 0.04em thick vinculum.\n  // If Settings.minRuleThickness is larger than that, we add extraVinculum.\n  var extraVinculum = Math.max(0, options.minRuleThickness - options.fontMetrics().sqrtRuleThickness);\n  // Create a span containing an SVG image of a sqrt symbol.\n  var span;\n  var spanHeight = 0;\n  var texHeight = 0;\n  var viewBoxHeight = 0;\n  var advanceWidth;\n  // We create viewBoxes with 80 units of \"padding\" above each surd.\n  // Then browser rounding error on the parent span height will not\n  // encroach on the ink of the vinculum. But that padding is not\n  // included in the TeX-like `height` used for calculation of\n  // vertical alignment. So texHeight = span.height < span.style.height.\n  if (delim.type === \"small\") {\n    // Get an SVG that is derived from glyph U+221A in font KaTeX-Main.\n    // 1000 unit normal glyph height.\n    viewBoxHeight = 1000 + 1000 * extraVinculum + vbPad;\n    if (height < 1.0) {\n      sizeMultiplier = 1.0; // mimic a \\textfont radical\n    } else if (height < 1.4) {\n      sizeMultiplier = 0.7; // mimic a \\scriptfont radical\n    }\n    spanHeight = (1.0 + extraVinculum + emPad) / sizeMultiplier;\n    texHeight = (1.00 + extraVinculum) / sizeMultiplier;\n    span = sqrtSvg(\"sqrtMain\", spanHeight, viewBoxHeight, extraVinculum, options);\n    span.style.minWidth = \"0.853em\";\n    advanceWidth = 0.833 / sizeMultiplier; // from the font.\n  } else if (delim.type === \"large\") {\n    // These SVGs come from fonts: KaTeX_Size1, _Size2, etc.\n    viewBoxHeight = (1000 + vbPad) * sizeToMaxHeight[delim.size];\n    texHeight = (sizeToMaxHeight[delim.size] + extraVinculum) / sizeMultiplier;\n    spanHeight = (sizeToMaxHeight[delim.size] + extraVinculum + emPad) / sizeMultiplier;\n    span = sqrtSvg(\"sqrtSize\" + delim.size, spanHeight, viewBoxHeight, extraVinculum, options);\n    span.style.minWidth = \"1.02em\";\n    advanceWidth = 1.0 / sizeMultiplier; // 1.0 from the font.\n  } else {\n    // Tall sqrt. In TeX, this would be stacked using multiple glyphs.\n    // We'll use a single SVG to accomplish the same thing.\n    spanHeight = height + extraVinculum + emPad;\n    texHeight = height + extraVinculum;\n    viewBoxHeight = Math.floor(1000 * height + extraVinculum) + vbPad;\n    span = sqrtSvg(\"sqrtTall\", spanHeight, viewBoxHeight, extraVinculum, options);\n    span.style.minWidth = \"0.742em\";\n    advanceWidth = 1.056;\n  }\n  span.height = texHeight;\n  span.style.height = makeEm(spanHeight);\n  return {\n    span,\n    advanceWidth,\n    // Calculate the actual line width.\n    // This actually should depend on the chosen font -- e.g. \\boldmath\n    // should use the thicker surd symbols from e.g. KaTeX_Main-Bold, and\n    // have thicker rules.\n    ruleWidth: (options.fontMetrics().sqrtRuleThickness + extraVinculum) * sizeMultiplier\n  };\n};\n// There are three kinds of delimiters, delimiters that stack when they become\n// too large\nvar stackLargeDelimiters = new Set([\"(\", \"\\\\lparen\", \")\", \"\\\\rparen\", \"[\", \"\\\\lbrack\", \"]\", \"\\\\rbrack\", \"\\\\{\", \"\\\\lbrace\", \"\\\\}\", \"\\\\rbrace\", \"\\\\lfloor\", \"\\\\rfloor\", \"\\u230a\", \"\\u230b\", \"\\\\lceil\", \"\\\\rceil\", \"\\u2308\", \"\\u2309\", \"\\\\surd\"]);\n// delimiters that always stack\nvar stackAlwaysDelimiters = new Set([\"\\\\uparrow\", \"\\\\downarrow\", \"\\\\updownarrow\", \"\\\\Uparrow\", \"\\\\Downarrow\", \"\\\\Updownarrow\", \"|\", \"\\\\|\", \"\\\\vert\", \"\\\\Vert\", \"\\\\lvert\", \"\\\\rvert\", \"\\\\lVert\", \"\\\\rVert\", \"\\\\lgroup\", \"\\\\rgroup\", \"\\u27ee\", \"\\u27ef\", \"\\\\lmoustache\", \"\\\\rmoustache\", \"\\u23b0\", \"\\u23b1\"]);\n// and delimiters that never stack\nvar stackNeverDelimiters = new Set([\"<\", \">\", \"\\\\langle\", \"\\\\rangle\", \"/\", \"\\\\backslash\", \"\\\\lt\", \"\\\\gt\"]);\n// Metrics of the different sizes. Found by looking at TeX's output of\n// $\\bigl| // \\Bigl| \\biggl| \\Biggl| \\showlists$\n// Used to create stacked delimiters of appropriate sizes in makeSizedDelim.\nvar sizeToMaxHeight = [0, 1.2, 1.8, 2.4, 3.0];\n/**\n * Used to create a delimiter of a specific size, where `size` is 1, 2, 3, or 4.\n */\nvar makeSizedDelim = function makeSizedDelim(delim, size, options, mode, classes) {\n  // < and > turn into \\langle and \\rangle in delimiters\n  if (delim === \"<\" || delim === \"\\\\lt\" || delim === \"\\u27e8\") {\n    delim = \"\\\\langle\";\n  } else if (delim === \">\" || delim === \"\\\\gt\" || delim === \"\\u27e9\") {\n    delim = \"\\\\rangle\";\n  }\n  // Sized delimiters are never centered.\n  if (stackLargeDelimiters.has(delim) || stackNeverDelimiters.has(delim)) {\n    return makeLargeDelim(delim, size, false, options, mode, classes);\n  } else if (stackAlwaysDelimiters.has(delim)) {\n    return makeStackedDelim(delim, sizeToMaxHeight[size], false, options, mode, classes);\n  } else {\n    throw new ParseError(\"Illegal delimiter: '\" + delim + \"'\");\n  }\n};\n// Delimiters that never stack try small delimiters and large delimiters only\nvar stackNeverDelimiterSequence = [{\n  type: \"small\",\n  style: Style$1.SCRIPTSCRIPT\n}, {\n  type: \"small\",\n  style: Style$1.SCRIPT\n}, {\n  type: \"small\",\n  style: Style$1.TEXT\n}, {\n  type: \"large\",\n  size: 1\n}, {\n  type: \"large\",\n  size: 2\n}, {\n  type: \"large\",\n  size: 3\n}, {\n  type: \"large\",\n  size: 4\n}];\n// Delimiters that always stack try the small delimiters first, then stack\nvar stackAlwaysDelimiterSequence = [{\n  type: \"small\",\n  style: Style$1.SCRIPTSCRIPT\n}, {\n  type: \"small\",\n  style: Style$1.SCRIPT\n}, {\n  type: \"small\",\n  style: Style$1.TEXT\n}, {\n  type: \"stack\"\n}];\n// Delimiters that stack when large try the small and then large delimiters, and\n// stack afterwards\nvar stackLargeDelimiterSequence = [{\n  type: \"small\",\n  style: Style$1.SCRIPTSCRIPT\n}, {\n  type: \"small\",\n  style: Style$1.SCRIPT\n}, {\n  type: \"small\",\n  style: Style$1.TEXT\n}, {\n  type: \"large\",\n  size: 1\n}, {\n  type: \"large\",\n  size: 2\n}, {\n  type: \"large\",\n  size: 3\n}, {\n  type: \"large\",\n  size: 4\n}, {\n  type: \"stack\"\n}];\n/**\n * Get the font used in a delimiter based on what kind of delimiter it is.\n * TODO(#963) Use more specific font family return type once that is introduced.\n */\nvar delimTypeToFont = function delimTypeToFont(type) {\n  if (type.type === \"small\") {\n    return \"Main-Regular\";\n  } else if (type.type === \"large\") {\n    return \"Size\" + type.size + \"-Regular\";\n  } else if (type.type === \"stack\") {\n    return \"Size4-Regular\";\n  } else {\n    var delimKind = type.type;\n    throw new Error(\"Add support for delim type '\" + delimKind + \"' here.\");\n  }\n};\n/**\n * Traverse a sequence of types of delimiters to decide what kind of delimiter\n * should be used to create a delimiter of the given height+depth.\n */\nvar traverseSequence = function traverseSequence(delim, height, sequence, options) {\n  // Here, we choose the index we should start at in the sequences. In smaller\n  // sizes (which correspond to larger numbers in style.size) we start earlier\n  // in the sequence. Thus, scriptscript starts at index 3-3=0, script starts\n  // at index 3-2=1, text starts at 3-1=2, and display starts at min(2,3-0)=2\n  var start = Math.min(2, 3 - options.style.size);\n  for (var i = start; i < sequence.length; i++) {\n    var delimType = sequence[i];\n    if (delimType.type === \"stack\") {\n      // This is always the last delimiter, so we just break the loop now.\n      break;\n    }\n    var metrics = getMetrics(delim, delimTypeToFont(delimType), \"math\");\n    var heightDepth = metrics.height + metrics.depth;\n    // Small delimiters are scaled down versions of the same font, so we\n    // account for the style change size.\n    if (delimType.type === \"small\") {\n      var newOptions = options.havingBaseStyle(delimType.style);\n      heightDepth *= newOptions.sizeMultiplier;\n    }\n    // Check if the delimiter at this size works for the given height.\n    if (heightDepth > height) {\n      return delimType;\n    }\n  }\n  // If we reached the end of the sequence, return the last sequence element.\n  return sequence[sequence.length - 1];\n};\n/**\n * Make a delimiter of a given height+depth, with optional centering. Here, we\n * traverse the sequences, and create a delimiter that the sequence tells us to.\n */\nvar makeCustomSizedDelim = function makeCustomSizedDelim(delim, height, center, options, mode, classes) {\n  if (delim === \"<\" || delim === \"\\\\lt\" || delim === \"\\u27e8\") {\n    delim = \"\\\\langle\";\n  } else if (delim === \">\" || delim === \"\\\\gt\" || delim === \"\\u27e9\") {\n    delim = \"\\\\rangle\";\n  }\n  // Decide what sequence to use\n  var sequence;\n  if (stackNeverDelimiters.has(delim)) {\n    sequence = stackNeverDelimiterSequence;\n  } else if (stackLargeDelimiters.has(delim)) {\n    sequence = stackLargeDelimiterSequence;\n  } else {\n    sequence = stackAlwaysDelimiterSequence;\n  }\n  // Look through the sequence\n  var delimType = traverseSequence(delim, height, sequence, options);\n  // Get the delimiter from font glyphs.\n  // Depending on the sequence element we decided on, call the\n  // appropriate function.\n  if (delimType.type === \"small\") {\n    return makeSmallDelim(delim, delimType.style, center, options, mode, classes);\n  } else if (delimType.type === \"large\") {\n    return makeLargeDelim(delim, delimType.size, center, options, mode, classes);\n  } else /* if (delimType.type === \"stack\") */{\n      return makeStackedDelim(delim, height, center, options, mode, classes);\n    }\n};\n/**\n * Make a delimiter for use with `\\left` and `\\right`, given a height and depth\n * of an expression that the delimiters surround.\n */\nvar makeLeftRightDelim = function makeLeftRightDelim(delim, height, depth, options, mode, classes) {\n  // We always center \\left/\\right delimiters, so the axis is always shifted\n  var axisHeight = options.fontMetrics().axisHeight * options.sizeMultiplier;\n  // Taken from TeX source, tex.web, function make_left_right\n  var delimiterFactor = 901;\n  var delimiterExtend = 5.0 / options.fontMetrics().ptPerEm;\n  var maxDistFromAxis = Math.max(height - axisHeight, depth + axisHeight);\n  var totalHeight = Math.max(\n  // In real TeX, calculations are done using integral values which are\n  // 65536 per pt, or 655360 per em. So, the division here truncates in\n  // TeX but doesn't here, producing different results. If we wanted to\n  // exactly match TeX's calculation, we could do\n  //   Math.floor(655360 * maxDistFromAxis / 500) *\n  //    delimiterFactor / 655360\n  // (To see the difference, compare\n  //    x^{x^{\\left(\\rule{0.1em}{0.68em}\\right)}}\n  // in TeX and KaTeX)\n  maxDistFromAxis / 500 * delimiterFactor, 2 * maxDistFromAxis - delimiterExtend);\n  // Finally, we defer to `makeCustomSizedDelim` with our calculated total\n  // height\n  return makeCustomSizedDelim(delim, totalHeight, true, options, mode, classes);\n};\n\n// Extra data needed for the delimiter handler down below\nvar delimiterSizes = {\n  \"\\\\bigl\": {\n    mclass: \"mopen\",\n    size: 1\n  },\n  \"\\\\Bigl\": {\n    mclass: \"mopen\",\n    size: 2\n  },\n  \"\\\\biggl\": {\n    mclass: \"mopen\",\n    size: 3\n  },\n  \"\\\\Biggl\": {\n    mclass: \"mopen\",\n    size: 4\n  },\n  \"\\\\bigr\": {\n    mclass: \"mclose\",\n    size: 1\n  },\n  \"\\\\Bigr\": {\n    mclass: \"mclose\",\n    size: 2\n  },\n  \"\\\\biggr\": {\n    mclass: \"mclose\",\n    size: 3\n  },\n  \"\\\\Biggr\": {\n    mclass: \"mclose\",\n    size: 4\n  },\n  \"\\\\bigm\": {\n    mclass: \"mrel\",\n    size: 1\n  },\n  \"\\\\Bigm\": {\n    mclass: \"mrel\",\n    size: 2\n  },\n  \"\\\\biggm\": {\n    mclass: \"mrel\",\n    size: 3\n  },\n  \"\\\\Biggm\": {\n    mclass: \"mrel\",\n    size: 4\n  },\n  \"\\\\big\": {\n    mclass: \"mord\",\n    size: 1\n  },\n  \"\\\\Big\": {\n    mclass: \"mord\",\n    size: 2\n  },\n  \"\\\\bigg\": {\n    mclass: \"mord\",\n    size: 3\n  },\n  \"\\\\Bigg\": {\n    mclass: \"mord\",\n    size: 4\n  }\n};\nvar delimiters = new Set([\"(\", \"\\\\lparen\", \")\", \"\\\\rparen\", \"[\", \"\\\\lbrack\", \"]\", \"\\\\rbrack\", \"\\\\{\", \"\\\\lbrace\", \"\\\\}\", \"\\\\rbrace\", \"\\\\lfloor\", \"\\\\rfloor\", \"\\u230a\", \"\\u230b\", \"\\\\lceil\", \"\\\\rceil\", \"\\u2308\", \"\\u2309\", \"<\", \">\", \"\\\\langle\", \"\\u27e8\", \"\\\\rangle\", \"\\u27e9\", \"\\\\lt\", \"\\\\gt\", \"\\\\lvert\", \"\\\\rvert\", \"\\\\lVert\", \"\\\\rVert\", \"\\\\lgroup\", \"\\\\rgroup\", \"\\u27ee\", \"\\u27ef\", \"\\\\lmoustache\", \"\\\\rmoustache\", \"\\u23b0\", \"\\u23b1\", \"/\", \"\\\\backslash\", \"|\", \"\\\\vert\", \"\\\\|\", \"\\\\Vert\", \"\\\\uparrow\", \"\\\\Uparrow\", \"\\\\downarrow\", \"\\\\Downarrow\", \"\\\\updownarrow\", \"\\\\Updownarrow\", \".\"]);\n// Delimiter functions\nfunction checkDelimiter(delim, context) {\n  var symDelim = checkSymbolNodeType(delim);\n  if (symDelim && delimiters.has(symDelim.text)) {\n    return symDelim;\n  } else if (symDelim) {\n    throw new ParseError(\"Invalid delimiter '\" + symDelim.text + \"' after '\" + context.funcName + \"'\", delim);\n  } else {\n    throw new ParseError(\"Invalid delimiter type '\" + delim.type + \"'\", delim);\n  }\n}\ndefineFunction({\n  type: \"delimsizing\",\n  names: [\"\\\\bigl\", \"\\\\Bigl\", \"\\\\biggl\", \"\\\\Biggl\", \"\\\\bigr\", \"\\\\Bigr\", \"\\\\biggr\", \"\\\\Biggr\", \"\\\\bigm\", \"\\\\Bigm\", \"\\\\biggm\", \"\\\\Biggm\", \"\\\\big\", \"\\\\Big\", \"\\\\bigg\", \"\\\\Bigg\"],\n  props: {\n    numArgs: 1,\n    argTypes: [\"primitive\"]\n  },\n  handler: (context, args) => {\n    var delim = checkDelimiter(args[0], context);\n    return {\n      type: \"delimsizing\",\n      mode: context.parser.mode,\n      size: delimiterSizes[context.funcName].size,\n      mclass: delimiterSizes[context.funcName].mclass,\n      delim: delim.text\n    };\n  },\n  htmlBuilder: (group, options) => {\n    if (group.delim === \".\") {\n      // Empty delimiters still count as elements, even though they don't\n      // show anything.\n      return makeSpan([group.mclass]);\n    }\n    return makeSizedDelim(group.delim, group.size, options, group.mode, [group.mclass]);\n  },\n  mathmlBuilder: group => {\n    var children = [];\n    if (group.delim !== \".\") {\n      children.push(makeText(group.delim, group.mode));\n    }\n    var node = new MathNode(\"mo\", children);\n    if (group.mclass === \"mopen\" || group.mclass === \"mclose\") {\n      // Only some of the delimsizing functions act as fences, and they\n      // return \"mopen\" or \"mclose\" mclass.\n      node.setAttribute(\"fence\", \"true\");\n    } else {\n      // Explicitly disable fencing if it's not a fence, to override the\n      // defaults.\n      node.setAttribute(\"fence\", \"false\");\n    }\n    node.setAttribute(\"stretchy\", \"true\");\n    var size = makeEm(sizeToMaxHeight[group.size]);\n    node.setAttribute(\"minsize\", size);\n    node.setAttribute(\"maxsize\", size);\n    return node;\n  }\n});\nfunction assertParsed(group) {\n  if (!group.body) {\n    throw new Error(\"Bug: The leftright ParseNode wasn't fully parsed.\");\n  }\n}\ndefineFunction({\n  type: \"leftright-right\",\n  names: [\"\\\\right\"],\n  props: {\n    numArgs: 1,\n    primitive: true\n  },\n  handler: (context, args) => {\n    // \\left case below triggers parsing of \\right in\n    //   `const right = parser.parseFunction();`\n    // uses this return value.\n    var color = context.parser.gullet.macros.get(\"\\\\current@color\");\n    if (color && typeof color !== \"string\") {\n      throw new ParseError(\"\\\\current@color set to non-string in \\\\right\");\n    }\n    return {\n      type: \"leftright-right\",\n      mode: context.parser.mode,\n      delim: checkDelimiter(args[0], context).text,\n      color: color // undefined if not set via \\color\n    };\n  }\n});\ndefineFunction({\n  type: \"leftright\",\n  names: [\"\\\\left\"],\n  props: {\n    numArgs: 1,\n    primitive: true\n  },\n  handler: (context, args) => {\n    var delim = checkDelimiter(args[0], context);\n    var parser = context.parser;\n    // Parse out the implicit body\n    ++parser.leftrightDepth;\n    // parseExpression stops before '\\\\right'\n    var body = parser.parseExpression(false);\n    --parser.leftrightDepth;\n    // Check the next token\n    parser.expect(\"\\\\right\", false);\n    var right = assertNodeType(parser.parseFunction(), \"leftright-right\");\n    return {\n      type: \"leftright\",\n      mode: parser.mode,\n      body,\n      left: delim.text,\n      right: right.delim,\n      rightColor: right.color\n    };\n  },\n  htmlBuilder: (group, options) => {\n    assertParsed(group);\n    // Build the inner expression\n    var inner = buildExpression$1(group.body, options, true, [\"mopen\", \"mclose\"]);\n    var innerHeight = 0;\n    var innerDepth = 0;\n    var hadMiddle = false;\n    // Calculate its height and depth\n    for (var i = 0; i < inner.length; i++) {\n      // Property `isMiddle` not defined on `span`. See comment in\n      // \"middle\"'s htmlBuilder.\n      // TODO(ts)\n      if (inner[i].isMiddle) {\n        hadMiddle = true;\n      } else {\n        innerHeight = Math.max(inner[i].height, innerHeight);\n        innerDepth = Math.max(inner[i].depth, innerDepth);\n      }\n    }\n    // The size of delimiters is the same, regardless of what style we are\n    // in. Thus, to correctly calculate the size of delimiter we need around\n    // a group, we scale down the inner size based on the size.\n    innerHeight *= options.sizeMultiplier;\n    innerDepth *= options.sizeMultiplier;\n    var leftDelim;\n    if (group.left === \".\") {\n      // Empty delimiters in \\left and \\right make null delimiter spaces.\n      leftDelim = makeNullDelimiter(options, [\"mopen\"]);\n    } else {\n      // Otherwise, use leftRightDelim to generate the correct sized\n      // delimiter.\n      leftDelim = makeLeftRightDelim(group.left, innerHeight, innerDepth, options, group.mode, [\"mopen\"]);\n    }\n    // Add it to the beginning of the expression\n    inner.unshift(leftDelim);\n    // Handle middle delimiters\n    if (hadMiddle) {\n      for (var _i = 1; _i < inner.length; _i++) {\n        var middleDelim = inner[_i];\n        // Property `isMiddle` not defined on `span`. See comment in\n        // \"middle\"'s htmlBuilder.\n        // TODO(ts)\n        var isMiddle = middleDelim.isMiddle;\n        if (isMiddle) {\n          // Apply the options that were active when \\middle was called\n          inner[_i] = makeLeftRightDelim(isMiddle.delim, innerHeight, innerDepth, isMiddle.options, group.mode, []);\n        }\n      }\n    }\n    var rightDelim;\n    // Same for the right delimiter, but using color specified by \\color\n    if (group.right === \".\") {\n      rightDelim = makeNullDelimiter(options, [\"mclose\"]);\n    } else {\n      var colorOptions = group.rightColor ? options.withColor(group.rightColor) : options;\n      rightDelim = makeLeftRightDelim(group.right, innerHeight, innerDepth, colorOptions, group.mode, [\"mclose\"]);\n    }\n    // Add it to the end of the expression.\n    inner.push(rightDelim);\n    return makeSpan([\"minner\"], inner, options);\n  },\n  mathmlBuilder: (group, options) => {\n    assertParsed(group);\n    var inner = buildExpression(group.body, options);\n    if (group.left !== \".\") {\n      var leftNode = new MathNode(\"mo\", [makeText(group.left, group.mode)]);\n      leftNode.setAttribute(\"fence\", \"true\");\n      inner.unshift(leftNode);\n    }\n    if (group.right !== \".\") {\n      var rightNode = new MathNode(\"mo\", [makeText(group.right, group.mode)]);\n      rightNode.setAttribute(\"fence\", \"true\");\n      if (group.rightColor) {\n        rightNode.setAttribute(\"mathcolor\", group.rightColor);\n      }\n      inner.push(rightNode);\n    }\n    return makeRow(inner);\n  }\n});\ndefineFunction({\n  type: \"middle\",\n  names: [\"\\\\middle\"],\n  props: {\n    numArgs: 1,\n    primitive: true\n  },\n  handler: (context, args) => {\n    var delim = checkDelimiter(args[0], context);\n    if (!context.parser.leftrightDepth) {\n      throw new ParseError(\"\\\\middle without preceding \\\\left\", delim);\n    }\n    return {\n      type: \"middle\",\n      mode: context.parser.mode,\n      delim: delim.text\n    };\n  },\n  htmlBuilder: (group, options) => {\n    var middleDelim;\n    if (group.delim === \".\") {\n      middleDelim = makeNullDelimiter(options, []);\n    } else {\n      middleDelim = makeSizedDelim(group.delim, 1, options, group.mode, []);\n      var isMiddle = {\n        delim: group.delim,\n        options\n      };\n      // Property `isMiddle` not defined on `span`. It is only used in\n      // this file above.\n      // TODO: Fix this violation of the `span` type and possibly rename\n      // things since `isMiddle` sounds like a boolean, but is a struct.\n      // TODO(ts)\n      middleDelim.isMiddle = isMiddle;\n    }\n    return middleDelim;\n  },\n  mathmlBuilder: (group, options) => {\n    // A Firefox \\middle will stretch a character vertically only if it\n    // is in the fence part of the operator dictionary at:\n    // https://www.w3.org/TR/MathML3/appendixc.html.\n    // So we need to avoid U+2223 and use plain \"|\" instead.\n    var textNode = group.delim === \"\\\\vert\" || group.delim === \"|\" ? makeText(\"|\", \"text\") : makeText(group.delim, group.mode);\n    var middleNode = new MathNode(\"mo\", [textNode]);\n    middleNode.setAttribute(\"fence\", \"true\");\n    // MathML gives 5/18em spacing to each <mo> element.\n    // \\middle should get delimiter spacing instead.\n    middleNode.setAttribute(\"lspace\", \"0.05em\");\n    middleNode.setAttribute(\"rspace\", \"0.05em\");\n    return middleNode;\n  }\n});\n\nvar htmlBuilder$7 = (group, options) => {\n  // \\cancel, \\bcancel, \\xcancel, \\sout, \\fbox, \\colorbox, \\fcolorbox, \\phase\n  // Some groups can return document fragments.  Handle those by wrapping\n  // them in a span.\n  var inner = wrapFragment(buildGroup$1(group.body, options), options);\n  var label = group.label.slice(1);\n  var scale = options.sizeMultiplier;\n  var img;\n  var imgShift = 0;\n  // In the LaTeX cancel package, line geometry is slightly different\n  // depending on whether the subject is wider than it is tall, or vice versa.\n  // We don't know the width of a group, so as a proxy, we test if\n  // the subject is a single character. This captures most of the\n  // subjects that should get the \"tall\" treatment.\n  var isSingleChar = isCharacterBox(group.body);\n  if (label === \"sout\") {\n    img = makeSpan([\"stretchy\", \"sout\"]);\n    img.height = options.fontMetrics().defaultRuleThickness / scale;\n    imgShift = -0.5 * options.fontMetrics().xHeight;\n  } else if (label === \"phase\") {\n    // Set a couple of dimensions from the steinmetz package.\n    var lineWeight = calculateSize({\n      number: 0.6,\n      unit: \"pt\"\n    }, options);\n    var clearance = calculateSize({\n      number: 0.35,\n      unit: \"ex\"\n    }, options);\n    // Prevent size changes like \\Huge from affecting line thickness\n    var newOptions = options.havingBaseSizing();\n    scale = scale / newOptions.sizeMultiplier;\n    var angleHeight = inner.height + inner.depth + lineWeight + clearance;\n    // Reserve a left pad for the angle.\n    inner.style.paddingLeft = makeEm(angleHeight / 2 + lineWeight);\n    // Create an SVG\n    var viewBoxHeight = Math.floor(1000 * angleHeight * scale);\n    var path = phasePath(viewBoxHeight);\n    var svgNode = new SvgNode([new PathNode(\"phase\", path)], {\n      \"width\": \"400em\",\n      \"height\": makeEm(viewBoxHeight / 1000),\n      \"viewBox\": \"0 0 400000 \" + viewBoxHeight,\n      \"preserveAspectRatio\": \"xMinYMin slice\"\n    });\n    // Wrap it in a span with overflow: hidden.\n    img = makeSvgSpan([\"hide-tail\"], [svgNode], options);\n    img.style.height = makeEm(angleHeight);\n    imgShift = inner.depth + lineWeight + clearance;\n  } else {\n    // Add horizontal padding\n    if (/cancel/.test(label)) {\n      if (!isSingleChar) {\n        inner.classes.push(\"cancel-pad\");\n      }\n    } else if (label === \"angl\") {\n      inner.classes.push(\"anglpad\");\n    } else {\n      inner.classes.push(\"boxpad\");\n    }\n    // Add vertical padding\n    var topPad = 0;\n    var bottomPad = 0;\n    var ruleThickness = 0;\n    // ref: cancel package: \\advance\\totalheight2\\p@ % \"+2\"\n    if (/box/.test(label)) {\n      ruleThickness = Math.max(options.fontMetrics().fboxrule,\n      // default\n      options.minRuleThickness);\n      topPad = options.fontMetrics().fboxsep + (label === \"colorbox\" ? 0 : ruleThickness);\n      bottomPad = topPad;\n    } else if (label === \"angl\") {\n      ruleThickness = Math.max(options.fontMetrics().defaultRuleThickness, options.minRuleThickness);\n      topPad = 4 * ruleThickness; // gap = 3 × line, plus the line itself.\n      bottomPad = Math.max(0, 0.25 - inner.depth);\n    } else {\n      topPad = isSingleChar ? 0.2 : 0;\n      bottomPad = topPad;\n    }\n    img = stretchyEnclose(inner, label, topPad, bottomPad, options);\n    if (/fbox|boxed|fcolorbox/.test(label)) {\n      img.style.borderStyle = \"solid\";\n      img.style.borderWidth = makeEm(ruleThickness);\n    } else if (label === \"angl\" && ruleThickness !== 0.049) {\n      img.style.borderTopWidth = makeEm(ruleThickness);\n      img.style.borderRightWidth = makeEm(ruleThickness);\n    }\n    imgShift = inner.depth + bottomPad;\n    if (group.backgroundColor) {\n      img.style.backgroundColor = group.backgroundColor;\n      if (group.borderColor) {\n        img.style.borderColor = group.borderColor;\n      }\n    }\n  }\n  var vlist;\n  if (group.backgroundColor) {\n    vlist = makeVList({\n      positionType: \"individualShift\",\n      children: [\n      // Put the color background behind inner;\n      {\n        type: \"elem\",\n        elem: img,\n        shift: imgShift\n      }, {\n        type: \"elem\",\n        elem: inner,\n        shift: 0\n      }]\n    });\n  } else {\n    var classes = /cancel|phase/.test(label) ? [\"svg-align\"] : [];\n    vlist = makeVList({\n      positionType: \"individualShift\",\n      children: [\n      // Write the \\cancel stroke on top of inner.\n      {\n        type: \"elem\",\n        elem: inner,\n        shift: 0\n      }, {\n        type: \"elem\",\n        elem: img,\n        shift: imgShift,\n        wrapperClasses: classes\n      }]\n    });\n  }\n  if (/cancel/.test(label)) {\n    // The cancel package documentation says that cancel lines add their height\n    // to the expression, but tests show that isn't how it actually works.\n    vlist.height = inner.height;\n    vlist.depth = inner.depth;\n  }\n  if (/cancel/.test(label) && !isSingleChar) {\n    // cancel does not create horiz space for its line extension.\n    return makeSpan([\"mord\", \"cancel-lap\"], [vlist], options);\n  } else {\n    return makeSpan([\"mord\"], [vlist], options);\n  }\n};\nvar mathmlBuilder$6 = (group, options) => {\n  var fboxsep = 0;\n  var node = new MathNode(group.label.includes(\"colorbox\") ? \"mpadded\" : \"menclose\", [buildGroup(group.body, options)]);\n  switch (group.label) {\n    case \"\\\\cancel\":\n      node.setAttribute(\"notation\", \"updiagonalstrike\");\n      break;\n    case \"\\\\bcancel\":\n      node.setAttribute(\"notation\", \"downdiagonalstrike\");\n      break;\n    case \"\\\\phase\":\n      node.setAttribute(\"notation\", \"phasorangle\");\n      break;\n    case \"\\\\sout\":\n      node.setAttribute(\"notation\", \"horizontalstrike\");\n      break;\n    case \"\\\\fbox\":\n      node.setAttribute(\"notation\", \"box\");\n      break;\n    case \"\\\\angl\":\n      node.setAttribute(\"notation\", \"actuarial\");\n      break;\n    case \"\\\\fcolorbox\":\n    case \"\\\\colorbox\":\n      // <menclose> doesn't have a good notation option. So use <mpadded>\n      // instead. Set some attributes that come included with <menclose>.\n      fboxsep = options.fontMetrics().fboxsep * options.fontMetrics().ptPerEm;\n      node.setAttribute(\"width\", \"+\" + 2 * fboxsep + \"pt\");\n      node.setAttribute(\"height\", \"+\" + 2 * fboxsep + \"pt\");\n      node.setAttribute(\"lspace\", fboxsep + \"pt\"); //\n      node.setAttribute(\"voffset\", fboxsep + \"pt\");\n      if (group.label === \"\\\\fcolorbox\") {\n        var thk = Math.max(options.fontMetrics().fboxrule,\n        // default\n        options.minRuleThickness);\n        node.setAttribute(\"style\", \"border: \" + makeEm(thk) + \" solid \" + group.borderColor);\n      }\n      break;\n    case \"\\\\xcancel\":\n      node.setAttribute(\"notation\", \"updiagonalstrike downdiagonalstrike\");\n      break;\n  }\n  if (group.backgroundColor) {\n    node.setAttribute(\"mathbackground\", group.backgroundColor);\n  }\n  return node;\n};\ndefineFunction({\n  type: \"enclose\",\n  names: [\"\\\\colorbox\"],\n  props: {\n    numArgs: 2,\n    allowedInText: true,\n    argTypes: [\"color\", \"text\"]\n  },\n  handler(_ref, args, optArgs) {\n    var {\n      parser,\n      funcName\n    } = _ref;\n    var color = assertNodeType(args[0], \"color-token\").color;\n    var body = args[1];\n    return {\n      type: \"enclose\",\n      mode: parser.mode,\n      label: funcName,\n      backgroundColor: color,\n      body\n    };\n  },\n  htmlBuilder: htmlBuilder$7,\n  mathmlBuilder: mathmlBuilder$6\n});\ndefineFunction({\n  type: \"enclose\",\n  names: [\"\\\\fcolorbox\"],\n  props: {\n    numArgs: 3,\n    allowedInText: true,\n    argTypes: [\"color\", \"color\", \"text\"]\n  },\n  handler(_ref2, args, optArgs) {\n    var {\n      parser,\n      funcName\n    } = _ref2;\n    var borderColor = assertNodeType(args[0], \"color-token\").color;\n    var backgroundColor = assertNodeType(args[1], \"color-token\").color;\n    var body = args[2];\n    return {\n      type: \"enclose\",\n      mode: parser.mode,\n      label: funcName,\n      backgroundColor,\n      borderColor,\n      body\n    };\n  },\n  htmlBuilder: htmlBuilder$7,\n  mathmlBuilder: mathmlBuilder$6\n});\ndefineFunction({\n  type: \"enclose\",\n  names: [\"\\\\fbox\"],\n  props: {\n    numArgs: 1,\n    argTypes: [\"hbox\"],\n    allowedInText: true\n  },\n  handler(_ref3, args) {\n    var {\n      parser\n    } = _ref3;\n    return {\n      type: \"enclose\",\n      mode: parser.mode,\n      label: \"\\\\fbox\",\n      body: args[0]\n    };\n  }\n});\ndefineFunction({\n  type: \"enclose\",\n  names: [\"\\\\cancel\", \"\\\\bcancel\", \"\\\\xcancel\", \"\\\\phase\"],\n  props: {\n    numArgs: 1\n  },\n  handler(_ref4, args) {\n    var {\n      parser,\n      funcName\n    } = _ref4;\n    var body = args[0];\n    return {\n      type: \"enclose\",\n      mode: parser.mode,\n      label: funcName,\n      body\n    };\n  },\n  htmlBuilder: htmlBuilder$7,\n  mathmlBuilder: mathmlBuilder$6\n});\ndefineFunction({\n  type: \"enclose\",\n  names: [\"\\\\sout\"],\n  props: {\n    numArgs: 1,\n    allowedInText: true\n  },\n  handler(_ref5, args) {\n    var {\n      parser,\n      funcName\n    } = _ref5;\n    if (parser.mode === \"math\") {\n      parser.settings.reportNonstrict(\"mathVsSout\", \"LaTeX's \\\\sout works only in text mode\");\n    }\n    var body = args[0];\n    return {\n      type: \"enclose\",\n      mode: parser.mode,\n      label: funcName,\n      body\n    };\n  },\n  htmlBuilder: htmlBuilder$7,\n  mathmlBuilder: mathmlBuilder$6\n});\ndefineFunction({\n  type: \"enclose\",\n  names: [\"\\\\angl\"],\n  props: {\n    numArgs: 1,\n    argTypes: [\"hbox\"],\n    allowedInText: false\n  },\n  handler(_ref6, args) {\n    var {\n      parser\n    } = _ref6;\n    return {\n      type: \"enclose\",\n      mode: parser.mode,\n      label: \"\\\\angl\",\n      body: args[0]\n    };\n  }\n});\n\n/**\n * All registered environments.\n * `environments.js` exports this same dictionary again and makes it public.\n * `Parser.js` requires this dictionary via `environments.js`.\n */\nvar _environments = {};\nfunction defineEnvironment(_ref) {\n  var {\n    type,\n    names,\n    props,\n    handler,\n    htmlBuilder,\n    mathmlBuilder\n  } = _ref;\n  // Set default values of environments.\n  var data = {\n    type,\n    numArgs: props.numArgs || 0,\n    allowedInText: false,\n    numOptionalArgs: 0,\n    handler\n  };\n  for (var i = 0; i < names.length; ++i) {\n    // TODO: The value type of _environments should be a type union of all\n    // possible `EnvSpec<>` possibilities instead of `EnvSpec<*>`, which is\n    // an existential type.\n    _environments[names[i]] = data;\n  }\n  if (htmlBuilder) {\n    _htmlGroupBuilders[type] = htmlBuilder;\n  }\n  if (mathmlBuilder) {\n    _mathmlGroupBuilders[type] = mathmlBuilder;\n  }\n}\n\n/**\n * All registered global/built-in macros.\n * `macros.js` exports this same dictionary again and makes it public.\n * `Parser.js` requires this dictionary via `macros.js`.\n */\nvar _macros = {};\n// This function might one day accept an additional argument and do more things.\nfunction defineMacro(name, body) {\n  _macros[name] = body;\n}\n\n/**\n * Lexing or parsing positional information for error reporting.\n * This object is immutable.\n */\nclass SourceLocation {\n  // The + prefix indicates that these fields aren't writeable\n  // Lexer holding the input string.\n  // Start offset, zero-based inclusive.\n  // End offset, zero-based exclusive.\n  constructor(lexer, start, end) {\n    this.lexer = lexer;\n    this.start = start;\n    this.end = end;\n  }\n  /**\n   * Merges two `SourceLocation`s from location providers, given they are\n   * provided in order of appearance.\n   * - Returns the first one's location if only the first is provided.\n   * - Returns a merged range of the first and the last if both are provided\n   *   and their lexers match.\n   * - Otherwise, returns null.\n   */\n  static range(first, second) {\n    if (!second) {\n      return first && first.loc;\n    } else if (!first || !first.loc || !second.loc || first.loc.lexer !== second.loc.lexer) {\n      return null;\n    } else {\n      return new SourceLocation(first.loc.lexer, first.loc.start, second.loc.end);\n    }\n  }\n}\n\n/**\n * The resulting token returned from `lex`.\n *\n * It consists of the token text plus some position information.\n * The position information is essentially a range in an input string,\n * but instead of referencing the bare input string, we refer to the lexer.\n * That way it is possible to attach extra metadata to the input string,\n * like for example a file name or similar.\n *\n * The position information is optional, so it is OK to construct synthetic\n * tokens if appropriate. Not providing available position information may\n * lead to degraded error reporting, though.\n */\nclass Token {\n  // don't expand the token\n  // used in \\noexpand\n  constructor(text,\n  // the text of this token\n  loc) {\n    this.text = text;\n    this.loc = loc;\n  }\n  /**\n   * Given a pair of tokens (this and endToken), compute a `Token` encompassing\n   * the whole input range enclosed by these two.\n   */\n  range(endToken,\n  // last token of the range, inclusive\n  text) {\n    return new Token(text, SourceLocation.range(this, endToken));\n  }\n}\n\n// Helper functions\nfunction getHLines(parser) {\n  // Return an array. The array length = number of hlines.\n  // Each element in the array tells if the line is dashed.\n  var hlineInfo = [];\n  parser.consumeSpaces();\n  var nxt = parser.fetch().text;\n  if (nxt === \"\\\\relax\") {\n    // \\relax is an artifact of the \\cr macro below\n    parser.consume();\n    parser.consumeSpaces();\n    nxt = parser.fetch().text;\n  }\n  while (nxt === \"\\\\hline\" || nxt === \"\\\\hdashline\") {\n    parser.consume();\n    hlineInfo.push(nxt === \"\\\\hdashline\");\n    parser.consumeSpaces();\n    nxt = parser.fetch().text;\n  }\n  return hlineInfo;\n}\nvar validateAmsEnvironmentContext = context => {\n  var settings = context.parser.settings;\n  if (!settings.displayMode) {\n    throw new ParseError(\"{\" + context.envName + \"} can be used only in\" + \" display mode.\");\n  }\n};\nvar gatherEnvironments = new Set([\"gather\", \"gather*\"]);\n// autoTag (an argument to parseArray) can be one of three values:\n// * undefined: Regular (not-top-level) array; no tags on each row\n// * true: Automatic equation numbering, overridable by \\tag\n// * false: Tags allowed on each row, but no automatic numbering\n// This function *doesn't* work with the \"split\" environment name.\nfunction getAutoTag(name) {\n  if (!name.includes(\"ed\")) {\n    return !name.includes(\"*\");\n  }\n  // return undefined;\n}\n/**\n * Parse the body of the environment, with rows delimited by \\\\ and\n * columns delimited by &, and create a nested list in row-major order\n * with one group per cell.  If given an optional argument style\n * (\"text\", \"display\", etc.), then each cell is cast into that style.\n */\nfunction parseArray(parser, _ref, style) {\n  var {\n    hskipBeforeAndAfter,\n    addJot,\n    cols,\n    arraystretch,\n    colSeparationType,\n    autoTag,\n    singleRow,\n    emptySingleRow,\n    maxNumCols,\n    leqno\n  } = _ref;\n  parser.gullet.beginGroup();\n  if (!singleRow) {\n    // \\cr is equivalent to \\\\ without the optional size argument (see below)\n    // TODO: provide helpful error when \\cr is used outside array environment\n    parser.gullet.macros.set(\"\\\\cr\", \"\\\\\\\\\\\\relax\");\n  }\n  // Get current arraystretch if it's not set by the environment\n  if (!arraystretch) {\n    var stretch = parser.gullet.expandMacroAsText(\"\\\\arraystretch\");\n    if (stretch == null) {\n      // Default \\arraystretch from lttab.dtx\n      arraystretch = 1;\n    } else {\n      arraystretch = parseFloat(stretch);\n      if (!arraystretch || arraystretch < 0) {\n        throw new ParseError(\"Invalid \\\\arraystretch: \" + stretch);\n      }\n    }\n  }\n  // Start group for first cell\n  parser.gullet.beginGroup();\n  var row = [];\n  var body = [row];\n  var rowGaps = [];\n  var hLinesBeforeRow = [];\n  var tags = autoTag != null ? [] : undefined;\n  // amsmath uses \\global\\@eqnswtrue and \\global\\@eqnswfalse to represent\n  // whether this row should have an equation number.  Simulate this with\n  // a \\@eqnsw macro set to 1 or 0.\n  function beginRow() {\n    if (autoTag) {\n      parser.gullet.macros.set(\"\\\\@eqnsw\", \"1\", true);\n    }\n  }\n  function endRow() {\n    if (tags) {\n      if (parser.gullet.macros.get(\"\\\\df@tag\")) {\n        tags.push(parser.subparse([new Token(\"\\\\df@tag\")]));\n        parser.gullet.macros.set(\"\\\\df@tag\", undefined, true);\n      } else {\n        tags.push(Boolean(autoTag) && parser.gullet.macros.get(\"\\\\@eqnsw\") === \"1\");\n      }\n    }\n  }\n  beginRow();\n  // Test for \\hline at the top of the array.\n  hLinesBeforeRow.push(getHLines(parser));\n  while (true) {\n    // eslint-disable-line no-constant-condition\n    // Parse each cell in its own group (namespace)\n    var cellBody = parser.parseExpression(false, singleRow ? \"\\\\end\" : \"\\\\\\\\\");\n    parser.gullet.endGroup();\n    parser.gullet.beginGroup();\n    var cell = {\n      type: \"ordgroup\",\n      mode: parser.mode,\n      body: cellBody\n    };\n    if (style) {\n      cell = {\n        type: \"styling\",\n        mode: parser.mode,\n        style,\n        body: [cell]\n      };\n    }\n    row.push(cell);\n    var next = parser.fetch().text;\n    if (next === \"&\") {\n      if (maxNumCols && row.length === maxNumCols) {\n        if (singleRow || colSeparationType) {\n          // {equation} or {split}\n          throw new ParseError(\"Too many tab characters: &\", parser.nextToken);\n        } else {\n          // {array} environment\n          parser.settings.reportNonstrict(\"textEnv\", \"Too few columns \" + \"specified in the {array} column argument.\");\n        }\n      }\n      parser.consume();\n    } else if (next === \"\\\\end\") {\n      endRow();\n      // Arrays terminate newlines with `\\crcr` which consumes a `\\cr` if\n      // the last line is empty.  However, AMS environments keep the\n      // empty row if it's the only one.\n      // NOTE: Currently, `cell` is the last item added into `row`.\n      if (row.length === 1 && cell.type === \"styling\" && cell.body.length === 1 && cell.body[0].type === \"ordgroup\" && cell.body[0].body.length === 0 && (body.length > 1 || !emptySingleRow)) {\n        body.pop();\n      }\n      if (hLinesBeforeRow.length < body.length + 1) {\n        hLinesBeforeRow.push([]);\n      }\n      break;\n    } else if (next === \"\\\\\\\\\") {\n      parser.consume();\n      var size = void 0;\n      // \\def\\Let@{\\let\\\\\\math@cr}\n      // \\def\\math@cr{...\\math@cr@}\n      // \\def\\math@cr@{\\new@ifnextchar[\\math@cr@@{\\math@cr@@[\\z@]}}\n      // \\def\\math@cr@@[#1]{...\\math@cr@@@...}\n      // \\def\\math@cr@@@{\\cr}\n      if (parser.gullet.future().text !== \" \") {\n        size = parser.parseSizeGroup(true);\n      }\n      rowGaps.push(size ? size.value : null);\n      endRow();\n      // check for \\hline(s) following the row separator\n      hLinesBeforeRow.push(getHLines(parser));\n      row = [];\n      body.push(row);\n      beginRow();\n    } else {\n      throw new ParseError(\"Expected & or \\\\\\\\ or \\\\cr or \\\\end\", parser.nextToken);\n    }\n  }\n  // End cell group\n  parser.gullet.endGroup();\n  // End array group defining \\cr\n  parser.gullet.endGroup();\n  return {\n    type: \"array\",\n    mode: parser.mode,\n    addJot,\n    arraystretch,\n    body,\n    cols,\n    rowGaps,\n    hskipBeforeAndAfter,\n    hLinesBeforeRow,\n    colSeparationType,\n    tags,\n    leqno\n  };\n}\n// Decides on a style for cells in an array according to whether the given\n// environment name starts with the letter 'd'.\nfunction dCellStyle(envName) {\n  if (envName.slice(0, 1) === \"d\") {\n    return \"display\";\n  } else {\n    return \"text\";\n  }\n}\nvar htmlBuilder$6 = function htmlBuilder(group, options) {\n  var r;\n  var c;\n  var nr = group.body.length;\n  var hLinesBeforeRow = group.hLinesBeforeRow;\n  var nc = 0;\n  var body = new Array(nr);\n  var hlines = [];\n  var ruleThickness = Math.max(\n  // From LaTeX \\showthe\\arrayrulewidth. Equals 0.04 em.\n  options.fontMetrics().arrayRuleWidth, options.minRuleThickness);\n  // Horizontal spacing\n  var pt = 1 / options.fontMetrics().ptPerEm;\n  var arraycolsep = 5 * pt; // default value, i.e. \\arraycolsep in article.cls\n  if (group.colSeparationType && group.colSeparationType === \"small\") {\n    // We're in a {smallmatrix}. Default column space is \\thickspace,\n    // i.e. 5/18em = 0.2778em, per amsmath.dtx for {smallmatrix}.\n    // But that needs adjustment because LaTeX applies \\scriptstyle to the\n    // entire array, including the colspace, but this function applies\n    // \\scriptstyle only inside each element.\n    var localMultiplier = options.havingStyle(Style$1.SCRIPT).sizeMultiplier;\n    arraycolsep = 0.2778 * (localMultiplier / options.sizeMultiplier);\n  }\n  // Vertical spacing\n  var baselineskip = group.colSeparationType === \"CD\" ? calculateSize({\n    number: 3,\n    unit: \"ex\"\n  }, options) : 12 * pt; // see size10.clo\n  // Default \\jot from ltmath.dtx\n  // TODO(edemaine): allow overriding \\jot via \\setlength (#687)\n  var jot = 3 * pt;\n  var arrayskip = group.arraystretch * baselineskip;\n  var arstrutHeight = 0.7 * arrayskip; // \\strutbox in ltfsstrc.dtx and\n  var arstrutDepth = 0.3 * arrayskip; // \\@arstrutbox in lttab.dtx\n  var totalHeight = 0;\n  // Set a position for \\hline(s) at the top of the array, if any.\n  function setHLinePos(hlinesInGap) {\n    for (var i = 0; i < hlinesInGap.length; ++i) {\n      if (i > 0) {\n        totalHeight += 0.25;\n      }\n      hlines.push({\n        pos: totalHeight,\n        isDashed: hlinesInGap[i]\n      });\n    }\n  }\n  setHLinePos(hLinesBeforeRow[0]);\n  for (r = 0; r < group.body.length; ++r) {\n    var inrow = group.body[r];\n    var height = arstrutHeight; // \\@array adds an \\@arstrut\n    var depth = arstrutDepth; // to each tow (via the template)\n    if (nc < inrow.length) {\n      nc = inrow.length;\n    }\n    var outrow = new Array(inrow.length);\n    for (c = 0; c < inrow.length; ++c) {\n      var elt = buildGroup$1(inrow[c], options);\n      if (depth < elt.depth) {\n        depth = elt.depth;\n      }\n      if (height < elt.height) {\n        height = elt.height;\n      }\n      outrow[c] = elt;\n    }\n    var rowGap = group.rowGaps[r];\n    var gap = 0;\n    if (rowGap) {\n      gap = calculateSize(rowGap, options);\n      if (gap > 0) {\n        // \\@argarraycr\n        gap += arstrutDepth;\n        if (depth < gap) {\n          depth = gap; // \\@xargarraycr\n        }\n        gap = 0;\n      }\n    }\n    // In AMS multiline environments such as aligned and gathered, rows\n    // correspond to lines that have additional \\jot added between lines\n    // via \\openup.\n    // We simulate this by adding \\jot depth to each row except the last.\n    if (group.addJot && r < group.body.length - 1) {\n      depth += jot;\n    }\n    outrow.height = height;\n    outrow.depth = depth;\n    totalHeight += height;\n    outrow.pos = totalHeight;\n    totalHeight += depth + gap; // \\@yargarraycr\n    body[r] = outrow;\n    // Set a position for \\hline(s), if any.\n    setHLinePos(hLinesBeforeRow[r + 1]);\n  }\n  var offset = totalHeight / 2 + options.fontMetrics().axisHeight;\n  var colDescriptions = group.cols || [];\n  var cols = [];\n  var colSep;\n  var colDescrNum;\n  var tagSpans = [];\n  if (group.tags && group.tags.some(tag => tag)) {\n    // An environment with manual tags and/or automatic equation numbers.\n    // Create node(s), the latter of which trigger CSS counter increment.\n    for (r = 0; r < nr; ++r) {\n      var rw = body[r];\n      var shift = rw.pos - offset;\n      var tag = group.tags[r];\n      var tagSpan = void 0;\n      if (tag === true) {\n        // automatic numbering\n        tagSpan = makeSpan([\"eqn-num\"], [], options);\n      } else if (tag === false) {\n        // \\nonumber/\\notag or starred environment\n        tagSpan = makeSpan([], [], options);\n      } else {\n        // manual \\tag\n        tagSpan = makeSpan([], buildExpression$1(tag, options, true), options);\n      }\n      tagSpan.depth = rw.depth;\n      tagSpan.height = rw.height;\n      tagSpans.push({\n        type: \"elem\",\n        elem: tagSpan,\n        shift\n      });\n    }\n  }\n  for (c = 0, colDescrNum = 0;\n  // Continue while either there are more columns or more column\n  // descriptions, so trailing separators don't get lost.\n  c < nc || colDescrNum < colDescriptions.length; ++c, ++colDescrNum) {\n    var _colDescr3;\n    var colDescr = colDescriptions[colDescrNum];\n    var firstSeparator = true;\n    while (((_colDescr = colDescr) == null ? void 0 : _colDescr.type) === \"separator\") {\n      var _colDescr;\n      // If there is more than one separator in a row, add a space\n      // between them.\n      if (!firstSeparator) {\n        colSep = makeSpan([\"arraycolsep\"], []);\n        colSep.style.width = makeEm(options.fontMetrics().doubleRuleSep);\n        cols.push(colSep);\n      }\n      if (colDescr.separator === \"|\" || colDescr.separator === \":\") {\n        var lineType = colDescr.separator === \"|\" ? \"solid\" : \"dashed\";\n        var separator = makeSpan([\"vertical-separator\"], [], options);\n        separator.style.height = makeEm(totalHeight);\n        separator.style.borderRightWidth = makeEm(ruleThickness);\n        separator.style.borderRightStyle = lineType;\n        separator.style.margin = \"0 \" + makeEm(-ruleThickness / 2);\n        var _shift = totalHeight - offset;\n        if (_shift) {\n          separator.style.verticalAlign = makeEm(-_shift);\n        }\n        cols.push(separator);\n      } else {\n        throw new ParseError(\"Invalid separator type: \" + colDescr.separator);\n      }\n      colDescrNum++;\n      colDescr = colDescriptions[colDescrNum];\n      firstSeparator = false;\n    }\n    if (c >= nc) {\n      continue;\n    }\n    var sepwidth = void 0;\n    if (c > 0 || group.hskipBeforeAndAfter) {\n      var _colDescr$pregap, _colDescr2;\n      sepwidth = (_colDescr$pregap = (_colDescr2 = colDescr) == null ? void 0 : _colDescr2.pregap) != null ? _colDescr$pregap : arraycolsep;\n      if (sepwidth !== 0) {\n        colSep = makeSpan([\"arraycolsep\"], []);\n        colSep.style.width = makeEm(sepwidth);\n        cols.push(colSep);\n      }\n    }\n    var colElems = [];\n    for (r = 0; r < nr; ++r) {\n      var row = body[r];\n      var elem = row[c];\n      if (!elem) {\n        continue;\n      }\n      var _shift2 = row.pos - offset;\n      elem.depth = row.depth;\n      elem.height = row.height;\n      colElems.push({\n        type: \"elem\",\n        elem: elem,\n        shift: _shift2\n      });\n    }\n    var colVList = makeVList({\n      positionType: \"individualShift\",\n      children: colElems\n    });\n    var colSpan = makeSpan([\"col-align-\" + (((_colDescr3 = colDescr) == null ? void 0 : _colDescr3.align) || \"c\")], [colVList]);\n    cols.push(colSpan);\n    if (c < nc - 1 || group.hskipBeforeAndAfter) {\n      var _colDescr$postgap, _colDescr4;\n      sepwidth = (_colDescr$postgap = (_colDescr4 = colDescr) == null ? void 0 : _colDescr4.postgap) != null ? _colDescr$postgap : arraycolsep;\n      if (sepwidth !== 0) {\n        colSep = makeSpan([\"arraycolsep\"], []);\n        colSep.style.width = makeEm(sepwidth);\n        cols.push(colSep);\n      }\n    }\n  }\n  var tableBody = makeSpan([\"mtable\"], cols);\n  // Add \\hline(s), if any.\n  if (hlines.length > 0) {\n    var line = makeLineSpan(\"hline\", options, ruleThickness);\n    var dashes = makeLineSpan(\"hdashline\", options, ruleThickness);\n    var vListElems = [{\n      type: \"elem\",\n      elem: tableBody,\n      shift: 0\n    }];\n    while (hlines.length > 0) {\n      var hline = hlines.pop();\n      var lineShift = hline.pos - offset;\n      if (hline.isDashed) {\n        vListElems.push({\n          type: \"elem\",\n          elem: dashes,\n          shift: lineShift\n        });\n      } else {\n        vListElems.push({\n          type: \"elem\",\n          elem: line,\n          shift: lineShift\n        });\n      }\n    }\n    tableBody = makeVList({\n      positionType: \"individualShift\",\n      children: vListElems\n    });\n  }\n  if (tagSpans.length === 0) {\n    return makeSpan([\"mord\"], [tableBody], options);\n  } else {\n    var eqnNumCol = makeVList({\n      positionType: \"individualShift\",\n      children: tagSpans\n    });\n    var tagCol = makeSpan([\"tag\"], [eqnNumCol], options);\n    return makeFragment([tableBody, tagCol]);\n  }\n};\nvar alignMap = {\n  c: \"center \",\n  l: \"left \",\n  r: \"right \"\n};\nvar mathmlBuilder$5 = function mathmlBuilder(group, options) {\n  var tbl = [];\n  var glue = new MathNode(\"mtd\", [], [\"mtr-glue\"]);\n  var tag = new MathNode(\"mtd\", [], [\"mml-eqn-num\"]);\n  for (var i = 0; i < group.body.length; i++) {\n    var rw = group.body[i];\n    var row = [];\n    for (var j = 0; j < rw.length; j++) {\n      row.push(new MathNode(\"mtd\", [buildGroup(rw[j], options)]));\n    }\n    if (group.tags && group.tags[i]) {\n      row.unshift(glue);\n      row.push(glue);\n      if (group.leqno) {\n        row.unshift(tag);\n      } else {\n        row.push(tag);\n      }\n    }\n    tbl.push(new MathNode(\"mtr\", row));\n  }\n  var table = new MathNode(\"mtable\", tbl);\n  // Set column alignment, row spacing, column spacing, and\n  // array lines by setting attributes on the table element.\n  // Set the row spacing. In MathML, we specify a gap distance.\n  // We do not use rowGap[] because MathML automatically increases\n  // cell height with the height/depth of the element content.\n  // LaTeX \\arraystretch multiplies the row baseline-to-baseline distance.\n  // We simulate this by adding (arraystretch - 1)em to the gap. This\n  // does a reasonable job of adjusting arrays containing 1 em tall content.\n  // The 0.16 and 0.09 values are found empirically. They produce an array\n  // similar to LaTeX and in which content does not interfere with \\hlines.\n  var gap = group.arraystretch === 0.5 ? 0.1 // {smallmatrix}, {subarray}\n  : 0.16 + group.arraystretch - 1 + (group.addJot ? 0.09 : 0);\n  table.setAttribute(\"rowspacing\", makeEm(gap));\n  // MathML table lines go only between cells.\n  // To place a line on an edge we'll use <menclose>, if necessary.\n  var menclose = \"\";\n  var align = \"\";\n  if (group.cols && group.cols.length > 0) {\n    // Find column alignment, column spacing, and  vertical lines.\n    var cols = group.cols;\n    var columnLines = \"\";\n    var prevTypeWasAlign = false;\n    var iStart = 0;\n    var iEnd = cols.length;\n    if (cols[0].type === \"separator\") {\n      menclose += \"top \";\n      iStart = 1;\n    }\n    if (cols[cols.length - 1].type === \"separator\") {\n      menclose += \"bottom \";\n      iEnd -= 1;\n    }\n    for (var _i = iStart; _i < iEnd; _i++) {\n      var col = cols[_i];\n      if (col.type === \"align\") {\n        align += alignMap[col.align];\n        if (prevTypeWasAlign) {\n          columnLines += \"none \";\n        }\n        prevTypeWasAlign = true;\n      } else if (col.type === \"separator\") {\n        // MathML accepts only single lines between cells.\n        // So we read only the first of consecutive separators.\n        if (prevTypeWasAlign) {\n          columnLines += col.separator === \"|\" ? \"solid \" : \"dashed \";\n          prevTypeWasAlign = false;\n        }\n      }\n    }\n    table.setAttribute(\"columnalign\", align.trim());\n    if (/[sd]/.test(columnLines)) {\n      table.setAttribute(\"columnlines\", columnLines.trim());\n    }\n  }\n  // Set column spacing.\n  if (group.colSeparationType === \"align\") {\n    var _cols = group.cols || [];\n    var spacing = \"\";\n    for (var _i2 = 1; _i2 < _cols.length; _i2++) {\n      spacing += _i2 % 2 ? \"0em \" : \"1em \";\n    }\n    table.setAttribute(\"columnspacing\", spacing.trim());\n  } else if (group.colSeparationType === \"alignat\" || group.colSeparationType === \"gather\") {\n    table.setAttribute(\"columnspacing\", \"0em\");\n  } else if (group.colSeparationType === \"small\") {\n    table.setAttribute(\"columnspacing\", \"0.2778em\");\n  } else if (group.colSeparationType === \"CD\") {\n    table.setAttribute(\"columnspacing\", \"0.5em\");\n  } else {\n    table.setAttribute(\"columnspacing\", \"1em\");\n  }\n  // Address \\hline and \\hdashline\n  var rowLines = \"\";\n  var hlines = group.hLinesBeforeRow;\n  menclose += hlines[0].length > 0 ? \"left \" : \"\";\n  menclose += hlines[hlines.length - 1].length > 0 ? \"right \" : \"\";\n  for (var _i3 = 1; _i3 < hlines.length - 1; _i3++) {\n    rowLines += hlines[_i3].length === 0 ? \"none \"\n    // MathML accepts only a single line between rows. Read one element.\n    : hlines[_i3][0] ? \"dashed \" : \"solid \";\n  }\n  if (/[sd]/.test(rowLines)) {\n    table.setAttribute(\"rowlines\", rowLines.trim());\n  }\n  if (menclose !== \"\") {\n    table = new MathNode(\"menclose\", [table]);\n    table.setAttribute(\"notation\", menclose.trim());\n  }\n  if (group.arraystretch && group.arraystretch < 1) {\n    // A small array. Wrap in scriptstyle so row gap is not too large.\n    table = new MathNode(\"mstyle\", [table]);\n    table.setAttribute(\"scriptlevel\", \"1\");\n  }\n  return table;\n};\n// Convenience function for align, align*, aligned, alignat, alignat*, alignedat.\nvar alignedHandler = function alignedHandler(context, args) {\n  if (!context.envName.includes(\"ed\")) {\n    validateAmsEnvironmentContext(context);\n  }\n  var cols = [];\n  var separationType = context.envName.includes(\"at\") ? \"alignat\" : \"align\";\n  var isSplit = context.envName === \"split\";\n  var res = parseArray(context.parser, {\n    cols,\n    addJot: true,\n    autoTag: isSplit ? undefined : getAutoTag(context.envName),\n    emptySingleRow: true,\n    colSeparationType: separationType,\n    maxNumCols: isSplit ? 2 : undefined,\n    leqno: context.parser.settings.leqno\n  }, \"display\");\n  // Determining number of columns.\n  // 1. If the first argument is given, we use it as a number of columns,\n  //    and makes sure that each row doesn't exceed that number.\n  // 2. Otherwise, just count number of columns = maximum number\n  //    of cells in each row (\"aligned\" mode -- isAligned will be true).\n  //\n  // At the same time, prepend empty group {} at beginning of every second\n  // cell in each row (starting with second cell) so that operators become\n  // binary.  This behavior is implemented in amsmath's \\start@aligned.\n  var numMaths = 0;\n  var numCols = 0;\n  var emptyGroup = {\n    type: \"ordgroup\",\n    mode: context.mode,\n    body: []\n  };\n  if (args[0] && args[0].type === \"ordgroup\") {\n    var arg0 = \"\";\n    for (var i = 0; i < args[0].body.length; i++) {\n      var textord = assertNodeType(args[0].body[i], \"textord\");\n      arg0 += textord.text;\n    }\n    numMaths = Number(arg0);\n    numCols = numMaths * 2;\n  }\n  var isAligned = !numCols;\n  res.body.forEach(function (row) {\n    for (var _i4 = 1; _i4 < row.length; _i4 += 2) {\n      // Modify ordgroup node within styling node\n      var styling = assertNodeType(row[_i4], \"styling\");\n      var ordgroup = assertNodeType(styling.body[0], \"ordgroup\");\n      ordgroup.body.unshift(emptyGroup);\n    }\n    if (!isAligned) {\n      // Case 1\n      var curMaths = row.length / 2;\n      if (numMaths < curMaths) {\n        throw new ParseError(\"Too many math in a row: \" + (\"expected \" + numMaths + \", but got \" + curMaths), row[0]);\n      }\n    } else if (numCols < row.length) {\n      // Case 2\n      numCols = row.length;\n    }\n  });\n  // Adjusting alignment.\n  // In aligned mode, we add one \\qquad between columns;\n  // otherwise we add nothing.\n  for (var _i5 = 0; _i5 < numCols; ++_i5) {\n    var align = \"r\";\n    var pregap = 0;\n    if (_i5 % 2 === 1) {\n      align = \"l\";\n    } else if (_i5 > 0 && isAligned) {\n      // \"aligned\" mode.\n      pregap = 1; // add one \\quad\n    }\n    cols[_i5] = {\n      type: \"align\",\n      align: align,\n      pregap: pregap,\n      postgap: 0\n    };\n  }\n  res.colSeparationType = isAligned ? \"align\" : \"alignat\";\n  return res;\n};\n// Arrays are part of LaTeX, defined in lttab.dtx so its documentation\n// is part of the source2e.pdf file of LaTeX2e source documentation.\n// {darray} is an {array} environment where cells are set in \\displaystyle,\n// as defined in nccmath.sty.\ndefineEnvironment({\n  type: \"array\",\n  names: [\"array\", \"darray\"],\n  props: {\n    numArgs: 1\n  },\n  handler(context, args) {\n    // Since no types are specified above, the two possibilities are\n    // - The argument is wrapped in {} or [], in which case Parser's\n    //   parseGroup() returns an \"ordgroup\" wrapping some symbol node.\n    // - The argument is a bare symbol node.\n    var symNode = checkSymbolNodeType(args[0]);\n    var colalign = symNode ? [args[0]] : assertNodeType(args[0], \"ordgroup\").body;\n    var cols = colalign.map(function (nde) {\n      var node = assertSymbolNodeType(nde);\n      var ca = node.text;\n      if (\"lcr\".includes(ca)) {\n        return {\n          type: \"align\",\n          align: ca\n        };\n      } else if (ca === \"|\") {\n        return {\n          type: \"separator\",\n          separator: \"|\"\n        };\n      } else if (ca === \":\") {\n        return {\n          type: \"separator\",\n          separator: \":\"\n        };\n      }\n      throw new ParseError(\"Unknown column alignment: \" + ca, nde);\n    });\n    var res = {\n      cols,\n      hskipBeforeAndAfter: true,\n      // \\@preamble in lttab.dtx\n      maxNumCols: cols.length\n    };\n    return parseArray(context.parser, res, dCellStyle(context.envName));\n  },\n  htmlBuilder: htmlBuilder$6,\n  mathmlBuilder: mathmlBuilder$5\n});\n// The matrix environments of amsmath builds on the array environment\n// of LaTeX, which is discussed above.\n// The mathtools package adds starred versions of the same environments.\n// These have an optional argument to choose left|center|right justification.\ndefineEnvironment({\n  type: \"array\",\n  names: [\"matrix\", \"pmatrix\", \"bmatrix\", \"Bmatrix\", \"vmatrix\", \"Vmatrix\", \"matrix*\", \"pmatrix*\", \"bmatrix*\", \"Bmatrix*\", \"vmatrix*\", \"Vmatrix*\"],\n  props: {\n    numArgs: 0\n  },\n  handler(context) {\n    var delimiters = {\n      \"matrix\": null,\n      \"pmatrix\": [\"(\", \")\"],\n      \"bmatrix\": [\"[\", \"]\"],\n      \"Bmatrix\": [\"\\\\{\", \"\\\\}\"],\n      \"vmatrix\": [\"|\", \"|\"],\n      \"Vmatrix\": [\"\\\\Vert\", \"\\\\Vert\"]\n    }[context.envName.replace(\"*\", \"\")];\n    // \\hskip -\\arraycolsep in amsmath\n    var colAlign = \"c\";\n    var payload = {\n      hskipBeforeAndAfter: false,\n      cols: [{\n        type: \"align\",\n        align: colAlign\n      }]\n    };\n    if (context.envName.charAt(context.envName.length - 1) === \"*\") {\n      // It's one of the mathtools starred functions.\n      // Parse the optional alignment argument.\n      var parser = context.parser;\n      parser.consumeSpaces();\n      if (parser.fetch().text === \"[\") {\n        parser.consume();\n        parser.consumeSpaces();\n        colAlign = parser.fetch().text;\n        if (!\"lcr\".includes(colAlign)) {\n          throw new ParseError(\"Expected l or c or r\", parser.nextToken);\n        }\n        parser.consume();\n        parser.consumeSpaces();\n        parser.expect(\"]\");\n        parser.consume();\n        payload.cols = [{\n          type: \"align\",\n          align: colAlign\n        }];\n      }\n    }\n    var res = parseArray(context.parser, payload, dCellStyle(context.envName));\n    // Populate cols with the correct number of column alignment specs.\n    var numCols = Math.max(0, ...res.body.map(row => row.length));\n    res.cols = new Array(numCols).fill({\n      type: \"align\",\n      align: colAlign\n    });\n    return delimiters ? {\n      type: \"leftright\",\n      mode: context.mode,\n      body: [res],\n      left: delimiters[0],\n      right: delimiters[1],\n      rightColor: undefined // \\right uninfluenced by \\color in array\n    } : res;\n  },\n  htmlBuilder: htmlBuilder$6,\n  mathmlBuilder: mathmlBuilder$5\n});\ndefineEnvironment({\n  type: \"array\",\n  names: [\"smallmatrix\"],\n  props: {\n    numArgs: 0\n  },\n  handler(context) {\n    var payload = {\n      arraystretch: 0.5\n    };\n    var res = parseArray(context.parser, payload, \"script\");\n    res.colSeparationType = \"small\";\n    return res;\n  },\n  htmlBuilder: htmlBuilder$6,\n  mathmlBuilder: mathmlBuilder$5\n});\ndefineEnvironment({\n  type: \"array\",\n  names: [\"subarray\"],\n  props: {\n    numArgs: 1\n  },\n  handler(context, args) {\n    // Parsing of {subarray} is similar to {array}\n    var symNode = checkSymbolNodeType(args[0]);\n    var colalign = symNode ? [args[0]] : assertNodeType(args[0], \"ordgroup\").body;\n    var cols = colalign.map(function (nde) {\n      var node = assertSymbolNodeType(nde);\n      var ca = node.text;\n      // {subarray} only recognizes \"l\" & \"c\"\n      if (\"lc\".includes(ca)) {\n        return {\n          type: \"align\",\n          align: ca\n        };\n      }\n      throw new ParseError(\"Unknown column alignment: \" + ca, nde);\n    });\n    if (cols.length > 1) {\n      throw new ParseError(\"{subarray} can contain only one column\");\n    }\n    var payload = {\n      cols,\n      hskipBeforeAndAfter: false,\n      arraystretch: 0.5\n    };\n    var res = parseArray(context.parser, payload, \"script\");\n    if (res.body.length > 0 && res.body[0].length > 1) {\n      throw new ParseError(\"{subarray} can contain only one column\");\n    }\n    return res;\n  },\n  htmlBuilder: htmlBuilder$6,\n  mathmlBuilder: mathmlBuilder$5\n});\n// A cases environment (in amsmath.sty) is almost equivalent to\n// \\def\\arraystretch{1.2}%\n// \\left\\{\\begin{array}{@{}l@{\\quad}l@{}} … \\end{array}\\right.\n// {dcases} is a {cases} environment where cells are set in \\displaystyle,\n// as defined in mathtools.sty.\n// {rcases} is another mathtools environment. It's brace is on the right side.\ndefineEnvironment({\n  type: \"array\",\n  names: [\"cases\", \"dcases\", \"rcases\", \"drcases\"],\n  props: {\n    numArgs: 0\n  },\n  handler(context) {\n    var payload = {\n      arraystretch: 1.2,\n      cols: [{\n        type: \"align\",\n        align: \"l\",\n        pregap: 0,\n        // TODO(kevinb) get the current style.\n        // For now we use the metrics for TEXT style which is what we were\n        // doing before.  Before attempting to get the current style we\n        // should look at TeX's behavior especially for \\over and matrices.\n        postgap: 1.0 /* 1em quad */\n      }, {\n        type: \"align\",\n        align: \"l\",\n        pregap: 0,\n        postgap: 0\n      }]\n    };\n    var res = parseArray(context.parser, payload, dCellStyle(context.envName));\n    return {\n      type: \"leftright\",\n      mode: context.mode,\n      body: [res],\n      left: context.envName.includes(\"r\") ? \".\" : \"\\\\{\",\n      right: context.envName.includes(\"r\") ? \"\\\\}\" : \".\",\n      rightColor: undefined\n    };\n  },\n  htmlBuilder: htmlBuilder$6,\n  mathmlBuilder: mathmlBuilder$5\n});\n// In the align environment, one uses ampersands, &, to specify number of\n// columns in each row, and to locate spacing between each column.\n// align gets automatic numbering. align* and aligned do not.\n// The alignedat environment can be used in math mode.\n// Note that we assume \\nomallineskiplimit to be zero,\n// so that \\strut@ is the same as \\strut.\ndefineEnvironment({\n  type: \"array\",\n  names: [\"align\", \"align*\", \"aligned\", \"split\"],\n  props: {\n    numArgs: 0\n  },\n  handler: alignedHandler,\n  htmlBuilder: htmlBuilder$6,\n  mathmlBuilder: mathmlBuilder$5\n});\n// A gathered environment is like an array environment with one centered\n// column, but where rows are considered lines so get \\jot line spacing\n// and contents are set in \\displaystyle.\ndefineEnvironment({\n  type: \"array\",\n  names: [\"gathered\", \"gather\", \"gather*\"],\n  props: {\n    numArgs: 0\n  },\n  handler(context) {\n    if (gatherEnvironments.has(context.envName)) {\n      validateAmsEnvironmentContext(context);\n    }\n    var res = {\n      cols: [{\n        type: \"align\",\n        align: \"c\"\n      }],\n      addJot: true,\n      colSeparationType: \"gather\",\n      autoTag: getAutoTag(context.envName),\n      emptySingleRow: true,\n      leqno: context.parser.settings.leqno\n    };\n    return parseArray(context.parser, res, \"display\");\n  },\n  htmlBuilder: htmlBuilder$6,\n  mathmlBuilder: mathmlBuilder$5\n});\n// alignat environment is like an align environment, but one must explicitly\n// specify maximum number of columns in each row, and can adjust spacing between\n// each columns.\ndefineEnvironment({\n  type: \"array\",\n  names: [\"alignat\", \"alignat*\", \"alignedat\"],\n  props: {\n    numArgs: 1\n  },\n  handler: alignedHandler,\n  htmlBuilder: htmlBuilder$6,\n  mathmlBuilder: mathmlBuilder$5\n});\ndefineEnvironment({\n  type: \"array\",\n  names: [\"equation\", \"equation*\"],\n  props: {\n    numArgs: 0\n  },\n  handler(context) {\n    validateAmsEnvironmentContext(context);\n    var res = {\n      autoTag: getAutoTag(context.envName),\n      emptySingleRow: true,\n      singleRow: true,\n      maxNumCols: 1,\n      leqno: context.parser.settings.leqno\n    };\n    return parseArray(context.parser, res, \"display\");\n  },\n  htmlBuilder: htmlBuilder$6,\n  mathmlBuilder: mathmlBuilder$5\n});\ndefineEnvironment({\n  type: \"array\",\n  names: [\"CD\"],\n  props: {\n    numArgs: 0\n  },\n  handler(context) {\n    validateAmsEnvironmentContext(context);\n    return parseCD(context.parser);\n  },\n  htmlBuilder: htmlBuilder$6,\n  mathmlBuilder: mathmlBuilder$5\n});\ndefineMacro(\"\\\\nonumber\", \"\\\\gdef\\\\@eqnsw{0}\");\ndefineMacro(\"\\\\notag\", \"\\\\nonumber\");\n// Catch \\hline outside array environment\ndefineFunction({\n  type: \"text\",\n  // Doesn't matter what this is.\n  names: [\"\\\\hline\", \"\\\\hdashline\"],\n  props: {\n    numArgs: 0,\n    allowedInText: true,\n    allowedInMath: true\n  },\n  handler(context, args) {\n    throw new ParseError(context.funcName + \" valid only within array environment\");\n  }\n});\n\nvar environments = _environments;\n\n// Environment delimiters. HTML/MathML rendering is defined in the corresponding\n// defineEnvironment definitions.\ndefineFunction({\n  type: \"environment\",\n  names: [\"\\\\begin\", \"\\\\end\"],\n  props: {\n    numArgs: 1,\n    argTypes: [\"text\"]\n  },\n  handler(_ref, args) {\n    var {\n      parser,\n      funcName\n    } = _ref;\n    var nameGroup = args[0];\n    if (nameGroup.type !== \"ordgroup\") {\n      throw new ParseError(\"Invalid environment name\", nameGroup);\n    }\n    var envName = \"\";\n    for (var i = 0; i < nameGroup.body.length; ++i) {\n      envName += assertNodeType(nameGroup.body[i], \"textord\").text;\n    }\n    if (funcName === \"\\\\begin\") {\n      // begin...end is similar to left...right\n      if (!environments.hasOwnProperty(envName)) {\n        throw new ParseError(\"No such environment: \" + envName, nameGroup);\n      }\n      // Build the environment object. Arguments and other information will\n      // be made available to the begin and end methods using properties.\n      var env = environments[envName];\n      var {\n        args: _args,\n        optArgs\n      } = parser.parseArguments(\"\\\\begin{\" + envName + \"}\", env);\n      var context = {\n        mode: parser.mode,\n        envName,\n        parser\n      };\n      var result = env.handler(context, _args, optArgs);\n      parser.expect(\"\\\\end\", false);\n      var endNameToken = parser.nextToken;\n      var end = assertNodeType(parser.parseFunction(), \"environment\");\n      if (end.name !== envName) {\n        throw new ParseError(\"Mismatch: \\\\begin{\" + envName + \"} matched by \\\\end{\" + end.name + \"}\", endNameToken);\n      }\n      // TODO(ts), \"environment\" handler returns an environment ParseNode\n      return result;\n    }\n    return {\n      type: \"environment\",\n      mode: parser.mode,\n      name: envName,\n      nameGroup\n    };\n  }\n});\n\n// TODO(kevinb): implement \\\\sl and \\\\sc\nvar htmlBuilder$5 = (group, options) => {\n  var font = group.font;\n  var newOptions = options.withFont(font);\n  return buildGroup$1(group.body, newOptions);\n};\nvar mathmlBuilder$4 = (group, options) => {\n  var font = group.font;\n  var newOptions = options.withFont(font);\n  return buildGroup(group.body, newOptions);\n};\nvar fontAliases = {\n  \"\\\\Bbb\": \"\\\\mathbb\",\n  \"\\\\bold\": \"\\\\mathbf\",\n  \"\\\\frak\": \"\\\\mathfrak\",\n  \"\\\\bm\": \"\\\\boldsymbol\"\n};\ndefineFunction({\n  type: \"font\",\n  names: [\n  // styles, except \\boldsymbol defined below\n  \"\\\\mathrm\", \"\\\\mathit\", \"\\\\mathbf\", \"\\\\mathnormal\", \"\\\\mathsfit\",\n  // families\n  \"\\\\mathbb\", \"\\\\mathcal\", \"\\\\mathfrak\", \"\\\\mathscr\", \"\\\\mathsf\", \"\\\\mathtt\",\n  // aliases, except \\bm defined below\n  \"\\\\Bbb\", \"\\\\bold\", \"\\\\frak\"],\n  props: {\n    numArgs: 1,\n    allowedInArgument: true\n  },\n  handler: (_ref, args) => {\n    var {\n      parser,\n      funcName\n    } = _ref;\n    var body = normalizeArgument(args[0]);\n    var func = funcName;\n    if (func in fontAliases) {\n      func = fontAliases[func];\n    }\n    return {\n      type: \"font\",\n      mode: parser.mode,\n      font: func.slice(1),\n      body\n    };\n  },\n  htmlBuilder: htmlBuilder$5,\n  mathmlBuilder: mathmlBuilder$4\n});\ndefineFunction({\n  type: \"mclass\",\n  names: [\"\\\\boldsymbol\", \"\\\\bm\"],\n  props: {\n    numArgs: 1\n  },\n  handler: (_ref2, args) => {\n    var {\n      parser\n    } = _ref2;\n    var body = args[0];\n    // amsbsy.sty's \\boldsymbol uses \\binrel spacing to inherit the\n    // argument's bin|rel|ord status\n    return {\n      type: \"mclass\",\n      mode: parser.mode,\n      mclass: binrelClass(body),\n      body: [{\n        type: \"font\",\n        mode: parser.mode,\n        font: \"boldsymbol\",\n        body\n      }],\n      isCharacterBox: isCharacterBox(body)\n    };\n  }\n});\n// Old font changing functions\ndefineFunction({\n  type: \"font\",\n  names: [\"\\\\rm\", \"\\\\sf\", \"\\\\tt\", \"\\\\bf\", \"\\\\it\", \"\\\\cal\"],\n  props: {\n    numArgs: 0,\n    allowedInText: true\n  },\n  handler: (_ref3, args) => {\n    var {\n      parser,\n      funcName,\n      breakOnTokenText\n    } = _ref3;\n    var {\n      mode\n    } = parser;\n    var body = parser.parseExpression(true, breakOnTokenText);\n    var style = \"math\" + funcName.slice(1);\n    return {\n      type: \"font\",\n      mode: mode,\n      font: style,\n      body: {\n        type: \"ordgroup\",\n        mode: parser.mode,\n        body\n      }\n    };\n  },\n  htmlBuilder: htmlBuilder$5,\n  mathmlBuilder: mathmlBuilder$4\n});\n\nvar htmlBuilder$4 = (group, options) => {\n  // Fractions are handled in the TeXbook on pages 444-445, rules 15(a-e).\n  var style = options.style;\n  var nstyle = style.fracNum();\n  var dstyle = style.fracDen();\n  var newOptions;\n  newOptions = options.havingStyle(nstyle);\n  var numerm = buildGroup$1(group.numer, newOptions, options);\n  if (group.continued) {\n    // \\cfrac inserts a \\strut into the numerator.\n    // Get \\strut dimensions from TeXbook page 353.\n    var hStrut = 8.5 / options.fontMetrics().ptPerEm;\n    var dStrut = 3.5 / options.fontMetrics().ptPerEm;\n    numerm.height = numerm.height < hStrut ? hStrut : numerm.height;\n    numerm.depth = numerm.depth < dStrut ? dStrut : numerm.depth;\n  }\n  newOptions = options.havingStyle(dstyle);\n  var denomm = buildGroup$1(group.denom, newOptions, options);\n  var rule;\n  var ruleWidth;\n  var ruleSpacing;\n  if (group.hasBarLine) {\n    if (group.barSize) {\n      ruleWidth = calculateSize(group.barSize, options);\n      rule = makeLineSpan(\"frac-line\", options, ruleWidth);\n    } else {\n      rule = makeLineSpan(\"frac-line\", options);\n    }\n    ruleWidth = rule.height;\n    ruleSpacing = rule.height;\n  } else {\n    rule = null;\n    ruleWidth = 0;\n    ruleSpacing = options.fontMetrics().defaultRuleThickness;\n  }\n  // Rule 15b\n  var numShift;\n  var clearance;\n  var denomShift;\n  if (style.size === Style$1.DISPLAY.size) {\n    numShift = options.fontMetrics().num1;\n    if (ruleWidth > 0) {\n      clearance = 3 * ruleSpacing;\n    } else {\n      clearance = 7 * ruleSpacing;\n    }\n    denomShift = options.fontMetrics().denom1;\n  } else {\n    if (ruleWidth > 0) {\n      numShift = options.fontMetrics().num2;\n      clearance = ruleSpacing;\n    } else {\n      numShift = options.fontMetrics().num3;\n      clearance = 3 * ruleSpacing;\n    }\n    denomShift = options.fontMetrics().denom2;\n  }\n  var frac;\n  if (!rule) {\n    // Rule 15c\n    var candidateClearance = numShift - numerm.depth - (denomm.height - denomShift);\n    if (candidateClearance < clearance) {\n      numShift += 0.5 * (clearance - candidateClearance);\n      denomShift += 0.5 * (clearance - candidateClearance);\n    }\n    frac = makeVList({\n      positionType: \"individualShift\",\n      children: [{\n        type: \"elem\",\n        elem: denomm,\n        shift: denomShift\n      }, {\n        type: \"elem\",\n        elem: numerm,\n        shift: -numShift\n      }]\n    });\n  } else {\n    // Rule 15d\n    var axisHeight = options.fontMetrics().axisHeight;\n    if (numShift - numerm.depth - (axisHeight + 0.5 * ruleWidth) < clearance) {\n      numShift += clearance - (numShift - numerm.depth - (axisHeight + 0.5 * ruleWidth));\n    }\n    if (axisHeight - 0.5 * ruleWidth - (denomm.height - denomShift) < clearance) {\n      denomShift += clearance - (axisHeight - 0.5 * ruleWidth - (denomm.height - denomShift));\n    }\n    var midShift = -(axisHeight - 0.5 * ruleWidth);\n    frac = makeVList({\n      positionType: \"individualShift\",\n      children: [{\n        type: \"elem\",\n        elem: denomm,\n        shift: denomShift\n      }, {\n        type: \"elem\",\n        elem: rule,\n        shift: midShift\n      }, {\n        type: \"elem\",\n        elem: numerm,\n        shift: -numShift\n      }]\n    });\n  }\n  // Since we manually change the style sometimes (with \\dfrac or \\tfrac),\n  // account for the possible size change here.\n  newOptions = options.havingStyle(style);\n  frac.height *= newOptions.sizeMultiplier / options.sizeMultiplier;\n  frac.depth *= newOptions.sizeMultiplier / options.sizeMultiplier;\n  // Rule 15e\n  var delimSize;\n  if (style.size === Style$1.DISPLAY.size) {\n    delimSize = options.fontMetrics().delim1;\n  } else if (style.size === Style$1.SCRIPTSCRIPT.size) {\n    delimSize = options.havingStyle(Style$1.SCRIPT).fontMetrics().delim2;\n  } else {\n    delimSize = options.fontMetrics().delim2;\n  }\n  var leftDelim;\n  var rightDelim;\n  if (group.leftDelim == null) {\n    leftDelim = makeNullDelimiter(options, [\"mopen\"]);\n  } else {\n    leftDelim = makeCustomSizedDelim(group.leftDelim, delimSize, true, options.havingStyle(style), group.mode, [\"mopen\"]);\n  }\n  if (group.continued) {\n    rightDelim = makeSpan([]); // zero width for \\cfrac\n  } else if (group.rightDelim == null) {\n    rightDelim = makeNullDelimiter(options, [\"mclose\"]);\n  } else {\n    rightDelim = makeCustomSizedDelim(group.rightDelim, delimSize, true, options.havingStyle(style), group.mode, [\"mclose\"]);\n  }\n  return makeSpan([\"mord\"].concat(newOptions.sizingClasses(options)), [leftDelim, makeSpan([\"mfrac\"], [frac]), rightDelim], options);\n};\nvar mathmlBuilder$3 = (group, options) => {\n  var node = new MathNode(\"mfrac\", [buildGroup(group.numer, options), buildGroup(group.denom, options)]);\n  if (!group.hasBarLine) {\n    node.setAttribute(\"linethickness\", \"0px\");\n  } else if (group.barSize) {\n    var ruleWidth = calculateSize(group.barSize, options);\n    node.setAttribute(\"linethickness\", makeEm(ruleWidth));\n  }\n  if (group.leftDelim != null || group.rightDelim != null) {\n    var withDelims = [];\n    if (group.leftDelim != null) {\n      var leftOp = new MathNode(\"mo\", [new TextNode(group.leftDelim.replace(\"\\\\\", \"\"))]);\n      leftOp.setAttribute(\"fence\", \"true\");\n      withDelims.push(leftOp);\n    }\n    withDelims.push(node);\n    if (group.rightDelim != null) {\n      var rightOp = new MathNode(\"mo\", [new TextNode(group.rightDelim.replace(\"\\\\\", \"\"))]);\n      rightOp.setAttribute(\"fence\", \"true\");\n      withDelims.push(rightOp);\n    }\n    return makeRow(withDelims);\n  }\n  return node;\n};\nvar wrapWithStyle = (frac, style) => {\n  if (!style) {\n    return frac;\n  }\n  var wrapper = {\n    type: \"styling\",\n    mode: frac.mode,\n    style,\n    body: [frac]\n  };\n  // @ts-ignore defineFunction handler needs to return ParseNode<\"genfrac\">\n  return wrapper;\n};\ndefineFunction({\n  type: \"genfrac\",\n  names: [\"\\\\cfrac\", \"\\\\dfrac\", \"\\\\frac\", \"\\\\tfrac\", \"\\\\dbinom\", \"\\\\binom\", \"\\\\tbinom\", \"\\\\\\\\atopfrac\",\n  // can’t be entered directly\n  \"\\\\\\\\bracefrac\", \"\\\\\\\\brackfrac\" // ditto\n  ],\n  props: {\n    numArgs: 2,\n    allowedInArgument: true\n  },\n  handler: (_ref, args) => {\n    var {\n      parser,\n      funcName\n    } = _ref;\n    var numer = args[0];\n    var denom = args[1];\n    var hasBarLine;\n    var leftDelim = null;\n    var rightDelim = null;\n    switch (funcName) {\n      case \"\\\\cfrac\":\n      case \"\\\\dfrac\":\n      case \"\\\\frac\":\n      case \"\\\\tfrac\":\n        hasBarLine = true;\n        break;\n      case \"\\\\\\\\atopfrac\":\n        hasBarLine = false;\n        break;\n      case \"\\\\dbinom\":\n      case \"\\\\binom\":\n      case \"\\\\tbinom\":\n        hasBarLine = false;\n        leftDelim = \"(\";\n        rightDelim = \")\";\n        break;\n      case \"\\\\\\\\bracefrac\":\n        hasBarLine = false;\n        leftDelim = \"\\\\{\";\n        rightDelim = \"\\\\}\";\n        break;\n      case \"\\\\\\\\brackfrac\":\n        hasBarLine = false;\n        leftDelim = \"[\";\n        rightDelim = \"]\";\n        break;\n      default:\n        throw new Error(\"Unrecognized genfrac command\");\n    }\n    var continued = funcName === \"\\\\cfrac\";\n    var style = null;\n    if (continued || funcName.startsWith(\"\\\\d\")) {\n      style = \"display\";\n    } else if (funcName.startsWith(\"\\\\t\")) {\n      style = \"text\";\n    }\n    return wrapWithStyle({\n      type: \"genfrac\",\n      mode: parser.mode,\n      numer,\n      denom,\n      continued,\n      hasBarLine,\n      leftDelim,\n      rightDelim,\n      barSize: null\n    }, style);\n  },\n  htmlBuilder: htmlBuilder$4,\n  mathmlBuilder: mathmlBuilder$3\n});\n// Infix generalized fractions -- these are not rendered directly, but replaced\n// immediately by one of the variants above.\ndefineFunction({\n  type: \"infix\",\n  names: [\"\\\\over\", \"\\\\choose\", \"\\\\atop\", \"\\\\brace\", \"\\\\brack\"],\n  props: {\n    numArgs: 0,\n    infix: true\n  },\n  handler(_ref2) {\n    var {\n      parser,\n      funcName,\n      token\n    } = _ref2;\n    var replaceWith;\n    switch (funcName) {\n      case \"\\\\over\":\n        replaceWith = \"\\\\frac\";\n        break;\n      case \"\\\\choose\":\n        replaceWith = \"\\\\binom\";\n        break;\n      case \"\\\\atop\":\n        replaceWith = \"\\\\\\\\atopfrac\";\n        break;\n      case \"\\\\brace\":\n        replaceWith = \"\\\\\\\\bracefrac\";\n        break;\n      case \"\\\\brack\":\n        replaceWith = \"\\\\\\\\brackfrac\";\n        break;\n      default:\n        throw new Error(\"Unrecognized infix genfrac command\");\n    }\n    return {\n      type: \"infix\",\n      mode: parser.mode,\n      replaceWith,\n      token\n    };\n  }\n});\nvar stylArray = [\"display\", \"text\", \"script\", \"scriptscript\"];\nvar delimFromValue = function delimFromValue(delimString) {\n  var delim = null;\n  if (delimString.length > 0) {\n    delim = delimString;\n    delim = delim === \".\" ? null : delim;\n  }\n  return delim;\n};\ndefineFunction({\n  type: \"genfrac\",\n  names: [\"\\\\genfrac\"],\n  props: {\n    numArgs: 6,\n    allowedInArgument: true,\n    argTypes: [\"math\", \"math\", \"size\", \"text\", \"math\", \"math\"]\n  },\n  handler(_ref3, args) {\n    var {\n      parser\n    } = _ref3;\n    var numer = args[4];\n    var denom = args[5];\n    // Look into the parse nodes to get the desired delimiters.\n    var leftNode = normalizeArgument(args[0]);\n    var leftDelim = leftNode.type === \"atom\" && leftNode.family === \"open\" ? delimFromValue(leftNode.text) : null;\n    var rightNode = normalizeArgument(args[1]);\n    var rightDelim = rightNode.type === \"atom\" && rightNode.family === \"close\" ? delimFromValue(rightNode.text) : null;\n    var barNode = assertNodeType(args[2], \"size\");\n    var hasBarLine;\n    var barSize = null;\n    if (barNode.isBlank) {\n      // \\genfrac acts differently than \\above.\n      // \\genfrac treats an empty size group as a signal to use a\n      // standard bar size. \\above would see size = 0 and omit the bar.\n      hasBarLine = true;\n    } else {\n      barSize = barNode.value;\n      hasBarLine = barSize.number > 0;\n    }\n    // Find out if we want displaystyle, textstyle, etc.\n    var size = null;\n    var styl = args[3];\n    if (styl.type === \"ordgroup\") {\n      if (styl.body.length > 0) {\n        var textOrd = assertNodeType(styl.body[0], \"textord\");\n        size = stylArray[Number(textOrd.text)];\n      }\n    } else {\n      styl = assertNodeType(styl, \"textord\");\n      size = stylArray[Number(styl.text)];\n    }\n    return wrapWithStyle({\n      type: \"genfrac\",\n      mode: parser.mode,\n      numer,\n      denom,\n      continued: false,\n      hasBarLine,\n      barSize,\n      leftDelim,\n      rightDelim\n    }, size);\n  }\n});\n// \\above is an infix fraction that also defines a fraction bar size.\ndefineFunction({\n  type: \"infix\",\n  names: [\"\\\\above\"],\n  props: {\n    numArgs: 1,\n    argTypes: [\"size\"],\n    infix: true\n  },\n  handler(_ref4, args) {\n    var {\n      parser,\n      funcName,\n      token\n    } = _ref4;\n    return {\n      type: \"infix\",\n      mode: parser.mode,\n      replaceWith: \"\\\\\\\\abovefrac\",\n      size: assertNodeType(args[0], \"size\").value,\n      token\n    };\n  }\n});\ndefineFunction({\n  type: \"genfrac\",\n  names: [\"\\\\\\\\abovefrac\"],\n  props: {\n    numArgs: 3,\n    argTypes: [\"math\", \"size\", \"math\"]\n  },\n  handler: (_ref5, args) => {\n    var {\n      parser,\n      funcName\n    } = _ref5;\n    var numer = args[0];\n    var barSize = assertNodeType(args[1], \"infix\").size;\n    if (!barSize) {\n      throw new Error(\"\\\\\\\\abovefrac expected size, but got \" + String(barSize));\n    }\n    var denom = args[2];\n    var hasBarLine = barSize.number > 0;\n    return {\n      type: \"genfrac\",\n      mode: parser.mode,\n      numer,\n      denom,\n      continued: false,\n      hasBarLine,\n      barSize,\n      leftDelim: null,\n      rightDelim: null\n    };\n  }\n});\n\n// NOTE: Unlike most `htmlBuilder`s, this one handles not only \"horizBrace\", but\n// also \"supsub\" since an over/underbrace can affect super/subscripting.\nvar htmlBuilder$3 = (grp, options) => {\n  var style = options.style;\n  // Pull out the `ParseNode<\"horizBrace\">` if `grp` is a \"supsub\" node.\n  var supSubGroup;\n  var group;\n  if (grp.type === \"supsub\") {\n    // Ref: LaTeX source2e: }}}}\\limits}\n    // i.e. LaTeX treats the brace similar to an op and passes it\n    // with \\limits, so we need to assign supsub style.\n    supSubGroup = grp.sup ? buildGroup$1(grp.sup, options.havingStyle(style.sup()), options) : buildGroup$1(grp.sub, options.havingStyle(style.sub()), options);\n    group = assertNodeType(grp.base, \"horizBrace\");\n  } else {\n    group = assertNodeType(grp, \"horizBrace\");\n  }\n  // Build the base group\n  var body = buildGroup$1(group.base, options.havingBaseStyle(Style$1.DISPLAY));\n  // Create the stretchy element\n  var braceBody = stretchySvg(group, options);\n  // Generate the vlist, with the appropriate kerns        ┏━━━━━━━━┓\n  // This first vlist contains the content and the brace:   equation\n  var vlist;\n  if (group.isOver) {\n    vlist = makeVList({\n      positionType: \"firstBaseline\",\n      children: [{\n        type: \"elem\",\n        elem: body\n      }, {\n        type: \"kern\",\n        size: 0.1\n      }, {\n        type: \"elem\",\n        elem: braceBody\n      }]\n    });\n    // TODO(ts): Replace this with passing \"svg-align\" into makeVList.\n    vlist.children[0].children[0].children[1].classes.push(\"svg-align\");\n  } else {\n    vlist = makeVList({\n      positionType: \"bottom\",\n      positionData: body.depth + 0.1 + braceBody.height,\n      children: [{\n        type: \"elem\",\n        elem: braceBody\n      }, {\n        type: \"kern\",\n        size: 0.1\n      }, {\n        type: \"elem\",\n        elem: body\n      }]\n    });\n    // TODO(ts): Replace this with passing \"svg-align\" into makeVList.\n    vlist.children[0].children[0].children[0].classes.push(\"svg-align\");\n  }\n  if (supSubGroup) {\n    // To write the supsub, wrap the first vlist in another vlist:\n    // They can't all go in the same vlist, because the note might be\n    // wider than the equation. We want the equation to control the\n    // brace width.\n    //      note          long note           long note\n    //   ┏━━━━━━━━┓   or    ┏━━━┓     not    ┏━━━━━━━━━┓\n    //    equation           eqn                 eqn\n    var vSpan = makeSpan([\"minner\", group.isOver ? \"mover\" : \"munder\"], [vlist], options);\n    if (group.isOver) {\n      vlist = makeVList({\n        positionType: \"firstBaseline\",\n        children: [{\n          type: \"elem\",\n          elem: vSpan\n        }, {\n          type: \"kern\",\n          size: 0.2\n        }, {\n          type: \"elem\",\n          elem: supSubGroup\n        }]\n      });\n    } else {\n      vlist = makeVList({\n        positionType: \"bottom\",\n        positionData: vSpan.depth + 0.2 + supSubGroup.height + supSubGroup.depth,\n        children: [{\n          type: \"elem\",\n          elem: supSubGroup\n        }, {\n          type: \"kern\",\n          size: 0.2\n        }, {\n          type: \"elem\",\n          elem: vSpan\n        }]\n      });\n    }\n  }\n  return makeSpan([\"minner\", group.isOver ? \"mover\" : \"munder\"], [vlist], options);\n};\nvar mathmlBuilder$2 = (group, options) => {\n  var accentNode = stretchyMathML(group.label);\n  return new MathNode(group.isOver ? \"mover\" : \"munder\", [buildGroup(group.base, options), accentNode]);\n};\n// Horizontal stretchy braces\ndefineFunction({\n  type: \"horizBrace\",\n  names: [\"\\\\overbrace\", \"\\\\underbrace\", \"\\\\overbracket\", \"\\\\underbracket\"],\n  props: {\n    numArgs: 1\n  },\n  handler(_ref, args) {\n    var {\n      parser,\n      funcName\n    } = _ref;\n    return {\n      type: \"horizBrace\",\n      mode: parser.mode,\n      label: funcName,\n      isOver: funcName.includes(\"\\\\over\"),\n      base: args[0]\n    };\n  },\n  htmlBuilder: htmlBuilder$3,\n  mathmlBuilder: mathmlBuilder$2\n});\n\ndefineFunction({\n  type: \"href\",\n  names: [\"\\\\href\"],\n  props: {\n    numArgs: 2,\n    argTypes: [\"url\", \"original\"],\n    allowedInText: true\n  },\n  handler: (_ref, args) => {\n    var {\n      parser\n    } = _ref;\n    var body = args[1];\n    var href = assertNodeType(args[0], \"url\").url;\n    if (!parser.settings.isTrusted({\n      command: \"\\\\href\",\n      url: href\n    })) {\n      return parser.formatUnsupportedCmd(\"\\\\href\");\n    }\n    return {\n      type: \"href\",\n      mode: parser.mode,\n      href,\n      body: ordargument(body)\n    };\n  },\n  htmlBuilder: (group, options) => {\n    var elements = buildExpression$1(group.body, options, false);\n    return makeAnchor(group.href, [], elements, options);\n  },\n  mathmlBuilder: (group, options) => {\n    var math = buildExpressionRow(group.body, options);\n    if (!(math instanceof MathNode)) {\n      math = new MathNode(\"mrow\", [math]);\n    }\n    math.setAttribute(\"href\", group.href);\n    return math;\n  }\n});\ndefineFunction({\n  type: \"href\",\n  names: [\"\\\\url\"],\n  props: {\n    numArgs: 1,\n    argTypes: [\"url\"],\n    allowedInText: true\n  },\n  handler: (_ref2, args) => {\n    var {\n      parser\n    } = _ref2;\n    var href = assertNodeType(args[0], \"url\").url;\n    if (!parser.settings.isTrusted({\n      command: \"\\\\url\",\n      url: href\n    })) {\n      return parser.formatUnsupportedCmd(\"\\\\url\");\n    }\n    var chars = [];\n    for (var i = 0; i < href.length; i++) {\n      var c = href[i];\n      if (c === \"~\") {\n        c = \"\\\\textasciitilde\";\n      }\n      chars.push({\n        type: \"textord\",\n        mode: \"text\",\n        text: c\n      });\n    }\n    var body = {\n      type: \"text\",\n      mode: parser.mode,\n      font: \"\\\\texttt\",\n      body: chars\n    };\n    return {\n      type: \"href\",\n      mode: parser.mode,\n      href,\n      body: ordargument(body)\n    };\n  }\n});\n\n// \\hbox is provided for compatibility with LaTeX \\vcenter.\n// In LaTeX, \\vcenter can act only on a box, as in\n// \\vcenter{\\hbox{$\\frac{a+b}{\\dfrac{c}{d}}$}}\n// This function by itself doesn't do anything but prevent a soft line break.\ndefineFunction({\n  type: \"hbox\",\n  names: [\"\\\\hbox\"],\n  props: {\n    numArgs: 1,\n    argTypes: [\"text\"],\n    allowedInText: true,\n    primitive: true\n  },\n  handler(_ref, args) {\n    var {\n      parser\n    } = _ref;\n    return {\n      type: \"hbox\",\n      mode: parser.mode,\n      body: ordargument(args[0])\n    };\n  },\n  htmlBuilder(group, options) {\n    var elements = buildExpression$1(group.body, options, false);\n    return makeFragment(elements);\n  },\n  mathmlBuilder(group, options) {\n    return new MathNode(\"mrow\", buildExpression(group.body, options));\n  }\n});\n\ndefineFunction({\n  type: \"html\",\n  names: [\"\\\\htmlClass\", \"\\\\htmlId\", \"\\\\htmlStyle\", \"\\\\htmlData\"],\n  props: {\n    numArgs: 2,\n    argTypes: [\"raw\", \"original\"],\n    allowedInText: true\n  },\n  handler: (_ref, args) => {\n    var {\n      parser,\n      funcName,\n      token\n    } = _ref;\n    var value = assertNodeType(args[0], \"raw\").string;\n    var body = args[1];\n    if (parser.settings.strict) {\n      parser.settings.reportNonstrict(\"htmlExtension\", \"HTML extension is disabled on strict mode\");\n    }\n    var trustContext;\n    var attributes = {};\n    switch (funcName) {\n      case \"\\\\htmlClass\":\n        attributes.class = value;\n        trustContext = {\n          command: \"\\\\htmlClass\",\n          class: value\n        };\n        break;\n      case \"\\\\htmlId\":\n        attributes.id = value;\n        trustContext = {\n          command: \"\\\\htmlId\",\n          id: value\n        };\n        break;\n      case \"\\\\htmlStyle\":\n        attributes.style = value;\n        trustContext = {\n          command: \"\\\\htmlStyle\",\n          style: value\n        };\n        break;\n      case \"\\\\htmlData\":\n        {\n          var data = value.split(\",\");\n          for (var i = 0; i < data.length; i++) {\n            var item = data[i];\n            var firstEquals = item.indexOf(\"=\");\n            if (firstEquals < 0) {\n              throw new ParseError(\"\\\\htmlData key/value '\" + item + \"'\" + \" missing equals sign\");\n            }\n            var key = item.slice(0, firstEquals);\n            var _value = item.slice(firstEquals + 1);\n            attributes[\"data-\" + key.trim()] = _value;\n          }\n          trustContext = {\n            command: \"\\\\htmlData\",\n            attributes\n          };\n          break;\n        }\n      default:\n        throw new Error(\"Unrecognized html command\");\n    }\n    if (!parser.settings.isTrusted(trustContext)) {\n      return parser.formatUnsupportedCmd(funcName);\n    }\n    return {\n      type: \"html\",\n      mode: parser.mode,\n      attributes,\n      body: ordargument(body)\n    };\n  },\n  htmlBuilder: (group, options) => {\n    var elements = buildExpression$1(group.body, options, false);\n    var classes = [\"enclosing\"];\n    if (group.attributes.class) {\n      classes.push(...group.attributes.class.trim().split(/\\s+/));\n    }\n    var span = makeSpan(classes, elements, options);\n    for (var attr in group.attributes) {\n      if (attr !== \"class\" && group.attributes.hasOwnProperty(attr)) {\n        span.setAttribute(attr, group.attributes[attr]);\n      }\n    }\n    return span;\n  },\n  mathmlBuilder: (group, options) => {\n    return buildExpressionRow(group.body, options);\n  }\n});\n\ndefineFunction({\n  type: \"htmlmathml\",\n  names: [\"\\\\html@mathml\"],\n  props: {\n    numArgs: 2,\n    allowedInArgument: true,\n    allowedInText: true\n  },\n  handler: (_ref, args) => {\n    var {\n      parser\n    } = _ref;\n    return {\n      type: \"htmlmathml\",\n      mode: parser.mode,\n      html: ordargument(args[0]),\n      mathml: ordargument(args[1])\n    };\n  },\n  htmlBuilder: (group, options) => {\n    var elements = buildExpression$1(group.html, options, false);\n    return makeFragment(elements);\n  },\n  mathmlBuilder: (group, options) => {\n    return buildExpressionRow(group.mathml, options);\n  }\n});\n\nvar sizeData = function sizeData(str) {\n  if (/^[-+]? *(\\d+(\\.\\d*)?|\\.\\d+)$/.test(str)) {\n    // str is a number with no unit specified.\n    // default unit is bp, per graphix package.\n    return {\n      number: +str,\n      unit: \"bp\"\n    };\n  } else {\n    var match = /([-+]?) *(\\d+(?:\\.\\d*)?|\\.\\d+) *([a-z]{2})/.exec(str);\n    if (!match) {\n      throw new ParseError(\"Invalid size: '\" + str + \"' in \\\\includegraphics\");\n    }\n    var data = {\n      number: +(match[1] + match[2]),\n      // sign + magnitude, cast to number\n      unit: match[3]\n    };\n    if (!validUnit(data)) {\n      throw new ParseError(\"Invalid unit: '\" + data.unit + \"' in \\\\includegraphics.\");\n    }\n    return data;\n  }\n};\ndefineFunction({\n  type: \"includegraphics\",\n  names: [\"\\\\includegraphics\"],\n  props: {\n    numArgs: 1,\n    numOptionalArgs: 1,\n    argTypes: [\"raw\", \"url\"],\n    allowedInText: false\n  },\n  handler: (_ref, args, optArgs) => {\n    var {\n      parser\n    } = _ref;\n    var width = {\n      number: 0,\n      unit: \"em\"\n    };\n    var height = {\n      number: 0.9,\n      unit: \"em\"\n    }; // sorta character sized.\n    var totalheight = {\n      number: 0,\n      unit: \"em\"\n    };\n    var alt = \"\";\n    if (optArgs[0]) {\n      var attributeStr = assertNodeType(optArgs[0], \"raw\").string;\n      // Parser.js does not parse key/value pairs. We get a string.\n      var attributes = attributeStr.split(\",\");\n      for (var i = 0; i < attributes.length; i++) {\n        var keyVal = attributes[i].split(\"=\");\n        if (keyVal.length === 2) {\n          var str = keyVal[1].trim();\n          switch (keyVal[0].trim()) {\n            case \"alt\":\n              alt = str;\n              break;\n            case \"width\":\n              width = sizeData(str);\n              break;\n            case \"height\":\n              height = sizeData(str);\n              break;\n            case \"totalheight\":\n              totalheight = sizeData(str);\n              break;\n            default:\n              throw new ParseError(\"Invalid key: '\" + keyVal[0] + \"' in \\\\includegraphics.\");\n          }\n        }\n      }\n    }\n    var src = assertNodeType(args[0], \"url\").url;\n    if (alt === \"\") {\n      // No alt given. Use the file name. Strip away the path.\n      alt = src;\n      alt = alt.replace(/^.*[\\\\/]/, '');\n      alt = alt.substring(0, alt.lastIndexOf('.'));\n    }\n    if (!parser.settings.isTrusted({\n      command: \"\\\\includegraphics\",\n      url: src\n    })) {\n      return parser.formatUnsupportedCmd(\"\\\\includegraphics\");\n    }\n    return {\n      type: \"includegraphics\",\n      mode: parser.mode,\n      alt: alt,\n      width: width,\n      height: height,\n      totalheight: totalheight,\n      src: src\n    };\n  },\n  htmlBuilder: (group, options) => {\n    var height = calculateSize(group.height, options);\n    var depth = 0;\n    if (group.totalheight.number > 0) {\n      depth = calculateSize(group.totalheight, options) - height;\n    }\n    var width = 0;\n    if (group.width.number > 0) {\n      width = calculateSize(group.width, options);\n    }\n    var style = {\n      height: makeEm(height + depth)\n    };\n    if (width > 0) {\n      style.width = makeEm(width);\n    }\n    if (depth > 0) {\n      style.verticalAlign = makeEm(-depth);\n    }\n    var node = new Img(group.src, group.alt, style);\n    node.height = height;\n    node.depth = depth;\n    return node;\n  },\n  mathmlBuilder: (group, options) => {\n    var node = new MathNode(\"mglyph\", []);\n    node.setAttribute(\"alt\", group.alt);\n    var height = calculateSize(group.height, options);\n    var depth = 0;\n    if (group.totalheight.number > 0) {\n      depth = calculateSize(group.totalheight, options) - height;\n      node.setAttribute(\"valign\", makeEm(-depth));\n    }\n    node.setAttribute(\"height\", makeEm(height + depth));\n    if (group.width.number > 0) {\n      var width = calculateSize(group.width, options);\n      node.setAttribute(\"width\", makeEm(width));\n    }\n    node.setAttribute(\"src\", group.src);\n    return node;\n  }\n});\n\n// Horizontal spacing commands\n// TODO: \\hskip and \\mskip should support plus and minus in lengths\ndefineFunction({\n  type: \"kern\",\n  names: [\"\\\\kern\", \"\\\\mkern\", \"\\\\hskip\", \"\\\\mskip\"],\n  props: {\n    numArgs: 1,\n    argTypes: [\"size\"],\n    primitive: true,\n    allowedInText: true\n  },\n  handler(_ref, args) {\n    var {\n      parser,\n      funcName\n    } = _ref;\n    var size = assertNodeType(args[0], \"size\");\n    if (parser.settings.strict) {\n      var mathFunction = funcName[1] === 'm'; // \\mkern, \\mskip\n      var muUnit = size.value.unit === 'mu';\n      if (mathFunction) {\n        if (!muUnit) {\n          parser.settings.reportNonstrict(\"mathVsTextUnits\", \"LaTeX's \" + funcName + \" supports only mu units, \" + (\"not \" + size.value.unit + \" units\"));\n        }\n        if (parser.mode !== \"math\") {\n          parser.settings.reportNonstrict(\"mathVsTextUnits\", \"LaTeX's \" + funcName + \" works only in math mode\");\n        }\n      } else {\n        // !mathFunction\n        if (muUnit) {\n          parser.settings.reportNonstrict(\"mathVsTextUnits\", \"LaTeX's \" + funcName + \" doesn't support mu units\");\n        }\n      }\n    }\n    return {\n      type: \"kern\",\n      mode: parser.mode,\n      dimension: size.value\n    };\n  },\n  htmlBuilder(group, options) {\n    return makeGlue(group.dimension, options);\n  },\n  mathmlBuilder(group, options) {\n    var dimension = calculateSize(group.dimension, options);\n    return new SpaceNode(dimension);\n  }\n});\n\n// Horizontal overlap functions\ndefineFunction({\n  type: \"lap\",\n  names: [\"\\\\mathllap\", \"\\\\mathrlap\", \"\\\\mathclap\"],\n  props: {\n    numArgs: 1,\n    allowedInText: true\n  },\n  handler: (_ref, args) => {\n    var {\n      parser,\n      funcName\n    } = _ref;\n    var body = args[0];\n    return {\n      type: \"lap\",\n      mode: parser.mode,\n      alignment: funcName.slice(5),\n      body\n    };\n  },\n  htmlBuilder: (group, options) => {\n    // mathllap, mathrlap, mathclap\n    var inner;\n    if (group.alignment === \"clap\") {\n      // ref: https://www.math.lsu.edu/~aperlis/publications/mathclap/\n      inner = makeSpan([], [buildGroup$1(group.body, options)]);\n      // wrap, since CSS will center a .clap > .inner > span\n      inner = makeSpan([\"inner\"], [inner], options);\n    } else {\n      inner = makeSpan([\"inner\"], [buildGroup$1(group.body, options)]);\n    }\n    var fix = makeSpan([\"fix\"], []);\n    var node = makeSpan([group.alignment], [inner, fix], options);\n    // At this point, we have correctly set horizontal alignment of the\n    // two items involved in the lap.\n    // Next, use a strut to set the height of the HTML bounding box.\n    // Otherwise, a tall argument may be misplaced.\n    // This code resolved issue #1153\n    var strut = makeSpan([\"strut\"]);\n    strut.style.height = makeEm(node.height + node.depth);\n    if (node.depth) {\n      strut.style.verticalAlign = makeEm(-node.depth);\n    }\n    node.children.unshift(strut);\n    // Next, prevent vertical misplacement when next to something tall.\n    // This code resolves issue #1234\n    node = makeSpan([\"thinbox\"], [node], options);\n    return makeSpan([\"mord\", \"vbox\"], [node], options);\n  },\n  mathmlBuilder: (group, options) => {\n    // mathllap, mathrlap, mathclap\n    var node = new MathNode(\"mpadded\", [buildGroup(group.body, options)]);\n    if (group.alignment !== \"rlap\") {\n      var offset = group.alignment === \"llap\" ? \"-1\" : \"-0.5\";\n      node.setAttribute(\"lspace\", offset + \"width\");\n    }\n    node.setAttribute(\"width\", \"0px\");\n    return node;\n  }\n});\n\n// Switching from text mode back to math mode\ndefineFunction({\n  type: \"styling\",\n  names: [\"\\\\(\", \"$\"],\n  props: {\n    numArgs: 0,\n    allowedInText: true,\n    allowedInMath: false\n  },\n  handler(_ref, args) {\n    var {\n      funcName,\n      parser\n    } = _ref;\n    var outerMode = parser.mode;\n    parser.switchMode(\"math\");\n    var close = funcName === \"\\\\(\" ? \"\\\\)\" : \"$\";\n    var body = parser.parseExpression(false, close);\n    parser.expect(close);\n    parser.switchMode(outerMode);\n    return {\n      type: \"styling\",\n      mode: parser.mode,\n      style: \"text\",\n      body\n    };\n  }\n});\n// Check for extra closing math delimiters\ndefineFunction({\n  type: \"text\",\n  // Doesn't matter what this is.\n  names: [\"\\\\)\", \"\\\\]\"],\n  props: {\n    numArgs: 0,\n    allowedInText: true,\n    allowedInMath: false\n  },\n  handler(context, args) {\n    throw new ParseError(\"Mismatched \" + context.funcName);\n  }\n});\n\nvar chooseMathStyle = (group, options) => {\n  switch (options.style.size) {\n    case Style$1.DISPLAY.size:\n      return group.display;\n    case Style$1.TEXT.size:\n      return group.text;\n    case Style$1.SCRIPT.size:\n      return group.script;\n    case Style$1.SCRIPTSCRIPT.size:\n      return group.scriptscript;\n    default:\n      return group.text;\n  }\n};\ndefineFunction({\n  type: \"mathchoice\",\n  names: [\"\\\\mathchoice\"],\n  props: {\n    numArgs: 4,\n    primitive: true\n  },\n  handler: (_ref, args) => {\n    var {\n      parser\n    } = _ref;\n    return {\n      type: \"mathchoice\",\n      mode: parser.mode,\n      display: ordargument(args[0]),\n      text: ordargument(args[1]),\n      script: ordargument(args[2]),\n      scriptscript: ordargument(args[3])\n    };\n  },\n  htmlBuilder: (group, options) => {\n    var body = chooseMathStyle(group, options);\n    var elements = buildExpression$1(body, options, false);\n    return makeFragment(elements);\n  },\n  mathmlBuilder: (group, options) => {\n    var body = chooseMathStyle(group, options);\n    return buildExpressionRow(body, options);\n  }\n});\n\n// For an operator with limits, assemble the base, sup, and sub into a span.\nvar assembleSupSub = (base, supGroup, subGroup, options, style, slant, baseShift) => {\n  base = makeSpan([], [base]);\n  var subIsSingleCharacter = subGroup && isCharacterBox(subGroup);\n  var sub;\n  var sup;\n  // We manually have to handle the superscripts and subscripts. This,\n  // aside from the kern calculations, is copied from supsub.\n  if (supGroup) {\n    var elem = buildGroup$1(supGroup, options.havingStyle(style.sup()), options);\n    sup = {\n      elem,\n      kern: Math.max(options.fontMetrics().bigOpSpacing1, options.fontMetrics().bigOpSpacing3 - elem.depth)\n    };\n  }\n  if (subGroup) {\n    var _elem = buildGroup$1(subGroup, options.havingStyle(style.sub()), options);\n    sub = {\n      elem: _elem,\n      kern: Math.max(options.fontMetrics().bigOpSpacing2, options.fontMetrics().bigOpSpacing4 - _elem.height)\n    };\n  }\n  // Build the final group as a vlist of the possible subscript, base,\n  // and possible superscript.\n  var finalGroup;\n  if (sup && sub) {\n    var bottom = options.fontMetrics().bigOpSpacing5 + sub.elem.height + sub.elem.depth + sub.kern + base.depth + baseShift;\n    finalGroup = makeVList({\n      positionType: \"bottom\",\n      positionData: bottom,\n      children: [{\n        type: \"kern\",\n        size: options.fontMetrics().bigOpSpacing5\n      }, {\n        type: \"elem\",\n        elem: sub.elem,\n        marginLeft: makeEm(-slant)\n      }, {\n        type: \"kern\",\n        size: sub.kern\n      }, {\n        type: \"elem\",\n        elem: base\n      }, {\n        type: \"kern\",\n        size: sup.kern\n      }, {\n        type: \"elem\",\n        elem: sup.elem,\n        marginLeft: makeEm(slant)\n      }, {\n        type: \"kern\",\n        size: options.fontMetrics().bigOpSpacing5\n      }]\n    });\n  } else if (sub) {\n    var top = base.height - baseShift;\n    // Shift the limits by the slant of the symbol. Note\n    // that we are supposed to shift the limits by 1/2 of the slant,\n    // but since we are centering the limits adding a full slant of\n    // margin will shift by 1/2 that.\n    finalGroup = makeVList({\n      positionType: \"top\",\n      positionData: top,\n      children: [{\n        type: \"kern\",\n        size: options.fontMetrics().bigOpSpacing5\n      }, {\n        type: \"elem\",\n        elem: sub.elem,\n        marginLeft: makeEm(-slant)\n      }, {\n        type: \"kern\",\n        size: sub.kern\n      }, {\n        type: \"elem\",\n        elem: base\n      }]\n    });\n  } else if (sup) {\n    var _bottom = base.depth + baseShift;\n    finalGroup = makeVList({\n      positionType: \"bottom\",\n      positionData: _bottom,\n      children: [{\n        type: \"elem\",\n        elem: base\n      }, {\n        type: \"kern\",\n        size: sup.kern\n      }, {\n        type: \"elem\",\n        elem: sup.elem,\n        marginLeft: makeEm(slant)\n      }, {\n        type: \"kern\",\n        size: options.fontMetrics().bigOpSpacing5\n      }]\n    });\n  } else {\n    // This case probably shouldn't occur (this would mean the\n    // supsub was sending us a group with no superscript or\n    // subscript) but be safe.\n    return base;\n  }\n  var parts = [finalGroup];\n  if (sub && slant !== 0 && !subIsSingleCharacter) {\n    // A negative margin-left was applied to the lower limit.\n    // Avoid an overlap by placing a spacer on the left on the group.\n    var spacer = makeSpan([\"mspace\"], [], options);\n    spacer.style.marginRight = makeEm(slant);\n    parts.unshift(spacer);\n  }\n  return makeSpan([\"mop\", \"op-limits\"], parts, options);\n};\n\n// Limits, symbols\n// Most operators have a large successor symbol, but these don't.\nvar noSuccessor = new Set([\"\\\\smallint\"]);\n// NOTE: Unlike most `htmlBuilder`s, this one handles not only \"op\", but also\n// \"supsub\" since some of them (like \\int) can affect super/subscripting.\nvar htmlBuilder$2 = (grp, options) => {\n  // Operators are handled in the TeXbook pg. 443-444, rule 13(a).\n  var supGroup;\n  var subGroup;\n  var hasLimits = false;\n  var group;\n  if (grp.type === \"supsub\") {\n    // If we have limits, supsub will pass us its group to handle. Pull\n    // out the superscript and subscript and set the group to the op in\n    // its base.\n    supGroup = grp.sup;\n    subGroup = grp.sub;\n    group = assertNodeType(grp.base, \"op\");\n    hasLimits = true;\n  } else {\n    group = assertNodeType(grp, \"op\");\n  }\n  var style = options.style;\n  var large = false;\n  if (style.size === Style$1.DISPLAY.size && group.symbol && !noSuccessor.has(group.name)) {\n    // Most symbol operators get larger in displaystyle (rule 13)\n    large = true;\n  }\n  var base;\n  if (group.symbol) {\n    // If this is a symbol, create the symbol.\n    var fontName = large ? \"Size2-Regular\" : \"Size1-Regular\";\n    var stash = \"\";\n    if (group.name === \"\\\\oiint\" || group.name === \"\\\\oiiint\") {\n      // No font glyphs yet, so use a glyph w/o the oval.\n      // TODO: When font glyphs are available, delete this code.\n      stash = group.name.slice(1);\n      group.name = stash === \"oiint\" ? \"\\\\iint\" : \"\\\\iiint\";\n    }\n    base = makeSymbol(group.name, fontName, \"math\", options, [\"mop\", \"op-symbol\", large ? \"large-op\" : \"small-op\"]);\n    if (stash.length > 0) {\n      // We're in \\oiint or \\oiiint. Overlay the oval.\n      // TODO: When font glyphs are available, delete this code.\n      var italic = base.italic;\n      var oval = staticSvg(stash + \"Size\" + (large ? \"2\" : \"1\"), options);\n      base = makeVList({\n        positionType: \"individualShift\",\n        children: [{\n          type: \"elem\",\n          elem: base,\n          shift: 0\n        }, {\n          type: \"elem\",\n          elem: oval,\n          shift: large ? 0.08 : 0\n        }]\n      });\n      group.name = \"\\\\\" + stash;\n      base.classes.unshift(\"mop\");\n      // TODO(ts)\n      base.italic = italic;\n    }\n  } else if (group.body) {\n    // If this is a list, compose that list.\n    var inner = buildExpression$1(group.body, options, true);\n    if (inner.length === 1 && inner[0] instanceof SymbolNode) {\n      base = inner[0];\n      base.classes[0] = \"mop\"; // replace old mclass\n    } else {\n      base = makeSpan([\"mop\"], inner, options);\n    }\n  } else {\n    // Otherwise, this is a text operator. Build the text from the\n    // operator's name.\n    var output = [];\n    for (var i = 1; i < group.name.length; i++) {\n      output.push(mathsym(group.name[i], group.mode, options));\n    }\n    base = makeSpan([\"mop\"], output, options);\n  }\n  // If content of op is a single symbol, shift it vertically.\n  var baseShift = 0;\n  var slant = 0;\n  if ((base instanceof SymbolNode || group.name === \"\\\\oiint\" || group.name === \"\\\\oiiint\") && !group.suppressBaseShift) {\n    // We suppress the shift of the base of \\overset and \\underset. Otherwise,\n    // shift the symbol so its center lies on the axis (rule 13). It\n    // appears that our fonts have the centers of the symbols already\n    // almost on the axis, so these numbers are very small. Note we\n    // don't actually apply this here, but instead it is used either in\n    // the vlist creation or separately when there are no limits.\n    baseShift = (base.height - base.depth) / 2 - options.fontMetrics().axisHeight;\n    // The slant of the symbol is just its italic correction.\n    // TODO(ts)\n    slant = base.italic || 0;\n  }\n  if (hasLimits) {\n    return assembleSupSub(base, supGroup, subGroup, options, style, slant, baseShift);\n  } else {\n    if (baseShift) {\n      base.style.position = \"relative\";\n      base.style.top = makeEm(baseShift);\n    }\n    return base;\n  }\n};\nvar mathmlBuilder$1 = (group, options) => {\n  var node;\n  if (group.symbol) {\n    // This is a symbol. Just add the symbol.\n    node = new MathNode(\"mo\", [makeText(group.name, group.mode)]);\n    if (noSuccessor.has(group.name)) {\n      node.setAttribute(\"largeop\", \"false\");\n    }\n  } else if (group.body) {\n    // This is an operator with children. Add them.\n    node = new MathNode(\"mo\", buildExpression(group.body, options));\n  } else {\n    // This is a text operator. Add all the characters from the\n    // operator's name.\n    node = new MathNode(\"mi\", [new TextNode(group.name.slice(1))]);\n    // Append an <mo>&ApplyFunction;</mo>.\n    // ref: https://www.w3.org/TR/REC-MathML/chap3_2.html#sec3.2.4\n    var operator = new MathNode(\"mo\", [makeText(\"\\u2061\", \"text\")]);\n    if (group.parentIsSupSub) {\n      node = new MathNode(\"mrow\", [node, operator]);\n    } else {\n      node = newDocumentFragment([node, operator]);\n    }\n  }\n  return node;\n};\nvar singleCharBigOps = {\n  \"\\u220F\": \"\\\\prod\",\n  \"\\u2210\": \"\\\\coprod\",\n  \"\\u2211\": \"\\\\sum\",\n  \"\\u22c0\": \"\\\\bigwedge\",\n  \"\\u22c1\": \"\\\\bigvee\",\n  \"\\u22c2\": \"\\\\bigcap\",\n  \"\\u22c3\": \"\\\\bigcup\",\n  \"\\u2a00\": \"\\\\bigodot\",\n  \"\\u2a01\": \"\\\\bigoplus\",\n  \"\\u2a02\": \"\\\\bigotimes\",\n  \"\\u2a04\": \"\\\\biguplus\",\n  \"\\u2a06\": \"\\\\bigsqcup\"\n};\ndefineFunction({\n  type: \"op\",\n  names: [\"\\\\coprod\", \"\\\\bigvee\", \"\\\\bigwedge\", \"\\\\biguplus\", \"\\\\bigcap\", \"\\\\bigcup\", \"\\\\intop\", \"\\\\prod\", \"\\\\sum\", \"\\\\bigotimes\", \"\\\\bigoplus\", \"\\\\bigodot\", \"\\\\bigsqcup\", \"\\\\smallint\", \"\\u220F\", \"\\u2210\", \"\\u2211\", \"\\u22c0\", \"\\u22c1\", \"\\u22c2\", \"\\u22c3\", \"\\u2a00\", \"\\u2a01\", \"\\u2a02\", \"\\u2a04\", \"\\u2a06\"],\n  props: {\n    numArgs: 0\n  },\n  handler: (_ref, args) => {\n    var {\n      parser,\n      funcName\n    } = _ref;\n    var fName = funcName;\n    if (fName.length === 1) {\n      fName = singleCharBigOps[fName];\n    }\n    return {\n      type: \"op\",\n      mode: parser.mode,\n      limits: true,\n      parentIsSupSub: false,\n      symbol: true,\n      name: fName\n    };\n  },\n  htmlBuilder: htmlBuilder$2,\n  mathmlBuilder: mathmlBuilder$1\n});\n// Note: calling defineFunction with a type that's already been defined only\n// works because the same htmlBuilder and mathmlBuilder are being used.\ndefineFunction({\n  type: \"op\",\n  names: [\"\\\\mathop\"],\n  props: {\n    numArgs: 1,\n    primitive: true\n  },\n  handler: (_ref2, args) => {\n    var {\n      parser\n    } = _ref2;\n    var body = args[0];\n    return {\n      type: \"op\",\n      mode: parser.mode,\n      limits: false,\n      parentIsSupSub: false,\n      symbol: false,\n      body: ordargument(body)\n    };\n  },\n  htmlBuilder: htmlBuilder$2,\n  mathmlBuilder: mathmlBuilder$1\n});\n// There are 2 flags for operators; whether they produce limits in\n// displaystyle, and whether they are symbols and should grow in\n// displaystyle. These four groups cover the four possible choices.\nvar singleCharIntegrals = {\n  \"\\u222b\": \"\\\\int\",\n  \"\\u222c\": \"\\\\iint\",\n  \"\\u222d\": \"\\\\iiint\",\n  \"\\u222e\": \"\\\\oint\",\n  \"\\u222f\": \"\\\\oiint\",\n  \"\\u2230\": \"\\\\oiiint\"\n};\n// No limits, not symbols\ndefineFunction({\n  type: \"op\",\n  names: [\"\\\\arcsin\", \"\\\\arccos\", \"\\\\arctan\", \"\\\\arctg\", \"\\\\arcctg\", \"\\\\arg\", \"\\\\ch\", \"\\\\cos\", \"\\\\cosec\", \"\\\\cosh\", \"\\\\cot\", \"\\\\cotg\", \"\\\\coth\", \"\\\\csc\", \"\\\\ctg\", \"\\\\cth\", \"\\\\deg\", \"\\\\dim\", \"\\\\exp\", \"\\\\hom\", \"\\\\ker\", \"\\\\lg\", \"\\\\ln\", \"\\\\log\", \"\\\\sec\", \"\\\\sin\", \"\\\\sinh\", \"\\\\sh\", \"\\\\tan\", \"\\\\tanh\", \"\\\\tg\", \"\\\\th\"],\n  props: {\n    numArgs: 0\n  },\n  handler(_ref3) {\n    var {\n      parser,\n      funcName\n    } = _ref3;\n    return {\n      type: \"op\",\n      mode: parser.mode,\n      limits: false,\n      parentIsSupSub: false,\n      symbol: false,\n      name: funcName\n    };\n  },\n  htmlBuilder: htmlBuilder$2,\n  mathmlBuilder: mathmlBuilder$1\n});\n// Limits, not symbols\ndefineFunction({\n  type: \"op\",\n  names: [\"\\\\det\", \"\\\\gcd\", \"\\\\inf\", \"\\\\lim\", \"\\\\max\", \"\\\\min\", \"\\\\Pr\", \"\\\\sup\"],\n  props: {\n    numArgs: 0\n  },\n  handler(_ref4) {\n    var {\n      parser,\n      funcName\n    } = _ref4;\n    return {\n      type: \"op\",\n      mode: parser.mode,\n      limits: true,\n      parentIsSupSub: false,\n      symbol: false,\n      name: funcName\n    };\n  },\n  htmlBuilder: htmlBuilder$2,\n  mathmlBuilder: mathmlBuilder$1\n});\n// No limits, symbols\ndefineFunction({\n  type: \"op\",\n  names: [\"\\\\int\", \"\\\\iint\", \"\\\\iiint\", \"\\\\oint\", \"\\\\oiint\", \"\\\\oiiint\", \"\\u222b\", \"\\u222c\", \"\\u222d\", \"\\u222e\", \"\\u222f\", \"\\u2230\"],\n  props: {\n    numArgs: 0,\n    allowedInArgument: true\n  },\n  handler(_ref5) {\n    var {\n      parser,\n      funcName\n    } = _ref5;\n    var fName = funcName;\n    if (fName.length === 1) {\n      fName = singleCharIntegrals[fName];\n    }\n    return {\n      type: \"op\",\n      mode: parser.mode,\n      limits: false,\n      parentIsSupSub: false,\n      symbol: true,\n      name: fName\n    };\n  },\n  htmlBuilder: htmlBuilder$2,\n  mathmlBuilder: mathmlBuilder$1\n});\n\n// NOTE: Unlike most `htmlBuilder`s, this one handles not only\n// \"operatorname\", but also  \"supsub\" since \\operatorname* can\n// affect super/subscripting.\nvar htmlBuilder$1 = (grp, options) => {\n  // Operators are handled in the TeXbook pg. 443-444, rule 13(a).\n  var supGroup;\n  var subGroup;\n  var hasLimits = false;\n  var group;\n  if (grp.type === \"supsub\") {\n    // If we have limits, supsub will pass us its group to handle. Pull\n    // out the superscript and subscript and set the group to the op in\n    // its base.\n    supGroup = grp.sup;\n    subGroup = grp.sub;\n    group = assertNodeType(grp.base, \"operatorname\");\n    hasLimits = true;\n  } else {\n    group = assertNodeType(grp, \"operatorname\");\n  }\n  var base;\n  if (group.body.length > 0) {\n    var body = group.body.map(child => {\n      var childText = \"text\" in child ? child.text : undefined;\n      if (typeof childText === \"string\") {\n        return {\n          type: \"textord\",\n          mode: child.mode,\n          text: childText\n        };\n      } else {\n        return child;\n      }\n    });\n    // Consolidate function names into symbol characters.\n    var expression = buildExpression$1(body, options.withFont(\"mathrm\"), true);\n    for (var i = 0; i < expression.length; i++) {\n      var child = expression[i];\n      if (child instanceof SymbolNode) {\n        // Per amsopn package,\n        // change minus to hyphen and \\ast to asterisk\n        child.text = child.text.replace(/\\u2212/, \"-\").replace(/\\u2217/, \"*\");\n      }\n    }\n    base = makeSpan([\"mop\"], expression, options);\n  } else {\n    base = makeSpan([\"mop\"], [], options);\n  }\n  if (hasLimits) {\n    return assembleSupSub(base, supGroup, subGroup, options, options.style, 0, 0);\n  } else {\n    return base;\n  }\n};\nvar mathmlBuilder = (group, options) => {\n  // The steps taken here are similar to the html version.\n  var expression = buildExpression(group.body, options.withFont(\"mathrm\"));\n  // Is expression a string or has it something like a fraction?\n  var isAllString = true; // default\n  for (var i = 0; i < expression.length; i++) {\n    var node = expression[i];\n    if (node instanceof SpaceNode) ; else if (node instanceof MathNode) {\n      switch (node.type) {\n        case \"mi\":\n        case \"mn\":\n        case \"mspace\":\n        case \"mtext\":\n          break;\n        // Do nothing yet.\n        case \"mo\":\n          {\n            var child = node.children[0];\n            if (node.children.length === 1 && child instanceof TextNode) {\n              child.text = child.text.replace(/\\u2212/, \"-\").replace(/\\u2217/, \"*\");\n            } else {\n              isAllString = false;\n            }\n            break;\n          }\n        default:\n          isAllString = false;\n      }\n    } else {\n      isAllString = false;\n    }\n  }\n  if (isAllString) {\n    // Write a single TextNode instead of multiple nested tags.\n    var word = expression.map(node => node.toText()).join(\"\");\n    expression = [new TextNode(word)];\n  }\n  var identifier = new MathNode(\"mi\", expression);\n  identifier.setAttribute(\"mathvariant\", \"normal\");\n  // \\u2061 is the same as &ApplyFunction;\n  // ref: https://www.w3schools.com/charsets/ref_html_entities_a.asp\n  var operator = new MathNode(\"mo\", [makeText(\"\\u2061\", \"text\")]);\n  if (group.parentIsSupSub) {\n    return new MathNode(\"mrow\", [identifier, operator]);\n  } else {\n    return newDocumentFragment([identifier, operator]);\n  }\n};\n// \\operatorname\n// amsopn.dtx: \\mathop{#1\\kern\\z@\\operator@font#3}\\newmcodes@\ndefineFunction({\n  type: \"operatorname\",\n  names: [\"\\\\operatorname@\", \"\\\\operatornamewithlimits\"],\n  props: {\n    numArgs: 1\n  },\n  handler: (_ref, args) => {\n    var {\n      parser,\n      funcName\n    } = _ref;\n    var body = args[0];\n    return {\n      type: \"operatorname\",\n      mode: parser.mode,\n      body: ordargument(body),\n      alwaysHandleSupSub: funcName === \"\\\\operatornamewithlimits\",\n      limits: false,\n      parentIsSupSub: false\n    };\n  },\n  htmlBuilder: htmlBuilder$1,\n  mathmlBuilder\n});\ndefineMacro(\"\\\\operatorname\", \"\\\\@ifstar\\\\operatornamewithlimits\\\\operatorname@\");\n\ndefineFunctionBuilders({\n  type: \"ordgroup\",\n  htmlBuilder(group, options) {\n    if (group.semisimple) {\n      return makeFragment(buildExpression$1(group.body, options, false));\n    }\n    return makeSpan([\"mord\"], buildExpression$1(group.body, options, true), options);\n  },\n  mathmlBuilder(group, options) {\n    return buildExpressionRow(group.body, options, true);\n  }\n});\n\ndefineFunction({\n  type: \"overline\",\n  names: [\"\\\\overline\"],\n  props: {\n    numArgs: 1\n  },\n  handler(_ref, args) {\n    var {\n      parser\n    } = _ref;\n    var body = args[0];\n    return {\n      type: \"overline\",\n      mode: parser.mode,\n      body\n    };\n  },\n  htmlBuilder(group, options) {\n    // Overlines are handled in the TeXbook pg 443, Rule 9.\n    // Build the inner group in the cramped style.\n    var innerGroup = buildGroup$1(group.body, options.havingCrampedStyle());\n    // Create the line above the body\n    var line = makeLineSpan(\"overline-line\", options);\n    // Generate the vlist, with the appropriate kerns\n    var defaultRuleThickness = options.fontMetrics().defaultRuleThickness;\n    var vlist = makeVList({\n      positionType: \"firstBaseline\",\n      children: [{\n        type: \"elem\",\n        elem: innerGroup\n      }, {\n        type: \"kern\",\n        size: 3 * defaultRuleThickness\n      }, {\n        type: \"elem\",\n        elem: line\n      }, {\n        type: \"kern\",\n        size: defaultRuleThickness\n      }]\n    });\n    return makeSpan([\"mord\", \"overline\"], [vlist], options);\n  },\n  mathmlBuilder(group, options) {\n    var operator = new MathNode(\"mo\", [new TextNode(\"\\u203e\")]);\n    operator.setAttribute(\"stretchy\", \"true\");\n    var node = new MathNode(\"mover\", [buildGroup(group.body, options), operator]);\n    node.setAttribute(\"accent\", \"true\");\n    return node;\n  }\n});\n\ndefineFunction({\n  type: \"phantom\",\n  names: [\"\\\\phantom\"],\n  props: {\n    numArgs: 1,\n    allowedInText: true\n  },\n  handler: (_ref, args) => {\n    var {\n      parser\n    } = _ref;\n    var body = args[0];\n    return {\n      type: \"phantom\",\n      mode: parser.mode,\n      body: ordargument(body)\n    };\n  },\n  htmlBuilder: (group, options) => {\n    var elements = buildExpression$1(group.body, options.withPhantom(), false);\n    // \\phantom isn't supposed to affect the elements it contains.\n    // See \"color\" for more details.\n    return makeFragment(elements);\n  },\n  mathmlBuilder: (group, options) => {\n    var inner = buildExpression(group.body, options);\n    return new MathNode(\"mphantom\", inner);\n  }\n});\ndefineMacro(\"\\\\hphantom\", \"\\\\smash{\\\\phantom{#1}}\");\ndefineFunction({\n  type: \"vphantom\",\n  names: [\"\\\\vphantom\"],\n  props: {\n    numArgs: 1,\n    allowedInText: true\n  },\n  handler: (_ref2, args) => {\n    var {\n      parser\n    } = _ref2;\n    var body = args[0];\n    return {\n      type: \"vphantom\",\n      mode: parser.mode,\n      body\n    };\n  },\n  htmlBuilder: (group, options) => {\n    var inner = makeSpan([\"inner\"], [buildGroup$1(group.body, options.withPhantom())]);\n    var fix = makeSpan([\"fix\"], []);\n    return makeSpan([\"mord\", \"rlap\"], [inner, fix], options);\n  },\n  mathmlBuilder: (group, options) => {\n    var inner = buildExpression(ordargument(group.body), options);\n    var phantom = new MathNode(\"mphantom\", inner);\n    var node = new MathNode(\"mpadded\", [phantom]);\n    node.setAttribute(\"width\", \"0px\");\n    return node;\n  }\n});\n\n// Box manipulation\ndefineFunction({\n  type: \"raisebox\",\n  names: [\"\\\\raisebox\"],\n  props: {\n    numArgs: 2,\n    argTypes: [\"size\", \"hbox\"],\n    allowedInText: true\n  },\n  handler(_ref, args) {\n    var {\n      parser\n    } = _ref;\n    var amount = assertNodeType(args[0], \"size\").value;\n    var body = args[1];\n    return {\n      type: \"raisebox\",\n      mode: parser.mode,\n      dy: amount,\n      body\n    };\n  },\n  htmlBuilder(group, options) {\n    var body = buildGroup$1(group.body, options);\n    var dy = calculateSize(group.dy, options);\n    return makeVList({\n      positionType: \"shift\",\n      positionData: -dy,\n      children: [{\n        type: \"elem\",\n        elem: body\n      }]\n    });\n  },\n  mathmlBuilder(group, options) {\n    var node = new MathNode(\"mpadded\", [buildGroup(group.body, options)]);\n    var dy = group.dy.number + group.dy.unit;\n    node.setAttribute(\"voffset\", dy);\n    return node;\n  }\n});\n\ndefineFunction({\n  type: \"internal\",\n  names: [\"\\\\relax\"],\n  props: {\n    numArgs: 0,\n    allowedInText: true,\n    allowedInArgument: true\n  },\n  handler(_ref) {\n    var {\n      parser\n    } = _ref;\n    return {\n      type: \"internal\",\n      mode: parser.mode\n    };\n  }\n});\n\ndefineFunction({\n  type: \"rule\",\n  names: [\"\\\\rule\"],\n  props: {\n    numArgs: 2,\n    numOptionalArgs: 1,\n    allowedInText: true,\n    allowedInMath: true,\n    argTypes: [\"size\", \"size\", \"size\"]\n  },\n  handler(_ref, args, optArgs) {\n    var {\n      parser\n    } = _ref;\n    var shift = optArgs[0];\n    var width = assertNodeType(args[0], \"size\");\n    var height = assertNodeType(args[1], \"size\");\n    return {\n      type: \"rule\",\n      mode: parser.mode,\n      shift: shift && assertNodeType(shift, \"size\").value,\n      width: width.value,\n      height: height.value\n    };\n  },\n  htmlBuilder(group, options) {\n    // Make an empty span for the rule\n    var rule = makeSpan([\"mord\", \"rule\"], [], options);\n    // Calculate the shift, width, and height of the rule, and account for units\n    var width = calculateSize(group.width, options);\n    var height = calculateSize(group.height, options);\n    var shift = group.shift ? calculateSize(group.shift, options) : 0;\n    // Style the rule to the right size\n    rule.style.borderRightWidth = makeEm(width);\n    rule.style.borderTopWidth = makeEm(height);\n    rule.style.bottom = makeEm(shift);\n    // Record the height and width\n    rule.width = width;\n    rule.height = height + shift;\n    rule.depth = -shift;\n    // Font size is the number large enough that the browser will\n    // reserve at least `absHeight` space above the baseline.\n    // The 1.125 factor was empirically determined\n    rule.maxFontSize = height * 1.125 * options.sizeMultiplier;\n    return rule;\n  },\n  mathmlBuilder(group, options) {\n    var width = calculateSize(group.width, options);\n    var height = calculateSize(group.height, options);\n    var shift = group.shift ? calculateSize(group.shift, options) : 0;\n    var color = options.color && options.getColor() || \"black\";\n    var rule = new MathNode(\"mspace\");\n    rule.setAttribute(\"mathbackground\", color);\n    rule.setAttribute(\"width\", makeEm(width));\n    rule.setAttribute(\"height\", makeEm(height));\n    var wrapper = new MathNode(\"mpadded\", [rule]);\n    if (shift >= 0) {\n      wrapper.setAttribute(\"height\", makeEm(shift));\n    } else {\n      wrapper.setAttribute(\"height\", makeEm(shift));\n      wrapper.setAttribute(\"depth\", makeEm(-shift));\n    }\n    wrapper.setAttribute(\"voffset\", makeEm(shift));\n    return wrapper;\n  }\n});\n\nfunction sizingGroup(value, options, baseOptions) {\n  var inner = buildExpression$1(value, options, false);\n  var multiplier = options.sizeMultiplier / baseOptions.sizeMultiplier;\n  // Add size-resetting classes to the inner list and set maxFontSize\n  // manually. Handle nested size changes.\n  for (var i = 0; i < inner.length; i++) {\n    var pos = inner[i].classes.indexOf(\"sizing\");\n    if (pos < 0) {\n      Array.prototype.push.apply(inner[i].classes, options.sizingClasses(baseOptions));\n    } else if (inner[i].classes[pos + 1] === \"reset-size\" + options.size) {\n      // This is a nested size change: e.g., inner[i] is the \"b\" in\n      // `\\Huge a \\small b`. Override the old size (the `reset-` class)\n      // but not the new size.\n      inner[i].classes[pos + 1] = \"reset-size\" + baseOptions.size;\n    }\n    inner[i].height *= multiplier;\n    inner[i].depth *= multiplier;\n  }\n  return makeFragment(inner);\n}\nvar sizeFuncs = [\"\\\\tiny\", \"\\\\sixptsize\", \"\\\\scriptsize\", \"\\\\footnotesize\", \"\\\\small\", \"\\\\normalsize\", \"\\\\large\", \"\\\\Large\", \"\\\\LARGE\", \"\\\\huge\", \"\\\\Huge\"];\nvar htmlBuilder = (group, options) => {\n  // Handle sizing operators like \\Huge. Real TeX doesn't actually allow\n  // these functions inside of math expressions, so we do some special\n  // handling.\n  var newOptions = options.havingSize(group.size);\n  return sizingGroup(group.body, newOptions, options);\n};\ndefineFunction({\n  type: \"sizing\",\n  names: sizeFuncs,\n  props: {\n    numArgs: 0,\n    allowedInText: true\n  },\n  handler: (_ref, args) => {\n    var {\n      breakOnTokenText,\n      funcName,\n      parser\n    } = _ref;\n    var body = parser.parseExpression(false, breakOnTokenText);\n    return {\n      type: \"sizing\",\n      mode: parser.mode,\n      // Figure out what size to use based on the list of functions above\n      size: sizeFuncs.indexOf(funcName) + 1,\n      body\n    };\n  },\n  htmlBuilder,\n  mathmlBuilder: (group, options) => {\n    var newOptions = options.havingSize(group.size);\n    var inner = buildExpression(group.body, newOptions);\n    var node = new MathNode(\"mstyle\", inner);\n    // TODO(emily): This doesn't produce the correct size for nested size\n    // changes, because we don't keep state of what style we're currently\n    // in, so we can't reset the size to normal before changing it.  Now\n    // that we're passing an options parameter we should be able to fix\n    // this.\n    node.setAttribute(\"mathsize\", makeEm(newOptions.sizeMultiplier));\n    return node;\n  }\n});\n\n// smash, with optional [tb], as in AMS\ndefineFunction({\n  type: \"smash\",\n  names: [\"\\\\smash\"],\n  props: {\n    numArgs: 1,\n    numOptionalArgs: 1,\n    allowedInText: true\n  },\n  handler: (_ref, args, optArgs) => {\n    var {\n      parser\n    } = _ref;\n    var smashHeight = false;\n    var smashDepth = false;\n    var tbArg = optArgs[0] && assertNodeType(optArgs[0], \"ordgroup\");\n    if (tbArg) {\n      // Optional [tb] argument is engaged.\n      // ref: amsmath: \\renewcommand{\\smash}[1][tb]{%\n      //               def\\mb@t{\\ht}\\def\\mb@b{\\dp}\\def\\mb@tb{\\ht\\z@\\z@\\dp}%\n      var letter = \"\";\n      for (var i = 0; i < tbArg.body.length; ++i) {\n        var node = tbArg.body[i];\n        letter = assertSymbolNodeType(node).text;\n        if (letter === \"t\") {\n          smashHeight = true;\n        } else if (letter === \"b\") {\n          smashDepth = true;\n        } else {\n          smashHeight = false;\n          smashDepth = false;\n          break;\n        }\n      }\n    } else {\n      smashHeight = true;\n      smashDepth = true;\n    }\n    var body = args[0];\n    return {\n      type: \"smash\",\n      mode: parser.mode,\n      body,\n      smashHeight,\n      smashDepth\n    };\n  },\n  htmlBuilder: (group, options) => {\n    var node = makeSpan([], [buildGroup$1(group.body, options)]);\n    if (!group.smashHeight && !group.smashDepth) {\n      return node;\n    }\n    if (group.smashHeight) {\n      node.height = 0;\n    }\n    if (group.smashDepth) {\n      node.depth = 0;\n    }\n    if (group.smashHeight && group.smashDepth) {\n      // Symmetric \\smash can stay in inline layout.\n      return makeSpan([\"mord\", \"smash\"], [node], options);\n    }\n    // In order to influence makeVList for asymmetric smashing, we have to\n    // reset the children.\n    if (node.children) {\n      for (var i = 0; i < node.children.length; i++) {\n        if (group.smashHeight) {\n          node.children[i].height = 0;\n        }\n        if (group.smashDepth) {\n          node.children[i].depth = 0;\n        }\n      }\n    }\n    // At this point, we've reset the TeX-like height and depth values.\n    // But the span still has an HTML line height.\n    // makeVList applies \"display: table-cell\", which prevents the browser\n    // from acting on that line height. So we'll call makeVList now.\n    var smashedNode = makeVList({\n      positionType: \"firstBaseline\",\n      children: [{\n        type: \"elem\",\n        elem: node\n      }]\n    });\n    // For spacing, TeX treats \\smash as a math group (same spacing as ord).\n    return makeSpan([\"mord\"], [smashedNode], options);\n  },\n  mathmlBuilder: (group, options) => {\n    var node = new MathNode(\"mpadded\", [buildGroup(group.body, options)]);\n    if (group.smashHeight) {\n      node.setAttribute(\"height\", \"0px\");\n    }\n    if (group.smashDepth) {\n      node.setAttribute(\"depth\", \"0px\");\n    }\n    return node;\n  }\n});\n\ndefineFunction({\n  type: \"sqrt\",\n  names: [\"\\\\sqrt\"],\n  props: {\n    numArgs: 1,\n    numOptionalArgs: 1\n  },\n  handler(_ref, args, optArgs) {\n    var {\n      parser\n    } = _ref;\n    var index = optArgs[0];\n    var body = args[0];\n    return {\n      type: \"sqrt\",\n      mode: parser.mode,\n      body,\n      index\n    };\n  },\n  htmlBuilder(group, options) {\n    // Square roots are handled in the TeXbook pg. 443, Rule 11.\n    // First, we do the same steps as in overline to build the inner group\n    // and line\n    var inner = buildGroup$1(group.body, options.havingCrampedStyle());\n    if (inner.height === 0) {\n      // Render a small surd.\n      inner.height = options.fontMetrics().xHeight;\n    }\n    // Some groups can return document fragments.  Handle those by wrapping\n    // them in a span.\n    inner = wrapFragment(inner, options);\n    // Calculate the minimum size for the \\surd delimiter\n    var metrics = options.fontMetrics();\n    var theta = metrics.defaultRuleThickness;\n    var phi = theta;\n    if (options.style.id < Style$1.TEXT.id) {\n      phi = options.fontMetrics().xHeight;\n    }\n    // Calculate the clearance between the body and line\n    var lineClearance = theta + phi / 4;\n    var minDelimiterHeight = inner.height + inner.depth + lineClearance + theta;\n    // Create a sqrt SVG of the required minimum size\n    var {\n      span: img,\n      ruleWidth,\n      advanceWidth\n    } = makeSqrtImage(minDelimiterHeight, options);\n    var delimDepth = img.height - ruleWidth;\n    // Adjust the clearance based on the delimiter size\n    if (delimDepth > inner.height + inner.depth + lineClearance) {\n      lineClearance = (lineClearance + delimDepth - inner.height - inner.depth) / 2;\n    }\n    // Shift the sqrt image\n    var imgShift = img.height - inner.height - lineClearance - ruleWidth;\n    inner.style.paddingLeft = makeEm(advanceWidth);\n    // Overlay the image and the argument.\n    var body = makeVList({\n      positionType: \"firstBaseline\",\n      children: [{\n        type: \"elem\",\n        elem: inner,\n        wrapperClasses: [\"svg-align\"]\n      }, {\n        type: \"kern\",\n        size: -(inner.height + imgShift)\n      }, {\n        type: \"elem\",\n        elem: img\n      }, {\n        type: \"kern\",\n        size: ruleWidth\n      }]\n    });\n    if (!group.index) {\n      return makeSpan([\"mord\", \"sqrt\"], [body], options);\n    } else {\n      // Handle the optional root index\n      // The index is always in scriptscript style\n      var newOptions = options.havingStyle(Style$1.SCRIPTSCRIPT);\n      var rootm = buildGroup$1(group.index, newOptions, options);\n      // The amount the index is shifted by. This is taken from the TeX\n      // source, in the definition of `\\r@@t`.\n      var toShift = 0.6 * (body.height - body.depth);\n      // Build a VList with the superscript shifted up correctly\n      var rootVList = makeVList({\n        positionType: \"shift\",\n        positionData: -toShift,\n        children: [{\n          type: \"elem\",\n          elem: rootm\n        }]\n      });\n      // Add a class surrounding it so we can add on the appropriate\n      // kerning\n      var rootVListWrap = makeSpan([\"root\"], [rootVList]);\n      return makeSpan([\"mord\", \"sqrt\"], [rootVListWrap, body], options);\n    }\n  },\n  mathmlBuilder(group, options) {\n    var {\n      body,\n      index\n    } = group;\n    return index ? new MathNode(\"mroot\", [buildGroup(body, options), buildGroup(index, options)]) : new MathNode(\"msqrt\", [buildGroup(body, options)]);\n  }\n});\n\nvar styleMap = {\n  \"display\": Style$1.DISPLAY,\n  \"text\": Style$1.TEXT,\n  \"script\": Style$1.SCRIPT,\n  \"scriptscript\": Style$1.SCRIPTSCRIPT\n};\ndefineFunction({\n  type: \"styling\",\n  names: [\"\\\\displaystyle\", \"\\\\textstyle\", \"\\\\scriptstyle\", \"\\\\scriptscriptstyle\"],\n  props: {\n    numArgs: 0,\n    allowedInText: true,\n    primitive: true\n  },\n  handler(_ref, args) {\n    var {\n      breakOnTokenText,\n      funcName,\n      parser\n    } = _ref;\n    // parse out the implicit body\n    var body = parser.parseExpression(true, breakOnTokenText);\n    // TODO: Refactor to avoid duplicating styleMap in multiple places (e.g.\n    // here and in buildHTML and de-dupe the enumeration of all the styles).\n    // TODO(ts): The names above exactly match the styles.\n    var style = funcName.slice(1, funcName.length - 5);\n    return {\n      type: \"styling\",\n      mode: parser.mode,\n      // Figure out what style to use by pulling out the style from\n      // the function name\n      style,\n      body\n    };\n  },\n  htmlBuilder(group, options) {\n    // Style changes are handled in the TeXbook on pg. 442, Rule 3.\n    var newStyle = styleMap[group.style];\n    var newOptions = options.havingStyle(newStyle).withFont('');\n    return sizingGroup(group.body, newOptions, options);\n  },\n  mathmlBuilder(group, options) {\n    // Figure out what style we're changing to.\n    var newStyle = styleMap[group.style];\n    var newOptions = options.havingStyle(newStyle);\n    var inner = buildExpression(group.body, newOptions);\n    var node = new MathNode(\"mstyle\", inner);\n    var styleAttributes = {\n      \"display\": [\"0\", \"true\"],\n      \"text\": [\"0\", \"false\"],\n      \"script\": [\"1\", \"false\"],\n      \"scriptscript\": [\"2\", \"false\"]\n    };\n    var attr = styleAttributes[group.style];\n    node.setAttribute(\"scriptlevel\", attr[0]);\n    node.setAttribute(\"displaystyle\", attr[1]);\n    return node;\n  }\n});\n\n/**\n * Sometimes, groups perform special rules when they have superscripts or\n * subscripts attached to them. This function lets the `supsub` group know that\n * Sometimes, groups perform special rules when they have superscripts or\n * its inner element should handle the superscripts and subscripts instead of\n * handling them itself.\n */\nvar htmlBuilderDelegate = function htmlBuilderDelegate(group, options) {\n  var base = group.base;\n  if (!base) {\n    return null;\n  } else if (base.type === \"op\") {\n    // Operators handle supsubs differently when they have limits\n    // (e.g. `\\displaystyle\\sum_2^3`)\n    var delegate = base.limits && (options.style.size === Style$1.DISPLAY.size || base.alwaysHandleSupSub);\n    return delegate ? htmlBuilder$2 : null;\n  } else if (base.type === \"operatorname\") {\n    var _delegate = base.alwaysHandleSupSub && (options.style.size === Style$1.DISPLAY.size || base.limits);\n    return _delegate ? htmlBuilder$1 : null;\n  } else if (base.type === \"accent\") {\n    return isCharacterBox(base.base) ? htmlBuilder$a : null;\n  } else if (base.type === \"horizBrace\") {\n    var isSup = !group.sub;\n    return isSup === base.isOver ? htmlBuilder$3 : null;\n  } else {\n    return null;\n  }\n};\n// Super scripts and subscripts, whose precise placement can depend on other\n// functions that precede them.\ndefineFunctionBuilders({\n  type: \"supsub\",\n  htmlBuilder(group, options) {\n    // Superscript and subscripts are handled in the TeXbook on page\n    // 445-446, rules 18(a-f).\n    // Here is where we defer to the inner group if it should handle\n    // superscripts and subscripts itself.\n    var builderDelegate = htmlBuilderDelegate(group, options);\n    if (builderDelegate) {\n      return builderDelegate(group, options);\n    }\n    var {\n      base: valueBase,\n      sup: valueSup,\n      sub: valueSub\n    } = group;\n    var base = buildGroup$1(valueBase, options);\n    var supm;\n    var subm;\n    var metrics = options.fontMetrics();\n    // Rule 18a\n    var supShift = 0;\n    var subShift = 0;\n    var isCharBox = valueBase && isCharacterBox(valueBase);\n    if (valueSup) {\n      var newOptions = options.havingStyle(options.style.sup());\n      supm = buildGroup$1(valueSup, newOptions, options);\n      if (!isCharBox) {\n        supShift = base.height - newOptions.fontMetrics().supDrop * newOptions.sizeMultiplier / options.sizeMultiplier;\n      }\n    }\n    if (valueSub) {\n      var _newOptions = options.havingStyle(options.style.sub());\n      subm = buildGroup$1(valueSub, _newOptions, options);\n      if (!isCharBox) {\n        subShift = base.depth + _newOptions.fontMetrics().subDrop * _newOptions.sizeMultiplier / options.sizeMultiplier;\n      }\n    }\n    // Rule 18c\n    var minSupShift;\n    if (options.style === Style$1.DISPLAY) {\n      minSupShift = metrics.sup1;\n    } else if (options.style.cramped) {\n      minSupShift = metrics.sup3;\n    } else {\n      minSupShift = metrics.sup2;\n    }\n    // scriptspace is a font-size-independent size, so scale it\n    // appropriately for use as the marginRight.\n    var multiplier = options.sizeMultiplier;\n    var marginRight = makeEm(0.5 / metrics.ptPerEm / multiplier);\n    var marginLeft = null;\n    if (subm) {\n      // Subscripts shouldn't be shifted by the base's italic correction.\n      // Account for that by shifting the subscript back the appropriate\n      // amount. Note we only do this when the base is a single symbol.\n      var isOiint = group.base && group.base.type === \"op\" && group.base.name && (group.base.name === \"\\\\oiint\" || group.base.name === \"\\\\oiiint\");\n      if (base instanceof SymbolNode || isOiint) {\n        // @ts-ignore\n        marginLeft = makeEm(-base.italic);\n      }\n    }\n    var supsub;\n    if (supm && subm) {\n      supShift = Math.max(supShift, minSupShift, supm.depth + 0.25 * metrics.xHeight);\n      subShift = Math.max(subShift, metrics.sub2);\n      var ruleWidth = metrics.defaultRuleThickness;\n      // Rule 18e\n      var maxWidth = 4 * ruleWidth;\n      if (supShift - supm.depth - (subm.height - subShift) < maxWidth) {\n        subShift = maxWidth - (supShift - supm.depth) + subm.height;\n        var psi = 0.8 * metrics.xHeight - (supShift - supm.depth);\n        if (psi > 0) {\n          supShift += psi;\n          subShift -= psi;\n        }\n      }\n      var vlistElem = [{\n        type: \"elem\",\n        elem: subm,\n        shift: subShift,\n        marginRight,\n        marginLeft\n      }, {\n        type: \"elem\",\n        elem: supm,\n        shift: -supShift,\n        marginRight\n      }];\n      supsub = makeVList({\n        positionType: \"individualShift\",\n        children: vlistElem\n      });\n    } else if (subm) {\n      // Rule 18b\n      subShift = Math.max(subShift, metrics.sub1, subm.height - 0.8 * metrics.xHeight);\n      var _vlistElem = [{\n        type: \"elem\",\n        elem: subm,\n        marginLeft,\n        marginRight\n      }];\n      supsub = makeVList({\n        positionType: \"shift\",\n        positionData: subShift,\n        children: _vlistElem\n      });\n    } else if (supm) {\n      // Rule 18c, d\n      supShift = Math.max(supShift, minSupShift, supm.depth + 0.25 * metrics.xHeight);\n      supsub = makeVList({\n        positionType: \"shift\",\n        positionData: -supShift,\n        children: [{\n          type: \"elem\",\n          elem: supm,\n          marginRight\n        }]\n      });\n    } else {\n      throw new Error(\"supsub must have either sup or sub.\");\n    }\n    // Wrap the supsub vlist in a span.msupsub to reset text-align.\n    var mclass = getTypeOfDomTree(base, \"right\") || \"mord\";\n    return makeSpan([mclass], [base, makeSpan([\"msupsub\"], [supsub])], options);\n  },\n  mathmlBuilder(group, options) {\n    // Is the inner group a relevant horizontal brace?\n    var isBrace = false;\n    var isOver;\n    var isSup;\n    if (group.base && group.base.type === \"horizBrace\") {\n      isSup = !!group.sup;\n      if (isSup === group.base.isOver) {\n        isBrace = true;\n        isOver = group.base.isOver;\n      }\n    }\n    if (group.base && (group.base.type === \"op\" || group.base.type === \"operatorname\")) {\n      group.base.parentIsSupSub = true;\n    }\n    var children = [buildGroup(group.base, options)];\n    if (group.sub) {\n      children.push(buildGroup(group.sub, options));\n    }\n    if (group.sup) {\n      children.push(buildGroup(group.sup, options));\n    }\n    var nodeType;\n    if (isBrace) {\n      nodeType = isOver ? \"mover\" : \"munder\";\n    } else if (!group.sub) {\n      var base = group.base;\n      if (base && base.type === \"op\" && base.limits && (options.style === Style$1.DISPLAY || base.alwaysHandleSupSub)) {\n        nodeType = \"mover\";\n      } else if (base && base.type === \"operatorname\" && base.alwaysHandleSupSub && (base.limits || options.style === Style$1.DISPLAY)) {\n        nodeType = \"mover\";\n      } else {\n        nodeType = \"msup\";\n      }\n    } else if (!group.sup) {\n      var _base = group.base;\n      if (_base && _base.type === \"op\" && _base.limits && (options.style === Style$1.DISPLAY || _base.alwaysHandleSupSub)) {\n        nodeType = \"munder\";\n      } else if (_base && _base.type === \"operatorname\" && _base.alwaysHandleSupSub && (_base.limits || options.style === Style$1.DISPLAY)) {\n        nodeType = \"munder\";\n      } else {\n        nodeType = \"msub\";\n      }\n    } else {\n      var _base2 = group.base;\n      if (_base2 && _base2.type === \"op\" && _base2.limits && options.style === Style$1.DISPLAY) {\n        nodeType = \"munderover\";\n      } else if (_base2 && _base2.type === \"operatorname\" && _base2.alwaysHandleSupSub && (options.style === Style$1.DISPLAY || _base2.limits)) {\n        nodeType = \"munderover\";\n      } else {\n        nodeType = \"msubsup\";\n      }\n    }\n    return new MathNode(nodeType, children);\n  }\n});\n\n// Operator ParseNodes created in Parser.js from symbol Groups in src/symbols.js.\ndefineFunctionBuilders({\n  type: \"atom\",\n  htmlBuilder(group, options) {\n    return mathsym(group.text, group.mode, options, [\"m\" + group.family]);\n  },\n  mathmlBuilder(group, options) {\n    var node = new MathNode(\"mo\", [makeText(group.text, group.mode)]);\n    if (group.family === \"bin\") {\n      var variant = getVariant(group, options);\n      if (variant === \"bold-italic\") {\n        node.setAttribute(\"mathvariant\", variant);\n      }\n    } else if (group.family === \"punct\") {\n      node.setAttribute(\"separator\", \"true\");\n    } else if (group.family === \"open\" || group.family === \"close\") {\n      // Delims built here should not stretch vertically.\n      // See delimsizing.js for stretchy delims.\n      node.setAttribute(\"stretchy\", \"false\");\n    }\n    return node;\n  }\n});\n\n// \"mathord\" and \"textord\" ParseNodes created in Parser.js from symbol Groups in\n// src/symbols.js.\nvar defaultVariant = {\n  \"mi\": \"italic\",\n  \"mn\": \"normal\",\n  \"mtext\": \"normal\"\n};\ndefineFunctionBuilders({\n  type: \"mathord\",\n  htmlBuilder(group, options) {\n    return makeOrd(group, options, \"mathord\");\n  },\n  mathmlBuilder(group, options) {\n    var node = new MathNode(\"mi\", [makeText(group.text, group.mode, options)]);\n    var variant = getVariant(group, options) || \"italic\";\n    if (variant !== defaultVariant[node.type]) {\n      node.setAttribute(\"mathvariant\", variant);\n    }\n    return node;\n  }\n});\ndefineFunctionBuilders({\n  type: \"textord\",\n  htmlBuilder(group, options) {\n    return makeOrd(group, options, \"textord\");\n  },\n  mathmlBuilder(group, options) {\n    var text = makeText(group.text, group.mode, options);\n    var variant = getVariant(group, options) || \"normal\";\n    var node;\n    if (group.mode === 'text') {\n      node = new MathNode(\"mtext\", [text]);\n    } else if (/[0-9]/.test(group.text)) {\n      node = new MathNode(\"mn\", [text]);\n    } else if (group.text === \"\\\\prime\") {\n      node = new MathNode(\"mo\", [text]);\n    } else {\n      node = new MathNode(\"mi\", [text]);\n    }\n    if (variant !== defaultVariant[node.type]) {\n      node.setAttribute(\"mathvariant\", variant);\n    }\n    return node;\n  }\n});\n\n// A map of CSS-based spacing functions to their CSS class.\nvar cssSpace = {\n  \"\\\\nobreak\": \"nobreak\",\n  \"\\\\allowbreak\": \"allowbreak\"\n};\n// A lookup table to determine whether a spacing function/symbol should be\n// treated like a regular space character.  If a symbol or command is a key\n// in this table, then it should be a regular space character.  Furthermore,\n// the associated value may have a `className` specifying an extra CSS class\n// to add to the created `span`.\nvar regularSpace = {\n  \" \": {},\n  \"\\\\ \": {},\n  \"~\": {\n    className: \"nobreak\"\n  },\n  \"\\\\space\": {},\n  \"\\\\nobreakspace\": {\n    className: \"nobreak\"\n  }\n};\n// ParseNode<\"spacing\"> created in Parser.js from the \"spacing\" symbol Groups in\n// src/symbols.js.\ndefineFunctionBuilders({\n  type: \"spacing\",\n  htmlBuilder(group, options) {\n    if (regularSpace.hasOwnProperty(group.text)) {\n      var className = regularSpace[group.text].className || \"\";\n      // Spaces are generated by adding an actual space. Each of these\n      // things has an entry in the symbols table, so these will be turned\n      // into appropriate outputs.\n      if (group.mode === \"text\") {\n        var ord = makeOrd(group, options, \"textord\");\n        ord.classes.push(className);\n        return ord;\n      } else {\n        return makeSpan([\"mspace\", className], [mathsym(group.text, group.mode, options)], options);\n      }\n    } else if (cssSpace.hasOwnProperty(group.text)) {\n      // Spaces based on just a CSS class.\n      return makeSpan([\"mspace\", cssSpace[group.text]], [], options);\n    } else {\n      throw new ParseError(\"Unknown type of space \\\"\" + group.text + \"\\\"\");\n    }\n  },\n  mathmlBuilder(group, options) {\n    var node;\n    if (regularSpace.hasOwnProperty(group.text)) {\n      node = new MathNode(\"mtext\", [new TextNode(\"\\u00a0\")]);\n    } else if (cssSpace.hasOwnProperty(group.text)) {\n      // CSS-based MathML spaces (\\nobreak, \\allowbreak) are ignored\n      return new MathNode(\"mspace\");\n    } else {\n      throw new ParseError(\"Unknown type of space \\\"\" + group.text + \"\\\"\");\n    }\n    return node;\n  }\n});\n\nvar pad = () => {\n  var padNode = new MathNode(\"mtd\", []);\n  padNode.setAttribute(\"width\", \"50%\");\n  return padNode;\n};\ndefineFunctionBuilders({\n  type: \"tag\",\n  mathmlBuilder(group, options) {\n    var table = new MathNode(\"mtable\", [new MathNode(\"mtr\", [pad(), new MathNode(\"mtd\", [buildExpressionRow(group.body, options)]), pad(), new MathNode(\"mtd\", [buildExpressionRow(group.tag, options)])])]);\n    table.setAttribute(\"width\", \"100%\");\n    return table;\n    // TODO: Left-aligned tags.\n    // Currently, the group and options passed here do not contain\n    // enough info to set tag alignment. `leqno` is in Settings but it is\n    // not passed to Options. On the HTML side, leqno is\n    // set by a CSS class applied in buildTree.js. That would have worked\n    // in MathML if browsers supported <mlabeledtr>. Since they don't, we\n    // need to rewrite the way this function is called.\n  }\n});\n\n// Non-mathy text, possibly in a font\nvar textFontFamilies = {\n  \"\\\\text\": undefined,\n  \"\\\\textrm\": \"textrm\",\n  \"\\\\textsf\": \"textsf\",\n  \"\\\\texttt\": \"texttt\",\n  \"\\\\textnormal\": \"textrm\"\n};\nvar textFontWeights = {\n  \"\\\\textbf\": \"textbf\",\n  \"\\\\textmd\": \"textmd\"\n};\nvar textFontShapes = {\n  \"\\\\textit\": \"textit\",\n  \"\\\\textup\": \"textup\"\n};\nvar optionsWithFont = (group, options) => {\n  var font = group.font;\n  // Checks if the argument is a font family or a font style.\n  if (!font) {\n    return options;\n  } else if (textFontFamilies[font]) {\n    return options.withTextFontFamily(textFontFamilies[font]);\n  } else if (textFontWeights[font]) {\n    return options.withTextFontWeight(textFontWeights[font]);\n  } else if (font === \"\\\\emph\") {\n    return options.fontShape === \"textit\" ? options.withTextFontShape(\"textup\") : options.withTextFontShape(\"textit\");\n  }\n  return options.withTextFontShape(textFontShapes[font]);\n};\ndefineFunction({\n  type: \"text\",\n  names: [\n  // Font families\n  \"\\\\text\", \"\\\\textrm\", \"\\\\textsf\", \"\\\\texttt\", \"\\\\textnormal\",\n  // Font weights\n  \"\\\\textbf\", \"\\\\textmd\",\n  // Font Shapes\n  \"\\\\textit\", \"\\\\textup\", \"\\\\emph\"],\n  props: {\n    numArgs: 1,\n    argTypes: [\"text\"],\n    allowedInArgument: true,\n    allowedInText: true\n  },\n  handler(_ref, args) {\n    var {\n      parser,\n      funcName\n    } = _ref;\n    var body = args[0];\n    return {\n      type: \"text\",\n      mode: parser.mode,\n      body: ordargument(body),\n      font: funcName\n    };\n  },\n  htmlBuilder(group, options) {\n    var newOptions = optionsWithFont(group, options);\n    var inner = buildExpression$1(group.body, newOptions, true);\n    return makeSpan([\"mord\", \"text\"], inner, newOptions);\n  },\n  mathmlBuilder(group, options) {\n    var newOptions = optionsWithFont(group, options);\n    return buildExpressionRow(group.body, newOptions);\n  }\n});\n\ndefineFunction({\n  type: \"underline\",\n  names: [\"\\\\underline\"],\n  props: {\n    numArgs: 1,\n    allowedInText: true\n  },\n  handler(_ref, args) {\n    var {\n      parser\n    } = _ref;\n    return {\n      type: \"underline\",\n      mode: parser.mode,\n      body: args[0]\n    };\n  },\n  htmlBuilder(group, options) {\n    // Underlines are handled in the TeXbook pg 443, Rule 10.\n    // Build the inner group.\n    var innerGroup = buildGroup$1(group.body, options);\n    // Create the line to go below the body\n    var line = makeLineSpan(\"underline-line\", options);\n    // Generate the vlist, with the appropriate kerns\n    var defaultRuleThickness = options.fontMetrics().defaultRuleThickness;\n    var vlist = makeVList({\n      positionType: \"top\",\n      positionData: innerGroup.height,\n      children: [{\n        type: \"kern\",\n        size: defaultRuleThickness\n      }, {\n        type: \"elem\",\n        elem: line\n      }, {\n        type: \"kern\",\n        size: 3 * defaultRuleThickness\n      }, {\n        type: \"elem\",\n        elem: innerGroup\n      }]\n    });\n    return makeSpan([\"mord\", \"underline\"], [vlist], options);\n  },\n  mathmlBuilder(group, options) {\n    var operator = new MathNode(\"mo\", [new TextNode(\"\\u203e\")]);\n    operator.setAttribute(\"stretchy\", \"true\");\n    var node = new MathNode(\"munder\", [buildGroup(group.body, options), operator]);\n    node.setAttribute(\"accentunder\", \"true\");\n    return node;\n  }\n});\n\n// \\vcenter:  Vertically center the argument group on the math axis.\ndefineFunction({\n  type: \"vcenter\",\n  names: [\"\\\\vcenter\"],\n  props: {\n    numArgs: 1,\n    argTypes: [\"original\"],\n    // In LaTeX, \\vcenter can act only on a box.\n    allowedInText: false\n  },\n  handler(_ref, args) {\n    var {\n      parser\n    } = _ref;\n    return {\n      type: \"vcenter\",\n      mode: parser.mode,\n      body: args[0]\n    };\n  },\n  htmlBuilder(group, options) {\n    var body = buildGroup$1(group.body, options);\n    var axisHeight = options.fontMetrics().axisHeight;\n    var dy = 0.5 * (body.height - axisHeight - (body.depth + axisHeight));\n    return makeVList({\n      positionType: \"shift\",\n      positionData: dy,\n      children: [{\n        type: \"elem\",\n        elem: body\n      }]\n    });\n  },\n  mathmlBuilder(group, options) {\n    // There is no way to do this in MathML.\n    // Write a class as a breadcrumb in case some post-processor wants\n    // to perform a vcenter adjustment.\n    // Wrap in mrow to ensure valid MathML when placed inside mo (e.g., \\mathrel)\n    var mpadded = new MathNode(\"mpadded\", [buildGroup(group.body, options)], [\"vcenter\"]);\n    return new MathNode(\"mrow\", [mpadded]);\n  }\n});\n\ndefineFunction({\n  type: \"verb\",\n  names: [\"\\\\verb\"],\n  props: {\n    numArgs: 0,\n    allowedInText: true\n  },\n  handler(context, args, optArgs) {\n    // \\verb and \\verb* are dealt with directly in Parser.js.\n    // If we end up here, it's because of a failure to match the two delimiters\n    // in the regex in Lexer.js.  LaTeX raises the following error when \\verb is\n    // terminated by end of line (or file).\n    throw new ParseError(\"\\\\verb ended by end of line instead of matching delimiter\");\n  },\n  htmlBuilder(group, options) {\n    var text = makeVerb(group);\n    var body = [];\n    // \\verb enters text mode and therefore is sized like \\textstyle\n    var newOptions = options.havingStyle(options.style.text());\n    for (var i = 0; i < text.length; i++) {\n      var c = text[i];\n      if (c === '~') {\n        c = '\\\\textasciitilde';\n      }\n      body.push(makeSymbol(c, \"Typewriter-Regular\", group.mode, newOptions, [\"mord\", \"texttt\"]));\n    }\n    return makeSpan([\"mord\", \"text\"].concat(newOptions.sizingClasses(options)), tryCombineChars(body), newOptions);\n  },\n  mathmlBuilder(group, options) {\n    var text = new TextNode(makeVerb(group));\n    var node = new MathNode(\"mtext\", [text]);\n    node.setAttribute(\"mathvariant\", \"monospace\");\n    return node;\n  }\n});\n/**\n * Converts verb group into body string.\n *\n * \\verb* replaces each space with an open box \\u2423\n * \\verb replaces each space with a no-break space \\xA0\n */\nvar makeVerb = group => group.body.replace(/ /g, group.star ? '\\u2423' : '\\xA0');\n\n/** Include this to ensure that all functions are defined. */\nvar functions = _functions;\n\n/**\n * The Lexer class handles tokenizing the input in various ways. Since our\n * parser expects us to be able to backtrack, the lexer allows lexing from any\n * given starting point.\n *\n * Its main exposed function is the `lex` function, which takes a position to\n * lex from and a type of token to lex. It defers to the appropriate `_innerLex`\n * function.\n *\n * The various `_innerLex` functions perform the actual lexing of different\n * kinds.\n */\n/* The following tokenRegex\n * - matches typical whitespace (but not NBSP etc.) using its first group\n * - does not match any control character \\x00-\\x1f except whitespace\n * - does not match a bare backslash\n * - matches any ASCII character except those just mentioned\n * - does not match the BMP private use area \\uE000-\\uF8FF\n * - does not match bare surrogate code units\n * - matches any BMP character except for those just described\n * - matches any valid Unicode surrogate pair\n * - matches a backslash followed by one or more whitespace characters\n * - matches a backslash followed by one or more letters then whitespace\n * - matches a backslash followed by any BMP character\n * Capturing groups:\n *   [1] regular whitespace\n *   [2] backslash followed by whitespace\n *   [3] anything else, which may include:\n *     [4] left character of \\verb*\n *     [5] left character of \\verb\n *     [6] backslash followed by word, excluding any trailing whitespace\n * Just because the Lexer matches something doesn't mean it's valid input:\n * If there is no matching function or symbol definition, the Parser will\n * still reject the input.\n */\nvar spaceRegexString = \"[ \\r\\n\\t]\";\nvar controlWordRegexString = \"\\\\\\\\[a-zA-Z@]+\";\nvar controlSymbolRegexString = \"\\\\\\\\[^\\uD800-\\uDFFF]\";\nvar controlWordWhitespaceRegexString = \"(\" + controlWordRegexString + \")\" + spaceRegexString + \"*\";\nvar controlSpaceRegexString = \"\\\\\\\\(\\n|[ \\r\\t]+\\n?)[ \\r\\t]*\";\nvar combiningDiacriticalMarkString = \"[\\u0300-\\u036f]\";\nvar combiningDiacriticalMarksEndRegex = new RegExp(combiningDiacriticalMarkString + \"+$\");\nvar tokenRegexString = \"(\" + spaceRegexString + \"+)|\" + (// whitespace\ncontrolSpaceRegexString + \"|\") +\n// \\whitespace\n\"([!-\\\\[\\\\]-\\u2027\\u202A-\\uD7FF\\uF900-\\uFFFF]\" + (// single codepoint\ncombiningDiacriticalMarkString + \"*\") +\n// ...plus accents\n\"|[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]\" + (// surrogate pair\ncombiningDiacriticalMarkString + \"*\") +\n// ...plus accents\n\"|\\\\\\\\verb\\\\*([^]).*?\\\\4\" +\n// \\verb*\n\"|\\\\\\\\verb([^*a-zA-Z]).*?\\\\5\" + (// \\verb unstarred\n\"|\" + controlWordWhitespaceRegexString) + (// \\macroName + spaces\n\"|\" + controlSymbolRegexString + \")\"); // \\\\, \\', etc.\n/** Main Lexer class */\nclass Lexer {\n  // Category codes. The lexer only supports comment characters (14) for now.\n  // MacroExpander additionally distinguishes active (13).\n\n  constructor(input, settings) {\n    // Separate accents from characters\n    this.input = input;\n    this.settings = settings;\n    this.tokenRegex = new RegExp(tokenRegexString, 'g');\n    this.catcodes = {\n      \"%\": 14,\n      // comment character\n      \"~\": 13 // active character\n    };\n  }\n  setCatcode(char, code) {\n    this.catcodes[char] = code;\n  }\n  /**\n   * This function lexes a single token.\n   */\n  lex() {\n    var input = this.input;\n    var pos = this.tokenRegex.lastIndex;\n    if (pos === input.length) {\n      return new Token(\"EOF\", new SourceLocation(this, pos, pos));\n    }\n    var match = this.tokenRegex.exec(input);\n    if (match === null || match.index !== pos) {\n      throw new ParseError(\"Unexpected character: '\" + input[pos] + \"'\", new Token(input[pos], new SourceLocation(this, pos, pos + 1)));\n    }\n    var text = match[6] || match[3] || (match[2] ? \"\\\\ \" : \" \");\n    if (this.catcodes[text] === 14) {\n      // comment character\n      var nlIndex = input.indexOf('\\n', this.tokenRegex.lastIndex);\n      if (nlIndex === -1) {\n        this.tokenRegex.lastIndex = input.length; // EOF\n        this.settings.reportNonstrict(\"commentAtEnd\", \"% comment has no terminating newline; LaTeX would \" + \"fail because of commenting the end of math mode (e.g. $)\");\n      } else {\n        this.tokenRegex.lastIndex = nlIndex + 1;\n      }\n      return this.lex();\n    }\n    return new Token(text, new SourceLocation(this, pos, this.tokenRegex.lastIndex));\n  }\n}\n\n/**\n * A `Namespace` refers to a space of nameable things like macros or lengths,\n * which can be `set` either globally or local to a nested group, using an\n * undo stack similar to how TeX implements this functionality.\n * Performance-wise, `get` and local `set` take constant time, while global\n * `set` takes time proportional to the depth of group nesting.\n */\nclass Namespace {\n  /**\n   * Both arguments are optional.  The first argument is an object of\n   * built-in mappings which never change.  The second argument is an object\n   * of initial (global-level) mappings, which will constantly change\n   * according to any global/top-level `set`s done.\n   */\n  constructor(builtins, globalMacros) {\n    if (builtins === void 0) {\n      builtins = {};\n    }\n    if (globalMacros === void 0) {\n      globalMacros = {};\n    }\n    this.current = globalMacros;\n    this.builtins = builtins;\n    this.undefStack = [];\n  }\n  /**\n   * Start a new nested group, affecting future local `set`s.\n   */\n  beginGroup() {\n    this.undefStack.push({});\n  }\n  /**\n   * End current nested group, restoring values before the group began.\n   */\n  endGroup() {\n    if (this.undefStack.length === 0) {\n      throw new ParseError(\"Unbalanced namespace destruction: attempt \" + \"to pop global namespace; please report this as a bug\");\n    }\n    var undefs = this.undefStack.pop();\n    for (var undef in undefs) {\n      if (undefs.hasOwnProperty(undef)) {\n        if (undefs[undef] == null) {\n          delete this.current[undef];\n        } else {\n          this.current[undef] = undefs[undef];\n        }\n      }\n    }\n  }\n  /**\n   * Ends all currently nested groups (if any), restoring values before the\n   * groups began.  Useful in case of an error in the middle of parsing.\n   */\n  endGroups() {\n    while (this.undefStack.length > 0) {\n      this.endGroup();\n    }\n  }\n  /**\n   * Detect whether `name` has a definition.  Equivalent to\n   * `get(name) != null`.\n   */\n  has(name) {\n    return this.current.hasOwnProperty(name) || this.builtins.hasOwnProperty(name);\n  }\n  /**\n   * Get the current value of a name, or `undefined` if there is no value.\n   *\n   * Note: Do not use `if (namespace.get(...))` to detect whether a macro\n   * is defined, as the definition may be the empty string which evaluates\n   * to `false` in JavaScript.  Use `if (namespace.get(...) != null)` or\n   * `if (namespace.has(...))`.\n   */\n  get(name) {\n    if (this.current.hasOwnProperty(name)) {\n      return this.current[name];\n    } else {\n      return this.builtins[name];\n    }\n  }\n  /**\n   * Set the current value of a name, and optionally set it globally too.\n   * Local set() sets the current value and (when appropriate) adds an undo\n   * operation to the undo stack.  Global set() may change the undo\n   * operation at every level, so takes time linear in their number.\n   * A value of undefined means to delete existing definitions.\n   */\n  set(name, value, global) {\n    if (global === void 0) {\n      global = false;\n    }\n    if (global) {\n      // Global set is equivalent to setting in all groups.  Simulate this\n      // by destroying any undos currently scheduled for this name,\n      // and adding an undo with the *new* value (in case it later gets\n      // locally reset within this environment).\n      for (var i = 0; i < this.undefStack.length; i++) {\n        delete this.undefStack[i][name];\n      }\n      if (this.undefStack.length > 0) {\n        this.undefStack[this.undefStack.length - 1][name] = value;\n      }\n    } else {\n      // Undo this set at end of this group (possibly to `undefined`),\n      // unless an undo is already in place, in which case that older\n      // value is the correct one.\n      var top = this.undefStack[this.undefStack.length - 1];\n      if (top && !top.hasOwnProperty(name)) {\n        top[name] = this.current[name];\n      }\n    }\n    if (value == null) {\n      delete this.current[name];\n    } else {\n      this.current[name] = value;\n    }\n  }\n}\n\n/**\n * Predefined macros for KaTeX.\n * This can be used to define some commands in terms of others.\n */\nvar macros = _macros;\n//////////////////////////////////////////////////////////////////////\n// macro tools\ndefineMacro(\"\\\\noexpand\", function (context) {\n  // The expansion is the token itself; but that token is interpreted\n  // as if its meaning were ‘\\relax’ if it is a control sequence that\n  // would ordinarily be expanded by TeX’s expansion rules.\n  var t = context.popToken();\n  if (context.isExpandable(t.text)) {\n    t.noexpand = true;\n    t.treatAsRelax = true;\n  }\n  return {\n    tokens: [t],\n    numArgs: 0\n  };\n});\ndefineMacro(\"\\\\expandafter\", function (context) {\n  // TeX first reads the token that comes immediately after \\expandafter,\n  // without expanding it; let’s call this token t. Then TeX reads the\n  // token that comes after t (and possibly more tokens, if that token\n  // has an argument), replacing it by its expansion. Finally TeX puts\n  // t back in front of that expansion.\n  var t = context.popToken();\n  context.expandOnce(true); // expand only an expandable token\n  return {\n    tokens: [t],\n    numArgs: 0\n  };\n});\n// LaTeX's \\@firstoftwo{#1}{#2} expands to #1, skipping #2\n// TeX source: \\long\\def\\@firstoftwo#1#2{#1}\ndefineMacro(\"\\\\@firstoftwo\", function (context) {\n  var args = context.consumeArgs(2);\n  return {\n    tokens: args[0],\n    numArgs: 0\n  };\n});\n// LaTeX's \\@secondoftwo{#1}{#2} expands to #2, skipping #1\n// TeX source: \\long\\def\\@secondoftwo#1#2{#2}\ndefineMacro(\"\\\\@secondoftwo\", function (context) {\n  var args = context.consumeArgs(2);\n  return {\n    tokens: args[1],\n    numArgs: 0\n  };\n});\n// LaTeX's \\@ifnextchar{#1}{#2}{#3} looks ahead to the next (unexpanded)\n// symbol that isn't a space, consuming any spaces but not consuming the\n// first nonspace character.  If that nonspace character matches #1, then\n// the macro expands to #2; otherwise, it expands to #3.\ndefineMacro(\"\\\\@ifnextchar\", function (context) {\n  var args = context.consumeArgs(3); // symbol, if, else\n  context.consumeSpaces();\n  var nextToken = context.future();\n  if (args[0].length === 1 && args[0][0].text === nextToken.text) {\n    return {\n      tokens: args[1],\n      numArgs: 0\n    };\n  } else {\n    return {\n      tokens: args[2],\n      numArgs: 0\n    };\n  }\n});\n// LaTeX's \\@ifstar{#1}{#2} looks ahead to the next (unexpanded) symbol.\n// If it is `*`, then it consumes the symbol, and the macro expands to #1;\n// otherwise, the macro expands to #2 (without consuming the symbol).\n// TeX source: \\def\\@ifstar#1{\\@ifnextchar *{\\@firstoftwo{#1}}}\ndefineMacro(\"\\\\@ifstar\", \"\\\\@ifnextchar *{\\\\@firstoftwo{#1}}\");\n// LaTeX's \\TextOrMath{#1}{#2} expands to #1 in text mode, #2 in math mode\ndefineMacro(\"\\\\TextOrMath\", function (context) {\n  var args = context.consumeArgs(2);\n  if (context.mode === 'text') {\n    return {\n      tokens: args[0],\n      numArgs: 0\n    };\n  } else {\n    return {\n      tokens: args[1],\n      numArgs: 0\n    };\n  }\n});\n// Lookup table for parsing numbers in base 8 through 16\nvar digitToNumber = {\n  \"0\": 0,\n  \"1\": 1,\n  \"2\": 2,\n  \"3\": 3,\n  \"4\": 4,\n  \"5\": 5,\n  \"6\": 6,\n  \"7\": 7,\n  \"8\": 8,\n  \"9\": 9,\n  \"a\": 10,\n  \"A\": 10,\n  \"b\": 11,\n  \"B\": 11,\n  \"c\": 12,\n  \"C\": 12,\n  \"d\": 13,\n  \"D\": 13,\n  \"e\": 14,\n  \"E\": 14,\n  \"f\": 15,\n  \"F\": 15\n};\n// TeX \\char makes a literal character (catcode 12) using the following forms:\n// (see The TeXBook, p. 43)\n//   \\char123  -- decimal\n//   \\char'123 -- octal\n//   \\char\"123 -- hex\n//   \\char`x   -- character that can be written (i.e. isn't active)\n//   \\char`\\x  -- character that cannot be written (e.g. %)\n// These all refer to characters from the font, so we turn them into special\n// calls to a function \\@char dealt with in the Parser.\ndefineMacro(\"\\\\char\", function (context) {\n  var token = context.popToken();\n  var base;\n  var number = 0;\n  if (token.text === \"'\") {\n    base = 8;\n    token = context.popToken();\n  } else if (token.text === '\"') {\n    base = 16;\n    token = context.popToken();\n  } else if (token.text === \"`\") {\n    token = context.popToken();\n    if (token.text[0] === \"\\\\\") {\n      number = token.text.charCodeAt(1);\n    } else if (token.text === \"EOF\") {\n      throw new ParseError(\"\\\\char` missing argument\");\n    } else {\n      number = token.text.charCodeAt(0);\n    }\n  } else {\n    base = 10;\n  }\n  if (base) {\n    // Parse a number in the given base, starting with first `token`.\n    number = digitToNumber[token.text];\n    if (number == null || number >= base) {\n      throw new ParseError(\"Invalid base-\" + base + \" digit \" + token.text);\n    }\n    var digit;\n    while ((digit = digitToNumber[context.future().text]) != null && digit < base) {\n      number *= base;\n      number += digit;\n      context.popToken();\n    }\n  }\n  return \"\\\\@char{\" + number + \"}\";\n});\n// \\newcommand{\\macro}[args]{definition}\n// \\renewcommand{\\macro}[args]{definition}\n// TODO: Optional arguments: \\newcommand{\\macro}[args][default]{definition}\nvar newcommand = (context, existsOK, nonexistsOK, skipIfExists) => {\n  var arg = context.consumeArg().tokens;\n  if (arg.length !== 1) {\n    throw new ParseError(\"\\\\newcommand's first argument must be a macro name\");\n  }\n  var name = arg[0].text;\n  var exists = context.isDefined(name);\n  if (exists && !existsOK) {\n    throw new ParseError(\"\\\\newcommand{\" + name + \"} attempting to redefine \" + (name + \"; use \\\\renewcommand\"));\n  }\n  if (!exists && !nonexistsOK) {\n    throw new ParseError(\"\\\\renewcommand{\" + name + \"} when command \" + name + \" \" + \"does not yet exist; use \\\\newcommand\");\n  }\n  var numArgs = 0;\n  arg = context.consumeArg().tokens;\n  if (arg.length === 1 && arg[0].text === \"[\") {\n    var argText = '';\n    var token = context.expandNextToken();\n    while (token.text !== \"]\" && token.text !== \"EOF\") {\n      // TODO: Should properly expand arg, e.g., ignore {}s\n      argText += token.text;\n      token = context.expandNextToken();\n    }\n    if (!argText.match(/^\\s*[0-9]+\\s*$/)) {\n      throw new ParseError(\"Invalid number of arguments: \" + argText);\n    }\n    numArgs = parseInt(argText);\n    arg = context.consumeArg().tokens;\n  }\n  if (!(exists && skipIfExists)) {\n    // Final arg is the expansion of the macro\n    context.macros.set(name, {\n      tokens: arg,\n      numArgs\n    });\n  }\n  return '';\n};\ndefineMacro(\"\\\\newcommand\", context => newcommand(context, false, true, false));\ndefineMacro(\"\\\\renewcommand\", context => newcommand(context, true, false, false));\ndefineMacro(\"\\\\providecommand\", context => newcommand(context, true, true, true));\n// terminal (console) tools\ndefineMacro(\"\\\\message\", context => {\n  var arg = context.consumeArgs(1)[0];\n  // eslint-disable-next-line no-console\n  console.log(arg.reverse().map(token => token.text).join(\"\"));\n  return '';\n});\ndefineMacro(\"\\\\errmessage\", context => {\n  var arg = context.consumeArgs(1)[0];\n  // eslint-disable-next-line no-console\n  console.error(arg.reverse().map(token => token.text).join(\"\"));\n  return '';\n});\ndefineMacro(\"\\\\show\", context => {\n  var tok = context.popToken();\n  var name = tok.text;\n  // eslint-disable-next-line no-console\n  console.log(tok, context.macros.get(name), functions[name], symbols.math[name], symbols.text[name]);\n  return '';\n});\n//////////////////////////////////////////////////////////////////////\n// Grouping\n// \\let\\bgroup={ \\let\\egroup=}\ndefineMacro(\"\\\\bgroup\", \"{\");\ndefineMacro(\"\\\\egroup\", \"}\");\n// Symbols from latex.ltx:\n// \\def~{\\nobreakspace{}}\n// \\def\\lq{`}\n// \\def\\rq{'}\n// \\def \\aa {\\r a}\n// \\def \\AA {\\r A}\ndefineMacro(\"~\", \"\\\\nobreakspace\");\ndefineMacro(\"\\\\lq\", \"`\");\ndefineMacro(\"\\\\rq\", \"'\");\ndefineMacro(\"\\\\aa\", \"\\\\r a\");\ndefineMacro(\"\\\\AA\", \"\\\\r A\");\n// Copyright (C) and registered (R) symbols. Use raw symbol in MathML.\n// \\DeclareTextCommandDefault{\\textcopyright}{\\textcircled{c}}\n// \\DeclareTextCommandDefault{\\textregistered}{\\textcircled{%\n//      \\check@mathfonts\\fontsize\\sf@size\\z@\\math@fontsfalse\\selectfont R}}\n// \\DeclareRobustCommand{\\copyright}{%\n//    \\ifmmode{\\nfss@text{\\textcopyright}}\\else\\textcopyright\\fi}\ndefineMacro(\"\\\\textcopyright\", \"\\\\html@mathml{\\\\textcircled{c}}{\\\\char`©}\");\ndefineMacro(\"\\\\copyright\", \"\\\\TextOrMath{\\\\textcopyright}{\\\\text{\\\\textcopyright}}\");\ndefineMacro(\"\\\\textregistered\", \"\\\\html@mathml{\\\\textcircled{\\\\scriptsize R}}{\\\\char`®}\");\n// Characters omitted from Unicode range 1D400–1D7FF\ndefineMacro(\"\\u212C\", \"\\\\mathscr{B}\"); // script\ndefineMacro(\"\\u2130\", \"\\\\mathscr{E}\");\ndefineMacro(\"\\u2131\", \"\\\\mathscr{F}\");\ndefineMacro(\"\\u210B\", \"\\\\mathscr{H}\");\ndefineMacro(\"\\u2110\", \"\\\\mathscr{I}\");\ndefineMacro(\"\\u2112\", \"\\\\mathscr{L}\");\ndefineMacro(\"\\u2133\", \"\\\\mathscr{M}\");\ndefineMacro(\"\\u211B\", \"\\\\mathscr{R}\");\ndefineMacro(\"\\u212D\", \"\\\\mathfrak{C}\"); // Fraktur\ndefineMacro(\"\\u210C\", \"\\\\mathfrak{H}\");\ndefineMacro(\"\\u2128\", \"\\\\mathfrak{Z}\");\n// Define \\Bbbk with a macro that works in both HTML and MathML.\ndefineMacro(\"\\\\Bbbk\", \"\\\\Bbb{k}\");\n// \\llap and \\rlap render their contents in text mode\ndefineMacro(\"\\\\llap\", \"\\\\mathllap{\\\\textrm{#1}}\");\ndefineMacro(\"\\\\rlap\", \"\\\\mathrlap{\\\\textrm{#1}}\");\ndefineMacro(\"\\\\clap\", \"\\\\mathclap{\\\\textrm{#1}}\");\n// \\mathstrut from the TeXbook, p 360\ndefineMacro(\"\\\\mathstrut\", \"\\\\vphantom{(}\");\n// \\underbar from TeXbook p 353\ndefineMacro(\"\\\\underbar\", \"\\\\underline{\\\\text{#1}}\");\n// \\not is defined by base/fontmath.ltx via\n// \\DeclareMathSymbol{\\not}{\\mathrel}{symbols}{\"36}\n// It's thus treated like a \\mathrel, but defined by a symbol that has zero\n// width but extends to the right.  We use \\rlap to get that spacing.\n// For MathML we write U+0338 here. buildMathML.js will then do the overlay.\ndefineMacro(\"\\\\not\", \"\\\\html@mathml{\\\\mathrel{\\\\mathrlap\\\\@not}\\\\nobreak}\" + \"{\\\\char\\\"338}\");\n// Negated symbols from base/fontmath.ltx:\n// \\def\\neq{\\not=} \\let\\ne=\\neq\n// \\DeclareRobustCommand\n//   \\notin{\\mathrel{\\m@th\\mathpalette\\c@ncel\\in}}\n// \\def\\c@ncel#1#2{\\m@th\\ooalign{$\\hfil#1\\mkern1mu/\\hfil$\\crcr$#1#2$}}\ndefineMacro(\"\\\\neq\", \"\\\\html@mathml{\\\\mathrel{\\\\not=}}{\\\\mathrel{\\\\char`≠}}\");\ndefineMacro(\"\\\\ne\", \"\\\\neq\");\ndefineMacro(\"\\u2260\", \"\\\\neq\");\ndefineMacro(\"\\\\notin\", \"\\\\html@mathml{\\\\mathrel{{\\\\in}\\\\mathllap{/\\\\mskip1mu}}}\" + \"{\\\\mathrel{\\\\char`∉}}\");\ndefineMacro(\"\\u2209\", \"\\\\notin\");\n// Unicode stacked relations\ndefineMacro(\"\\u2258\", \"\\\\html@mathml{\" + \"\\\\mathrel{=\\\\kern{-1em}\\\\raisebox{0.4em}{$\\\\scriptsize\\\\frown$}}\" + \"}{\\\\mathrel{\\\\char`\\u2258}}\");\ndefineMacro(\"\\u2259\", \"\\\\html@mathml{\\\\stackrel{\\\\tiny\\\\wedge}{=}}{\\\\mathrel{\\\\char`\\u2258}}\");\ndefineMacro(\"\\u225A\", \"\\\\html@mathml{\\\\stackrel{\\\\tiny\\\\vee}{=}}{\\\\mathrel{\\\\char`\\u225A}}\");\ndefineMacro(\"\\u225B\", \"\\\\html@mathml{\\\\stackrel{\\\\scriptsize\\\\star}{=}}\" + \"{\\\\mathrel{\\\\char`\\u225B}}\");\ndefineMacro(\"\\u225D\", \"\\\\html@mathml{\\\\stackrel{\\\\tiny\\\\mathrm{def}}{=}}\" + \"{\\\\mathrel{\\\\char`\\u225D}}\");\ndefineMacro(\"\\u225E\", \"\\\\html@mathml{\\\\stackrel{\\\\tiny\\\\mathrm{m}}{=}}\" + \"{\\\\mathrel{\\\\char`\\u225E}}\");\ndefineMacro(\"\\u225F\", \"\\\\html@mathml{\\\\stackrel{\\\\tiny?}{=}}{\\\\mathrel{\\\\char`\\u225F}}\");\n// Misc Unicode\ndefineMacro(\"\\u27C2\", \"\\\\perp\");\ndefineMacro(\"\\u203C\", \"\\\\mathclose{!\\\\mkern-0.8mu!}\");\ndefineMacro(\"\\u220C\", \"\\\\notni\");\ndefineMacro(\"\\u231C\", \"\\\\ulcorner\");\ndefineMacro(\"\\u231D\", \"\\\\urcorner\");\ndefineMacro(\"\\u231E\", \"\\\\llcorner\");\ndefineMacro(\"\\u231F\", \"\\\\lrcorner\");\ndefineMacro(\"\\u00A9\", \"\\\\copyright\");\ndefineMacro(\"\\u00AE\", \"\\\\textregistered\");\n// The KaTeX fonts have corners at codepoints that don't match Unicode.\n// For MathML purposes, use the Unicode code point.\ndefineMacro(\"\\\\ulcorner\", \"\\\\html@mathml{\\\\@ulcorner}{\\\\mathop{\\\\char\\\"231c}}\");\ndefineMacro(\"\\\\urcorner\", \"\\\\html@mathml{\\\\@urcorner}{\\\\mathop{\\\\char\\\"231d}}\");\ndefineMacro(\"\\\\llcorner\", \"\\\\html@mathml{\\\\@llcorner}{\\\\mathop{\\\\char\\\"231e}}\");\ndefineMacro(\"\\\\lrcorner\", \"\\\\html@mathml{\\\\@lrcorner}{\\\\mathop{\\\\char\\\"231f}}\");\n//////////////////////////////////////////////////////////////////////\n// LaTeX_2ε\n// \\vdots{\\vbox{\\baselineskip4\\p@  \\lineskiplimit\\z@\n// \\kern6\\p@\\hbox{.}\\hbox{.}\\hbox{.}}}\n// We'll call \\varvdots, which gets a glyph from symbols.js.\n// The zero-width rule gets us an equivalent to the vertical 6pt kern.\ndefineMacro(\"\\\\vdots\", \"{\\\\varvdots\\\\rule{0pt}{15pt}}\");\ndefineMacro(\"\\u22ee\", \"\\\\vdots\");\n//////////////////////////////////////////////////////////////////////\n// amsmath.sty\n// http://mirrors.concertpass.com/tex-archive/macros/latex/required/amsmath/amsmath.pdf\n// Italic Greek capital letters.  AMS defines these with \\DeclareMathSymbol,\n// but they are equivalent to \\mathit{\\Letter}.\ndefineMacro(\"\\\\varGamma\", \"\\\\mathit{\\\\Gamma}\");\ndefineMacro(\"\\\\varDelta\", \"\\\\mathit{\\\\Delta}\");\ndefineMacro(\"\\\\varTheta\", \"\\\\mathit{\\\\Theta}\");\ndefineMacro(\"\\\\varLambda\", \"\\\\mathit{\\\\Lambda}\");\ndefineMacro(\"\\\\varXi\", \"\\\\mathit{\\\\Xi}\");\ndefineMacro(\"\\\\varPi\", \"\\\\mathit{\\\\Pi}\");\ndefineMacro(\"\\\\varSigma\", \"\\\\mathit{\\\\Sigma}\");\ndefineMacro(\"\\\\varUpsilon\", \"\\\\mathit{\\\\Upsilon}\");\ndefineMacro(\"\\\\varPhi\", \"\\\\mathit{\\\\Phi}\");\ndefineMacro(\"\\\\varPsi\", \"\\\\mathit{\\\\Psi}\");\ndefineMacro(\"\\\\varOmega\", \"\\\\mathit{\\\\Omega}\");\n//\\newcommand{\\substack}[1]{\\subarray{c}#1\\endsubarray}\ndefineMacro(\"\\\\substack\", \"\\\\begin{subarray}{c}#1\\\\end{subarray}\");\n// \\renewcommand{\\colon}{\\nobreak\\mskip2mu\\mathpunct{}\\nonscript\n// \\mkern-\\thinmuskip{:}\\mskip6muplus1mu\\relax}\ndefineMacro(\"\\\\colon\", \"\\\\nobreak\\\\mskip2mu\\\\mathpunct{}\" + \"\\\\mathchoice{\\\\mkern-3mu}{\\\\mkern-3mu}{}{}{:}\\\\mskip6mu\\\\relax\");\n// \\newcommand{\\boxed}[1]{\\fbox{\\m@th$\\displaystyle#1$}}\ndefineMacro(\"\\\\boxed\", \"\\\\fbox{$\\\\displaystyle{#1}$}\");\n// \\def\\iff{\\DOTSB\\;\\Longleftrightarrow\\;}\n// \\def\\implies{\\DOTSB\\;\\Longrightarrow\\;}\n// \\def\\impliedby{\\DOTSB\\;\\Longleftarrow\\;}\ndefineMacro(\"\\\\iff\", \"\\\\DOTSB\\\\;\\\\Longleftrightarrow\\\\;\");\ndefineMacro(\"\\\\implies\", \"\\\\DOTSB\\\\;\\\\Longrightarrow\\\\;\");\ndefineMacro(\"\\\\impliedby\", \"\\\\DOTSB\\\\;\\\\Longleftarrow\\\\;\");\n// \\def\\dddot#1{{\\mathop{#1}\\limits^{\\vbox to-1.4\\ex@{\\kern-\\tw@\\ex@\n//  \\hbox{\\normalfont ...}\\vss}}}}\n// We use \\overset which avoids the vertical shift of \\mathop.\ndefineMacro(\"\\\\dddot\", \"{\\\\overset{\\\\raisebox{-0.1ex}{\\\\normalsize ...}}{#1}}\");\ndefineMacro(\"\\\\ddddot\", \"{\\\\overset{\\\\raisebox{-0.1ex}{\\\\normalsize ....}}{#1}}\");\n// AMSMath's automatic \\dots, based on \\mdots@@ macro.\nvar dotsByToken = {\n  ',': '\\\\dotsc',\n  '\\\\not': '\\\\dotsb',\n  // \\keybin@ checks for the following:\n  '+': '\\\\dotsb',\n  '=': '\\\\dotsb',\n  '<': '\\\\dotsb',\n  '>': '\\\\dotsb',\n  '-': '\\\\dotsb',\n  '*': '\\\\dotsb',\n  ':': '\\\\dotsb',\n  // Symbols whose definition starts with \\DOTSB:\n  '\\\\DOTSB': '\\\\dotsb',\n  '\\\\coprod': '\\\\dotsb',\n  '\\\\bigvee': '\\\\dotsb',\n  '\\\\bigwedge': '\\\\dotsb',\n  '\\\\biguplus': '\\\\dotsb',\n  '\\\\bigcap': '\\\\dotsb',\n  '\\\\bigcup': '\\\\dotsb',\n  '\\\\prod': '\\\\dotsb',\n  '\\\\sum': '\\\\dotsb',\n  '\\\\bigotimes': '\\\\dotsb',\n  '\\\\bigoplus': '\\\\dotsb',\n  '\\\\bigodot': '\\\\dotsb',\n  '\\\\bigsqcup': '\\\\dotsb',\n  '\\\\And': '\\\\dotsb',\n  '\\\\longrightarrow': '\\\\dotsb',\n  '\\\\Longrightarrow': '\\\\dotsb',\n  '\\\\longleftarrow': '\\\\dotsb',\n  '\\\\Longleftarrow': '\\\\dotsb',\n  '\\\\longleftrightarrow': '\\\\dotsb',\n  '\\\\Longleftrightarrow': '\\\\dotsb',\n  '\\\\mapsto': '\\\\dotsb',\n  '\\\\longmapsto': '\\\\dotsb',\n  '\\\\hookrightarrow': '\\\\dotsb',\n  '\\\\doteq': '\\\\dotsb',\n  // Symbols whose definition starts with \\mathbin:\n  '\\\\mathbin': '\\\\dotsb',\n  // Symbols whose definition starts with \\mathrel:\n  '\\\\mathrel': '\\\\dotsb',\n  '\\\\relbar': '\\\\dotsb',\n  '\\\\Relbar': '\\\\dotsb',\n  '\\\\xrightarrow': '\\\\dotsb',\n  '\\\\xleftarrow': '\\\\dotsb',\n  // Symbols whose definition starts with \\DOTSI:\n  '\\\\DOTSI': '\\\\dotsi',\n  '\\\\int': '\\\\dotsi',\n  '\\\\oint': '\\\\dotsi',\n  '\\\\iint': '\\\\dotsi',\n  '\\\\iiint': '\\\\dotsi',\n  '\\\\iiiint': '\\\\dotsi',\n  '\\\\idotsint': '\\\\dotsi',\n  // Symbols whose definition starts with \\DOTSX:\n  '\\\\DOTSX': '\\\\dotsx'\n};\nvar dotsbGroups = new Set(['bin', 'rel']);\ndefineMacro(\"\\\\dots\", function (context) {\n  // TODO: If used in text mode, should expand to \\textellipsis.\n  // However, in KaTeX, \\textellipsis and \\ldots behave the same\n  // (in text mode), and it's unlikely we'd see any of the math commands\n  // that affect the behavior of \\dots when in text mode.  So fine for now\n  // (until we support \\ifmmode ... \\else ... \\fi).\n  var thedots = '\\\\dotso';\n  var next = context.expandAfterFuture().text;\n  if (next in dotsByToken) {\n    thedots = dotsByToken[next];\n  } else if (next.slice(0, 4) === '\\\\not') {\n    thedots = '\\\\dotsb';\n  } else if (next in symbols.math) {\n    if (dotsbGroups.has(symbols.math[next].group)) {\n      thedots = '\\\\dotsb';\n    }\n  }\n  return thedots;\n});\nvar spaceAfterDots = {\n  // \\rightdelim@ checks for the following:\n  ')': true,\n  ']': true,\n  '\\\\rbrack': true,\n  '\\\\}': true,\n  '\\\\rbrace': true,\n  '\\\\rangle': true,\n  '\\\\rceil': true,\n  '\\\\rfloor': true,\n  '\\\\rgroup': true,\n  '\\\\rmoustache': true,\n  '\\\\right': true,\n  '\\\\bigr': true,\n  '\\\\biggr': true,\n  '\\\\Bigr': true,\n  '\\\\Biggr': true,\n  // \\extra@ also tests for the following:\n  '$': true,\n  // \\extrap@ checks for the following:\n  ';': true,\n  '.': true,\n  ',': true\n};\ndefineMacro(\"\\\\dotso\", function (context) {\n  var next = context.future().text;\n  if (next in spaceAfterDots) {\n    return \"\\\\ldots\\\\,\";\n  } else {\n    return \"\\\\ldots\";\n  }\n});\ndefineMacro(\"\\\\dotsc\", function (context) {\n  var next = context.future().text;\n  // \\dotsc uses \\extra@ but not \\extrap@, instead specially checking for\n  // ';' and '.', but doesn't check for ','.\n  if (next in spaceAfterDots && next !== ',') {\n    return \"\\\\ldots\\\\,\";\n  } else {\n    return \"\\\\ldots\";\n  }\n});\ndefineMacro(\"\\\\cdots\", function (context) {\n  var next = context.future().text;\n  if (next in spaceAfterDots) {\n    return \"\\\\@cdots\\\\,\";\n  } else {\n    return \"\\\\@cdots\";\n  }\n});\ndefineMacro(\"\\\\dotsb\", \"\\\\cdots\");\ndefineMacro(\"\\\\dotsm\", \"\\\\cdots\");\ndefineMacro(\"\\\\dotsi\", \"\\\\!\\\\cdots\");\n// amsmath doesn't actually define \\dotsx, but \\dots followed by a macro\n// starting with \\DOTSX implies \\dotso, and then \\extra@ detects this case\n// and forces the added `\\,`.\ndefineMacro(\"\\\\dotsx\", \"\\\\ldots\\\\,\");\n// \\let\\DOTSI\\relax\n// \\let\\DOTSB\\relax\n// \\let\\DOTSX\\relax\ndefineMacro(\"\\\\DOTSI\", \"\\\\relax\");\ndefineMacro(\"\\\\DOTSB\", \"\\\\relax\");\ndefineMacro(\"\\\\DOTSX\", \"\\\\relax\");\n// Spacing, based on amsmath.sty's override of LaTeX defaults\n// \\DeclareRobustCommand{\\tmspace}[3]{%\n//   \\ifmmode\\mskip#1#2\\else\\kern#1#3\\fi\\relax}\ndefineMacro(\"\\\\tmspace\", \"\\\\TextOrMath{\\\\kern#1#3}{\\\\mskip#1#2}\\\\relax\");\n// \\renewcommand{\\,}{\\tmspace+\\thinmuskip{.1667em}}\n// TODO: math mode should use \\thinmuskip\ndefineMacro(\"\\\\,\", \"\\\\tmspace+{3mu}{.1667em}\");\n// \\let\\thinspace\\,\ndefineMacro(\"\\\\thinspace\", \"\\\\,\");\n// \\def\\>{\\mskip\\medmuskip}\n// \\renewcommand{\\:}{\\tmspace+\\medmuskip{.2222em}}\n// TODO: \\> and math mode of \\: should use \\medmuskip = 4mu plus 2mu minus 4mu\ndefineMacro(\"\\\\>\", \"\\\\mskip{4mu}\");\ndefineMacro(\"\\\\:\", \"\\\\tmspace+{4mu}{.2222em}\");\n// \\let\\medspace\\:\ndefineMacro(\"\\\\medspace\", \"\\\\:\");\n// \\renewcommand{\\;}{\\tmspace+\\thickmuskip{.2777em}}\n// TODO: math mode should use \\thickmuskip = 5mu plus 5mu\ndefineMacro(\"\\\\;\", \"\\\\tmspace+{5mu}{.2777em}\");\n// \\let\\thickspace\\;\ndefineMacro(\"\\\\thickspace\", \"\\\\;\");\n// \\renewcommand{\\!}{\\tmspace-\\thinmuskip{.1667em}}\n// TODO: math mode should use \\thinmuskip\ndefineMacro(\"\\\\!\", \"\\\\tmspace-{3mu}{.1667em}\");\n// \\let\\negthinspace\\!\ndefineMacro(\"\\\\negthinspace\", \"\\\\!\");\n// \\newcommand{\\negmedspace}{\\tmspace-\\medmuskip{.2222em}}\n// TODO: math mode should use \\medmuskip\ndefineMacro(\"\\\\negmedspace\", \"\\\\tmspace-{4mu}{.2222em}\");\n// \\newcommand{\\negthickspace}{\\tmspace-\\thickmuskip{.2777em}}\n// TODO: math mode should use \\thickmuskip\ndefineMacro(\"\\\\negthickspace\", \"\\\\tmspace-{5mu}{.277em}\");\n// \\def\\enspace{\\kern.5em }\ndefineMacro(\"\\\\enspace\", \"\\\\kern.5em \");\n// \\def\\enskip{\\hskip.5em\\relax}\ndefineMacro(\"\\\\enskip\", \"\\\\hskip.5em\\\\relax\");\n// \\def\\quad{\\hskip1em\\relax}\ndefineMacro(\"\\\\quad\", \"\\\\hskip1em\\\\relax\");\n// \\def\\qquad{\\hskip2em\\relax}\ndefineMacro(\"\\\\qquad\", \"\\\\hskip2em\\\\relax\");\n// \\tag@in@display form of \\tag\ndefineMacro(\"\\\\tag\", \"\\\\@ifstar\\\\tag@literal\\\\tag@paren\");\ndefineMacro(\"\\\\tag@paren\", \"\\\\tag@literal{({#1})}\");\ndefineMacro(\"\\\\tag@literal\", context => {\n  if (context.macros.get(\"\\\\df@tag\")) {\n    throw new ParseError(\"Multiple \\\\tag\");\n  }\n  return \"\\\\gdef\\\\df@tag{\\\\text{#1}}\";\n});\n// \\renewcommand{\\bmod}{\\nonscript\\mskip-\\medmuskip\\mkern5mu\\mathbin\n//   {\\operator@font mod}\\penalty900\n//   \\mkern5mu\\nonscript\\mskip-\\medmuskip}\n// \\newcommand{\\pod}[1]{\\allowbreak\n//   \\if@display\\mkern18mu\\else\\mkern8mu\\fi(#1)}\n// \\renewcommand{\\pmod}[1]{\\pod{{\\operator@font mod}\\mkern6mu#1}}\n// \\newcommand{\\mod}[1]{\\allowbreak\\if@display\\mkern18mu\n//   \\else\\mkern12mu\\fi{\\operator@font mod}\\,\\,#1}\n// TODO: math mode should use \\medmuskip = 4mu plus 2mu minus 4mu\ndefineMacro(\"\\\\bmod\", \"\\\\mathchoice{\\\\mskip1mu}{\\\\mskip1mu}{\\\\mskip5mu}{\\\\mskip5mu}\" + \"\\\\mathbin{\\\\rm mod}\" + \"\\\\mathchoice{\\\\mskip1mu}{\\\\mskip1mu}{\\\\mskip5mu}{\\\\mskip5mu}\");\ndefineMacro(\"\\\\pod\", \"\\\\allowbreak\" + \"\\\\mathchoice{\\\\mkern18mu}{\\\\mkern8mu}{\\\\mkern8mu}{\\\\mkern8mu}(#1)\");\ndefineMacro(\"\\\\pmod\", \"\\\\pod{{\\\\rm mod}\\\\mkern6mu#1}\");\ndefineMacro(\"\\\\mod\", \"\\\\allowbreak\" + \"\\\\mathchoice{\\\\mkern18mu}{\\\\mkern12mu}{\\\\mkern12mu}{\\\\mkern12mu}\" + \"{\\\\rm mod}\\\\,\\\\,#1\");\n//////////////////////////////////////////////////////////////////////\n// LaTeX source2e\n// \\expandafter\\let\\expandafter\\@normalcr\n//     \\csname\\expandafter\\@gobble\\string\\\\ \\endcsname\n// \\DeclareRobustCommand\\newline{\\@normalcr\\relax}\ndefineMacro(\"\\\\newline\", \"\\\\\\\\\\\\relax\");\n// \\def\\TeX{T\\kern-.1667em\\lower.5ex\\hbox{E}\\kern-.125emX\\@}\n// TODO: Doesn't normally work in math mode because \\@ fails.  KaTeX doesn't\n// support \\@ yet, so that's omitted, and we add \\text so that the result\n// doesn't look funny in math mode.\ndefineMacro(\"\\\\TeX\", \"\\\\textrm{\\\\html@mathml{\" + \"T\\\\kern-.1667em\\\\raisebox{-.5ex}{E}\\\\kern-.125emX\" + \"}{TeX}}\");\n// \\DeclareRobustCommand{\\LaTeX}{L\\kern-.36em%\n//         {\\sbox\\z@ T%\n//          \\vbox to\\ht\\z@{\\hbox{\\check@mathfonts\n//                               \\fontsize\\sf@size\\z@\n//                               \\math@fontsfalse\\selectfont\n//                               A}%\n//                         \\vss}%\n//         }%\n//         \\kern-.15em%\n//         \\TeX}\n// This code aligns the top of the A with the T (from the perspective of TeX's\n// boxes, though visually the A appears to extend above slightly).\n// We compute the corresponding \\raisebox when A is rendered in \\normalsize\n// \\scriptstyle, which has a scale factor of 0.7 (see Options.js).\nvar latexRaiseA = makeEm(fontMetricsData['Main-Regular'][\"T\".charCodeAt(0)][1] - 0.7 * fontMetricsData['Main-Regular'][\"A\".charCodeAt(0)][1]);\ndefineMacro(\"\\\\LaTeX\", \"\\\\textrm{\\\\html@mathml{\" + (\"L\\\\kern-.36em\\\\raisebox{\" + latexRaiseA + \"}{\\\\scriptstyle A}\") + \"\\\\kern-.15em\\\\TeX}{LaTeX}}\");\n// New KaTeX logo based on tweaking LaTeX logo\ndefineMacro(\"\\\\KaTeX\", \"\\\\textrm{\\\\html@mathml{\" + (\"K\\\\kern-.17em\\\\raisebox{\" + latexRaiseA + \"}{\\\\scriptstyle A}\") + \"\\\\kern-.15em\\\\TeX}{KaTeX}}\");\n// \\DeclareRobustCommand\\hspace{\\@ifstar\\@hspacer\\@hspace}\n// \\def\\@hspace#1{\\hskip  #1\\relax}\n// \\def\\@hspacer#1{\\vrule \\@width\\z@\\nobreak\n//                 \\hskip #1\\hskip \\z@skip}\ndefineMacro(\"\\\\hspace\", \"\\\\@ifstar\\\\@hspacer\\\\@hspace\");\ndefineMacro(\"\\\\@hspace\", \"\\\\hskip #1\\\\relax\");\ndefineMacro(\"\\\\@hspacer\", \"\\\\rule{0pt}{0pt}\\\\hskip #1\\\\relax\");\n//////////////////////////////////////////////////////////////////////\n// mathtools.sty\n//\\providecommand\\ordinarycolon{:}\ndefineMacro(\"\\\\ordinarycolon\", \":\");\n//\\def\\vcentcolon{\\mathrel{\\mathop\\ordinarycolon}}\n//TODO(edemaine): Not yet centered. Fix via \\raisebox or #726\ndefineMacro(\"\\\\vcentcolon\", \"\\\\mathrel{\\\\mathop\\\\ordinarycolon}\");\n// \\providecommand*\\dblcolon{\\vcentcolon\\mathrel{\\mkern-.9mu}\\vcentcolon}\ndefineMacro(\"\\\\dblcolon\", \"\\\\html@mathml{\" + \"\\\\mathrel{\\\\vcentcolon\\\\mathrel{\\\\mkern-.9mu}\\\\vcentcolon}}\" + \"{\\\\mathop{\\\\char\\\"2237}}\");\n// \\providecommand*\\coloneqq{\\vcentcolon\\mathrel{\\mkern-1.2mu}=}\ndefineMacro(\"\\\\coloneqq\", \"\\\\html@mathml{\" + \"\\\\mathrel{\\\\vcentcolon\\\\mathrel{\\\\mkern-1.2mu}=}}\" + \"{\\\\mathop{\\\\char\\\"2254}}\"); // ≔\n// \\providecommand*\\Coloneqq{\\dblcolon\\mathrel{\\mkern-1.2mu}=}\ndefineMacro(\"\\\\Coloneqq\", \"\\\\html@mathml{\" + \"\\\\mathrel{\\\\dblcolon\\\\mathrel{\\\\mkern-1.2mu}=}}\" + \"{\\\\mathop{\\\\char\\\"2237\\\\char\\\"3d}}\");\n// \\providecommand*\\coloneq{\\vcentcolon\\mathrel{\\mkern-1.2mu}\\mathrel{-}}\ndefineMacro(\"\\\\coloneq\", \"\\\\html@mathml{\" + \"\\\\mathrel{\\\\vcentcolon\\\\mathrel{\\\\mkern-1.2mu}\\\\mathrel{-}}}\" + \"{\\\\mathop{\\\\char\\\"3a\\\\char\\\"2212}}\");\n// \\providecommand*\\Coloneq{\\dblcolon\\mathrel{\\mkern-1.2mu}\\mathrel{-}}\ndefineMacro(\"\\\\Coloneq\", \"\\\\html@mathml{\" + \"\\\\mathrel{\\\\dblcolon\\\\mathrel{\\\\mkern-1.2mu}\\\\mathrel{-}}}\" + \"{\\\\mathop{\\\\char\\\"2237\\\\char\\\"2212}}\");\n// \\providecommand*\\eqqcolon{=\\mathrel{\\mkern-1.2mu}\\vcentcolon}\ndefineMacro(\"\\\\eqqcolon\", \"\\\\html@mathml{\" + \"\\\\mathrel{=\\\\mathrel{\\\\mkern-1.2mu}\\\\vcentcolon}}\" + \"{\\\\mathop{\\\\char\\\"2255}}\"); // ≕\n// \\providecommand*\\Eqqcolon{=\\mathrel{\\mkern-1.2mu}\\dblcolon}\ndefineMacro(\"\\\\Eqqcolon\", \"\\\\html@mathml{\" + \"\\\\mathrel{=\\\\mathrel{\\\\mkern-1.2mu}\\\\dblcolon}}\" + \"{\\\\mathop{\\\\char\\\"3d\\\\char\\\"2237}}\");\n// \\providecommand*\\eqcolon{\\mathrel{-}\\mathrel{\\mkern-1.2mu}\\vcentcolon}\ndefineMacro(\"\\\\eqcolon\", \"\\\\html@mathml{\" + \"\\\\mathrel{\\\\mathrel{-}\\\\mathrel{\\\\mkern-1.2mu}\\\\vcentcolon}}\" + \"{\\\\mathop{\\\\char\\\"2239}}\");\n// \\providecommand*\\Eqcolon{\\mathrel{-}\\mathrel{\\mkern-1.2mu}\\dblcolon}\ndefineMacro(\"\\\\Eqcolon\", \"\\\\html@mathml{\" + \"\\\\mathrel{\\\\mathrel{-}\\\\mathrel{\\\\mkern-1.2mu}\\\\dblcolon}}\" + \"{\\\\mathop{\\\\char\\\"2212\\\\char\\\"2237}}\");\n// \\providecommand*\\colonapprox{\\vcentcolon\\mathrel{\\mkern-1.2mu}\\approx}\ndefineMacro(\"\\\\colonapprox\", \"\\\\html@mathml{\" + \"\\\\mathrel{\\\\vcentcolon\\\\mathrel{\\\\mkern-1.2mu}\\\\approx}}\" + \"{\\\\mathop{\\\\char\\\"3a\\\\char\\\"2248}}\");\n// \\providecommand*\\Colonapprox{\\dblcolon\\mathrel{\\mkern-1.2mu}\\approx}\ndefineMacro(\"\\\\Colonapprox\", \"\\\\html@mathml{\" + \"\\\\mathrel{\\\\dblcolon\\\\mathrel{\\\\mkern-1.2mu}\\\\approx}}\" + \"{\\\\mathop{\\\\char\\\"2237\\\\char\\\"2248}}\");\n// \\providecommand*\\colonsim{\\vcentcolon\\mathrel{\\mkern-1.2mu}\\sim}\ndefineMacro(\"\\\\colonsim\", \"\\\\html@mathml{\" + \"\\\\mathrel{\\\\vcentcolon\\\\mathrel{\\\\mkern-1.2mu}\\\\sim}}\" + \"{\\\\mathop{\\\\char\\\"3a\\\\char\\\"223c}}\");\n// \\providecommand*\\Colonsim{\\dblcolon\\mathrel{\\mkern-1.2mu}\\sim}\ndefineMacro(\"\\\\Colonsim\", \"\\\\html@mathml{\" + \"\\\\mathrel{\\\\dblcolon\\\\mathrel{\\\\mkern-1.2mu}\\\\sim}}\" + \"{\\\\mathop{\\\\char\\\"2237\\\\char\\\"223c}}\");\n// Some Unicode characters are implemented with macros to mathtools functions.\ndefineMacro(\"\\u2237\", \"\\\\dblcolon\"); // ::\ndefineMacro(\"\\u2239\", \"\\\\eqcolon\"); // -:\ndefineMacro(\"\\u2254\", \"\\\\coloneqq\"); // :=\ndefineMacro(\"\\u2255\", \"\\\\eqqcolon\"); // =:\ndefineMacro(\"\\u2A74\", \"\\\\Coloneqq\"); // ::=\n//////////////////////////////////////////////////////////////////////\n// colonequals.sty\n// Alternate names for mathtools's macros:\ndefineMacro(\"\\\\ratio\", \"\\\\vcentcolon\");\ndefineMacro(\"\\\\coloncolon\", \"\\\\dblcolon\");\ndefineMacro(\"\\\\colonequals\", \"\\\\coloneqq\");\ndefineMacro(\"\\\\coloncolonequals\", \"\\\\Coloneqq\");\ndefineMacro(\"\\\\equalscolon\", \"\\\\eqqcolon\");\ndefineMacro(\"\\\\equalscoloncolon\", \"\\\\Eqqcolon\");\ndefineMacro(\"\\\\colonminus\", \"\\\\coloneq\");\ndefineMacro(\"\\\\coloncolonminus\", \"\\\\Coloneq\");\ndefineMacro(\"\\\\minuscolon\", \"\\\\eqcolon\");\ndefineMacro(\"\\\\minuscoloncolon\", \"\\\\Eqcolon\");\n// \\colonapprox name is same in mathtools and colonequals.\ndefineMacro(\"\\\\coloncolonapprox\", \"\\\\Colonapprox\");\n// \\colonsim name is same in mathtools and colonequals.\ndefineMacro(\"\\\\coloncolonsim\", \"\\\\Colonsim\");\n// Additional macros, implemented by analogy with mathtools definitions:\ndefineMacro(\"\\\\simcolon\", \"\\\\mathrel{\\\\sim\\\\mathrel{\\\\mkern-1.2mu}\\\\vcentcolon}\");\ndefineMacro(\"\\\\simcoloncolon\", \"\\\\mathrel{\\\\sim\\\\mathrel{\\\\mkern-1.2mu}\\\\dblcolon}\");\ndefineMacro(\"\\\\approxcolon\", \"\\\\mathrel{\\\\approx\\\\mathrel{\\\\mkern-1.2mu}\\\\vcentcolon}\");\ndefineMacro(\"\\\\approxcoloncolon\", \"\\\\mathrel{\\\\approx\\\\mathrel{\\\\mkern-1.2mu}\\\\dblcolon}\");\n// Present in newtxmath, pxfonts and txfonts\ndefineMacro(\"\\\\notni\", \"\\\\html@mathml{\\\\not\\\\ni}{\\\\mathrel{\\\\char`\\u220C}}\");\ndefineMacro(\"\\\\limsup\", \"\\\\DOTSB\\\\operatorname*{lim\\\\,sup}\");\ndefineMacro(\"\\\\liminf\", \"\\\\DOTSB\\\\operatorname*{lim\\\\,inf}\");\n//////////////////////////////////////////////////////////////////////\n// From amsopn.sty\ndefineMacro(\"\\\\injlim\", \"\\\\DOTSB\\\\operatorname*{inj\\\\,lim}\");\ndefineMacro(\"\\\\projlim\", \"\\\\DOTSB\\\\operatorname*{proj\\\\,lim}\");\ndefineMacro(\"\\\\varlimsup\", \"\\\\DOTSB\\\\operatorname*{\\\\overline{lim}}\");\ndefineMacro(\"\\\\varliminf\", \"\\\\DOTSB\\\\operatorname*{\\\\underline{lim}}\");\ndefineMacro(\"\\\\varinjlim\", \"\\\\DOTSB\\\\operatorname*{\\\\underrightarrow{lim}}\");\ndefineMacro(\"\\\\varprojlim\", \"\\\\DOTSB\\\\operatorname*{\\\\underleftarrow{lim}}\");\n//////////////////////////////////////////////////////////////////////\n// MathML alternates for KaTeX glyphs in the Unicode private area\ndefineMacro(\"\\\\gvertneqq\", \"\\\\html@mathml{\\\\@gvertneqq}{\\u2269}\");\ndefineMacro(\"\\\\lvertneqq\", \"\\\\html@mathml{\\\\@lvertneqq}{\\u2268}\");\ndefineMacro(\"\\\\ngeqq\", \"\\\\html@mathml{\\\\@ngeqq}{\\u2271}\");\ndefineMacro(\"\\\\ngeqslant\", \"\\\\html@mathml{\\\\@ngeqslant}{\\u2271}\");\ndefineMacro(\"\\\\nleqq\", \"\\\\html@mathml{\\\\@nleqq}{\\u2270}\");\ndefineMacro(\"\\\\nleqslant\", \"\\\\html@mathml{\\\\@nleqslant}{\\u2270}\");\ndefineMacro(\"\\\\nshortmid\", \"\\\\html@mathml{\\\\@nshortmid}{∤}\");\ndefineMacro(\"\\\\nshortparallel\", \"\\\\html@mathml{\\\\@nshortparallel}{∦}\");\ndefineMacro(\"\\\\nsubseteqq\", \"\\\\html@mathml{\\\\@nsubseteqq}{\\u2288}\");\ndefineMacro(\"\\\\nsupseteqq\", \"\\\\html@mathml{\\\\@nsupseteqq}{\\u2289}\");\ndefineMacro(\"\\\\varsubsetneq\", \"\\\\html@mathml{\\\\@varsubsetneq}{⊊}\");\ndefineMacro(\"\\\\varsubsetneqq\", \"\\\\html@mathml{\\\\@varsubsetneqq}{⫋}\");\ndefineMacro(\"\\\\varsupsetneq\", \"\\\\html@mathml{\\\\@varsupsetneq}{⊋}\");\ndefineMacro(\"\\\\varsupsetneqq\", \"\\\\html@mathml{\\\\@varsupsetneqq}{⫌}\");\ndefineMacro(\"\\\\imath\", \"\\\\html@mathml{\\\\@imath}{\\u0131}\");\ndefineMacro(\"\\\\jmath\", \"\\\\html@mathml{\\\\@jmath}{\\u0237}\");\n//////////////////////////////////////////////////////////////////////\n// stmaryrd and semantic\n// The stmaryrd and semantic packages render the next four items by calling a\n// glyph. Those glyphs do not exist in the KaTeX fonts. Hence the macros.\ndefineMacro(\"\\\\llbracket\", \"\\\\html@mathml{\" + \"\\\\mathopen{[\\\\mkern-3.2mu[}}\" + \"{\\\\mathopen{\\\\char`\\u27e6}}\");\ndefineMacro(\"\\\\rrbracket\", \"\\\\html@mathml{\" + \"\\\\mathclose{]\\\\mkern-3.2mu]}}\" + \"{\\\\mathclose{\\\\char`\\u27e7}}\");\ndefineMacro(\"\\u27e6\", \"\\\\llbracket\"); // blackboard bold [\ndefineMacro(\"\\u27e7\", \"\\\\rrbracket\"); // blackboard bold ]\ndefineMacro(\"\\\\lBrace\", \"\\\\html@mathml{\" + \"\\\\mathopen{\\\\{\\\\mkern-3.2mu[}}\" + \"{\\\\mathopen{\\\\char`\\u2983}}\");\ndefineMacro(\"\\\\rBrace\", \"\\\\html@mathml{\" + \"\\\\mathclose{]\\\\mkern-3.2mu\\\\}}}\" + \"{\\\\mathclose{\\\\char`\\u2984}}\");\ndefineMacro(\"\\u2983\", \"\\\\lBrace\"); // blackboard bold {\ndefineMacro(\"\\u2984\", \"\\\\rBrace\"); // blackboard bold }\n// TODO: Create variable sized versions of the last two items. I believe that\n// will require new font glyphs.\n// The stmaryrd function `\\minuso` provides a \"Plimsoll\" symbol that\n// superimposes the characters \\circ and \\mathminus. Used in chemistry.\ndefineMacro(\"\\\\minuso\", \"\\\\mathbin{\\\\html@mathml{\" + \"{\\\\mathrlap{\\\\mathchoice{\\\\kern{0.145em}}{\\\\kern{0.145em}}\" + \"{\\\\kern{0.1015em}}{\\\\kern{0.0725em}}\\\\circ}{-}}}\" + \"{\\\\char`⦵}}\");\ndefineMacro(\"⦵\", \"\\\\minuso\");\n//////////////////////////////////////////////////////////////////////\n// texvc.sty\n// The texvc package contains macros available in mediawiki pages.\n// We omit the functions deprecated at\n// https://en.wikipedia.org/wiki/Help:Displaying_a_formula#Deprecated_syntax\n// We also omit texvc's \\O, which conflicts with \\text{\\O}\ndefineMacro(\"\\\\darr\", \"\\\\downarrow\");\ndefineMacro(\"\\\\dArr\", \"\\\\Downarrow\");\ndefineMacro(\"\\\\Darr\", \"\\\\Downarrow\");\ndefineMacro(\"\\\\lang\", \"\\\\langle\");\ndefineMacro(\"\\\\rang\", \"\\\\rangle\");\ndefineMacro(\"\\\\uarr\", \"\\\\uparrow\");\ndefineMacro(\"\\\\uArr\", \"\\\\Uparrow\");\ndefineMacro(\"\\\\Uarr\", \"\\\\Uparrow\");\ndefineMacro(\"\\\\N\", \"\\\\mathbb{N}\");\ndefineMacro(\"\\\\R\", \"\\\\mathbb{R}\");\ndefineMacro(\"\\\\Z\", \"\\\\mathbb{Z}\");\ndefineMacro(\"\\\\alef\", \"\\\\aleph\");\ndefineMacro(\"\\\\alefsym\", \"\\\\aleph\");\ndefineMacro(\"\\\\Alpha\", \"\\\\mathrm{A}\");\ndefineMacro(\"\\\\Beta\", \"\\\\mathrm{B}\");\ndefineMacro(\"\\\\bull\", \"\\\\bullet\");\ndefineMacro(\"\\\\Chi\", \"\\\\mathrm{X}\");\ndefineMacro(\"\\\\clubs\", \"\\\\clubsuit\");\ndefineMacro(\"\\\\cnums\", \"\\\\mathbb{C}\");\ndefineMacro(\"\\\\Complex\", \"\\\\mathbb{C}\");\ndefineMacro(\"\\\\Dagger\", \"\\\\ddagger\");\ndefineMacro(\"\\\\diamonds\", \"\\\\diamondsuit\");\ndefineMacro(\"\\\\empty\", \"\\\\emptyset\");\ndefineMacro(\"\\\\Epsilon\", \"\\\\mathrm{E}\");\ndefineMacro(\"\\\\Eta\", \"\\\\mathrm{H}\");\ndefineMacro(\"\\\\exist\", \"\\\\exists\");\ndefineMacro(\"\\\\harr\", \"\\\\leftrightarrow\");\ndefineMacro(\"\\\\hArr\", \"\\\\Leftrightarrow\");\ndefineMacro(\"\\\\Harr\", \"\\\\Leftrightarrow\");\ndefineMacro(\"\\\\hearts\", \"\\\\heartsuit\");\ndefineMacro(\"\\\\image\", \"\\\\Im\");\ndefineMacro(\"\\\\infin\", \"\\\\infty\");\ndefineMacro(\"\\\\Iota\", \"\\\\mathrm{I}\");\ndefineMacro(\"\\\\isin\", \"\\\\in\");\ndefineMacro(\"\\\\Kappa\", \"\\\\mathrm{K}\");\ndefineMacro(\"\\\\larr\", \"\\\\leftarrow\");\ndefineMacro(\"\\\\lArr\", \"\\\\Leftarrow\");\ndefineMacro(\"\\\\Larr\", \"\\\\Leftarrow\");\ndefineMacro(\"\\\\lrarr\", \"\\\\leftrightarrow\");\ndefineMacro(\"\\\\lrArr\", \"\\\\Leftrightarrow\");\ndefineMacro(\"\\\\Lrarr\", \"\\\\Leftrightarrow\");\ndefineMacro(\"\\\\Mu\", \"\\\\mathrm{M}\");\ndefineMacro(\"\\\\natnums\", \"\\\\mathbb{N}\");\ndefineMacro(\"\\\\Nu\", \"\\\\mathrm{N}\");\ndefineMacro(\"\\\\Omicron\", \"\\\\mathrm{O}\");\ndefineMacro(\"\\\\plusmn\", \"\\\\pm\");\ndefineMacro(\"\\\\rarr\", \"\\\\rightarrow\");\ndefineMacro(\"\\\\rArr\", \"\\\\Rightarrow\");\ndefineMacro(\"\\\\Rarr\", \"\\\\Rightarrow\");\ndefineMacro(\"\\\\real\", \"\\\\Re\");\ndefineMacro(\"\\\\reals\", \"\\\\mathbb{R}\");\ndefineMacro(\"\\\\Reals\", \"\\\\mathbb{R}\");\ndefineMacro(\"\\\\Rho\", \"\\\\mathrm{P}\");\ndefineMacro(\"\\\\sdot\", \"\\\\cdot\");\ndefineMacro(\"\\\\sect\", \"\\\\S\");\ndefineMacro(\"\\\\spades\", \"\\\\spadesuit\");\ndefineMacro(\"\\\\sub\", \"\\\\subset\");\ndefineMacro(\"\\\\sube\", \"\\\\subseteq\");\ndefineMacro(\"\\\\supe\", \"\\\\supseteq\");\ndefineMacro(\"\\\\Tau\", \"\\\\mathrm{T}\");\ndefineMacro(\"\\\\thetasym\", \"\\\\vartheta\");\n// TODO: defineMacro(\"\\\\varcoppa\", \"\\\\\\mbox{\\\\coppa}\");\ndefineMacro(\"\\\\weierp\", \"\\\\wp\");\ndefineMacro(\"\\\\Zeta\", \"\\\\mathrm{Z}\");\n//////////////////////////////////////////////////////////////////////\n// statmath.sty\n// https://ctan.math.illinois.edu/macros/latex/contrib/statmath/statmath.pdf\ndefineMacro(\"\\\\argmin\", \"\\\\DOTSB\\\\operatorname*{arg\\\\,min}\");\ndefineMacro(\"\\\\argmax\", \"\\\\DOTSB\\\\operatorname*{arg\\\\,max}\");\ndefineMacro(\"\\\\plim\", \"\\\\DOTSB\\\\mathop{\\\\operatorname{plim}}\\\\limits\");\n//////////////////////////////////////////////////////////////////////\n// braket.sty\n// http://ctan.math.washington.edu/tex-archive/macros/latex/contrib/braket/braket.pdf\ndefineMacro(\"\\\\bra\", \"\\\\mathinner{\\\\langle{#1}|}\");\ndefineMacro(\"\\\\ket\", \"\\\\mathinner{|{#1}\\\\rangle}\");\ndefineMacro(\"\\\\braket\", \"\\\\mathinner{\\\\langle{#1}\\\\rangle}\");\ndefineMacro(\"\\\\Bra\", \"\\\\left\\\\langle#1\\\\right|\");\ndefineMacro(\"\\\\Ket\", \"\\\\left|#1\\\\right\\\\rangle\");\nvar braketHelper = one => context => {\n  var left = context.consumeArg().tokens;\n  var middle = context.consumeArg().tokens;\n  var middleDouble = context.consumeArg().tokens;\n  var right = context.consumeArg().tokens;\n  var oldMiddle = context.macros.get(\"|\");\n  var oldMiddleDouble = context.macros.get(\"\\\\|\");\n  context.macros.beginGroup();\n  var midMacro = double => context => {\n    if (one) {\n      // Only modify the first instance of | or \\|\n      context.macros.set(\"|\", oldMiddle);\n      if (middleDouble.length) {\n        context.macros.set(\"\\\\|\", oldMiddleDouble);\n      }\n    }\n    var doubled = double;\n    if (!double && middleDouble.length) {\n      // Mimic \\@ifnextchar\n      var nextToken = context.future();\n      if (nextToken.text === \"|\") {\n        context.popToken();\n        doubled = true;\n      }\n    }\n    return {\n      tokens: doubled ? middleDouble : middle,\n      numArgs: 0\n    };\n  };\n  context.macros.set(\"|\", midMacro(false));\n  if (middleDouble.length) {\n    context.macros.set(\"\\\\|\", midMacro(true));\n  }\n  var arg = context.consumeArg().tokens;\n  var expanded = context.expandTokens([...right, ...arg, ...left // reversed\n  ]);\n  context.macros.endGroup();\n  return {\n    tokens: expanded.reverse(),\n    numArgs: 0\n  };\n};\ndefineMacro(\"\\\\bra@ket\", braketHelper(false));\ndefineMacro(\"\\\\bra@set\", braketHelper(true));\ndefineMacro(\"\\\\Braket\", \"\\\\bra@ket{\\\\left\\\\langle}\" + \"{\\\\,\\\\middle\\\\vert\\\\,}{\\\\,\\\\middle\\\\vert\\\\,}{\\\\right\\\\rangle}\");\ndefineMacro(\"\\\\Set\", \"\\\\bra@set{\\\\left\\\\{\\\\:}\" + \"{\\\\;\\\\middle\\\\vert\\\\;}{\\\\;\\\\middle\\\\Vert\\\\;}{\\\\:\\\\right\\\\}}\");\ndefineMacro(\"\\\\set\", \"\\\\bra@set{\\\\{\\\\,}{\\\\mid}{}{\\\\,\\\\}}\");\n// has no support for special || or \\|\n//////////////////////////////////////////////////////////////////////\n// actuarialangle.dtx\ndefineMacro(\"\\\\angln\", \"{\\\\angl n}\");\n// Custom Khan Academy colors, should be moved to an optional package\ndefineMacro(\"\\\\blue\", \"\\\\textcolor{##6495ed}{#1}\");\ndefineMacro(\"\\\\orange\", \"\\\\textcolor{##ffa500}{#1}\");\ndefineMacro(\"\\\\pink\", \"\\\\textcolor{##ff00af}{#1}\");\ndefineMacro(\"\\\\red\", \"\\\\textcolor{##df0030}{#1}\");\ndefineMacro(\"\\\\green\", \"\\\\textcolor{##28ae7b}{#1}\");\ndefineMacro(\"\\\\gray\", \"\\\\textcolor{gray}{#1}\");\ndefineMacro(\"\\\\purple\", \"\\\\textcolor{##9d38bd}{#1}\");\ndefineMacro(\"\\\\blueA\", \"\\\\textcolor{##ccfaff}{#1}\");\ndefineMacro(\"\\\\blueB\", \"\\\\textcolor{##80f6ff}{#1}\");\ndefineMacro(\"\\\\blueC\", \"\\\\textcolor{##63d9ea}{#1}\");\ndefineMacro(\"\\\\blueD\", \"\\\\textcolor{##11accd}{#1}\");\ndefineMacro(\"\\\\blueE\", \"\\\\textcolor{##0c7f99}{#1}\");\ndefineMacro(\"\\\\tealA\", \"\\\\textcolor{##94fff5}{#1}\");\ndefineMacro(\"\\\\tealB\", \"\\\\textcolor{##26edd5}{#1}\");\ndefineMacro(\"\\\\tealC\", \"\\\\textcolor{##01d1c1}{#1}\");\ndefineMacro(\"\\\\tealD\", \"\\\\textcolor{##01a995}{#1}\");\ndefineMacro(\"\\\\tealE\", \"\\\\textcolor{##208170}{#1}\");\ndefineMacro(\"\\\\greenA\", \"\\\\textcolor{##b6ffb0}{#1}\");\ndefineMacro(\"\\\\greenB\", \"\\\\textcolor{##8af281}{#1}\");\ndefineMacro(\"\\\\greenC\", \"\\\\textcolor{##74cf70}{#1}\");\ndefineMacro(\"\\\\greenD\", \"\\\\textcolor{##1fab54}{#1}\");\ndefineMacro(\"\\\\greenE\", \"\\\\textcolor{##0d923f}{#1}\");\ndefineMacro(\"\\\\goldA\", \"\\\\textcolor{##ffd0a9}{#1}\");\ndefineMacro(\"\\\\goldB\", \"\\\\textcolor{##ffbb71}{#1}\");\ndefineMacro(\"\\\\goldC\", \"\\\\textcolor{##ff9c39}{#1}\");\ndefineMacro(\"\\\\goldD\", \"\\\\textcolor{##e07d10}{#1}\");\ndefineMacro(\"\\\\goldE\", \"\\\\textcolor{##a75a05}{#1}\");\ndefineMacro(\"\\\\redA\", \"\\\\textcolor{##fca9a9}{#1}\");\ndefineMacro(\"\\\\redB\", \"\\\\textcolor{##ff8482}{#1}\");\ndefineMacro(\"\\\\redC\", \"\\\\textcolor{##f9685d}{#1}\");\ndefineMacro(\"\\\\redD\", \"\\\\textcolor{##e84d39}{#1}\");\ndefineMacro(\"\\\\redE\", \"\\\\textcolor{##bc2612}{#1}\");\ndefineMacro(\"\\\\maroonA\", \"\\\\textcolor{##ffbde0}{#1}\");\ndefineMacro(\"\\\\maroonB\", \"\\\\textcolor{##ff92c6}{#1}\");\ndefineMacro(\"\\\\maroonC\", \"\\\\textcolor{##ed5fa6}{#1}\");\ndefineMacro(\"\\\\maroonD\", \"\\\\textcolor{##ca337c}{#1}\");\ndefineMacro(\"\\\\maroonE\", \"\\\\textcolor{##9e034e}{#1}\");\ndefineMacro(\"\\\\purpleA\", \"\\\\textcolor{##ddd7ff}{#1}\");\ndefineMacro(\"\\\\purpleB\", \"\\\\textcolor{##c6b9fc}{#1}\");\ndefineMacro(\"\\\\purpleC\", \"\\\\textcolor{##aa87ff}{#1}\");\ndefineMacro(\"\\\\purpleD\", \"\\\\textcolor{##7854ab}{#1}\");\ndefineMacro(\"\\\\purpleE\", \"\\\\textcolor{##543b78}{#1}\");\ndefineMacro(\"\\\\mintA\", \"\\\\textcolor{##f5f9e8}{#1}\");\ndefineMacro(\"\\\\mintB\", \"\\\\textcolor{##edf2df}{#1}\");\ndefineMacro(\"\\\\mintC\", \"\\\\textcolor{##e0e5cc}{#1}\");\ndefineMacro(\"\\\\grayA\", \"\\\\textcolor{##f6f7f7}{#1}\");\ndefineMacro(\"\\\\grayB\", \"\\\\textcolor{##f0f1f2}{#1}\");\ndefineMacro(\"\\\\grayC\", \"\\\\textcolor{##e3e5e6}{#1}\");\ndefineMacro(\"\\\\grayD\", \"\\\\textcolor{##d6d8da}{#1}\");\ndefineMacro(\"\\\\grayE\", \"\\\\textcolor{##babec2}{#1}\");\ndefineMacro(\"\\\\grayF\", \"\\\\textcolor{##888d93}{#1}\");\ndefineMacro(\"\\\\grayG\", \"\\\\textcolor{##626569}{#1}\");\ndefineMacro(\"\\\\grayH\", \"\\\\textcolor{##3b3e40}{#1}\");\ndefineMacro(\"\\\\grayI\", \"\\\\textcolor{##21242c}{#1}\");\ndefineMacro(\"\\\\kaBlue\", \"\\\\textcolor{##314453}{#1}\");\ndefineMacro(\"\\\\kaGreen\", \"\\\\textcolor{##71B307}{#1}\");\n\n/**\n * This file contains the “gullet” where macros are expanded\n * until only non-macro tokens remain.\n */\n// List of commands that act like macros but aren't defined as a macro,\n// function, or symbol.  Used in `isDefined`.\nvar implicitCommands = {\n  \"^\": true,\n  // Parser.js\n  \"_\": true,\n  // Parser.js\n  \"\\\\limits\": true,\n  // Parser.js\n  \"\\\\nolimits\": true // Parser.js\n};\nclass MacroExpander {\n  constructor(input, settings, mode) {\n    this.settings = settings;\n    this.expansionCount = 0;\n    this.feed(input);\n    // Make new global namespace\n    this.macros = new Namespace(macros, settings.macros);\n    this.mode = mode;\n    this.stack = []; // contains tokens in REVERSE order\n  }\n  /**\n   * Feed a new input string to the same MacroExpander\n   * (with existing macros etc.).\n   */\n  feed(input) {\n    this.lexer = new Lexer(input, this.settings);\n  }\n  /**\n   * Switches between \"text\" and \"math\" modes.\n   */\n  switchMode(newMode) {\n    this.mode = newMode;\n  }\n  /**\n   * Start a new group nesting within all namespaces.\n   */\n  beginGroup() {\n    this.macros.beginGroup();\n  }\n  /**\n   * End current group nesting within all namespaces.\n   */\n  endGroup() {\n    this.macros.endGroup();\n  }\n  /**\n   * Ends all currently nested groups (if any), restoring values before the\n   * groups began.  Useful in case of an error in the middle of parsing.\n   */\n  endGroups() {\n    this.macros.endGroups();\n  }\n  /**\n   * Returns the topmost token on the stack, without expanding it.\n   * Similar in behavior to TeX's `\\futurelet`.\n   */\n  future() {\n    if (this.stack.length === 0) {\n      this.pushToken(this.lexer.lex());\n    }\n    return this.stack[this.stack.length - 1];\n  }\n  /**\n   * Remove and return the next unexpanded token.\n   */\n  popToken() {\n    this.future(); // ensure non-empty stack\n    return this.stack.pop();\n  }\n  /**\n   * Add a given token to the token stack.  In particular, this get be used\n   * to put back a token returned from one of the other methods.\n   */\n  pushToken(token) {\n    this.stack.push(token);\n  }\n  /**\n   * Append an array of tokens to the token stack.\n   */\n  pushTokens(tokens) {\n    this.stack.push(...tokens);\n  }\n  /**\n   * Find an macro argument without expanding tokens and append the array of\n   * tokens to the token stack. Uses Token as a container for the result.\n   */\n  scanArgument(isOptional) {\n    var start;\n    var end;\n    var tokens;\n    if (isOptional) {\n      this.consumeSpaces(); // \\@ifnextchar gobbles any space following it\n      if (this.future().text !== \"[\") {\n        return null;\n      }\n      start = this.popToken(); // don't include [ in tokens\n      ({\n        tokens,\n        end\n      } = this.consumeArg([\"]\"]));\n    } else {\n      ({\n        tokens,\n        start,\n        end\n      } = this.consumeArg());\n    }\n    // indicate the end of an argument\n    this.pushToken(new Token(\"EOF\", end.loc));\n    this.pushTokens(tokens);\n    return new Token(\"\", SourceLocation.range(start, end));\n  }\n  /**\n   * Consume all following space tokens, without expansion.\n   */\n  consumeSpaces() {\n    for (;;) {\n      var token = this.future();\n      if (token.text === \" \") {\n        this.stack.pop();\n      } else {\n        break;\n      }\n    }\n  }\n  /**\n   * Consume an argument from the token stream, and return the resulting array\n   * of tokens and start/end token.\n   */\n  consumeArg(delims) {\n    // The argument for a delimited parameter is the shortest (possibly\n    // empty) sequence of tokens with properly nested {...} groups that is\n    // followed ... by this particular list of non-parameter tokens.\n    // The argument for an undelimited parameter is the next nonblank\n    // token, unless that token is ‘{’, when the argument will be the\n    // entire {...} group that follows.\n    var tokens = [];\n    var isDelimited = delims && delims.length > 0;\n    if (!isDelimited) {\n      // Ignore spaces between arguments.  As the TeXbook says:\n      // \"After you have said ‘\\def\\row#1#2{...}’, you are allowed to\n      //  put spaces between the arguments (e.g., ‘\\row x n’), because\n      //  TeX doesn’t use single spaces as undelimited arguments.\"\n      this.consumeSpaces();\n    }\n    var start = this.future();\n    var tok;\n    var depth = 0;\n    var match = 0;\n    do {\n      tok = this.popToken();\n      tokens.push(tok);\n      if (tok.text === \"{\") {\n        ++depth;\n      } else if (tok.text === \"}\") {\n        --depth;\n        if (depth === -1) {\n          throw new ParseError(\"Extra }\", tok);\n        }\n      } else if (tok.text === \"EOF\") {\n        throw new ParseError(\"Unexpected end of input in a macro argument\" + \", expected '\" + (delims && isDelimited ? delims[match] : \"}\") + \"'\", tok);\n      }\n      if (delims && isDelimited) {\n        if ((depth === 0 || depth === 1 && delims[match] === \"{\") && tok.text === delims[match]) {\n          ++match;\n          if (match === delims.length) {\n            // don't include delims in tokens\n            tokens.splice(-match, match);\n            break;\n          }\n        } else {\n          match = 0;\n        }\n      }\n    } while (depth !== 0 || isDelimited);\n    // If the argument found ... has the form ‘{<nested tokens>}’,\n    // ... the outermost braces enclosing the argument are removed\n    if (start.text === \"{\" && tokens[tokens.length - 1].text === \"}\") {\n      tokens.pop();\n      tokens.shift();\n    }\n    tokens.reverse(); // to fit in with stack order\n    return {\n      tokens,\n      start,\n      end: tok\n    };\n  }\n  /**\n   * Consume the specified number of (delimited) arguments from the token\n   * stream and return the resulting array of arguments.\n   */\n  consumeArgs(numArgs, delimiters) {\n    if (delimiters) {\n      if (delimiters.length !== numArgs + 1) {\n        throw new ParseError(\"The length of delimiters doesn't match the number of args!\");\n      }\n      var delims = delimiters[0];\n      for (var i = 0; i < delims.length; i++) {\n        var tok = this.popToken();\n        if (delims[i] !== tok.text) {\n          throw new ParseError(\"Use of the macro doesn't match its definition\", tok);\n        }\n      }\n    }\n    var args = [];\n    for (var _i = 0; _i < numArgs; _i++) {\n      args.push(this.consumeArg(delimiters && delimiters[_i + 1]).tokens);\n    }\n    return args;\n  }\n  /**\n   * Increment `expansionCount` by the specified amount.\n   * Throw an error if it exceeds `maxExpand`.\n   */\n  countExpansion(amount) {\n    this.expansionCount += amount;\n    if (this.expansionCount > this.settings.maxExpand) {\n      throw new ParseError(\"Too many expansions: infinite loop or \" + \"need to increase maxExpand setting\");\n    }\n  }\n  /**\n   * Expand the next token only once if possible.\n   *\n   * If the token is expanded, the resulting tokens will be pushed onto\n   * the stack in reverse order, and the number of such tokens will be\n   * returned.  This number might be zero or positive.\n   *\n   * If not, the return value is `false`, and the next token remains at the\n   * top of the stack.\n   *\n   * In either case, the next token will be on the top of the stack,\n   * or the stack will be empty (in case of empty expansion\n   * and no other tokens).\n   *\n   * Used to implement `expandAfterFuture` and `expandNextToken`.\n   *\n   * If expandableOnly, only expandable tokens are expanded and\n   * an undefined control sequence results in an error.\n   */\n  expandOnce(expandableOnly) {\n    var topToken = this.popToken();\n    var name = topToken.text;\n    var expansion = !topToken.noexpand ? this._getExpansion(name) : null;\n    if (expansion == null || expandableOnly && expansion.unexpandable) {\n      if (expandableOnly && expansion == null && name[0] === \"\\\\\" && !this.isDefined(name)) {\n        throw new ParseError(\"Undefined control sequence: \" + name);\n      }\n      this.pushToken(topToken);\n      return false;\n    }\n    this.countExpansion(1);\n    var tokens = expansion.tokens;\n    var args = this.consumeArgs(expansion.numArgs, expansion.delimiters);\n    if (expansion.numArgs) {\n      // paste arguments in place of the placeholders\n      tokens = tokens.slice(); // make a shallow copy\n      for (var i = tokens.length - 1; i >= 0; --i) {\n        var tok = tokens[i];\n        if (tok.text === \"#\") {\n          if (i === 0) {\n            throw new ParseError(\"Incomplete placeholder at end of macro body\", tok);\n          }\n          tok = tokens[--i]; // next token on stack\n          if (tok.text === \"#\") {\n            // ## → #\n            tokens.splice(i + 1, 1); // drop first #\n          } else if (/^[1-9]$/.test(tok.text)) {\n            // replace the placeholder with the indicated argument\n            tokens.splice(i, 2, ...args[+tok.text - 1]);\n          } else {\n            throw new ParseError(\"Not a valid argument number\", tok);\n          }\n        }\n      }\n    }\n    // Concatenate expansion onto top of stack.\n    this.pushTokens(tokens);\n    return tokens.length;\n  }\n  /**\n   * Expand the next token only once (if possible), and return the resulting\n   * top token on the stack (without removing anything from the stack).\n   * Similar in behavior to TeX's `\\expandafter\\futurelet`.\n   * Equivalent to expandOnce() followed by future().\n   */\n  expandAfterFuture() {\n    this.expandOnce();\n    return this.future();\n  }\n  /**\n   * Recursively expand first token, then return first non-expandable token.\n   */\n  expandNextToken() {\n    for (;;) {\n      if (this.expandOnce() === false) {\n        // fully expanded\n        var token = this.stack.pop();\n        // the token after \\noexpand is interpreted as if its meaning\n        // were ‘\\relax’\n        if (token.treatAsRelax) {\n          token.text = \"\\\\relax\";\n        }\n        return token;\n      }\n    }\n  }\n  /**\n   * Fully expand the given macro name and return the resulting list of\n   * tokens, or return `undefined` if no such macro is defined.\n   */\n  expandMacro(name) {\n    return this.macros.has(name) ? this.expandTokens([new Token(name)]) : undefined;\n  }\n  /**\n   * Fully expand the given token stream and return the resulting list of\n   * tokens.  Note that the input tokens are in reverse order, but the\n   * output tokens are in forward order.\n   */\n  expandTokens(tokens) {\n    var output = [];\n    var oldStackLength = this.stack.length;\n    this.pushTokens(tokens);\n    while (this.stack.length > oldStackLength) {\n      // Expand only expandable tokens\n      if (this.expandOnce(true) === false) {\n        // fully expanded\n        var token = this.stack.pop();\n        if (token.treatAsRelax) {\n          // the expansion of \\noexpand is the token itself\n          token.noexpand = false;\n          token.treatAsRelax = false;\n        }\n        output.push(token);\n      }\n    }\n    // Count all of these tokens as additional expansions, to prevent\n    // exponential blowup from linearly many \\edef's.\n    this.countExpansion(output.length);\n    return output;\n  }\n  /**\n   * Fully expand the given macro name and return the result as a string,\n   * or return `undefined` if no such macro is defined.\n   */\n  expandMacroAsText(name) {\n    var tokens = this.expandMacro(name);\n    if (tokens) {\n      return tokens.map(token => token.text).join(\"\");\n    } else {\n      return tokens;\n    }\n  }\n  /**\n   * Returns the expanded macro as a reversed array of tokens and a macro\n   * argument count.  Or returns `null` if no such macro.\n   */\n  _getExpansion(name) {\n    var definition = this.macros.get(name);\n    if (definition == null) {\n      // mainly checking for undefined here\n      return definition;\n    }\n    // If a single character has an associated catcode other than 13\n    // (active character), then don't expand it.\n    if (name.length === 1) {\n      var catcode = this.lexer.catcodes[name];\n      if (catcode != null && catcode !== 13) {\n        return;\n      }\n    }\n    var expansion = typeof definition === \"function\" ? definition(this) : definition;\n    if (typeof expansion === \"string\") {\n      var numArgs = 0;\n      if (expansion.includes(\"#\")) {\n        var stripped = expansion.replace(/##/g, \"\");\n        while (stripped.includes(\"#\" + (numArgs + 1))) {\n          ++numArgs;\n        }\n      }\n      var bodyLexer = new Lexer(expansion, this.settings);\n      var tokens = [];\n      var tok = bodyLexer.lex();\n      while (tok.text !== \"EOF\") {\n        tokens.push(tok);\n        tok = bodyLexer.lex();\n      }\n      tokens.reverse(); // to fit in with stack using push and pop\n      var expanded = {\n        tokens,\n        numArgs\n      };\n      return expanded;\n    }\n    return expansion;\n  }\n  /**\n   * Determine whether a command is currently \"defined\" (has some\n   * functionality), meaning that it's a macro (in the current group),\n   * a function, a symbol, or one of the special commands listed in\n   * `implicitCommands`.\n   */\n  isDefined(name) {\n    return this.macros.has(name) || functions.hasOwnProperty(name) || symbols.math.hasOwnProperty(name) || symbols.text.hasOwnProperty(name) || implicitCommands.hasOwnProperty(name);\n  }\n  /**\n   * Determine whether a command is expandable.\n   */\n  isExpandable(name) {\n    var macro = this.macros.get(name);\n    return macro != null ? typeof macro === \"string\" || typeof macro === \"function\" || !macro.unexpandable : functions.hasOwnProperty(name) && !functions[name].primitive;\n  }\n}\n\n// Helpers for Parser.js handling of Unicode (sub|super)script characters.\nvar unicodeSubRegEx = /^[₊₋₌₍₎₀₁₂₃₄₅₆₇₈₉ₐₑₕᵢⱼₖₗₘₙₒₚᵣₛₜᵤᵥₓᵦᵧᵨᵩᵪ]/;\nvar uSubsAndSups = Object.freeze({\n  '₊': '+',\n  '₋': '-',\n  '₌': '=',\n  '₍': '(',\n  '₎': ')',\n  '₀': '0',\n  '₁': '1',\n  '₂': '2',\n  '₃': '3',\n  '₄': '4',\n  '₅': '5',\n  '₆': '6',\n  '₇': '7',\n  '₈': '8',\n  '₉': '9',\n  '\\u2090': 'a',\n  '\\u2091': 'e',\n  '\\u2095': 'h',\n  '\\u1D62': 'i',\n  '\\u2C7C': 'j',\n  '\\u2096': 'k',\n  '\\u2097': 'l',\n  '\\u2098': 'm',\n  '\\u2099': 'n',\n  '\\u2092': 'o',\n  '\\u209A': 'p',\n  '\\u1D63': 'r',\n  '\\u209B': 's',\n  '\\u209C': 't',\n  '\\u1D64': 'u',\n  '\\u1D65': 'v',\n  '\\u2093': 'x',\n  '\\u1D66': 'β',\n  '\\u1D67': 'γ',\n  '\\u1D68': 'ρ',\n  '\\u1D69': '\\u03d5',\n  '\\u1D6A': 'χ',\n  '⁺': '+',\n  '⁻': '-',\n  '⁼': '=',\n  '⁽': '(',\n  '⁾': ')',\n  '⁰': '0',\n  '¹': '1',\n  '²': '2',\n  '³': '3',\n  '⁴': '4',\n  '⁵': '5',\n  '⁶': '6',\n  '⁷': '7',\n  '⁸': '8',\n  '⁹': '9',\n  '\\u1D2C': 'A',\n  '\\u1D2E': 'B',\n  '\\u1D30': 'D',\n  '\\u1D31': 'E',\n  '\\u1D33': 'G',\n  '\\u1D34': 'H',\n  '\\u1D35': 'I',\n  '\\u1D36': 'J',\n  '\\u1D37': 'K',\n  '\\u1D38': 'L',\n  '\\u1D39': 'M',\n  '\\u1D3A': 'N',\n  '\\u1D3C': 'O',\n  '\\u1D3E': 'P',\n  '\\u1D3F': 'R',\n  '\\u1D40': 'T',\n  '\\u1D41': 'U',\n  '\\u2C7D': 'V',\n  '\\u1D42': 'W',\n  '\\u1D43': 'a',\n  '\\u1D47': 'b',\n  '\\u1D9C': 'c',\n  '\\u1D48': 'd',\n  '\\u1D49': 'e',\n  '\\u1DA0': 'f',\n  '\\u1D4D': 'g',\n  '\\u02B0': 'h',\n  '\\u2071': 'i',\n  '\\u02B2': 'j',\n  '\\u1D4F': 'k',\n  '\\u02E1': 'l',\n  '\\u1D50': 'm',\n  '\\u207F': 'n',\n  '\\u1D52': 'o',\n  '\\u1D56': 'p',\n  '\\u02B3': 'r',\n  '\\u02E2': 's',\n  '\\u1D57': 't',\n  '\\u1D58': 'u',\n  '\\u1D5B': 'v',\n  '\\u02B7': 'w',\n  '\\u02E3': 'x',\n  '\\u02B8': 'y',\n  '\\u1DBB': 'z',\n  '\\u1D5D': 'β',\n  '\\u1D5E': 'γ',\n  '\\u1D5F': 'δ',\n  '\\u1D60': '\\u03d5',\n  '\\u1D61': 'χ',\n  '\\u1DBF': 'θ'\n});\n\n/* eslint no-constant-condition:0 */\n// Pre-evaluate both modules as unicodeSymbols require String.normalize()\nvar unicodeAccents = {\n  \"́\": {\n    \"text\": \"\\\\'\",\n    \"math\": \"\\\\acute\"\n  },\n  \"̀\": {\n    \"text\": \"\\\\`\",\n    \"math\": \"\\\\grave\"\n  },\n  \"̈\": {\n    \"text\": \"\\\\\\\"\",\n    \"math\": \"\\\\ddot\"\n  },\n  \"̃\": {\n    \"text\": \"\\\\~\",\n    \"math\": \"\\\\tilde\"\n  },\n  \"̄\": {\n    \"text\": \"\\\\=\",\n    \"math\": \"\\\\bar\"\n  },\n  \"̆\": {\n    \"text\": \"\\\\u\",\n    \"math\": \"\\\\breve\"\n  },\n  \"̌\": {\n    \"text\": \"\\\\v\",\n    \"math\": \"\\\\check\"\n  },\n  \"̂\": {\n    \"text\": \"\\\\^\",\n    \"math\": \"\\\\hat\"\n  },\n  \"̇\": {\n    \"text\": \"\\\\.\",\n    \"math\": \"\\\\dot\"\n  },\n  \"̊\": {\n    \"text\": \"\\\\r\",\n    \"math\": \"\\\\mathring\"\n  },\n  \"̋\": {\n    \"text\": \"\\\\H\"\n  },\n  \"̧\": {\n    \"text\": \"\\\\c\"\n  }\n};\nvar unicodeSymbols = {\n  \"á\": \"á\",\n  \"à\": \"à\",\n  \"ä\": \"ä\",\n  \"ǟ\": \"ǟ\",\n  \"ã\": \"ã\",\n  \"ā\": \"ā\",\n  \"ă\": \"ă\",\n  \"ắ\": \"ắ\",\n  \"ằ\": \"ằ\",\n  \"ẵ\": \"ẵ\",\n  \"ǎ\": \"ǎ\",\n  \"â\": \"â\",\n  \"ấ\": \"ấ\",\n  \"ầ\": \"ầ\",\n  \"ẫ\": \"ẫ\",\n  \"ȧ\": \"ȧ\",\n  \"ǡ\": \"ǡ\",\n  \"å\": \"å\",\n  \"ǻ\": \"ǻ\",\n  \"ḃ\": \"ḃ\",\n  \"ć\": \"ć\",\n  \"ḉ\": \"ḉ\",\n  \"č\": \"č\",\n  \"ĉ\": \"ĉ\",\n  \"ċ\": \"ċ\",\n  \"ç\": \"ç\",\n  \"ď\": \"ď\",\n  \"ḋ\": \"ḋ\",\n  \"ḑ\": \"ḑ\",\n  \"é\": \"é\",\n  \"è\": \"è\",\n  \"ë\": \"ë\",\n  \"ẽ\": \"ẽ\",\n  \"ē\": \"ē\",\n  \"ḗ\": \"ḗ\",\n  \"ḕ\": \"ḕ\",\n  \"ĕ\": \"ĕ\",\n  \"ḝ\": \"ḝ\",\n  \"ě\": \"ě\",\n  \"ê\": \"ê\",\n  \"ế\": \"ế\",\n  \"ề\": \"ề\",\n  \"ễ\": \"ễ\",\n  \"ė\": \"ė\",\n  \"ȩ\": \"ȩ\",\n  \"ḟ\": \"ḟ\",\n  \"ǵ\": \"ǵ\",\n  \"ḡ\": \"ḡ\",\n  \"ğ\": \"ğ\",\n  \"ǧ\": \"ǧ\",\n  \"ĝ\": \"ĝ\",\n  \"ġ\": \"ġ\",\n  \"ģ\": \"ģ\",\n  \"ḧ\": \"ḧ\",\n  \"ȟ\": \"ȟ\",\n  \"ĥ\": \"ĥ\",\n  \"ḣ\": \"ḣ\",\n  \"ḩ\": \"ḩ\",\n  \"í\": \"í\",\n  \"ì\": \"ì\",\n  \"ï\": \"ï\",\n  \"ḯ\": \"ḯ\",\n  \"ĩ\": \"ĩ\",\n  \"ī\": \"ī\",\n  \"ĭ\": \"ĭ\",\n  \"ǐ\": \"ǐ\",\n  \"î\": \"î\",\n  \"ǰ\": \"ǰ\",\n  \"ĵ\": \"ĵ\",\n  \"ḱ\": \"ḱ\",\n  \"ǩ\": \"ǩ\",\n  \"ķ\": \"ķ\",\n  \"ĺ\": \"ĺ\",\n  \"ľ\": \"ľ\",\n  \"ļ\": \"ļ\",\n  \"ḿ\": \"ḿ\",\n  \"ṁ\": \"ṁ\",\n  \"ń\": \"ń\",\n  \"ǹ\": \"ǹ\",\n  \"ñ\": \"ñ\",\n  \"ň\": \"ň\",\n  \"ṅ\": \"ṅ\",\n  \"ņ\": \"ņ\",\n  \"ó\": \"ó\",\n  \"ò\": \"ò\",\n  \"ö\": \"ö\",\n  \"ȫ\": \"ȫ\",\n  \"õ\": \"õ\",\n  \"ṍ\": \"ṍ\",\n  \"ṏ\": \"ṏ\",\n  \"ȭ\": \"ȭ\",\n  \"ō\": \"ō\",\n  \"ṓ\": \"ṓ\",\n  \"ṑ\": \"ṑ\",\n  \"ŏ\": \"ŏ\",\n  \"ǒ\": \"ǒ\",\n  \"ô\": \"ô\",\n  \"ố\": \"ố\",\n  \"ồ\": \"ồ\",\n  \"ỗ\": \"ỗ\",\n  \"ȯ\": \"ȯ\",\n  \"ȱ\": \"ȱ\",\n  \"ő\": \"ő\",\n  \"ṕ\": \"ṕ\",\n  \"ṗ\": \"ṗ\",\n  \"ŕ\": \"ŕ\",\n  \"ř\": \"ř\",\n  \"ṙ\": \"ṙ\",\n  \"ŗ\": \"ŗ\",\n  \"ś\": \"ś\",\n  \"ṥ\": \"ṥ\",\n  \"š\": \"š\",\n  \"ṧ\": \"ṧ\",\n  \"ŝ\": \"ŝ\",\n  \"ṡ\": \"ṡ\",\n  \"ş\": \"ş\",\n  \"ẗ\": \"ẗ\",\n  \"ť\": \"ť\",\n  \"ṫ\": \"ṫ\",\n  \"ţ\": \"ţ\",\n  \"ú\": \"ú\",\n  \"ù\": \"ù\",\n  \"ü\": \"ü\",\n  \"ǘ\": \"ǘ\",\n  \"ǜ\": \"ǜ\",\n  \"ǖ\": \"ǖ\",\n  \"ǚ\": \"ǚ\",\n  \"ũ\": \"ũ\",\n  \"ṹ\": \"ṹ\",\n  \"ū\": \"ū\",\n  \"ṻ\": \"ṻ\",\n  \"ŭ\": \"ŭ\",\n  \"ǔ\": \"ǔ\",\n  \"û\": \"û\",\n  \"ů\": \"ů\",\n  \"ű\": \"ű\",\n  \"ṽ\": \"ṽ\",\n  \"ẃ\": \"ẃ\",\n  \"ẁ\": \"ẁ\",\n  \"ẅ\": \"ẅ\",\n  \"ŵ\": \"ŵ\",\n  \"ẇ\": \"ẇ\",\n  \"ẘ\": \"ẘ\",\n  \"ẍ\": \"ẍ\",\n  \"ẋ\": \"ẋ\",\n  \"ý\": \"ý\",\n  \"ỳ\": \"ỳ\",\n  \"ÿ\": \"ÿ\",\n  \"ỹ\": \"ỹ\",\n  \"ȳ\": \"ȳ\",\n  \"ŷ\": \"ŷ\",\n  \"ẏ\": \"ẏ\",\n  \"ẙ\": \"ẙ\",\n  \"ź\": \"ź\",\n  \"ž\": \"ž\",\n  \"ẑ\": \"ẑ\",\n  \"ż\": \"ż\",\n  \"Á\": \"Á\",\n  \"À\": \"À\",\n  \"Ä\": \"Ä\",\n  \"Ǟ\": \"Ǟ\",\n  \"Ã\": \"Ã\",\n  \"Ā\": \"Ā\",\n  \"Ă\": \"Ă\",\n  \"Ắ\": \"Ắ\",\n  \"Ằ\": \"Ằ\",\n  \"Ẵ\": \"Ẵ\",\n  \"Ǎ\": \"Ǎ\",\n  \"Â\": \"Â\",\n  \"Ấ\": \"Ấ\",\n  \"Ầ\": \"Ầ\",\n  \"Ẫ\": \"Ẫ\",\n  \"Ȧ\": \"Ȧ\",\n  \"Ǡ\": \"Ǡ\",\n  \"Å\": \"Å\",\n  \"Ǻ\": \"Ǻ\",\n  \"Ḃ\": \"Ḃ\",\n  \"Ć\": \"Ć\",\n  \"Ḉ\": \"Ḉ\",\n  \"Č\": \"Č\",\n  \"Ĉ\": \"Ĉ\",\n  \"Ċ\": \"Ċ\",\n  \"Ç\": \"Ç\",\n  \"Ď\": \"Ď\",\n  \"Ḋ\": \"Ḋ\",\n  \"Ḑ\": \"Ḑ\",\n  \"É\": \"É\",\n  \"È\": \"È\",\n  \"Ë\": \"Ë\",\n  \"Ẽ\": \"Ẽ\",\n  \"Ē\": \"Ē\",\n  \"Ḗ\": \"Ḗ\",\n  \"Ḕ\": \"Ḕ\",\n  \"Ĕ\": \"Ĕ\",\n  \"Ḝ\": \"Ḝ\",\n  \"Ě\": \"Ě\",\n  \"Ê\": \"Ê\",\n  \"Ế\": \"Ế\",\n  \"Ề\": \"Ề\",\n  \"Ễ\": \"Ễ\",\n  \"Ė\": \"Ė\",\n  \"Ȩ\": \"Ȩ\",\n  \"Ḟ\": \"Ḟ\",\n  \"Ǵ\": \"Ǵ\",\n  \"Ḡ\": \"Ḡ\",\n  \"Ğ\": \"Ğ\",\n  \"Ǧ\": \"Ǧ\",\n  \"Ĝ\": \"Ĝ\",\n  \"Ġ\": \"Ġ\",\n  \"Ģ\": \"Ģ\",\n  \"Ḧ\": \"Ḧ\",\n  \"Ȟ\": \"Ȟ\",\n  \"Ĥ\": \"Ĥ\",\n  \"Ḣ\": \"Ḣ\",\n  \"Ḩ\": \"Ḩ\",\n  \"Í\": \"Í\",\n  \"Ì\": \"Ì\",\n  \"Ï\": \"Ï\",\n  \"Ḯ\": \"Ḯ\",\n  \"Ĩ\": \"Ĩ\",\n  \"Ī\": \"Ī\",\n  \"Ĭ\": \"Ĭ\",\n  \"Ǐ\": \"Ǐ\",\n  \"Î\": \"Î\",\n  \"İ\": \"İ\",\n  \"Ĵ\": \"Ĵ\",\n  \"Ḱ\": \"Ḱ\",\n  \"Ǩ\": \"Ǩ\",\n  \"Ķ\": \"Ķ\",\n  \"Ĺ\": \"Ĺ\",\n  \"Ľ\": \"Ľ\",\n  \"Ļ\": \"Ļ\",\n  \"Ḿ\": \"Ḿ\",\n  \"Ṁ\": \"Ṁ\",\n  \"Ń\": \"Ń\",\n  \"Ǹ\": \"Ǹ\",\n  \"Ñ\": \"Ñ\",\n  \"Ň\": \"Ň\",\n  \"Ṅ\": \"Ṅ\",\n  \"Ņ\": \"Ņ\",\n  \"Ó\": \"Ó\",\n  \"Ò\": \"Ò\",\n  \"Ö\": \"Ö\",\n  \"Ȫ\": \"Ȫ\",\n  \"Õ\": \"Õ\",\n  \"Ṍ\": \"Ṍ\",\n  \"Ṏ\": \"Ṏ\",\n  \"Ȭ\": \"Ȭ\",\n  \"Ō\": \"Ō\",\n  \"Ṓ\": \"Ṓ\",\n  \"Ṑ\": \"Ṑ\",\n  \"Ŏ\": \"Ŏ\",\n  \"Ǒ\": \"Ǒ\",\n  \"Ô\": \"Ô\",\n  \"Ố\": \"Ố\",\n  \"Ồ\": \"Ồ\",\n  \"Ỗ\": \"Ỗ\",\n  \"Ȯ\": \"Ȯ\",\n  \"Ȱ\": \"Ȱ\",\n  \"Ő\": \"Ő\",\n  \"Ṕ\": \"Ṕ\",\n  \"Ṗ\": \"Ṗ\",\n  \"Ŕ\": \"Ŕ\",\n  \"Ř\": \"Ř\",\n  \"Ṙ\": \"Ṙ\",\n  \"Ŗ\": \"Ŗ\",\n  \"Ś\": \"Ś\",\n  \"Ṥ\": \"Ṥ\",\n  \"Š\": \"Š\",\n  \"Ṧ\": \"Ṧ\",\n  \"Ŝ\": \"Ŝ\",\n  \"Ṡ\": \"Ṡ\",\n  \"Ş\": \"Ş\",\n  \"Ť\": \"Ť\",\n  \"Ṫ\": \"Ṫ\",\n  \"Ţ\": \"Ţ\",\n  \"Ú\": \"Ú\",\n  \"Ù\": \"Ù\",\n  \"Ü\": \"Ü\",\n  \"Ǘ\": \"Ǘ\",\n  \"Ǜ\": \"Ǜ\",\n  \"Ǖ\": \"Ǖ\",\n  \"Ǚ\": \"Ǚ\",\n  \"Ũ\": \"Ũ\",\n  \"Ṹ\": \"Ṹ\",\n  \"Ū\": \"Ū\",\n  \"Ṻ\": \"Ṻ\",\n  \"Ŭ\": \"Ŭ\",\n  \"Ǔ\": \"Ǔ\",\n  \"Û\": \"Û\",\n  \"Ů\": \"Ů\",\n  \"Ű\": \"Ű\",\n  \"Ṽ\": \"Ṽ\",\n  \"Ẃ\": \"Ẃ\",\n  \"Ẁ\": \"Ẁ\",\n  \"Ẅ\": \"Ẅ\",\n  \"Ŵ\": \"Ŵ\",\n  \"Ẇ\": \"Ẇ\",\n  \"Ẍ\": \"Ẍ\",\n  \"Ẋ\": \"Ẋ\",\n  \"Ý\": \"Ý\",\n  \"Ỳ\": \"Ỳ\",\n  \"Ÿ\": \"Ÿ\",\n  \"Ỹ\": \"Ỹ\",\n  \"Ȳ\": \"Ȳ\",\n  \"Ŷ\": \"Ŷ\",\n  \"Ẏ\": \"Ẏ\",\n  \"Ź\": \"Ź\",\n  \"Ž\": \"Ž\",\n  \"Ẑ\": \"Ẑ\",\n  \"Ż\": \"Ż\",\n  \"ά\": \"ά\",\n  \"ὰ\": \"ὰ\",\n  \"ᾱ\": \"ᾱ\",\n  \"ᾰ\": \"ᾰ\",\n  \"έ\": \"έ\",\n  \"ὲ\": \"ὲ\",\n  \"ή\": \"ή\",\n  \"ὴ\": \"ὴ\",\n  \"ί\": \"ί\",\n  \"ὶ\": \"ὶ\",\n  \"ϊ\": \"ϊ\",\n  \"ΐ\": \"ΐ\",\n  \"ῒ\": \"ῒ\",\n  \"ῑ\": \"ῑ\",\n  \"ῐ\": \"ῐ\",\n  \"ό\": \"ό\",\n  \"ὸ\": \"ὸ\",\n  \"ύ\": \"ύ\",\n  \"ὺ\": \"ὺ\",\n  \"ϋ\": \"ϋ\",\n  \"ΰ\": \"ΰ\",\n  \"ῢ\": \"ῢ\",\n  \"ῡ\": \"ῡ\",\n  \"ῠ\": \"ῠ\",\n  \"ώ\": \"ώ\",\n  \"ὼ\": \"ὼ\",\n  \"Ύ\": \"Ύ\",\n  \"Ὺ\": \"Ὺ\",\n  \"Ϋ\": \"Ϋ\",\n  \"Ῡ\": \"Ῡ\",\n  \"Ῠ\": \"Ῠ\",\n  \"Ώ\": \"Ώ\",\n  \"Ὼ\": \"Ὼ\"\n};\n/**\n * This file contains the parser used to parse out a TeX expression from the\n * input. Since TeX isn't context-free, standard parsers don't work particularly\n * well.\n *\n * The strategy of this parser is as such:\n *\n * The main functions (the `.parse...` ones) take a position in the current\n * parse string to parse tokens from. The lexer (found in Lexer.js, stored at\n * this.gullet.lexer) also supports pulling out tokens at arbitrary places. When\n * individual tokens are needed at a position, the lexer is called to pull out a\n * token, which is then used.\n *\n * The parser has a property called \"mode\" indicating the mode that\n * the parser is currently in. Currently it has to be one of \"math\" or\n * \"text\", which denotes whether the current environment is a math-y\n * one or a text-y one (e.g. inside \\text). Currently, this serves to\n * limit the functions which can be used in text mode.\n *\n * The main functions then return an object which contains the useful data that\n * was parsed at its given point, and a new position at the end of the parsed\n * data. The main functions can call each other and continue the parsing by\n * using the returned position as a new starting point.\n *\n * There are also extra `.handle...` functions, which pull out some reused\n * functionality into self-contained functions.\n *\n * The functions return ParseNodes.\n */\nclass Parser {\n  constructor(input, settings) {\n    // Start in math mode\n    this.mode = \"math\";\n    // Create a new macro expander (gullet) and (indirectly via that) also a\n    // new lexer (mouth) for this parser (stomach, in the language of TeX)\n    this.gullet = new MacroExpander(input, settings, this.mode);\n    // Store the settings for use in parsing\n    this.settings = settings;\n    // Count leftright depth (for \\middle errors)\n    this.leftrightDepth = 0;\n    this.nextToken = null;\n  }\n  /**\n   * Checks a result to make sure it has the right type, and throws an\n   * appropriate error otherwise.\n   */\n  expect(text, consume) {\n    if (consume === void 0) {\n      consume = true;\n    }\n    if (this.fetch().text !== text) {\n      throw new ParseError(\"Expected '\" + text + \"', got '\" + this.fetch().text + \"'\", this.fetch());\n    }\n    if (consume) {\n      this.consume();\n    }\n  }\n  /**\n   * Discards the current lookahead token, considering it consumed.\n   */\n  consume() {\n    this.nextToken = null;\n  }\n  /**\n   * Return the current lookahead token, or if there isn't one (at the\n   * beginning, or if the previous lookahead token was consume()d),\n   * fetch the next token as the new lookahead token and return it.\n   */\n  fetch() {\n    if (this.nextToken == null) {\n      this.nextToken = this.gullet.expandNextToken();\n    }\n    return this.nextToken;\n  }\n  /**\n   * Switches between \"text\" and \"math\" modes.\n   */\n  switchMode(newMode) {\n    this.mode = newMode;\n    this.gullet.switchMode(newMode);\n  }\n  /**\n   * Main parsing function, which parses an entire input.\n   */\n  parse() {\n    if (!this.settings.globalGroup) {\n      // Create a group namespace for the math expression.\n      // (LaTeX creates a new group for every $...$, $$...$$, \\[...\\].)\n      this.gullet.beginGroup();\n    }\n    // Use old \\color behavior (same as LaTeX's \\textcolor) if requested.\n    // We do this within the group for the math expression, so it doesn't\n    // pollute settings.macros.\n    if (this.settings.colorIsTextColor) {\n      this.gullet.macros.set(\"\\\\color\", \"\\\\textcolor\");\n    }\n    try {\n      // Try to parse the input\n      var parse = this.parseExpression(false);\n      // If we succeeded, make sure there's an EOF at the end\n      this.expect(\"EOF\");\n      // End the group namespace for the expression\n      if (!this.settings.globalGroup) {\n        this.gullet.endGroup();\n      }\n      return parse;\n      // Close any leftover groups in case of a parse error.\n    } finally {\n      this.gullet.endGroups();\n    }\n  }\n  /**\n   * Fully parse a separate sequence of tokens as a separate job.\n   * Tokens should be specified in reverse order, as in a MacroDefinition.\n   */\n  subparse(tokens) {\n    // Save the next token from the current job.\n    var oldToken = this.nextToken;\n    this.consume();\n    // Run the new job, terminating it with an excess '}'\n    this.gullet.pushToken(new Token(\"}\"));\n    this.gullet.pushTokens(tokens);\n    var parse = this.parseExpression(false);\n    this.expect(\"}\");\n    // Restore the next token from the current job.\n    this.nextToken = oldToken;\n    return parse;\n  }\n  /**\n   * Parses an \"expression\", which is a list of atoms.\n   *\n   * `breakOnInfix`: Should the parsing stop when we hit infix nodes? This\n   *                 happens when functions have higher precedence than infix\n   *                 nodes in implicit parses.\n   *\n   * `breakOnTokenText`: The text of the token that the expression should end\n   *                     with, or `null` if something else should end the\n   *                     expression.\n   */\n  parseExpression(breakOnInfix, breakOnTokenText) {\n    var body = [];\n    // Keep adding atoms to the body until we can't parse any more atoms (either\n    // we reached the end, a }, or a \\right)\n    while (true) {\n      // Ignore spaces in math mode\n      if (this.mode === \"math\") {\n        this.consumeSpaces();\n      }\n      var lex = this.fetch();\n      if (Parser.endOfExpression.has(lex.text)) {\n        break;\n      }\n      if (breakOnTokenText && lex.text === breakOnTokenText) {\n        break;\n      }\n      if (breakOnInfix && functions[lex.text] && functions[lex.text].infix) {\n        break;\n      }\n      var atom = this.parseAtom(breakOnTokenText);\n      if (!atom) {\n        break;\n      } else if (atom.type === \"internal\") {\n        // Internal nodes do not appear in parse tree\n        continue;\n      }\n      body.push(atom);\n    }\n    if (this.mode === \"text\") {\n      this.formLigatures(body);\n    }\n    return this.handleInfixNodes(body);\n  }\n  /**\n   * Rewrites infix operators such as \\over with corresponding commands such\n   * as \\frac.\n   *\n   * There can only be one infix operator per group.  If there's more than one\n   * then the expression is ambiguous.  This can be resolved by adding {}.\n   */\n  handleInfixNodes(body) {\n    var overIndex = -1;\n    var funcName;\n    for (var i = 0; i < body.length; i++) {\n      var node = body[i];\n      if (node.type === \"infix\") {\n        if (overIndex !== -1) {\n          throw new ParseError(\"only one infix operator per group\", node.token);\n        }\n        overIndex = i;\n        funcName = node.replaceWith;\n      }\n    }\n    if (overIndex !== -1 && funcName) {\n      var numerNode;\n      var denomNode;\n      var numerBody = body.slice(0, overIndex);\n      var denomBody = body.slice(overIndex + 1);\n      if (numerBody.length === 1 && numerBody[0].type === \"ordgroup\") {\n        numerNode = numerBody[0];\n      } else {\n        numerNode = {\n          type: \"ordgroup\",\n          mode: this.mode,\n          body: numerBody\n        };\n      }\n      if (denomBody.length === 1 && denomBody[0].type === \"ordgroup\") {\n        denomNode = denomBody[0];\n      } else {\n        denomNode = {\n          type: \"ordgroup\",\n          mode: this.mode,\n          body: denomBody\n        };\n      }\n      var _node;\n      if (funcName === \"\\\\\\\\abovefrac\") {\n        _node = this.callFunction(funcName, [numerNode, body[overIndex], denomNode], []);\n      } else {\n        _node = this.callFunction(funcName, [numerNode, denomNode], []);\n      }\n      return [_node];\n    } else {\n      return body;\n    }\n  }\n  /**\n   * Handle a subscript or superscript with nice errors.\n   */\n  handleSupSubscript(name) {\n    var symbolToken = this.fetch();\n    var symbol = symbolToken.text;\n    this.consume();\n    this.consumeSpaces(); // ignore spaces before sup/subscript argument\n    // Skip over allowed internal nodes such as \\relax\n    var group;\n    do {\n      var _group;\n      group = this.parseGroup(name);\n    } while (((_group = group) == null ? void 0 : _group.type) === \"internal\");\n    if (!group) {\n      throw new ParseError(\"Expected group after '\" + symbol + \"'\", symbolToken);\n    }\n    return group;\n  }\n  /**\n   * Converts the textual input of an unsupported command into a text node\n   * contained within a color node whose color is determined by errorColor\n   */\n  formatUnsupportedCmd(text) {\n    var textordArray = [];\n    for (var i = 0; i < text.length; i++) {\n      textordArray.push({\n        type: \"textord\",\n        mode: \"text\",\n        text: text[i]\n      });\n    }\n    var textNode = {\n      type: \"text\",\n      mode: this.mode,\n      body: textordArray\n    };\n    var colorNode = {\n      type: \"color\",\n      mode: this.mode,\n      color: this.settings.errorColor,\n      body: [textNode]\n    };\n    return colorNode;\n  }\n  /**\n   * Parses a group with optional super/subscripts.\n   */\n  parseAtom(breakOnTokenText) {\n    // The body of an atom is an implicit group, so that things like\n    // \\left(x\\right)^2 work correctly.\n    var base = this.parseGroup(\"atom\", breakOnTokenText);\n    // Internal nodes (e.g. \\relax) cannot support super/subscripts.\n    // Instead we will pick up super/subscripts with blank base next round.\n    if ((base == null ? void 0 : base.type) === \"internal\") {\n      return base;\n    }\n    // In text mode, we don't have superscripts or subscripts\n    if (this.mode === \"text\") {\n      return base;\n    }\n    // Note that base may be empty (i.e. null) at this point.\n    var superscript;\n    var subscript;\n    while (true) {\n      // Guaranteed in math mode, so eat any spaces first.\n      this.consumeSpaces();\n      // Lex the first token\n      var lex = this.fetch();\n      if (lex.text === \"\\\\limits\" || lex.text === \"\\\\nolimits\") {\n        // We got a limit control\n        if (base && base.type === \"op\") {\n          var limits = lex.text === \"\\\\limits\";\n          base.limits = limits;\n          base.alwaysHandleSupSub = true;\n        } else if (base && base.type === \"operatorname\") {\n          if (base.alwaysHandleSupSub) {\n            base.limits = lex.text === \"\\\\limits\";\n          }\n        } else {\n          throw new ParseError(\"Limit controls must follow a math operator\", lex);\n        }\n        this.consume();\n      } else if (lex.text === \"^\") {\n        // We got a superscript start\n        if (superscript) {\n          throw new ParseError(\"Double superscript\", lex);\n        }\n        superscript = this.handleSupSubscript(\"superscript\");\n      } else if (lex.text === \"_\") {\n        // We got a subscript start\n        if (subscript) {\n          throw new ParseError(\"Double subscript\", lex);\n        }\n        subscript = this.handleSupSubscript(\"subscript\");\n      } else if (lex.text === \"'\") {\n        // We got a prime\n        if (superscript) {\n          throw new ParseError(\"Double superscript\", lex);\n        }\n        var prime = {\n          type: \"textord\",\n          mode: this.mode,\n          text: \"\\\\prime\"\n        };\n        // Many primes can be grouped together, so we handle this here\n        var primes = [prime];\n        this.consume();\n        // Keep lexing tokens until we get something that's not a prime\n        while (this.fetch().text === \"'\") {\n          // For each one, add another prime to the list\n          primes.push(prime);\n          this.consume();\n        }\n        // If there's a superscript following the primes, combine that\n        // superscript in with the primes.\n        if (this.fetch().text === \"^\") {\n          primes.push(this.handleSupSubscript(\"superscript\"));\n        }\n        // Put everything into an ordgroup as the superscript\n        superscript = {\n          type: \"ordgroup\",\n          mode: this.mode,\n          body: primes\n        };\n      } else if (uSubsAndSups[lex.text]) {\n        // A Unicode subscript or superscript character.\n        // We treat these similarly to the unicode-math package.\n        // So we render a string of Unicode (sub|super)scripts the\n        // same as a (sub|super)script of regular characters.\n        var isSub = unicodeSubRegEx.test(lex.text);\n        var subsupTokens = [];\n        subsupTokens.push(new Token(uSubsAndSups[lex.text]));\n        this.consume();\n        // Continue fetching tokens to fill out the string.\n        while (true) {\n          var token = this.fetch().text;\n          if (!uSubsAndSups[token]) {\n            break;\n          }\n          if (unicodeSubRegEx.test(token) !== isSub) {\n            break;\n          }\n          subsupTokens.unshift(new Token(uSubsAndSups[token]));\n          this.consume();\n        }\n        // Now create a (sub|super)script.\n        var body = this.subparse(subsupTokens);\n        if (isSub) {\n          subscript = {\n            type: \"ordgroup\",\n            mode: \"math\",\n            body\n          };\n        } else {\n          superscript = {\n            type: \"ordgroup\",\n            mode: \"math\",\n            body\n          };\n        }\n      } else {\n        // If it wasn't ^, _, or ', stop parsing super/subscripts\n        break;\n      }\n    }\n    // Base must be set if superscript or subscript are set per logic above,\n    // but need to check here for type check to pass.\n    if (superscript || subscript) {\n      // If we got either a superscript or subscript, create a supsub\n      return {\n        type: \"supsub\",\n        mode: this.mode,\n        base: base,\n        sup: superscript,\n        sub: subscript\n      };\n    } else {\n      // Otherwise return the original body\n      return base;\n    }\n  }\n  /**\n   * Parses an entire function, including its base and all of its arguments.\n   */\n  parseFunction(breakOnTokenText, name) {\n    var token = this.fetch();\n    var func = token.text;\n    var funcData = functions[func];\n    if (!funcData) {\n      return null;\n    }\n    this.consume(); // consume command token\n    if (name && name !== \"atom\" && !funcData.allowedInArgument) {\n      throw new ParseError(\"Got function '\" + func + \"' with no arguments\" + (name ? \" as \" + name : \"\"), token);\n    } else if (this.mode === \"text\" && !funcData.allowedInText) {\n      throw new ParseError(\"Can't use function '\" + func + \"' in text mode\", token);\n    } else if (this.mode === \"math\" && funcData.allowedInMath === false) {\n      throw new ParseError(\"Can't use function '\" + func + \"' in math mode\", token);\n    }\n    var {\n      args,\n      optArgs\n    } = this.parseArguments(func, funcData);\n    return this.callFunction(func, args, optArgs, token, breakOnTokenText);\n  }\n  /**\n   * Call a function handler with a suitable context and arguments.\n   */\n  callFunction(name, args, optArgs, token, breakOnTokenText) {\n    var context = {\n      funcName: name,\n      parser: this,\n      token,\n      breakOnTokenText\n    };\n    var func = functions[name];\n    if (func && func.handler) {\n      return func.handler(context, args, optArgs);\n    } else {\n      throw new ParseError(\"No function handler for \" + name);\n    }\n  }\n  /**\n   * Parses the arguments of a function or environment\n   */\n  parseArguments(func,\n  // Should look like \"\\name\" or \"\\begin{name}\".\n  funcData) {\n    var totalArgs = funcData.numArgs + funcData.numOptionalArgs;\n    if (totalArgs === 0) {\n      return {\n        args: [],\n        optArgs: []\n      };\n    }\n    var args = [];\n    var optArgs = [];\n    for (var i = 0; i < totalArgs; i++) {\n      var argType = funcData.argTypes && funcData.argTypes[i];\n      var isOptional = i < funcData.numOptionalArgs;\n      if (\"primitive\" in funcData && funcData.primitive && argType == null ||\n      // \\sqrt expands into primitive if optional argument doesn't exist\n      funcData.type === \"sqrt\" && i === 1 && optArgs[0] == null) {\n        argType = \"primitive\";\n      }\n      var arg = this.parseGroupOfType(\"argument to '\" + func + \"'\", argType, isOptional);\n      if (isOptional) {\n        optArgs.push(arg);\n      } else if (arg != null) {\n        args.push(arg);\n      } else {\n        // should be unreachable\n        throw new ParseError(\"Null argument, please report this as a bug\");\n      }\n    }\n    return {\n      args,\n      optArgs\n    };\n  }\n  /**\n   * Parses a group when the mode is changing.\n   */\n  parseGroupOfType(name, type, optional) {\n    switch (type) {\n      case \"color\":\n        return this.parseColorGroup(optional);\n      case \"size\":\n        return this.parseSizeGroup(optional);\n      case \"url\":\n        return this.parseUrlGroup(optional);\n      case \"math\":\n      case \"text\":\n        return this.parseArgumentGroup(optional, type);\n      case \"hbox\":\n        {\n          // hbox argument type wraps the argument in the equivalent of\n          // \\hbox, which is like \\text but switching to \\textstyle size.\n          var group = this.parseArgumentGroup(optional, \"text\");\n          return group != null ? {\n            type: \"styling\",\n            mode: group.mode,\n            body: [group],\n            style: \"text\" // simulate \\textstyle\n          } : null;\n        }\n      case \"raw\":\n        {\n          var token = this.parseStringGroup(\"raw\", optional);\n          return token != null ? {\n            type: \"raw\",\n            mode: \"text\",\n            string: token.text\n          } : null;\n        }\n      case \"primitive\":\n        {\n          if (optional) {\n            throw new ParseError(\"A primitive argument cannot be optional\");\n          }\n          var _group2 = this.parseGroup(name);\n          if (_group2 == null) {\n            throw new ParseError(\"Expected group as \" + name, this.fetch());\n          }\n          return _group2;\n        }\n      case \"original\":\n      case null:\n      case undefined:\n        return this.parseArgumentGroup(optional);\n      default:\n        throw new ParseError(\"Unknown group type as \" + name, this.fetch());\n    }\n  }\n  /**\n   * Discard any space tokens, fetching the next non-space token.\n   */\n  consumeSpaces() {\n    while (this.fetch().text === \" \") {\n      this.consume();\n    }\n  }\n  /**\n   * Parses a group, essentially returning the string formed by the\n   * brace-enclosed tokens plus some position information.\n   */\n  parseStringGroup(modeName,\n  // Used to describe the mode in error messages.\n  optional) {\n    var argToken = this.gullet.scanArgument(optional);\n    if (argToken == null) {\n      return null;\n    }\n    var str = \"\";\n    var nextToken;\n    while ((nextToken = this.fetch()).text !== \"EOF\") {\n      str += nextToken.text;\n      this.consume();\n    }\n    this.consume(); // consume the end of the argument\n    argToken.text = str;\n    return argToken;\n  }\n  /**\n   * Parses a regex-delimited group: the largest sequence of tokens\n   * whose concatenated strings match `regex`. Returns the string\n   * formed by the tokens plus some position information.\n   */\n  parseRegexGroup(regex, modeName) {\n    var firstToken = this.fetch();\n    var lastToken = firstToken;\n    var str = \"\";\n    var nextToken;\n    while ((nextToken = this.fetch()).text !== \"EOF\" && regex.test(str + nextToken.text)) {\n      lastToken = nextToken;\n      str += lastToken.text;\n      this.consume();\n    }\n    if (str === \"\") {\n      throw new ParseError(\"Invalid \" + modeName + \": '\" + firstToken.text + \"'\", firstToken);\n    }\n    return firstToken.range(lastToken, str);\n  }\n  /**\n   * Parses a color description.\n   */\n  parseColorGroup(optional) {\n    var res = this.parseStringGroup(\"color\", optional);\n    if (res == null) {\n      return null;\n    }\n    var match = /^(#[a-f0-9]{3,4}|#[a-f0-9]{6}|#[a-f0-9]{8}|[a-f0-9]{6}|[a-z]+)$/i.exec(res.text);\n    if (!match) {\n      throw new ParseError(\"Invalid color: '\" + res.text + \"'\", res);\n    }\n    var color = match[0];\n    if (/^[0-9a-f]{6}$/i.test(color)) {\n      // We allow a 6-digit HTML color spec without a leading \"#\".\n      // This follows the xcolor package's HTML color model.\n      // Predefined color names are all missed by this RegEx pattern.\n      color = \"#\" + color;\n    }\n    return {\n      type: \"color-token\",\n      mode: this.mode,\n      color\n    };\n  }\n  /**\n   * Parses a size specification, consisting of magnitude and unit.\n   */\n  parseSizeGroup(optional) {\n    var res;\n    var isBlank = false;\n    // don't expand before parseStringGroup\n    this.gullet.consumeSpaces();\n    if (!optional && this.gullet.future().text !== \"{\") {\n      res = this.parseRegexGroup(/^[-+]? *(?:$|\\d+|\\d+\\.\\d*|\\.\\d*) *[a-z]{0,2} *$/, \"size\");\n    } else {\n      res = this.parseStringGroup(\"size\", optional);\n    }\n    if (!res) {\n      return null;\n    }\n    if (!optional && res.text.length === 0) {\n      // Because we've tested for what is !optional, this block won't\n      // affect \\kern, \\hspace, etc. It will capture the mandatory arguments\n      // to \\genfrac and \\above.\n      res.text = \"0pt\"; // Enable \\above{}\n      isBlank = true; // This is here specifically for \\genfrac\n    }\n    var match = /([-+]?) *(\\d+(?:\\.\\d*)?|\\.\\d+) *([a-z]{2})/.exec(res.text);\n    if (!match) {\n      throw new ParseError(\"Invalid size: '\" + res.text + \"'\", res);\n    }\n    var data = {\n      number: +(match[1] + match[2]),\n      // sign + magnitude, cast to number\n      unit: match[3]\n    };\n    if (!validUnit(data)) {\n      throw new ParseError(\"Invalid unit: '\" + data.unit + \"'\", res);\n    }\n    return {\n      type: \"size\",\n      mode: this.mode,\n      value: data,\n      isBlank\n    };\n  }\n  /**\n   * Parses an URL, checking escaped letters and allowed protocols,\n   * and setting the catcode of % as an active character (as in \\hyperref).\n   */\n  parseUrlGroup(optional) {\n    this.gullet.lexer.setCatcode(\"%\", 13); // active character\n    this.gullet.lexer.setCatcode(\"~\", 12); // other character\n    var res = this.parseStringGroup(\"url\", optional);\n    this.gullet.lexer.setCatcode(\"%\", 14); // comment character\n    this.gullet.lexer.setCatcode(\"~\", 13); // active character\n    if (res == null) {\n      return null;\n    }\n    // hyperref package allows backslashes alone in href, but doesn't\n    // generate valid links in such cases; we interpret this as\n    // \"undefined\" behaviour, and keep them as-is. Some browser will\n    // replace backslashes with forward slashes.\n    var url = res.text.replace(/\\\\([#$%&~_^{}])/g, '$1');\n    return {\n      type: \"url\",\n      mode: this.mode,\n      url\n    };\n  }\n  /**\n   * Parses an argument with the mode specified.\n   */\n  parseArgumentGroup(optional, mode) {\n    var argToken = this.gullet.scanArgument(optional);\n    if (argToken == null) {\n      return null;\n    }\n    var outerMode = this.mode;\n    if (mode) {\n      // Switch to specified mode\n      this.switchMode(mode);\n    }\n    this.gullet.beginGroup();\n    var expression = this.parseExpression(false, \"EOF\");\n    // TODO: find an alternative way to denote the end\n    this.expect(\"EOF\"); // expect the end of the argument\n    this.gullet.endGroup();\n    var result = {\n      type: \"ordgroup\",\n      mode: this.mode,\n      loc: argToken.loc,\n      body: expression\n    };\n    if (mode) {\n      // Switch mode back\n      this.switchMode(outerMode);\n    }\n    return result;\n  }\n  /**\n   * Parses an ordinary group, which is either a single nucleus (like \"x\")\n   * or an expression in braces (like \"{x+y}\") or an implicit group, a group\n   * that starts at the current position, and ends right before a higher explicit\n   * group ends, or at EOF.\n   */\n  parseGroup(name,\n  // For error reporting.\n  breakOnTokenText) {\n    var firstToken = this.fetch();\n    var text = firstToken.text;\n    var result;\n    // Try to parse an open brace or \\begingroup\n    if (text === \"{\" || text === \"\\\\begingroup\") {\n      this.consume();\n      var groupEnd = text === \"{\" ? \"}\" : \"\\\\endgroup\";\n      this.gullet.beginGroup();\n      // If we get a brace, parse an expression\n      var expression = this.parseExpression(false, groupEnd);\n      var lastToken = this.fetch();\n      this.expect(groupEnd); // Check that we got a matching closing brace\n      this.gullet.endGroup();\n      result = {\n        type: \"ordgroup\",\n        mode: this.mode,\n        loc: SourceLocation.range(firstToken, lastToken),\n        body: expression,\n        // A group formed by \\begingroup...\\endgroup is a semi-simple group\n        // which doesn't affect spacing in math mode, i.e., is transparent.\n        // https://tex.stackexchange.com/questions/1930/when-should-one-\n        // use-begingroup-instead-of-bgroup\n        semisimple: text === \"\\\\begingroup\" || undefined\n      };\n    } else {\n      // If there exists a function with this name, parse the function.\n      // Otherwise, just return a nucleus\n      result = this.parseFunction(breakOnTokenText, name) || this.parseSymbol();\n      if (result == null && text[0] === \"\\\\\" && !implicitCommands.hasOwnProperty(text)) {\n        if (this.settings.throwOnError) {\n          throw new ParseError(\"Undefined control sequence: \" + text, firstToken);\n        }\n        result = this.formatUnsupportedCmd(text);\n        this.consume();\n      }\n    }\n    return result;\n  }\n  /**\n   * Form ligature-like combinations of characters for text mode.\n   * This includes inputs like \"--\", \"---\", \"``\" and \"''\".\n   * The result will simply replace multiple textord nodes with a single\n   * character in each value by a single textord node having multiple\n   * characters in its value.  The representation is still ASCII source.\n   * The group will be modified in place.\n   */\n  formLigatures(group) {\n    var n = group.length - 1;\n    for (var i = 0; i < n; ++i) {\n      var a = group[i];\n      if (a.type !== \"textord\") {\n        continue;\n      }\n      var v = a.text;\n      var next = group[i + 1];\n      if (!next || next.type !== \"textord\") {\n        continue;\n      }\n      if (v === \"-\" && next.text === \"-\") {\n        var afterNext = group[i + 2];\n        if (i + 1 < n && afterNext && afterNext.type === \"textord\" && afterNext.text === \"-\") {\n          group.splice(i, 3, {\n            type: \"textord\",\n            mode: \"text\",\n            loc: SourceLocation.range(a, afterNext),\n            text: \"---\"\n          });\n          n -= 2;\n        } else {\n          group.splice(i, 2, {\n            type: \"textord\",\n            mode: \"text\",\n            loc: SourceLocation.range(a, next),\n            text: \"--\"\n          });\n          n -= 1;\n        }\n      }\n      if ((v === \"'\" || v === \"`\") && next.text === v) {\n        group.splice(i, 2, {\n          type: \"textord\",\n          mode: \"text\",\n          loc: SourceLocation.range(a, next),\n          text: v + v\n        });\n        n -= 1;\n      }\n    }\n  }\n  /**\n   * Parse a single symbol out of the string. Here, we handle single character\n   * symbols and special functions like \\verb.\n   */\n  parseSymbol() {\n    var nucleus = this.fetch();\n    var text = nucleus.text;\n    if (/^\\\\verb[^a-zA-Z]/.test(text)) {\n      this.consume();\n      var arg = text.slice(5);\n      var star = arg.charAt(0) === \"*\";\n      if (star) {\n        arg = arg.slice(1);\n      }\n      // Lexer's tokenRegex is constructed to always have matching\n      // first/last characters.\n      if (arg.length < 2 || arg.charAt(0) !== arg.slice(-1)) {\n        throw new ParseError(\"\\\\verb assertion failed --\\n                    please report what input caused this bug\");\n      }\n      arg = arg.slice(1, -1); // remove first and last char\n      return {\n        type: \"verb\",\n        mode: \"text\",\n        body: arg,\n        star\n      };\n    }\n    // At this point, we should have a symbol, possibly with accents.\n    // First expand any accented base symbol according to unicodeSymbols.\n    if (unicodeSymbols.hasOwnProperty(text[0]) && !symbols[this.mode][text[0]]) {\n      // This behavior is not strict (XeTeX-compatible) in math mode.\n      if (this.settings.strict && this.mode === \"math\") {\n        this.settings.reportNonstrict(\"unicodeTextInMathMode\", \"Accented Unicode text character \\\"\" + text[0] + \"\\\" used in \" + \"math mode\", nucleus);\n      }\n      text = unicodeSymbols[text[0]] + text.slice(1);\n    }\n    // Strip off any combining characters\n    var match = combiningDiacriticalMarksEndRegex.exec(text);\n    if (match) {\n      text = text.substring(0, match.index);\n      if (text === 'i') {\n        text = '\\u0131'; // dotless i, in math and text mode\n      } else if (text === 'j') {\n        text = '\\u0237'; // dotless j, in math and text mode\n      }\n    }\n    // Recognize base symbol\n    var symbol;\n    if (symbols[this.mode][text]) {\n      if (this.settings.strict && this.mode === 'math' && extraLatin.includes(text)) {\n        this.settings.reportNonstrict(\"unicodeTextInMathMode\", \"Latin-1/Unicode text character \\\"\" + text[0] + \"\\\" used in \" + \"math mode\", nucleus);\n      }\n      var group = symbols[this.mode][text].group;\n      var loc = SourceLocation.range(nucleus);\n      var s;\n      if (ATOMS.hasOwnProperty(group)) {\n        // TODO(ts)\n        var family = group;\n        s = {\n          type: \"atom\",\n          mode: this.mode,\n          family,\n          loc,\n          text\n        };\n      } else {\n        // TODO(ts)\n        s = {\n          type: group,\n          mode: this.mode,\n          loc,\n          text\n        };\n      }\n      // TODO(ts)\n      symbol = s;\n    } else if (text.charCodeAt(0) >= 0x80) {\n      // no symbol for e.g. ^\n      if (this.settings.strict) {\n        if (!supportedCodepoint(text.charCodeAt(0))) {\n          this.settings.reportNonstrict(\"unknownSymbol\", \"Unrecognized Unicode character \\\"\" + text[0] + \"\\\"\" + (\" (\" + text.charCodeAt(0) + \")\"), nucleus);\n        } else if (this.mode === \"math\") {\n          this.settings.reportNonstrict(\"unicodeTextInMathMode\", \"Unicode text character \\\"\" + text[0] + \"\\\" used in math mode\", nucleus);\n        }\n      }\n      // All nonmathematical Unicode characters are rendered as if they\n      // are in text mode (wrapped in \\text) because that's what it\n      // takes to render them in LaTeX.  Setting `mode: this.mode` is\n      // another natural choice (the user requested math mode), but\n      // this makes it more difficult for getCharacterMetrics() to\n      // distinguish Unicode characters without metrics and those for\n      // which we want to simulate the letter M.\n      symbol = {\n        type: \"textord\",\n        mode: \"text\",\n        loc: SourceLocation.range(nucleus),\n        text\n      };\n    } else {\n      return null; // EOF, ^, _, {, }, etc.\n    }\n    this.consume();\n    // Transform combining characters into accents\n    if (match) {\n      for (var i = 0; i < match[0].length; i++) {\n        var accent = match[0][i];\n        if (!unicodeAccents[accent]) {\n          throw new ParseError(\"Unknown accent ' \" + accent + \"'\", nucleus);\n        }\n        var command = unicodeAccents[accent][this.mode] || unicodeAccents[accent].text;\n        if (!command) {\n          throw new ParseError(\"Accent \" + accent + \" unsupported in \" + this.mode + \" mode\", nucleus);\n        }\n        symbol = {\n          type: \"accent\",\n          mode: this.mode,\n          loc: SourceLocation.range(nucleus),\n          label: command,\n          isStretchy: false,\n          isShifty: true,\n          // TODO(ts)\n          base: symbol\n        };\n      }\n    }\n    // TODO(ts)\n    return symbol;\n  }\n}\nParser.endOfExpression = new Set([\"}\", \"\\\\endgroup\", \"\\\\end\", \"\\\\right\", \"&\"]);\n\n/**\n * Provides a single function for parsing an expression using a Parser\n * TODO(emily): Remove this\n */\n/**\n * Parses an expression using a Parser, then returns the parsed result.\n */\nvar parseTree = function parseTree(toParse, settings) {\n  if (!(typeof toParse === 'string' || toParse instanceof String)) {\n    throw new TypeError('KaTeX can only parse string typed expression');\n  }\n  var parser = new Parser(toParse, settings);\n  // Blank out any \\df@tag to avoid spurious \"Duplicate \\tag\" errors\n  delete parser.gullet.macros.current[\"\\\\df@tag\"];\n  var tree = parser.parse();\n  // Prevent a color definition from persisting between calls to katex.render().\n  delete parser.gullet.macros.current[\"\\\\current@color\"];\n  delete parser.gullet.macros.current[\"\\\\color\"];\n  // If the input used \\tag, it will set the \\df@tag macro to the tag.\n  // In this case, we separately parse the tag and wrap the tree.\n  if (parser.gullet.macros.get(\"\\\\df@tag\")) {\n    if (!settings.displayMode) {\n      throw new ParseError(\"\\\\tag works only in display equations\");\n    }\n    tree = [{\n      type: \"tag\",\n      mode: \"text\",\n      body: tree,\n      tag: parser.subparse([new Token(\"\\\\df@tag\")])\n    }];\n  }\n  return tree;\n};\n\n/* eslint no-console:0 */\n/**\n * Parse and build an expression, and place that expression in the DOM node\n * given.\n */\nvar render = function render(expression, baseNode, options) {\n  baseNode.textContent = \"\";\n  var node = renderToDomTree(expression, options).toNode();\n  baseNode.appendChild(node);\n};\n// KaTeX's styles don't work properly in quirks mode. Print out an error, and\n// disable rendering.\nif (typeof document !== \"undefined\") {\n  if (document.compatMode !== \"CSS1Compat\") {\n    typeof console !== \"undefined\" && console.warn(\"Warning: KaTeX doesn't work in quirks mode. Make sure your \" + \"website has a suitable doctype.\");\n    render = function render() {\n      throw new ParseError(\"KaTeX doesn't work in quirks mode.\");\n    };\n  }\n}\n/**\n * Parse and build an expression, and return the markup for that.\n */\nvar renderToString = function renderToString(expression, options) {\n  var markup = renderToDomTree(expression, options).toMarkup();\n  return markup;\n};\n/**\n * Parse an expression and return the parse tree.\n */\nvar generateParseTree = function generateParseTree(expression, options) {\n  var settings = new Settings(options);\n  return parseTree(expression, settings);\n};\n/**\n * If the given error is a KaTeX ParseError and options.throwOnError is false,\n * renders the invalid LaTeX as a span with hover title giving the KaTeX\n * error message.  Otherwise, simply throws the error.\n */\nvar renderError = function renderError(error, expression, options) {\n  if (options.throwOnError || !(error instanceof ParseError)) {\n    throw error;\n  }\n  var node = makeSpan([\"katex-error\"], [new SymbolNode(expression)]);\n  node.setAttribute(\"title\", error.toString());\n  node.setAttribute(\"style\", \"color:\" + options.errorColor);\n  return node;\n};\n/**\n * Generates and returns the katex build tree. This is used for advanced\n * use cases (like rendering to custom output).\n */\nvar renderToDomTree = function renderToDomTree(expression, options) {\n  var settings = new Settings(options);\n  try {\n    var tree = parseTree(expression, settings);\n    return buildTree(tree, expression, settings);\n  } catch (error) {\n    return renderError(error, expression, settings);\n  }\n};\n/**\n * Generates and returns the katex build tree, with just HTML (no MathML).\n * This is used for advanced use cases (like rendering to custom output).\n */\nvar renderToHTMLTree = function renderToHTMLTree(expression, options) {\n  var settings = new Settings(options);\n  try {\n    var tree = parseTree(expression, settings);\n    return buildHTMLTree(tree, expression, settings);\n  } catch (error) {\n    return renderError(error, expression, settings);\n  }\n};\nvar version = \"0.16.45\";\nvar __domTree = {\n  Span,\n  Anchor,\n  SymbolNode,\n  SvgNode,\n  PathNode,\n  LineNode\n};\n// CJS exports and ESM default export\nvar katex = {\n  /**\n   * Current KaTeX version\n   */\n  version,\n  /**\n   * Renders the given LaTeX into an HTML+MathML combination, and adds\n   * it as a child to the specified DOM node.\n   */\n  render,\n  /**\n   * Renders the given LaTeX into an HTML+MathML combination string,\n   * for sending to the client.\n   */\n  renderToString,\n  /**\n   * KaTeX error, usually during parsing.\n   */\n  ParseError,\n  /**\n   * The schema of Settings\n   */\n  SETTINGS_SCHEMA,\n  /**\n   * Parses the given LaTeX into KaTeX's internal parse tree structure,\n   * without rendering to HTML or MathML.\n   *\n   * NOTE: This method is not currently recommended for public use.\n   * The internal tree representation is unstable and is very likely\n   * to change. Use at your own risk.\n   */\n  __parse: generateParseTree,\n  /**\n   * Renders the given LaTeX into an HTML+MathML internal DOM tree\n   * representation, without flattening that representation to a string.\n   *\n   * NOTE: This method is not currently recommended for public use.\n   * The internal tree representation is unstable and is very likely\n   * to change. Use at your own risk.\n   */\n  __renderToDomTree: renderToDomTree,\n  /**\n   * Renders the given LaTeX into an HTML internal DOM tree representation,\n   * without MathML and without flattening that representation to a string.\n   *\n   * NOTE: This method is not currently recommended for public use.\n   * The internal tree representation is unstable and is very likely\n   * to change. Use at your own risk.\n   */\n  __renderToHTMLTree: renderToHTMLTree,\n  /**\n   * extends internal font metrics object with a new object\n   * each key in the new object represents a font name\n  */\n  __setFontMetrics: setFontMetrics,\n  /**\n   * adds a new symbol to builtin symbols table\n   */\n  __defineSymbol: defineSymbol,\n  /**\n   * adds a new function to builtin function list,\n   * which directly produce parse tree elements\n   * and have their own html/mathml builders\n   */\n  __defineFunction: defineFunction,\n  /**\n   * adds a new macro to builtin macro list\n   */\n  __defineMacro: defineMacro,\n  /**\n   * Expose the dom tree node types, which can be useful for type checking nodes.\n   *\n   * NOTE: These methods are not currently recommended for public use.\n   * The internal tree representation is unstable and is very likely\n   * to change. Use at your own risk.\n   */\n  __domTree\n};\n\nexport { ParseError, SETTINGS_SCHEMA, defineFunction as __defineFunction, defineMacro as __defineMacro, defineSymbol as __defineSymbol, __domTree, generateParseTree as __parse, renderToDomTree as __renderToDomTree, renderToHTMLTree as __renderToHTMLTree, setFontMetrics as __setFontMetrics, katex as default, render, renderToString, version };\n","/**\n * @import {ElementContent, Root} from 'hast'\n * @import {KatexOptions} from 'katex'\n * @import {VFile} from 'vfile'\n */\n\n/**\n * @typedef {Omit<KatexOptions, 'displayMode' | 'throwOnError'>} Options\n */\n\nimport {fromHtmlIsomorphic} from 'hast-util-from-html-isomorphic'\nimport {toText} from 'hast-util-to-text'\nimport katex from 'katex'\nimport {SKIP, visitParents} from 'unist-util-visit-parents'\n\n/** @type {Readonly<Options>} */\nconst emptyOptions = {}\n/** @type {ReadonlyArray<unknown>} */\nconst emptyClasses = []\n\n/**\n * Render elements with a `language-math` (or `math-display`, `math-inline`)\n * class with KaTeX.\n *\n * @param {Readonly<Options> | null | undefined} [options]\n *   Configuration (optional).\n * @returns\n *   Transform.\n */\nexport default function rehypeKatex(options) {\n  const settings = options || emptyOptions\n\n  /**\n   * Transform.\n   *\n   * @param {Root} tree\n   *   Tree.\n   * @param {VFile} file\n   *   File.\n   * @returns {undefined}\n   *   Nothing.\n   */\n  return function (tree, file) {\n    visitParents(tree, 'element', function (element, parents) {\n      const classes = Array.isArray(element.properties.className)\n        ? element.properties.className\n        : emptyClasses\n      // This class can be generated from markdown with ` ```math `.\n      const languageMath = classes.includes('language-math')\n      // This class is used by `remark-math` for flow math (block, `$$\\nmath\\n$$`).\n      const mathDisplay = classes.includes('math-display')\n      // This class is used by `remark-math` for text math (inline, `$math$`).\n      const mathInline = classes.includes('math-inline')\n      let displayMode = mathDisplay\n\n      // Any class is fine.\n      if (!languageMath && !mathDisplay && !mathInline) {\n        return\n      }\n\n      let parent = parents[parents.length - 1]\n      let scope = element\n\n      // If this was generated with ` ```math `, replace the `<pre>` and use\n      // display.\n      if (\n        element.tagName === 'code' &&\n        languageMath &&\n        parent &&\n        parent.type === 'element' &&\n        parent.tagName === 'pre'\n      ) {\n        scope = parent\n        parent = parents[parents.length - 2]\n        displayMode = true\n      }\n\n      /* c8 ignore next -- verbose to test. */\n      if (!parent) return\n\n      const value = toText(scope, {whitespace: 'pre'})\n\n      /** @type {Array<ElementContent> | string | undefined} */\n      let result\n\n      try {\n        result = katex.renderToString(value, {\n          ...settings,\n          displayMode,\n          throwOnError: true\n        })\n      } catch (error) {\n        const cause = /** @type {Error} */ (error)\n        const ruleId = cause.name.toLowerCase()\n\n        file.message('Could not render math with KaTeX', {\n          ancestors: [...parents, element],\n          cause,\n          place: element.position,\n          ruleId,\n          source: 'rehype-katex'\n        })\n\n        // KaTeX *should* handle `ParseError` itself, but not others.\n        // it doesn’t always:\n        // <https://github.com/remarkjs/react-markdown/issues/853>\n        try {\n          result = katex.renderToString(value, {\n            ...settings,\n            displayMode,\n            strict: 'ignore',\n            throwOnError: false\n          })\n        } catch {\n          // Generate similar markup if this is an other error.\n          // See: <https://github.com/KaTeX/KaTeX/blob/5dc7af0/docs/error.md>.\n          result = [\n            {\n              type: 'element',\n              tagName: 'span',\n              properties: {\n                className: ['katex-error'],\n                style: 'color:' + (settings.errorColor || '#cc0000'),\n                title: String(error)\n              },\n              children: [{type: 'text', value}]\n            }\n          ]\n        }\n      }\n\n      if (typeof result === 'string') {\n        const root = fromHtmlIsomorphic(result, {fragment: true})\n        // Cast as we don’t expect `doctypes` in KaTeX result.\n        result = /** @type {Array<ElementContent>} */ (root.children)\n      }\n\n      const index = parent.children.indexOf(scope)\n      parent.children.splice(index, 1, ...result)\n      return SKIP\n    })\n  }\n}\n","/**\n * @import {Schema} from 'hast-util-sanitize'\n */\n\n// Couple of ARIA attributes allowed in several, but not all, places.\nconst aria = ['ariaDescribedBy', 'ariaLabel', 'ariaLabelledBy']\n\n/**\n * Default schema.\n *\n * Follows GitHub style sanitation.\n *\n * @type {Schema}\n */\nexport const defaultSchema = {\n  ancestors: {\n    tbody: ['table'],\n    td: ['table'],\n    th: ['table'],\n    thead: ['table'],\n    tfoot: ['table'],\n    tr: ['table']\n  },\n  attributes: {\n    a: [\n      ...aria,\n      // Note: these 3 are used by GFM footnotes, they do work on all links.\n      'dataFootnoteBackref',\n      'dataFootnoteRef',\n      ['className', 'data-footnote-backref'],\n      'href'\n    ],\n    blockquote: ['cite'],\n    // Note: this class is not normally allowed by GH, when manually writing\n    // `code` as HTML in markdown, they adds it some other way.\n    // We can’t do that, so we have to allow it.\n    code: [['className', /^language-./]],\n    del: ['cite'],\n    div: ['itemScope', 'itemType'],\n    dl: [...aria],\n    // Note: this is used by GFM footnotes.\n    h2: [['className', 'sr-only']],\n    img: [...aria, 'longDesc', 'src'],\n    // Note: `input` is not normally allowed by GH, when manually writing\n    // it in markdown, they add it from tasklists some other way.\n    // We can’t do that, so we have to allow it.\n    input: [\n      ['disabled', true],\n      ['type', 'checkbox']\n    ],\n    ins: ['cite'],\n    // Note: this class is not normally allowed by GH, when manually writing\n    // `li` as HTML in markdown, they adds it some other way.\n    // We can’t do that, so we have to allow it.\n    li: [['className', 'task-list-item']],\n    // Note: this class is not normally allowed by GH, when manually writing\n    // `ol` as HTML in markdown, they adds it some other way.\n    // We can’t do that, so we have to allow it.\n    ol: [...aria, ['className', 'contains-task-list']],\n    q: ['cite'],\n    section: ['dataFootnotes', ['className', 'footnotes']],\n    source: ['srcSet'],\n    summary: [...aria],\n    table: [...aria],\n    // Note: this class is not normally allowed by GH, when manually writing\n    // `ol` as HTML in markdown, they adds it some other way.\n    // We can’t do that, so we have to allow it.\n    ul: [...aria, ['className', 'contains-task-list']],\n    '*': [\n      'abbr',\n      'accept',\n      'acceptCharset',\n      'accessKey',\n      'action',\n      'align',\n      'alt',\n      'axis',\n      'border',\n      'cellPadding',\n      'cellSpacing',\n      'char',\n      'charOff',\n      'charSet',\n      'checked',\n      'clear',\n      'colSpan',\n      'color',\n      'cols',\n      'compact',\n      'coords',\n      'dateTime',\n      'dir',\n      // Note: `disabled` is technically allowed on all elements by GH.\n      // But it is useless on everything except `input`.\n      // Because `input`s are normally not allowed, but we allow them for\n      // checkboxes due to tasklists, we allow `disabled` only there.\n      'encType',\n      'frame',\n      'hSpace',\n      'headers',\n      'height',\n      'hrefLang',\n      'htmlFor',\n      'id',\n      'isMap',\n      'itemProp',\n      'label',\n      'lang',\n      'maxLength',\n      'media',\n      'method',\n      'multiple',\n      'name',\n      'noHref',\n      'noShade',\n      'noWrap',\n      'open',\n      'prompt',\n      'readOnly',\n      'rev',\n      'rowSpan',\n      'rows',\n      'rules',\n      'scope',\n      'selected',\n      'shape',\n      'size',\n      'span',\n      'start',\n      'summary',\n      'tabIndex',\n      'title',\n      'useMap',\n      'vAlign',\n      'value',\n      'width'\n    ]\n  },\n  clobber: ['ariaDescribedBy', 'ariaLabelledBy', 'id', 'name'],\n  clobberPrefix: 'user-content-',\n  protocols: {\n    cite: ['http', 'https'],\n    href: ['http', 'https', 'irc', 'ircs', 'mailto', 'xmpp'],\n    longDesc: ['http', 'https'],\n    src: ['http', 'https']\n  },\n  required: {\n    input: {disabled: true, type: 'checkbox'}\n  },\n  strip: ['script'],\n  tagNames: [\n    'a',\n    'b',\n    'blockquote',\n    'br',\n    'code',\n    'dd',\n    'del',\n    'details',\n    'div',\n    'dl',\n    'dt',\n    'em',\n    'h1',\n    'h2',\n    'h3',\n    'h4',\n    'h5',\n    'h6',\n    'hr',\n    'i',\n    'img',\n    // Note: `input` is not normally allowed by GH, when manually writing\n    // it in markdown, they add it from tasklists some other way.\n    // We can’t do that, so we have to allow it.\n    'input',\n    'ins',\n    'kbd',\n    'li',\n    'ol',\n    'p',\n    'picture',\n    'pre',\n    'q',\n    'rp',\n    'rt',\n    'ruby',\n    's',\n    'samp',\n    'section',\n    'source',\n    'span',\n    'strike',\n    'strong',\n    'sub',\n    'summary',\n    'sup',\n    'table',\n    'tbody',\n    'td',\n    'tfoot',\n    'th',\n    'thead',\n    'tr',\n    'tt',\n    'ul',\n    'var'\n  ]\n}\n","/**\n * @import {\n *   Comment,\n *   Doctype,\n *   ElementContent,\n *   Element,\n *   Nodes,\n *   Properties,\n *   RootContent,\n *   Root,\n *   Text\n * } from 'hast'\n */\n\n/**\n * @typedef {[string, ...Array<Exclude<Properties[keyof Properties], Array<any>> | RegExp>] | string} PropertyDefinition\n *   Definition for a property.\n *\n * @typedef Schema\n *   Schema that defines what nodes and properties are allowed.\n *\n *   The default schema is `defaultSchema`, which follows how GitHub cleans.\n *   If any top-level key is missing in the given schema, the corresponding\n *   value of the default schema is used.\n *\n *   To extend the standard schema with a few changes, clone `defaultSchema`\n *   like so:\n *\n *   ```js\n *   import deepmerge from 'deepmerge'\n *   import {h} from 'hastscript'\n *   import {defaultSchema, sanitize} from 'hast-util-sanitize'\n *\n *   // This allows `className` on all elements.\n *   const schema = deepmerge(defaultSchema, {attributes: {'*': ['className']}})\n *\n *   const tree = sanitize(h('div', {className: ['foo']}), schema)\n *\n *   // `tree` still has `className`.\n *   console.log(tree)\n *   // {\n *   //   type: 'element',\n *   //   tagName: 'div',\n *   //   properties: {className: ['foo']},\n *   //   children: []\n *   // }\n *   ```\n * @property {boolean | null | undefined} [allowComments=false]\n *   Whether to allow comment nodes (default: `false`).\n *\n *   For example:\n *\n *   ```js\n *   allowComments: true\n *   ```\n * @property {boolean | null | undefined} [allowDoctypes=false]\n *   Whether to allow doctype nodes (default: `false`).\n *\n *   For example:\n *\n *   ```js\n *   allowDoctypes: true\n *   ```\n * @property {Record<string, Array<string>> | null | undefined} [ancestors]\n *   Map of tag names to a list of tag names which are required ancestors\n *   (default: `defaultSchema.ancestors`).\n *\n *   Elements with these tag names will be ignored if they occur outside of one\n *   of their allowed parents.\n *\n *   For example:\n *\n *   ```js\n *   ancestors: {\n *     tbody: ['table'],\n *     // …\n *     tr: ['table']\n *   }\n *   ```\n * @property {Record<string, Array<PropertyDefinition>> | null | undefined} [attributes]\n *   Map of tag names to allowed property names (default:\n *   `defaultSchema.attributes`).\n *\n *   The special key `'*'` as a tag name defines property names allowed on all\n *   elements.\n *\n *   The special value `'data*'` as a property name can be used to allow all\n *   `data` properties.\n *\n *   For example:\n *\n *   ```js\n *   attributes: {\n *     'ariaDescribedBy', 'ariaLabel', 'ariaLabelledBy', …, 'href'\n *     // …\n *     '*': [\n *       'abbr',\n *       'accept',\n *       'acceptCharset',\n *       // …\n *       'vAlign',\n *       'value',\n *       'width'\n *     ]\n *   }\n *   ```\n *\n *   Instead of a single string in the array, which allows any property value\n *   for the field, you can use an array to allow several values.\n *   For example, `input: ['type']` allows `type` set to any value on `input`s.\n *   But `input: [['type', 'checkbox', 'radio']]` allows `type` when set to\n *   `'checkbox'` or `'radio'`.\n *\n *   You can use regexes, so for example `span: [['className', /^hljs-/]]`\n *   allows any class that starts with `hljs-` on `span`s.\n *\n *   When comma- or space-separated values are used (such as `className`), each\n *   value in is checked individually.\n *   For example, to allow certain classes on `span`s for syntax highlighting,\n *   use `span: [['className', 'number', 'operator', 'token']]`.\n *   This will allow `'number'`, `'operator'`, and `'token'` classes, but drop\n *   others.\n * @property {Array<string> | null | undefined} [clobber]\n *   List of property names that clobber (default: `defaultSchema.clobber`).\n *\n *   For example:\n *\n *   ```js\n *   clobber: ['ariaDescribedBy', 'ariaLabelledBy', 'id', 'name']\n *   ```\n * @property {string | null | undefined} [clobberPrefix]\n *   Prefix to use before clobbering properties (default:\n *   `defaultSchema.clobberPrefix`).\n *\n *   For example:\n *\n *   ```js\n *   clobberPrefix: 'user-content-'\n *   ```\n * @property {Record<string, Array<string> | null | undefined> | null | undefined} [protocols]\n *   Map of *property names* to allowed protocols (default:\n *   `defaultSchema.protocols`).\n *\n *   This defines URLs that are always allowed to have local URLs (relative to\n *   the current website, such as `this`, `#this`, `/this`, or `?this`), and\n *   only allowed to have remote URLs (such as `https://example.com`) if they\n *   use a known protocol.\n *\n *   For example:\n *\n *   ```js\n *   protocols: {\n *     cite: ['http', 'https'],\n *     // …\n *     src: ['http', 'https']\n *   }\n *   ```\n * @property {Record<string, Record<string, Properties[keyof Properties]>> | null | undefined} [required]\n *   Map of tag names to required property names with a default value\n *   (default: `defaultSchema.required`).\n *\n *   This defines properties that must be set.\n *   If a field does not exist (after the element was made safe), these will be\n *   added with the given value.\n *\n *   For example:\n *\n *   ```js\n *   required: {\n *     input: {disabled: true, type: 'checkbox'}\n *   }\n *   ```\n *\n *   > 👉 **Note**: properties are first checked based on `schema.attributes`,\n *   > then on `schema.required`.\n *   > That means properties could be removed by `attributes` and then added\n *   > again with `required`.\n * @property {Array<string> | null | undefined} [strip]\n *   List of tag names to strip from the tree (default: `defaultSchema.strip`).\n *\n *   By default, unsafe elements (those not in `schema.tagNames`) are replaced\n *   by what they contain.\n *   This option can drop their contents.\n *\n *   For example:\n *\n *   ```js\n *   strip: ['script']\n *   ```\n * @property {Array<string> | null | undefined} [tagNames]\n *   List of allowed tag names (default: `defaultSchema.tagNames`).\n *\n *   For example:\n *\n *   ```js\n *   tagNames: [\n *     'a',\n *     'b',\n *     // …\n *     'ul',\n *     'var'\n *   ]\n *   ```\n *\n * @typedef State\n *   Info passed around.\n * @property {Readonly<Schema>} schema\n *   Schema.\n * @property {Array<string>} stack\n *   Tag names of ancestors.\n */\n\nimport structuredClone from '@ungap/structured-clone'\nimport {position} from 'unist-util-position'\nimport {defaultSchema} from './schema.js'\n\nconst own = {}.hasOwnProperty\n\n/**\n * Sanitize a tree.\n *\n * @param {Readonly<Nodes>} node\n *   Unsafe tree.\n * @param {Readonly<Schema> | null | undefined} [options]\n *   Configuration (default: `defaultSchema`).\n * @returns {Nodes}\n *   New, safe tree.\n */\nexport function sanitize(node, options) {\n  /** @type {Nodes} */\n  let result = {type: 'root', children: []}\n\n  /** @type {State} */\n  const state = {\n    schema: options ? {...defaultSchema, ...options} : defaultSchema,\n    stack: []\n  }\n  const replace = transform(state, node)\n\n  if (replace) {\n    if (Array.isArray(replace)) {\n      if (replace.length === 1) {\n        result = replace[0]\n      } else {\n        result.children = replace\n      }\n    } else {\n      result = replace\n    }\n  }\n\n  return result\n}\n\n/**\n * Sanitize `node`.\n *\n * @param {State} state\n *   Info passed around.\n * @param {Readonly<unknown>} node\n *   Unsafe node.\n * @returns {Array<ElementContent> | Nodes | undefined}\n *   Safe result.\n */\nfunction transform(state, node) {\n  if (node && typeof node === 'object') {\n    const unsafe = /** @type {Record<string, Readonly<unknown>>} */ (node)\n    const type = typeof unsafe.type === 'string' ? unsafe.type : ''\n\n    switch (type) {\n      case 'comment': {\n        return comment(state, unsafe)\n      }\n\n      case 'doctype': {\n        return doctype(state, unsafe)\n      }\n\n      case 'element': {\n        return element(state, unsafe)\n      }\n\n      case 'root': {\n        return root(state, unsafe)\n      }\n\n      case 'text': {\n        return text(state, unsafe)\n      }\n\n      default:\n    }\n  }\n}\n\n/**\n * Make a safe comment.\n *\n * @param {State} state\n *   Info passed around.\n * @param {Readonly<Record<string, Readonly<unknown>>>} unsafe\n *   Unsafe comment-like value.\n * @returns {Comment | undefined}\n *   Safe comment (if with `allowComments`).\n */\nfunction comment(state, unsafe) {\n  if (state.schema.allowComments) {\n    // See <https://html.spec.whatwg.org/multipage/parsing.html#serialising-html-fragments>\n    const result = typeof unsafe.value === 'string' ? unsafe.value : ''\n    const index = result.indexOf('-->')\n    const value = index < 0 ? result : result.slice(0, index)\n\n    /** @type {Comment} */\n    const node = {type: 'comment', value}\n\n    patch(node, unsafe)\n\n    return node\n  }\n}\n\n/**\n * Make a safe doctype.\n *\n * @param {State} state\n *   Info passed around.\n * @param {Readonly<Record<string, Readonly<unknown>>>} unsafe\n *   Unsafe doctype-like value.\n * @returns {Doctype | undefined}\n *   Safe doctype (if with `allowDoctypes`).\n */\nfunction doctype(state, unsafe) {\n  if (state.schema.allowDoctypes) {\n    /** @type {Doctype} */\n    const node = {type: 'doctype'}\n\n    patch(node, unsafe)\n\n    return node\n  }\n}\n\n/**\n * Make a safe element.\n *\n * @param {State} state\n *   Info passed around.\n * @param {Readonly<Record<string, Readonly<unknown>>>} unsafe\n *   Unsafe element-like value.\n * @returns {Array<ElementContent> | Element | undefined}\n *   Safe element.\n */\nfunction element(state, unsafe) {\n  const name = typeof unsafe.tagName === 'string' ? unsafe.tagName : ''\n\n  state.stack.push(name)\n\n  const content = /** @type {Array<ElementContent>} */ (\n    children(state, unsafe.children)\n  )\n  const properties_ = properties(state, unsafe.properties)\n\n  state.stack.pop()\n\n  let safeElement = false\n\n  if (\n    name &&\n    name !== '*' &&\n    (!state.schema.tagNames || state.schema.tagNames.includes(name))\n  ) {\n    safeElement = true\n\n    // Some nodes can break out of their context if they don’t have a certain\n    // ancestor.\n    if (state.schema.ancestors && own.call(state.schema.ancestors, name)) {\n      const ancestors = state.schema.ancestors[name]\n      let index = -1\n\n      safeElement = false\n\n      while (++index < ancestors.length) {\n        if (state.stack.includes(ancestors[index])) {\n          safeElement = true\n        }\n      }\n    }\n  }\n\n  if (!safeElement) {\n    return state.schema.strip && !state.schema.strip.includes(name)\n      ? content\n      : undefined\n  }\n\n  /** @type {Element} */\n  const node = {\n    type: 'element',\n    tagName: name,\n    properties: properties_,\n    children: content\n  }\n\n  patch(node, unsafe)\n\n  return node\n}\n\n/**\n * Make a safe root.\n *\n * @param {State} state\n *   Info passed around.\n * @param {Readonly<Record<string, Readonly<unknown>>>} unsafe\n *   Unsafe root-like value.\n * @returns {Root}\n *   Safe root.\n */\nfunction root(state, unsafe) {\n  const content = /** @type {Array<RootContent>} */ (\n    children(state, unsafe.children)\n  )\n\n  /** @type {Root} */\n  const node = {type: 'root', children: content}\n\n  patch(node, unsafe)\n\n  return node\n}\n\n/**\n * Make a safe text.\n *\n * @param {State} _\n *   Info passed around.\n * @param {Readonly<Record<string, Readonly<unknown>>>} unsafe\n *   Unsafe text-like value.\n * @returns {Text}\n *   Safe text.\n */\nfunction text(_, unsafe) {\n  const value = typeof unsafe.value === 'string' ? unsafe.value : ''\n  /** @type {Text} */\n  const node = {type: 'text', value}\n\n  patch(node, unsafe)\n\n  return node\n}\n\n/**\n * Make children safe.\n *\n * @param {State} state\n *   Info passed around.\n * @param {Readonly<unknown>} children\n *   Unsafe value.\n * @returns {Array<Nodes>}\n *   Safe children.\n */\nfunction children(state, children) {\n  /** @type {Array<Nodes>} */\n  const results = []\n\n  if (Array.isArray(children)) {\n    const childrenUnknown = /** @type {Array<Readonly<unknown>>} */ (children)\n    let index = -1\n\n    while (++index < childrenUnknown.length) {\n      const value = transform(state, childrenUnknown[index])\n\n      if (value) {\n        if (Array.isArray(value)) {\n          results.push(...value)\n        } else {\n          results.push(value)\n        }\n      }\n    }\n  }\n\n  return results\n}\n\n/**\n * Make element properties safe.\n *\n * @param {State} state\n *   Info passed around.\n * @param {Readonly<unknown>} properties\n *   Unsafe value.\n * @returns {Properties}\n *   Safe value.\n */\nfunction properties(state, properties) {\n  const tagName = state.stack[state.stack.length - 1]\n  const attributes = state.schema.attributes\n  const required = state.schema.required\n  const specific =\n    attributes && own.call(attributes, tagName)\n      ? attributes[tagName]\n      : undefined\n  const defaults =\n    attributes && own.call(attributes, '*') ? attributes['*'] : undefined\n  const properties_ =\n    /** @type {Readonly<Record<string, Readonly<unknown>>>} */ (\n      properties && typeof properties === 'object' ? properties : {}\n    )\n  /** @type {Properties} */\n  const result = {}\n  /** @type {string} */\n  let key\n\n  for (key in properties_) {\n    if (own.call(properties_, key)) {\n      const unsafe = properties_[key]\n      let safe = propertyValue(\n        state,\n        findDefinition(specific, key),\n        key,\n        unsafe\n      )\n\n      if (safe === null || safe === undefined) {\n        safe = propertyValue(state, findDefinition(defaults, key), key, unsafe)\n      }\n\n      if (safe !== null && safe !== undefined) {\n        result[key] = safe\n      }\n    }\n  }\n\n  if (required && own.call(required, tagName)) {\n    const properties = required[tagName]\n\n    for (key in properties) {\n      if (own.call(properties, key) && !own.call(result, key)) {\n        result[key] = properties[key]\n      }\n    }\n  }\n\n  return result\n}\n\n/**\n * Sanitize a property value.\n *\n * @param {State} state\n *   Info passed around.\n * @param {Readonly<PropertyDefinition> | undefined} definition\n *   Definition.\n * @param {string} key\n *   Field name.\n * @param {Readonly<unknown>} value\n *   Unsafe value (but an array).\n * @returns {Array<number | string> | boolean | number | string | undefined}\n *   Safe value.\n */\nfunction propertyValue(state, definition, key, value) {\n  return definition\n    ? Array.isArray(value)\n      ? propertyValueMany(state, definition, key, value)\n      : propertyValuePrimitive(state, definition, key, value)\n    : undefined\n}\n\n/**\n * Sanitize a property value which is a list.\n *\n * @param {State} state\n *   Info passed around.\n * @param {Readonly<PropertyDefinition>} definition\n *   Definition.\n * @param {string} key\n *   Field name.\n * @param {Readonly<Array<Readonly<unknown>>>} values\n *   Unsafe value (but an array).\n * @returns {Array<number | string>}\n *   Safe value.\n */\nfunction propertyValueMany(state, definition, key, values) {\n  let index = -1\n  /** @type {Array<number | string>} */\n  const result = []\n\n  while (++index < values.length) {\n    const value = propertyValuePrimitive(state, definition, key, values[index])\n\n    if (typeof value === 'number' || typeof value === 'string') {\n      result.push(value)\n    }\n  }\n\n  return result\n}\n\n/**\n * Sanitize a property value which is a primitive.\n *\n * @param {State} state\n *   Info passed around.\n * @param {Readonly<PropertyDefinition>} definition\n *   Definition.\n * @param {string} key\n *   Field name.\n * @param {Readonly<unknown>} value\n *   Unsafe value (but not an array).\n * @returns {boolean | number | string | undefined}\n *   Safe value.\n */\nfunction propertyValuePrimitive(state, definition, key, value) {\n  if (\n    typeof value !== 'boolean' &&\n    typeof value !== 'number' &&\n    typeof value !== 'string'\n  ) {\n    return\n  }\n\n  if (!safeProtocol(state, key, value)) {\n    return\n  }\n\n  // Just a string, or only one item in an array, means all values are OK.\n  // More than one item means an allow list.\n  if (typeof definition === 'object' && definition.length > 1) {\n    let ok = false\n    let index = 0 // Ignore `key`, which is the first item.\n\n    while (++index < definition.length) {\n      const allowed = definition[index]\n\n      // Expression.\n      if (allowed && typeof allowed === 'object' && 'flags' in allowed) {\n        if (allowed.test(String(value))) {\n          ok = true\n          break\n        }\n      }\n      // Primitive.\n      else if (allowed === value) {\n        ok = true\n        break\n      }\n    }\n\n    if (!ok) return\n  }\n\n  return state.schema.clobber &&\n    state.schema.clobberPrefix &&\n    state.schema.clobber.includes(key)\n    ? state.schema.clobberPrefix + value\n    : value\n}\n\n/**\n * Check whether `value` is a safe URL.\n *\n * @param {State} state\n *   Info passed around.\n * @param {string} key\n *   Field name.\n * @param {Readonly<unknown>} value\n *   Unsafe value.\n * @returns {boolean}\n *   Whether it’s a safe value.\n */\nfunction safeProtocol(state, key, value) {\n  const protocols =\n    state.schema.protocols && own.call(state.schema.protocols, key)\n      ? state.schema.protocols[key]\n      : undefined\n\n  // No protocols defined? Then everything is fine.\n  if (!protocols || protocols.length === 0) {\n    return true\n  }\n\n  const url = String(value)\n  const colon = url.indexOf(':')\n  const questionMark = url.indexOf('?')\n  const numberSign = url.indexOf('#')\n  const slash = url.indexOf('/')\n\n  if (\n    colon < 0 ||\n    // If the first colon is after a `?`, `#`, or `/`, it’s not a protocol.\n    (slash > -1 && colon > slash) ||\n    (questionMark > -1 && colon > questionMark) ||\n    (numberSign > -1 && colon > numberSign)\n  ) {\n    return true\n  }\n\n  let index = -1\n\n  while (++index < protocols.length) {\n    const protocol = protocols[index]\n\n    if (\n      colon === protocol.length &&\n      url.slice(0, protocol.length) === protocol\n    ) {\n      return true\n    }\n  }\n\n  return false\n}\n\n/**\n * Add data and position.\n *\n * @param {Nodes} node\n *   Node to patch safe data and position on.\n * @param {Readonly<Record<string, Readonly<unknown>>>} unsafe\n *   Unsafe node-like value.\n * @returns {undefined}\n *   Nothing.\n */\nfunction patch(node, unsafe) {\n  const cleanPosition = position(\n    // @ts-expect-error: looks like a node.\n    unsafe\n  )\n\n  if (unsafe.data) {\n    node.data = structuredClone(unsafe.data)\n  }\n\n  if (cleanPosition) node.position = cleanPosition\n}\n\n/**\n *\n * @param {Readonly<Array<PropertyDefinition>> | undefined} definitions\n * @param {string} key\n * @returns {Readonly<PropertyDefinition> | undefined}\n */\nfunction findDefinition(definitions, key) {\n  /** @type {PropertyDefinition | undefined} */\n  let dataDefault\n  let index = -1\n\n  if (definitions) {\n    while (++index < definitions.length) {\n      const entry = definitions[index]\n      const name = typeof entry === 'string' ? entry : entry[0]\n\n      if (name === key) {\n        return entry\n      }\n\n      if (name === 'data*') dataDefault = entry\n    }\n  }\n\n  if (key.length > 4 && key.slice(0, 4).toLowerCase() === 'data') {\n    return dataDefault\n  }\n}\n","/**\n * @typedef {import('hast').Root} Root\n * @typedef {import('hast-util-sanitize').Schema} Schema\n */\n\nimport {sanitize} from 'hast-util-sanitize'\n\n/**\n * Sanitize HTML.\n *\n * @param {Schema | null | undefined} [options]\n *   Configuration (optional).\n * @returns\n *   Transform.\n */\nexport default function rehypeSanitize(options) {\n  /**\n   * @param {Root} tree\n   *   Tree.\n   * @returns {Root}\n   *   New tree.\n   */\n  return function (tree) {\n    // Assume root in -> root out.\n    const result = /** @type {Root} */ (sanitize(tree, options))\n    return result\n  }\n}\n","/**\n * Count how often a character (or substring) is used in a string.\n *\n * @param {string} value\n *   Value to search in.\n * @param {string} character\n *   Character (or substring) to look for.\n * @return {number}\n *   Number of times `character` occurred in `value`.\n */\nexport function ccount(value, character) {\n  const source = String(value)\n\n  if (typeof character !== 'string') {\n    throw new TypeError('Expected character')\n  }\n\n  let count = 0\n  let index = source.indexOf(character)\n\n  while (index !== -1) {\n    count++\n    index = source.indexOf(character, index + character.length)\n  }\n\n  return count\n}\n","export default function escapeStringRegexp(string) {\n\tif (typeof string !== 'string') {\n\t\tthrow new TypeError('Expected a string');\n\t}\n\n\t// Escape characters with special meaning either inside or outside character sets.\n\t// Use a simple backslash escape when it’s always valid, and a `\\xnn` escape when the simpler form would be disallowed by Unicode patterns’ stricter grammar.\n\treturn string\n\t\t.replace(/[|\\\\{}()[\\]^$+*?.]/g, '\\\\$&')\n\t\t.replace(/-/g, '\\\\x2d');\n}\n","/**\n * @import {Nodes, Parents, PhrasingContent, Root, Text} from 'mdast'\n * @import {BuildVisitor, Test, VisitorResult} from 'unist-util-visit-parents'\n */\n\n/**\n * @typedef RegExpMatchObject\n *   Info on the match.\n * @property {number} index\n *   The index of the search at which the result was found.\n * @property {string} input\n *   A copy of the search string in the text node.\n * @property {[...Array<Parents>, Text]} stack\n *   All ancestors of the text node, where the last node is the text itself.\n *\n * @typedef {RegExp | string} Find\n *   Pattern to find.\n *\n *   Strings are escaped and then turned into global expressions.\n *\n * @typedef {Array<FindAndReplaceTuple>} FindAndReplaceList\n *   Several find and replaces, in array form.\n *\n * @typedef {[Find, Replace?]} FindAndReplaceTuple\n *   Find and replace in tuple form.\n *\n * @typedef {ReplaceFunction | string | null | undefined} Replace\n *   Thing to replace with.\n *\n * @callback ReplaceFunction\n *   Callback called when a search matches.\n * @param {...any} parameters\n *   The parameters are the result of corresponding search expression:\n *\n *   * `value` (`string`) — whole match\n *   * `...capture` (`Array<string>`) — matches from regex capture groups\n *   * `match` (`RegExpMatchObject`) — info on the match\n * @returns {Array<PhrasingContent> | PhrasingContent | string | false | null | undefined}\n *   Thing to replace with.\n *\n *   * when `null`, `undefined`, `''`, remove the match\n *   * …or when `false`, do not replace at all\n *   * …or when `string`, replace with a text node of that value\n *   * …or when `Node` or `Array<Node>`, replace with those nodes\n *\n * @typedef {[RegExp, ReplaceFunction]} Pair\n *   Normalized find and replace.\n *\n * @typedef {Array<Pair>} Pairs\n *   All find and replaced.\n *\n * @typedef Options\n *   Configuration.\n * @property {Test | null | undefined} [ignore]\n *   Test for which nodes to ignore (optional).\n */\n\nimport escape from 'escape-string-regexp'\nimport {visitParents} from 'unist-util-visit-parents'\nimport {convert} from 'unist-util-is'\n\n/**\n * Find patterns in a tree and replace them.\n *\n * The algorithm searches the tree in *preorder* for complete values in `Text`\n * nodes.\n * Partial matches are not supported.\n *\n * @param {Nodes} tree\n *   Tree to change.\n * @param {FindAndReplaceList | FindAndReplaceTuple} list\n *   Patterns to find.\n * @param {Options | null | undefined} [options]\n *   Configuration (when `find` is not `Find`).\n * @returns {undefined}\n *   Nothing.\n */\nexport function findAndReplace(tree, list, options) {\n  const settings = options || {}\n  const ignored = convert(settings.ignore || [])\n  const pairs = toPairs(list)\n  let pairIndex = -1\n\n  while (++pairIndex < pairs.length) {\n    visitParents(tree, 'text', visitor)\n  }\n\n  /** @type {BuildVisitor<Root, 'text'>} */\n  function visitor(node, parents) {\n    let index = -1\n    /** @type {Parents | undefined} */\n    let grandparent\n\n    while (++index < parents.length) {\n      const parent = parents[index]\n      /** @type {Array<Nodes> | undefined} */\n      const siblings = grandparent ? grandparent.children : undefined\n\n      if (\n        ignored(\n          parent,\n          siblings ? siblings.indexOf(parent) : undefined,\n          grandparent\n        )\n      ) {\n        return\n      }\n\n      grandparent = parent\n    }\n\n    if (grandparent) {\n      return handler(node, parents)\n    }\n  }\n\n  /**\n   * Handle a text node which is not in an ignored parent.\n   *\n   * @param {Text} node\n   *   Text node.\n   * @param {Array<Parents>} parents\n   *   Parents.\n   * @returns {VisitorResult}\n   *   Result.\n   */\n  function handler(node, parents) {\n    const parent = parents[parents.length - 1]\n    const find = pairs[pairIndex][0]\n    const replace = pairs[pairIndex][1]\n    let start = 0\n    /** @type {Array<Nodes>} */\n    const siblings = parent.children\n    const index = siblings.indexOf(node)\n    let change = false\n    /** @type {Array<PhrasingContent>} */\n    let nodes = []\n\n    find.lastIndex = 0\n\n    let match = find.exec(node.value)\n\n    while (match) {\n      const position = match.index\n      /** @type {RegExpMatchObject} */\n      const matchObject = {\n        index: match.index,\n        input: match.input,\n        stack: [...parents, node]\n      }\n      let value = replace(...match, matchObject)\n\n      if (typeof value === 'string') {\n        value = value.length > 0 ? {type: 'text', value} : undefined\n      }\n\n      // It wasn’t a match after all.\n      if (value === false) {\n        // False acts as if there was no match.\n        // So we need to reset `lastIndex`, which currently being at the end of\n        // the current match, to the beginning.\n        find.lastIndex = position + 1\n      } else {\n        if (start !== position) {\n          nodes.push({\n            type: 'text',\n            value: node.value.slice(start, position)\n          })\n        }\n\n        if (Array.isArray(value)) {\n          nodes.push(...value)\n        } else if (value) {\n          nodes.push(value)\n        }\n\n        start = position + match[0].length\n        change = true\n      }\n\n      if (!find.global) {\n        break\n      }\n\n      match = find.exec(node.value)\n    }\n\n    if (change) {\n      if (start < node.value.length) {\n        nodes.push({type: 'text', value: node.value.slice(start)})\n      }\n\n      parent.children.splice(index, 1, ...nodes)\n    } else {\n      nodes = [node]\n    }\n\n    return index + nodes.length\n  }\n}\n\n/**\n * Turn a tuple or a list of tuples into pairs.\n *\n * @param {FindAndReplaceList | FindAndReplaceTuple} tupleOrList\n *   Schema.\n * @returns {Pairs}\n *   Clean pairs.\n */\nfunction toPairs(tupleOrList) {\n  /** @type {Pairs} */\n  const result = []\n\n  if (!Array.isArray(tupleOrList)) {\n    throw new TypeError('Expected find and replace tuple or list of tuples')\n  }\n\n  /** @type {FindAndReplaceList} */\n  // @ts-expect-error: correct.\n  const list =\n    !tupleOrList[0] || Array.isArray(tupleOrList[0])\n      ? tupleOrList\n      : [tupleOrList]\n\n  let index = -1\n\n  while (++index < list.length) {\n    const tuple = list[index]\n    result.push([toExpression(tuple[0]), toFunction(tuple[1])])\n  }\n\n  return result\n}\n\n/**\n * Turn a find into an expression.\n *\n * @param {Find} find\n *   Find.\n * @returns {RegExp}\n *   Expression.\n */\nfunction toExpression(find) {\n  return typeof find === 'string' ? new RegExp(escape(find), 'g') : find\n}\n\n/**\n * Turn a replace into a function.\n *\n * @param {Replace} replace\n *   Replace.\n * @returns {ReplaceFunction}\n *   Function.\n */\nfunction toFunction(replace) {\n  return typeof replace === 'function'\n    ? replace\n    : function () {\n        return replace\n      }\n}\n","/**\n * @import {RegExpMatchObject, ReplaceFunction} from 'mdast-util-find-and-replace'\n * @import {CompileContext, Extension as FromMarkdownExtension, Handle as FromMarkdownHandle, Transform as FromMarkdownTransform} from 'mdast-util-from-markdown'\n * @import {ConstructName, Options as ToMarkdownExtension} from 'mdast-util-to-markdown'\n * @import {Link, PhrasingContent} from 'mdast'\n */\n\nimport {ccount} from 'ccount'\nimport {ok as assert} from 'devlop'\nimport {unicodePunctuation, unicodeWhitespace} from 'micromark-util-character'\nimport {findAndReplace} from 'mdast-util-find-and-replace'\n\n/** @type {ConstructName} */\nconst inConstruct = 'phrasing'\n/** @type {Array<ConstructName>} */\nconst notInConstruct = ['autolink', 'link', 'image', 'label']\n\n/**\n * Create an extension for `mdast-util-from-markdown` to enable GFM autolink\n * literals in markdown.\n *\n * @returns {FromMarkdownExtension}\n *   Extension for `mdast-util-to-markdown` to enable GFM autolink literals.\n */\nexport function gfmAutolinkLiteralFromMarkdown() {\n  return {\n    transforms: [transformGfmAutolinkLiterals],\n    enter: {\n      literalAutolink: enterLiteralAutolink,\n      literalAutolinkEmail: enterLiteralAutolinkValue,\n      literalAutolinkHttp: enterLiteralAutolinkValue,\n      literalAutolinkWww: enterLiteralAutolinkValue\n    },\n    exit: {\n      literalAutolink: exitLiteralAutolink,\n      literalAutolinkEmail: exitLiteralAutolinkEmail,\n      literalAutolinkHttp: exitLiteralAutolinkHttp,\n      literalAutolinkWww: exitLiteralAutolinkWww\n    }\n  }\n}\n\n/**\n * Create an extension for `mdast-util-to-markdown` to enable GFM autolink\n * literals in markdown.\n *\n * @returns {ToMarkdownExtension}\n *   Extension for `mdast-util-to-markdown` to enable GFM autolink literals.\n */\nexport function gfmAutolinkLiteralToMarkdown() {\n  return {\n    unsafe: [\n      {\n        character: '@',\n        before: '[+\\\\-.\\\\w]',\n        after: '[\\\\-.\\\\w]',\n        inConstruct,\n        notInConstruct\n      },\n      {\n        character: '.',\n        before: '[Ww]',\n        after: '[\\\\-.\\\\w]',\n        inConstruct,\n        notInConstruct\n      },\n      {\n        character: ':',\n        before: '[ps]',\n        after: '\\\\/',\n        inConstruct,\n        notInConstruct\n      }\n    ]\n  }\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction enterLiteralAutolink(token) {\n  this.enter({type: 'link', title: null, url: '', children: []}, token)\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction enterLiteralAutolinkValue(token) {\n  this.config.enter.autolinkProtocol.call(this, token)\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction exitLiteralAutolinkHttp(token) {\n  this.config.exit.autolinkProtocol.call(this, token)\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction exitLiteralAutolinkWww(token) {\n  this.config.exit.data.call(this, token)\n  const node = this.stack[this.stack.length - 1]\n  assert(node.type === 'link')\n  node.url = 'http://' + this.sliceSerialize(token)\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction exitLiteralAutolinkEmail(token) {\n  this.config.exit.autolinkEmail.call(this, token)\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction exitLiteralAutolink(token) {\n  this.exit(token)\n}\n\n/** @type {FromMarkdownTransform} */\nfunction transformGfmAutolinkLiterals(tree) {\n  findAndReplace(\n    tree,\n    [\n      [/(https?:\\/\\/|www(?=\\.))([-.\\w]+)([^ \\t\\r\\n]*)/gi, findUrl],\n      [/(?<=^|\\s|\\p{P}|\\p{S})([-.\\w+]+)@([-\\w]+(?:\\.[-\\w]+)+)/gu, findEmail]\n    ],\n    {ignore: ['link', 'linkReference']}\n  )\n}\n\n/**\n * @type {ReplaceFunction}\n * @param {string} _\n * @param {string} protocol\n * @param {string} domain\n * @param {string} path\n * @param {RegExpMatchObject} match\n * @returns {Array<PhrasingContent> | Link | false}\n */\n// eslint-disable-next-line max-params\nfunction findUrl(_, protocol, domain, path, match) {\n  let prefix = ''\n\n  // Not an expected previous character.\n  if (!previous(match)) {\n    return false\n  }\n\n  // Treat `www` as part of the domain.\n  if (/^w/i.test(protocol)) {\n    domain = protocol + domain\n    protocol = ''\n    prefix = 'http://'\n  }\n\n  if (!isCorrectDomain(domain)) {\n    return false\n  }\n\n  const parts = splitUrl(domain + path)\n\n  if (!parts[0]) return false\n\n  /** @type {Link} */\n  const result = {\n    type: 'link',\n    title: null,\n    url: prefix + protocol + parts[0],\n    children: [{type: 'text', value: protocol + parts[0]}]\n  }\n\n  if (parts[1]) {\n    return [result, {type: 'text', value: parts[1]}]\n  }\n\n  return result\n}\n\n/**\n * @type {ReplaceFunction}\n * @param {string} _\n * @param {string} atext\n * @param {string} label\n * @param {RegExpMatchObject} match\n * @returns {Link | false}\n */\nfunction findEmail(_, atext, label, match) {\n  if (\n    // Not an expected previous character.\n    !previous(match, true) ||\n    // Label ends in not allowed character.\n    /[-\\d_]$/.test(label)\n  ) {\n    return false\n  }\n\n  return {\n    type: 'link',\n    title: null,\n    url: 'mailto:' + atext + '@' + label,\n    children: [{type: 'text', value: atext + '@' + label}]\n  }\n}\n\n/**\n * @param {string} domain\n * @returns {boolean}\n */\nfunction isCorrectDomain(domain) {\n  const parts = domain.split('.')\n\n  if (\n    parts.length < 2 ||\n    (parts[parts.length - 1] &&\n      (/_/.test(parts[parts.length - 1]) ||\n        !/[a-zA-Z\\d]/.test(parts[parts.length - 1]))) ||\n    (parts[parts.length - 2] &&\n      (/_/.test(parts[parts.length - 2]) ||\n        !/[a-zA-Z\\d]/.test(parts[parts.length - 2])))\n  ) {\n    return false\n  }\n\n  return true\n}\n\n/**\n * @param {string} url\n * @returns {[string, string | undefined]}\n */\nfunction splitUrl(url) {\n  const trailExec = /[!\"&'),.:;<>?\\]}]+$/.exec(url)\n\n  if (!trailExec) {\n    return [url, undefined]\n  }\n\n  url = url.slice(0, trailExec.index)\n\n  let trail = trailExec[0]\n  let closingParenIndex = trail.indexOf(')')\n  const openingParens = ccount(url, '(')\n  let closingParens = ccount(url, ')')\n\n  while (closingParenIndex !== -1 && openingParens > closingParens) {\n    url += trail.slice(0, closingParenIndex + 1)\n    trail = trail.slice(closingParenIndex + 1)\n    closingParenIndex = trail.indexOf(')')\n    closingParens++\n  }\n\n  return [url, trail]\n}\n\n/**\n * @param {RegExpMatchObject} match\n * @param {boolean | null | undefined} [email=false]\n * @returns {boolean}\n */\nfunction previous(match, email) {\n  const code = match.input.charCodeAt(match.index - 1)\n\n  return (\n    (match.index === 0 ||\n      unicodeWhitespace(code) ||\n      unicodePunctuation(code)) &&\n    // If it’s an email, the previous character should not be a slash.\n    (!email || code !== 47)\n  )\n}\n","/**\n * @import {\n *   CompileContext,\n *   Extension as FromMarkdownExtension,\n *   Handle as FromMarkdownHandle\n * } from 'mdast-util-from-markdown'\n * @import {ToMarkdownOptions} from 'mdast-util-gfm-footnote'\n * @import {\n *   Handle as ToMarkdownHandle,\n *   Map,\n *   Options as ToMarkdownExtension\n * } from 'mdast-util-to-markdown'\n * @import {FootnoteDefinition, FootnoteReference} from 'mdast'\n */\n\nimport {ok as assert} from 'devlop'\nimport {normalizeIdentifier} from 'micromark-util-normalize-identifier'\n\nfootnoteReference.peek = footnoteReferencePeek\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction enterFootnoteCallString() {\n  this.buffer()\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction enterFootnoteCall(token) {\n  this.enter({type: 'footnoteReference', identifier: '', label: ''}, token)\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction enterFootnoteDefinitionLabelString() {\n  this.buffer()\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction enterFootnoteDefinition(token) {\n  this.enter(\n    {type: 'footnoteDefinition', identifier: '', label: '', children: []},\n    token\n  )\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction exitFootnoteCallString(token) {\n  const label = this.resume()\n  const node = this.stack[this.stack.length - 1]\n  assert(node.type === 'footnoteReference')\n  node.identifier = normalizeIdentifier(\n    this.sliceSerialize(token)\n  ).toLowerCase()\n  node.label = label\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction exitFootnoteCall(token) {\n  this.exit(token)\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction exitFootnoteDefinitionLabelString(token) {\n  const label = this.resume()\n  const node = this.stack[this.stack.length - 1]\n  assert(node.type === 'footnoteDefinition')\n  node.identifier = normalizeIdentifier(\n    this.sliceSerialize(token)\n  ).toLowerCase()\n  node.label = label\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction exitFootnoteDefinition(token) {\n  this.exit(token)\n}\n\n/** @type {ToMarkdownHandle} */\nfunction footnoteReferencePeek() {\n  return '['\n}\n\n/**\n * @type {ToMarkdownHandle}\n * @param {FootnoteReference} node\n */\nfunction footnoteReference(node, _, state, info) {\n  const tracker = state.createTracker(info)\n  let value = tracker.move('[^')\n  const exit = state.enter('footnoteReference')\n  const subexit = state.enter('reference')\n  value += tracker.move(\n    state.safe(state.associationId(node), {after: ']', before: value})\n  )\n  subexit()\n  exit()\n  value += tracker.move(']')\n  return value\n}\n\n/**\n * Create an extension for `mdast-util-from-markdown` to enable GFM footnotes\n * in markdown.\n *\n * @returns {FromMarkdownExtension}\n *   Extension for `mdast-util-from-markdown`.\n */\nexport function gfmFootnoteFromMarkdown() {\n  return {\n    enter: {\n      gfmFootnoteCallString: enterFootnoteCallString,\n      gfmFootnoteCall: enterFootnoteCall,\n      gfmFootnoteDefinitionLabelString: enterFootnoteDefinitionLabelString,\n      gfmFootnoteDefinition: enterFootnoteDefinition\n    },\n    exit: {\n      gfmFootnoteCallString: exitFootnoteCallString,\n      gfmFootnoteCall: exitFootnoteCall,\n      gfmFootnoteDefinitionLabelString: exitFootnoteDefinitionLabelString,\n      gfmFootnoteDefinition: exitFootnoteDefinition\n    }\n  }\n}\n\n/**\n * Create an extension for `mdast-util-to-markdown` to enable GFM footnotes\n * in markdown.\n *\n * @param {ToMarkdownOptions | null | undefined} [options]\n *   Configuration (optional).\n * @returns {ToMarkdownExtension}\n *   Extension for `mdast-util-to-markdown`.\n */\nexport function gfmFootnoteToMarkdown(options) {\n  // To do: next major: change default.\n  let firstLineBlank = false\n\n  if (options && options.firstLineBlank) {\n    firstLineBlank = true\n  }\n\n  return {\n    handlers: {footnoteDefinition, footnoteReference},\n    // This is on by default already.\n    unsafe: [{character: '[', inConstruct: ['label', 'phrasing', 'reference']}]\n  }\n\n  /**\n   * @type {ToMarkdownHandle}\n   * @param {FootnoteDefinition} node\n   */\n  function footnoteDefinition(node, _, state, info) {\n    const tracker = state.createTracker(info)\n    let value = tracker.move('[^')\n    const exit = state.enter('footnoteDefinition')\n    const subexit = state.enter('label')\n    value += tracker.move(\n      state.safe(state.associationId(node), {before: value, after: ']'})\n    )\n    subexit()\n\n    value += tracker.move(']:')\n\n    if (node.children && node.children.length > 0) {\n      tracker.shift(4)\n\n      value += tracker.move(\n        (firstLineBlank ? '\\n' : ' ') +\n          state.indentLines(\n            state.containerFlow(node, tracker.current()),\n            firstLineBlank ? mapAll : mapExceptFirst\n          )\n      )\n    }\n\n    exit()\n\n    return value\n  }\n}\n\n/** @type {Map} */\nfunction mapExceptFirst(line, index, blank) {\n  return index === 0 ? line : mapAll(line, index, blank)\n}\n\n/** @type {Map} */\nfunction mapAll(line, index, blank) {\n  return (blank ? '' : '    ') + line\n}\n","/**\n * @typedef {import('mdast').Delete} Delete\n *\n * @typedef {import('mdast-util-from-markdown').CompileContext} CompileContext\n * @typedef {import('mdast-util-from-markdown').Extension} FromMarkdownExtension\n * @typedef {import('mdast-util-from-markdown').Handle} FromMarkdownHandle\n *\n * @typedef {import('mdast-util-to-markdown').ConstructName} ConstructName\n * @typedef {import('mdast-util-to-markdown').Handle} ToMarkdownHandle\n * @typedef {import('mdast-util-to-markdown').Options} ToMarkdownExtension\n */\n\n/**\n * List of constructs that occur in phrasing (paragraphs, headings), but cannot\n * contain strikethrough.\n * So they sort of cancel each other out.\n * Note: could use a better name.\n *\n * Note: keep in sync with: <https://github.com/syntax-tree/mdast-util-to-markdown/blob/8ce8dbf/lib/unsafe.js#L14>\n *\n * @type {Array<ConstructName>}\n */\nconst constructsWithoutStrikethrough = [\n  'autolink',\n  'destinationLiteral',\n  'destinationRaw',\n  'reference',\n  'titleQuote',\n  'titleApostrophe'\n]\n\nhandleDelete.peek = peekDelete\n\n/**\n * Create an extension for `mdast-util-from-markdown` to enable GFM\n * strikethrough in markdown.\n *\n * @returns {FromMarkdownExtension}\n *   Extension for `mdast-util-from-markdown` to enable GFM strikethrough.\n */\nexport function gfmStrikethroughFromMarkdown() {\n  return {\n    canContainEols: ['delete'],\n    enter: {strikethrough: enterStrikethrough},\n    exit: {strikethrough: exitStrikethrough}\n  }\n}\n\n/**\n * Create an extension for `mdast-util-to-markdown` to enable GFM\n * strikethrough in markdown.\n *\n * @returns {ToMarkdownExtension}\n *   Extension for `mdast-util-to-markdown` to enable GFM strikethrough.\n */\nexport function gfmStrikethroughToMarkdown() {\n  return {\n    unsafe: [\n      {\n        character: '~',\n        inConstruct: 'phrasing',\n        notInConstruct: constructsWithoutStrikethrough\n      }\n    ],\n    handlers: {delete: handleDelete}\n  }\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction enterStrikethrough(token) {\n  this.enter({type: 'delete', children: []}, token)\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction exitStrikethrough(token) {\n  this.exit(token)\n}\n\n/**\n * @type {ToMarkdownHandle}\n * @param {Delete} node\n */\nfunction handleDelete(node, _, state, info) {\n  const tracker = state.createTracker(info)\n  const exit = state.enter('strikethrough')\n  let value = tracker.move('~~')\n  value += state.containerPhrasing(node, {\n    ...tracker.current(),\n    before: value,\n    after: '~'\n  })\n  value += tracker.move('~~')\n  exit()\n  return value\n}\n\n/** @type {ToMarkdownHandle} */\nfunction peekDelete() {\n  return '~'\n}\n","// To do: next major: remove.\n/**\n * @typedef {Options} MarkdownTableOptions\n *   Configuration.\n */\n\n/**\n * @typedef Options\n *   Configuration.\n * @property {boolean | null | undefined} [alignDelimiters=true]\n *   Whether to align the delimiters (default: `true`);\n *   they are aligned by default:\n *\n *   ```markdown\n *   | Alpha | B     |\n *   | ----- | ----- |\n *   | C     | Delta |\n *   ```\n *\n *   Pass `false` to make them staggered:\n *\n *   ```markdown\n *   | Alpha | B |\n *   | - | - |\n *   | C | Delta |\n *   ```\n * @property {ReadonlyArray<string | null | undefined> | string | null | undefined} [align]\n *   How to align columns (default: `''`);\n *   one style for all columns or styles for their respective columns;\n *   each style is either `'l'` (left), `'r'` (right), or `'c'` (center);\n *   other values are treated as `''`, which doesn’t place the colon in the\n *   alignment row but does align left;\n *   *only the lowercased first character is used, so `Right` is fine.*\n * @property {boolean | null | undefined} [delimiterEnd=true]\n *   Whether to end each row with the delimiter (default: `true`).\n *\n *   > 👉 **Note**: please don’t use this: it could create fragile structures\n *   > that aren’t understandable to some markdown parsers.\n *\n *   When `true`, there are ending delimiters:\n *\n *   ```markdown\n *   | Alpha | B     |\n *   | ----- | ----- |\n *   | C     | Delta |\n *   ```\n *\n *   When `false`, there are no ending delimiters:\n *\n *   ```markdown\n *   | Alpha | B\n *   | ----- | -----\n *   | C     | Delta\n *   ```\n * @property {boolean | null | undefined} [delimiterStart=true]\n *   Whether to begin each row with the delimiter (default: `true`).\n *\n *   > 👉 **Note**: please don’t use this: it could create fragile structures\n *   > that aren’t understandable to some markdown parsers.\n *\n *   When `true`, there are starting delimiters:\n *\n *   ```markdown\n *   | Alpha | B     |\n *   | ----- | ----- |\n *   | C     | Delta |\n *   ```\n *\n *   When `false`, there are no starting delimiters:\n *\n *   ```markdown\n *   Alpha | B     |\n *   ----- | ----- |\n *   C     | Delta |\n *   ```\n * @property {boolean | null | undefined} [padding=true]\n *   Whether to add a space of padding between delimiters and cells\n *   (default: `true`).\n *\n *   When `true`, there is padding:\n *\n *   ```markdown\n *   | Alpha | B     |\n *   | ----- | ----- |\n *   | C     | Delta |\n *   ```\n *\n *   When `false`, there is no padding:\n *\n *   ```markdown\n *   |Alpha|B    |\n *   |-----|-----|\n *   |C    |Delta|\n *   ```\n * @property {((value: string) => number) | null | undefined} [stringLength]\n *   Function to detect the length of table cell content (optional);\n *   this is used when aligning the delimiters (`|`) between table cells;\n *   full-width characters and emoji mess up delimiter alignment when viewing\n *   the markdown source;\n *   to fix this, you can pass this function,\n *   which receives the cell content and returns its “visible” size;\n *   note that what is and isn’t visible depends on where the text is displayed.\n *\n *   Without such a function, the following:\n *\n *   ```js\n *   markdownTable([\n *     ['Alpha', 'Bravo'],\n *     ['中文', 'Charlie'],\n *     ['👩‍❤️‍👩', 'Delta']\n *   ])\n *   ```\n *\n *   Yields:\n *\n *   ```markdown\n *   | Alpha | Bravo |\n *   | - | - |\n *   | 中文 | Charlie |\n *   | 👩‍❤️‍👩 | Delta |\n *   ```\n *\n *   With [`string-width`](https://github.com/sindresorhus/string-width):\n *\n *   ```js\n *   import stringWidth from 'string-width'\n *\n *   markdownTable(\n *     [\n *       ['Alpha', 'Bravo'],\n *       ['中文', 'Charlie'],\n *       ['👩‍❤️‍👩', 'Delta']\n *     ],\n *     {stringLength: stringWidth}\n *   )\n *   ```\n *\n *   Yields:\n *\n *   ```markdown\n *   | Alpha | Bravo   |\n *   | ----- | ------- |\n *   | 中文  | Charlie |\n *   | 👩‍❤️‍👩    | Delta   |\n *   ```\n */\n\n/**\n * @param {string} value\n *   Cell value.\n * @returns {number}\n *   Cell size.\n */\nfunction defaultStringLength(value) {\n  return value.length\n}\n\n/**\n * Generate a markdown\n * ([GFM](https://docs.github.com/en/github/writing-on-github/working-with-advanced-formatting/organizing-information-with-tables))\n * table.\n *\n * @param {ReadonlyArray<ReadonlyArray<string | null | undefined>>} table\n *   Table data (matrix of strings).\n * @param {Readonly<Options> | null | undefined} [options]\n *   Configuration (optional).\n * @returns {string}\n *   Result.\n */\nexport function markdownTable(table, options) {\n  const settings = options || {}\n  // To do: next major: change to spread.\n  const align = (settings.align || []).concat()\n  const stringLength = settings.stringLength || defaultStringLength\n  /** @type {Array<number>} Character codes as symbols for alignment per column. */\n  const alignments = []\n  /** @type {Array<Array<string>>} Cells per row. */\n  const cellMatrix = []\n  /** @type {Array<Array<number>>} Sizes of each cell per row. */\n  const sizeMatrix = []\n  /** @type {Array<number>} */\n  const longestCellByColumn = []\n  let mostCellsPerRow = 0\n  let rowIndex = -1\n\n  // This is a superfluous loop if we don’t align delimiters, but otherwise we’d\n  // do superfluous work when aligning, so optimize for aligning.\n  while (++rowIndex < table.length) {\n    /** @type {Array<string>} */\n    const row = []\n    /** @type {Array<number>} */\n    const sizes = []\n    let columnIndex = -1\n\n    if (table[rowIndex].length > mostCellsPerRow) {\n      mostCellsPerRow = table[rowIndex].length\n    }\n\n    while (++columnIndex < table[rowIndex].length) {\n      const cell = serialize(table[rowIndex][columnIndex])\n\n      if (settings.alignDelimiters !== false) {\n        const size = stringLength(cell)\n        sizes[columnIndex] = size\n\n        if (\n          longestCellByColumn[columnIndex] === undefined ||\n          size > longestCellByColumn[columnIndex]\n        ) {\n          longestCellByColumn[columnIndex] = size\n        }\n      }\n\n      row.push(cell)\n    }\n\n    cellMatrix[rowIndex] = row\n    sizeMatrix[rowIndex] = sizes\n  }\n\n  // Figure out which alignments to use.\n  let columnIndex = -1\n\n  if (typeof align === 'object' && 'length' in align) {\n    while (++columnIndex < mostCellsPerRow) {\n      alignments[columnIndex] = toAlignment(align[columnIndex])\n    }\n  } else {\n    const code = toAlignment(align)\n\n    while (++columnIndex < mostCellsPerRow) {\n      alignments[columnIndex] = code\n    }\n  }\n\n  // Inject the alignment row.\n  columnIndex = -1\n  /** @type {Array<string>} */\n  const row = []\n  /** @type {Array<number>} */\n  const sizes = []\n\n  while (++columnIndex < mostCellsPerRow) {\n    const code = alignments[columnIndex]\n    let before = ''\n    let after = ''\n\n    if (code === 99 /* `c` */) {\n      before = ':'\n      after = ':'\n    } else if (code === 108 /* `l` */) {\n      before = ':'\n    } else if (code === 114 /* `r` */) {\n      after = ':'\n    }\n\n    // There *must* be at least one hyphen-minus in each alignment cell.\n    let size =\n      settings.alignDelimiters === false\n        ? 1\n        : Math.max(\n            1,\n            longestCellByColumn[columnIndex] - before.length - after.length\n          )\n\n    const cell = before + '-'.repeat(size) + after\n\n    if (settings.alignDelimiters !== false) {\n      size = before.length + size + after.length\n\n      if (size > longestCellByColumn[columnIndex]) {\n        longestCellByColumn[columnIndex] = size\n      }\n\n      sizes[columnIndex] = size\n    }\n\n    row[columnIndex] = cell\n  }\n\n  // Inject the alignment row.\n  cellMatrix.splice(1, 0, row)\n  sizeMatrix.splice(1, 0, sizes)\n\n  rowIndex = -1\n  /** @type {Array<string>} */\n  const lines = []\n\n  while (++rowIndex < cellMatrix.length) {\n    const row = cellMatrix[rowIndex]\n    const sizes = sizeMatrix[rowIndex]\n    columnIndex = -1\n    /** @type {Array<string>} */\n    const line = []\n\n    while (++columnIndex < mostCellsPerRow) {\n      const cell = row[columnIndex] || ''\n      let before = ''\n      let after = ''\n\n      if (settings.alignDelimiters !== false) {\n        const size =\n          longestCellByColumn[columnIndex] - (sizes[columnIndex] || 0)\n        const code = alignments[columnIndex]\n\n        if (code === 114 /* `r` */) {\n          before = ' '.repeat(size)\n        } else if (code === 99 /* `c` */) {\n          if (size % 2) {\n            before = ' '.repeat(size / 2 + 0.5)\n            after = ' '.repeat(size / 2 - 0.5)\n          } else {\n            before = ' '.repeat(size / 2)\n            after = before\n          }\n        } else {\n          after = ' '.repeat(size)\n        }\n      }\n\n      if (settings.delimiterStart !== false && !columnIndex) {\n        line.push('|')\n      }\n\n      if (\n        settings.padding !== false &&\n        // Don’t add the opening space if we’re not aligning and the cell is\n        // empty: there will be a closing space.\n        !(settings.alignDelimiters === false && cell === '') &&\n        (settings.delimiterStart !== false || columnIndex)\n      ) {\n        line.push(' ')\n      }\n\n      if (settings.alignDelimiters !== false) {\n        line.push(before)\n      }\n\n      line.push(cell)\n\n      if (settings.alignDelimiters !== false) {\n        line.push(after)\n      }\n\n      if (settings.padding !== false) {\n        line.push(' ')\n      }\n\n      if (\n        settings.delimiterEnd !== false ||\n        columnIndex !== mostCellsPerRow - 1\n      ) {\n        line.push('|')\n      }\n    }\n\n    lines.push(\n      settings.delimiterEnd === false\n        ? line.join('').replace(/ +$/, '')\n        : line.join('')\n    )\n  }\n\n  return lines.join('\\n')\n}\n\n/**\n * @param {string | null | undefined} [value]\n *   Value to serialize.\n * @returns {string}\n *   Result.\n */\nfunction serialize(value) {\n  return value === null || value === undefined ? '' : String(value)\n}\n\n/**\n * @param {string | null | undefined} value\n *   Value.\n * @returns {number}\n *   Alignment.\n */\nfunction toAlignment(value) {\n  const code = typeof value === 'string' ? value.codePointAt(0) : 0\n\n  return code === 67 /* `C` */ || code === 99 /* `c` */\n    ? 99 /* `c` */\n    : code === 76 /* `L` */ || code === 108 /* `l` */\n      ? 108 /* `l` */\n      : code === 82 /* `R` */ || code === 114 /* `r` */\n        ? 114 /* `r` */\n        : 0\n}\n","/**\n * @import {Blockquote, Parents} from 'mdast'\n * @import {Info, Map, State} from 'mdast-util-to-markdown'\n */\n\n/**\n * @param {Blockquote} node\n * @param {Parents | undefined} _\n * @param {State} state\n * @param {Info} info\n * @returns {string}\n */\nexport function blockquote(node, _, state, info) {\n  const exit = state.enter('blockquote')\n  const tracker = state.createTracker(info)\n  tracker.move('> ')\n  tracker.shift(2)\n  const value = state.indentLines(\n    state.containerFlow(node, tracker.current()),\n    map\n  )\n  exit()\n  return value\n}\n\n/** @type {Map} */\nfunction map(line, _, blank) {\n  return '>' + (blank ? '' : ' ') + line\n}\n","/**\n * @import {ConstructName, Unsafe} from 'mdast-util-to-markdown'\n */\n\n/**\n * @param {Array<ConstructName>} stack\n * @param {Unsafe} pattern\n * @returns {boolean}\n */\nexport function patternInScope(stack, pattern) {\n  return (\n    listInScope(stack, pattern.inConstruct, true) &&\n    !listInScope(stack, pattern.notInConstruct, false)\n  )\n}\n\n/**\n * @param {Array<ConstructName>} stack\n * @param {Unsafe['inConstruct']} list\n * @param {boolean} none\n * @returns {boolean}\n */\nfunction listInScope(stack, list, none) {\n  if (typeof list === 'string') {\n    list = [list]\n  }\n\n  if (!list || list.length === 0) {\n    return none\n  }\n\n  let index = -1\n\n  while (++index < list.length) {\n    if (stack.includes(list[index])) {\n      return true\n    }\n  }\n\n  return false\n}\n","/**\n * @import {Break, Parents} from 'mdast'\n * @import {Info, State} from 'mdast-util-to-markdown'\n */\n\nimport {patternInScope} from '../util/pattern-in-scope.js'\n\n/**\n * @param {Break} _\n * @param {Parents | undefined} _1\n * @param {State} state\n * @param {Info} info\n * @returns {string}\n */\nexport function hardBreak(_, _1, state, info) {\n  let index = -1\n\n  while (++index < state.unsafe.length) {\n    // If we can’t put eols in this construct (setext headings, tables), use a\n    // space instead.\n    if (\n      state.unsafe[index].character === '\\n' &&\n      patternInScope(state.stack, state.unsafe[index])\n    ) {\n      return /[ \\t]/.test(info.before) ? '' : ' '\n    }\n  }\n\n  return '\\\\\\n'\n}\n","/**\n * Get the count of the longest repeating streak of `substring` in `value`.\n *\n * @param {string} value\n *   Content to search in.\n * @param {string} substring\n *   Substring to look for, typically one character.\n * @returns {number}\n *   Count of most frequent adjacent `substring`s in `value`.\n */\nexport function longestStreak(value, substring) {\n  const source = String(value)\n  let index = source.indexOf(substring)\n  let expected = index\n  let count = 0\n  let max = 0\n\n  if (typeof substring !== 'string') {\n    throw new TypeError('Expected substring')\n  }\n\n  while (index !== -1) {\n    if (index === expected) {\n      if (++count > max) {\n        max = count\n      }\n    } else {\n      count = 1\n    }\n\n    expected = index + substring.length\n    index = source.indexOf(substring, expected)\n  }\n\n  return max\n}\n","/**\n * @import {State} from 'mdast-util-to-markdown'\n * @import {Code} from 'mdast'\n */\n\n/**\n * @param {Code} node\n * @param {State} state\n * @returns {boolean}\n */\nexport function formatCodeAsIndented(node, state) {\n  return Boolean(\n    state.options.fences === false &&\n      node.value &&\n      // If there’s no info…\n      !node.lang &&\n      // And there’s a non-whitespace character…\n      /[^ \\r\\n]/.test(node.value) &&\n      // And the value doesn’t start or end in a blank…\n      !/^[\\t ]*(?:[\\r\\n]|$)|(?:^|[\\r\\n])[\\t ]*$/.test(node.value)\n  )\n}\n","/**\n * @import {Options, State} from 'mdast-util-to-markdown'\n */\n\n/**\n * @param {State} state\n * @returns {Exclude<Options['fence'], null | undefined>}\n */\nexport function checkFence(state) {\n  const marker = state.options.fence || '`'\n\n  if (marker !== '`' && marker !== '~') {\n    throw new Error(\n      'Cannot serialize code with `' +\n        marker +\n        '` for `options.fence`, expected `` ` `` or `~`'\n    )\n  }\n\n  return marker\n}\n","/**\n * @import {Info, Map, State} from 'mdast-util-to-markdown'\n * @import {Code, Parents} from 'mdast'\n */\n\nimport {longestStreak} from 'longest-streak'\nimport {formatCodeAsIndented} from '../util/format-code-as-indented.js'\nimport {checkFence} from '../util/check-fence.js'\n\n/**\n * @param {Code} node\n * @param {Parents | undefined} _\n * @param {State} state\n * @param {Info} info\n * @returns {string}\n */\nexport function code(node, _, state, info) {\n  const marker = checkFence(state)\n  const raw = node.value || ''\n  const suffix = marker === '`' ? 'GraveAccent' : 'Tilde'\n\n  if (formatCodeAsIndented(node, state)) {\n    const exit = state.enter('codeIndented')\n    const value = state.indentLines(raw, map)\n    exit()\n    return value\n  }\n\n  const tracker = state.createTracker(info)\n  const sequence = marker.repeat(Math.max(longestStreak(raw, marker) + 1, 3))\n  const exit = state.enter('codeFenced')\n  let value = tracker.move(sequence)\n\n  if (node.lang) {\n    const subexit = state.enter(`codeFencedLang${suffix}`)\n    value += tracker.move(\n      state.safe(node.lang, {\n        before: value,\n        after: ' ',\n        encode: ['`'],\n        ...tracker.current()\n      })\n    )\n    subexit()\n  }\n\n  if (node.lang && node.meta) {\n    const subexit = state.enter(`codeFencedMeta${suffix}`)\n    value += tracker.move(' ')\n    value += tracker.move(\n      state.safe(node.meta, {\n        before: value,\n        after: '\\n',\n        encode: ['`'],\n        ...tracker.current()\n      })\n    )\n    subexit()\n  }\n\n  value += tracker.move('\\n')\n\n  if (raw) {\n    value += tracker.move(raw + '\\n')\n  }\n\n  value += tracker.move(sequence)\n  exit()\n  return value\n}\n\n/** @type {Map} */\nfunction map(line, _, blank) {\n  return (blank ? '' : '    ') + line\n}\n","/**\n * @import {Options, State} from 'mdast-util-to-markdown'\n */\n\n/**\n * @param {State} state\n * @returns {Exclude<Options['quote'], null | undefined>}\n */\nexport function checkQuote(state) {\n  const marker = state.options.quote || '\"'\n\n  if (marker !== '\"' && marker !== \"'\") {\n    throw new Error(\n      'Cannot serialize title with `' +\n        marker +\n        '` for `options.quote`, expected `\"`, or `\\'`'\n    )\n  }\n\n  return marker\n}\n","/**\n * @import {Info, State} from 'mdast-util-to-markdown'\n * @import {Definition, Parents} from 'mdast'\n */\n\nimport {checkQuote} from '../util/check-quote.js'\n\n/**\n * @param {Definition} node\n * @param {Parents | undefined} _\n * @param {State} state\n * @param {Info} info\n * @returns {string}\n */\nexport function definition(node, _, state, info) {\n  const quote = checkQuote(state)\n  const suffix = quote === '\"' ? 'Quote' : 'Apostrophe'\n  const exit = state.enter('definition')\n  let subexit = state.enter('label')\n  const tracker = state.createTracker(info)\n  let value = tracker.move('[')\n  value += tracker.move(\n    state.safe(state.associationId(node), {\n      before: value,\n      after: ']',\n      ...tracker.current()\n    })\n  )\n  value += tracker.move(']: ')\n\n  subexit()\n\n  if (\n    // If there’s no url, or…\n    !node.url ||\n    // If there are control characters or whitespace.\n    /[\\0- \\u007F]/.test(node.url)\n  ) {\n    subexit = state.enter('destinationLiteral')\n    value += tracker.move('<')\n    value += tracker.move(\n      state.safe(node.url, {before: value, after: '>', ...tracker.current()})\n    )\n    value += tracker.move('>')\n  } else {\n    // No whitespace, raw is prettier.\n    subexit = state.enter('destinationRaw')\n    value += tracker.move(\n      state.safe(node.url, {\n        before: value,\n        after: node.title ? ' ' : '\\n',\n        ...tracker.current()\n      })\n    )\n  }\n\n  subexit()\n\n  if (node.title) {\n    subexit = state.enter(`title${suffix}`)\n    value += tracker.move(' ' + quote)\n    value += tracker.move(\n      state.safe(node.title, {\n        before: value,\n        after: quote,\n        ...tracker.current()\n      })\n    )\n    value += tracker.move(quote)\n    subexit()\n  }\n\n  exit()\n\n  return value\n}\n","/**\n * @import {Options, State} from 'mdast-util-to-markdown'\n */\n\n/**\n * @param {State} state\n * @returns {Exclude<Options['emphasis'], null | undefined>}\n */\nexport function checkEmphasis(state) {\n  const marker = state.options.emphasis || '*'\n\n  if (marker !== '*' && marker !== '_') {\n    throw new Error(\n      'Cannot serialize emphasis with `' +\n        marker +\n        '` for `options.emphasis`, expected `*`, or `_`'\n    )\n  }\n\n  return marker\n}\n","/**\n * Encode a code point as a character reference.\n *\n * @param {number} code\n *   Code point to encode.\n * @returns {string}\n *   Encoded character reference.\n */\nexport function encodeCharacterReference(code) {\n  return '&#x' + code.toString(16).toUpperCase() + ';'\n}\n","/**\n * @import {EncodeSides} from '../types.js'\n */\n\nimport {classifyCharacter} from 'micromark-util-classify-character'\n\n/**\n * Check whether to encode (as a character reference) the characters\n * surrounding an attention run.\n *\n * Which characters are around an attention run influence whether it works or\n * not.\n *\n * See <https://github.com/orgs/syntax-tree/discussions/60> for more info.\n * See this markdown in a particular renderer to see what works:\n *\n * ```markdown\n * |                         | A (letter inside) | B (punctuation inside) | C (whitespace inside) | D (nothing inside) |\n * | ----------------------- | ----------------- | ---------------------- | --------------------- | ------------------ |\n * | 1 (letter outside)      | x*y*z             | x*.*z                  | x* *z                 | x**z               |\n * | 2 (punctuation outside) | .*y*.             | .*.*.                  | .* *.                 | .**.               |\n * | 3 (whitespace outside)  | x *y* z           | x *.* z                | x * * z               | x ** z             |\n * | 4 (nothing outside)     | *x*               | *.*                    | * *                   | **                 |\n * ```\n *\n * @param {number} outside\n *   Code point on the outer side of the run.\n * @param {number} inside\n *   Code point on the inner side of the run.\n * @param {'*' | '_'} marker\n *   Marker of the run.\n *   Underscores are handled more strictly (they form less often) than\n *   asterisks.\n * @returns {EncodeSides}\n *   Whether to encode characters.\n */\n// Important: punctuation must never be encoded.\n// Punctuation is solely used by markdown constructs.\n// And by encoding itself.\n// Encoding them will break constructs or double encode things.\nexport function encodeInfo(outside, inside, marker) {\n  const outsideKind = classifyCharacter(outside)\n  const insideKind = classifyCharacter(inside)\n\n  // Letter outside:\n  if (outsideKind === undefined) {\n    return insideKind === undefined\n      ? // Letter inside:\n        // we have to encode *both* letters for `_` as it is looser.\n        // it already forms for `*` (and GFMs `~`).\n        marker === '_'\n        ? {inside: true, outside: true}\n        : {inside: false, outside: false}\n      : insideKind === 1\n        ? // Whitespace inside: encode both (letter, whitespace).\n          {inside: true, outside: true}\n        : // Punctuation inside: encode outer (letter)\n          {inside: false, outside: true}\n  }\n\n  // Whitespace outside:\n  if (outsideKind === 1) {\n    return insideKind === undefined\n      ? // Letter inside: already forms.\n        {inside: false, outside: false}\n      : insideKind === 1\n        ? // Whitespace inside: encode both (whitespace).\n          {inside: true, outside: true}\n        : // Punctuation inside: already forms.\n          {inside: false, outside: false}\n  }\n\n  // Punctuation outside:\n  return insideKind === undefined\n    ? // Letter inside: already forms.\n      {inside: false, outside: false}\n    : insideKind === 1\n      ? // Whitespace inside: encode inner (whitespace).\n        {inside: true, outside: false}\n      : // Punctuation inside: already forms.\n        {inside: false, outside: false}\n}\n","/**\n * @import {Info, State} from 'mdast-util-to-markdown'\n * @import {Emphasis, Parents} from 'mdast'\n */\n\nimport {checkEmphasis} from '../util/check-emphasis.js'\nimport {encodeCharacterReference} from '../util/encode-character-reference.js'\nimport {encodeInfo} from '../util/encode-info.js'\n\nemphasis.peek = emphasisPeek\n\n/**\n * @param {Emphasis} node\n * @param {Parents | undefined} _\n * @param {State} state\n * @param {Info} info\n * @returns {string}\n */\nexport function emphasis(node, _, state, info) {\n  const marker = checkEmphasis(state)\n  const exit = state.enter('emphasis')\n  const tracker = state.createTracker(info)\n  const before = tracker.move(marker)\n\n  let between = tracker.move(\n    state.containerPhrasing(node, {\n      after: marker,\n      before,\n      ...tracker.current()\n    })\n  )\n  const betweenHead = between.charCodeAt(0)\n  const open = encodeInfo(\n    info.before.charCodeAt(info.before.length - 1),\n    betweenHead,\n    marker\n  )\n\n  if (open.inside) {\n    between = encodeCharacterReference(betweenHead) + between.slice(1)\n  }\n\n  const betweenTail = between.charCodeAt(between.length - 1)\n  const close = encodeInfo(info.after.charCodeAt(0), betweenTail, marker)\n\n  if (close.inside) {\n    between = between.slice(0, -1) + encodeCharacterReference(betweenTail)\n  }\n\n  const after = tracker.move(marker)\n\n  exit()\n\n  state.attentionEncodeSurroundingInfo = {\n    after: close.outside,\n    before: open.outside\n  }\n  return before + between + after\n}\n\n/**\n * @param {Emphasis} _\n * @param {Parents | undefined} _1\n * @param {State} state\n * @returns {string}\n */\nfunction emphasisPeek(_, _1, state) {\n  return state.options.emphasis || '*'\n}\n","/**\n * @import {State} from 'mdast-util-to-markdown'\n * @import {Heading} from 'mdast'\n */\n\nimport {EXIT, visit} from 'unist-util-visit'\nimport {toString} from 'mdast-util-to-string'\n\n/**\n * @param {Heading} node\n * @param {State} state\n * @returns {boolean}\n */\nexport function formatHeadingAsSetext(node, state) {\n  let literalWithBreak = false\n\n  // Look for literals with a line break.\n  // Note that this also\n  visit(node, function (node) {\n    if (\n      ('value' in node && /\\r?\\n|\\r/.test(node.value)) ||\n      node.type === 'break'\n    ) {\n      literalWithBreak = true\n      return EXIT\n    }\n  })\n\n  return Boolean(\n    (!node.depth || node.depth < 3) &&\n      toString(node) &&\n      (state.options.setext || literalWithBreak)\n  )\n}\n","/**\n * @import {Info, State} from 'mdast-util-to-markdown'\n * @import {Heading, Parents} from 'mdast'\n */\n\nimport {encodeCharacterReference} from '../util/encode-character-reference.js'\nimport {formatHeadingAsSetext} from '../util/format-heading-as-setext.js'\n\n/**\n * @param {Heading} node\n * @param {Parents | undefined} _\n * @param {State} state\n * @param {Info} info\n * @returns {string}\n */\nexport function heading(node, _, state, info) {\n  const rank = Math.max(Math.min(6, node.depth || 1), 1)\n  const tracker = state.createTracker(info)\n\n  if (formatHeadingAsSetext(node, state)) {\n    const exit = state.enter('headingSetext')\n    const subexit = state.enter('phrasing')\n    const value = state.containerPhrasing(node, {\n      ...tracker.current(),\n      before: '\\n',\n      after: '\\n'\n    })\n    subexit()\n    exit()\n\n    return (\n      value +\n      '\\n' +\n      (rank === 1 ? '=' : '-').repeat(\n        // The whole size…\n        value.length -\n          // Minus the position of the character after the last EOL (or\n          // 0 if there is none)…\n          (Math.max(value.lastIndexOf('\\r'), value.lastIndexOf('\\n')) + 1)\n      )\n    )\n  }\n\n  const sequence = '#'.repeat(rank)\n  const exit = state.enter('headingAtx')\n  const subexit = state.enter('phrasing')\n\n  // Note: for proper tracking, we should reset the output positions when there\n  // is no content returned, because then the space is not output.\n  // Practically, in that case, there is no content, so it doesn’t matter that\n  // we’ve tracked one too many characters.\n  tracker.move(sequence + ' ')\n\n  let value = state.containerPhrasing(node, {\n    before: '# ',\n    after: '\\n',\n    ...tracker.current()\n  })\n\n  if (/^[\\t ]/.test(value)) {\n    // To do: what effect has the character reference on tracking?\n    value = encodeCharacterReference(value.charCodeAt(0)) + value.slice(1)\n  }\n\n  value = value ? sequence + ' ' + value : sequence\n\n  if (state.options.closeAtx) {\n    value += ' ' + sequence\n  }\n\n  subexit()\n  exit()\n\n  return value\n}\n","/**\n * @import {Html} from 'mdast'\n */\n\nhtml.peek = htmlPeek\n\n/**\n * @param {Html} node\n * @returns {string}\n */\nexport function html(node) {\n  return node.value || ''\n}\n\n/**\n * @returns {string}\n */\nfunction htmlPeek() {\n  return '<'\n}\n","/**\n * @import {Info, State} from 'mdast-util-to-markdown'\n * @import {Image, Parents} from 'mdast'\n */\n\nimport {checkQuote} from '../util/check-quote.js'\n\nimage.peek = imagePeek\n\n/**\n * @param {Image} node\n * @param {Parents | undefined} _\n * @param {State} state\n * @param {Info} info\n * @returns {string}\n */\nexport function image(node, _, state, info) {\n  const quote = checkQuote(state)\n  const suffix = quote === '\"' ? 'Quote' : 'Apostrophe'\n  const exit = state.enter('image')\n  let subexit = state.enter('label')\n  const tracker = state.createTracker(info)\n  let value = tracker.move('![')\n  value += tracker.move(\n    state.safe(node.alt, {before: value, after: ']', ...tracker.current()})\n  )\n  value += tracker.move('](')\n\n  subexit()\n\n  if (\n    // If there’s no url but there is a title…\n    (!node.url && node.title) ||\n    // If there are control characters or whitespace.\n    /[\\0- \\u007F]/.test(node.url)\n  ) {\n    subexit = state.enter('destinationLiteral')\n    value += tracker.move('<')\n    value += tracker.move(\n      state.safe(node.url, {before: value, after: '>', ...tracker.current()})\n    )\n    value += tracker.move('>')\n  } else {\n    // No whitespace, raw is prettier.\n    subexit = state.enter('destinationRaw')\n    value += tracker.move(\n      state.safe(node.url, {\n        before: value,\n        after: node.title ? ' ' : ')',\n        ...tracker.current()\n      })\n    )\n  }\n\n  subexit()\n\n  if (node.title) {\n    subexit = state.enter(`title${suffix}`)\n    value += tracker.move(' ' + quote)\n    value += tracker.move(\n      state.safe(node.title, {\n        before: value,\n        after: quote,\n        ...tracker.current()\n      })\n    )\n    value += tracker.move(quote)\n    subexit()\n  }\n\n  value += tracker.move(')')\n  exit()\n\n  return value\n}\n\n/**\n * @returns {string}\n */\nfunction imagePeek() {\n  return '!'\n}\n","/**\n * @import {Info, State} from 'mdast-util-to-markdown'\n * @import {ImageReference, Parents} from 'mdast'\n */\n\nimageReference.peek = imageReferencePeek\n\n/**\n * @param {ImageReference} node\n * @param {Parents | undefined} _\n * @param {State} state\n * @param {Info} info\n * @returns {string}\n */\nexport function imageReference(node, _, state, info) {\n  const type = node.referenceType\n  const exit = state.enter('imageReference')\n  let subexit = state.enter('label')\n  const tracker = state.createTracker(info)\n  let value = tracker.move('![')\n  const alt = state.safe(node.alt, {\n    before: value,\n    after: ']',\n    ...tracker.current()\n  })\n  value += tracker.move(alt + '][')\n\n  subexit()\n  // Hide the fact that we’re in phrasing, because escapes don’t work.\n  const stack = state.stack\n  state.stack = []\n  subexit = state.enter('reference')\n  // Note: for proper tracking, we should reset the output positions when we end\n  // up making a `shortcut` reference, because then there is no brace output.\n  // Practically, in that case, there is no content, so it doesn’t matter that\n  // we’ve tracked one too many characters.\n  const reference = state.safe(state.associationId(node), {\n    before: value,\n    after: ']',\n    ...tracker.current()\n  })\n  subexit()\n  state.stack = stack\n  exit()\n\n  if (type === 'full' || !alt || alt !== reference) {\n    value += tracker.move(reference + ']')\n  } else if (type === 'shortcut') {\n    // Remove the unwanted `[`.\n    value = value.slice(0, -1)\n  } else {\n    value += tracker.move(']')\n  }\n\n  return value\n}\n\n/**\n * @returns {string}\n */\nfunction imageReferencePeek() {\n  return '!'\n}\n","/**\n * @import {State} from 'mdast-util-to-markdown'\n * @import {InlineCode, Parents} from 'mdast'\n */\n\ninlineCode.peek = inlineCodePeek\n\n/**\n * @param {InlineCode} node\n * @param {Parents | undefined} _\n * @param {State} state\n * @returns {string}\n */\nexport function inlineCode(node, _, state) {\n  let value = node.value || ''\n  let sequence = '`'\n  let index = -1\n\n  // If there is a single grave accent on its own in the code, use a fence of\n  // two.\n  // If there are two in a row, use one.\n  while (new RegExp('(^|[^`])' + sequence + '([^`]|$)').test(value)) {\n    sequence += '`'\n  }\n\n  // If this is not just spaces or eols (tabs don’t count), and either the\n  // first or last character are a space, eol, or tick, then pad with spaces.\n  if (\n    /[^ \\r\\n]/.test(value) &&\n    ((/^[ \\r\\n]/.test(value) && /[ \\r\\n]$/.test(value)) || /^`|`$/.test(value))\n  ) {\n    value = ' ' + value + ' '\n  }\n\n  // We have a potential problem: certain characters after eols could result in\n  // blocks being seen.\n  // For example, if someone injected the string `'\\n# b'`, then that would\n  // result in an ATX heading.\n  // We can’t escape characters in `inlineCode`, but because eols are\n  // transformed to spaces when going from markdown to HTML anyway, we can swap\n  // them out.\n  while (++index < state.unsafe.length) {\n    const pattern = state.unsafe[index]\n    const expression = state.compilePattern(pattern)\n    /** @type {RegExpExecArray | null} */\n    let match\n\n    // Only look for `atBreak`s.\n    // Btw: note that `atBreak` patterns will always start the regex at LF or\n    // CR.\n    if (!pattern.atBreak) continue\n\n    while ((match = expression.exec(value))) {\n      let position = match.index\n\n      // Support CRLF (patterns only look for one of the characters).\n      if (\n        value.charCodeAt(position) === 10 /* `\\n` */ &&\n        value.charCodeAt(position - 1) === 13 /* `\\r` */\n      ) {\n        position--\n      }\n\n      value = value.slice(0, position) + ' ' + value.slice(match.index + 1)\n    }\n  }\n\n  return sequence + value + sequence\n}\n\n/**\n * @returns {string}\n */\nfunction inlineCodePeek() {\n  return '`'\n}\n","/**\n * @import {State} from 'mdast-util-to-markdown'\n * @import {Link} from 'mdast'\n */\n\nimport {toString} from 'mdast-util-to-string'\n\n/**\n * @param {Link} node\n * @param {State} state\n * @returns {boolean}\n */\nexport function formatLinkAsAutolink(node, state) {\n  const raw = toString(node)\n\n  return Boolean(\n    !state.options.resourceLink &&\n      // If there’s a url…\n      node.url &&\n      // And there’s a no title…\n      !node.title &&\n      // And the content of `node` is a single text node…\n      node.children &&\n      node.children.length === 1 &&\n      node.children[0].type === 'text' &&\n      // And if the url is the same as the content…\n      (raw === node.url || 'mailto:' + raw === node.url) &&\n      // And that starts w/ a protocol…\n      /^[a-z][a-z+.-]+:/i.test(node.url) &&\n      // And that doesn’t contain ASCII control codes (character escapes and\n      // references don’t work), space, or angle brackets…\n      !/[\\0- <>\\u007F]/.test(node.url)\n  )\n}\n","/**\n * @import {Info, State} from 'mdast-util-to-markdown'\n * @import {Link, Parents} from 'mdast'\n * @import {Exit} from '../types.js'\n */\n\nimport {checkQuote} from '../util/check-quote.js'\nimport {formatLinkAsAutolink} from '../util/format-link-as-autolink.js'\n\nlink.peek = linkPeek\n\n/**\n * @param {Link} node\n * @param {Parents | undefined} _\n * @param {State} state\n * @param {Info} info\n * @returns {string}\n */\nexport function link(node, _, state, info) {\n  const quote = checkQuote(state)\n  const suffix = quote === '\"' ? 'Quote' : 'Apostrophe'\n  const tracker = state.createTracker(info)\n  /** @type {Exit} */\n  let exit\n  /** @type {Exit} */\n  let subexit\n\n  if (formatLinkAsAutolink(node, state)) {\n    // Hide the fact that we’re in phrasing, because escapes don’t work.\n    const stack = state.stack\n    state.stack = []\n    exit = state.enter('autolink')\n    let value = tracker.move('<')\n    value += tracker.move(\n      state.containerPhrasing(node, {\n        before: value,\n        after: '>',\n        ...tracker.current()\n      })\n    )\n    value += tracker.move('>')\n    exit()\n    state.stack = stack\n    return value\n  }\n\n  exit = state.enter('link')\n  subexit = state.enter('label')\n  let value = tracker.move('[')\n  value += tracker.move(\n    state.containerPhrasing(node, {\n      before: value,\n      after: '](',\n      ...tracker.current()\n    })\n  )\n  value += tracker.move('](')\n  subexit()\n\n  if (\n    // If there’s no url but there is a title…\n    (!node.url && node.title) ||\n    // If there are control characters or whitespace.\n    /[\\0- \\u007F]/.test(node.url)\n  ) {\n    subexit = state.enter('destinationLiteral')\n    value += tracker.move('<')\n    value += tracker.move(\n      state.safe(node.url, {before: value, after: '>', ...tracker.current()})\n    )\n    value += tracker.move('>')\n  } else {\n    // No whitespace, raw is prettier.\n    subexit = state.enter('destinationRaw')\n    value += tracker.move(\n      state.safe(node.url, {\n        before: value,\n        after: node.title ? ' ' : ')',\n        ...tracker.current()\n      })\n    )\n  }\n\n  subexit()\n\n  if (node.title) {\n    subexit = state.enter(`title${suffix}`)\n    value += tracker.move(' ' + quote)\n    value += tracker.move(\n      state.safe(node.title, {\n        before: value,\n        after: quote,\n        ...tracker.current()\n      })\n    )\n    value += tracker.move(quote)\n    subexit()\n  }\n\n  value += tracker.move(')')\n\n  exit()\n  return value\n}\n\n/**\n * @param {Link} node\n * @param {Parents | undefined} _\n * @param {State} state\n * @returns {string}\n */\nfunction linkPeek(node, _, state) {\n  return formatLinkAsAutolink(node, state) ? '<' : '['\n}\n","/**\n * @import {Info, State} from 'mdast-util-to-markdown'\n * @import {LinkReference, Parents} from 'mdast'\n */\n\nlinkReference.peek = linkReferencePeek\n\n/**\n * @param {LinkReference} node\n * @param {Parents | undefined} _\n * @param {State} state\n * @param {Info} info\n * @returns {string}\n */\nexport function linkReference(node, _, state, info) {\n  const type = node.referenceType\n  const exit = state.enter('linkReference')\n  let subexit = state.enter('label')\n  const tracker = state.createTracker(info)\n  let value = tracker.move('[')\n  const text = state.containerPhrasing(node, {\n    before: value,\n    after: ']',\n    ...tracker.current()\n  })\n  value += tracker.move(text + '][')\n\n  subexit()\n  // Hide the fact that we’re in phrasing, because escapes don’t work.\n  const stack = state.stack\n  state.stack = []\n  subexit = state.enter('reference')\n  // Note: for proper tracking, we should reset the output positions when we end\n  // up making a `shortcut` reference, because then there is no brace output.\n  // Practically, in that case, there is no content, so it doesn’t matter that\n  // we’ve tracked one too many characters.\n  const reference = state.safe(state.associationId(node), {\n    before: value,\n    after: ']',\n    ...tracker.current()\n  })\n  subexit()\n  state.stack = stack\n  exit()\n\n  if (type === 'full' || !text || text !== reference) {\n    value += tracker.move(reference + ']')\n  } else if (type === 'shortcut') {\n    // Remove the unwanted `[`.\n    value = value.slice(0, -1)\n  } else {\n    value += tracker.move(']')\n  }\n\n  return value\n}\n\n/**\n * @returns {string}\n */\nfunction linkReferencePeek() {\n  return '['\n}\n","/**\n * @import {Options, State} from 'mdast-util-to-markdown'\n */\n\n/**\n * @param {State} state\n * @returns {Exclude<Options['bullet'], null | undefined>}\n */\nexport function checkBullet(state) {\n  const marker = state.options.bullet || '*'\n\n  if (marker !== '*' && marker !== '+' && marker !== '-') {\n    throw new Error(\n      'Cannot serialize items with `' +\n        marker +\n        '` for `options.bullet`, expected `*`, `+`, or `-`'\n    )\n  }\n\n  return marker\n}\n","/**\n * @import {Options, State} from 'mdast-util-to-markdown'\n */\n\nimport {checkBullet} from './check-bullet.js'\n\n/**\n * @param {State} state\n * @returns {Exclude<Options['bullet'], null | undefined>}\n */\nexport function checkBulletOther(state) {\n  const bullet = checkBullet(state)\n  const bulletOther = state.options.bulletOther\n\n  if (!bulletOther) {\n    return bullet === '*' ? '-' : '*'\n  }\n\n  if (bulletOther !== '*' && bulletOther !== '+' && bulletOther !== '-') {\n    throw new Error(\n      'Cannot serialize items with `' +\n        bulletOther +\n        '` for `options.bulletOther`, expected `*`, `+`, or `-`'\n    )\n  }\n\n  if (bulletOther === bullet) {\n    throw new Error(\n      'Expected `bullet` (`' +\n        bullet +\n        '`) and `bulletOther` (`' +\n        bulletOther +\n        '`) to be different'\n    )\n  }\n\n  return bulletOther\n}\n","/**\n * @import {Options, State} from 'mdast-util-to-markdown'\n */\n\n/**\n * @param {State} state\n * @returns {Exclude<Options['bulletOrdered'], null | undefined>}\n */\nexport function checkBulletOrdered(state) {\n  const marker = state.options.bulletOrdered || '.'\n\n  if (marker !== '.' && marker !== ')') {\n    throw new Error(\n      'Cannot serialize items with `' +\n        marker +\n        '` for `options.bulletOrdered`, expected `.` or `)`'\n    )\n  }\n\n  return marker\n}\n","/**\n * @import {Options, State} from 'mdast-util-to-markdown'\n */\n\n/**\n * @param {State} state\n * @returns {Exclude<Options['rule'], null | undefined>}\n */\nexport function checkRule(state) {\n  const marker = state.options.rule || '*'\n\n  if (marker !== '*' && marker !== '-' && marker !== '_') {\n    throw new Error(\n      'Cannot serialize rules with `' +\n        marker +\n        '` for `options.rule`, expected `*`, `-`, or `_`'\n    )\n  }\n\n  return marker\n}\n","/**\n * @import {Info, State} from 'mdast-util-to-markdown'\n * @import {List, Parents} from 'mdast'\n */\n\nimport {checkBullet} from '../util/check-bullet.js'\nimport {checkBulletOther} from '../util/check-bullet-other.js'\nimport {checkBulletOrdered} from '../util/check-bullet-ordered.js'\nimport {checkRule} from '../util/check-rule.js'\n\n/**\n * @param {List} node\n * @param {Parents | undefined} parent\n * @param {State} state\n * @param {Info} info\n * @returns {string}\n */\nexport function list(node, parent, state, info) {\n  const exit = state.enter('list')\n  const bulletCurrent = state.bulletCurrent\n  /** @type {string} */\n  let bullet = node.ordered ? checkBulletOrdered(state) : checkBullet(state)\n  /** @type {string} */\n  const bulletOther = node.ordered\n    ? bullet === '.'\n      ? ')'\n      : '.'\n    : checkBulletOther(state)\n  let useDifferentMarker =\n    parent && state.bulletLastUsed ? bullet === state.bulletLastUsed : false\n\n  if (!node.ordered) {\n    const firstListItem = node.children ? node.children[0] : undefined\n\n    // If there’s an empty first list item directly in two list items,\n    // we have to use a different bullet:\n    //\n    // ```markdown\n    // * - *\n    // ```\n    //\n    // …because otherwise it would become one big thematic break.\n    if (\n      // Bullet could be used as a thematic break marker:\n      (bullet === '*' || bullet === '-') &&\n      // Empty first list item:\n      firstListItem &&\n      (!firstListItem.children || !firstListItem.children[0]) &&\n      // Directly in two other list items:\n      state.stack[state.stack.length - 1] === 'list' &&\n      state.stack[state.stack.length - 2] === 'listItem' &&\n      state.stack[state.stack.length - 3] === 'list' &&\n      state.stack[state.stack.length - 4] === 'listItem' &&\n      // That are each the first child.\n      state.indexStack[state.indexStack.length - 1] === 0 &&\n      state.indexStack[state.indexStack.length - 2] === 0 &&\n      state.indexStack[state.indexStack.length - 3] === 0\n    ) {\n      useDifferentMarker = true\n    }\n\n    // If there’s a thematic break at the start of the first list item,\n    // we have to use a different bullet:\n    //\n    // ```markdown\n    // * ---\n    // ```\n    //\n    // …because otherwise it would become one big thematic break.\n    if (checkRule(state) === bullet && firstListItem) {\n      let index = -1\n\n      while (++index < node.children.length) {\n        const item = node.children[index]\n\n        if (\n          item &&\n          item.type === 'listItem' &&\n          item.children &&\n          item.children[0] &&\n          item.children[0].type === 'thematicBreak'\n        ) {\n          useDifferentMarker = true\n          break\n        }\n      }\n    }\n  }\n\n  if (useDifferentMarker) {\n    bullet = bulletOther\n  }\n\n  state.bulletCurrent = bullet\n  const value = state.containerFlow(node, info)\n  state.bulletLastUsed = bullet\n  state.bulletCurrent = bulletCurrent\n  exit()\n  return value\n}\n","/**\n * @import {Options, State} from 'mdast-util-to-markdown'\n */\n\n/**\n * @param {State} state\n * @returns {Exclude<Options['listItemIndent'], null | undefined>}\n */\nexport function checkListItemIndent(state) {\n  const style = state.options.listItemIndent || 'one'\n\n  if (style !== 'tab' && style !== 'one' && style !== 'mixed') {\n    throw new Error(\n      'Cannot serialize items with `' +\n        style +\n        '` for `options.listItemIndent`, expected `tab`, `one`, or `mixed`'\n    )\n  }\n\n  return style\n}\n","/**\n * @import {Info, Map, State} from 'mdast-util-to-markdown'\n * @import {ListItem, Parents} from 'mdast'\n */\n\nimport {checkBullet} from '../util/check-bullet.js'\nimport {checkListItemIndent} from '../util/check-list-item-indent.js'\n\n/**\n * @param {ListItem} node\n * @param {Parents | undefined} parent\n * @param {State} state\n * @param {Info} info\n * @returns {string}\n */\nexport function listItem(node, parent, state, info) {\n  const listItemIndent = checkListItemIndent(state)\n  let bullet = state.bulletCurrent || checkBullet(state)\n\n  // Add the marker value for ordered lists.\n  if (parent && parent.type === 'list' && parent.ordered) {\n    bullet =\n      (typeof parent.start === 'number' && parent.start > -1\n        ? parent.start\n        : 1) +\n      (state.options.incrementListMarker === false\n        ? 0\n        : parent.children.indexOf(node)) +\n      bullet\n  }\n\n  let size = bullet.length + 1\n\n  if (\n    listItemIndent === 'tab' ||\n    (listItemIndent === 'mixed' &&\n      ((parent && parent.type === 'list' && parent.spread) || node.spread))\n  ) {\n    size = Math.ceil(size / 4) * 4\n  }\n\n  const tracker = state.createTracker(info)\n  tracker.move(bullet + ' '.repeat(size - bullet.length))\n  tracker.shift(size)\n  const exit = state.enter('listItem')\n  const value = state.indentLines(\n    state.containerFlow(node, tracker.current()),\n    map\n  )\n  exit()\n\n  return value\n\n  /** @type {Map} */\n  function map(line, index, blank) {\n    if (index) {\n      return (blank ? '' : ' '.repeat(size)) + line\n    }\n\n    return (blank ? bullet : bullet + ' '.repeat(size - bullet.length)) + line\n  }\n}\n","/**\n * @import {Info, State} from 'mdast-util-to-markdown'\n * @import {Paragraph, Parents} from 'mdast'\n */\n\n/**\n * @param {Paragraph} node\n * @param {Parents | undefined} _\n * @param {State} state\n * @param {Info} info\n * @returns {string}\n */\nexport function paragraph(node, _, state, info) {\n  const exit = state.enter('paragraph')\n  const subexit = state.enter('phrasing')\n  const value = state.containerPhrasing(node, info)\n  subexit()\n  exit()\n  return value\n}\n","/**\n * @typedef {import('mdast').Html} Html\n * @typedef {import('mdast').PhrasingContent} PhrasingContent\n */\n\nimport {convert} from 'unist-util-is'\n\n/**\n * Check if the given value is *phrasing content*.\n *\n * > 👉 **Note**: Excludes `html`, which can be both phrasing or flow.\n *\n * @param node\n *   Thing to check, typically `Node`.\n * @returns\n *   Whether `value` is phrasing content.\n */\n\nexport const phrasing =\n  /** @type {(node?: unknown) => node is Exclude<PhrasingContent, Html>} */\n  (\n    convert([\n      'break',\n      'delete',\n      'emphasis',\n      // To do: next major: removed since footnotes were added to GFM.\n      'footnote',\n      'footnoteReference',\n      'image',\n      'imageReference',\n      'inlineCode',\n      // Enabled by `mdast-util-math`:\n      'inlineMath',\n      'link',\n      'linkReference',\n      // Enabled by `mdast-util-mdx`:\n      'mdxJsxTextElement',\n      // Enabled by `mdast-util-mdx`:\n      'mdxTextExpression',\n      'strong',\n      'text',\n      // Enabled by `mdast-util-directive`:\n      'textDirective'\n    ])\n  )\n","/**\n * @import {Info, State} from 'mdast-util-to-markdown'\n * @import {Parents, Root} from 'mdast'\n */\n\nimport {phrasing} from 'mdast-util-phrasing'\n\n/**\n * @param {Root} node\n * @param {Parents | undefined} _\n * @param {State} state\n * @param {Info} info\n * @returns {string}\n */\nexport function root(node, _, state, info) {\n  // Note: `html` nodes are ambiguous.\n  const hasPhrasing = node.children.some(function (d) {\n    return phrasing(d)\n  })\n\n  const container = hasPhrasing ? state.containerPhrasing : state.containerFlow\n  return container.call(state, node, info)\n}\n","/**\n * @import {Options, State} from 'mdast-util-to-markdown'\n */\n\n/**\n * @param {State} state\n * @returns {Exclude<Options['strong'], null | undefined>}\n */\nexport function checkStrong(state) {\n  const marker = state.options.strong || '*'\n\n  if (marker !== '*' && marker !== '_') {\n    throw new Error(\n      'Cannot serialize strong with `' +\n        marker +\n        '` for `options.strong`, expected `*`, or `_`'\n    )\n  }\n\n  return marker\n}\n","/**\n * @import {Info, State} from 'mdast-util-to-markdown'\n * @import {Parents, Strong} from 'mdast'\n */\n\nimport {checkStrong} from '../util/check-strong.js'\nimport {encodeCharacterReference} from '../util/encode-character-reference.js'\nimport {encodeInfo} from '../util/encode-info.js'\n\nstrong.peek = strongPeek\n\n/**\n * @param {Strong} node\n * @param {Parents | undefined} _\n * @param {State} state\n * @param {Info} info\n * @returns {string}\n */\nexport function strong(node, _, state, info) {\n  const marker = checkStrong(state)\n  const exit = state.enter('strong')\n  const tracker = state.createTracker(info)\n  const before = tracker.move(marker + marker)\n\n  let between = tracker.move(\n    state.containerPhrasing(node, {\n      after: marker,\n      before,\n      ...tracker.current()\n    })\n  )\n  const betweenHead = between.charCodeAt(0)\n  const open = encodeInfo(\n    info.before.charCodeAt(info.before.length - 1),\n    betweenHead,\n    marker\n  )\n\n  if (open.inside) {\n    between = encodeCharacterReference(betweenHead) + between.slice(1)\n  }\n\n  const betweenTail = between.charCodeAt(between.length - 1)\n  const close = encodeInfo(info.after.charCodeAt(0), betweenTail, marker)\n\n  if (close.inside) {\n    between = between.slice(0, -1) + encodeCharacterReference(betweenTail)\n  }\n\n  const after = tracker.move(marker + marker)\n\n  exit()\n\n  state.attentionEncodeSurroundingInfo = {\n    after: close.outside,\n    before: open.outside\n  }\n  return before + between + after\n}\n\n/**\n * @param {Strong} _\n * @param {Parents | undefined} _1\n * @param {State} state\n * @returns {string}\n */\nfunction strongPeek(_, _1, state) {\n  return state.options.strong || '*'\n}\n","/**\n * @import {Info, State} from 'mdast-util-to-markdown'\n * @import {Parents, Text} from 'mdast'\n */\n\n/**\n * @param {Text} node\n * @param {Parents | undefined} _\n * @param {State} state\n * @param {Info} info\n * @returns {string}\n */\nexport function text(node, _, state, info) {\n  return state.safe(node.value, info)\n}\n","/**\n * @import {Options, State} from 'mdast-util-to-markdown'\n */\n\n/**\n * @param {State} state\n * @returns {Exclude<Options['ruleRepetition'], null | undefined>}\n */\nexport function checkRuleRepetition(state) {\n  const repetition = state.options.ruleRepetition || 3\n\n  if (repetition < 3) {\n    throw new Error(\n      'Cannot serialize rules with repetition `' +\n        repetition +\n        '` for `options.ruleRepetition`, expected `3` or more'\n    )\n  }\n\n  return repetition\n}\n","/**\n * @import {State} from 'mdast-util-to-markdown'\n * @import {Parents, ThematicBreak} from 'mdast'\n */\n\nimport {checkRuleRepetition} from '../util/check-rule-repetition.js'\nimport {checkRule} from '../util/check-rule.js'\n\n/**\n * @param {ThematicBreak} _\n * @param {Parents | undefined} _1\n * @param {State} state\n * @returns {string}\n */\nexport function thematicBreak(_, _1, state) {\n  const value = (\n    checkRule(state) + (state.options.ruleSpaces ? ' ' : '')\n  ).repeat(checkRuleRepetition(state))\n\n  return state.options.ruleSpaces ? value.slice(0, -1) : value\n}\n","import {blockquote} from './blockquote.js'\nimport {hardBreak} from './break.js'\nimport {code} from './code.js'\nimport {definition} from './definition.js'\nimport {emphasis} from './emphasis.js'\nimport {heading} from './heading.js'\nimport {html} from './html.js'\nimport {image} from './image.js'\nimport {imageReference} from './image-reference.js'\nimport {inlineCode} from './inline-code.js'\nimport {link} from './link.js'\nimport {linkReference} from './link-reference.js'\nimport {list} from './list.js'\nimport {listItem} from './list-item.js'\nimport {paragraph} from './paragraph.js'\nimport {root} from './root.js'\nimport {strong} from './strong.js'\nimport {text} from './text.js'\nimport {thematicBreak} from './thematic-break.js'\n\n/**\n * Default (CommonMark) handlers.\n */\nexport const handle = {\n  blockquote,\n  break: hardBreak,\n  code,\n  definition,\n  emphasis,\n  hardBreak,\n  heading,\n  html,\n  image,\n  imageReference,\n  inlineCode,\n  link,\n  linkReference,\n  list,\n  listItem,\n  paragraph,\n  root,\n  strong,\n  text,\n  thematicBreak\n}\n","/**\n * @typedef {import('mdast').InlineCode} InlineCode\n * @typedef {import('mdast').Table} Table\n * @typedef {import('mdast').TableCell} TableCell\n * @typedef {import('mdast').TableRow} TableRow\n *\n * @typedef {import('markdown-table').Options} MarkdownTableOptions\n *\n * @typedef {import('mdast-util-from-markdown').CompileContext} CompileContext\n * @typedef {import('mdast-util-from-markdown').Extension} FromMarkdownExtension\n * @typedef {import('mdast-util-from-markdown').Handle} FromMarkdownHandle\n *\n * @typedef {import('mdast-util-to-markdown').Options} ToMarkdownExtension\n * @typedef {import('mdast-util-to-markdown').Handle} ToMarkdownHandle\n * @typedef {import('mdast-util-to-markdown').State} State\n * @typedef {import('mdast-util-to-markdown').Info} Info\n */\n\n/**\n * @typedef Options\n *   Configuration.\n * @property {boolean | null | undefined} [tableCellPadding=true]\n *   Whether to add a space of padding between delimiters and cells (default:\n *   `true`).\n * @property {boolean | null | undefined} [tablePipeAlign=true]\n *   Whether to align the delimiters (default: `true`).\n * @property {MarkdownTableOptions['stringLength'] | null | undefined} [stringLength]\n *   Function to detect the length of table cell content, used when aligning\n *   the delimiters between cells (optional).\n */\n\nimport {ok as assert} from 'devlop'\nimport {markdownTable} from 'markdown-table'\nimport {defaultHandlers} from 'mdast-util-to-markdown'\n\n/**\n * Create an extension for `mdast-util-from-markdown` to enable GFM tables in\n * markdown.\n *\n * @returns {FromMarkdownExtension}\n *   Extension for `mdast-util-from-markdown` to enable GFM tables.\n */\nexport function gfmTableFromMarkdown() {\n  return {\n    enter: {\n      table: enterTable,\n      tableData: enterCell,\n      tableHeader: enterCell,\n      tableRow: enterRow\n    },\n    exit: {\n      codeText: exitCodeText,\n      table: exitTable,\n      tableData: exit,\n      tableHeader: exit,\n      tableRow: exit\n    }\n  }\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction enterTable(token) {\n  const align = token._align\n  assert(align, 'expected `_align` on table')\n  this.enter(\n    {\n      type: 'table',\n      align: align.map(function (d) {\n        return d === 'none' ? null : d\n      }),\n      children: []\n    },\n    token\n  )\n  this.data.inTable = true\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction exitTable(token) {\n  this.exit(token)\n  this.data.inTable = undefined\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction enterRow(token) {\n  this.enter({type: 'tableRow', children: []}, token)\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction exit(token) {\n  this.exit(token)\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction enterCell(token) {\n  this.enter({type: 'tableCell', children: []}, token)\n}\n\n// Overwrite the default code text data handler to unescape escaped pipes when\n// they are in tables.\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction exitCodeText(token) {\n  let value = this.resume()\n\n  if (this.data.inTable) {\n    value = value.replace(/\\\\([\\\\|])/g, replace)\n  }\n\n  const node = this.stack[this.stack.length - 1]\n  assert(node.type === 'inlineCode')\n  node.value = value\n  this.exit(token)\n}\n\n/**\n * @param {string} $0\n * @param {string} $1\n * @returns {string}\n */\nfunction replace($0, $1) {\n  // Pipes work, backslashes don’t (but can’t escape pipes).\n  return $1 === '|' ? $1 : $0\n}\n\n/**\n * Create an extension for `mdast-util-to-markdown` to enable GFM tables in\n * markdown.\n *\n * @param {Options | null | undefined} [options]\n *   Configuration.\n * @returns {ToMarkdownExtension}\n *   Extension for `mdast-util-to-markdown` to enable GFM tables.\n */\nexport function gfmTableToMarkdown(options) {\n  const settings = options || {}\n  const padding = settings.tableCellPadding\n  const alignDelimiters = settings.tablePipeAlign\n  const stringLength = settings.stringLength\n  const around = padding ? ' ' : '|'\n\n  return {\n    unsafe: [\n      {character: '\\r', inConstruct: 'tableCell'},\n      {character: '\\n', inConstruct: 'tableCell'},\n      // A pipe, when followed by a tab or space (padding), or a dash or colon\n      // (unpadded delimiter row), could result in a table.\n      {atBreak: true, character: '|', after: '[\\t :-]'},\n      // A pipe in a cell must be encoded.\n      {character: '|', inConstruct: 'tableCell'},\n      // A colon must be followed by a dash, in which case it could start a\n      // delimiter row.\n      {atBreak: true, character: ':', after: '-'},\n      // A delimiter row can also start with a dash, when followed by more\n      // dashes, a colon, or a pipe.\n      // This is a stricter version than the built in check for lists, thematic\n      // breaks, and setex heading underlines though:\n      // <https://github.com/syntax-tree/mdast-util-to-markdown/blob/51a2038/lib/unsafe.js#L57>\n      {atBreak: true, character: '-', after: '[:|-]'}\n    ],\n    handlers: {\n      inlineCode: inlineCodeWithTable,\n      table: handleTable,\n      tableCell: handleTableCell,\n      tableRow: handleTableRow\n    }\n  }\n\n  /**\n   * @type {ToMarkdownHandle}\n   * @param {Table} node\n   */\n  function handleTable(node, _, state, info) {\n    return serializeData(handleTableAsData(node, state, info), node.align)\n  }\n\n  /**\n   * This function isn’t really used normally, because we handle rows at the\n   * table level.\n   * But, if someone passes in a table row, this ensures we make somewhat sense.\n   *\n   * @type {ToMarkdownHandle}\n   * @param {TableRow} node\n   */\n  function handleTableRow(node, _, state, info) {\n    const row = handleTableRowAsData(node, state, info)\n    const value = serializeData([row])\n    // `markdown-table` will always add an align row\n    return value.slice(0, value.indexOf('\\n'))\n  }\n\n  /**\n   * @type {ToMarkdownHandle}\n   * @param {TableCell} node\n   */\n  function handleTableCell(node, _, state, info) {\n    const exit = state.enter('tableCell')\n    const subexit = state.enter('phrasing')\n    const value = state.containerPhrasing(node, {\n      ...info,\n      before: around,\n      after: around\n    })\n    subexit()\n    exit()\n    return value\n  }\n\n  /**\n   * @param {Array<Array<string>>} matrix\n   * @param {Array<string | null | undefined> | null | undefined} [align]\n   */\n  function serializeData(matrix, align) {\n    return markdownTable(matrix, {\n      align,\n      // @ts-expect-error: `markdown-table` types should support `null`.\n      alignDelimiters,\n      // @ts-expect-error: `markdown-table` types should support `null`.\n      padding,\n      // @ts-expect-error: `markdown-table` types should support `null`.\n      stringLength\n    })\n  }\n\n  /**\n   * @param {Table} node\n   * @param {State} state\n   * @param {Info} info\n   */\n  function handleTableAsData(node, state, info) {\n    const children = node.children\n    let index = -1\n    /** @type {Array<Array<string>>} */\n    const result = []\n    const subexit = state.enter('table')\n\n    while (++index < children.length) {\n      result[index] = handleTableRowAsData(children[index], state, info)\n    }\n\n    subexit()\n\n    return result\n  }\n\n  /**\n   * @param {TableRow} node\n   * @param {State} state\n   * @param {Info} info\n   */\n  function handleTableRowAsData(node, state, info) {\n    const children = node.children\n    let index = -1\n    /** @type {Array<string>} */\n    const result = []\n    const subexit = state.enter('tableRow')\n\n    while (++index < children.length) {\n      // Note: the positional info as used here is incorrect.\n      // Making it correct would be impossible due to aligning cells?\n      // And it would need copy/pasting `markdown-table` into this project.\n      result[index] = handleTableCell(children[index], node, state, info)\n    }\n\n    subexit()\n\n    return result\n  }\n\n  /**\n   * @type {ToMarkdownHandle}\n   * @param {InlineCode} node\n   */\n  function inlineCodeWithTable(node, parent, state) {\n    let value = defaultHandlers.inlineCode(node, parent, state)\n\n    if (state.stack.includes('tableCell')) {\n      value = value.replace(/\\|/g, '\\\\$&')\n    }\n\n    return value\n  }\n}\n","/**\n * @typedef {import('mdast').ListItem} ListItem\n * @typedef {import('mdast').Paragraph} Paragraph\n * @typedef {import('mdast-util-from-markdown').CompileContext} CompileContext\n * @typedef {import('mdast-util-from-markdown').Extension} FromMarkdownExtension\n * @typedef {import('mdast-util-from-markdown').Handle} FromMarkdownHandle\n * @typedef {import('mdast-util-to-markdown').Options} ToMarkdownExtension\n * @typedef {import('mdast-util-to-markdown').Handle} ToMarkdownHandle\n */\n\nimport {ok as assert} from 'devlop'\nimport {defaultHandlers} from 'mdast-util-to-markdown'\n\n/**\n * Create an extension for `mdast-util-from-markdown` to enable GFM task\n * list items in markdown.\n *\n * @returns {FromMarkdownExtension}\n *   Extension for `mdast-util-from-markdown` to enable GFM task list items.\n */\nexport function gfmTaskListItemFromMarkdown() {\n  return {\n    exit: {\n      taskListCheckValueChecked: exitCheck,\n      taskListCheckValueUnchecked: exitCheck,\n      paragraph: exitParagraphWithTaskListItem\n    }\n  }\n}\n\n/**\n * Create an extension for `mdast-util-to-markdown` to enable GFM task list\n * items in markdown.\n *\n * @returns {ToMarkdownExtension}\n *   Extension for `mdast-util-to-markdown` to enable GFM task list items.\n */\nexport function gfmTaskListItemToMarkdown() {\n  return {\n    unsafe: [{atBreak: true, character: '-', after: '[:|-]'}],\n    handlers: {listItem: listItemWithTaskListItem}\n  }\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction exitCheck(token) {\n  // We’re always in a paragraph, in a list item.\n  const node = this.stack[this.stack.length - 2]\n  assert(node.type === 'listItem')\n  node.checked = token.type === 'taskListCheckValueChecked'\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction exitParagraphWithTaskListItem(token) {\n  const parent = this.stack[this.stack.length - 2]\n\n  if (\n    parent &&\n    parent.type === 'listItem' &&\n    typeof parent.checked === 'boolean'\n  ) {\n    const node = this.stack[this.stack.length - 1]\n    assert(node.type === 'paragraph')\n    const head = node.children[0]\n\n    if (head && head.type === 'text') {\n      const siblings = parent.children\n      let index = -1\n      /** @type {Paragraph | undefined} */\n      let firstParaghraph\n\n      while (++index < siblings.length) {\n        const sibling = siblings[index]\n        if (sibling.type === 'paragraph') {\n          firstParaghraph = sibling\n          break\n        }\n      }\n\n      if (firstParaghraph === node) {\n        // Must start with a space or a tab.\n        head.value = head.value.slice(1)\n\n        if (head.value.length === 0) {\n          node.children.shift()\n        } else if (\n          node.position &&\n          head.position &&\n          typeof head.position.start.offset === 'number'\n        ) {\n          head.position.start.column++\n          head.position.start.offset++\n          node.position.start = Object.assign({}, head.position.start)\n        }\n      }\n    }\n  }\n\n  this.exit(token)\n}\n\n/**\n * @type {ToMarkdownHandle}\n * @param {ListItem} node\n */\nfunction listItemWithTaskListItem(node, parent, state, info) {\n  const head = node.children[0]\n  const checkable =\n    typeof node.checked === 'boolean' && head && head.type === 'paragraph'\n  const checkbox = '[' + (node.checked ? 'x' : ' ') + '] '\n  const tracker = state.createTracker(info)\n\n  if (checkable) {\n    tracker.move(checkbox)\n  }\n\n  let value = defaultHandlers.listItem(node, parent, state, {\n    ...info,\n    ...tracker.current()\n  })\n\n  if (checkable) {\n    value = value.replace(/^(?:[*+-]|\\d+\\.)([\\r\\n]| {1,3})/, check)\n  }\n\n  return value\n\n  /**\n   * @param {string} $0\n   * @returns {string}\n   */\n  function check($0) {\n    return $0 + checkbox\n  }\n}\n","/**\n * @import {Extension as FromMarkdownExtension} from 'mdast-util-from-markdown'\n * @import {Options} from 'mdast-util-gfm'\n * @import {Options as ToMarkdownExtension} from 'mdast-util-to-markdown'\n */\n\nimport {\n  gfmAutolinkLiteralFromMarkdown,\n  gfmAutolinkLiteralToMarkdown\n} from 'mdast-util-gfm-autolink-literal'\nimport {\n  gfmFootnoteFromMarkdown,\n  gfmFootnoteToMarkdown\n} from 'mdast-util-gfm-footnote'\nimport {\n  gfmStrikethroughFromMarkdown,\n  gfmStrikethroughToMarkdown\n} from 'mdast-util-gfm-strikethrough'\nimport {gfmTableFromMarkdown, gfmTableToMarkdown} from 'mdast-util-gfm-table'\nimport {\n  gfmTaskListItemFromMarkdown,\n  gfmTaskListItemToMarkdown\n} from 'mdast-util-gfm-task-list-item'\n\n/**\n * Create an extension for `mdast-util-from-markdown` to enable GFM (autolink\n * literals, footnotes, strikethrough, tables, tasklists).\n *\n * @returns {Array<FromMarkdownExtension>}\n *   Extension for `mdast-util-from-markdown` to enable GFM (autolink literals,\n *   footnotes, strikethrough, tables, tasklists).\n */\nexport function gfmFromMarkdown() {\n  return [\n    gfmAutolinkLiteralFromMarkdown(),\n    gfmFootnoteFromMarkdown(),\n    gfmStrikethroughFromMarkdown(),\n    gfmTableFromMarkdown(),\n    gfmTaskListItemFromMarkdown()\n  ]\n}\n\n/**\n * Create an extension for `mdast-util-to-markdown` to enable GFM (autolink\n * literals, footnotes, strikethrough, tables, tasklists).\n *\n * @param {Options | null | undefined} [options]\n *   Configuration (optional).\n * @returns {ToMarkdownExtension}\n *   Extension for `mdast-util-to-markdown` to enable GFM (autolink literals,\n *   footnotes, strikethrough, tables, tasklists).\n */\nexport function gfmToMarkdown(options) {\n  return {\n    extensions: [\n      gfmAutolinkLiteralToMarkdown(),\n      gfmFootnoteToMarkdown(options),\n      gfmStrikethroughToMarkdown(),\n      gfmTableToMarkdown(options),\n      gfmTaskListItemToMarkdown()\n    ]\n  }\n}\n","/**\n * @import {Code, ConstructRecord, Event, Extension, Previous, State, TokenizeContext, Tokenizer} from 'micromark-util-types'\n */\n\nimport { asciiAlpha, asciiAlphanumeric, asciiControl, markdownLineEndingOrSpace, unicodePunctuation, unicodeWhitespace } from 'micromark-util-character';\nconst wwwPrefix = {\n  tokenize: tokenizeWwwPrefix,\n  partial: true\n};\nconst domain = {\n  tokenize: tokenizeDomain,\n  partial: true\n};\nconst path = {\n  tokenize: tokenizePath,\n  partial: true\n};\nconst trail = {\n  tokenize: tokenizeTrail,\n  partial: true\n};\nconst emailDomainDotTrail = {\n  tokenize: tokenizeEmailDomainDotTrail,\n  partial: true\n};\nconst wwwAutolink = {\n  name: 'wwwAutolink',\n  tokenize: tokenizeWwwAutolink,\n  previous: previousWww\n};\nconst protocolAutolink = {\n  name: 'protocolAutolink',\n  tokenize: tokenizeProtocolAutolink,\n  previous: previousProtocol\n};\nconst emailAutolink = {\n  name: 'emailAutolink',\n  tokenize: tokenizeEmailAutolink,\n  previous: previousEmail\n};\n\n/** @type {ConstructRecord} */\nconst text = {};\n\n/**\n * Create an extension for `micromark` to support GitHub autolink literal\n * syntax.\n *\n * @returns {Extension}\n *   Extension for `micromark` that can be passed in `extensions` to enable GFM\n *   autolink literal syntax.\n */\nexport function gfmAutolinkLiteral() {\n  return {\n    text\n  };\n}\n\n/** @type {Code} */\nlet code = 48;\n\n// Add alphanumerics.\nwhile (code < 123) {\n  text[code] = emailAutolink;\n  code++;\n  if (code === 58) code = 65;else if (code === 91) code = 97;\n}\ntext[43] = emailAutolink;\ntext[45] = emailAutolink;\ntext[46] = emailAutolink;\ntext[95] = emailAutolink;\ntext[72] = [emailAutolink, protocolAutolink];\ntext[104] = [emailAutolink, protocolAutolink];\ntext[87] = [emailAutolink, wwwAutolink];\ntext[119] = [emailAutolink, wwwAutolink];\n\n// To do: perform email autolink literals on events, afterwards.\n// That’s where `markdown-rs` and `cmark-gfm` perform it.\n// It should look for `@`, then for atext backwards, and then for a label\n// forwards.\n// To do: `mailto:`, `xmpp:` protocol as prefix.\n\n/**\n * Email autolink literal.\n *\n * ```markdown\n * > | a contact@example.org b\n *       ^^^^^^^^^^^^^^^^^^^\n * ```\n *\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeEmailAutolink(effects, ok, nok) {\n  const self = this;\n  /** @type {boolean | undefined} */\n  let dot;\n  /** @type {boolean} */\n  let data;\n  return start;\n\n  /**\n   * Start of email autolink literal.\n   *\n   * ```markdown\n   * > | a contact@example.org b\n   *       ^\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    if (!gfmAtext(code) || !previousEmail.call(self, self.previous) || previousUnbalanced(self.events)) {\n      return nok(code);\n    }\n    effects.enter('literalAutolink');\n    effects.enter('literalAutolinkEmail');\n    return atext(code);\n  }\n\n  /**\n   * In email atext.\n   *\n   * ```markdown\n   * > | a contact@example.org b\n   *       ^\n   * ```\n   *\n   * @type {State}\n   */\n  function atext(code) {\n    if (gfmAtext(code)) {\n      effects.consume(code);\n      return atext;\n    }\n    if (code === 64) {\n      effects.consume(code);\n      return emailDomain;\n    }\n    return nok(code);\n  }\n\n  /**\n   * In email domain.\n   *\n   * The reference code is a bit overly complex as it handles the `@`, of which\n   * there may be just one.\n   * Source: <https://github.com/github/cmark-gfm/blob/ef1cfcb/extensions/autolink.c#L318>\n   *\n   * ```markdown\n   * > | a contact@example.org b\n   *               ^\n   * ```\n   *\n   * @type {State}\n   */\n  function emailDomain(code) {\n    // Dot followed by alphanumerical (not `-` or `_`).\n    if (code === 46) {\n      return effects.check(emailDomainDotTrail, emailDomainAfter, emailDomainDot)(code);\n    }\n\n    // Alphanumerical, `-`, and `_`.\n    if (code === 45 || code === 95 || asciiAlphanumeric(code)) {\n      data = true;\n      effects.consume(code);\n      return emailDomain;\n    }\n\n    // To do: `/` if xmpp.\n\n    // Note: normally we’d truncate trailing punctuation from the link.\n    // However, email autolink literals cannot contain any of those markers,\n    // except for `.`, but that can only occur if it isn’t trailing.\n    // So we can ignore truncating!\n    return emailDomainAfter(code);\n  }\n\n  /**\n   * In email domain, on dot that is not a trail.\n   *\n   * ```markdown\n   * > | a contact@example.org b\n   *                      ^\n   * ```\n   *\n   * @type {State}\n   */\n  function emailDomainDot(code) {\n    effects.consume(code);\n    dot = true;\n    return emailDomain;\n  }\n\n  /**\n   * After email domain.\n   *\n   * ```markdown\n   * > | a contact@example.org b\n   *                          ^\n   * ```\n   *\n   * @type {State}\n   */\n  function emailDomainAfter(code) {\n    // Domain must not be empty, must include a dot, and must end in alphabetical.\n    // Source: <https://github.com/github/cmark-gfm/blob/ef1cfcb/extensions/autolink.c#L332>.\n    if (data && dot && asciiAlpha(self.previous)) {\n      effects.exit('literalAutolinkEmail');\n      effects.exit('literalAutolink');\n      return ok(code);\n    }\n    return nok(code);\n  }\n}\n\n/**\n * `www` autolink literal.\n *\n * ```markdown\n * > | a www.example.org b\n *       ^^^^^^^^^^^^^^^\n * ```\n *\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeWwwAutolink(effects, ok, nok) {\n  const self = this;\n  return wwwStart;\n\n  /**\n   * Start of www autolink literal.\n   *\n   * ```markdown\n   * > | www.example.com/a?b#c\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function wwwStart(code) {\n    if (code !== 87 && code !== 119 || !previousWww.call(self, self.previous) || previousUnbalanced(self.events)) {\n      return nok(code);\n    }\n    effects.enter('literalAutolink');\n    effects.enter('literalAutolinkWww');\n    // Note: we *check*, so we can discard the `www.` we parsed.\n    // If it worked, we consider it as a part of the domain.\n    return effects.check(wwwPrefix, effects.attempt(domain, effects.attempt(path, wwwAfter), nok), nok)(code);\n  }\n\n  /**\n   * After a www autolink literal.\n   *\n   * ```markdown\n   * > | www.example.com/a?b#c\n   *                          ^\n   * ```\n   *\n   * @type {State}\n   */\n  function wwwAfter(code) {\n    effects.exit('literalAutolinkWww');\n    effects.exit('literalAutolink');\n    return ok(code);\n  }\n}\n\n/**\n * Protocol autolink literal.\n *\n * ```markdown\n * > | a https://example.org b\n *       ^^^^^^^^^^^^^^^^^^^\n * ```\n *\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeProtocolAutolink(effects, ok, nok) {\n  const self = this;\n  let buffer = '';\n  let seen = false;\n  return protocolStart;\n\n  /**\n   * Start of protocol autolink literal.\n   *\n   * ```markdown\n   * > | https://example.com/a?b#c\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function protocolStart(code) {\n    if ((code === 72 || code === 104) && previousProtocol.call(self, self.previous) && !previousUnbalanced(self.events)) {\n      effects.enter('literalAutolink');\n      effects.enter('literalAutolinkHttp');\n      buffer += String.fromCodePoint(code);\n      effects.consume(code);\n      return protocolPrefixInside;\n    }\n    return nok(code);\n  }\n\n  /**\n   * In protocol.\n   *\n   * ```markdown\n   * > | https://example.com/a?b#c\n   *     ^^^^^\n   * ```\n   *\n   * @type {State}\n   */\n  function protocolPrefixInside(code) {\n    // `5` is size of `https`\n    if (asciiAlpha(code) && buffer.length < 5) {\n      // @ts-expect-error: definitely number.\n      buffer += String.fromCodePoint(code);\n      effects.consume(code);\n      return protocolPrefixInside;\n    }\n    if (code === 58) {\n      const protocol = buffer.toLowerCase();\n      if (protocol === 'http' || protocol === 'https') {\n        effects.consume(code);\n        return protocolSlashesInside;\n      }\n    }\n    return nok(code);\n  }\n\n  /**\n   * In slashes.\n   *\n   * ```markdown\n   * > | https://example.com/a?b#c\n   *           ^^\n   * ```\n   *\n   * @type {State}\n   */\n  function protocolSlashesInside(code) {\n    if (code === 47) {\n      effects.consume(code);\n      if (seen) {\n        return afterProtocol;\n      }\n      seen = true;\n      return protocolSlashesInside;\n    }\n    return nok(code);\n  }\n\n  /**\n   * After protocol, before domain.\n   *\n   * ```markdown\n   * > | https://example.com/a?b#c\n   *             ^\n   * ```\n   *\n   * @type {State}\n   */\n  function afterProtocol(code) {\n    // To do: this is different from `markdown-rs`:\n    // https://github.com/wooorm/markdown-rs/blob/b3a921c761309ae00a51fe348d8a43adbc54b518/src/construct/gfm_autolink_literal.rs#L172-L182\n    return code === null || asciiControl(code) || markdownLineEndingOrSpace(code) || unicodeWhitespace(code) || unicodePunctuation(code) ? nok(code) : effects.attempt(domain, effects.attempt(path, protocolAfter), nok)(code);\n  }\n\n  /**\n   * After a protocol autolink literal.\n   *\n   * ```markdown\n   * > | https://example.com/a?b#c\n   *                              ^\n   * ```\n   *\n   * @type {State}\n   */\n  function protocolAfter(code) {\n    effects.exit('literalAutolinkHttp');\n    effects.exit('literalAutolink');\n    return ok(code);\n  }\n}\n\n/**\n * `www` prefix.\n *\n * ```markdown\n * > | a www.example.org b\n *       ^^^^\n * ```\n *\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeWwwPrefix(effects, ok, nok) {\n  let size = 0;\n  return wwwPrefixInside;\n\n  /**\n   * In www prefix.\n   *\n   * ```markdown\n   * > | www.example.com\n   *     ^^^^\n   * ```\n   *\n   * @type {State}\n   */\n  function wwwPrefixInside(code) {\n    if ((code === 87 || code === 119) && size < 3) {\n      size++;\n      effects.consume(code);\n      return wwwPrefixInside;\n    }\n    if (code === 46 && size === 3) {\n      effects.consume(code);\n      return wwwPrefixAfter;\n    }\n    return nok(code);\n  }\n\n  /**\n   * After www prefix.\n   *\n   * ```markdown\n   * > | www.example.com\n   *         ^\n   * ```\n   *\n   * @type {State}\n   */\n  function wwwPrefixAfter(code) {\n    // If there is *anything*, we can link.\n    return code === null ? nok(code) : ok(code);\n  }\n}\n\n/**\n * Domain.\n *\n * ```markdown\n * > | a https://example.org b\n *               ^^^^^^^^^^^\n * ```\n *\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeDomain(effects, ok, nok) {\n  /** @type {boolean | undefined} */\n  let underscoreInLastSegment;\n  /** @type {boolean | undefined} */\n  let underscoreInLastLastSegment;\n  /** @type {boolean | undefined} */\n  let seen;\n  return domainInside;\n\n  /**\n   * In domain.\n   *\n   * ```markdown\n   * > | https://example.com/a\n   *             ^^^^^^^^^^^\n   * ```\n   *\n   * @type {State}\n   */\n  function domainInside(code) {\n    // Check whether this marker, which is a trailing punctuation\n    // marker, optionally followed by more trailing markers, and then\n    // followed by an end.\n    if (code === 46 || code === 95) {\n      return effects.check(trail, domainAfter, domainAtPunctuation)(code);\n    }\n\n    // GH documents that only alphanumerics (other than `-`, `.`, and `_`) can\n    // occur, which sounds like ASCII only, but they also support `www.點看.com`,\n    // so that’s Unicode.\n    // Instead of some new production for Unicode alphanumerics, markdown\n    // already has that for Unicode punctuation and whitespace, so use those.\n    // Source: <https://github.com/github/cmark-gfm/blob/ef1cfcb/extensions/autolink.c#L12>.\n    if (code === null || markdownLineEndingOrSpace(code) || unicodeWhitespace(code) || code !== 45 && unicodePunctuation(code)) {\n      return domainAfter(code);\n    }\n    seen = true;\n    effects.consume(code);\n    return domainInside;\n  }\n\n  /**\n   * In domain, at potential trailing punctuation, that was not trailing.\n   *\n   * ```markdown\n   * > | https://example.com\n   *                    ^\n   * ```\n   *\n   * @type {State}\n   */\n  function domainAtPunctuation(code) {\n    // There is an underscore in the last segment of the domain\n    if (code === 95) {\n      underscoreInLastSegment = true;\n    }\n    // Otherwise, it’s a `.`: save the last segment underscore in the\n    // penultimate segment slot.\n    else {\n      underscoreInLastLastSegment = underscoreInLastSegment;\n      underscoreInLastSegment = undefined;\n    }\n    effects.consume(code);\n    return domainInside;\n  }\n\n  /**\n   * After domain.\n   *\n   * ```markdown\n   * > | https://example.com/a\n   *                        ^\n   * ```\n   *\n   * @type {State} */\n  function domainAfter(code) {\n    // Note: that’s GH says a dot is needed, but it’s not true:\n    // <https://github.com/github/cmark-gfm/issues/279>\n    if (underscoreInLastLastSegment || underscoreInLastSegment || !seen) {\n      return nok(code);\n    }\n    return ok(code);\n  }\n}\n\n/**\n * Path.\n *\n * ```markdown\n * > | a https://example.org/stuff b\n *                          ^^^^^^\n * ```\n *\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizePath(effects, ok) {\n  let sizeOpen = 0;\n  let sizeClose = 0;\n  return pathInside;\n\n  /**\n   * In path.\n   *\n   * ```markdown\n   * > | https://example.com/a\n   *                        ^^\n   * ```\n   *\n   * @type {State}\n   */\n  function pathInside(code) {\n    if (code === 40) {\n      sizeOpen++;\n      effects.consume(code);\n      return pathInside;\n    }\n\n    // To do: `markdown-rs` also needs this.\n    // If this is a paren, and there are less closings than openings,\n    // we don’t check for a trail.\n    if (code === 41 && sizeClose < sizeOpen) {\n      return pathAtPunctuation(code);\n    }\n\n    // Check whether this trailing punctuation marker is optionally\n    // followed by more trailing markers, and then followed\n    // by an end.\n    if (code === 33 || code === 34 || code === 38 || code === 39 || code === 41 || code === 42 || code === 44 || code === 46 || code === 58 || code === 59 || code === 60 || code === 63 || code === 93 || code === 95 || code === 126) {\n      return effects.check(trail, ok, pathAtPunctuation)(code);\n    }\n    if (code === null || markdownLineEndingOrSpace(code) || unicodeWhitespace(code)) {\n      return ok(code);\n    }\n    effects.consume(code);\n    return pathInside;\n  }\n\n  /**\n   * In path, at potential trailing punctuation, that was not trailing.\n   *\n   * ```markdown\n   * > | https://example.com/a\"b\n   *                          ^\n   * ```\n   *\n   * @type {State}\n   */\n  function pathAtPunctuation(code) {\n    // Count closing parens.\n    if (code === 41) {\n      sizeClose++;\n    }\n    effects.consume(code);\n    return pathInside;\n  }\n}\n\n/**\n * Trail.\n *\n * This calls `ok` if this *is* the trail, followed by an end, which means\n * the entire trail is not part of the link.\n * It calls `nok` if this *is* part of the link.\n *\n * ```markdown\n * > | https://example.com\").\n *                        ^^^\n * ```\n *\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeTrail(effects, ok, nok) {\n  return trail;\n\n  /**\n   * In trail of domain or path.\n   *\n   * ```markdown\n   * > | https://example.com\").\n   *                        ^\n   * ```\n   *\n   * @type {State}\n   */\n  function trail(code) {\n    // Regular trailing punctuation.\n    if (code === 33 || code === 34 || code === 39 || code === 41 || code === 42 || code === 44 || code === 46 || code === 58 || code === 59 || code === 63 || code === 95 || code === 126) {\n      effects.consume(code);\n      return trail;\n    }\n\n    // `&` followed by one or more alphabeticals and then a `;`, is\n    // as a whole considered as trailing punctuation.\n    // In all other cases, it is considered as continuation of the URL.\n    if (code === 38) {\n      effects.consume(code);\n      return trailCharacterReferenceStart;\n    }\n\n    // Needed because we allow literals after `[`, as we fix:\n    // <https://github.com/github/cmark-gfm/issues/278>.\n    // Check that it is not followed by `(` or `[`.\n    if (code === 93) {\n      effects.consume(code);\n      return trailBracketAfter;\n    }\n    if (\n    // `<` is an end.\n    code === 60 ||\n    // So is whitespace.\n    code === null || markdownLineEndingOrSpace(code) || unicodeWhitespace(code)) {\n      return ok(code);\n    }\n    return nok(code);\n  }\n\n  /**\n   * In trail, after `]`.\n   *\n   * > 👉 **Note**: this deviates from `cmark-gfm` to fix a bug.\n   * > See end of <https://github.com/github/cmark-gfm/issues/278> for more.\n   *\n   * ```markdown\n   * > | https://example.com](\n   *                         ^\n   * ```\n   *\n   * @type {State}\n   */\n  function trailBracketAfter(code) {\n    // Whitespace or something that could start a resource or reference is the end.\n    // Switch back to trail otherwise.\n    if (code === null || code === 40 || code === 91 || markdownLineEndingOrSpace(code) || unicodeWhitespace(code)) {\n      return ok(code);\n    }\n    return trail(code);\n  }\n\n  /**\n   * In character-reference like trail, after `&`.\n   *\n   * ```markdown\n   * > | https://example.com&amp;).\n   *                         ^\n   * ```\n   *\n   * @type {State}\n   */\n  function trailCharacterReferenceStart(code) {\n    // When non-alpha, it’s not a trail.\n    return asciiAlpha(code) ? trailCharacterReferenceInside(code) : nok(code);\n  }\n\n  /**\n   * In character-reference like trail.\n   *\n   * ```markdown\n   * > | https://example.com&amp;).\n   *                         ^\n   * ```\n   *\n   * @type {State}\n   */\n  function trailCharacterReferenceInside(code) {\n    // Switch back to trail if this is well-formed.\n    if (code === 59) {\n      effects.consume(code);\n      return trail;\n    }\n    if (asciiAlpha(code)) {\n      effects.consume(code);\n      return trailCharacterReferenceInside;\n    }\n\n    // It’s not a trail.\n    return nok(code);\n  }\n}\n\n/**\n * Dot in email domain trail.\n *\n * This calls `ok` if this *is* the trail, followed by an end, which means\n * the trail is not part of the link.\n * It calls `nok` if this *is* part of the link.\n *\n * ```markdown\n * > | contact@example.org.\n *                        ^\n * ```\n *\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeEmailDomainDotTrail(effects, ok, nok) {\n  return start;\n\n  /**\n   * Dot.\n   *\n   * ```markdown\n   * > | contact@example.org.\n   *                    ^   ^\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    // Must be dot.\n    effects.consume(code);\n    return after;\n  }\n\n  /**\n   * After dot.\n   *\n   * ```markdown\n   * > | contact@example.org.\n   *                     ^   ^\n   * ```\n   *\n   * @type {State}\n   */\n  function after(code) {\n    // Not a trail if alphanumeric.\n    return asciiAlphanumeric(code) ? nok(code) : ok(code);\n  }\n}\n\n/**\n * See:\n * <https://github.com/github/cmark-gfm/blob/ef1cfcb/extensions/autolink.c#L156>.\n *\n * @type {Previous}\n */\nfunction previousWww(code) {\n  return code === null || code === 40 || code === 42 || code === 95 || code === 91 || code === 93 || code === 126 || markdownLineEndingOrSpace(code);\n}\n\n/**\n * See:\n * <https://github.com/github/cmark-gfm/blob/ef1cfcb/extensions/autolink.c#L214>.\n *\n * @type {Previous}\n */\nfunction previousProtocol(code) {\n  return !asciiAlpha(code);\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Previous}\n */\nfunction previousEmail(code) {\n  // Do not allow a slash “inside” atext.\n  // The reference code is a bit weird, but that’s what it results in.\n  // Source: <https://github.com/github/cmark-gfm/blob/ef1cfcb/extensions/autolink.c#L307>.\n  // Other than slash, every preceding character is allowed.\n  return !(code === 47 || gfmAtext(code));\n}\n\n/**\n * @param {Code} code\n * @returns {boolean}\n */\nfunction gfmAtext(code) {\n  return code === 43 || code === 45 || code === 46 || code === 95 || asciiAlphanumeric(code);\n}\n\n/**\n * @param {Array<Event>} events\n * @returns {boolean}\n */\nfunction previousUnbalanced(events) {\n  let index = events.length;\n  let result = false;\n  while (index--) {\n    const token = events[index][1];\n    if ((token.type === 'labelLink' || token.type === 'labelImage') && !token._balanced) {\n      result = true;\n      break;\n    }\n\n    // If we’ve seen this token, and it was marked as not having any unbalanced\n    // bracket before it, we can exit.\n    if (token._gfmAutolinkLiteralWalkedInto) {\n      result = false;\n      break;\n    }\n  }\n  if (events.length > 0 && !result) {\n    // Mark the last token as “walked into” w/o finding\n    // anything.\n    events[events.length - 1][1]._gfmAutolinkLiteralWalkedInto = true;\n  }\n  return result;\n}","/**\n * @import {Event, Exiter, Extension, Resolver, State, Token, TokenizeContext, Tokenizer} from 'micromark-util-types'\n */\n\nimport { blankLine } from 'micromark-core-commonmark';\nimport { factorySpace } from 'micromark-factory-space';\nimport { markdownLineEndingOrSpace } from 'micromark-util-character';\nimport { normalizeIdentifier } from 'micromark-util-normalize-identifier';\nconst indent = {\n  tokenize: tokenizeIndent,\n  partial: true\n};\n\n// To do: micromark should support a `_hiddenGfmFootnoteSupport`, which only\n// affects label start (image).\n// That will let us drop `tokenizePotentialGfmFootnote*`.\n// It currently has a `_hiddenFootnoteSupport`, which affects that and more.\n// That can be removed when `micromark-extension-footnote` is archived.\n\n/**\n * Create an extension for `micromark` to enable GFM footnote syntax.\n *\n * @returns {Extension}\n *   Extension for `micromark` that can be passed in `extensions` to\n *   enable GFM footnote syntax.\n */\nexport function gfmFootnote() {\n  /** @type {Extension} */\n  return {\n    document: {\n      [91]: {\n        name: 'gfmFootnoteDefinition',\n        tokenize: tokenizeDefinitionStart,\n        continuation: {\n          tokenize: tokenizeDefinitionContinuation\n        },\n        exit: gfmFootnoteDefinitionEnd\n      }\n    },\n    text: {\n      [91]: {\n        name: 'gfmFootnoteCall',\n        tokenize: tokenizeGfmFootnoteCall\n      },\n      [93]: {\n        name: 'gfmPotentialFootnoteCall',\n        add: 'after',\n        tokenize: tokenizePotentialGfmFootnoteCall,\n        resolveTo: resolveToPotentialGfmFootnoteCall\n      }\n    }\n  };\n}\n\n// To do: remove after micromark update.\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizePotentialGfmFootnoteCall(effects, ok, nok) {\n  const self = this;\n  let index = self.events.length;\n  const defined = self.parser.gfmFootnotes || (self.parser.gfmFootnotes = []);\n  /** @type {Token} */\n  let labelStart;\n\n  // Find an opening.\n  while (index--) {\n    const token = self.events[index][1];\n    if (token.type === \"labelImage\") {\n      labelStart = token;\n      break;\n    }\n\n    // Exit if we’ve walked far enough.\n    if (token.type === 'gfmFootnoteCall' || token.type === \"labelLink\" || token.type === \"label\" || token.type === \"image\" || token.type === \"link\") {\n      break;\n    }\n  }\n  return start;\n\n  /**\n   * @type {State}\n   */\n  function start(code) {\n    if (!labelStart || !labelStart._balanced) {\n      return nok(code);\n    }\n    const id = normalizeIdentifier(self.sliceSerialize({\n      start: labelStart.end,\n      end: self.now()\n    }));\n    if (id.codePointAt(0) !== 94 || !defined.includes(id.slice(1))) {\n      return nok(code);\n    }\n    effects.enter('gfmFootnoteCallLabelMarker');\n    effects.consume(code);\n    effects.exit('gfmFootnoteCallLabelMarker');\n    return ok(code);\n  }\n}\n\n// To do: remove after micromark update.\n/** @type {Resolver} */\nfunction resolveToPotentialGfmFootnoteCall(events, context) {\n  let index = events.length;\n  /** @type {Token | undefined} */\n  let labelStart;\n\n  // Find an opening.\n  while (index--) {\n    if (events[index][1].type === \"labelImage\" && events[index][0] === 'enter') {\n      labelStart = events[index][1];\n      break;\n    }\n  }\n  // Change the `labelImageMarker` to a `data`.\n  events[index + 1][1].type = \"data\";\n  events[index + 3][1].type = 'gfmFootnoteCallLabelMarker';\n\n  // The whole (without `!`):\n  /** @type {Token} */\n  const call = {\n    type: 'gfmFootnoteCall',\n    start: Object.assign({}, events[index + 3][1].start),\n    end: Object.assign({}, events[events.length - 1][1].end)\n  };\n  // The `^` marker\n  /** @type {Token} */\n  const marker = {\n    type: 'gfmFootnoteCallMarker',\n    start: Object.assign({}, events[index + 3][1].end),\n    end: Object.assign({}, events[index + 3][1].end)\n  };\n  // Increment the end 1 character.\n  marker.end.column++;\n  marker.end.offset++;\n  marker.end._bufferIndex++;\n  /** @type {Token} */\n  const string = {\n    type: 'gfmFootnoteCallString',\n    start: Object.assign({}, marker.end),\n    end: Object.assign({}, events[events.length - 1][1].start)\n  };\n  /** @type {Token} */\n  const chunk = {\n    type: \"chunkString\",\n    contentType: 'string',\n    start: Object.assign({}, string.start),\n    end: Object.assign({}, string.end)\n  };\n\n  /** @type {Array<Event>} */\n  const replacement = [\n  // Take the `labelImageMarker` (now `data`, the `!`)\n  events[index + 1], events[index + 2], ['enter', call, context],\n  // The `[`\n  events[index + 3], events[index + 4],\n  // The `^`.\n  ['enter', marker, context], ['exit', marker, context],\n  // Everything in between.\n  ['enter', string, context], ['enter', chunk, context], ['exit', chunk, context], ['exit', string, context],\n  // The ending (`]`, properly parsed and labelled).\n  events[events.length - 2], events[events.length - 1], ['exit', call, context]];\n  events.splice(index, events.length - index + 1, ...replacement);\n  return events;\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeGfmFootnoteCall(effects, ok, nok) {\n  const self = this;\n  const defined = self.parser.gfmFootnotes || (self.parser.gfmFootnotes = []);\n  let size = 0;\n  /** @type {boolean} */\n  let data;\n\n  // Note: the implementation of `markdown-rs` is different, because it houses\n  // core *and* extensions in one project.\n  // Therefore, it can include footnote logic inside `label-end`.\n  // We can’t do that, but luckily, we can parse footnotes in a simpler way than\n  // needed for labels.\n  return start;\n\n  /**\n   * Start of footnote label.\n   *\n   * ```markdown\n   * > | a [^b] c\n   *       ^\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    effects.enter('gfmFootnoteCall');\n    effects.enter('gfmFootnoteCallLabelMarker');\n    effects.consume(code);\n    effects.exit('gfmFootnoteCallLabelMarker');\n    return callStart;\n  }\n\n  /**\n   * After `[`, at `^`.\n   *\n   * ```markdown\n   * > | a [^b] c\n   *        ^\n   * ```\n   *\n   * @type {State}\n   */\n  function callStart(code) {\n    if (code !== 94) return nok(code);\n    effects.enter('gfmFootnoteCallMarker');\n    effects.consume(code);\n    effects.exit('gfmFootnoteCallMarker');\n    effects.enter('gfmFootnoteCallString');\n    effects.enter('chunkString').contentType = 'string';\n    return callData;\n  }\n\n  /**\n   * In label.\n   *\n   * ```markdown\n   * > | a [^b] c\n   *         ^\n   * ```\n   *\n   * @type {State}\n   */\n  function callData(code) {\n    if (\n    // Too long.\n    size > 999 ||\n    // Closing brace with nothing.\n    code === 93 && !data ||\n    // Space or tab is not supported by GFM for some reason.\n    // `\\n` and `[` not being supported makes sense.\n    code === null || code === 91 || markdownLineEndingOrSpace(code)) {\n      return nok(code);\n    }\n    if (code === 93) {\n      effects.exit('chunkString');\n      const token = effects.exit('gfmFootnoteCallString');\n      if (!defined.includes(normalizeIdentifier(self.sliceSerialize(token)))) {\n        return nok(code);\n      }\n      effects.enter('gfmFootnoteCallLabelMarker');\n      effects.consume(code);\n      effects.exit('gfmFootnoteCallLabelMarker');\n      effects.exit('gfmFootnoteCall');\n      return ok;\n    }\n    if (!markdownLineEndingOrSpace(code)) {\n      data = true;\n    }\n    size++;\n    effects.consume(code);\n    return code === 92 ? callEscape : callData;\n  }\n\n  /**\n   * On character after escape.\n   *\n   * ```markdown\n   * > | a [^b\\c] d\n   *           ^\n   * ```\n   *\n   * @type {State}\n   */\n  function callEscape(code) {\n    if (code === 91 || code === 92 || code === 93) {\n      effects.consume(code);\n      size++;\n      return callData;\n    }\n    return callData(code);\n  }\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeDefinitionStart(effects, ok, nok) {\n  const self = this;\n  const defined = self.parser.gfmFootnotes || (self.parser.gfmFootnotes = []);\n  /** @type {string} */\n  let identifier;\n  let size = 0;\n  /** @type {boolean | undefined} */\n  let data;\n  return start;\n\n  /**\n   * Start of GFM footnote definition.\n   *\n   * ```markdown\n   * > | [^a]: b\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    effects.enter('gfmFootnoteDefinition')._container = true;\n    effects.enter('gfmFootnoteDefinitionLabel');\n    effects.enter('gfmFootnoteDefinitionLabelMarker');\n    effects.consume(code);\n    effects.exit('gfmFootnoteDefinitionLabelMarker');\n    return labelAtMarker;\n  }\n\n  /**\n   * In label, at caret.\n   *\n   * ```markdown\n   * > | [^a]: b\n   *      ^\n   * ```\n   *\n   * @type {State}\n   */\n  function labelAtMarker(code) {\n    if (code === 94) {\n      effects.enter('gfmFootnoteDefinitionMarker');\n      effects.consume(code);\n      effects.exit('gfmFootnoteDefinitionMarker');\n      effects.enter('gfmFootnoteDefinitionLabelString');\n      effects.enter('chunkString').contentType = 'string';\n      return labelInside;\n    }\n    return nok(code);\n  }\n\n  /**\n   * In label.\n   *\n   * > 👉 **Note**: `cmark-gfm` prevents whitespace from occurring in footnote\n   * > definition labels.\n   *\n   * ```markdown\n   * > | [^a]: b\n   *       ^\n   * ```\n   *\n   * @type {State}\n   */\n  function labelInside(code) {\n    if (\n    // Too long.\n    size > 999 ||\n    // Closing brace with nothing.\n    code === 93 && !data ||\n    // Space or tab is not supported by GFM for some reason.\n    // `\\n` and `[` not being supported makes sense.\n    code === null || code === 91 || markdownLineEndingOrSpace(code)) {\n      return nok(code);\n    }\n    if (code === 93) {\n      effects.exit('chunkString');\n      const token = effects.exit('gfmFootnoteDefinitionLabelString');\n      identifier = normalizeIdentifier(self.sliceSerialize(token));\n      effects.enter('gfmFootnoteDefinitionLabelMarker');\n      effects.consume(code);\n      effects.exit('gfmFootnoteDefinitionLabelMarker');\n      effects.exit('gfmFootnoteDefinitionLabel');\n      return labelAfter;\n    }\n    if (!markdownLineEndingOrSpace(code)) {\n      data = true;\n    }\n    size++;\n    effects.consume(code);\n    return code === 92 ? labelEscape : labelInside;\n  }\n\n  /**\n   * After `\\`, at a special character.\n   *\n   * > 👉 **Note**: `cmark-gfm` currently does not support escaped brackets:\n   * > <https://github.com/github/cmark-gfm/issues/240>\n   *\n   * ```markdown\n   * > | [^a\\*b]: c\n   *         ^\n   * ```\n   *\n   * @type {State}\n   */\n  function labelEscape(code) {\n    if (code === 91 || code === 92 || code === 93) {\n      effects.consume(code);\n      size++;\n      return labelInside;\n    }\n    return labelInside(code);\n  }\n\n  /**\n   * After definition label.\n   *\n   * ```markdown\n   * > | [^a]: b\n   *         ^\n   * ```\n   *\n   * @type {State}\n   */\n  function labelAfter(code) {\n    if (code === 58) {\n      effects.enter('definitionMarker');\n      effects.consume(code);\n      effects.exit('definitionMarker');\n      if (!defined.includes(identifier)) {\n        defined.push(identifier);\n      }\n\n      // Any whitespace after the marker is eaten, forming indented code\n      // is not possible.\n      // No space is also fine, just like a block quote marker.\n      return factorySpace(effects, whitespaceAfter, 'gfmFootnoteDefinitionWhitespace');\n    }\n    return nok(code);\n  }\n\n  /**\n   * After definition prefix.\n   *\n   * ```markdown\n   * > | [^a]: b\n   *           ^\n   * ```\n   *\n   * @type {State}\n   */\n  function whitespaceAfter(code) {\n    // `markdown-rs` has a wrapping token for the prefix that is closed here.\n    return ok(code);\n  }\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeDefinitionContinuation(effects, ok, nok) {\n  /// Start of footnote definition continuation.\n  ///\n  /// ```markdown\n  ///   | [^a]: b\n  /// > |     c\n  ///     ^\n  /// ```\n  //\n  // Either a blank line, which is okay, or an indented thing.\n  return effects.check(blankLine, ok, effects.attempt(indent, ok, nok));\n}\n\n/** @type {Exiter} */\nfunction gfmFootnoteDefinitionEnd(effects) {\n  effects.exit('gfmFootnoteDefinition');\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeIndent(effects, ok, nok) {\n  const self = this;\n  return factorySpace(effects, afterPrefix, 'gfmFootnoteDefinitionIndent', 4 + 1);\n\n  /**\n   * @type {State}\n   */\n  function afterPrefix(code) {\n    const tail = self.events[self.events.length - 1];\n    return tail && tail[1].type === 'gfmFootnoteDefinitionIndent' && tail[2].sliceSerialize(tail[1], true).length === 4 ? ok(code) : nok(code);\n  }\n}","/**\n * @import {Options} from 'micromark-extension-gfm-strikethrough'\n * @import {Event, Extension, Resolver, State, Token, TokenizeContext, Tokenizer} from 'micromark-util-types'\n */\n\nimport { splice } from 'micromark-util-chunked';\nimport { classifyCharacter } from 'micromark-util-classify-character';\nimport { resolveAll } from 'micromark-util-resolve-all';\n/**\n * Create an extension for `micromark` to enable GFM strikethrough syntax.\n *\n * @param {Options | null | undefined} [options={}]\n *   Configuration.\n * @returns {Extension}\n *   Extension for `micromark` that can be passed in `extensions`, to\n *   enable GFM strikethrough syntax.\n */\nexport function gfmStrikethrough(options) {\n  const options_ = options || {};\n  let single = options_.singleTilde;\n  const tokenizer = {\n    name: 'strikethrough',\n    tokenize: tokenizeStrikethrough,\n    resolveAll: resolveAllStrikethrough\n  };\n  if (single === null || single === undefined) {\n    single = true;\n  }\n  return {\n    text: {\n      [126]: tokenizer\n    },\n    insideSpan: {\n      null: [tokenizer]\n    },\n    attentionMarkers: {\n      null: [126]\n    }\n  };\n\n  /**\n   * Take events and resolve strikethrough.\n   *\n   * @type {Resolver}\n   */\n  function resolveAllStrikethrough(events, context) {\n    let index = -1;\n\n    // Walk through all events.\n    while (++index < events.length) {\n      // Find a token that can close.\n      if (events[index][0] === 'enter' && events[index][1].type === 'strikethroughSequenceTemporary' && events[index][1]._close) {\n        let open = index;\n\n        // Now walk back to find an opener.\n        while (open--) {\n          // Find a token that can open the closer.\n          if (events[open][0] === 'exit' && events[open][1].type === 'strikethroughSequenceTemporary' && events[open][1]._open &&\n          // If the sizes are the same:\n          events[index][1].end.offset - events[index][1].start.offset === events[open][1].end.offset - events[open][1].start.offset) {\n            events[index][1].type = 'strikethroughSequence';\n            events[open][1].type = 'strikethroughSequence';\n\n            /** @type {Token} */\n            const strikethrough = {\n              type: 'strikethrough',\n              start: Object.assign({}, events[open][1].start),\n              end: Object.assign({}, events[index][1].end)\n            };\n\n            /** @type {Token} */\n            const text = {\n              type: 'strikethroughText',\n              start: Object.assign({}, events[open][1].end),\n              end: Object.assign({}, events[index][1].start)\n            };\n\n            // Opening.\n            /** @type {Array<Event>} */\n            const nextEvents = [['enter', strikethrough, context], ['enter', events[open][1], context], ['exit', events[open][1], context], ['enter', text, context]];\n            const insideSpan = context.parser.constructs.insideSpan.null;\n            if (insideSpan) {\n              // Between.\n              splice(nextEvents, nextEvents.length, 0, resolveAll(insideSpan, events.slice(open + 1, index), context));\n            }\n\n            // Closing.\n            splice(nextEvents, nextEvents.length, 0, [['exit', text, context], ['enter', events[index][1], context], ['exit', events[index][1], context], ['exit', strikethrough, context]]);\n            splice(events, open - 1, index - open + 3, nextEvents);\n            index = open + nextEvents.length - 2;\n            break;\n          }\n        }\n      }\n    }\n    index = -1;\n    while (++index < events.length) {\n      if (events[index][1].type === 'strikethroughSequenceTemporary') {\n        events[index][1].type = \"data\";\n      }\n    }\n    return events;\n  }\n\n  /**\n   * @this {TokenizeContext}\n   * @type {Tokenizer}\n   */\n  function tokenizeStrikethrough(effects, ok, nok) {\n    const previous = this.previous;\n    const events = this.events;\n    let size = 0;\n    return start;\n\n    /** @type {State} */\n    function start(code) {\n      if (previous === 126 && events[events.length - 1][1].type !== \"characterEscape\") {\n        return nok(code);\n      }\n      effects.enter('strikethroughSequenceTemporary');\n      return more(code);\n    }\n\n    /** @type {State} */\n    function more(code) {\n      const before = classifyCharacter(previous);\n      if (code === 126) {\n        // If this is the third marker, exit.\n        if (size > 1) return nok(code);\n        effects.consume(code);\n        size++;\n        return more;\n      }\n      if (size < 2 && !single) return nok(code);\n      const token = effects.exit('strikethroughSequenceTemporary');\n      const after = classifyCharacter(code);\n      token._open = !after || after === 2 && Boolean(before);\n      token._close = !before || before === 2 && Boolean(after);\n      return ok(code);\n    }\n  }\n}","/**\n * @import {Event} from 'micromark-util-types'\n */\n\n// Port of `edit_map.rs` from `markdown-rs`.\n// This should move to `markdown-js` later.\n\n// Deal with several changes in events, batching them together.\n//\n// Preferably, changes should be kept to a minimum.\n// Sometimes, it’s needed to change the list of events, because parsing can be\n// messy, and it helps to expose a cleaner interface of events to the compiler\n// and other users.\n// It can also help to merge many adjacent similar events.\n// And, in other cases, it’s needed to parse subcontent: pass some events\n// through another tokenizer and inject the result.\n\n/**\n * @typedef {[number, number, Array<Event>]} Change\n * @typedef {[number, number, number]} Jump\n */\n\n/**\n * Tracks a bunch of edits.\n */\nexport class EditMap {\n  /**\n   * Create a new edit map.\n   */\n  constructor() {\n    /**\n     * Record of changes.\n     *\n     * @type {Array<Change>}\n     */\n    this.map = [];\n  }\n\n  /**\n   * Create an edit: a remove and/or add at a certain place.\n   *\n   * @param {number} index\n   * @param {number} remove\n   * @param {Array<Event>} add\n   * @returns {undefined}\n   */\n  add(index, remove, add) {\n    addImplementation(this, index, remove, add);\n  }\n\n  // To do: add this when moving to `micromark`.\n  // /**\n  //  * Create an edit: but insert `add` before existing additions.\n  //  *\n  //  * @param {number} index\n  //  * @param {number} remove\n  //  * @param {Array<Event>} add\n  //  * @returns {undefined}\n  //  */\n  // addBefore(index, remove, add) {\n  //   addImplementation(this, index, remove, add, true)\n  // }\n\n  /**\n   * Done, change the events.\n   *\n   * @param {Array<Event>} events\n   * @returns {undefined}\n   */\n  consume(events) {\n    this.map.sort(function (a, b) {\n      return a[0] - b[0];\n    });\n\n    /* c8 ignore next 3 -- `resolve` is never called without tables, so without edits. */\n    if (this.map.length === 0) {\n      return;\n    }\n\n    // To do: if links are added in events, like they are in `markdown-rs`,\n    // this is needed.\n    // // Calculate jumps: where items in the current list move to.\n    // /** @type {Array<Jump>} */\n    // const jumps = []\n    // let index = 0\n    // let addAcc = 0\n    // let removeAcc = 0\n    // while (index < this.map.length) {\n    //   const [at, remove, add] = this.map[index]\n    //   removeAcc += remove\n    //   addAcc += add.length\n    //   jumps.push([at, removeAcc, addAcc])\n    //   index += 1\n    // }\n    //\n    // . shiftLinks(events, jumps)\n\n    let index = this.map.length;\n    /** @type {Array<Array<Event>>} */\n    const vecs = [];\n    while (index > 0) {\n      index -= 1;\n      vecs.push(events.slice(this.map[index][0] + this.map[index][1]), this.map[index][2]);\n\n      // Truncate rest.\n      events.length = this.map[index][0];\n    }\n    vecs.push(events.slice());\n    events.length = 0;\n    let slice = vecs.pop();\n    while (slice) {\n      for (const element of slice) {\n        events.push(element);\n      }\n      slice = vecs.pop();\n    }\n\n    // Truncate everything.\n    this.map.length = 0;\n  }\n}\n\n/**\n * Create an edit.\n *\n * @param {EditMap} editMap\n * @param {number} at\n * @param {number} remove\n * @param {Array<Event>} add\n * @returns {undefined}\n */\nfunction addImplementation(editMap, at, remove, add) {\n  let index = 0;\n\n  /* c8 ignore next 3 -- `resolve` is never called without tables, so without edits. */\n  if (remove === 0 && add.length === 0) {\n    return;\n  }\n  while (index < editMap.map.length) {\n    if (editMap.map[index][0] === at) {\n      editMap.map[index][1] += remove;\n\n      // To do: before not used by tables, use when moving to micromark.\n      // if (before) {\n      //   add.push(...editMap.map[index][2])\n      //   editMap.map[index][2] = add\n      // } else {\n      editMap.map[index][2].push(...add);\n      // }\n\n      return;\n    }\n    index += 1;\n  }\n  editMap.map.push([at, remove, add]);\n}\n\n// /**\n//  * Shift `previous` and `next` links according to `jumps`.\n//  *\n//  * This fixes links in case there are events removed or added between them.\n//  *\n//  * @param {Array<Event>} events\n//  * @param {Array<Jump>} jumps\n//  */\n// function shiftLinks(events, jumps) {\n//   let jumpIndex = 0\n//   let index = 0\n//   let add = 0\n//   let rm = 0\n\n//   while (index < events.length) {\n//     const rmCurr = rm\n\n//     while (jumpIndex < jumps.length && jumps[jumpIndex][0] <= index) {\n//       add = jumps[jumpIndex][2]\n//       rm = jumps[jumpIndex][1]\n//       jumpIndex += 1\n//     }\n\n//     // Ignore items that will be removed.\n//     if (rm > rmCurr) {\n//       index += rm - rmCurr\n//     } else {\n//       // ?\n//       // if let Some(link) = &events[index].link {\n//       //     if let Some(next) = link.next {\n//       //         events[next].link.as_mut().unwrap().previous = Some(index + add - rm);\n//       //         while jumpIndex < jumps.len() && jumps[jumpIndex].0 <= next {\n//       //             add = jumps[jumpIndex].2;\n//       //             rm = jumps[jumpIndex].1;\n//       //             jumpIndex += 1;\n//       //         }\n//       //         events[index].link.as_mut().unwrap().next = Some(next + add - rm);\n//       //         index = next;\n//       //         continue;\n//       //     }\n//       // }\n//       index += 1\n//     }\n//   }\n// }","/**\n * @import {Event} from 'micromark-util-types'\n */\n\n/**\n * @typedef {'center' | 'left' | 'none' | 'right'} Align\n */\n\n/**\n * Figure out the alignment of a GFM table.\n *\n * @param {Readonly<Array<Event>>} events\n *   List of events.\n * @param {number} index\n *   Table enter event.\n * @returns {Array<Align>}\n *   List of aligns.\n */\nexport function gfmTableAlign(events, index) {\n  let inDelimiterRow = false;\n  /** @type {Array<Align>} */\n  const align = [];\n  while (index < events.length) {\n    const event = events[index];\n    if (inDelimiterRow) {\n      if (event[0] === 'enter') {\n        // Start of alignment value: set a new column.\n        // To do: `markdown-rs` uses `tableDelimiterCellValue`.\n        if (event[1].type === 'tableContent') {\n          align.push(events[index + 1][1].type === 'tableDelimiterMarker' ? 'left' : 'none');\n        }\n      }\n      // Exits:\n      // End of alignment value: change the column.\n      // To do: `markdown-rs` uses `tableDelimiterCellValue`.\n      else if (event[1].type === 'tableContent') {\n        if (events[index - 1][1].type === 'tableDelimiterMarker') {\n          const alignIndex = align.length - 1;\n          align[alignIndex] = align[alignIndex] === 'left' ? 'center' : 'right';\n        }\n      }\n      // Done!\n      else if (event[1].type === 'tableDelimiterRow') {\n        break;\n      }\n    } else if (event[0] === 'enter' && event[1].type === 'tableDelimiterRow') {\n      inDelimiterRow = true;\n    }\n    index += 1;\n  }\n  return align;\n}","/**\n * @import {Event, Extension, Point, Resolver, State, Token, TokenizeContext, Tokenizer} from 'micromark-util-types'\n */\n\n/**\n * @typedef {[number, number, number, number]} Range\n *   Cell info.\n *\n * @typedef {0 | 1 | 2 | 3} RowKind\n *   Where we are: `1` for head row, `2` for delimiter row, `3` for body row.\n */\n\nimport { factorySpace } from 'micromark-factory-space';\nimport { markdownLineEnding, markdownLineEndingOrSpace, markdownSpace } from 'micromark-util-character';\nimport { EditMap } from './edit-map.js';\nimport { gfmTableAlign } from './infer.js';\n\n/**\n * Create an HTML extension for `micromark` to support GitHub tables syntax.\n *\n * @returns {Extension}\n *   Extension for `micromark` that can be passed in `extensions` to enable GFM\n *   table syntax.\n */\nexport function gfmTable() {\n  return {\n    flow: {\n      null: {\n        name: 'table',\n        tokenize: tokenizeTable,\n        resolveAll: resolveTable\n      }\n    }\n  };\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeTable(effects, ok, nok) {\n  const self = this;\n  let size = 0;\n  let sizeB = 0;\n  /** @type {boolean | undefined} */\n  let seen;\n  return start;\n\n  /**\n   * Start of a GFM table.\n   *\n   * If there is a valid table row or table head before, then we try to parse\n   * another row.\n   * Otherwise, we try to parse a head.\n   *\n   * ```markdown\n   * > | | a |\n   *     ^\n   *   | | - |\n   * > | | b |\n   *     ^\n   * ```\n   * @type {State}\n   */\n  function start(code) {\n    let index = self.events.length - 1;\n    while (index > -1) {\n      const type = self.events[index][1].type;\n      if (type === \"lineEnding\" ||\n      // Note: markdown-rs uses `whitespace` instead of `linePrefix`\n      type === \"linePrefix\") index--;else break;\n    }\n    const tail = index > -1 ? self.events[index][1].type : null;\n    const next = tail === 'tableHead' || tail === 'tableRow' ? bodyRowStart : headRowBefore;\n\n    // Don’t allow lazy body rows.\n    if (next === bodyRowStart && self.parser.lazy[self.now().line]) {\n      return nok(code);\n    }\n    return next(code);\n  }\n\n  /**\n   * Before table head row.\n   *\n   * ```markdown\n   * > | | a |\n   *     ^\n   *   | | - |\n   *   | | b |\n   * ```\n   *\n   * @type {State}\n   */\n  function headRowBefore(code) {\n    effects.enter('tableHead');\n    effects.enter('tableRow');\n    return headRowStart(code);\n  }\n\n  /**\n   * Before table head row, after whitespace.\n   *\n   * ```markdown\n   * > | | a |\n   *     ^\n   *   | | - |\n   *   | | b |\n   * ```\n   *\n   * @type {State}\n   */\n  function headRowStart(code) {\n    if (code === 124) {\n      return headRowBreak(code);\n    }\n\n    // To do: micromark-js should let us parse our own whitespace in extensions,\n    // like `markdown-rs`:\n    //\n    // ```js\n    // // 4+ spaces.\n    // if (markdownSpace(code)) {\n    //   return nok(code)\n    // }\n    // ```\n\n    seen = true;\n    // Count the first character, that isn’t a pipe, double.\n    sizeB += 1;\n    return headRowBreak(code);\n  }\n\n  /**\n   * At break in table head row.\n   *\n   * ```markdown\n   * > | | a |\n   *     ^\n   *       ^\n   *         ^\n   *   | | - |\n   *   | | b |\n   * ```\n   *\n   * @type {State}\n   */\n  function headRowBreak(code) {\n    if (code === null) {\n      // Note: in `markdown-rs`, we need to reset, in `micromark-js` we don‘t.\n      return nok(code);\n    }\n    if (markdownLineEnding(code)) {\n      // If anything other than one pipe (ignoring whitespace) was used, it’s fine.\n      if (sizeB > 1) {\n        sizeB = 0;\n        // To do: check if this works.\n        // Feel free to interrupt:\n        self.interrupt = true;\n        effects.exit('tableRow');\n        effects.enter(\"lineEnding\");\n        effects.consume(code);\n        effects.exit(\"lineEnding\");\n        return headDelimiterStart;\n      }\n\n      // Note: in `markdown-rs`, we need to reset, in `micromark-js` we don‘t.\n      return nok(code);\n    }\n    if (markdownSpace(code)) {\n      // To do: check if this is fine.\n      // effects.attempt(State::Next(StateName::GfmTableHeadRowBreak), State::Nok)\n      // State::Retry(space_or_tab(tokenizer))\n      return factorySpace(effects, headRowBreak, \"whitespace\")(code);\n    }\n    sizeB += 1;\n    if (seen) {\n      seen = false;\n      // Header cell count.\n      size += 1;\n    }\n    if (code === 124) {\n      effects.enter('tableCellDivider');\n      effects.consume(code);\n      effects.exit('tableCellDivider');\n      // Whether a delimiter was seen.\n      seen = true;\n      return headRowBreak;\n    }\n\n    // Anything else is cell data.\n    effects.enter(\"data\");\n    return headRowData(code);\n  }\n\n  /**\n   * In table head row data.\n   *\n   * ```markdown\n   * > | | a |\n   *       ^\n   *   | | - |\n   *   | | b |\n   * ```\n   *\n   * @type {State}\n   */\n  function headRowData(code) {\n    if (code === null || code === 124 || markdownLineEndingOrSpace(code)) {\n      effects.exit(\"data\");\n      return headRowBreak(code);\n    }\n    effects.consume(code);\n    return code === 92 ? headRowEscape : headRowData;\n  }\n\n  /**\n   * In table head row escape.\n   *\n   * ```markdown\n   * > | | a\\-b |\n   *         ^\n   *   | | ---- |\n   *   | | c    |\n   * ```\n   *\n   * @type {State}\n   */\n  function headRowEscape(code) {\n    if (code === 92 || code === 124) {\n      effects.consume(code);\n      return headRowData;\n    }\n    return headRowData(code);\n  }\n\n  /**\n   * Before delimiter row.\n   *\n   * ```markdown\n   *   | | a |\n   * > | | - |\n   *     ^\n   *   | | b |\n   * ```\n   *\n   * @type {State}\n   */\n  function headDelimiterStart(code) {\n    // Reset `interrupt`.\n    self.interrupt = false;\n\n    // Note: in `markdown-rs`, we need to handle piercing here too.\n    if (self.parser.lazy[self.now().line]) {\n      return nok(code);\n    }\n    effects.enter('tableDelimiterRow');\n    // Track if we’ve seen a `:` or `|`.\n    seen = false;\n    if (markdownSpace(code)) {\n      return factorySpace(effects, headDelimiterBefore, \"linePrefix\", self.parser.constructs.disable.null.includes('codeIndented') ? undefined : 4)(code);\n    }\n    return headDelimiterBefore(code);\n  }\n\n  /**\n   * Before delimiter row, after optional whitespace.\n   *\n   * Reused when a `|` is found later, to parse another cell.\n   *\n   * ```markdown\n   *   | | a |\n   * > | | - |\n   *     ^\n   *   | | b |\n   * ```\n   *\n   * @type {State}\n   */\n  function headDelimiterBefore(code) {\n    if (code === 45 || code === 58) {\n      return headDelimiterValueBefore(code);\n    }\n    if (code === 124) {\n      seen = true;\n      // If we start with a pipe, we open a cell marker.\n      effects.enter('tableCellDivider');\n      effects.consume(code);\n      effects.exit('tableCellDivider');\n      return headDelimiterCellBefore;\n    }\n\n    // More whitespace / empty row not allowed at start.\n    return headDelimiterNok(code);\n  }\n\n  /**\n   * After `|`, before delimiter cell.\n   *\n   * ```markdown\n   *   | | a |\n   * > | | - |\n   *      ^\n   * ```\n   *\n   * @type {State}\n   */\n  function headDelimiterCellBefore(code) {\n    if (markdownSpace(code)) {\n      return factorySpace(effects, headDelimiterValueBefore, \"whitespace\")(code);\n    }\n    return headDelimiterValueBefore(code);\n  }\n\n  /**\n   * Before delimiter cell value.\n   *\n   * ```markdown\n   *   | | a |\n   * > | | - |\n   *       ^\n   * ```\n   *\n   * @type {State}\n   */\n  function headDelimiterValueBefore(code) {\n    // Align: left.\n    if (code === 58) {\n      sizeB += 1;\n      seen = true;\n      effects.enter('tableDelimiterMarker');\n      effects.consume(code);\n      effects.exit('tableDelimiterMarker');\n      return headDelimiterLeftAlignmentAfter;\n    }\n\n    // Align: none.\n    if (code === 45) {\n      sizeB += 1;\n      // To do: seems weird that this *isn’t* left aligned, but that state is used?\n      return headDelimiterLeftAlignmentAfter(code);\n    }\n    if (code === null || markdownLineEnding(code)) {\n      return headDelimiterCellAfter(code);\n    }\n    return headDelimiterNok(code);\n  }\n\n  /**\n   * After delimiter cell left alignment marker.\n   *\n   * ```markdown\n   *   | | a  |\n   * > | | :- |\n   *        ^\n   * ```\n   *\n   * @type {State}\n   */\n  function headDelimiterLeftAlignmentAfter(code) {\n    if (code === 45) {\n      effects.enter('tableDelimiterFiller');\n      return headDelimiterFiller(code);\n    }\n\n    // Anything else is not ok after the left-align colon.\n    return headDelimiterNok(code);\n  }\n\n  /**\n   * In delimiter cell filler.\n   *\n   * ```markdown\n   *   | | a |\n   * > | | - |\n   *       ^\n   * ```\n   *\n   * @type {State}\n   */\n  function headDelimiterFiller(code) {\n    if (code === 45) {\n      effects.consume(code);\n      return headDelimiterFiller;\n    }\n\n    // Align is `center` if it was `left`, `right` otherwise.\n    if (code === 58) {\n      seen = true;\n      effects.exit('tableDelimiterFiller');\n      effects.enter('tableDelimiterMarker');\n      effects.consume(code);\n      effects.exit('tableDelimiterMarker');\n      return headDelimiterRightAlignmentAfter;\n    }\n    effects.exit('tableDelimiterFiller');\n    return headDelimiterRightAlignmentAfter(code);\n  }\n\n  /**\n   * After delimiter cell right alignment marker.\n   *\n   * ```markdown\n   *   | |  a |\n   * > | | -: |\n   *         ^\n   * ```\n   *\n   * @type {State}\n   */\n  function headDelimiterRightAlignmentAfter(code) {\n    if (markdownSpace(code)) {\n      return factorySpace(effects, headDelimiterCellAfter, \"whitespace\")(code);\n    }\n    return headDelimiterCellAfter(code);\n  }\n\n  /**\n   * After delimiter cell.\n   *\n   * ```markdown\n   *   | |  a |\n   * > | | -: |\n   *          ^\n   * ```\n   *\n   * @type {State}\n   */\n  function headDelimiterCellAfter(code) {\n    if (code === 124) {\n      return headDelimiterBefore(code);\n    }\n    if (code === null || markdownLineEnding(code)) {\n      // Exit when:\n      // * there was no `:` or `|` at all (it’s a thematic break or setext\n      //   underline instead)\n      // * the header cell count is not the delimiter cell count\n      if (!seen || size !== sizeB) {\n        return headDelimiterNok(code);\n      }\n\n      // Note: in markdown-rs`, a reset is needed here.\n      effects.exit('tableDelimiterRow');\n      effects.exit('tableHead');\n      // To do: in `markdown-rs`, resolvers need to be registered manually.\n      // effects.register_resolver(ResolveName::GfmTable)\n      return ok(code);\n    }\n    return headDelimiterNok(code);\n  }\n\n  /**\n   * In delimiter row, at a disallowed byte.\n   *\n   * ```markdown\n   *   | | a |\n   * > | | x |\n   *       ^\n   * ```\n   *\n   * @type {State}\n   */\n  function headDelimiterNok(code) {\n    // Note: in `markdown-rs`, we need to reset, in `micromark-js` we don‘t.\n    return nok(code);\n  }\n\n  /**\n   * Before table body row.\n   *\n   * ```markdown\n   *   | | a |\n   *   | | - |\n   * > | | b |\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function bodyRowStart(code) {\n    // Note: in `markdown-rs` we need to manually take care of a prefix,\n    // but in `micromark-js` that is done for us, so if we’re here, we’re\n    // never at whitespace.\n    effects.enter('tableRow');\n    return bodyRowBreak(code);\n  }\n\n  /**\n   * At break in table body row.\n   *\n   * ```markdown\n   *   | | a |\n   *   | | - |\n   * > | | b |\n   *     ^\n   *       ^\n   *         ^\n   * ```\n   *\n   * @type {State}\n   */\n  function bodyRowBreak(code) {\n    if (code === 124) {\n      effects.enter('tableCellDivider');\n      effects.consume(code);\n      effects.exit('tableCellDivider');\n      return bodyRowBreak;\n    }\n    if (code === null || markdownLineEnding(code)) {\n      effects.exit('tableRow');\n      return ok(code);\n    }\n    if (markdownSpace(code)) {\n      return factorySpace(effects, bodyRowBreak, \"whitespace\")(code);\n    }\n\n    // Anything else is cell content.\n    effects.enter(\"data\");\n    return bodyRowData(code);\n  }\n\n  /**\n   * In table body row data.\n   *\n   * ```markdown\n   *   | | a |\n   *   | | - |\n   * > | | b |\n   *       ^\n   * ```\n   *\n   * @type {State}\n   */\n  function bodyRowData(code) {\n    if (code === null || code === 124 || markdownLineEndingOrSpace(code)) {\n      effects.exit(\"data\");\n      return bodyRowBreak(code);\n    }\n    effects.consume(code);\n    return code === 92 ? bodyRowEscape : bodyRowData;\n  }\n\n  /**\n   * In table body row escape.\n   *\n   * ```markdown\n   *   | | a    |\n   *   | | ---- |\n   * > | | b\\-c |\n   *         ^\n   * ```\n   *\n   * @type {State}\n   */\n  function bodyRowEscape(code) {\n    if (code === 92 || code === 124) {\n      effects.consume(code);\n      return bodyRowData;\n    }\n    return bodyRowData(code);\n  }\n}\n\n/** @type {Resolver} */\n\nfunction resolveTable(events, context) {\n  let index = -1;\n  let inFirstCellAwaitingPipe = true;\n  /** @type {RowKind} */\n  let rowKind = 0;\n  /** @type {Range} */\n  let lastCell = [0, 0, 0, 0];\n  /** @type {Range} */\n  let cell = [0, 0, 0, 0];\n  let afterHeadAwaitingFirstBodyRow = false;\n  let lastTableEnd = 0;\n  /** @type {Token | undefined} */\n  let currentTable;\n  /** @type {Token | undefined} */\n  let currentBody;\n  /** @type {Token | undefined} */\n  let currentCell;\n  const map = new EditMap();\n  while (++index < events.length) {\n    const event = events[index];\n    const token = event[1];\n    if (event[0] === 'enter') {\n      // Start of head.\n      if (token.type === 'tableHead') {\n        afterHeadAwaitingFirstBodyRow = false;\n\n        // Inject previous (body end and) table end.\n        if (lastTableEnd !== 0) {\n          flushTableEnd(map, context, lastTableEnd, currentTable, currentBody);\n          currentBody = undefined;\n          lastTableEnd = 0;\n        }\n\n        // Inject table start.\n        currentTable = {\n          type: 'table',\n          start: Object.assign({}, token.start),\n          // Note: correct end is set later.\n          end: Object.assign({}, token.end)\n        };\n        map.add(index, 0, [['enter', currentTable, context]]);\n      } else if (token.type === 'tableRow' || token.type === 'tableDelimiterRow') {\n        inFirstCellAwaitingPipe = true;\n        currentCell = undefined;\n        lastCell = [0, 0, 0, 0];\n        cell = [0, index + 1, 0, 0];\n\n        // Inject table body start.\n        if (afterHeadAwaitingFirstBodyRow) {\n          afterHeadAwaitingFirstBodyRow = false;\n          currentBody = {\n            type: 'tableBody',\n            start: Object.assign({}, token.start),\n            // Note: correct end is set later.\n            end: Object.assign({}, token.end)\n          };\n          map.add(index, 0, [['enter', currentBody, context]]);\n        }\n        rowKind = token.type === 'tableDelimiterRow' ? 2 : currentBody ? 3 : 1;\n      }\n      // Cell data.\n      else if (rowKind && (token.type === \"data\" || token.type === 'tableDelimiterMarker' || token.type === 'tableDelimiterFiller')) {\n        inFirstCellAwaitingPipe = false;\n\n        // First value in cell.\n        if (cell[2] === 0) {\n          if (lastCell[1] !== 0) {\n            cell[0] = cell[1];\n            currentCell = flushCell(map, context, lastCell, rowKind, undefined, currentCell);\n            lastCell = [0, 0, 0, 0];\n          }\n          cell[2] = index;\n        }\n      } else if (token.type === 'tableCellDivider') {\n        if (inFirstCellAwaitingPipe) {\n          inFirstCellAwaitingPipe = false;\n        } else {\n          if (lastCell[1] !== 0) {\n            cell[0] = cell[1];\n            currentCell = flushCell(map, context, lastCell, rowKind, undefined, currentCell);\n          }\n          lastCell = cell;\n          cell = [lastCell[1], index, 0, 0];\n        }\n      }\n    }\n    // Exit events.\n    else if (token.type === 'tableHead') {\n      afterHeadAwaitingFirstBodyRow = true;\n      lastTableEnd = index;\n    } else if (token.type === 'tableRow' || token.type === 'tableDelimiterRow') {\n      lastTableEnd = index;\n      if (lastCell[1] !== 0) {\n        cell[0] = cell[1];\n        currentCell = flushCell(map, context, lastCell, rowKind, index, currentCell);\n      } else if (cell[1] !== 0) {\n        currentCell = flushCell(map, context, cell, rowKind, index, currentCell);\n      }\n      rowKind = 0;\n    } else if (rowKind && (token.type === \"data\" || token.type === 'tableDelimiterMarker' || token.type === 'tableDelimiterFiller')) {\n      cell[3] = index;\n    }\n  }\n  if (lastTableEnd !== 0) {\n    flushTableEnd(map, context, lastTableEnd, currentTable, currentBody);\n  }\n  map.consume(context.events);\n\n  // To do: move this into `html`, when events are exposed there.\n  // That’s what `markdown-rs` does.\n  // That needs updates to `mdast-util-gfm-table`.\n  index = -1;\n  while (++index < context.events.length) {\n    const event = context.events[index];\n    if (event[0] === 'enter' && event[1].type === 'table') {\n      event[1]._align = gfmTableAlign(context.events, index);\n    }\n  }\n  return events;\n}\n\n/**\n * Generate a cell.\n *\n * @param {EditMap} map\n * @param {Readonly<TokenizeContext>} context\n * @param {Readonly<Range>} range\n * @param {RowKind} rowKind\n * @param {number | undefined} rowEnd\n * @param {Token | undefined} previousCell\n * @returns {Token | undefined}\n */\n// eslint-disable-next-line max-params\nfunction flushCell(map, context, range, rowKind, rowEnd, previousCell) {\n  // `markdown-rs` uses:\n  // rowKind === 2 ? 'tableDelimiterCell' : 'tableCell'\n  const groupName = rowKind === 1 ? 'tableHeader' : rowKind === 2 ? 'tableDelimiter' : 'tableData';\n  // `markdown-rs` uses:\n  // rowKind === 2 ? 'tableDelimiterCellValue' : 'tableCellText'\n  const valueName = 'tableContent';\n\n  // Insert an exit for the previous cell, if there is one.\n  //\n  // ```markdown\n  // > | | aa | bb | cc |\n  //          ^-- exit\n  //           ^^^^-- this cell\n  // ```\n  if (range[0] !== 0) {\n    previousCell.end = Object.assign({}, getPoint(context.events, range[0]));\n    map.add(range[0], 0, [['exit', previousCell, context]]);\n  }\n\n  // Insert enter of this cell.\n  //\n  // ```markdown\n  // > | | aa | bb | cc |\n  //           ^-- enter\n  //           ^^^^-- this cell\n  // ```\n  const now = getPoint(context.events, range[1]);\n  previousCell = {\n    type: groupName,\n    start: Object.assign({}, now),\n    // Note: correct end is set later.\n    end: Object.assign({}, now)\n  };\n  map.add(range[1], 0, [['enter', previousCell, context]]);\n\n  // Insert text start at first data start and end at last data end, and\n  // remove events between.\n  //\n  // ```markdown\n  // > | | aa | bb | cc |\n  //            ^-- enter\n  //             ^-- exit\n  //           ^^^^-- this cell\n  // ```\n  if (range[2] !== 0) {\n    const relatedStart = getPoint(context.events, range[2]);\n    const relatedEnd = getPoint(context.events, range[3]);\n    /** @type {Token} */\n    const valueToken = {\n      type: valueName,\n      start: Object.assign({}, relatedStart),\n      end: Object.assign({}, relatedEnd)\n    };\n    map.add(range[2], 0, [['enter', valueToken, context]]);\n    if (rowKind !== 2) {\n      // Fix positional info on remaining events\n      const start = context.events[range[2]];\n      const end = context.events[range[3]];\n      start[1].end = Object.assign({}, end[1].end);\n      start[1].type = \"chunkText\";\n      start[1].contentType = \"text\";\n\n      // Remove if needed.\n      if (range[3] > range[2] + 1) {\n        const a = range[2] + 1;\n        const b = range[3] - range[2] - 1;\n        map.add(a, b, []);\n      }\n    }\n    map.add(range[3] + 1, 0, [['exit', valueToken, context]]);\n  }\n\n  // Insert an exit for the last cell, if at the row end.\n  //\n  // ```markdown\n  // > | | aa | bb | cc |\n  //                    ^-- exit\n  //               ^^^^^^-- this cell (the last one contains two “between” parts)\n  // ```\n  if (rowEnd !== undefined) {\n    previousCell.end = Object.assign({}, getPoint(context.events, rowEnd));\n    map.add(rowEnd, 0, [['exit', previousCell, context]]);\n    previousCell = undefined;\n  }\n  return previousCell;\n}\n\n/**\n * Generate table end (and table body end).\n *\n * @param {Readonly<EditMap>} map\n * @param {Readonly<TokenizeContext>} context\n * @param {number} index\n * @param {Token} table\n * @param {Token | undefined} tableBody\n */\n// eslint-disable-next-line max-params\nfunction flushTableEnd(map, context, index, table, tableBody) {\n  /** @type {Array<Event>} */\n  const exits = [];\n  const related = getPoint(context.events, index);\n  if (tableBody) {\n    tableBody.end = Object.assign({}, related);\n    exits.push(['exit', tableBody, context]);\n  }\n  table.end = Object.assign({}, related);\n  exits.push(['exit', table, context]);\n  map.add(index + 1, 0, exits);\n}\n\n/**\n * @param {Readonly<Array<Event>>} events\n * @param {number} index\n * @returns {Readonly<Point>}\n */\nfunction getPoint(events, index) {\n  const event = events[index];\n  const side = event[0] === 'enter' ? 'start' : 'end';\n  return event[1][side];\n}","/**\n * @import {Extension, State, TokenizeContext, Tokenizer} from 'micromark-util-types'\n */\n\nimport { factorySpace } from 'micromark-factory-space';\nimport { markdownLineEnding, markdownLineEndingOrSpace, markdownSpace } from 'micromark-util-character';\nconst tasklistCheck = {\n  name: 'tasklistCheck',\n  tokenize: tokenizeTasklistCheck\n};\n\n/**\n * Create an HTML extension for `micromark` to support GFM task list items\n * syntax.\n *\n * @returns {Extension}\n *   Extension for `micromark` that can be passed in `htmlExtensions` to\n *   support GFM task list items when serializing to HTML.\n */\nexport function gfmTaskListItem() {\n  return {\n    text: {\n      [91]: tasklistCheck\n    }\n  };\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeTasklistCheck(effects, ok, nok) {\n  const self = this;\n  return open;\n\n  /**\n   * At start of task list item check.\n   *\n   * ```markdown\n   * > | * [x] y.\n   *       ^\n   * ```\n   *\n   * @type {State}\n   */\n  function open(code) {\n    if (\n    // Exit if there’s stuff before.\n    self.previous !== null ||\n    // Exit if not in the first content that is the first child of a list\n    // item.\n    !self._gfmTasklistFirstContentOfListItem) {\n      return nok(code);\n    }\n    effects.enter('taskListCheck');\n    effects.enter('taskListCheckMarker');\n    effects.consume(code);\n    effects.exit('taskListCheckMarker');\n    return inside;\n  }\n\n  /**\n   * In task list item check.\n   *\n   * ```markdown\n   * > | * [x] y.\n   *        ^\n   * ```\n   *\n   * @type {State}\n   */\n  function inside(code) {\n    // Currently we match how GH works in files.\n    // To match how GH works in comments, use `markdownSpace` (`[\\t ]`) instead\n    // of `markdownLineEndingOrSpace` (`[\\t\\n\\r ]`).\n    if (markdownLineEndingOrSpace(code)) {\n      effects.enter('taskListCheckValueUnchecked');\n      effects.consume(code);\n      effects.exit('taskListCheckValueUnchecked');\n      return close;\n    }\n    if (code === 88 || code === 120) {\n      effects.enter('taskListCheckValueChecked');\n      effects.consume(code);\n      effects.exit('taskListCheckValueChecked');\n      return close;\n    }\n    return nok(code);\n  }\n\n  /**\n   * At close of task list item check.\n   *\n   * ```markdown\n   * > | * [x] y.\n   *         ^\n   * ```\n   *\n   * @type {State}\n   */\n  function close(code) {\n    if (code === 93) {\n      effects.enter('taskListCheckMarker');\n      effects.consume(code);\n      effects.exit('taskListCheckMarker');\n      effects.exit('taskListCheck');\n      return after;\n    }\n    return nok(code);\n  }\n\n  /**\n   * @type {State}\n   */\n  function after(code) {\n    // EOL in paragraph means there must be something else after it.\n    if (markdownLineEnding(code)) {\n      return ok(code);\n    }\n\n    // Space or tab?\n    // Check what comes after.\n    if (markdownSpace(code)) {\n      return effects.check({\n        tokenize: spaceThenNonSpace\n      }, ok, nok)(code);\n    }\n\n    // EOF, or non-whitespace, both wrong.\n    return nok(code);\n  }\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction spaceThenNonSpace(effects, ok, nok) {\n  return factorySpace(effects, after, \"whitespace\");\n\n  /**\n   * After whitespace, after task list item check.\n   *\n   * ```markdown\n   * > | * [x] y.\n   *           ^\n   * ```\n   *\n   * @type {State}\n   */\n  function after(code) {\n    // EOF means there was nothing, so bad.\n    // EOL means there’s content after it, so good.\n    // Impossible to have more spaces.\n    // Anything else is good.\n    return code === null ? nok(code) : ok(code);\n  }\n}","/**\n * @typedef {import('micromark-extension-gfm-footnote').HtmlOptions} HtmlOptions\n * @typedef {import('micromark-extension-gfm-strikethrough').Options} Options\n * @typedef {import('micromark-util-types').Extension} Extension\n * @typedef {import('micromark-util-types').HtmlExtension} HtmlExtension\n */\n\nimport {\n  combineExtensions,\n  combineHtmlExtensions\n} from 'micromark-util-combine-extensions'\nimport {\n  gfmAutolinkLiteral,\n  gfmAutolinkLiteralHtml\n} from 'micromark-extension-gfm-autolink-literal'\nimport {gfmFootnote, gfmFootnoteHtml} from 'micromark-extension-gfm-footnote'\nimport {\n  gfmStrikethrough,\n  gfmStrikethroughHtml\n} from 'micromark-extension-gfm-strikethrough'\nimport {gfmTable, gfmTableHtml} from 'micromark-extension-gfm-table'\nimport {gfmTagfilterHtml} from 'micromark-extension-gfm-tagfilter'\nimport {\n  gfmTaskListItem,\n  gfmTaskListItemHtml\n} from 'micromark-extension-gfm-task-list-item'\n\n/**\n * Create an extension for `micromark` to enable GFM syntax.\n *\n * @param {Options | null | undefined} [options]\n *   Configuration (optional).\n *\n *   Passed to `micromark-extens-gfm-strikethrough`.\n * @returns {Extension}\n *   Extension for `micromark` that can be passed in `extensions` to enable GFM\n *   syntax.\n */\nexport function gfm(options) {\n  return combineExtensions([\n    gfmAutolinkLiteral(),\n    gfmFootnote(),\n    gfmStrikethrough(options),\n    gfmTable(),\n    gfmTaskListItem()\n  ])\n}\n\n/**\n * Create an extension for `micromark` to support GFM when serializing to HTML.\n *\n * @param {HtmlOptions | null | undefined} [options]\n *   Configuration (optional).\n *\n *   Passed to `micromark-extens-gfm-footnote`.\n * @returns {HtmlExtension}\n *   Extension for `micromark` that can be passed in `htmlExtensions` to\n *   support GFM when serializing to HTML.\n */\nexport function gfmHtml(options) {\n  return combineHtmlExtensions([\n    gfmAutolinkLiteralHtml(),\n    gfmFootnoteHtml(options),\n    gfmStrikethroughHtml(),\n    gfmTableHtml(),\n    gfmTagfilterHtml(),\n    gfmTaskListItemHtml()\n  ])\n}\n","/**\n * @import {Root} from 'mdast'\n * @import {Options} from 'remark-gfm'\n * @import {} from 'remark-parse'\n * @import {} from 'remark-stringify'\n * @import {Processor} from 'unified'\n */\n\nimport {gfmFromMarkdown, gfmToMarkdown} from 'mdast-util-gfm'\nimport {gfm} from 'micromark-extension-gfm'\n\n/** @type {Options} */\nconst emptyOptions = {}\n\n/**\n * Add support GFM (autolink literals, footnotes, strikethrough, tables,\n * tasklists).\n *\n * @param {Options | null | undefined} [options]\n *   Configuration (optional).\n * @returns {undefined}\n *   Nothing.\n */\nexport default function remarkGfm(options) {\n  // @ts-expect-error: TS is wrong about `this`.\n  // eslint-disable-next-line unicorn/no-this-assignment\n  const self = /** @type {Processor<Root>} */ (this)\n  const settings = options || emptyOptions\n  const data = self.data()\n\n  const micromarkExtensions =\n    data.micromarkExtensions || (data.micromarkExtensions = [])\n  const fromMarkdownExtensions =\n    data.fromMarkdownExtensions || (data.fromMarkdownExtensions = [])\n  const toMarkdownExtensions =\n    data.toMarkdownExtensions || (data.toMarkdownExtensions = [])\n\n  micromarkExtensions.push(gfm(settings))\n  fromMarkdownExtensions.push(gfmFromMarkdown())\n  toMarkdownExtensions.push(gfmToMarkdown(settings))\n}\n","/**\n * @typedef {import('hast').Element} HastElement\n * @typedef {import('hast').ElementContent} HastElementContent\n * @typedef {import('mdast-util-from-markdown').CompileContext} CompileContext\n * @typedef {import('mdast-util-from-markdown').Extension} FromMarkdownExtension\n * @typedef {import('mdast-util-from-markdown').Handle} FromMarkdownHandle\n * @typedef {import('mdast-util-to-markdown').Handle} ToMarkdownHandle\n * @typedef {import('mdast-util-to-markdown').Options} ToMarkdownExtension\n * @typedef {import('../index.js').InlineMath} InlineMath\n * @typedef {import('../index.js').Math} Math\n *\n * @typedef ToOptions\n *   Configuration.\n * @property {boolean | null | undefined} [singleDollarTextMath=true]\n *   Whether to support math (text) with a single dollar (default: `true`).\n *\n *   Single dollars work in Pandoc and many other places, but often interfere\n *   with “normal” dollars in text.\n *   If you turn this off, you can still use two or more dollars for text math.\n */\n\nimport {ok as assert} from 'devlop'\nimport {longestStreak} from 'longest-streak'\n\n/**\n * Create an extension for `mdast-util-from-markdown`.\n *\n * @returns {FromMarkdownExtension}\n *   Extension for `mdast-util-from-markdown`.\n */\nexport function mathFromMarkdown() {\n  return {\n    enter: {\n      mathFlow: enterMathFlow,\n      mathFlowFenceMeta: enterMathFlowMeta,\n      mathText: enterMathText\n    },\n    exit: {\n      mathFlow: exitMathFlow,\n      mathFlowFence: exitMathFlowFence,\n      mathFlowFenceMeta: exitMathFlowMeta,\n      mathFlowValue: exitMathData,\n      mathText: exitMathText,\n      mathTextData: exitMathData\n    }\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {FromMarkdownHandle}\n   */\n  function enterMathFlow(token) {\n    /** @type {HastElement} */\n    const code = {\n      type: 'element',\n      tagName: 'code',\n      properties: {className: ['language-math', 'math-display']},\n      children: []\n    }\n    this.enter(\n      {\n        type: 'math',\n        meta: null,\n        value: '',\n        data: {hName: 'pre', hChildren: [code]}\n      },\n      token\n    )\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {FromMarkdownHandle}\n   */\n  function enterMathFlowMeta() {\n    this.buffer()\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {FromMarkdownHandle}\n   */\n  function exitMathFlowMeta() {\n    const data = this.resume()\n    const node = this.stack[this.stack.length - 1]\n    assert(node.type === 'math')\n    node.meta = data\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {FromMarkdownHandle}\n   */\n  function exitMathFlowFence() {\n    // Exit if this is the closing fence.\n    if (this.data.mathFlowInside) return\n    this.buffer()\n    this.data.mathFlowInside = true\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {FromMarkdownHandle}\n   */\n  function exitMathFlow(token) {\n    const data = this.resume().replace(/^(\\r?\\n|\\r)|(\\r?\\n|\\r)$/g, '')\n    const node = this.stack[this.stack.length - 1]\n    assert(node.type === 'math')\n    this.exit(token)\n    node.value = data\n    // @ts-expect-error: we defined it in `enterMathFlow`.\n    const code = /** @type {HastElement} */ (node.data.hChildren[0])\n    assert(code.type === 'element')\n    assert(code.tagName === 'code')\n    code.children.push({type: 'text', value: data})\n    this.data.mathFlowInside = undefined\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {FromMarkdownHandle}\n   */\n  function enterMathText(token) {\n    this.enter(\n      {\n        type: 'inlineMath',\n        value: '',\n        data: {\n          hName: 'code',\n          hProperties: {className: ['language-math', 'math-inline']},\n          hChildren: []\n        }\n      },\n      token\n    )\n    this.buffer()\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {FromMarkdownHandle}\n   */\n  function exitMathText(token) {\n    const data = this.resume()\n    const node = this.stack[this.stack.length - 1]\n    assert(node.type === 'inlineMath')\n    this.exit(token)\n    node.value = data\n    const children = /** @type {Array<HastElementContent>} */ (\n      // @ts-expect-error: we defined it in `enterMathFlow`.\n      node.data.hChildren\n    )\n    children.push({type: 'text', value: data})\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {FromMarkdownHandle}\n   */\n  function exitMathData(token) {\n    this.config.enter.data.call(this, token)\n    this.config.exit.data.call(this, token)\n  }\n}\n\n/**\n * Create an extension for `mdast-util-to-markdown`.\n *\n * @param {ToOptions | null | undefined} [options]\n *   Configuration (optional).\n * @returns {ToMarkdownExtension}\n *   Extension for `mdast-util-to-markdown`.\n */\nexport function mathToMarkdown(options) {\n  let single = (options || {}).singleDollarTextMath\n\n  if (single === null || single === undefined) {\n    single = true\n  }\n\n  inlineMath.peek = inlineMathPeek\n\n  return {\n    unsafe: [\n      {character: '\\r', inConstruct: 'mathFlowMeta'},\n      {character: '\\n', inConstruct: 'mathFlowMeta'},\n      {\n        character: '$',\n        after: single ? undefined : '\\\\$',\n        inConstruct: 'phrasing'\n      },\n      {character: '$', inConstruct: 'mathFlowMeta'},\n      {atBreak: true, character: '$', after: '\\\\$'}\n    ],\n    handlers: {math, inlineMath}\n  }\n\n  /**\n   * @type {ToMarkdownHandle}\n   * @param {Math} node\n   */\n  // Note: fixing this code? Please also fix the similar code for code:\n  // <https://github.com/syntax-tree/mdast-util-to-markdown/blob/main/lib/handle/code.js>\n  function math(node, _, state, info) {\n    const raw = node.value || ''\n    const tracker = state.createTracker(info)\n    const sequence = '$'.repeat(Math.max(longestStreak(raw, '$') + 1, 2))\n    const exit = state.enter('mathFlow')\n    let value = tracker.move(sequence)\n\n    if (node.meta) {\n      const subexit = state.enter('mathFlowMeta')\n      value += tracker.move(\n        state.safe(node.meta, {\n          after: '\\n',\n          before: value,\n          encode: ['$'],\n          ...tracker.current()\n        })\n      )\n      subexit()\n    }\n\n    value += tracker.move('\\n')\n\n    if (raw) {\n      value += tracker.move(raw + '\\n')\n    }\n\n    value += tracker.move(sequence)\n    exit()\n    return value\n  }\n\n  /**\n   * @type {ToMarkdownHandle}\n   * @param {InlineMath} node\n   */\n  // Note: fixing this code? Please also fix the similar code for inline code:\n  // <https://github.com/syntax-tree/mdast-util-to-markdown/blob/main/lib/handle/inline-code.js>\n  function inlineMath(node, _, state) {\n    let value = node.value || ''\n    let size = 1\n\n    if (!single) size++\n\n    // If there is a single dollar sign on its own in the math, use a fence of\n    // two.\n    // If there are two in a row, use one.\n    while (\n      new RegExp('(^|[^$])' + '\\\\$'.repeat(size) + '([^$]|$)').test(value)\n    ) {\n      size++\n    }\n\n    const sequence = '$'.repeat(size)\n\n    // If this is not just spaces or eols (tabs don’t count), and either the\n    // first and last character are a space or eol, or the first or last\n    // character are dollar signs, then pad with spaces.\n    if (\n      // Contains non-space.\n      /[^ \\r\\n]/.test(value) &&\n      // Starts with space and ends with space.\n      ((/^[ \\r\\n]/.test(value) && /[ \\r\\n]$/.test(value)) ||\n        // Starts or ends with dollar.\n        /^\\$|\\$$/.test(value))\n    ) {\n      value = ' ' + value + ' '\n    }\n\n    let index = -1\n\n    // We have a potential problem: certain characters after eols could result in\n    // blocks being seen.\n    // For example, if someone injected the string `'\\n# b'`, then that would\n    // result in an ATX heading.\n    // We can’t escape characters in `inlineMath`, but because eols are\n    // transformed to spaces when going from markdown to HTML anyway, we can swap\n    // them out.\n    while (++index < state.unsafe.length) {\n      const pattern = state.unsafe[index]\n\n      // Only look for `atBreak`s.\n      // Btw: note that `atBreak` patterns will always start the regex at LF or\n      // CR.\n      if (!pattern.atBreak) continue\n\n      const expression = state.compilePattern(pattern)\n      /** @type {RegExpExecArray | null} */\n      let match\n\n      while ((match = expression.exec(value))) {\n        let position = match.index\n\n        // Support CRLF (patterns only look for one of the characters).\n        if (\n          value.codePointAt(position) === 10 /* `\\n` */ &&\n          value.codePointAt(position - 1) === 13 /* `\\r` */\n        ) {\n          position--\n        }\n\n        value = value.slice(0, position) + ' ' + value.slice(match.index + 1)\n      }\n    }\n\n    return sequence + value + sequence\n  }\n\n  /**\n   * @returns {string}\n   */\n  function inlineMathPeek() {\n    return '$'\n  }\n}\n","/**\n * @import {Construct, State, TokenizeContext, Tokenizer} from 'micromark-util-types'\n */\n\nimport { factorySpace } from 'micromark-factory-space';\nimport { markdownLineEnding } from 'micromark-util-character';\n/** @type {Construct} */\nexport const mathFlow = {\n  tokenize: tokenizeMathFenced,\n  concrete: true,\n  name: 'mathFlow'\n};\n\n/** @type {Construct} */\nconst nonLazyContinuation = {\n  tokenize: tokenizeNonLazyContinuation,\n  partial: true\n};\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeMathFenced(effects, ok, nok) {\n  const self = this;\n  const tail = self.events[self.events.length - 1];\n  const initialSize = tail && tail[1].type === \"linePrefix\" ? tail[2].sliceSerialize(tail[1], true).length : 0;\n  let sizeOpen = 0;\n  return start;\n\n  /**\n   * Start of math.\n   *\n   * ```markdown\n   * > | $$\n   *     ^\n   *   | \\frac{1}{2}\n   *   | $$\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    effects.enter('mathFlow');\n    effects.enter('mathFlowFence');\n    effects.enter('mathFlowFenceSequence');\n    return sequenceOpen(code);\n  }\n\n  /**\n   * In opening fence sequence.\n   *\n   * ```markdown\n   * > | $$\n   *      ^\n   *   | \\frac{1}{2}\n   *   | $$\n   * ```\n   *\n   * @type {State}\n   */\n  function sequenceOpen(code) {\n    if (code === 36) {\n      effects.consume(code);\n      sizeOpen++;\n      return sequenceOpen;\n    }\n    if (sizeOpen < 2) {\n      return nok(code);\n    }\n    effects.exit('mathFlowFenceSequence');\n    return factorySpace(effects, metaBefore, \"whitespace\")(code);\n  }\n\n  /**\n   * In opening fence, before meta.\n   *\n   * ```markdown\n   * > | $$asciimath\n   *       ^\n   *   | x < y\n   *   | $$\n   * ```\n   *\n   * @type {State}\n   */\n\n  function metaBefore(code) {\n    if (code === null || markdownLineEnding(code)) {\n      return metaAfter(code);\n    }\n    effects.enter('mathFlowFenceMeta');\n    effects.enter(\"chunkString\", {\n      contentType: \"string\"\n    });\n    return meta(code);\n  }\n\n  /**\n   * In meta.\n   *\n   * ```markdown\n   * > | $$asciimath\n   *        ^\n   *   | x < y\n   *   | $$\n   * ```\n   *\n   * @type {State}\n   */\n  function meta(code) {\n    if (code === null || markdownLineEnding(code)) {\n      effects.exit(\"chunkString\");\n      effects.exit('mathFlowFenceMeta');\n      return metaAfter(code);\n    }\n    if (code === 36) {\n      return nok(code);\n    }\n    effects.consume(code);\n    return meta;\n  }\n\n  /**\n   * After meta.\n   *\n   * ```markdown\n   * > | $$\n   *       ^\n   *   | \\frac{1}{2}\n   *   | $$\n   * ```\n   *\n   * @type {State}\n   */\n  function metaAfter(code) {\n    // Guaranteed to be eol/eof.\n    effects.exit('mathFlowFence');\n    if (self.interrupt) {\n      return ok(code);\n    }\n    return effects.attempt(nonLazyContinuation, beforeNonLazyContinuation, after)(code);\n  }\n\n  /**\n   * After eol/eof in math, at a non-lazy closing fence or content.\n   *\n   * ```markdown\n   *   | $$\n   * > | \\frac{1}{2}\n   *     ^\n   * > | $$\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function beforeNonLazyContinuation(code) {\n    return effects.attempt({\n      tokenize: tokenizeClosingFence,\n      partial: true\n    }, after, contentStart)(code);\n  }\n\n  /**\n   * Before math content, definitely not before a closing fence.\n   *\n   * ```markdown\n   *   | $$\n   * > | \\frac{1}{2}\n   *     ^\n   *   | $$\n   * ```\n   *\n   * @type {State}\n   */\n  function contentStart(code) {\n    return (initialSize ? factorySpace(effects, beforeContentChunk, \"linePrefix\", initialSize + 1) : beforeContentChunk)(code);\n  }\n\n  /**\n   * Before math content, after optional prefix.\n   *\n   * ```markdown\n   *   | $$\n   * > | \\frac{1}{2}\n   *     ^\n   *   | $$\n   * ```\n   *\n   * @type {State}\n   */\n  function beforeContentChunk(code) {\n    if (code === null) {\n      return after(code);\n    }\n    if (markdownLineEnding(code)) {\n      return effects.attempt(nonLazyContinuation, beforeNonLazyContinuation, after)(code);\n    }\n    effects.enter('mathFlowValue');\n    return contentChunk(code);\n  }\n\n  /**\n   * In math content.\n   *\n   * ```markdown\n   *   | $$\n   * > | \\frac{1}{2}\n   *      ^\n   *   | $$\n   * ```\n   *\n   * @type {State}\n   */\n  function contentChunk(code) {\n    if (code === null || markdownLineEnding(code)) {\n      effects.exit('mathFlowValue');\n      return beforeContentChunk(code);\n    }\n    effects.consume(code);\n    return contentChunk;\n  }\n\n  /**\n   * After math (ha!).\n   *\n   * ```markdown\n   *   | $$\n   *   | \\frac{1}{2}\n   * > | $$\n   *       ^\n   * ```\n   *\n   * @type {State}\n   */\n  function after(code) {\n    effects.exit('mathFlow');\n    return ok(code);\n  }\n\n  /** @type {Tokenizer} */\n  function tokenizeClosingFence(effects, ok, nok) {\n    let size = 0;\n    /**\n     * Before closing fence, at optional whitespace.\n     *\n     * ```markdown\n     *   | $$\n     *   | \\frac{1}{2}\n     * > | $$\n     *     ^\n     * ```\n     */\n    return factorySpace(effects, beforeSequenceClose, \"linePrefix\", self.parser.constructs.disable.null.includes('codeIndented') ? undefined : 4);\n\n    /**\n     * In closing fence, after optional whitespace, at sequence.\n     *\n     * ```markdown\n     *   | $$\n     *   | \\frac{1}{2}\n     * > | $$\n     *     ^\n     * ```\n     *\n     * @type {State}\n     */\n    function beforeSequenceClose(code) {\n      effects.enter('mathFlowFence');\n      effects.enter('mathFlowFenceSequence');\n      return sequenceClose(code);\n    }\n\n    /**\n     * In closing fence sequence.\n     *\n     * ```markdown\n     *   | $$\n     *   | \\frac{1}{2}\n     * > | $$\n     *      ^\n     * ```\n     *\n     * @type {State}\n     */\n    function sequenceClose(code) {\n      if (code === 36) {\n        size++;\n        effects.consume(code);\n        return sequenceClose;\n      }\n      if (size < sizeOpen) {\n        return nok(code);\n      }\n      effects.exit('mathFlowFenceSequence');\n      return factorySpace(effects, afterSequenceClose, \"whitespace\")(code);\n    }\n\n    /**\n     * After closing fence sequence, after optional whitespace.\n     *\n     * ```markdown\n     *   | $$\n     *   | \\frac{1}{2}\n     * > | $$\n     *       ^\n     * ```\n     *\n     * @type {State}\n     */\n    function afterSequenceClose(code) {\n      if (code === null || markdownLineEnding(code)) {\n        effects.exit('mathFlowFence');\n        return ok(code);\n      }\n      return nok(code);\n    }\n  }\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeNonLazyContinuation(effects, ok, nok) {\n  const self = this;\n  return start;\n\n  /** @type {State} */\n  function start(code) {\n    if (code === null) {\n      return ok(code);\n    }\n    effects.enter(\"lineEnding\");\n    effects.consume(code);\n    effects.exit(\"lineEnding\");\n    return lineStart;\n  }\n\n  /** @type {State} */\n  function lineStart(code) {\n    return self.parser.lazy[self.now().line] ? nok(code) : ok(code);\n  }\n}","/**\n * @import {Options} from 'micromark-extension-math'\n * @import {Construct, Previous, Resolver, State, Token, TokenizeContext, Tokenizer} from 'micromark-util-types'\n */\n\n// To do: next major: clean spaces in HTML compiler.\n// This has to be coordinated together with `mdast-util-math`.\n\nimport { markdownLineEnding } from 'micromark-util-character';\n/**\n * @param {Options | null | undefined} [options={}]\n *   Configuration (default: `{}`).\n * @returns {Construct}\n *   Construct.\n */\nexport function mathText(options) {\n  const options_ = options || {};\n  let single = options_.singleDollarTextMath;\n  if (single === null || single === undefined) {\n    single = true;\n  }\n  return {\n    tokenize: tokenizeMathText,\n    resolve: resolveMathText,\n    previous,\n    name: 'mathText'\n  };\n\n  /**\n   * @this {TokenizeContext}\n   * @type {Tokenizer}\n   */\n  function tokenizeMathText(effects, ok, nok) {\n    const self = this;\n    let sizeOpen = 0;\n    /** @type {number} */\n    let size;\n    /** @type {Token} */\n    let token;\n    return start;\n\n    /**\n     * Start of math (text).\n     *\n     * ```markdown\n     * > | $a$\n     *     ^\n     * > | \\$a$\n     *      ^\n     * ```\n     *\n     * @type {State}\n     */\n    function start(code) {\n      effects.enter('mathText');\n      effects.enter('mathTextSequence');\n      return sequenceOpen(code);\n    }\n\n    /**\n     * In opening sequence.\n     *\n     * ```markdown\n     * > | $a$\n     *     ^\n     * ```\n     *\n     * @type {State}\n     */\n\n    function sequenceOpen(code) {\n      if (code === 36) {\n        effects.consume(code);\n        sizeOpen++;\n        return sequenceOpen;\n      }\n\n      // Not enough markers in the sequence.\n      if (sizeOpen < 2 && !single) {\n        return nok(code);\n      }\n      effects.exit('mathTextSequence');\n      return between(code);\n    }\n\n    /**\n     * Between something and something else.\n     *\n     * ```markdown\n     * > | $a$\n     *      ^^\n     * ```\n     *\n     * @type {State}\n     */\n    function between(code) {\n      if (code === null) {\n        return nok(code);\n      }\n      if (code === 36) {\n        token = effects.enter('mathTextSequence');\n        size = 0;\n        return sequenceClose(code);\n      }\n\n      // Tabs don’t work, and virtual spaces don’t make sense.\n      if (code === 32) {\n        effects.enter('space');\n        effects.consume(code);\n        effects.exit('space');\n        return between;\n      }\n      if (markdownLineEnding(code)) {\n        effects.enter(\"lineEnding\");\n        effects.consume(code);\n        effects.exit(\"lineEnding\");\n        return between;\n      }\n\n      // Data.\n      effects.enter('mathTextData');\n      return data(code);\n    }\n\n    /**\n     * In data.\n     *\n     * ```markdown\n     * > | $a$\n     *      ^\n     * ```\n     *\n     * @type {State}\n     */\n    function data(code) {\n      if (code === null || code === 32 || code === 36 || markdownLineEnding(code)) {\n        effects.exit('mathTextData');\n        return between(code);\n      }\n      effects.consume(code);\n      return data;\n    }\n\n    /**\n     * In closing sequence.\n     *\n     * ```markdown\n     * > | `a`\n     *       ^\n     * ```\n     *\n     * @type {State}\n     */\n\n    function sequenceClose(code) {\n      // More.\n      if (code === 36) {\n        effects.consume(code);\n        size++;\n        return sequenceClose;\n      }\n\n      // Done!\n      if (size === sizeOpen) {\n        effects.exit('mathTextSequence');\n        effects.exit('mathText');\n        return ok(code);\n      }\n\n      // More or less accents: mark as data.\n      token.type = 'mathTextData';\n      return data(code);\n    }\n  }\n}\n\n/** @type {Resolver} */\nfunction resolveMathText(events) {\n  let tailExitIndex = events.length - 4;\n  let headEnterIndex = 3;\n  /** @type {number} */\n  let index;\n  /** @type {number | undefined} */\n  let enter;\n\n  // If we start and end with an EOL or a space.\n  if ((events[headEnterIndex][1].type === \"lineEnding\" || events[headEnterIndex][1].type === 'space') && (events[tailExitIndex][1].type === \"lineEnding\" || events[tailExitIndex][1].type === 'space')) {\n    index = headEnterIndex;\n\n    // And we have data.\n    while (++index < tailExitIndex) {\n      if (events[index][1].type === 'mathTextData') {\n        // Then we have padding.\n        events[tailExitIndex][1].type = 'mathTextPadding';\n        events[headEnterIndex][1].type = 'mathTextPadding';\n        headEnterIndex += 2;\n        tailExitIndex -= 2;\n        break;\n      }\n    }\n  }\n\n  // Merge adjacent spaces and data.\n  index = headEnterIndex - 1;\n  tailExitIndex++;\n  while (++index <= tailExitIndex) {\n    if (enter === undefined) {\n      if (index !== tailExitIndex && events[index][1].type !== \"lineEnding\") {\n        enter = index;\n      }\n    } else if (index === tailExitIndex || events[index][1].type === \"lineEnding\") {\n      events[enter][1].type = 'mathTextData';\n      if (index !== enter + 2) {\n        events[enter][1].end = events[index - 1][1].end;\n        events.splice(enter + 2, index - enter - 2);\n        tailExitIndex -= index - enter - 2;\n        index = enter + 2;\n      }\n      enter = undefined;\n    }\n  }\n  return events;\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Previous}\n */\nfunction previous(code) {\n  // If there is a previous code, there will always be a tail.\n  return code !== 36 || this.events[this.events.length - 1][1].type === \"characterEscape\";\n}","/**\n * @import {Options} from 'micromark-extension-math'\n * @import {Extension} from 'micromark-util-types'\n */\n\nimport { mathFlow } from './math-flow.js';\nimport { mathText } from './math-text.js';\n\n/**\n * Create an extension for `micromark` to enable math syntax.\n *\n * @param {Options | null | undefined} [options={}]\n *   Configuration (default: `{}`).\n * @returns {Extension}\n *   Extension for `micromark` that can be passed in `extensions`, to\n *   enable math syntax.\n */\nexport function math(options) {\n  return {\n    flow: {\n      [36]: mathFlow\n    },\n    text: {\n      [36]: mathText(options)\n    }\n  };\n}","/// <reference types=\"mdast-util-math\" />\n/// <reference types=\"remark-parse\" />\n/// <reference types=\"remark-stringify\" />\n\n/**\n * @typedef {import('mdast').Root} Root\n * @typedef {import('mdast-util-math').ToOptions} Options\n * @typedef {import('unified').Processor<Root>} Processor\n */\n\nimport {mathFromMarkdown, mathToMarkdown} from 'mdast-util-math'\nimport {math} from 'micromark-extension-math'\n\n/** @type {Readonly<Options>} */\nconst emptyOptions = {}\n\n/**\n * Add support for math.\n *\n * @param {Readonly<Options> | null | undefined} [options]\n *   Configuration (optional).\n * @returns {undefined}\n *   Nothing.\n */\nexport default function remarkMath(options) {\n  // @ts-expect-error: TS is wrong about `this`.\n  // eslint-disable-next-line unicorn/no-this-assignment\n  const self = /** @type {Processor} */ (this)\n  const settings = options || emptyOptions\n  const data = self.data()\n\n  const micromarkExtensions =\n    data.micromarkExtensions || (data.micromarkExtensions = [])\n  const fromMarkdownExtensions =\n    data.fromMarkdownExtensions || (data.fromMarkdownExtensions = [])\n  const toMarkdownExtensions =\n    data.toMarkdownExtensions || (data.toMarkdownExtensions = [])\n\n  micromarkExtensions.push(math(settings))\n  fromMarkdownExtensions.push(mathFromMarkdown())\n  toMarkdownExtensions.push(mathToMarkdown(settings))\n}\n","import { Box } from '@mui/material';\nimport { useViewModelState } from '@state/hook/useViewModel';\nimport React, { useEffect, useMemo, useRef, useState } from 'react';\nimport ReactMarkdown from 'react-markdown';\nimport rehypeKatex from 'rehype-katex';\nimport rehypeSanitize from 'rehype-sanitize';\nimport remarkGfm from 'remark-gfm';\nimport remarkMath from 'remark-math';\nimport 'katex/dist/katex.min.css';\n\ninterface TypingEffectProps {\n  text: string;\n  isUser: boolean;\n  onTypingUpdate?: () => void;\n}\n\nexport const TypingEffect: React.FC<TypingEffectProps> = ({ text, isUser, onTypingUpdate }) => {\n  const [displayedText, setDisplayedText] = useState('');\n  const [isTyping, setIsTyping] = useState(true);\n  const messageRef = useRef<HTMLDivElement>(null);\n  const settings = useViewModelState('settings');\n  const inIframe = useMemo(() => {\n    try {\n      return window.self !== window.top;\n    } catch {\n      return true;\n    }\n  }, []);\n  const containerStyle = useMemo<React.CSSProperties>(() => (\n    inIframe\n      ? { contain: 'layout style', willChange: 'auto', overflowWrap: 'anywhere', wordBreak: 'break-word' }\n      : {}\n  ), [inIframe]);\n\n  useEffect(() => {\n    if (isUser || inIframe) {\n      setDisplayedText(text);\n      setIsTyping(false);\n      return;\n    }\n\n    let currentIndex = 0;\n    const typingSpeed = 10; // Slightly slower for better scroll compatibility\n    const typingInterval = setInterval(() => {\n      if (currentIndex <= text.length) {\n        setDisplayedText(text.slice(0, currentIndex));\n        currentIndex++;\n\n        // Notify parent component about typing updates for auto-scroll\n        if (onTypingUpdate) {\n          onTypingUpdate();\n        }\n      } else {\n        setIsTyping(false);\n        clearInterval(typingInterval);\n      }\n    }, typingSpeed);\n\n    return () => clearInterval(typingInterval);\n  }, [text, isUser, inIframe]);\n\n  useEffect(() => {\n    if (!isTyping && messageRef.current) {\n      const messageContent = messageRef.current.textContent || '';\n      messageRef.current.setAttribute('aria-label', `AI message: ${messageContent}`);\n    }\n  }, [isTyping]);\n\n  return (\n    <Box style={containerStyle}>\n      {/* Visual typing effect for users */}\n      <div className={`chat-message-content ${isUser ? 'user' : ''}`}>\n        <ReactMarkdown\n          rehypePlugins={[\n            rehypeKatex,\n            [rehypeSanitize, {\n              attributes: {\n                '*': ['className', 'aria-label', 'aria-hidden', 'role', 'aria-busy', 'aria-live', 'aria-atomic'],\n                'a': ['href', 'target'],\n                'img': ['src', 'alt'],\n                'math': ['display'],\n                'span': ['style'],\n                'svg': ['aria-hidden', 'role', 'xmlns', 'width', 'height', 'viewBox'],\n                'path': ['d'],\n              },\n              tagNames: [\n                'p',\n                'br',\n                'b',\n                'i',\n                'em',\n                'strong',\n                'a',\n                'pre',\n                'code',\n                'ul',\n                'ol',\n                'li',\n                'blockquote',\n                'img',\n                'math',\n                'span',\n                'svg',\n                'path',\n              ],\n            }],\n          ]}\n          remarkPlugins={[remarkGfm, remarkMath]}\n          components={{\n            pre: ({ node, ...props }) => (\n              <pre {...props} role=\"text\" aria-label=\"Code block\" />\n            ),\n            a: ({ node, ...props }) => (\n              <a {...props} aria-label={`Link: ${props.children}`} />\n            ),\n            img: ({ node, ...props }) => (\n              <img {...props} alt={props.alt || 'Image in message'} />\n            ),\n          }}\n        >\n          {displayedText}\n        </ReactMarkdown>\n      </div>\n      {/* Visually hidden live region for screen readers */}\n      <div\n        className=\"sr-only\"\n        aria-live={settings.general.ariaMode}\n        aria-atomic=\"true\"\n      >\n        {isTyping ? '' : text}\n      </div>\n      {isTyping && !inIframe && (\n        <span\n          className=\"typing-cursor\"\n          aria-hidden=\"true\"\n          role=\"presentation\"\n        >\n          |\n        </span>\n      )}\n    </Box>\n  );\n};\n","import type { Message } from '@type/llm';\nimport { AccountCircle } from '@mui/icons-material';\nimport { Avatar, Box, Button, CircularProgress, Typography } from '@mui/material';\nimport React from 'react';\nimport { ModelIcon } from './ModelIcon';\nimport { ModelSelection } from './ModelSelection';\nimport { TypingEffect } from './TypingEffect';\n\ninterface MessageBubbleProps {\n  message: Message;\n  disabled?: boolean;\n  _onOpenSettings?: () => void;\n  onTypingUpdate?: () => void;\n}\n\nfunction getModelDisplayName(model?: string): string {\n  switch (model) {\n    case 'OPENAI':\n      return 'OpenAI';\n    case 'ANTHROPIC_CLAUDE':\n      return 'Anthropic Claude';\n    case 'GOOGLE_GEMINI':\n      return 'Google Gemini';\n    default:\n      return 'AI Assistant';\n  }\n}\n\nexport const MessageBubble: React.FC<MessageBubbleProps> = ({ message, disabled, _onOpenSettings, onTypingUpdate }) => {\n  const getLLMAvatar = (): React.ReactElement => {\n    return message.isUser ? <AccountCircle /> : <ModelIcon model={message.model} />;\n  };\n\n  const getAriaLabel = (): string => {\n    const role = message.isUser ? 'Your message' : 'AI Assistant message';\n    const model = !message.isUser ? ` from ${getModelDisplayName(message.model)}` : '';\n    const status = !message.isUser && message.status === 'PENDING' ? ' (typing)' : '';\n    return `${role}${model}${status}`;\n  };\n\n  return (\n    <Box\n      sx={{\n        display: 'flex',\n        justifyContent: message.isUser ? 'flex-end' : 'flex-start',\n        mb: 2,\n      }}\n      role=\"listitem\"\n    >\n      <Box\n        sx={{\n          display: 'flex',\n          alignItems: 'flex-start',\n          gap: 1.5,\n          maxWidth: '80%',\n          flexDirection: message.isUser ? 'row-reverse' : 'row',\n        }}\n      >\n        <Avatar\n          className={`chat-avatar ${message.isUser ? 'user' : ''}`}\n          aria-hidden=\"true\"\n        >\n          {getLLMAvatar()}\n        </Avatar>\n\n        <Box\n          className={`chat-bubble ${message.isUser ? 'user' : 'ai'}`}\n          role=\"article\"\n          aria-label={getAriaLabel()}\n        >\n          {!message.isUser && (\n            <Typography\n              className=\"model-name\"\n              variant=\"caption\"\n              fontWeight=\"medium\"\n              color=\"text.secondary\"\n              component=\"h3\"\n              sx={{ fontSize: '0.8rem', margin: 0, marginBottom: 0.5 }}\n              aria-label={`Model: ${getModelDisplayName(message.model)}`}\n            >\n              {getModelDisplayName(message.model)}\n            </Typography>\n          )}\n          <TypingEffect text={message.text} isUser={message.isUser} onTypingUpdate={onTypingUpdate} />\n\n          {message.isWelcomeMessage && message.modelSelections && (\n            <ModelSelection enabledModels={message.modelSelections} />\n          )}\n\n          <Box\n            sx={{\n              display: 'flex',\n              justifyContent: 'space-between',\n              alignItems: 'center',\n              mt: 0.5,\n            }}\n          >\n            {disabled && message.id.startsWith('system-') && (\n              <Button\n                variant=\"text\"\n                onClick={_onOpenSettings}\n                aria-label=\"Open settings\"\n                style={{ padding: 0 }}\n              >\n                Open Settings\n              </Button>\n            )}\n            <Typography\n              className=\"timestamp\"\n              variant=\"caption\"\n              color=\"text.secondary\"\n              component=\"time\"\n              dateTime={new Date(message.timestamp).toISOString()}\n              aria-label={`Sent at ${new Date(message.timestamp).toLocaleTimeString()}`}\n            >\n              {new Date(message.timestamp).toLocaleTimeString()}\n            </Typography>\n          </Box>\n\n          {!message.isUser && message.status === 'PENDING' && (\n            <Box\n              role=\"status\"\n              aria-label=\"AI is typing\"\n            >\n              <CircularProgress size={16} />\n            </Box>\n          )}\n        </Box>\n      </Box>\n    </Box>\n  );\n};\n","import type { Suggestion } from '@type/chat';\nimport { Box, Chip, useTheme } from '@mui/material';\nimport React, { memo } from 'react';\n\ninterface SuggestionsProps {\n  suggestions: Suggestion[];\n  onSuggestionClick: (suggestion: Suggestion) => void;\n}\n\nconst SuggestionChip = memo(({ suggestion, onClick }: { suggestion: Suggestion; onClick: () => void }) => {\n  const theme = useTheme();\n  return (\n    <Chip\n      label={suggestion.text}\n      onClick={onClick}\n      role=\"button\"\n      aria-label={`Suggestion: ${suggestion.text}`}\n      sx={{\n        'bgcolor': theme.palette.primary.main,\n        'color': theme.palette.primary.contrastText,\n        '&:hover': {\n          bgcolor: theme.palette.primary.dark,\n        },\n      }}\n    />\n  );\n});\n\nSuggestionChip.displayName = 'SuggestionChip';\n\nexport const Suggestions: React.FC<SuggestionsProps> = memo(({ suggestions, onSuggestionClick }) => {\n  const theme = useTheme();\n\n  if (!suggestions || !suggestions.length)\n    return null;\n\n  return (\n    <Box\n      role=\"region\"\n      aria-label=\"Suggested responses\"\n      sx={{\n        p: 2,\n        display: 'flex',\n        flexWrap: 'wrap',\n        gap: 1,\n        borderTop: `1px solid ${theme.palette.divider}`,\n        bgcolor: theme.palette.background.paper,\n      }}\n    >\n      {suggestions.map(suggestion => (\n        <SuggestionChip\n          key={suggestion.id}\n          suggestion={suggestion}\n          onClick={() => onSuggestionClick(suggestion)}\n        />\n      ))}\n    </Box>\n  );\n});\n\nSuggestions.displayName = 'Suggestions';\n","import type { Message } from '@type/llm';\nimport { Close, Send } from '@mui/icons-material';\nimport {\n  Dialog,\n  DialogContent,\n  DialogTitle,\n  Grid,\n  IconButton,\n  TextField,\n  Typography,\n  useTheme,\n} from '@mui/material';\nimport { useViewModel, useViewModelState } from '@state/hook/useViewModel';\nimport React, { useEffect, useId, useRef, useState } from 'react';\nimport { MessageBubble } from '../components/MessageBubble';\nimport { Suggestions } from '../components/Suggestions';\n\nconst Chat: React.FC = () => {\n  const id = useId();\n  const theme = useTheme();\n\n  const viewModel = useViewModel('chat');\n  const settingsViewModel = useViewModel('settings');\n  const { messages, suggestions } = useViewModelState('chat');\n  const disabled = !viewModel.canSend;\n\n  const [inputMessage, setInputMessage] = useState('');\n  const messagesEndRef = useRef<HTMLDivElement>(null);\n  const messagesContainerRef = useRef<HTMLDivElement>(null);\n  const lastScrollHeightRef = useRef<number>(0);\n  const mutationObserverRef = useRef<MutationObserver | null>(null);\n\n  const handleOpenSettings = (): void => {\n    settingsViewModel.toggle();\n  };\n\n  const scrollToBottom = (force = false): void => {\n    if (!messagesContainerRef.current)\n      return;\n\n    const container = messagesContainerRef.current;\n    const isNearBottom = container.scrollTop + container.clientHeight >= container.scrollHeight - 100;\n\n    // Only auto-scroll if user is near bottom or if forced\n    if (isNearBottom || force) {\n      // Use requestAnimationFrame to ensure DOM is ready\n      requestAnimationFrame(() => {\n        container.scrollTo({\n          top: container.scrollHeight,\n          behavior: 'smooth',\n        });\n      });\n    }\n  };\n\n  // Auto-scroll when new messages are added or existing messages are updated\n  useEffect(() => {\n    // Always scroll when messages change\n    const timeoutId = setTimeout(() => {\n      scrollToBottom(true); // Force scroll for message changes\n    }, 200);\n\n    return () => clearTimeout(timeoutId);\n  }, [messages.length]); // Only trigger on message count changes\n\n  // Auto-scroll when chat is first opened\n  useEffect(() => {\n    // Initial scroll to bottom when component mounts\n    setTimeout(() => scrollToBottom(true), 200);\n  }, []); // Empty dependency array means this runs only on mount\n\n  // Set up MutationObserver for auto-scroll during typing animation\n  useEffect(() => {\n    if (!messagesContainerRef.current)\n      return;\n\n    const container = messagesContainerRef.current;\n\n    // Clean up existing observer\n    if (mutationObserverRef.current) {\n      mutationObserverRef.current.disconnect();\n    }\n\n    // Create new observer to watch for text content changes\n    mutationObserverRef.current = new MutationObserver((mutations) => {\n      let shouldScroll = false;\n\n      mutations.forEach((mutation) => {\n        // Check if text content changed (typing animation)\n        if (mutation.type === 'childList' || mutation.type === 'characterData') {\n          const isNearBottom = container.scrollTop + container.clientHeight >= container.scrollHeight - 100;\n          if (isNearBottom) {\n            shouldScroll = true;\n          }\n        }\n      });\n\n      if (shouldScroll) {\n        // Use immediate scroll for typing animation\n        requestAnimationFrame(() => {\n          container.scrollTo({\n            top: container.scrollHeight,\n            behavior: 'auto',\n          });\n        });\n      }\n    });\n\n    // Start observing\n    mutationObserverRef.current.observe(container, {\n      childList: true,\n      subtree: true,\n      characterData: true,\n    });\n\n    // Cleanup\n    return () => {\n      if (mutationObserverRef.current) {\n        mutationObserverRef.current.disconnect();\n      }\n    };\n  }, [messages.length]); // Re-setup when message count changes\n\n  // Monitor content height changes for auto-scroll during typing\n  useEffect(() => {\n    if (!messagesContainerRef.current)\n      return;\n\n    const container = messagesContainerRef.current;\n    const currentHeight = container.scrollHeight;\n\n    // If content height increased and we were near bottom, scroll\n    if (currentHeight > lastScrollHeightRef.current) {\n      const isNearBottom = container.scrollTop + container.clientHeight >= lastScrollHeightRef.current - 100;\n      if (isNearBottom) {\n        // Immediate scroll for typing animation - no debouncing\n        requestAnimationFrame(() => {\n          container.scrollTo({\n            top: currentHeight,\n            behavior: 'auto', // Use 'auto' for immediate scroll during typing\n          });\n        });\n      }\n    }\n\n    lastScrollHeightRef.current = currentHeight;\n  }, [messages]); // Trigger when messages change (including typing updates)\n\n  // Auto-scroll when message content changes (for updates like \"Processing...\" -> actual response)\n  useEffect(() => {\n    if (messages.length > 0) {\n      const lastMessage = messages[messages.length - 1];\n\n      // Only scroll for status changes or when typing is complete, not during typing\n      if (lastMessage.status === 'SUCCESS' || lastMessage.status === 'FAILED') {\n        const timeoutId = setTimeout(() => {\n          scrollToBottom(true); // Force scroll for completed messages\n        }, 300); // Longer delay to let typing finish\n\n        return () => clearTimeout(timeoutId);\n      }\n    }\n  }, [messages.length > 0 ? messages[messages.length - 1]?.status : '']);\n\n  const handleClose = (): void => {\n    viewModel.toggle();\n  };\n\n  const handleSend = (): void => {\n    if (inputMessage.trim()) {\n      void viewModel.sendMessage(inputMessage);\n      setInputMessage('');\n      // Auto-scroll after sending message (force scroll)\n      setTimeout(() => scrollToBottom(true), 100);\n    }\n  };\n\n  const handleSuggestionClick = (suggestion: { text: string; type: string }): void => {\n    setInputMessage(suggestion.text);\n  };\n\n  const handleKeyPress = (e: React.KeyboardEvent): void => {\n    if (e.key === 'Enter' && !e.shiftKey) {\n      e.preventDefault();\n      handleSend();\n    }\n  };\n\n  return (\n    <Dialog\n      id={id}\n      role=\"dialog\"\n      open={true}\n      onClose={handleClose}\n      maxWidth=\"md\"\n      fullWidth\n      disablePortal\n      sx={{\n        '& .MuiDialog-paper': {\n          height: '70vh',\n          maxHeight: '90vh',\n        },\n      }}\n    >\n      <DialogTitle component=\"h2\" sx={{ p: 2 }}>\n        <Grid container justifyContent=\"space-between\" alignItems=\"center\">\n          <Grid size=\"auto\">\n            <Typography\n              variant=\"h6\"\n              fontWeight=\"bold\"\n              component=\"h2\"\n              sx={{ margin: 0 }}\n              aria-label=\"Chart Assistant - AI Chat Interface\"\n            >\n              Chart Assistant\n            </Typography>\n          </Grid>\n          <Grid size=\"auto\">\n            <IconButton\n              onClick={handleClose}\n              aria-label=\"Close chat dialog\"\n            >\n              <Close />\n            </IconButton>\n          </Grid>\n        </Grid>\n      </DialogTitle>\n\n      <DialogContent dividers sx={{ p: 0, overflow: 'hidden' }}>\n        <Grid container direction=\"column\" sx={{ height: '100%' }}>\n          {/* Messages Container */}\n          <Grid\n            ref={messagesContainerRef}\n            size={12}\n            component=\"section\"\n            aria-label=\"Chat messages\"\n            sx={{\n              'flex': 1,\n              'overflowY': 'auto',\n              'p': 2,\n              'bgcolor': theme.palette.background.default,\n              '&::-webkit-scrollbar': {\n                width: '6px',\n              },\n              '&::-webkit-scrollbar-track': {\n                background: theme.palette.grey[100],\n              },\n              '&::-webkit-scrollbar-thumb': {\n                background: theme.palette.grey[400],\n                borderRadius: '3px',\n              },\n            }}\n          >\n            {messages.map((message: Message) => (\n              <MessageBubble\n                key={message.id}\n                message={message}\n                disabled={disabled}\n                _onOpenSettings={handleOpenSettings}\n                onTypingUpdate={() => {\n                  // Auto-scroll during typing animation\n                  if (messagesContainerRef.current) {\n                    const container = messagesContainerRef.current;\n                    const isNearBottom = container.scrollTop + container.clientHeight >= container.scrollHeight - 100;\n                    if (isNearBottom) {\n                      requestAnimationFrame(() => {\n                        container.scrollTo({\n                          top: container.scrollHeight,\n                          behavior: 'auto',\n                        });\n                      });\n                    }\n                  }\n                }}\n              />\n            ))}\n            <div ref={messagesEndRef} />\n          </Grid>\n\n          {/* Suggestions */}\n          <Suggestions\n            suggestions={suggestions}\n            onSuggestionClick={handleSuggestionClick}\n          />\n\n          {/* Input Container */}\n          <Grid\n            size={12}\n            component=\"section\"\n            aria-label=\"Message input\"\n            sx={{\n              p: 2,\n              borderTop: `1px solid ${theme.palette.divider}`,\n            }}\n          >\n            <Grid container spacing={1} alignItems=\"center\">\n              <Grid size={{ xs: 10 }}>\n                <TextField\n                  value={inputMessage}\n                  disabled={disabled}\n                  onChange={e => setInputMessage(e.target.value)}\n                  onKeyDown={handleKeyPress}\n                  maxRows={4}\n                  placeholder=\"What can I help you with?\"\n                  variant=\"outlined\"\n                  size=\"small\"\n                  autoFocus\n                  fullWidth\n                  multiline\n                  aria-label=\"Type your message to the AI assistant\"\n                />\n              </Grid>\n              <Grid size={{ xs: 2 }} container justifyContent=\"flex-end\">\n                <IconButton\n                  onClick={handleSend}\n                  disabled={disabled}\n                  color=\"primary\"\n                  aria-label=\"Send message to AI assistant\"\n                  sx={{\n                    'bgcolor': theme.palette.primary.main,\n                    'color': theme.palette.primary.contrastText,\n                    '&:hover': {\n                      bgcolor: theme.palette.primary.dark,\n                    },\n                  }}\n                >\n                  <Send />\n                </IconButton>\n              </Grid>\n            </Grid>\n          </Grid>\n        </Grid>\n      </DialogContent>\n    </Dialog>\n  );\n};\n\nexport default Chat;\n","import type { Keys } from '@type/event';\nimport { Box, Dialog, DialogContent, List, ListItemButton, ListItemText, TextField, Typography } from '@mui/material';\nimport { useViewModel, useViewModelState } from '@state/hook/useViewModel';\nimport React, { useCallback, useEffect, useMemo, useRef, useState } from 'react';\n\ninterface CommandItem {\n  key: string;\n  description: string;\n  commandKey: Keys;\n}\n\nconst CommandPalette: React.FC = () => {\n  const commandPaletteViewModel = useViewModel('commandPalette');\n  const state = useViewModelState('commandPalette');\n  const [announcement] = useState('');\n  const searchInputRef = useRef<HTMLInputElement>(null);\n  const listRef = useRef<HTMLUListElement>(null);\n  const enterPressedRef = useRef(false);\n\n  // Filter commands based on search\n  const filteredCommands = useMemo(() => {\n    if (!state.search.trim()) {\n      return state.commands;\n    }\n    const searchLower = state.search.toLowerCase();\n    return state.commands.filter((command: CommandItem) =>\n      command.description.toLowerCase().includes(searchLower)\n      || command.key.toLowerCase().includes(searchLower),\n    );\n  }, [state.commands, state.search]);\n\n  // Ensure search input gets focus when dialog opens or when returning to search\n  useEffect(() => {\n    if (state.visible && searchInputRef.current) {\n      // Use setTimeout to ensure the dialog is fully rendered\n      setTimeout(() => {\n        if (searchInputRef.current) {\n          searchInputRef.current.focus();\n        }\n      }, 100);\n    }\n  }, [state.visible]);\n\n  // Focus search input when returning to search (selectedIndex becomes -1)\n  useEffect(() => {\n    // Only handle focus when dialog first opens, not when returning to search\n    if (state.visible && searchInputRef.current && state.selectedIndex === -1) {\n      // Don't auto-focus when returning to search to avoid dialog close issues\n    }\n  }, [state.selectedIndex, state.visible]);\n\n  // Auto-scroll to selected item and focus it\n  useEffect(() => {\n    if (listRef.current && state.selectedIndex >= 0) {\n      const listElement = listRef.current;\n      const selectedElement = listElement.children[state.selectedIndex] as HTMLElement;\n\n      if (selectedElement) {\n        // Focus the selected element for screen reader\n        selectedElement.focus();\n\n        const listRect = listElement.getBoundingClientRect();\n        const elementRect = selectedElement.getBoundingClientRect();\n\n        // Check if element is outside the visible area\n        if (elementRect.top < listRect.top || elementRect.bottom > listRect.bottom) {\n          selectedElement.scrollIntoView({\n            behavior: 'smooth',\n            block: 'nearest',\n          });\n        }\n      }\n    }\n  }, [state.selectedIndex]);\n\n  const handleClose = useCallback(() => {\n    commandPaletteViewModel.hide();\n  }, [commandPaletteViewModel]);\n\n  const handleCommandSelect = useCallback((commandKey: Keys) => {\n    // Delegate to ViewModel which handles close + execute\n    commandPaletteViewModel.executeAndClose(commandKey);\n  }, [commandPaletteViewModel]);\n\n  const handleSearchChange = useCallback((event: React.ChangeEvent<HTMLInputElement>) => {\n    commandPaletteViewModel.updateSearch(event.target.value);\n  }, [commandPaletteViewModel]);\n\n  if (!state.visible) {\n    return null;\n  }\n\n  return (\n    <Dialog\n      open={state.visible}\n      onClose={handleClose}\n      maxWidth=\"md\"\n      fullWidth\n      disablePortal\n      role=\"dialog\"\n      aria-modal=\"true\"\n      aria-labelledby=\"command-palette-title\"\n      aria-describedby=\"command-palette-description\"\n      sx={{\n        '& .MuiDialog-paper': {\n          maxHeight: '80vh',\n        },\n      }}\n    >\n      <Box component=\"h2\" id=\"command-palette-title\" sx={{ p: 2, m: 0 }}>\n        <Box component=\"span\" sx={{ fontSize: '1.25rem', fontWeight: 600 }}>\n          Command Palette\n        </Box>\n      </Box>\n\n      <DialogContent dividers sx={{ p: 2, overflow: 'hidden' }}>\n        <Box id=\"command-palette-description\" sx={{ mb: 2 }}>\n          <Typography variant=\"body2\" color=\"text.secondary\" sx={{ m: 0 }}>\n            Type to search commands, use arrow keys to navigate the list, and press Enter to execute a command\n          </Typography>\n        </Box>\n\n        <TextField\n          ref={searchInputRef}\n          fullWidth\n          placeholder=\"Search commands...\"\n          value={state.search}\n          onChange={handleSearchChange}\n          sx={{ mb: 2 }}\n          autoFocus\n          inputProps={{\n            'role': 'combobox',\n            'aria-autocomplete': 'list',\n            'aria-haspopup': 'listbox',\n            'aria-controls': 'command-list',\n            'aria-expanded': true,\n            'aria-activedescendant': state.selectedIndex >= 0 ? `command-${state.selectedIndex}` : undefined,\n            'aria-label': 'Search commands',\n            'aria-describedby': 'command-palette-description',\n            'onKeyDown': (e) => {\n              if (e.key === 'Enter') {\n                e.preventDefault();\n                e.stopPropagation();\n                if (filteredCommands.length > 0 && state.selectedIndex >= 0) {\n                  const selectedCommand = filteredCommands[state.selectedIndex];\n                  if (selectedCommand) {\n                    handleCommandSelect(selectedCommand.commandKey as Keys);\n                  }\n                }\n              } else if (e.key === 'ArrowDown') {\n                e.preventDefault();\n                e.stopPropagation();\n                commandPaletteViewModel.moveDown();\n              } else if (e.key === 'ArrowUp') {\n                e.preventDefault();\n                e.stopPropagation();\n                // If we're on the first option (index 0), go back to search\n                if (state.selectedIndex === 0) {\n                  commandPaletteViewModel.moveToSearch();\n                } else {\n                  commandPaletteViewModel.moveUp();\n                }\n              }\n            },\n          }}\n        />\n\n        <List\n          ref={listRef}\n          id=\"command-list\"\n          role=\"listbox\"\n          aria-label=\"Available commands\"\n          sx={{ flex: 1, overflow: 'auto', maxHeight: '60vh' }}\n        >\n          {filteredCommands.map((command: CommandItem, index: number) => (\n            <ListItemButton\n              key={command.commandKey}\n              id={`command-${index}`}\n              role=\"option\"\n              aria-selected={index === state.selectedIndex}\n              aria-label={`${command.description} (${command.key})`}\n              selected={index === state.selectedIndex}\n              tabIndex={index === state.selectedIndex ? 0 : -1}\n              onClick={() => {\n                // Prevent onClick from firing if Enter was just pressed\n                if (enterPressedRef.current) {\n                  return;\n                }\n                handleCommandSelect(command.commandKey as Keys);\n              }}\n              onKeyDown={(e) => {\n                if (e.key === 'Enter') {\n                  e.preventDefault();\n                  e.stopPropagation();\n                  enterPressedRef.current = true;\n                  // Reset the flag after a short delay\n                  setTimeout(() => {\n                    enterPressedRef.current = false;\n                  }, 100);\n                  handleCommandSelect(command.commandKey as Keys);\n                } else if (e.key === 'ArrowUp') {\n                  e.preventDefault();\n                  e.stopPropagation();\n                  if (index === 0) {\n                    // If we're on the first option, go back to search\n                    commandPaletteViewModel.moveToSearch();\n                    // Don't manually focus - let the dialog handle it\n                  } else {\n                    commandPaletteViewModel.moveUp();\n                  }\n                } else if (e.key === 'ArrowDown') {\n                  e.preventDefault();\n                  e.stopPropagation();\n                  commandPaletteViewModel.moveDown();\n                }\n              }}\n              sx={{\n                'cursor': 'pointer',\n                '&:hover': {\n                  bgcolor: 'action.hover',\n                },\n                '&.Mui-selected': {\n                  bgcolor: 'action.selected',\n                },\n              }}\n            >\n              <ListItemText\n                primary={command.description}\n                secondary={`${command.key}`}\n              />\n            </ListItemButton>\n          ))}\n        </List>\n\n        {announcement && (\n          <div\n            aria-live=\"assertive\"\n            style={{\n              position: 'absolute',\n              left: '-10000px',\n              width: '1px',\n              height: '1px',\n              overflow: 'hidden',\n            }}\n          >\n            {announcement}\n          </div>\n        )}\n      </DialogContent>\n    </Dialog>\n  );\n};\n\nexport default CommandPalette;\n","import {\n  Button,\n  Dialog,\n  DialogActions,\n  DialogContent,\n  DialogTitle,\n  Divider,\n  Grid,\n  Typography,\n} from '@mui/material';\nimport { useViewModel } from '@state/hook/useViewModel';\nimport React, { useId } from 'react';\n\ninterface HelpRowProps {\n  label: string;\n  shortcut: string;\n}\n\nconst HelpRow: React.FC<HelpRowProps> = ({ label, shortcut }) => (\n  <Grid\n    container\n    spacing={1}\n    alignItems=\"center\"\n    sx={{ py: 1 }}\n  >\n    <Grid size={{ xs: 12, sm: 6, md: 7 }}>\n      <Typography variant=\"body2\">\n        {label}\n      </Typography>\n    </Grid>\n    <Grid size={{ xs: 12, sm: 6, md: 5 }}>\n      <Typography variant=\"body2\" fontWeight={300}>\n        {shortcut}\n      </Typography>\n    </Grid>\n  </Grid>\n);\n\nconst Help: React.FC = () => {\n  const id = useId();\n  const viewModel = useViewModel('help');\n  const { items } = viewModel.state;\n\n  const handleClose = (): void => {\n    viewModel.toggle();\n  };\n\n  return (\n    <Dialog\n      id={id}\n      role=\"dialog\"\n      open={true}\n      onClose={handleClose}\n      maxWidth=\"sm\"\n      fullWidth\n      disablePortal\n    >\n      {/* Header */}\n      <Grid container component={DialogTitle}>\n        <Grid size=\"grow\">\n          <Typography variant=\"h6\" fontWeight=\"bold\">\n            Keyboard Shortcuts\n          </Typography>\n        </Grid>\n      </Grid>\n\n      <DialogContent>\n        <Grid container spacing={1}>\n          {items.map((item, index) => (\n            <React.Fragment key={index}>\n              <Grid size={12} key={index}>\n                <HelpRow\n                  label={item.description}\n                  shortcut={item.key}\n                />\n              </Grid>\n              {index !== items.length - 1 && (\n                <Grid size={12}>\n                  <Divider />\n                </Grid>\n              )}\n            </React.Fragment>\n          ))}\n        </Grid>\n      </DialogContent>\n\n      {/* Footer Actions */}\n      <Grid container component={DialogActions}>\n        <Grid\n          size=\"grow\"\n          container\n          spacing={1}\n          justifyContent=\"flex-end\"\n          sx={{ px: 2, py: 1 }}\n        >\n          <Grid size=\"auto\">\n            <Button variant=\"contained\" color=\"primary\" onClick={handleClose}>\n              Close\n            </Button>\n          </Grid>\n        </Grid>\n      </Grid>\n    </Dialog>\n  );\n};\n\nexport default Help;\n","import { useViewModelState } from '@state/hook/useViewModel';\nimport { Constant } from '@util/constant';\nimport React, { useId } from 'react';\n\nconst Review: React.FC = () => {\n  const id = useId();\n  const { value } = useViewModelState('review');\n\n  return (\n    <div id={id}>\n      <input\n        id={`${Constant.REVIEW_INPUT}-${id}`}\n        defaultValue={value}\n        onFocus={event => event.target.setSelectionRange(0, 0)}\n        size={50}\n        type=\"text\"\n        autoComplete=\"off\"\n        autoFocus\n      />\n    </div>\n  );\n};\n\nexport default Review;\n","import type { Llm } from '@type/llm';\n\n/**\n * Represents the result of an API key validation attempt.\n */\ninterface ValidationResponse {\n  /** Indicates whether the API key is valid */\n  isValid: boolean;\n  /** Optional error message if validation failed */\n  error?: string;\n}\n\n/**\n * Service for validating API keys across different LLM providers.\n */\nexport class LlmValidationService {\n  private static readonly OPENAI_API_URL = 'https://api.openai.com/v1/models';\n  private static readonly ANTHROPIC_API_URL = 'https://api.anthropic.com/v1/messages';\n  private static readonly GEMINI_API_URL = 'https://generativelanguage.googleapis.com/v1beta/models';\n\n  /**\n   * Validates an API key for the specified LLM provider.\n   * @param modelKey - The LLM provider identifier\n   * @param apiKey - The API key to validate\n   * @returns Promise resolving to validation result with status and optional error message\n   */\n  public static async validateApiKey(modelKey: Llm, apiKey: string): Promise<ValidationResponse> {\n    try {\n      switch (modelKey) {\n        case 'OPENAI':\n          return await this.validateOpenAiKey(apiKey);\n        case 'ANTHROPIC_CLAUDE':\n          return await this.validateAnthropicKey(apiKey);\n        case 'GOOGLE_GEMINI':\n          return await this.validateGeminiKey(apiKey);\n        default:\n          return { isValid: false, error: 'Invalid model key' };\n      }\n    } catch (error) {\n      return {\n        isValid: false,\n        error: error instanceof Error ? error.message : 'Unknown error occurred',\n      };\n    }\n  }\n\n  /**\n   * Validates an OpenAI API key by making a request to the models endpoint.\n   * @param apiKey - The OpenAI API key to validate\n   * @returns Promise resolving to validation result\n   */\n  private static async validateOpenAiKey(apiKey: string): Promise<ValidationResponse> {\n    try {\n      const response = await fetch(this.OPENAI_API_URL, {\n        method: 'GET',\n        headers: {\n          'Authorization': `Bearer ${apiKey}`,\n          'Content-Type': 'application/json',\n        },\n      });\n\n      if (response.ok) {\n        return { isValid: true };\n      }\n\n      return { isValid: false, error: 'Invalid API key' };\n    } catch {\n      return { isValid: false, error: 'Invalid API key' };\n    }\n  }\n\n  /**\n   * Validates an Anthropic Claude API key by making a minimal request to the messages endpoint.\n   * @param apiKey - The Anthropic API key to validate\n   * @returns Promise resolving to validation result\n   */\n  private static async validateAnthropicKey(apiKey: string): Promise<ValidationResponse> {\n    try {\n      const response = await fetch(this.ANTHROPIC_API_URL, {\n        method: 'POST',\n        headers: {\n          'x-api-key': apiKey,\n          'anthropic-version': '2023-06-01',\n          'content-type': 'application/json',\n        },\n        body: JSON.stringify({\n          model: 'claude-3-sonnet-20240229',\n          max_tokens: 1,\n          messages: [{ role: 'user', content: 'test' }],\n        }),\n      }).catch(() => ({ ok: false }));\n\n      if (response.ok) {\n        return { isValid: true };\n      }\n\n      return { isValid: false, error: 'Invalid API key' };\n    } catch {\n      return { isValid: false, error: 'Invalid API key' };\n    }\n  }\n\n  /**\n   * Validates a Google Gemini API key by making a request to the models endpoint.\n   * @param apiKey - The Google Gemini API key to validate\n   * @returns Promise resolving to validation result\n   */\n  private static async validateGeminiKey(apiKey: string): Promise<ValidationResponse> {\n    try {\n      const response = await fetch(`${this.GEMINI_API_URL}?key=${apiKey}`, {\n        method: 'GET',\n      }).catch(() => ({ ok: false }));\n\n      if (response.ok) {\n        return { isValid: true };\n      }\n\n      return { isValid: false, error: 'Invalid API key' };\n    } catch {\n      return { isValid: false, error: 'Invalid API key' };\n    }\n  }\n}\n","import type { SelectChangeEvent } from '@mui/material';\nimport type { Llm, LlmVersion } from '@type/llm';\nimport type {\n  AriaMode,\n  GeneralSettings,\n  HoverMode,\n  LlmModelSettings,\n  LlmSettings,\n} from '@type/settings';\nimport { Check as CheckIcon, Error as ErrorIcon } from '@mui/icons-material';\nimport {\n  Alert,\n  Button,\n  Checkbox,\n  CircularProgress,\n  Dialog,\n  DialogActions,\n  DialogContent,\n  Divider,\n  FormControl,\n  FormControlLabel,\n  Grid,\n  InputAdornment,\n  MenuItem,\n  Radio,\n  RadioGroup,\n  Select,\n  Slider,\n  Switch,\n  TextareaAutosize,\n  TextField,\n  Typography,\n} from '@mui/material';\nimport { LlmValidationService } from '@service/llmValidation';\nimport { MODEL_VERSIONS } from '@service/modelVersions';\nimport { useViewModel } from '@state/hook/useViewModel';\nimport React, { useCallback, useEffect, useId, useState } from 'react';\n\nconst MIN_CUSTOM_INSTRUCTION_LENGTH = 10;\n\nfunction getValidVersion(\n  modelKey: Llm,\n  currentVersion: string | undefined,\n): LlmVersion {\n  const config = MODEL_VERSIONS[modelKey];\n  const validOptions = config.options as readonly LlmVersion[];\n  if (!currentVersion || !validOptions.includes(currentVersion as LlmVersion)) {\n    return config.default;\n  }\n  return currentVersion as LlmVersion;\n}\n\ninterface SettingRowProps {\n  label: string;\n  input: React.ReactNode;\n  alignLabel?: 'center' | 'flex-start';\n}\n\nconst SettingRow: React.FC<SettingRowProps> = ({ label, input, alignLabel = 'center' }) => (\n  <Grid container spacing={1} alignItems={alignLabel} className=\"settings-grid-container\" sx={{ py: 1 }}>\n    <Grid size={{ xs: 12, sm: 6, md: 4 }} sx={alignLabel === 'flex-start' ? { py: 1 } : undefined}>\n      <Typography variant=\"body2\" fontWeight=\"normal\">\n        {label}\n      </Typography>\n    </Grid>\n    <Grid size={{ xs: 12, sm: 6, md: 8 }}>{input}</Grid>\n  </Grid>\n);\n\ninterface LlmModelSettingRowProps {\n  modelKey: Llm;\n  modelSettings: LlmModelSettings;\n  onToggle: (key: Llm, enabled: boolean) => void;\n  onChangeKey: (key: Llm, value: string) => void;\n  onChangeVersion: (key: Llm, value: LlmVersion) => void;\n}\n\nconst LlmModelSettingRow: React.FC<LlmModelSettingRowProps> = ({\n  modelKey,\n  modelSettings,\n  onToggle,\n  onChangeKey,\n  onChangeVersion,\n}) => {\n  const validVersion = getValidVersion(modelKey, modelSettings.version);\n  const [isValidating, setIsValidating] = useState(false);\n  const [isValid, setIsValid] = useState<boolean | null>(null);\n\n  const getHelperText = (): string => {\n    if (!modelSettings.enabled)\n      return '';\n    if (isValidating)\n      return 'Validating API key...';\n    if (isValid === false)\n      return `${modelSettings.name} API key is invalid`;\n    if (isValid === true)\n      return `${modelSettings.name} API key is valid`;\n    return '';\n  };\n\n  const validateApiKey = async (apiKey: string): Promise<void> => {\n    if (!modelSettings.enabled || !apiKey.trim()) {\n      setIsValid(null);\n      return;\n    }\n\n    setIsValidating(true);\n    try {\n      const result = await LlmValidationService.validateApiKey(\n        modelKey,\n        apiKey,\n      );\n      setIsValid(result.isValid);\n    } catch (error) {\n      setIsValid(false);\n    } finally {\n      setIsValidating(false);\n    }\n  };\n\n  useEffect(() => {\n    const debounceTimer = setTimeout(() => {\n      validateApiKey(modelSettings.apiKey);\n    }, 500);\n\n    return () => clearTimeout(debounceTimer);\n  }, [modelSettings.apiKey, modelSettings.enabled, modelKey]);\n\n  const renderMenuItems = (): React.ReactNode[] => {\n    const config = MODEL_VERSIONS[modelKey];\n    return config.options.map((version) => {\n      const label = config.labels[version as keyof typeof config.labels];\n      const isSelected = modelSettings.version === version;\n      return (\n        <MenuItem\n          key={version}\n          value={version}\n          className={`llm-model-setting-row-menu-item ${isSelected ? 'selected' : ''}`}\n        >\n          {isSelected && (\n            <CheckIcon className=\"llm-model-setting-row-check-icon\" />\n          )}\n          {label}\n        </MenuItem>\n      );\n    });\n  };\n\n  return (\n    <SettingRow\n      label={modelSettings.name}\n      input={(\n        <Grid container spacing={1} alignItems=\"center\">\n          <Grid>\n            <Switch\n              checked={modelSettings.enabled}\n              onChange={e => onToggle(modelKey, e.target.checked)}\n              slotProps={{\n                input: { 'aria-label': `Enable ${modelSettings.name}` },\n              }}\n            />\n          </Grid>\n          <Grid size={7}>\n            <FormControl fullWidth>\n              <TextField\n                disabled={!modelSettings.enabled}\n                fullWidth\n                size=\"small\"\n                value={modelSettings.apiKey}\n                onChange={e => onChangeKey(modelKey, e.target.value)}\n                placeholder={`Enter ${modelSettings.name} API Key`}\n                type=\"password\"\n                error={isValid === false}\n                helperText={getHelperText()}\n                slotProps={{\n                  input: {\n                    'aria-label': `${modelSettings.name} API Key`,\n                    'aria-describedby': `${modelKey}-status`,\n                    'endAdornment': (\n                      <InputAdornment position=\"end\">\n                        <div\n                          id={`${modelKey}-status`}\n                          role=\"status\"\n                          aria-live=\"polite\"\n                          aria-label={\n                            isValidating\n                              ? 'Validating API key'\n                              : isValid === true\n                                ? 'API key is valid'\n                                : isValid === false\n                                  ? 'API key is invalid'\n                                  : ''\n                          }\n                        >\n                          {isValidating\n                            ? (\n                                <CircularProgress size={20} />\n                              )\n                            : isValid === true\n                              ? (\n                                  <CheckIcon color=\"success\" />\n                                )\n                              : isValid === false\n                                ? (\n                                    <ErrorIcon color=\"error\" />\n                                  )\n                                : null}\n                        </div>\n                      </InputAdornment>\n                    ),\n                  },\n                }}\n              />\n            </FormControl>\n          </Grid>\n          <Grid size={8}>\n            <FormControl fullWidth>\n              <Select\n                value={validVersion}\n                onChange={(e) => {\n                  const newVersion = e.target.value as LlmVersion;\n                  onChangeVersion(modelKey, newVersion);\n                }}\n                disabled={\n                  !modelSettings.enabled\n                  || !modelSettings.apiKey.trim()\n                  || !isValid\n                }\n                fullWidth\n                size=\"small\"\n                slotProps={{\n                  input: {\n                    'aria-label': `${modelSettings.name} Model Version`,\n                  },\n                }}\n                MenuProps={{\n                  disablePortal: true,\n                  PaperProps: {\n                    className: 'settings-menu-paper',\n                  },\n                }}\n              >\n                {renderMenuItems()}\n              </Select>\n            </FormControl>\n          </Grid>\n        </Grid>\n      )}\n    />\n  );\n};\n\nconst Settings: React.FC = () => {\n  const id = useId();\n  const viewModel = useViewModel('settings');\n  const chatViewModel = useViewModel('chat');\n  const { general, llm } = viewModel.state;\n\n  const [generalSettings, setGeneralSettings]\n    = useState<GeneralSettings>(general);\n  const [llmSettings, setLlmSettings] = useState<LlmSettings>(llm);\n\n  useEffect(() => {\n    viewModel.load();\n  }, [viewModel]);\n\n  useEffect(() => {\n    setGeneralSettings(general);\n    setLlmSettings(llm);\n  }, [general, llm]);\n\n  const handleGeneralChange = (\n    key: keyof GeneralSettings,\n    value: string | number | AriaMode | boolean | HoverMode,\n  ): void => {\n    // Expanded value type for ariaMode\n    setGeneralSettings(prev => ({\n      ...prev,\n      [key]: value,\n    }));\n  };\n\n  const handleLlmChange = (\n    key: keyof LlmSettings,\n    value: string | 'basic' | 'intermediate' | 'advanced' | 'custom',\n  ): void => {\n    setLlmSettings(prev => ({\n      ...prev,\n      [key]: value,\n    }));\n  };\n\n  const handleLlmModelChange = (\n    modelKey: Llm,\n    propKey: keyof LlmModelSettings,\n    value: string | boolean | LlmVersion,\n  ): void => {\n    setLlmSettings(prev => ({\n      ...prev,\n      models: {\n        ...prev.models,\n        [modelKey]: {\n          ...prev.models[modelKey],\n          [propKey]:\n            propKey === 'apiKey' && typeof value === 'string'\n              ? value.trim()\n              : value,\n        },\n      },\n    }));\n  };\n\n  const handleReset = (): void => {\n    viewModel.reset();\n    const { general, llm } = viewModel.state;\n    setGeneralSettings(general);\n    setLlmSettings(llm);\n  };\n\n  const handleClose = (): void => {\n    viewModel.toggle();\n  };\n\n  const handleSave = (): void => {\n    viewModel.saveAndClose({ general: generalSettings, llm: llmSettings });\n    chatViewModel.refreshInitialMessage();\n  };\n\n  const handleSelectClick = useCallback((e: React.MouseEvent) => {\n    e.stopPropagation();\n  }, []);\n\n  const handleSelectChange = useCallback(\n    (\n      e: SelectChangeEvent<'basic' | 'intermediate' | 'advanced' | 'custom'>,\n    ) => {\n      e.stopPropagation();\n      handleLlmChange('expertiseLevel', e.target.value);\n    },\n    [handleLlmChange],\n  );\n\n  const isCustomInstructionValid\n    = llmSettings.expertiseLevel !== 'custom'\n      || llmSettings.customInstruction.length >= MIN_CUSTOM_INSTRUCTION_LENGTH;\n\n  return (\n    <Dialog\n      id={id}\n      role=\"dialog\"\n      aria-label=\"Settings\"\n      open={true}\n      maxWidth=\"sm\"\n      fullWidth\n      disablePortal\n      disableEnforceFocus\n      onClick={e => e.stopPropagation()}\n      className=\"settings-dialog\"\n    >\n      <DialogContent className=\"settings-dialog-content\">\n        <Grid size=\"grow\">\n          <Typography variant=\"h6\" fontWeight=\"bold\" gutterBottom>\n            General Settings\n          </Typography>\n        </Grid>\n\n        {/* General Settings */}\n        <Grid container spacing={0.5}>\n          <Grid size={12}>\n            <SettingRow\n              label=\"Volume\"\n              input={(\n                <FormControl fullWidth>\n                  <Slider\n                    value={generalSettings.volume}\n                    onChange={(_, value) =>\n                      handleGeneralChange('volume', Number(value))}\n                    min={0}\n                    max={100}\n                    step={1}\n                    valueLabelDisplay=\"auto\"\n                    slotProps={{\n                      input: {\n                        'aria-valuemin': 0,\n                        'aria-valuemax': 100,\n                        'aria-label': 'Volume',\n                        'aria-labelledby': 'volume-label',\n                      },\n                    }}\n                    className=\"settings-slider-value-label\"\n                  />\n                </FormControl>\n              )}\n            />\n          </Grid>\n          <Grid size={12}>\n            <SettingRow\n              label=\"Outline Color\"\n              input={(\n                <FormControl fullWidth>\n                  <TextField\n                    fullWidth\n                    type=\"color\"\n                    size=\"small\"\n                    value={generalSettings.highlightColor}\n                    onChange={e =>\n                      handleGeneralChange('highlightColor', e.target.value)}\n                    slotProps={{\n                      input: {\n                        inputProps: {\n                          'aria-label': 'Highlight Color',\n                        },\n                      },\n                    }}\n                  />\n                </FormControl>\n              )}\n            />\n          </Grid>\n          <Grid size={12}>\n            <SettingRow\n              label=\"High Contrast Mode\"\n              input={(\n                <FormControl>\n                  <FormControlLabel\n                    control={(\n                      <Checkbox\n                        checked={generalSettings.highContrastMode}\n                        onChange={e =>\n                          handleGeneralChange('highContrastMode', e.target.checked)}\n                        size=\"small\"\n                      />\n                    )}\n                    label={generalSettings.highContrastMode ? 'On' : 'Off'}\n                    slotProps={{\n                      typography: {\n                        variant: 'body2',\n                      },\n                    }}\n                    aria-label=\"High Contrast Mode\"\n                  />\n                </FormControl>\n              )}\n            />\n          </Grid>\n          <Grid size={12}>\n            <SettingRow\n              label=\"High Contrast Levels\"\n              input={(\n                <FormControl fullWidth>\n                  <TextField\n                    fullWidth\n                    type=\"number\"\n                    size=\"small\"\n                    value={generalSettings.highContrastLevels}\n                    onChange={e =>\n                      handleGeneralChange(\n                        'highContrastLevels',\n                        Number(e.target.value),\n                      )}\n                    slotProps={{\n                      input: {\n                        inputProps: {\n                          'aria-label': 'High Contrast Levels',\n                          'min': 2,\n                          'max': 20,\n                        },\n                      },\n                    }}\n                  />\n                </FormControl>\n              )}\n            />\n          </Grid>\n          <Grid size={12}>\n            <SettingRow\n              label=\"High Contrast Light Color\"\n              input={(\n                <FormControl fullWidth>\n                  <TextField\n                    fullWidth\n                    type=\"color\"\n                    size=\"small\"\n                    value={generalSettings.highContrastLightColor}\n                    onChange={e =>\n                      handleGeneralChange('highContrastLightColor', e.target.value)}\n                    slotProps={{\n                      input: {\n                        inputProps: {\n                          'aria-label': 'High Contrast Light Color',\n                        },\n                      },\n                    }}\n                  />\n                </FormControl>\n              )}\n            />\n          </Grid>\n          <Grid size={12}>\n            <SettingRow\n              label=\"High Contrast Dark Color\"\n              input={(\n                <FormControl fullWidth>\n                  <TextField\n                    fullWidth\n                    type=\"color\"\n                    size=\"small\"\n                    value={generalSettings.highContrastDarkColor}\n                    onChange={e =>\n                      handleGeneralChange('highContrastDarkColor', e.target.value)}\n                    slotProps={{\n                      input: {\n                        inputProps: {\n                          'aria-label': 'High Contrast Dark Color',\n                        },\n                      },\n                    }}\n                  />\n                </FormControl>\n              )}\n            />\n          </Grid>\n          <Grid size={12}>\n            <SettingRow\n              label=\"Braille Display Size\"\n              input={(\n                <FormControl fullWidth>\n                  <TextField\n                    fullWidth\n                    type=\"number\"\n                    size=\"small\"\n                    value={generalSettings.brailleDisplaySize}\n                    onChange={e =>\n                      handleGeneralChange(\n                        'brailleDisplaySize',\n                        Number(e.target.value),\n                      )}\n                    slotProps={{\n                      input: {\n                        inputProps: {\n                          'aria-label': 'Braille Display Size',\n                        },\n                      },\n                    }}\n                  />\n                </FormControl>\n              )}\n            />\n          </Grid>\n          <Grid size={12}>\n            <SettingRow\n              label=\"Min Frequency (Hz)\"\n              input={(\n                <FormControl fullWidth>\n                  <TextField\n                    fullWidth\n                    type=\"number\"\n                    size=\"small\"\n                    value={generalSettings.minFrequency}\n                    onChange={e =>\n                      handleGeneralChange(\n                        'minFrequency',\n                        Number(e.target.value),\n                      )}\n                    slotProps={{\n                      input: {\n                        inputProps: {\n                          'aria-label': 'Minimum Frequency',\n                        },\n                      },\n                    }}\n                  />\n                </FormControl>\n              )}\n            />\n          </Grid>\n          <Grid size={12}>\n            <SettingRow\n              label=\"Max Frequency (Hz)\"\n              input={(\n                <FormControl fullWidth>\n                  <TextField\n                    fullWidth\n                    type=\"number\"\n                    size=\"small\"\n                    value={generalSettings.maxFrequency}\n                    onChange={e =>\n                      handleGeneralChange(\n                        'maxFrequency',\n                        Number(e.target.value),\n                      )}\n                    slotProps={{\n                      input: {\n                        inputProps: {\n                          'aria-label': 'Maximum Frequency',\n                        },\n                      },\n                    }}\n                  />\n                </FormControl>\n              )}\n            />\n          </Grid>\n          <Grid size={12}>\n            <SettingRow\n              label=\"Autoplay Duration (ms)\"\n              input={(\n                <FormControl fullWidth>\n                  <TextField\n                    fullWidth\n                    type=\"number\"\n                    size=\"small\"\n                    value={generalSettings.autoplayDuration}\n                    onChange={e =>\n                      handleGeneralChange(\n                        'autoplayDuration',\n                        Number(e.target.value),\n                      )}\n                    slotProps={{\n                      input: {\n                        inputProps: {\n                          'aria-label': 'Autoplay Duration',\n                        },\n                      },\n                    }}\n                  />\n                </FormControl>\n              )}\n            />\n          </Grid>\n          <Grid size={12}>\n            <SettingRow\n              label=\"ARIA Mode\"\n              input={(\n                <FormControl>\n                  <RadioGroup\n                    row\n                    value={generalSettings.ariaMode}\n                    onChange={e =>\n                      handleGeneralChange(\n                        'ariaMode',\n                        e.target.value as AriaMode,\n                      )}\n                    aria-label=\"ARIA Mode\"\n                  >\n                    <FormControlLabel\n                      value=\"assertive\"\n                      control={<Radio size=\"small\" />}\n                      label=\"Assertive\"\n                    />\n                    <FormControlLabel\n                      value=\"polite\"\n                      control={<Radio size=\"small\" />}\n                      label=\"Polite\"\n                    />\n                  </RadioGroup>\n                </FormControl>\n              )}\n            />\n          </Grid>\n          <Grid size={12}>\n            <SettingRow\n              label=\"Hover Mode\"\n              input={(\n                <FormControl>\n                  <RadioGroup\n                    row\n                    value={generalSettings.hoverMode}\n                    onChange={e =>\n                      handleGeneralChange(\n                        'hoverMode',\n                        e.target.value as HoverMode,\n                      )}\n                    aria-label=\"Hover Mode\"\n                  >\n                    <FormControlLabel\n                      value=\"off\"\n                      control={<Radio size=\"small\" />}\n                      label=\"Off\"\n                    />\n                    <FormControlLabel\n                      value=\"pointermove\"\n                      control={<Radio size=\"small\" />}\n                      label=\"Hover\"\n                    />\n                    <FormControlLabel\n                      value=\"click\"\n                      control={<Radio size=\"small\" />}\n                      label=\"Click\"\n                    />\n                  </RadioGroup>\n                </FormControl>\n              )}\n            />\n          </Grid>\n        </Grid>\n\n        <Grid size={12}>\n          <Divider className=\"settings-divider\" />\n        </Grid>\n\n        {/* LLM Settings */}\n        <Grid container spacing={0.5} className=\"settings-section\">\n          <Grid size={12}>\n            <Typography\n              variant=\"h6\"\n              fontWeight=\"bold\"\n              gutterBottom\n              className=\"settings-section-title\"\n            >\n              LLM Settings\n            </Typography>\n          </Grid>\n\n          {(Object.keys(llmSettings.models) as Llm[]).map((modelKey) => {\n            const model = llmSettings.models[modelKey];\n            return (\n              <Grid size={12} key={modelKey} className=\"settings-model-row\">\n                <LlmModelSettingRow\n                  modelKey={modelKey}\n                  modelSettings={model}\n                  onToggle={(key, enabled) =>\n                    handleLlmModelChange(key, 'enabled', enabled)}\n                  onChangeKey={(key, value) =>\n                    handleLlmModelChange(key, 'apiKey', value)}\n                  onChangeVersion={(key, value) =>\n                    handleLlmModelChange(key, 'version', value)}\n                />\n              </Grid>\n            );\n          })}\n\n          {/* Expertise Level */}\n          <Grid size={12} className=\"settings-row\">\n            <FormControl\n              fullWidth\n              size=\"small\"\n              className=\"settings-model-select\"\n            >\n              <SettingRow\n                label=\"Expertise Level\"\n                input={(\n                  <Select\n                    value={llmSettings.expertiseLevel}\n                    onChange={handleSelectChange}\n                    onClick={handleSelectClick}\n                    slotProps={{\n                      input: {\n                        'aria-label': 'Expertise Level',\n                      },\n                    }}\n                    MenuProps={{\n                      disablePortal: true,\n                      PaperProps: {\n                        className: 'llm-model-setting-select-menu',\n                      },\n                    }}\n                  >\n                    <MenuItem value=\"basic\">Basic</MenuItem>\n                    <MenuItem value=\"intermediate\">Intermediate</MenuItem>\n                    <MenuItem value=\"advanced\">Advanced</MenuItem>\n                    <MenuItem value=\"custom\">Custom</MenuItem>\n                  </Select>\n                )}\n              />\n            </FormControl>\n          </Grid>\n\n          {/* Custom Instructions - Only show when custom is selected */}\n          {llmSettings.expertiseLevel === 'custom' && (\n            <Grid size={12}>\n              <Grid\n                container\n                spacing={1}\n                alignItems=\"flex-start\"\n                sx={{ py: 1 }}\n              >\n                <Grid size={12} sx={{ py: 1 }}>\n                  <Typography variant=\"body2\" fontWeight=\"normal\">\n                    Custom Instructions\n                  </Typography>\n                </Grid>\n                <Grid size={12}>\n                  <FormControl fullWidth>\n                    <TextareaAutosize\n                      minRows={3}\n                      maxRows={6}\n                      value={llmSettings.customInstruction}\n                      onChange={e =>\n                        handleLlmChange('customInstruction', e.target.value)}\n                      style={{\n                        width: '100%',\n                        padding: '8px',\n                        border: '1px solid #ccc',\n                        borderRadius: '4px',\n                      }}\n                      placeholder=\"Enter custom instruction...\"\n                      aria-label=\"Custom Instructions\"\n                    />\n                  </FormControl>\n                </Grid>\n                {llmSettings.customInstruction.length\n                  < MIN_CUSTOM_INSTRUCTION_LENGTH && (\n                  <Grid size={12} sx={{ mt: 1 }}>\n                    <Alert severity=\"warning\">\n                      Custom instructions must be at least\n                      {' '}\n                      {MIN_CUSTOM_INSTRUCTION_LENGTH}\n                      {' '}\n                      characters long\n                    </Alert>\n                  </Grid>\n                )}\n              </Grid>\n            </Grid>\n          )}\n        </Grid>\n\n        <Grid size={12}>\n          <Divider className=\"settings-divider\" />\n        </Grid>\n      </DialogContent>\n\n      {/* Footer Actions */}\n      <Grid\n        container\n        component={DialogActions}\n        alignItems=\"center\"\n        className=\"settings-footer\"\n      >\n        <Grid size=\"auto\" className=\"settings-grid-padding\">\n          <Button\n            variant=\"text\"\n            color=\"inherit\"\n            onClick={handleReset}\n            aria-label=\"Reset Settings\"\n          >\n            Reset\n          </Button>\n        </Grid>\n        <Grid\n          size=\"grow\"\n          container\n          spacing={1}\n          justifyContent=\"flex-end\"\n          className=\"settings-footer-actions\"\n        >\n          <Grid size=\"auto\">\n            <Button\n              variant=\"outlined\"\n              color=\"inherit\"\n              onClick={handleClose}\n              aria-label=\"Close Settings with no changes\"\n            >\n              Close\n            </Button>\n          </Grid>\n          <Grid size=\"auto\">\n            <Button\n              variant=\"contained\"\n              color=\"primary\"\n              onClick={handleSave}\n              disabled={!isCustomInstructionValid}\n              title={\n                !isCustomInstructionValid\n                  ? `Custom instructions must be at least ${MIN_CUSTOM_INSTRUCTION_LENGTH} characters long`\n                  : ''\n              }\n              aria-label=\"Save & Close Settings\"\n            >\n              Save & Close\n            </Button>\n          </Grid>\n        </Grid>\n      </Grid>\n    </Dialog>\n  );\n};\n\nexport default Settings;\n","import { useViewModelState } from '@state/hook/useViewModel';\nimport { Constant } from '@util/constant';\nimport React from 'react';\n\n/**\n * Visually-hidden style that keeps an element in the accessibility tree\n * but invisible on screen (standard \"sr-only\" / \"clip\" pattern).\n */\nconst visuallyHidden: React.CSSProperties = {\n  position: 'absolute',\n  width: '1px',\n  height: '1px',\n  padding: 0,\n  margin: '-1px',\n  overflow: 'hidden',\n  clip: 'rect(0, 0, 0, 0)',\n  whiteSpace: 'nowrap',\n  border: 0,\n};\n\nconst Text: React.FC = () => {\n  const { enabled, announce, value, revision, message } = useViewModelState('text');\n  const { rotor_value } = useViewModelState('rotor');\n  const settings = useViewModelState('settings');\n  const navText = (enabled && value) || '';\n  const messageText = typeof message === 'string' ? message : '';\n\n  // Current text to expose via live region: prefer message, else nav when announce is enabled\n  const current = messageText.trim().length > 0\n    ? messageText\n    : (announce && navText ? navText : '');\n\n  const visual = messageText.trim().length > 0 ? messageText : navText;\n\n  return (\n    <div>\n      <div id={Constant.TEXT_CONTAINER}>\n        {visual && visual.trim().length > 0 && (\n          <p>\n            {visual}\n          </p>\n        )}\n      </div>\n\n      {/* Screen-reader announcement region.\n          Using `key={revision}` forces React to unmount and re-mount this element\n          on every text update (including identical text). Inserting a fresh\n          role=\"alert\" element into the DOM is the most reliable way to trigger\n          screen-reader announcements across NVDA, JAWS, and VoiceOver — without\n          resorting to invisible Unicode characters. */}\n      {current && (\n        <div key={revision} role=\"alert\" style={visuallyHidden}>\n          {current}\n        </div>\n      )}\n\n      <div\n        id={Constant.ROTOR_AREA}\n        aria-live={settings.general.ariaMode}\n      >\n        {rotor_value}\n      </div>\n\n    </div>\n  );\n};\n\nexport default Text;\n","import type { Instance } from '@popperjs/core';\nimport { Tooltip as MuiTooltip } from '@mui/material';\nimport Box from '@mui/material/Box';\nimport { useViewModelState } from '@state/hook/useViewModel';\nimport { DomEventType } from '@type/event';\nimport React, { useEffect, useMemo, useRef, useState } from 'react';\n\ninterface TooltipProps {\n  plot: HTMLElement;\n}\n\nconst Tooltip: React.FC<TooltipProps> = ({ plot }) => {\n  const { tooltip } = useViewModelState('display');\n  const [isHovering, setIsHovering] = useState(false);\n\n  const positionRef = useRef({ x: 0, y: 0 });\n  const popperRef = useRef<Instance | null>(null);\n\n  // Create a virtual element as anchor\n  const virtualAnchor = useMemo(() => ({\n    getBoundingClientRect: () =>\n      new DOMRect(positionRef.current.x, positionRef.current.y, 0, 0),\n  }), []);\n\n  // Attach listeners to SVG on mount\n  useEffect(() => {\n    if (!plot) {\n      return;\n    }\n\n    const handleMouseMove = (e: MouseEvent): void => {\n      positionRef.current = { x: e.clientX, y: e.clientY };\n      popperRef.current?.update?.();\n      setIsHovering(true);\n    };\n    const handleMouseEnter = (): void => setIsHovering(true);\n    const handleMouseLeave = (): void => setIsHovering(false);\n\n    plot.addEventListener(DomEventType.MOUSE_MOVE, handleMouseMove);\n    plot.addEventListener(DomEventType.MOUSE_ENTER, handleMouseEnter);\n    plot.addEventListener(DomEventType.MOUSE_LEAVE, handleMouseLeave);\n\n    return () => {\n      plot.removeEventListener(DomEventType.MOUSE_MOVE, handleMouseMove);\n      plot.removeEventListener(DomEventType.MOUSE_ENTER, handleMouseEnter);\n      plot.removeEventListener(DomEventType.MOUSE_LEAVE, handleMouseLeave);\n    };\n  }, [plot]);\n\n  return (\n    <MuiTooltip\n      title={tooltip.value}\n      open={isHovering}\n      placement=\"top\"\n      arrow\n      slotProps={{\n        popper: {\n          popperRef,\n          anchorEl: virtualAnchor,\n        },\n      }}\n    >\n      <Box sx={{ display: 'none' }}>TooltipAnchor</Box>\n    </MuiTooltip>\n  );\n};\n\nexport default Tooltip;\n","import type { ExtremaTarget } from '@type/extrema';\nimport type { XValue } from '@type/navigation';\nimport { Close, KeyboardArrowDown } from '@mui/icons-material';\nimport { Box, IconButton, List, ListItem, ListItemText, TextField, Typography } from '@mui/material';\nimport { useViewModel, useViewModelState } from '@state/hook/useViewModel';\nimport React, { useEffect, useMemo, useRef, useState } from 'react';\n\n// Helper function to generate styles for target boxes\nfunction getTargetBoxSx(isSelected: boolean): object {\n  return {\n    'p': 1.5,\n    'border': isSelected ? 2 : 1,\n    'borderColor': isSelected ? 'primary.main' : 'divider',\n    'borderRadius': 1,\n    'mb': 0.5,\n    'cursor': 'pointer',\n    'bgcolor': isSelected ? 'action.selected' : 'transparent',\n    'transition': 'all 0.2s ease',\n    '&:hover': {\n      bgcolor: 'action.hover',\n    },\n    '&:focus': {\n      outline: 'none',\n      borderColor: 'primary.main',\n      bgcolor: 'action.selected',\n    },\n  };\n}\n\nexport const GoToExtrema: React.FC = () => {\n  const goToExtremaViewModel = useViewModel('goToExtrema');\n  const state = useViewModelState('goToExtrema');\n  const selectedItemRef = useRef<HTMLDivElement>(null);\n  const listContainerRef = useRef<HTMLDivElement>(null);\n  const modalRef = useRef<HTMLDivElement>(null);\n  const searchOptionRef = useRef<HTMLDivElement>(null);\n\n  // Search combobox state\n  const [inputValue, setInputValue] = useState('');\n  const [isDropdownOpen, setIsDropdownOpen] = useState(false);\n  const [filteredOptions, setFilteredOptions] = useState<XValue[]>([]);\n  const [dropdownSelectedIndex, setDropdownSelectedIndex] = useState(-1);\n  const inputFieldWrapperRef = useRef<HTMLInputElement>(null);\n  const inputElRef = useRef<HTMLInputElement>(null); // real input element\n  const listboxRef = useRef<HTMLUListElement>(null);\n  const liveRegionRef = useRef<HTMLDivElement>(null);\n\n  useEffect(() => {\n    if (modalRef.current) {\n      modalRef.current.focus();\n    }\n  }, []);\n\n  // Available X values from active trace if provided\n  const availableXValues = useMemo(() => {\n    return goToExtremaViewModel.getAvailableXValues();\n  }, [goToExtremaViewModel]);\n\n  // Keep filtered options in sync\n  useEffect(() => {\n    if (inputValue.trim() === '') {\n      setFilteredOptions(availableXValues);\n    } else {\n      const q = inputValue.toLowerCase();\n      setFilteredOptions(\n        availableXValues.filter(v => String(v).toLowerCase().includes(q)),\n      );\n    }\n    if (isDropdownOpen) {\n      setDropdownSelectedIndex(prev => (prev < 0 ? 0 : Math.min(prev, Math.max(0, availableXValues.length - 1))));\n    }\n  }, [inputValue, availableXValues, isDropdownOpen]);\n\n  // Compute active option text for announcement via aria-valuetext\n  const activeOptionText = dropdownSelectedIndex >= 0 && filteredOptions[dropdownSelectedIndex] !== undefined\n    ? String(filteredOptions[dropdownSelectedIndex])\n    : undefined;\n\n  // TextField slot props for accessibility and functionality\n  const textFieldSlotProps = {\n    input: {\n      'role': 'combobox' as const,\n      'aria-autocomplete': 'list' as const,\n      'aria-haspopup': 'listbox' as const,\n      'aria-controls': 'x-value-listbox',\n      'aria-expanded': isDropdownOpen,\n      'aria-activedescendant': dropdownSelectedIndex >= 0 ? `option-${dropdownSelectedIndex}` : undefined,\n      'aria-valuetext': activeOptionText,\n      'aria-label': 'Search and select X value',\n      'endAdornment': (\n        <IconButton\n          aria-label={isDropdownOpen ? 'Close dropdown' : 'Open dropdown'}\n          size=\"small\"\n          onClick={(e) => {\n            e.stopPropagation();\n            setIsDropdownOpen(!isDropdownOpen);\n          }}\n        >\n          <KeyboardArrowDown />\n        </IconButton>\n      ),\n    },\n  };\n\n  // Announce highlighted option via assertive live region for SRs that ignore activedescendant text\n  useEffect(() => {\n    if (liveRegionRef.current) {\n      const text = activeOptionText ?? '';\n      liveRegionRef.current.textContent = text;\n    }\n  }, [dropdownSelectedIndex, activeOptionText]);\n\n  // Auto-scroll and focus management when selection changes\n  useEffect(() => {\n    if (selectedItemRef.current && listContainerRef.current) {\n      const listContainer = listContainerRef.current;\n      const selectedItem = selectedItemRef.current;\n\n      selectedItem.focus();\n\n      const containerRect = listContainer.getBoundingClientRect();\n      const itemRect = selectedItem.getBoundingClientRect();\n\n      if (itemRect.bottom > containerRect.bottom) {\n        selectedItem.scrollIntoView({ behavior: 'smooth', block: 'end', inline: 'nearest' });\n      } else if (itemRect.top < containerRect.top) {\n        selectedItem.scrollIntoView({ behavior: 'smooth', block: 'start', inline: 'nearest' });\n      }\n    }\n  }, [state.selectedIndex]);\n\n  // Ensure dropdown option stays visible\n  useEffect(() => {\n    if (isDropdownOpen && dropdownSelectedIndex >= 0 && listboxRef.current) {\n      const el = listboxRef.current.querySelector(`#option-${dropdownSelectedIndex}`) as HTMLElement | null;\n      if (el) {\n        el.scrollIntoView({ block: 'nearest' });\n      }\n    }\n  }, [dropdownSelectedIndex, isDropdownOpen]);\n\n  const handleTargetSelect = (target: ExtremaTarget): void => {\n    const activeTrace = goToExtremaViewModel.activeContext?.active;\n    if (activeTrace && hasNavigateToExtrema(activeTrace)) {\n      activeTrace.navigateToExtrema(target);\n    }\n    goToExtremaViewModel.hide();\n  };\n\n  // Type guard to check if plot supports navigateToExtrema\n  function hasNavigateToExtrema(plot: unknown): plot is { navigateToExtrema: (target: ExtremaTarget) => void } {\n    return plot !== null\n      && typeof plot === 'object'\n      && 'navigateToExtrema' in plot\n      && typeof (plot as any).navigateToExtrema === 'function';\n  }\n\n  const handleClose = (): void => {\n    if (liveRegionRef.current) {\n      liveRegionRef.current.textContent = '';\n    }\n    goToExtremaViewModel.hide();\n  };\n\n  const handleOptionSelect = (value: XValue): void => {\n    const activeTrace = goToExtremaViewModel.activeContext?.active;\n    if (activeTrace && hasMoveToXValue(activeTrace)) {\n      activeTrace.moveToXValue(value);\n      setIsDropdownOpen(false);\n      setDropdownSelectedIndex(-1);\n      setInputValue('');\n      goToExtremaViewModel.hide();\n    }\n  };\n\n  // Type guard to check if plot supports moveToXValue\n  function hasMoveToXValue(plot: unknown): plot is { moveToXValue: (value: XValue) => void } {\n    return plot !== null\n      && typeof plot === 'object'\n      && 'moveToXValue' in plot\n      && typeof (plot as any).moveToXValue === 'function';\n  }\n\n  const focusSearchInput = (): void => {\n    // Prefer focusing the actual input element\n    if (inputElRef.current) {\n      inputElRef.current.focus();\n    } else if (inputFieldWrapperRef.current) {\n      (inputFieldWrapperRef.current as unknown as HTMLElement).focus();\n    }\n  };\n\n  const announceToScreenReader = (message: string): void => {\n    if (liveRegionRef.current) {\n      liveRegionRef.current.textContent = message;\n    }\n  };\n\n  const handleListboxKeyDown = (event: React.KeyboardEvent): void => {\n    if (event.key === 'ArrowDown') {\n      event.preventDefault();\n      event.stopPropagation();\n\n      if (state.selectedIndex === state.targets.length - 1) {\n        // If on last extrema option, move to search\n        focusSearchInput();\n        setIsDropdownOpen(true);\n        setDropdownSelectedIndex(0);\n        announceToScreenReader('Moved to search. Type to filter X values.');\n      } else {\n        goToExtremaViewModel.moveDown();\n        // Announce the newly selected option\n        const newOption = state.targets[state.selectedIndex + 1];\n        announceToScreenReader(`Selected: ${newOption.label}`);\n      }\n    } else if (event.key === 'ArrowUp') {\n      event.preventDefault();\n      event.stopPropagation();\n\n      if (state.selectedIndex === 0) {\n        announceToScreenReader('At first extrema option');\n      } else {\n        goToExtremaViewModel.moveUp();\n        // Announce the newly selected option\n        const newOption = state.targets[state.selectedIndex - 1];\n        announceToScreenReader(`Selected: ${newOption.label}`);\n      }\n    } else if (event.key === 'Enter') {\n      event.preventDefault();\n      event.stopPropagation();\n\n      if (state.selectedIndex < state.targets.length) {\n        const target = state.targets[state.selectedIndex];\n        if (target) {\n          handleTargetSelect(target);\n        }\n      }\n    }\n  };\n\n  const handleInputKeyDown = (event: React.KeyboardEvent): void => {\n    if (event.key === 'Enter') {\n      event.preventDefault();\n      event.stopPropagation();\n      if (dropdownSelectedIndex >= 0 && filteredOptions[dropdownSelectedIndex] !== undefined) {\n        handleOptionSelect(filteredOptions[dropdownSelectedIndex]);\n      }\n    } else if (event.key === 'ArrowDown') {\n      event.preventDefault();\n      event.stopPropagation();\n      if (dropdownSelectedIndex === filteredOptions.length - 1) {\n        announceToScreenReader('At last search result');\n      } else {\n        setDropdownSelectedIndex(i => Math.min(i + 1, filteredOptions.length - 1));\n        // Announce the newly selected search result\n        if (filteredOptions[dropdownSelectedIndex + 1]) {\n          announceToScreenReader(`Selected: ${filteredOptions[dropdownSelectedIndex + 1]}`);\n        }\n      }\n    } else if (event.key === 'ArrowUp') {\n      event.preventDefault();\n      event.stopPropagation();\n      // If on first search result, go back to main options\n      if (dropdownSelectedIndex === 0) {\n        setIsDropdownOpen(false);\n        setDropdownSelectedIndex(-1);\n        // Get the last selected extrema option's label for announcement\n        const lastSelectedOption = state.targets[state.selectedIndex];\n        announceToScreenReader(`Returning to extrema options: ${lastSelectedOption.label}`);\n        // Focus back on the selected option\n        if (selectedItemRef.current) {\n          selectedItemRef.current.focus();\n        }\n      } else {\n        setDropdownSelectedIndex(i => Math.max(0, i - 1));\n        // Announce the newly selected search result\n        if (filteredOptions[dropdownSelectedIndex - 1]) {\n          announceToScreenReader(`Selected: ${filteredOptions[dropdownSelectedIndex - 1]}`);\n        }\n      }\n    }\n  };\n\n  // Conditional rendering in JSX, not early return (following codebase pattern)\n  return state.visible && state.targets.length > 0\n    ? (\n        <>\n          {/* Backdrop/Overlay */}\n          <Box\n            sx={{\n              position: 'fixed',\n              top: 0,\n              left: 0,\n              right: 0,\n              bottom: 0,\n              bgcolor: 'rgba(0, 0, 0, 0.5)',\n              zIndex: 9999,\n            }}\n            onClick={handleClose}\n            aria-hidden=\"true\"\n          />\n\n          {/* Modal Content */}\n          <Box\n            ref={modalRef}\n            role=\"dialog\"\n            aria-modal=\"true\"\n            aria-labelledby=\"go-to-extrema-title\"\n            aria-describedby=\"go-to-extrema-description\"\n            tabIndex={0}\n            sx={{\n              position: 'fixed',\n              top: '50%',\n              left: '50%',\n              transform: 'translate(-50%, -50%)',\n              bgcolor: 'background.paper',\n              border: 1,\n              borderColor: 'divider',\n              borderRadius: 2,\n              p: 3,\n              boxShadow: 3,\n              zIndex: 10000,\n              minWidth: 300,\n              maxHeight: '80vh',\n              outline: 'none',\n            }}\n          >\n            <Box id=\"go-to-extrema-title\" sx={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center', mb: 2 }}>\n              <Typography variant=\"h6\" component=\"h3\" sx={{ m: 0, fontWeight: 600 }}>\n                Go To\n              </Typography>\n              <IconButton onClick={handleClose} aria-label=\"Close dialog\" size=\"small\">\n                <Close />\n              </IconButton>\n            </Box>\n\n            <Box id=\"go-to-extrema-description\" sx={{ mb: 2 }}>\n              <Typography variant=\"body2\" color=\"text.secondary\" sx={{ m: 0 }}>\n                {state.description || 'Navigate to points of interest'}\n              </Typography>\n            </Box>\n\n            <Box ref={listContainerRef} role=\"listbox\" aria-label=\"Navigation targets\" onKeyDown={handleListboxKeyDown} sx={{ maxHeight: 300, overflowY: 'auto', border: 1, borderColor: 'divider', borderRadius: 1, p: 1 }}>\n              {state.targets.map((target: ExtremaTarget, index: number) => {\n                // Format display based on target type using structured display fields when available\n                const isIntersection = target.type === 'intersection';\n                let displayLabel: string;\n\n                if (isIntersection && target.display) {\n                  // Use structured display fields for intersections\n                  // Prefix tells users whether this is sampled-point or segment-only crossing.\n                  const intersectionPrefix = target.intersectionKind === 'point'\n                    ? 'Point intersection'\n                    : target.intersectionKind === 'slope'\n                      ? 'Slope intersection'\n                      : 'Intersection';\n                  displayLabel = `${intersectionPrefix} with ${target.display.otherLines} at ${target.display.coords}`;\n                } else if (isIntersection) {\n                  // Fallback for intersection without display fields\n                  displayLabel = target.label;\n                } else {\n                  // For min/max, show: \"Max point Value: 8.00 at X\"\n                  const labelParts = target.label.split(' at ');\n                  // Guard against labels without \" at \" separator\n                  displayLabel = labelParts[1]\n                    ? `${labelParts[0]} Value: ${target.value.toFixed(2)} at ${labelParts[1]}`\n                    : `${labelParts[0]} Value: ${target.value.toFixed(2)}`;\n                }\n\n                return (\n                  <Box\n                    key={`target-${index}-${target.type}-${target.label}`}\n                    ref={index === state.selectedIndex ? selectedItemRef : null}\n                    id={`extrema-target-${index}`}\n                    onClick={() => handleTargetSelect(target)}\n                    role=\"option\"\n                    aria-selected={state.selectedIndex === index}\n                    aria-label={displayLabel}\n                    tabIndex={0}\n                    sx={getTargetBoxSx(state.selectedIndex === index)}\n                  >\n                    <Typography variant=\"body2\" sx={{ fontWeight: 600 }}>\n                      {displayLabel}\n                    </Typography>\n                  </Box>\n                );\n              })}\n\n              {/* 4th option: Searchable combobox */}\n              {availableXValues.length > 0 && (\n                <Box\n                  ref={searchOptionRef}\n                  id=\"search-input-option\"\n                  role=\"option\"\n                  aria-selected={state.selectedIndex === state.targets.length}\n                  aria-label=\"Search and navigate to specific X value\"\n                  aria-expanded={isDropdownOpen}\n                  aria-controls=\"x-value-listbox\"\n                  tabIndex={0}\n                  sx={{ p: 1.5, borderRadius: 1, mb: 0.5, border: state.selectedIndex === state.targets.length ? 2 : 1, borderColor: state.selectedIndex === state.targets.length ? 'primary.main' : 'divider', bgcolor: state.selectedIndex === state.targets.length ? 'action.selected' : 'transparent', position: 'relative' }}\n                  onClick={() => {\n                    focusSearchInput();\n                    setIsDropdownOpen(true);\n                    setDropdownSelectedIndex(0);\n                  }}\n                >\n                  <TextField\n                    ref={inputFieldWrapperRef}\n                    inputRef={inputElRef}\n                    label=\"Search X values\"\n                    placeholder={`Type to search ${availableXValues.length} values`}\n                    fullWidth\n                    variant=\"outlined\"\n                    size=\"small\"\n                    value={inputValue}\n                    onChange={(e) => {\n                      setInputValue(e.target.value);\n                      setIsDropdownOpen(true);\n                      if (dropdownSelectedIndex < 0) {\n                        setDropdownSelectedIndex(0);\n                      }\n                    }}\n                    onFocus={() => {\n                      setIsDropdownOpen(true);\n                      if (dropdownSelectedIndex < 0) {\n                        setDropdownSelectedIndex(0);\n                      }\n                    }}\n                    onKeyDown={handleInputKeyDown}\n                    slotProps={textFieldSlotProps}\n                  />\n\n                  {isDropdownOpen && filteredOptions.length > 0 && (\n                    <List ref={listboxRef} id=\"x-value-listbox\" role=\"listbox\" aria-label=\"Available X values\" aria-hidden={!isDropdownOpen} sx={{ position: 'absolute', top: '100%', left: 0, right: 0, bgcolor: 'background.paper', border: 1, borderColor: 'divider', borderRadius: 1, maxHeight: 180, overflowY: 'auto', zIndex: 2, boxShadow: 2, mt: 0.5 }}>\n                      {filteredOptions.map((value, idx) => (\n                        <ListItem\n                          key={`${value}-${idx}`}\n                          id={`option-${idx}`}\n                          role=\"option\"\n                          aria-selected={dropdownSelectedIndex === idx}\n                          aria-label={String(value)}\n                          tabIndex={0}\n                          onClick={() => handleOptionSelect(value)}\n                          onKeyDown={(e) => {\n                            if (e.key === 'Enter') {\n                              e.preventDefault();\n                              e.stopPropagation();\n                              handleOptionSelect(value);\n                            } else if (e.key === 'ArrowDown') {\n                              e.preventDefault();\n                              e.stopPropagation();\n                              setDropdownSelectedIndex(curr => Math.min(curr + 1, filteredOptions.length - 1));\n                            } else if (e.key === 'ArrowUp') {\n                              e.preventDefault();\n                              e.stopPropagation();\n                              setDropdownSelectedIndex(curr => Math.max(curr - 1, 0));\n                            }\n                          }}\n                          sx={{ 'cursor': 'pointer', 'py': 1, 'px': 2, 'bgcolor': dropdownSelectedIndex === idx ? 'action.selected' : 'transparent', '&:hover': { bgcolor: 'action.hover' } }}\n                        >\n                          <ListItemText primary={String(value)} />\n                        </ListItem>\n                      ))}\n                    </List>\n                  )}\n                  {/* Assertive live region for immediate announcement of highlighted option */}\n                  <div\n                    ref={liveRegionRef}\n                    id=\"sr-active-option-announcer\"\n                    aria-live=\"assertive\"\n                    aria-atomic=\"true\"\n                    style={{ position: 'absolute', left: '-10000px', width: '1px', height: '1px', overflow: 'hidden' }}\n                  />\n                </Box>\n              )}\n            </Box>\n          </Box>\n        </>\n      )\n    : null;\n};\n","import type { MaidrContextValue } from '@state/context';\nimport type { AppStore } from '@state/store';\nimport type { Focus } from '@type/event';\nimport type { FC, JSX } from 'react';\nimport { MaidrContext } from '@state/context';\nimport { useViewModelState } from '@state/hook/useViewModel';\nimport { Provider } from 'react-redux';\nimport Braille from './component/Braille';\nimport Chat from './component/Chat';\nimport CommandPalette from './component/CommandPalette';\nimport Help from './component/Help';\nimport Review from './component/Review';\nimport Settings from './component/Settings';\nimport Text from './component/Text';\nimport Tooltip from './component/Tooltip';\nimport { GoToExtrema } from './components/GoToExtrema';\n\ninterface AppProps {\n  plot: HTMLElement;\n}\n\nconst App: FC<AppProps> = ({ plot }) => {\n  const { focus, tooltip } = useViewModelState('display');\n\n  const renderFocusedComponent = (focused: Focus | null): JSX.Element | null => {\n    switch (focused) {\n      case 'BRAILLE':\n        return <Braille />;\n\n      case 'CHAT':\n        return <Chat />;\n\n      case 'COMMAND_PALETTE':\n        return <CommandPalette />;\n\n      case 'GO_TO_EXTREMA':\n        return <GoToExtrema />;\n\n      case 'HELP':\n        return <Help />;\n\n      case 'REVIEW':\n        return <Review />;\n\n      case 'SETTINGS':\n        return <Settings />;\n\n      default:\n        return null;\n    }\n  };\n\n  return (\n    <>\n      {tooltip.visible && <Tooltip plot={plot} />}\n      <Text />\n      {renderFocusedComponent(focus)}\n    </>\n  );\n};\n\ninterface MaidrAppProps {\n  plot: HTMLElement;\n  store: AppStore;\n  contextValue: MaidrContextValue;\n}\n\nexport function MaidrApp({ plot, store, contextValue }: MaidrAppProps): JSX.Element {\n  return (\n    <Provider store={store}>\n      <MaidrContext.Provider value={contextValue}>\n        <App plot={plot} />\n      </MaidrContext.Provider>\n    </Provider>\n  );\n}\n","import type { AppStore } from '@state/store';\nimport type { Maidr as MaidrData } from '@type/grammar';\nimport type { JSX, ReactNode } from 'react';\nimport { Orientation, TraceType } from '@type/grammar';\nimport { useMemo, useRef } from 'react';\nimport { useMaidrController } from './state/hook/useMaidrController';\nimport { createMaidrStore } from './state/store';\nimport { MaidrApp } from './ui/App';\n\n/**\n * Props for the Maidr React component.\n */\nexport interface MaidrProps {\n  /** The MAIDR JSON configuration describing the plot data and structure. */\n  data: MaidrData;\n  /** The SVG or plot element(s) to make accessible. Rendered inside the figure. */\n  children: ReactNode;\n}\n\n/**\n * React component that provides accessible, non-visual access to statistical\n * visualizations through audio sonification, text descriptions, braille output,\n * and AI-powered descriptions.\n *\n * @example\n * ```tsx\n * import { Maidr } from 'maidr/react';\n *\n * function MyChart({ chartData }) {\n *   return (\n *     <Maidr data={chartData}>\n *       <svg>{...}</svg>\n *     </Maidr>\n *   );\n * }\n * ```\n */\n/**\n * Derives a static instruction string from the MAIDR configuration for the\n * initial render. This replicates what the old throwaway Controller / Context\n * produced via {@link Context.getInstruction} so that screen readers can\n * discover the chart (e.g. NVDA \"g\" key) before the user focuses it.\n *\n * Once the Controller is created on focus-in, {@link DisplayService} overwrites\n * these attributes with the authoritative values.\n */\n/**\n * Build a human-readable plot type string with optional orientation prefix.\n * Returns just the type when orientation is absent/empty (no extra whitespace).\n */\nfunction formatPlotType(plotType: string, orientation?: string): string {\n  if (!orientation) {\n    return plotType;\n  }\n  if (orientation === Orientation.HORIZONTAL || orientation === 'horz') {\n    return `horizontal ${plotType}`;\n  }\n  if (orientation === Orientation.VERTICAL || orientation === 'vert') {\n    return `vertical ${plotType}`;\n  }\n  return plotType;\n}\n\nfunction getInitialInstruction(data: MaidrData): string {\n  const subplots = data.subplots;\n  const subplotCount = subplots.flat().length;\n\n  if (subplotCount > 1) {\n    return `This is a maidr figure containing ${subplotCount} subplots. Click to activate. Use arrow keys to navigate subplots and press 'ENTER'.`;\n  }\n\n  // Single subplot — describe the first layer's trace type.\n  const firstSubplot = subplots[0]?.[0];\n  const layerCount = firstSubplot?.layers.length ?? 0;\n  const firstLayer = firstSubplot?.layers[0];\n  const traceType = firstLayer?.type ?? 'chart';\n\n  // Normalize line plot type: data is LinePoint[][] where outer array = groups.\n  // A line trace with exactly 1 group is \"single line\", not \"multiline\".\n  let plotType: string = traceType;\n  let groupCountText = '';\n  if (traceType === TraceType.LINE && Array.isArray(firstLayer?.data)) {\n    const groupCount = firstLayer.data.length;\n    if (groupCount > 1) {\n      plotType = 'multiline';\n      groupCountText = ` with ${groupCount} groups`;\n    } else {\n      plotType = 'single line';\n    }\n  }\n\n  const displayType = formatPlotType(plotType, firstLayer?.orientation);\n\n  if (layerCount > 1) {\n    return `This is a maidr plot containing ${layerCount} layers, and this is layer 1 of ${layerCount}: ${displayType} plot. Click to activate. Use Arrows to navigate data points. Toggle B for Braille, T for Text, S for Sonification, and R for Review mode.`;\n  }\n\n  return `This is a maidr plot of type: ${displayType}${groupCountText}. Click to activate. Use Arrows to navigate data points. Toggle B for Braille, T for Text, S for Sonification, and R for Review mode.`;\n}\n\nexport function Maidr({ data, children }: MaidrProps): JSX.Element {\n  // Each Maidr instance gets its own isolated Redux store.\n  // useRef with lazy init guarantees the store persists for the component's\n  // entire lifetime, unlike useMemo which is only a performance hint.\n  const storeRef = useRef<AppStore | null>(null);\n  if (storeRef.current === null)\n    storeRef.current = createMaidrStore();\n  const store = storeRef.current;\n\n  const { plotRef, figureRef, contextValue, onFocusIn, onFocusOut } = useMaidrController(data, store);\n\n  // Compute the initial instruction once so the plot is discoverable by screen\n  // readers (role=\"img\" + aria-label) before any user interaction.\n  const initialInstruction = useMemo(() => getInitialInstruction(data), [data]);\n\n  return (\n    <article id={`maidr-article-${data.id}`}>\n      <figure\n        ref={figureRef}\n        id={`maidr-figure-${data.id}`}\n        onFocus={onFocusIn}\n        onBlur={onFocusOut}\n      >\n        <div\n          ref={plotRef}\n          tabIndex={0}\n          role=\"img\"\n          aria-label={initialInstruction}\n          title={initialInstruction}\n          style={{ width: 'fit-content' }}\n        >\n          {children}\n        </div>\n        {contextValue && plotRef.current && (\n          <div id={`react-container-${data.id}`}>\n            <MaidrApp\n              plot={plotRef.current}\n              store={store}\n              contextValue={contextValue}\n            />\n          </div>\n        )}\n      </figure>\n    </article>\n  );\n}\n"],"names":["Orientation","TraceType","isGridNavigable","plot","hasXProperty","value","isXValue","isPointWithX","point","NavigationService","subplot","direction","currentTrace","currentXValue","newTrace","positioned","currentYValue","row","col","orientation","sections","pointIndex","segmentPosition","points","values","xValue","moveToIndex","targetIndex","nearestIndex","_actualX","extractXValue","bestRow","bestCol","bestDist","fallbackType","rowPoints","colIndex","nearestCol","dist","valueToCompare","bestIdx","i","px","pxNum","xValueNum","trace","index","size","state","isBarPoint","isLinePoint","isHistogramPoint","isSegmentedPoint","isSmoothPoint","isCandlestickPoint","DomEventType","Scope","Emitter","__publicField","listener","event","Constant","Stack","item","element","deleteCount","isff","addEvent","object","method","useCapture","removeEvent","getMods","modifier","key","mods","getKeys","keys","compareArray","a1","a2","arr1","arr2","isIndex","_keyMap","_modifier","modifierMap","_mods","_handlers","k","_downKeys","winListendFocus","_scope","elementEventMap","code","x","getKey","getModifier","setScope","scope","getScope","getPressedKeyCodes","getPressedKeyString","c","getAllKeyCodes","result","_ref","shortcut","v","filter","target","tagName","flag","isInput","isPressed","keyCode","deleteScope","newScope","handlers","_ref2","removeKeyEvent","clearModifier","hotkeys","unbind","keysInfo","info","eachUnbind","_len","args","_key","_ref3","splitKey","originKey","unbindKeys","len","lastKey","unbindElements","record","isUnbind","eventHandler","handler","modifiersMatch","y","dispatch","asterisk","keyName","keyNum","eventKey","e","handlerKey","keyLen","keyShortcut","_downKeysCurrent","a","option","keyup","keydown","capture","single","keydownListener","keyupListenr","trigger","data","_ref4","el","_api","_hotkeys","deep","formatPlotType","plotType","Context","figure","figureState","subplotState","enable","previousTrace","activeSubplot","onlySubplot","activeFigure","activeTrace","includeClickPrompt","clickPrompt","subplotTraceOrientation","subplotPlotType","effectivePlotType","groupCountText","Color","color","hex","rgbMatch","rgb","rgb1","rgb2","l1","l2","r","g","b","channel","color1","color2","Svg","svg","svgString","svgDataUrl","img","resolve","reject","canvas","ctx","error","query","shouldClone","clone","type","cx","cy","parent","style","strokeWidth","radius","_a","box","edge","bBox","effectiveWidth","effectiveHeight","x1","y1","x2","y2","line","minThreshold","parsed","fallbackColor","bbox","circle","tag","isLineElement","computed","originalColor","fillOpacity","strokeOpacity","match","unit","originalRgb","modifiedRgb","fill","group","figureBgElement","bg","highlightColor","DEFAULT_SUBPLOT_TITLE","DEFAULT_X_AXIS","DEFAULT_Y_AXIS","DEFAULT_Z_AXIS","AbstractPlot","safeRow","safeCol","observer","currentState","outOfBoundsState","isMoved","_direction","_type","_mode","_x","_y","AbstractTrace","layer","axisX","axisY","_b","axisZ","_c","elements","cell","cellElements","original","_target","nearest","_row","_col","MathUtil","flattened","min","max","AbstractMovable","options","MovableGrid","MovableGraph","graph","node","nextNode","extremeNode","MovablePlane","xPoints","yPoints","currentX","midY","currentY","midX","AbstractBarPlot","isVertical","mainLabel","mainValue","crossLabel","crossValue","selector","svgElements","aligned","svgIdx","centers","targetElement","rowElements","BarTrace","targets","currentGroup","groupValues","groupMin","groupMax","maxIndex","minIndex","maxPoint","minPoint","maxXValue","minXValue","currentIndex","step","BoxplotSection","BoxTrace","accessors","filteredValues","sectionAccessors","accessor","p","isHorizontal","panning","section","selectors","originals","lowerOutliersOriginals","s","upperOutliersOriginals","minOriginal","maxOriginal","iqOriginal","q2Original","q1DirectOriginal","q3DirectOriginal","boxIdx","lowerOutliers","upperOutliers","q2","q1","q3","isIqrReversed","sectionIdx","current_value","next_value","mode","nearestDistance","center","distance","TREND","VOLATILITY_PRECISION_MULTIPLIER","SECTIONS","Candlestick","candle","seg","pair","sortedSegments","positionMap","segmentType","position","dynamicSegmentPosition","navOrder","currentSegmentPosition","newSegmentPosition","newPointIndex","currentSorted","currentSortedDown","bearOrBull","valueSortedRow","perRowMin","perRowMax","selectorArray","sel","array","selectorString","allElements","segmentElements","pos","elementIndex","cs","N","bodies","highs","lows","combined","opens","closes","derivedOpen","derivedClose","derivedVolatility","openEl","body","open","close","closeEl","parts","hi","lo","unique","currentSegment","volatilityValues","maxVolatility","maxVolatilityIndices","minVolatility","minVolatilityIndices","_count","segmentValues","maxValue","maxIndices","minValue","minIndices","segmentLabel","Heatmap","numRows","numCols","domElements","rowIndex","flatIndex","imageEl","imgX","imgY","imgW","imgH","cellW","cellH","svgNS","rect","cols","current_col","rows","current_row","currentRow","currentCol","globalMax","globalMin","rowMax","rowMin","colMax","colMin","extremaRow","extremaCol","extremaValue","Histogram","TYPE","SVG_PATH_ML_REGEX","SVG_PATH_C_REGEX","_LineTrace","rowCount","maxCols","pointsAtCol","idx","sortedPoints","bottom","top","start","end","intersections","zData","lineTypes","intersection","lineIndex","prevZ","targetRow","targetCol","stateWithIntersections","bestDistance","matchingPointIndex","lineY","isValidDirection","elementBased","allFailed","lineElement","coordinates","pathD","strCoords","coordinate","expected","pathXMin","pathXMax","dataPoints","dataXMin","dataXRange","full","dataX","svgX","svgY","j","cjx","cj1x","segLen","t","linePointElements","lineFailed","indexed","baseState","isMultiline","stateWithPlotType","p1","p2","p3","p4","x3","y3","x4","y4","denom","u","intersectX","intersectY","currentLinePoints","rawIntersections","segIndex","seg1Start","seg1End","otherLine","otherLinePoints","otherSegIndex","seg2Start","seg2End","distToStart","distToEnd","nearestPointIndex","groupedIntersections","raw","existingGroup","intersectingLines","entry","firstPoint","currentLine","_d","otherLineNames","coordsDisplay","intersectionLabel","val","LineTrace","ScatterTrace","sortedByX","sortedByY","allSvgClones","gridConfig","xSteps","ySteps","gridValues","maxCount","count","current","currentPoint","currentXPoint","middleYValue","currentYPoint","middleXValue","moved","enabled","sorted","currentSvgGroup","axes","xMin","xMax","xTickStep","yMin","yMax","_e","yTickStep","_f","axisMin","axisMax","tick","steps","numBins","binMin","binMax","bins","svgClones","grid","hasElements","colIdx","rowIdx","xGroups","yGroups","transform","sortedXElements","_","sortedYElements","SUM","UNDEFINED","SegmentedTrace","summaryValues","summaryPoints","sum","summaryMin","summaryMax","groupLabel","maxCategoryLabel","minCategoryLabel","groupIndex","categoryIndex","totalExpected","skipZeros","domIndex","isRowMajor","isForward","SmoothTrace","rowYValues","getY","prev","curr","next","SmoothTraceSvgXY","pt","createSmoothTrace","MIN_DENSITY_RANGE","ViolinKdeTrace","d","refDensity","refMin","refMax","kdeSelectors","colCount","clamp","prevDensity","currDensity","nextDensity","volumeScale","currentRowDensity","currentDensity","currentMax","safeCurrentMax","roundTo4","num","categoricalValue","firstInRow","roundedY","textState","roundedWidth","violinIndex","currentViolin","maxCol","yValue","closestIndex","minDistance","elementsByViolin","isOnePerViolin","violinElements","matchedElements","useElements","pathElements","polygonElements","candidates","primaryElement","ViolinBoxTrace","flatValues","minIdx","minSectionIndex","numViolins","rowValues","closestRow","closestCol","meanOriginal","mean","sectionElements","TraceFactory","DEFAULT_FIGURE_TITLE","DEFAULT_SUBTITLE","DEFAULT_CAPTION","Figure","maidr","subplots","Subplot","layout","axesEl","axesElement","layers","firstLayerSelectors","layerTypes","_figureRow","_figureCol","AudioPaletteIndex","_AudioPaletteService","cachedEntry","newEntry","trend","baseIndex","baseEntry","variation","harmonics","timbreModulation","numHarmonics","frequency","amplitude","base","factor","arrayIndex","AudioPaletteService","NULL_FREQUENCY","WAITING_FREQUENCY","COMPLETE_FREQUENCY","WARNING_FREQUENCY","WARNING_DURATION","WARNING_SPACE","DEFAULT_DURATION","DEFAULT_PALETTE_INDEX","AudioService","notification","settings","compressor","smoothGain","traceState","audio","paletteEntry","playRate","activeIds","playNext","freq","fromFreq","toFreq","gainNode","volume","startTime","duration","attack","decay","sustain","release","attackTime","decayTime","releaseTime","sustainTime","oscillators","gainNodes","primaryOsc","harmonic","harmonicOsc","oscillatorVolume","envelope","stereoPanner","osc","cleanUp","audioId","volumeMultiplier","freqs","baseVolume","currentVolume","xPos","waveType","oscillator","now","frequencies","gains","masterGain","gain","vol","tones","sharedValue","sharedFrequency","tone","from","to","message","activeNode","DEFAULT_SPEED","MIN_SPEED","MAX_SPEED","DEFAULT_INTERVAL","AutoplayService","context","newSpeed","calculatedRate","DEFAULT_BRAILLE_SIZE","normalizeDisplaySize","BRAILLE_DISPLAY_SIZE_SETTING","encodeWithWrapping","getChar","displaySize","cellToIndex","indexToCell","sentinelIdx","BarBrailleEncoder","range","low","medium","high","BoxBrailleEncoder","boxValData","lenData","isBeforeMid","diff","preAllocated","l","locMin","locMax","locQ1","locQ3","available","totalLength","allocated","totalChars","adjustIndex","brailleChar","HeatmapBrailleEncoder","AbstractTimeSeriesEncoder","mediumHigh","currentValue","prevValue","level","currLevel","prevLevel","brailleMap","char","withDot8","CandlestickBrailleEncoder","LineBrailleEncoder","BrailleService","display","disposable","braille","encoder","notSupported","HttpStatus","Api","url","additionalHeaders","headers","response","BASIC_SYSTEM_PROMPT","INTERMEDIATE_SYSTEM_PROMPT","ADVANCED_SYSTEM_PROMPT","USER_PROMPT_TEMPLATE","SYSTEM_PROMPTS","selectPromptByLevel","expertiseLevel","formatSystemPrompt","customInstruction","formatUserPrompt","GPT_MAX_TOKENS","CLAUDE_MAX_TOKENS","GEMINI_MAX_TOKENS","ChatService","textService","Gpt","Claude","Gemini","model","request","AbstractLlmModel","image","currentPositionText","payload","version","maidrJson","expertise","apiKey","systemPrompt","userPrompt","combinedPrompt","AutoplayUpwardCommand","autoplay","AutoplayDownwardCommand","AutoplayForwardCommand","AutoplayBackwardCommand","StopAutoplayCommand","SpeedUpAutoplayCommand","SpeedDownAutoplayCommand","ResetAutoplaySpeedCommand","AnnounceCommand","textViewModel","audioService","displayService","AnnounceXCommand","text","AnnounceYCommand","AnnounceZCommand","zLabel","AnnounceTitleCommand","title","label","traceTitle","figureTitle","AnnounceSubtitleCommand","subtitle","AnnounceCaptionCommand","caption","AnnouncePointCommand","highlightService","brailleViewModel","AnnouncePositionCommand","traceType","total","percent","colPos","rowPos","colPercent","rowPercent","xRange","yRange","xLabel","yLabel","boxIndex","totalBoxes","candleIndex","totalCandles","posIndex","totalPos","totalViolins","violinPos","violinPrefix","posPercent","totalLines","linePos","plotPrefix","GoToExtremaToggleCommand","goToExtremaViewModel","GoToExtremaMoveUpCommand","GoToExtremaMoveDownCommand","GoToExtremaSelectCommand","GoToExtremaCloseCommand","EnterGridCellCommand","ExitGridCellCommand","GridCellMoveLeftCommand","GridCellMoveRightCommand","MoveUpCommand","MoveDownCommand","MoveLeftCommand","MoveRightCommand","MoveToTopExtremeCommand","MoveToBottomExtremeCommand","MoveToLeftExtremeCommand","MoveToRightExtremeCommand","MoveToTraceContextCommand","brailleService","MoveToSubplotContextCommand","ExitBrailleAndSubplotCommand","MoveToNextTraceCommand","MoveToPrevTraceCommand","RotorNavigationNextNavUnitCommand","_context","rotorNavigationViewModel","RotorNavigationPrevNavUnitCommand","RotorNavigationMoveUpCommand","RotorNavigationMoveLeftCommand","RotorNavigationMoveDownCommand","RotorNavigationMoveRightCommand","ToggleBrailleCommand","ToggleTextCommand","ToggleAudioCommand","ToggleReviewCommand","reviewViewModel","ToggleHelpCommand","helpViewModel","ToggleChatCommand","chatViewModel","ToggleSettingsCommand","settingsViewModel","ToggleCommandPaletteCommand","commandPaletteViewModel","CommandPaletteCloseCommand","CommandPaletteMoveUpCommand","CommandPaletteMoveDownCommand","CommandPaletteSelectCommand","ToggleScopeCommand","ToggleHighContrast","highContrastService","CommandFactory","commandContext","command","_Platform","Platform","hotkey","description","BRAILLE_KEYMAP","CHAT_KEYMAP","FIGURE_LABEL_KEYMAP","HELP_KEYMAP","SUBPLOT_KEYMAP","TRACE_LABEL_KEYMAP","REVIEW_KEYMAP","SETTINGS_KEYMAP","TRACE_KEYMAP","GO_TO_EXTREMA_KEYMAP","COMMAND_PALETTE_KEYMAP","GRID_CELL_KEYMAP","SCOPED_KEYMAP","getKeymapForScope","KeybindingService","initialScope","keymap","commandName","Mousebindingservice","settingsService","initialSettings","newHoverMode","CommandExecutor","commandKey","currentScope","scopeKeymap","CommandPaletteService","isPlotlyPlot","observerRegistry","trackedElements","disconnectPlotlyObservers","root","rootObservers","observers","hasEnsureInitialized","DisplayService","instruction","formatted","labelScope","previousScope","focus","correctScope","targetScope","active","defaultFormat","formatters","currency","decimals","locale","date","FormatUtil","axisFormat","dateOptions","format","missingText","formatter","FormatterService","subplotRow","layerId","formatConfig","layerFormatters","baseFormat","axis","GoToExtremaService","NESTED_SCOPE_CONFIG","generateHelpMenuFromKeymap","items","generateNestedScopeHelp","nestedKeymap","entryKey","parentKeymap","parentCommandKeys","generateCompleteHelpMenu","nestedConfigs","config","nestedItems","HelpService","traceHelpMenu","subplotHelpMenu","SVG_NS","_PatternService","baseColor","patternColor","scale","cacheKey","cached","pattern","patternUrl","newStyle","originalFill","types","patternId","defs","normalizedBase","normalizedPattern","timestamp","random","generator","id","path","halfSize","square1","square2","PatternService","HighContrastConstants","HighContrastService","bodyStyle","newHighContrastMode","currentSettings","highContrastElInfo","traceRow","traceElements","originalColorInfo","styleFillMatch","styleStrokeMatch","isInSelectors","complexPath","isComplexPath","cantBeBackground","attrFill","attrStroke","searchString","notString","svgHtml","filterHTML","colorInfo","colorEquivalents","blendedR","blendedG","blendedB","useNearWhite","nearWhiteScale","inputColor","colorArray","hexToRgb","normalized","getLuminance","colorDistance","c1","c2","inputRgb","backgroundIndex","inputLuminance","nearWhiteThreshold","closestColor","reversedIndex","startColor","endColor","numColors","startRgb","endRgb","colors","interpolateAt","trimmed","toHex","n","colorInfos","rgbToHsl","h","hslToRgb","hsl","gray","hue2rgb","q","tNorm","selectorItems","luminances","minLum","lumRange","selectorItem","newLuminance","newHsl","newRgb","newColor","elementToHighContrastColor","colorGroups","normalizedColor","patternIndex","_color","patternType","colorLuminance","darkLuminance","lightLuminance","darkContrast","lightContrast","HighlightService","highlight","highlightElement","NotificationService","ReviewService","review","RotorNavigationService","modes","dims","compareType","msg","currMode","navType","SETTINGS_KEY","getValue","acc","part","getSettingValue","SettingsChangedEvent","oldSettings","newSettings","oldValue","newValue","settingPath","SettingsService","storage","saved","obs","LocalStorageService","serialized","isLayerSwitchTraceState","TextService","newSubplotIndex","mainAxisType","crossAxisType","announcement","traceTypes","details","verbose","outliers","outlierStr","formattedMainValue","verb","zValue","terse","pointStrs","formatProdErrorMessage","$$observable","symbol_observable_default","randomString","ActionTypes","actionTypes_default","isPlainObject","obj","proto","miniKindOf","isDate","isError","constructorName","ctorName","kindOf","typeOfVal","define_process_env_default","createStore","reducer","preloadedState","enhancer","currentReducer","currentListeners","nextListeners","listenerIdCounter","isDispatching","ensureCanMutateNextListeners","getState","subscribe","isSubscribed","listenerId","action","replaceReducer","nextReducer","observable","outerSubscribe","observeState","observerAsObserver","warning","getUnexpectedStateShapeWarningMessage","inputState","reducers","unexpectedKeyCache","reducerKeys","argumentName","unexpectedKeys","assertReducerShape","combineReducers","finalReducers","finalReducerKeys","shapeAssertionError","warningMessage","hasChanged","nextState","previousStateForKey","nextStateForKey","actionType","compose","funcs","arg","applyMiddleware","middlewares","createStore2","store","middlewareAPI","chain","middleware","isAction","NOTHING","DRAFTABLE","DRAFT_STATE","errors","plugin","thing","die","isFunction","O","getPrototypeOf","CONSTRUCTOR","PROTOTYPE","CONFIGURABLE","ENUMERABLE","WRITABLE","VALUE","isDraft","isDraftable","isArray","isMap","isSet","objectCtorString","cachedCtorStrings","isObjectish","Ctor","ctorString","each","iter","strict","getArchtype","has","prop","get","set","propOrOldValue","is","isBoolean","isArrayIndex","latest","getFinalValue","shallowCopy","isPlain","descriptors","desc","freeze","isFrozen","dontMutateMethodOverride","dontMutateFrozenCollections","PluginMapSet","PluginPatches","PluginArrayMethods","plugins","getPlugin","pluginKey","isPluginLoaded","getCurrentScope","createScope","parent_","immer_","usePatchesInScope","patchListener","revokeScope","leaveScope","revokeDraft","enterScope","immer2","draft","processResult","baseDraft","finalize","patchPlugin_","maybeFreeze","rootScope","handleValue","isSameScope","callbacks_","generatePatchesAndFinalize","markStateFinalized","EMPTY_LOCATIONS_RESULT","updateDraftInParent","draftValue","finalizedValue","originalKey","parentCopy","parentType","draftLocations","locations","location","registerChildFinalizationCallback","child","basePath","handleCrossReference","scope_","prepareCopy","targetCopy","handledSet","updatedValue","createProxyProxy","baseIsArray","traps","objectTraps","arrayTraps","revoke","proxy","arrayPlugin","isArrayWithStringProp","source","readPropFromProto","peek","childKey","childDraft","createProxy","getDescriptorFromProto","current2","markChanged","owner","fn","Immer2","recipe","defaultBase","self","base2","hasError","ip","patches","inversePatches","patch","applyPatchesImpl","rootScope2","currentImpl","copy","childValue","immer","produce","createThunkMiddleware","extraArgument","thunk","withExtraArgument","composeWithDevTools","hasMatchFunction","createAction","prepareAction","actionCreator","prepared","isActionCreator","getMessage","splitType","actionName","createActionCreatorInvariantMiddleware","isActionCreator2","getTimeMeasureUtils","maxDelay","fnName","elapsed","started","finished","Tuple","_Tuple","arr","freezeDraftable","getOrInsertComputed","map","compute","isImmutableDefault","trackForMutations","isImmutable","ignoredPaths","trackedProperties","trackProperties","detectMutations","checkedObjects","tracked","hasIgnoredPaths","nestedPath","ignored","trackedProperty","sameParentRef","prevObj","sameRef","keysToDetect","createImmutableStateInvariantMiddleware","stringify2","serializer","indent","decycler","getSerialize2","stack","thisPos","warnAfter","track","tracker","measureUtils","dispatchedAction","findNonSerializableValue","isSerializable","getEntries","cache","foundNestedSerializable","entries","nestedValue","isNestedFrozen","createSerializableStateInvariantMiddleware","ignoredActions","ignoredActionPaths","ignoreState","ignoreActions","disableCache","storeAPI","foundActionNonSerializableValue","keyPath","foundStateNonSerializableValue","buildGetDefaultMiddleware","immutableCheck","serializableCheck","actionCreatorCheck","middlewareArray","thunkMiddleware","immutableOptions","serializableOptions","actionCreatorOptions","SHOULD_AUTOBATCH","createQueueWithTimer","timeout","notify","autoBatchEnhancer","notifying","shouldNotifyAtEndOfTick","notificationQueued","listeners","queueCallback","notifyListeners","listener2","wrappedListener","unsubscribe","buildGetDefaultEnhancers","middlewareEnhancer","autoBatch","enhancerArray","configureStore","getDefaultMiddleware","devTools","duplicateMiddlewareCheck","enhancers","rootReducer","finalMiddleware","middlewareReferences","middleware2","finalCompose","getDefaultEnhancers","storeEnhancers","composedEnhancer","executeReducerBuilderCallback","builderCallback","actionsMap","actionMatchers","defaultCaseReducer","builder","typeOrActionCreator","asyncThunk","matcher","isStateFunction","createReducer","initialState","mapOrBuilderCallback","finalActionMatchers","finalDefaultCaseReducer","getInitialState","frozenInitialState","caseReducers","reducer2","cr","previousState","caseReducer","asyncThunkSymbol","getType","slice","actionKey","buildCreateSlice","creators","cAT","name","reducerPath","buildReducerCreators","reducerNames","contextMethods","name2","reducerName","reducerDefinition","reducerDetails","isAsyncThunkSliceReducerDefinition","handleThunkCaseReducerDefinition","handleNormalReducerDefinition","buildReducer","extraReducers","finalCaseReducers","sM","m","selectSelf","injectedSelectorCache","injectedStateCache","_reducer","makeSelectorProps","reducerPath2","injected","selectSlice","sliceState","getSelectors","selectState","selectorCache","wrapSelector","injectable","pathOpt","newReducerPath","wrapper","rootState","createSlice","payloadCreator","prepare","createNotation","maybeReducerWithPrepare","prepareCallback","isCaseReducerWithPrepareDefinition","fulfilled","pending","rejected","settled","noop","AbstractViewModel","brailleSlice","update","reset","BrailleViewModel","brailleReducer","MODEL_VERSIONS","getModelDisplayName","modelKey","chatSlice","welcomeMessageIndex","addUserMessage","addSystemMessage","addPendingResponse","updateResponse","updateError","updateSuggestions","updateWelcomeMessage","ChatViewModel","chatService","llm","llmModels","enabledModels","cfg","labelMap","versionLabel","modelSelections","lastMessage","baseSuggestions","suggestions","newMessage","llmSettings","chatReducer","commandPaletteSlice","show","hide","updateSelectedIndex","updateSearch","CommandPaletteViewModel","commandPaletteService","callback","commands","newIndex","search","commandPaletteReducer","displaySlice","hideTooltip","showTooltip","updateFocus","clearFocus","DisplayViewModel","displayReducer","goToExtremaSlice","GoToExtremaViewModel","goToExtremaService","extremaTargets","formattedTargets","prevIndex","goToExtremaReducer","helpSlice","setHelpItems","HelpViewModel","helpService","helpMenuReducer","ViewModelRegistry","viewModel","reviewSlice","ReviewViewModel","reviewService","reviewReducer","rotorNavigationSlice","setValue","RotorNavigationViewModel","rotorService","curr_mode","rotorReducer","DEFAULT_SETTINGS","settingsSlice","SettingsViewModel","settingsReducer","textSlice","announceText","toggle","clearMessage","TextViewModel","formattedText","textReducer","resolveSubplotLayout","axesElements","collectAxesElements","positions","collectAxesPositions","totalAxesCount","buildFallbackLayout","sortByVisualPosition","visualOrderMap","buildOrderMap","topLeftRow","invertVertical","detectInversion","findAxesElement","layerSelector","row0","row1","Controller","useMaidrController","plotRef","useRef","figureRef","controllerRef","hasAnnouncedRef","focusInTimerRef","focusOutTimerRef","contextValue","setContextValue","useState","createController","useCallback","plotElement","dataClone","createControllerRef","disposeController","onFocusIn","ctrl","onFocusOut","figureElement","activeElement","onVisibilityChange","useEffect","createMaidrStore","MaidrContext","createContext","useMaidrContext","useContext","React","require$$0","objectIs","useSyncExternalStore","useMemo","useDebugValue","useSyncExternalStoreWithSelector_production","getSnapshot","getServerSnapshot","isEqual","instRef","inst","memoizedSelector","nextSnapshot","hasMemo","memoizedSnapshot","currentSelection","memoizedSelection","nextSelection","maybeGetServerSnapshot","useSyncExternalStoreWithSelector_development","withSelectorModule","require$$1","defaultNoopBatch","createListenerCollection","first","last","nullListeners","createSubscription","parentSub","subscriptionsAmount","selfSubscribed","addNestedSub","trySubscribe","cleanupListener","removed","tryUnsubscribe","notifyNestedSubs","handleChangeWrapper","subscription","trySubscribeSelf","tryUnsubscribeSelf","canUseDOM","isDOM","isRunningInReactNative","isReactNative","getUseIsomorphicLayoutEffect","useIsomorphicLayoutEffect","ContextKey","gT","getContext","contextMap","realContext","ReactReduxContext","Provider","providerProps","children","serverState","baseContextValue","identityFunctionCheck","stabilityCheck","Provider_default","createReduxContextHook","useReduxContext","refEquality","createSelectorHook","useReduxContext2","useSelector2","equalityFnOrOptions","equalityFn","reduxContext","getServerState","firstRun","wrappedSelector","selected","devModeChecks","finalIdentityFunctionCheck","finalStabilityCheck","toCompare","selectedState","useSyncExternalStoreWithSelector","useSelector","useAppSelector","useViewModel","viewModelRegistry","useViewModelState","Braille","useId","brailleRef","lastIndexRef","handleSelectionChange","textArea","jsx","defaultGenerator","componentName","createClassNameGenerator","generate","ClassNameGenerator","formatMuiErrorMessage","capitalize","string","_formatErrorMessage","createChainedFunction","func","f","w","z","A","reactIs_production_min","hasSymbol","REACT_ELEMENT_TYPE","REACT_PORTAL_TYPE","REACT_FRAGMENT_TYPE","REACT_STRICT_MODE_TYPE","REACT_PROFILER_TYPE","REACT_PROVIDER_TYPE","REACT_CONTEXT_TYPE","REACT_ASYNC_MODE_TYPE","REACT_CONCURRENT_MODE_TYPE","REACT_FORWARD_REF_TYPE","REACT_SUSPENSE_TYPE","REACT_SUSPENSE_LIST_TYPE","REACT_MEMO_TYPE","REACT_LAZY_TYPE","REACT_BLOCK_TYPE","REACT_FUNDAMENTAL_TYPE","REACT_RESPONDER_TYPE","REACT_SCOPE_TYPE","isValidElementType","typeOf","$$typeof","$$typeofType","AsyncMode","ConcurrentMode","ContextConsumer","ContextProvider","Element","ForwardRef","Fragment","Lazy","Memo","Portal","Profiler","StrictMode","Suspense","hasWarnedAboutDeprecatedIsAsyncMode","isAsyncMode","isConcurrentMode","isContextConsumer","isContextProvider","isElement","isForwardRef","isFragment","isLazy","isMemo","isPortal","isProfiler","isStrictMode","isSuspense","reactIs_development","reactIsModule","getOwnPropertySymbols","hasOwnProperty","propIsEnumerable","toObject","shouldUseNative","test1","test2","order2","test3","letter","objectAssign","symbols","ReactPropTypesSecret","ReactPropTypesSecret_1","printWarning","loggedTypeFailures","checkPropTypes","typeSpecs","getStack","typeSpecName","err","ex","checkPropTypes_1","ReactIs","assign","require$$2","require$$3","require$$4","emptyFunctionThatReturnsNull","factoryWithTypeCheckers","isValidElement","throwOnDirectAccess","ITERATOR_SYMBOL","FAUX_ITERATOR_SYMBOL","getIteratorFn","maybeIterable","iteratorFn","ANONYMOUS","ReactPropTypes","createPrimitiveTypeChecker","createAnyTypeChecker","createArrayOfTypeChecker","createElementTypeChecker","createElementTypeTypeChecker","createInstanceTypeChecker","createNodeChecker","createObjectOfTypeChecker","createEnumTypeChecker","createUnionTypeChecker","createShapeTypeChecker","createStrictShapeTypeChecker","PropTypeError","createChainableTypeChecker","validate","manualPropTypeCallCache","manualPropTypeWarningCount","checkType","isRequired","props","propName","propFullName","secret","chainedCheckType","expectedType","propValue","propType","getPropType","preciseType","getPreciseType","typeChecker","expectedClass","expectedClassName","actualClassName","getClassName","expectedValues","valuesString","arrayOfTypeCheckers","checker","getPostfixForTypeWarning","expectedTypes","checkerResult","expectedTypesMessage","isNode","invalidValidatorError","shapeTypes","allKeys","iterator","isSymbol","emptyFunction","emptyFunctionWithReset","factoryWithThrowingShims","shim","getShim","propTypesModule","o","clsx","composeClasses","slots","getUtilityClass","classes","output","slotName","slot","buffer","REACT_CONSUMER_TYPE","REACT_VIEW_TRANSITION_TYPE","REACT_CLIENT_REFERENCE","reactIs_production","prototype","deepClone","deepmerge","merge","responsivePropType","PropTypes","sortContainerQueries","theme","css","regex","isCqShorthand","breakpointKeys","getContainerQuery","shorthand","matches","containerQuery","containerName","cssContainerQueries","themeInput","toContainerQuery","mediaQuery","attachCq","containerQueries","defaultBreakpoints","defaultContainerQueries","handleBreakpoints","styleFromPropValue","themeBreakpoints","breakpoint","containerKey","mediaKey","cssKey","createEmptyBreakpointObject","breakpointsInput","breakpointStyleKey","removeUnusedBreakpoints","breakpointOutput","getPath","checkVars","getStyleValue","themeMapping","propValueFinal","userValue","cssProperty","themeKey","memoize","properties","directions","aliases","getCssProperties","property","dir","marginKeys","paddingKeys","spacingKeys","createUnaryUnit","defaultValue","themeSpacing","abs","transformed","createUnarySpacing","transformer","getStyleFromPropValue","cssProperties","resolveCssProperty","margin","padding","styles","borderTransform","createBorderStyle","border","borderTop","borderRight","borderBottom","borderLeft","borderColor","borderTopColor","borderRightColor","borderBottomColor","borderLeftColor","outline","outlineColor","borderRadius","gap","columnGap","rowGap","gridColumn","gridRow","gridAutoFlow","gridAutoColumns","gridAutoRows","gridTemplateColumns","gridTemplateRows","gridTemplateAreas","gridArea","paletteTransform","bgcolor","backgroundColor","sizingTransform","width","maxWidth","breakpointsValues","minWidth","height","maxHeight","minHeight","boxSizing","defaultSxConfig","objectsHaveSameKeys","objects","union","callIfFn","maybeFn","unstable_createStyleFunctionSx","getThemeValue","styleFunctionSx","sx","nested","traverse","sxInput","sxObject","emptyBreakpoints","breakpointsKeys","styleKey","splitProps","extendSxProp","inSx","other","systemProps","otherProps","finalSx","_extends","sheetForTag","createStyleElement","StyleSheet","_this","before","_proto","nodes","rule","sheet","_tag$parentNode","MS","MOZ","WEBKIT","COMMENT","RULESET","DECLARATION","IMPORT","KEYFRAMES","LAYER","hash","length","charat","trim","replace","replacement","indexof","substr","begin","strlen","sizeof","append","combine","column","character","characters","caret","token","alloc","dealloc","delimit","delimiter","whitespace","escaping","commenter","identifier","compile","parse","rules","rulesets","pseudo","declarations","offset","atrule","previous","variable","scanning","ampersand","reference","comment","declaration","ruleset","post","serialize","stringify","collection","rulesheet","identifierWithPointTracking","toRules","getRules","fixedElements","compat","isImplicitRule","parentRules","removeLabel","prefix","prefixer","defaultStylisPlugins","createCache","ssrStyles","dataEmotionAttribute","stylisPlugins","inserted","container","nodesToHydrate","attrib","_insert","omnipresentPlugins","currentSheet","finalizingPlugins","stylis","shouldCache","reactIs","REACT_STATICS","KNOWN_STATICS","FORWARD_REF_STATICS","MEMO_STATICS","TYPE_STATICS","getStatics","component","defineProperty","getOwnPropertyNames","getOwnPropertyDescriptor","objectPrototype","hoistNonReactStatics","targetComponent","sourceComponent","blacklist","inheritedComponent","targetStatics","sourceStatics","descriptor","hoistNonReactStatics_cjs","isBrowser","getRegisteredStyles","registered","registeredStyles","classNames","rawClassName","className","registerStyles","isStringTag","insertStyles","murmur2","str","unitlessKeys","hyphenateRegex","animationRegex","isCustomProperty","isProcessableValue","processStyleName","styleName","processStyleValue","cursor","unitless","handleInterpolation","mergedProps","interpolation","componentSelector","keyframes","serializedStyles","createStringFromObject","previousCursor","asString","_i","interpolated","labelPattern","serializeStyles","stringMode","strings","asTemplateStringsArr","templateStringsArr","identifierName","hashString","syncFallback","create","useInsertionEffect","useInsertionEffectAlwaysWithSyncFallback","useInsertionEffectWithLayoutFallback","EmotionCacheContext","withEmotionCache","forwardRef","ref","ThemeContext","hasOwn","typePropName","createEmotionProps","newProps","Insertion","Emotion","cssProp","WrappedComponent","_key2","Emotion$1","argsLength","createElementArgArray","_jsx","JSX","Global","sheetRef","rehydrating","sheetRefCurrent","insertable","reactPropsRegex","isPropValid","testOmitPropsOnStringTag","testOmitPropsOnComponent","getDefaultShouldForwardProp","composeShouldForwardProps","isReal","shouldForwardProp","optionsShouldForwardProp","createStyled","baseTag","targetClassName","defaultShouldForwardProp","shouldUseAs","Styled","FinalTag","classInterpolations","finalShouldForwardProp","nextTag","nextOptions","newStyled","tags","styled","isEmpty","GlobalStyles","defaultTheme","stylesFactory","emStyled","internal_mutateStyles","processor","internal_serializeStyles","emSerializeStyles","sortBreakpointsValues","breakpointsAsArray","breakpoint1","breakpoint2","createBreakpoints","breakpoints","sortedValues","up","down","between","endIndex","only","not","keyIndex","shape","createSpacing","spacingInput","spacing","argsInput","argument","applyStyles","createTheme","paletteInput","shapeInput","muiTheme","isObjectEmpty","useTheme","contextTheme","systemDefaultTheme","useThemeWithoutDefault","wrapGlobalLayer","themeId","upperTheme","resolvedTheme","globalStyles","styleArg","MuiGlobalStyles","createBox","defaultClassName","generateClassName","BoxRoot","inProps","globalStateClasses","generateUtilityClass","globalStatePrefix","globalStateClass","generateUtilityClasses","getFunctionComponentName","Component","fallback","getWrappedName","outerType","innerType","wrapperName","functionName","getDisplayName","preprocessStyles","input","variants","variant","shallowLayer","layerName","defaultOverridesResolver","_props","attachTheme","processStyle","resolvedStyle","subStyle","rootStyle","otherStyles","processStyleVariants","results","mergedState","variantLoop","rootShouldForwardProp","slotShouldForwardProp","styleAttachTheme","inputOptions","mutateStyles","componentSlot","inputSkipVariantsResolver","inputSkipSx","overridesResolver","lowercaseFirstLetter","skipVariantsResolver","skipSx","shouldForwardPropOption","defaultStyledResolver","styledEngineStyled","generateStyledLabel","transformStyle","muiStyledResolver","expressionsInput","expressionsHead","expressionsBody","expressionsTail","styleOverrides","resolvedStyleOverrides","slotKey","themeVariants","inputStrings","placeholdersHead","placeholdersTail","outputStrings","expressions","generateDisplayName","resolveProps","defaultProps","mergeClassNameAndStyle","defaultSlotProps","slotProps","slotPropName","getThemeProps","params","useThemeProps","useEnhancedEffect","clampWrapper","re","decomposeColor","marker","colorSpace","colorChannel","decomposedColor","private_safeColorChannel","recomposeColor","getContrastRatio","foreground","background","lumA","lumB","alpha","private_safeAlpha","darken","coefficient","private_safeDarken","lighten","private_safeLighten","emphasize","private_safeEmphasize","specialProperty","exactProp","propTypes","unsupportedProps","RtlContext","useRtl","PropsContext","useDefaultProps","globalId","useGlobalId","idOverride","defaultId","setDefaultId","safeReact","maybeReactUseId","reactId","unstable_memoTheme","styleFn","lastValue","lastTheme","createGetCssVar","appendVar","vars","field","fallbacks","assignNestedKeys","arrayKeys","temp","walkObjectDeep","shouldSkipPaths","recurse","parentKeys","getCssValue","cssVarsParser","shouldSkipGeneratingVar","varsWithDefaults","cssVar","resolvedValue","prepareCssVars","parserConfig","getSelector","defaultGetSelector","disableCssColorScheme","enableContrastVars","colorSchemes","components","defaultColorScheme","otherTheme","rootVars","rootCss","rootVarsWithDefaults","themeVars","colorSchemesMap","defaultScheme","otherColorSchemes","scheme","colorScheme","cssObject","schemeVars","stylesheets","insertStyleSheet","defaultSchemeVal","cssColorSheme","finalCss","createGetColorSchemeSelector","isMuiElement","muiNames","filterBreakpointKeys","responsiveKeys","traverseBreakpoints","responsive","smallestBreakpoint","breakpointValue","responsiveStyles","getSelfSpacingVar","getParentSpacingVar","selfColumnsVar","parentColumnsVar","generateGridSizeStyles","ownerState","appendStyle","generateGridOffsetStyles","generateGridColumnsStyles","columns","generateGridRowSpacingStyles","generateGridColumnSpacingStyles","generateGridDirectionStyles","generateGridStyles","generateSizeClassNames","generateSpacingClassNames","isValidSpacing","generateDirectionClasses","getLegacyGridWarning","warnedAboutProps","deleteLegacyGridProps","propsToWarn","defaultCreateStyledComponent","systemStyled","useThemePropsDefault","useThemePropsSystem","createGrid","createStyledComponent","useThemeSystem","useUtilityClasses","wrap","parseResponsiveProp","shouldUseValue","parsedProp","GridRoot","Grid","themeProps","columnsProp","sizeProp","offsetProp","spacingProp","rowSpacingProp","columnSpacingProp","rowSpacing","columnSpacing","common","grey","purple","red","orange","blue","lightBlue","green","getLight","light","getDark","dark","addLightOrDark","intent","shade","tonalOffset","tonalOffsetLight","tonalOffsetDark","mixLightOrDark","getDefaultPrimary","getDefaultSecondary","getDefaultError","getDefaultInfo","getDefaultSuccess","getDefaultWarning","contrastColor","createPalette","palette","contrastThreshold","primary","secondary","success","getContrastText","contrastText","contrast","augmentColor","mainShade","lightShade","darkShade","modeHydrated","prepareTypographyVars","typography","createMixins","mixins","round","caseAllCaps","defaultFontFamily","createTypography","fontFamily","fontSize","fontWeightLight","fontWeightRegular","fontWeightMedium","fontWeightBold","htmlFontSize","allVariants","pxToRem2","coef","pxToRem","buildVariant","fontWeight","lineHeight","letterSpacing","casing","shadowKeyUmbraOpacity","shadowKeyPenumbraOpacity","shadowAmbientShadowOpacity","createShadow","shadows","easing","formatMs","milliseconds","getAutoHeightDuration","constant","createTransitions","inputTransitions","mergedEasing","mergedDuration","durationOption","easingOption","delay","isString","isNumber","animatedProp","zIndex","stringifyTheme","baseTheme","serializableTheme","serializeTheme","coefficientToPercentage","parseAddition","numbers","attachColorManipulators","systemAlpha","systemLighten","systemDarken","createThemeNoVars","mixinsInput","transitionsInput","typographyInput","systemTheme","systemCreateTheme","stateClasses","stateClass","getOverlayAlpha","elevation","alphaValue","defaultDarkOverlays","overlay","getOpacity","getOverlays","createColorScheme","opacity","overlays","excludeVariablesFromRoot","cssVarPrefix","excludedVariables","assignNode","setColor","toRgb","setColorChannel","safeColorChannel","getSpacingVal","silent","systemCreateGetCssVar","attachColorScheme","restTheme","createThemeWithVars","colorSchemesInput","defaultColorSchemeInput","nativeColor","defaultShouldSkipGeneratingVar","rootSelector","firstColorScheme","getCssVar","defaultSchemeInput","builtInLight","builtInDark","customColorSchemes","setCssVarColor","tokens","colorToken","colorMix","mixer","safeAlpha","safeDarken","safeLighten","snackbarContentBackground","safeEmphasize","generateThemeVars","generateStyleSheets","cssVariables","initialColorSchemes","initialDefaultColorScheme","paletteOptions","THEME_ID","SystemGlobalStyles","globalCss","internal_createExtendSxProp","memoTheme","useSystemDefaultProps","getSvgIconUtilityClass","SvgIconRoot","_h","_g","_j","_l","_k","_n","_m","SvgIcon","htmlColor","inheritViewBox","titleAccess","viewBox","hasSvgAsChild","more","createSvgIcon","displayName","debounce","wait","debounced","later","ownerDocument","ownerWindow","requirePropFactory","componentNameInError","prevPropTypes","propFullNameSafe","defaultTypeChecker","typeCheckerResult","requiredProp","setRef","unsupportedProp","useControlled","controlled","defaultProp","isControlled","valueState","setValueIfUncontrolled","useEventCallback","useForkRef","refs","cleanupRef","refEffect","instance","cleanups","refCallback","refCleanup","isEventHandler","thirdCharCode","mergeSlotProps","externalSlotProps","extractHandlers","externalSlotPropsValue","defaultSlotPropsValue","typedDefaultSlotProps","AccountCircle","CheckIcon","Close","ErrorIcon","KeyboardArrowDown","Send","SmartToy","chainPropTypes","propType1","propType2","_objectWithoutPropertiesLoose","_setPrototypeOf","_inheritsLoose","setPrototypeOf","timeoutsShape","TransitionGroupContext","forceReflow","UNMOUNTED","EXITED","ENTERING","ENTERED","EXITING","Transition","_React$Component","parentGroup","appear","initialStatus","prevState","nextIn","prevProps","nextStatus","status","exit","enter","mounting","ReactDOM","_this2","appearing","maybeNode","maybeAppearing","timeouts","enterTimeout","_this3","_this4","doesNotHaveTimeoutOrListener","maybeNextCallback","_this$props","childProps","_assertThisInitialized","getChildMapping","mapFn","mapper","Children","mergeChildMappings","getValueForKey","nextKeysPending","pendingKeys","prevKey","childMapping","nextKey","pendingNextKey","getProp","getInitialChildMapping","onExited","cloneElement","getNextChildMapping","nextProps","prevChildMapping","nextChildMapping","hasPrev","hasNext","prevChild","isLeaving","TransitionGroup","handleExited","firstRender","currentChildMapping","childFactory","UNINITIALIZED","useLazyRef","init","initArg","EMPTY","useOnMount","Timeout","useTimeout","isClassComponent","elementType","elementTypeAcceptingRef","safePropName","warningHint","elementTypeAcceptingRef$1","reflow","normalizedTransitionCallback","nodeRef","maybeIsAppearing","getTransitionChildStyle","inProp","baseStyles","hiddenStyles","styleProp","childStyle","getTransitionProps","isHostComponent","appendOwnerState","resolveComponentProps","componentProps","slotState","extractEventHandlers","excludeKeys","omitEventHandlers","parameters","getSlotProps","additionalProps","externalForwardedProps","joinedClasses","mergedStyle","eventHandlers","componentsPropsWithoutEventHandlers","otherPropsWithoutEventHandlers","internalSlotProps","useSlot","initialElementType","internalForwardedProps","shouldForwardComponentProp","useSlotPropsParams","rootComponent","resolvedComponentsProps","slotComponent","internalRef","LeafComponent","getTypeByValue","valueType","requiredInteger","validator","validatorNoop","integerPropType","getPaperUtilityClass","square","PaperRoot","Paper","refType","isFocusVisible","LazyRipple","ripple","shouldMount","setShouldMount","createControlledPromise","useLazyRipple","resolveFn","rejectFn","Ripple","pulsate","rippleX","rippleY","rippleSize","leaving","setLeaving","rippleClassName","rippleStyles","childClassName","timeoutId","touchRippleClasses","DURATION","DELAY_RIPPLE","enterKeyframe","exitKeyframe","pulsateKeyframe","TouchRippleRoot","TouchRippleRipple","TouchRipple","centerProp","ripples","setRipples","rippleCallback","ignoringMouseDown","startTimer","startTimerCommit","startCommit","cb","oldRipples","fakeElement","clientX","clientY","sizeX","sizeY","stop","getButtonBaseUtilityClass","buttonBaseClasses","disabled","focusVisible","focusVisibleClassName","composedClasses","ButtonBaseRoot","ButtonBase","centerRipple","disableRipple","disableTouchRipple","focusRipple","LinkComponent","onBlur","onClick","onContextMenu","onDragLeave","onFocus","onFocusVisible","onKeyDown","onKeyUp","onMouseDown","onMouseLeave","onMouseUp","onTouchEnd","onTouchMove","onTouchStart","tabIndex","TouchRippleProps","touchRippleRef","buttonRef","handleRippleRef","setFocusVisible","enableTouchRipple","handleMouseDown","useRippleHandler","handleContextMenu","handleDragLeave","handleMouseUp","handleMouseLeave","handleTouchStart","handleTouchEnd","handleTouchMove","handleBlur","handleFocus","isNonNativeButton","button","handleKeyDown","handleKeyUp","ComponentProp","buttonProps","hasFormAttributes","handleRef","rippleAction","eventCallback","skipRippleAction","hasCorrectMainProperty","checkSimplePaletteColorValues","additionalPropertiesToCheck","createSimplePaletteValueFilter","getAlertUtilityClass","alertClasses","getCircularProgressUtilityClass","SIZE","circularRotateKeyframe","circularDashKeyframe","rotateAnimation","dashAnimation","disableShrink","CircularProgressRoot","CircularProgressSVG","CircularProgressCircle","CircularProgressTrack","CircularProgress","enableTrackSlot","thickness","circleStyle","rootProps","circumference","getIconButtonUtilityClass","iconButtonClasses","loading","IconButtonRoot","IconButtonLoadingIndicator","IconButton","disableFocusRipple","idProp","loadingIndicatorProp","loadingId","loadingIndicator","SuccessOutlinedIcon","ReportProblemOutlinedIcon","ErrorOutlineIcon","InfoOutlinedIcon","ClearIcon","severity","AlertRoot","getColor","getBackgroundColor","AlertIcon","AlertMessage","AlertAction","defaultIconMapping","Alert","closeText","componentsProps","icon","iconMapping","onClose","role","RootSlot","rootSlotProps","IconSlot","iconSlotProps","MessageSlot","messageSlotProps","ActionSlot","actionSlotProps","CloseButtonSlot","closeButtonProps","CloseIconSlot","closeIconProps","CloseIcon","getTypographyUtilityClass","typographyClasses","v6Colors","align","gutterBottom","noWrap","paragraph","TypographyRoot","defaultVariantMapping","Typography","isSxColor","variantMapping","HTMLElementType","right","left","auto","basePlacements","clippingParents","viewport","popper","variationPlacements","placement","placements","beforeRead","read","afterRead","beforeMain","main","afterMain","beforeWrite","write","afterWrite","modifierPhases","getNodeName","getWindow","OwnElement","isHTMLElement","isShadowRoot","attributes","effect","initialStyles","styleProperties","attribute","applyStyles$1","getBasePlacement","getUAString","uaData","isLayoutViewport","getBoundingClientRect","includeScale","isFixedStrategy","clientRect","scaleX","scaleY","visualViewport","addVisualOffsets","getLayoutRect","contains","rootNode","getComputedStyle","isTableElement","getDocumentElement","getParentNode","getTrueOffsetParent","getContainingBlock","isFirefox","isIE","elementCss","currentNode","getOffsetParent","window","offsetParent","getMainAxisFromPlacement","within","mathMax","mathMin","withinMaxClamp","getFreshSideObject","mergePaddingObject","paddingObject","expandToHashMap","hashMap","toPaddingObject","arrow","_state$modifiersData$","arrowElement","popperOffsets","basePlacement","arrowRect","minProp","maxProp","endDiff","startDiff","arrowOffsetParent","clientSize","centerToReference","axisProp","_options$element","arrow$1","getVariation","unsetSides","roundOffsetsByDPR","win","dpr","mapToStyles","_Object$assign2","popperRect","offsets","gpuAcceleration","adaptive","roundOffsets","isFixed","_offsets$x","_offsets$y","hasX","hasY","sideX","sideY","heightProp","widthProp","offsetY","offsetX","commonStyles","_Object$assign","computeStyles","_ref5","_options$gpuAccelerat","_options$adaptive","_options$roundOffsets","computeStyles$1","passive","_options$scroll","scroll","_options$resize","resize","scrollParents","scrollParent","eventListeners","getOppositePlacement","matched","getOppositeVariationPlacement","getWindowScroll","scrollLeft","scrollTop","getWindowScrollBarX","getViewportRect","strategy","html","layoutViewport","getDocumentRect","_element$ownerDocumen","winScroll","isScrollParent","_getComputedStyle","overflow","overflowX","overflowY","getScrollParent","listScrollParents","list","isBody","updatedList","rectToClientRect","getInnerBoundingClientRect","getClientRectFromMixedType","clippingParent","getClippingParents","canEscapeClipping","clipperElement","getClippingRect","boundary","rootBoundary","mainClippingParents","firstClippingParent","clippingRect","accRect","computeOffsets","commonX","commonY","mainAxis","detectOverflow","_options","_options$placement","_options$strategy","_options$boundary","_options$rootBoundary","_options$elementConte","elementContext","_options$altBoundary","altBoundary","_options$padding","altContext","clippingClientRect","referenceClientRect","popperClientRect","elementClientRect","overflowOffsets","offsetData","multiply","computeAutoPlacement","flipVariations","_options$allowedAutoP","allowedAutoPlacements","allPlacements","allowedPlacements","overflows","getExpandedFallbackPlacements","oppositePlacement","flip","_options$mainAxis","checkMainAxis","_options$altAxis","checkAltAxis","specifiedFallbackPlacements","_options$flipVariatio","preferredPlacement","isBasePlacement","fallbackPlacements","referenceRect","checksMap","makeFallbackChecks","firstFittingPlacement","_basePlacement","isStartVariation","mainVariationSide","altVariationSide","checks","check","numberOfChecks","_loop","fittingPlacement","_ret","flip$1","getSideOffsets","preventedOffsets","isAnySideFullyClipped","side","referenceOverflow","popperAltOverflow","referenceClippingOffsets","popperEscapeOffsets","isReferenceHidden","hasPopperEscaped","hide$1","distanceAndSkiddingToXY","rects","invertDistance","skidding","_options$offset","_data$state$placement","offset$1","popperOffsets$1","getAltAxis","preventOverflow","_options$tether","tether","_options$tetherOffset","tetherOffset","altAxis","tetherOffsetValue","normalizedTetherOffsetValue","offsetModifierState","_offsetModifierState$","mainSide","altSide","additive","minLen","maxLen","arrowPaddingObject","arrowPaddingMin","arrowPaddingMax","arrowLen","minOffset","maxOffset","clientOffset","offsetModifierValue","tetherMin","tetherMax","preventedOffset","_offsetModifierState$2","_mainSide","_altSide","_offset","_min","_max","isOriginSide","_offsetModifierValue","_tetherMin","_tetherMax","_preventedOffset","preventOverflow$1","getHTMLElementScroll","getNodeScroll","isElementScaled","getCompositeRect","elementOrVirtualElement","isOffsetParentAnElement","offsetParentIsScaled","documentElement","order","modifiers","visited","sort","requires","dep","depModifier","orderModifiers","orderedModifiers","phase","mergeByName","merged","existing","DEFAULT_OPTIONS","areValidElements","popperGenerator","generatorOptions","_generatorOptions","_generatorOptions$def","defaultModifiers","_generatorOptions$def2","defaultOptions","effectCleanupFns","isDestroyed","setOptionsAction","cleanupModifierEffects","runModifierEffects","_state$elements","_state$orderedModifie","_state$orderedModifie2","_ref$options","cleanupFn","noopFn","createPopper","useSlotProps","skipResolvingSlotProps","isLayoutSupported","getReactElementRef","getContainer","forwardedRef","disablePortal","mountNode","setMountNode","getPopperUtilityClass","flipPlacement","resolveAnchorEl","anchorEl","isVirtualElement","defaultPopperOptions","PopperTooltip","initialPlacement","popperOptions","popperRefProp","TransitionProps","ownerStateProp","tooltipRef","ownRef","popperRef","handlePopperRef","handlePopperRefRef","rtlPlacement","setPlacement","resolvedAnchorElement","setResolvedAnchorElement","handlePopperUpdate","popperModifiers","Root","Popper","containerProp","keepMounted","transition","exited","setExited","handleEnter","resolvedAnchorEl","transitionProps","PopperRoot","BasePopper","isRtl","RootComponent","CancelIcon","getChipUtilityClass","chipClasses","iconColor","onDelete","clickable","ChipRoot","textColor","ChipLabel","isDeleteKeyboardEvent","keyboardEvent","Chip","avatarProp","clickableProp","deleteIconProp","iconProp","skipFocusWhenDisabled","chipRef","handleDeleteIconClick","moreProps","deleteIcon","avatar","LabelSlot","labelProps","TextareaAutosize","onChange","maxRows","minRows","textareaRef","heightRef","hiddenTextareaRef","calculateTextareaStyles","textarea","hiddenTextarea","computedStyle","innerHeight","singleRowHeight","outerHeight","outerHeightStyle","overflowing","didHeightChange","textareaStyles","syncHeight","frameRef","debouncedHandleResize","containerWindow","resizeObserver","handleChange","countOfCharacters","isLastCharacterNewLine","isEndOfTheLine","_jsxs","formControlState","states","muiFormControl","FormControlContext","useFormControl","hasValue","isFilled","SSR","isAdornedStart","getInputBaseUtilityClass","inputBaseClasses","_InputGlobalStyles","rootOverridesResolver","inputOverridesResolver","endAdornment","focused","formControl","fullWidth","hiddenLabel","multiline","readOnly","startAdornment","InputBaseRoot","InputBaseInput","placeholder","placeholderHidden","placeholderVisible","InputGlobalStyles","InputBase","ariaDescribedby","autoComplete","autoFocus","disableInjectingGlobalStyles","inputComponent","inputPropsProp","inputRefProp","renderSuffix","valueProp","inputRef","handleInputRefWarning","handleInputRef","setFocused","fcs","onFilled","onEmpty","checkDirty","handleClick","InputComponent","inputProps","handleAutoFill","Input","getInputUtilityClass","inputClasses","getOutlinedInputUtilityClass","outlinedInputClasses","getFilledInputUtilityClass","filledInputClasses","ArrowDropDownIcon","Person","getAvatarUtilityClass","colorDefault","AvatarRoot","AvatarImg","AvatarFallback","useLoaded","crossOrigin","referrerPolicy","src","srcSet","loaded","setLoaded","Avatar","alt","childrenProp","imgProps","sizes","hasImg","hasImgNotFailing","ImgSlot","imgSlotProps","FallbackSlot","fallbackSlotProps","acceptingRef","elementAcceptingRef","Fade","defaultTimeout","addEndListener","onEnter","onEntered","onEntering","onExit","onExiting","handleEntering","isAppearing","handleEntered","handleExiting","handleExit","restChildProps","getBackdropUtilityClass","invisible","BackdropRoot","Backdrop","TransitionComponentProp","transitionDuration","backwardCompatibleSlots","backwardCompatibleSlotProps","TransitionSlot","boxClasses","Box","getButtonUtilityClass","buttonClasses","ButtonGroupContext","ButtonGroupButtonContext","disableElevation","loadingPosition","commonIconStyles","ButtonRoot","inheritContainedBackgroundColor","inheritContainedHoverBackgroundColor","ButtonStartIcon","ButtonEndIcon","ButtonLoadingIndicator","ButtonLoadingIconPlaceholder","Button","contextProps","buttonGroupButtonContextPositionClassName","resolvedProps","endIconProp","startIconProp","startIcon","endIcon","positionClassName","loader","getSwitchBaseUtilityClass","checked","SwitchBaseRoot","SwitchBaseInput","SwitchBase","checkedProp","checkedIcon","defaultChecked","disabledProp","required","setCheckedState","handleInputChange","newChecked","hasLabelFor","InputSlot","inputSlotProps","CheckBoxOutlineBlankIcon","CheckBoxIcon","IndeterminateCheckBoxIcon","getCheckboxUtilityClass","checkboxClasses","indeterminate","CheckboxRoot","defaultCheckedIcon","defaultIcon","defaultIndeterminateIcon","Checkbox","indeterminateIconProp","indeterminateIcon","externalInputProps","getScrollbarSize","documentWidth","isOverflowing","doc","ariaHidden","getPaddingRight","isAriaHiddenForbiddenOnElement","isForbiddenTagName","isInputHidden","ariaHiddenSiblings","mountElement","currentElement","elementsToExclude","isNotExcludedElement","isNotForbiddenElement","findIndexOf","handleContainer","containerInfo","restoreStyle","scrollbarSize","scrollContainer","getHiddenSiblings","hiddenSiblings","ModalManager","modal","modalIndex","containerIndex","ariaHiddenState","nextTop","candidatesSelector","getTabIndex","tabindexAttr","isNonTabbableRadio","getRadio","roving","isNodeMatchingSelectorFocusable","defaultGetTabbable","regularTabNodes","orderedTabNodes","nodeTabIndex","defaultIsEnabled","FocusTrap","disableAutoFocus","disableEnforceFocus","disableRestoreFocus","getTabbable","isEnabled","ignoreNextEnforceFocus","sentinelStart","sentinelEnd","nodeToRestore","reactFocusEventTarget","activated","rootRef","lastKeydown","getActiveElement","loopFocus","nativeEvent","contain","rootElement","activeEl","tabbable","isShiftTab","focusNext","focusPrevious","interval","childrenPropsHandler","handleFocusSentinel","getHasTransition","manager","useModal","disableEscapeKeyDown","disableScrollLock","closeAfterTransition","onTransitionEnter","onTransitionExited","mountNodeRef","modalRef","hasTransition","ariaHiddenProp","getDoc","getModal","handleMounted","handleOpen","resolvedContainer","isTopModal","handlePortalRef","handleClose","createHandleKeyDown","otherHandlers","createHandleBackdropClick","propsEventHandlers","externalEventHandlers","getModalUtilityClass","ModalRoot","ModalBackdrop","Modal","BackdropComponent","BackdropProps","classesProp","hideBackdrop","propsWithDefaults","getRootProps","getBackdropProps","portalRef","BackdropSlot","backdropProps","getDialogUtilityClass","dialogClasses","DialogContext","DialogBackdrop","fullScreen","DialogRoot","DialogContainer","DialogPaper","Dialog","defaultTransitionDuration","ariaLabelledbyProp","ariaModal","PaperComponent","PaperProps","TransitionComponent","backdropClick","handleBackdropClick","ariaLabelledby","dialogContextValue","backdropSlotProps","PaperSlot","paperSlotProps","ContainerSlot","containerSlotProps","transitionSlotProps","getDialogActionsUtilityClass","disableSpacing","DialogActionsRoot","DialogActions","getDialogContentUtilityClass","getDialogTitleUtilityClass","dialogTitleClasses","dividers","DialogContentRoot","DialogContent","DialogTitleRoot","DialogTitle","titleId","getDividerUtilityClass","dividerClasses","absolute","flexItem","textAlign","DividerRoot","DividerWrapper","Divider","disableUnderline","FilledInputRoot","inputBaseRootOverridesResolver","bottomLineColor","hoverBackground","disabledBackground","FilledInputInput","inputBaseInputOverridesResolver","FilledInput","componentsPropsProp","filledInputComponentsProps","getFormControlUtilityClasses","FormControlRoot","FormControl","visuallyFocused","adornedStart","setAdornedStart","initialAdornedStart","filled","setFilled","initialFilled","focusedState","registerEffect","registeredInput","childContext","getFormControlLabelUtilityClasses","formControlLabelClasses","labelPlacement","FormControlLabelRoot","AsteriskComponent","FormControlLabel","control","disableTypography","labelProp","controlProps","TypographySlot","typographySlotProps","getFormGroupUtilityClass","FormGroupRoot","FormGroup","getFormHelperTextUtilityClasses","formHelperTextClasses","_span","contained","FormHelperTextRoot","FormHelperText","getFormLabelUtilityClasses","formLabelClasses","FormLabelRoot","FormLabel","requireProp","getScale","Grow","timer","autoTimeout","transitionTimingFunction","InputRoot","InputInput","inputComponentsProps","getInputAdornmentUtilityClass","inputAdornmentClasses","disablePointerEvents","InputAdornmentRoot","InputAdornment","variantProp","getInputLabelUtilityClasses","shrink","disableAnimation","InputLabelRoot","InputLabel","shrinkProp","ListContext","getListUtilityClass","disablePadding","dense","subheader","ListRoot","List","getListItemUtilityClass","getListItemButtonUtilityClass","listItemButtonClasses","alignItems","disableGutters","divider","ListItemButtonRoot","ListItemButton","listItemRef","getListItemSecondaryActionClassesUtilityClass","ListItemSecondaryActionRoot","ListItemSecondaryAction","hasSecondaryAction","ListItemRoot","ListItemContainer","ListItem","componentProp","ContainerComponent","ContainerClassName","ContainerProps","secondaryAction","SecondaryActionSlot","secondaryActionSlotProps","secondaryActionIndex","listItemIconClasses","getListItemTextUtilityClass","listItemTextClasses","inset","ListItemTextRoot","ListItemText","primaryProp","primaryTypographyProps","secondaryProp","secondaryTypographyProps","PrimarySlot","primarySlotProps","SecondarySlot","secondarySlotProps","nextItem","disableListWrap","previousItem","textCriteriaMatches","nextFocus","textCriteria","moveFocus","currentFocus","disabledItemsFocusable","traversalFunction","wrappedOnce","nextFocusDisabled","MenuList","actions","autoFocusItem","listRef","textCriteriaRef","containerElement","noExplicitWidth","criteria","lowerKey","currTime","keepFocusOnCurrent","activeItemIndex","newChildProps","getPopoverUtilityClass","getOffsetTop","vertical","getOffsetLeft","horizontal","getTransformOriginValue","transformOrigin","PopoverRoot","PopoverPaper","PaperBase","Popover","anchorOrigin","anchorPosition","anchorReference","marginThreshold","PaperPropsProp","transitionDurationProp","paperRef","getAnchorOffset","anchorElement","anchorRect","getTransformOrigin","elemRect","getPositioningStyle","elemTransformOrigin","anchorOffset","heightThreshold","widthThreshold","isPositioned","setIsPositioned","setPositioningStyles","positioning","handleResize","rootSlotsProp","rootSlotPropsProp","paperProps","getMenuUtilityClass","RTL_ORIGIN","LTR_ORIGIN","MenuRoot","MenuPaper","MenuMenuList","Menu","disableAutoFocusItem","MenuListProps","PopoverClasses","menuListActionsRef","handleListKeyDown","ListSlot","listSlotProps","resolvedTransitionProps","getMenuItemUtilityClass","menuItemClasses","getNativeSelectUtilityClasses","nativeSelectClasses","multiple","StyledSelectSelect","NativeSelectSelect","StyledSelectIcon","NativeSelectIcon","NativeSelectInput","IconComponent","getSelectUtilityClasses","selectClasses","getOpenInteractionType","areEqualValues","SelectFocusSourceContext","useSelectFocusSource","SelectFocusSourceProvider","SelectSelect","SelectIcon","SelectNativeInput","SelectInput","ariaLabel","autoWidth","defaultOpen","displayEmpty","labelId","MenuProps","onOpen","openProp","renderValue","SelectDisplayProps","tabIndexProp","setValueState","openState","setOpenState","displayRef","displayNode","setDisplayNode","isOpenControlled","menuMinWidthState","setMenuMinWidthState","openInteractionType","setOpenInteractionType","handleDisplayRef","openParam","childrenArray","childItem","handleItemClick","itemIndex","clonedEvent","displaySingle","displayMultiple","computeDisplay","foundMatch","menuMinWidth","buttonId","listProps","listboxId","NotchedOutlineRoot","NotchedOutlineLegend","NotchedOutline","notched","withLabel","OutlinedInputRoot","OutlinedInputInput","OutlinedInput","NotchedSlot","notchedProps","styledRootConfig","StyledInput","StyledOutlinedInput","StyledFilledInput","Select","native","restOfClasses","inputComponentRef","focusWithVisible","focusSource","MenuItemRoot","MenuItem","menuItemRef","RadioButtonUncheckedIcon","RadioButtonCheckedIcon","RadioButtonIconRoot","RadioButtonIconBackground","RadioButtonIconDot","RadioButtonIcon","RadioGroupContext","useRadioGroup","getRadioUtilityClass","radioClasses","RadioRoot","Radio","nameProp","onChangeProp","radioGroup","getRadioGroupUtilityClass","RadioGroup","visuallyHidden","areArraysEqual","array1","array2","itemComparer","INTENTIONAL_DRAG_COUNT_THRESHOLD","getNewValue","asc","findClosest","trackFinger","touchId","touchEvent","touch","valueToPercent","percentToValue","getDecimalPrecision","matissaDecimalPart","decimalPart","roundValueToStep","setValueIndex","focusThumb","sliderRef","activeIndex","setActive","areValuesEqual","axisProps","Identity","cachedSupportsTouchActionNone","doesSupportTouchActionNone","useSlider","disableSwap","marksProp","onChangeCommitted","shiftStep","setOpen","dragging","setDragging","moveCount","lastChangedValue","valueDerived","thumbIndex","marks","marksValues","mark","focusedThumbIndex","setFocusedThumbIndex","createHandleHiddenInputFocus","createHandleHiddenInputBlur","changeValue","valueInput","marksIndex","maxMarksValue","previousValue","createHandleHiddenInputKeyDown","stepSize","currentMarkIndex","decrementKeys","incrementKeys","createHandleHiddenInputChange","previousIndex","getFingerNewValue","finger","move","slider","stopListening","createHandleMouseDown","trackOffset","trackLeap","externalProps","externalHandlers","ownEventHandlers","mergedEventHandlers","createHandleMouseOver","createHandleMouseLeave","getThumbProps","getThumbStyle","cssWritingMode","shouldSpreadAdditionalProps","Slot","getSliderUtilityClass","sliderClasses","useValueLabelClasses","SliderValueLabel","SliderRoot","SliderRail","SliderTrack","SliderThumb","BaseSliderValueLabel","SliderMark","markActive","SliderMarkLabel","marked","Forward","Slider","ariaValuetext","getAriaLabel","getAriaValueText","valueLabelDisplay","valueLabelFormat","getHiddenInputProps","RailSlot","TrackSlot","ThumbSlot","ValueLabelSlot","MarkSlot","MarkLabelSlot","railSlotProps","trackSlotProps","thumbSlotProps","valueLabelSlotProps","markSlotProps","markLabelSlotProps","railProps","trackProps","thumbProps","valueLabelProps","markProps","markLabelProps","inputSliderProps","ValueLabelComponent","getTooltipUtilityClass","tooltipClasses","disableInteractive","TooltipPopper","TooltipTooltip","TooltipArrow","hystersisOpen","hystersisTimer","cursorPosition","composeEventHandler","Tooltip","describeChild","disableFocusListener","disableHoverListener","disableInteractiveProp","disableTouchListener","enterDelay","enterNextDelay","enterTouchDelay","followCursor","leaveDelay","leaveTouchDelay","PopperComponentProp","PopperProps","childNode","setChildNode","arrowRef","setArrowRef","ignoreNonTouchEvents","closeTimer","enterTimer","leaveTimer","touchTimer","prevUserSelect","stopTouchInteraction","handleMouseOver","setChildIsFocusVisible","closeEvent","detectTouchStart","childrenProps","handleMouseMove","nameOrDescProps","titleIsString","interactiveWrapperListeners","resolvedPopperProps","tooltipModifiers","PopperSlot","popperSlotProps","TooltipSlot","tooltipSlotProps","ArrowSlot","arrowSlotProps","TransitionPropsInner","getSwitchUtilityClass","switchClasses","SwitchRoot","SwitchSwitchBase","SwitchTrack","SwitchThumb","Switch","getTextFieldUtilityClass","variantComponent","TextFieldRoot","TextField","FormHelperTextPropsProp","helperText","InputLabelPropsProp","InputPropsProp","select","SelectPropsProp","helperTextId","inputLabelId","inputAdditionalProps","inputLabelSlotProps","InputLabelSlot","inputLabelProps","HtmlInputSlot","htmlInputProps","FormHelperTextSlot","formHelperTextProps","SelectSlot","selectProps","InputElement","ModelIcon","jsxs","ModelSelection","handleModelChange","latestSettings","updatedSettings","getModelVersions","labels","typedVersion","getCurrentVersion","currentVersion","validOptions","nameRe","nameReJsx","emptyOptions","empty","Schema","normal","space","definitions","definition","normalize","Info","powers","boolean","increment","booleanish","overloadedBoolean","number","spaceSeparated","commaSeparated","commaOrSpaceSeparated","DefinedInfo","mask","normals","aria","caseSensitiveTransform","caseInsensitiveTransform","xlink","xmlns","xml","hastToReact","cap","dash","valid","find","schema","Type","rest","camelcase","dashes","kebab","$0","htmlBase","svgBase","COMMENT_REGEX","NEWLINE_REGEX","WHITESPACE_REGEX","PROPERTY_REGEX","COLON_REGEX","VALUE_REGEX","SEMICOLON_REGEX","TRIM_REGEX","NEWLINE","FORWARD_SLASH","ASTERISK","EMPTY_STRING","TYPE_COMMENT","TYPE_DECLARATION","lineno","updatePosition","lines","Position","comments","ret","decls","decl","cjs","__importDefault","this","mod","StyleToObject","inline_style_parser_1","styleObject","hasIterator","utilities","CUSTOM_PROPERTY_REGEX","HYPHEN_REGEX","NO_HYPHEN_REGEX","VENDOR_PREFIX_REGEX","MS_VENDOR_PREFIX_REGEX","skipCamelCase","trimHyphen","camelCase","style_to_object_1","utilities_1","StyleToJS","pointEnd","pointStart","stringifyPosition","VFileMessage","causeOrReason","optionsOrParentOrPlace","origin","reason","legacyCause","own","emptyMap","tableElements","tableCellElement","docs","toJsxRuntime","tree","filePath","developmentCreate","productionCreate","one","mdxExpression","mdxJsxElement","mdxEsm","parentSchema","findComponentFromName","createElementProps","createChildren","addNode","addChildren","expression","assert","crashEstree","createJsxElementProps","jsxDEV","isStaticChildren","alignValue","createProperty","objectExpression","countsByName","commas","spaces","parseStyle","transformStylesToCssCasing","styleToJs","cause","allowExpression","identifiers","isIdentifierName","place","domCasing","cssCasing","transformStyleToCssCasing","toDash","urlAttributes","toString","includeImageAlt","includeHtml","all","decodeNamedCharacterReference","characterReference","splice","remove","chunkStart","push","combineExtensions","extensions","syntaxExtension","extension","hook","constructs","decodeNumericCharacterReference","normalizeIdentifier","asciiAlpha","regexCheck","asciiAlphanumeric","asciiAtext","asciiControl","asciiDigit","asciiHexDigit","asciiPunctuation","markdownLineEnding","markdownLineEndingOrSpace","markdownSpace","unicodePunctuation","unicodeWhitespace","normalizeUri","skip","factorySpace","effects","ok","limit","content","initializeContent","contentStart","afterContentStartConstruct","paragraphInitial","lineStart","document","initializeDocument","containerConstruct","tokenizeContainer","continued","childFlow","childToken","lineStartOffset","documentContinue","checkNewContainers","closeFlow","indexBeforeExits","indexBeforeFlow","exitContainers","documentContinued","flowStart","thereIsANewContainer","thereIsNoNewContainer","containerContinue","flowContinue","writeToChild","endOfFile","stream","seen","nok","classifyCharacter","resolveAll","events","called","attention","resolveAllAttention","tokenizeAttention","openingSequence","closingSequence","use","nextEvents","movePoint","attentionMarkers","inside","after","autolink","tokenizeAutolink","schemeOrEmailAtext","emailAtext","schemeInsideOrEmailAtext","urlInside","emailAtSignOrDot","emailLabel","emailValue","blankLine","tokenizeBlankLine","blockQuote","tokenizeBlockQuoteContinuation","tokenizeBlockQuoteStart","contStart","contBefore","characterEscape","tokenizeCharacterEscape","tokenizeCharacterReference","test","numeric","nonLazyContinuation","tokenizeNonLazyContinuation","codeFenced","tokenizeCodeFenced","closeStart","tokenizeCloseStart","initialPrefix","sizeOpen","beforeSequenceOpen","tail","sequenceOpen","infoBefore","atNonLazyBreak","metaBefore","meta","contentBefore","beforeContentChunk","contentChunk","startBefore","beforeSequenceClose","sequenceClose","sequenceCloseAfter","codeIndented","tokenizeCodeIndented","furtherStart","tokenizeFurtherStart","afterPrefix","atBreak","codeText","resolveCodeText","tokenizeCodeText","tailExitIndex","headEnterIndex","SpliceBuffer","initial","chunkedPush","subtokenize","eventsArray","jumps","otherIndex","otherEvent","subevents","subcontent","eventIndex","startPosition","startPositions","tokenizer","childEvents","gaps","adjust","breaks","resolveContent","tokenizeContent","continuationConstruct","tokenizeContinuation","chunkInside","contentEnd","contentContinue","startLookahead","prefixed","factoryDestination","literalType","literalMarkerType","rawType","stringType","balance","enclosedBefore","enclosed","enclosedEscape","rawEscape","factoryLabel","markerType","labelInside","labelEscape","factoryTitle","escape","factoryWhitespace","tokenizeDefinition","titleBefore","tokenizeTitleBefore","labelAfter","markerAfter","destinationBefore","destinationAfter","afterWhitespace","beforeMarker","titleAfter","titleAfterOptionalWhitespace","hardBreakEscape","tokenizeHardBreakEscape","headingAtx","resolveHeadingAtx","tokenizeHeadingAtx","sequenceFurther","htmlBlockNames","htmlRawNames","htmlFlow","resolveToHtmlFlow","tokenizeHtmlFlow","blankLineBefore","tokenizeBlankLineBefore","nonLazyContinuationStart","tokenizeNonLazyContinuationStart","closingTag","markerB","declarationOpen","tagCloseStart","continuationDeclarationInside","commentOpenInside","cdataOpenInside","continuation","slash","basicSelfClosing","completeClosingTagAfter","completeAttributeNameBefore","completeEnd","completeAttributeName","completeAttributeNameAfter","completeAttributeValueBefore","completeAttributeValueQuoted","completeAttributeValueUnquoted","completeAttributeValueQuotedAfter","completeAfter","continuationCommentInside","continuationRawTagOpen","continuationClose","continuationCdataInside","continuationAfter","continuationStart","continuationStartNonLazy","continuationBefore","continuationRawEndTag","htmlText","tokenizeHtmlText","returnState","tagOpen","commentEnd","commentClose","lineEndingBefore","cdata","cdataClose","cdataEnd","instructionClose","tagClose","tagCloseBetween","tagOpenBetween","tagOpenAttributeName","tagOpenAttributeNameAfter","tagOpenAttributeValueBefore","tagOpenAttributeValueQuoted","tagOpenAttributeValueUnquoted","tagOpenAttributeValueQuotedAfter","lineEndingAfter","lineEndingAfterPrefix","labelEnd","resolveAllLabelEnd","resolveToLabelEnd","tokenizeLabelEnd","resourceConstruct","tokenizeResource","referenceFullConstruct","tokenizeReferenceFull","referenceCollapsedConstruct","tokenizeReferenceCollapsed","newEvents","media","labelStart","defined","labelEndNok","labelEndOk","referenceNotFull","resourceStart","resourceBefore","resourceOpen","resourceEnd","resourceDestinationAfter","resourceDestinationMissing","resourceBetween","resourceTitleAfter","referenceFull","referenceFullAfter","referenceFullMissing","referenceCollapsedStart","referenceCollapsedOpen","labelStartImage","tokenizeLabelStartImage","labelStartLink","tokenizeLabelStartLink","lineEnding","tokenizeLineEnding","thematicBreak","tokenizeThematicBreak","sequence","tokenizeListContinuation","tokenizeListEnd","tokenizeListStart","listItemPrefixWhitespaceConstruct","tokenizeListItemPrefixWhitespace","indentConstruct","tokenizeIndent","initialSize","kind","atMarker","onBlank","endOfPrefix","otherPrefix","notBlank","notInCurrentItem","setextUnderline","resolveToSetextUnderline","tokenizeSetextUnderline","heading","flow","initializeFlow","atBlankEnding","afterConstruct","resolver","createResolver","initializeFactory","resolveAllLineSuffixes","initializeText","notText","extraResolver","resolveAllText","chunks","bufferIndex","tabs","chunk","contentInitial","flowInitial","insideSpan","resolveText","disable","createTokenizer","parser","initialize","columnStart","resolveAllConstructs","constructFactory","onsuccessfulconstruct","onsuccessfulcheck","consume","defineSkip","sliceSerialize","sliceStream","addResult","expandTabs","serializeChunks","sliceChunks","_bufferIndex","_index","accountForPotentialSkip","chunkIndex","go","fields","construct","onreturn","bogusState","listOfConstructs","constructIndex","currentConstruct","handleListOfConstructs","handleMapOfConstructs","handleConstruct","startPoint","startPrevious","startCurrentConstruct","startEventsIndex","startStack","restore","startIndex","startBufferIndex","endBufferIndex","view","head","atTab","defaultConstructs","creator","postprocess","preprocess","atCarriageReturn","preprocessor","encoding","endPosition","characterEscapeOrReference","decodeString","decode","$1","$2","fromMarkdown","compiler","opener","link","onenterdata","codeFlow","emphasis","hardBreak","listItem","onenterlistitemvalue","onenterlistordered","onenterreference","strong","closer","onexitatxheadingsequence","onexitautolinkemail","onexitautolinkprotocol","onexitdata","onexitcharacterreferencemarker","onexitcharacterreferencevalue","onexitcharacterreference","onexitcodefenced","onexitcodefencedfence","onexitcodefencedfenceinfo","onexitcodefencedfencemeta","onexitcodeindented","onexitcodetext","onexitdefinitiondestinationstring","onexitdefinitionlabelstring","onexitdefinitiontitlestring","onexithardbreak","onexithtmlflow","onexithtmltext","onexitimage","onexitlabel","onexitlabeltext","onexitlineending","onexitlink","onexitreferencestring","onexitresourcedestinationstring","onexitresourcetitlestring","onexitresource","onexitsetextheading","onexitsetextheadinglinesequence","onexitsetextheadingtext","configure","resume","listStack","prepareList","defaultOnError","containerBalance","listSpread","firstBlankLineIndex","tailIndex","tailEvent","and","errorHandler","onExitError","ancestor","depth","siblings","referenceType","fragment","remarkParse","blockquote","language","strikethrough","footnoteReference","clobberPrefix","safeId","counter","reuseCounter","sup","revert","subtype","suffix","contents","imageReference","inlineCode","linkReference","loose","listLoose","listItemLoose","spread","table","firstRow","tableContent","tableRow","cellIndex","cells","tableCell","tab","trimLines","trimLine","ignore","VOID","PRIMITIVE","ARRAY","OBJECT","DATE","REGEXP","MAP","SET","ERROR","BIGINT","env","deserializer","$","as","out","unpair","flags","deserialize","shouldSkip","json","lossy","structuredClone$1","any","defaultFootnoteBackContent","rereferenceIndex","defaultFootnoteBackLabel","referenceIndex","footer","footnoteBackContent","footnoteBackLabel","footnoteLabel","footnoteLabelTagName","footnoteLabelProperties","listItems","backReferences","counts","tailTail","structuredClone","convert","castFactory","anyFactory","propertiesFactory","typeFactory","tests","checkAsRecord","nodeAsRecord","testFunction","looksLikeANode","CONTINUE","EXIT","SKIP","visitParents","visitor","reverse","factory","parents","visit","subresult","grandparents","toResult","nodeAsParent","testOrVisitor","visitorOrReverse","maybeReverse","overload","createState","definitionById","footnoteById","footnoteCounts","defaultHandlers","applyData","handle","shallow","defaultUnknownHandler","trimMarkdownSpaceStart","hName","hChildren","hProperties","toHast","foot","remarkRehype","destination","file","hastTree","bail","toStr","gOPD","hasOwnConstructor","hasIsPrototypeOf","setProperty","getProperty","extend","copyIsArray","trough","fns","pipeline","run","middlewareIndex","middelware","wrapped","fnExpectsCallback","done","exception","then","minpath","basename","dirname","extname","join","assertPath","seenNonSlash","firstNonSlashEnd","extnameIndex","unmatchedSlash","startPart","startDot","preDotState","segments","joined","normalizeString","allowAboveRoot","lastSegmentLength","lastSlash","dots","lastSlashIndex","minproc","cwd","isUrl","fileUrlOrPath","urlToPath","getPathFromURLPosix","pathname","third","VFile","isUint8Array","assertNonEmpty","assertPart","stem","CallableInstance","apply","Processor","attacher","assertUnfrozen","realFile","vfile","assertParser","assertCompiler","executor","parseTree","realDone","compileTree","compileResult","looksLikeAValue","complete","assertDone","assertNode","transformers","outputTree","resultingTree","attachers","namespace","addPlugin","addList","addPreset","add","entryIndex","currentPrimary","isPlainObj","unified","frozen","asyncName","looksLikeAVFile","changelog","emptyPlugins","emptyRemarkRehypeOptions","safeProtocol","deprecations","Markdown","createProcessor","createFile","rehypePlugins","remarkPlugins","remarkRehypeOptions","allowedElements","allowElement","disallowedElements","skipHtml","unwrapDisallowed","urlTransform","defaultUrlTransform","deprecation","colon","questionMark","numberSign","parseSelector","defaultTagName","subvalue","createH","caseSensitive","createAdjustMap","lower","adjusted","isChild","addProperty","addChild","parseSpaces","parseCommas","parsePrimitive","finalResult","svgCaseSensitiveTagNames","webNamespaces","fromDom","doctype","fromHtmlIsomorphic","parseFragment","template","findAfter","convertElement","tagNameFactory","looksLikeAnElement","searchLineFeeds","searchTabOrSpaces","br","isCell","notRendered","hidden","closedDialog","blockOrCaption","toText","options_","block","inferWhitespace","collectText","renderedTextCollection","collectElement","collectPreText","trimAndCollapseSpacesAndTabs","breakBefore","breakAfter","ParseError","loc","underlined","uppercase","hyphenate","ESCAPE_LOOKUP","ESCAPE_REGEX","getBaseElem","characterNodesTypes","isCharacterBox","protocolFromUrl","protocol","SETTINGS_SCHEMA","def","getDefaultValue","defaultType","Settings$1","optionValue","errorCode","errorMsg","trust","Style","cramped","sub","fracNum","fracDen","cramp","text$1","D","Dc","T","Tc","S","Sc","SS","SSc","Style$1","scriptData","scriptFromCodepoint","codepoint","script","allBlocks","supportedCodepoint","doubleBrushStroke","svgPath","hLinePad","sqrtMain","extraVinculum","sqrtSize1","sqrtSize2","sqrtSize3","sqrtSize4","phasePath","sqrtTall","viewBoxHeight","vertSegment","sqrtPath","innerPath","tallDelim","midHeight","DocumentFragment$1","frag","markup","ptPerUnit","relativeUnit","validUnit","calculateSize","sizeValue","unitOptions","makeEm","createClass","cls","initNode","toNode","attr","invalidAttributeNameRegex","toMarkup","Span","Anchor","href","Img","iCombinations","SymbolNode","italic","skew","span","needsSpan","escaped","SvgNode","PathNode","pathName","alternate","LineNode","assertSymbolDomNode","assertSpan","hasHtmlDomChildren","DocumentFragment","fontMetricsData","sigmasAndXis","extraCharacterMap","setFontMetrics","fontName","metrics","getCharacterMetrics","font","ch","fontMetricsBySizeIndex","getGlobalMetrics","sizeIndex","ATOMS","NON_ATOMS","defineSymbol","acceptUnicodeChar","math","ams","accent","bin","inner","mathord","op","punct","rel","textord","ligatures","mathTextSymbols","textSymbols","_ch","letters","_i2","_ch2","wideChar","_i3","_ch3","_i4","_ch4","extraLatin","_i5","_ch5","wideLatinLetterData","wideNumeralData","wideCharacterFont","H","L","codePoint","lookupSymbol","makeSymbol","lookup","symbolNode","mathsym","boldsymbol","makeOrd","isFont","fontOrFamily","wideFontName","wideFontClass","fontClasses","fontData","fontMap","retrieveTextFontName","makeFragment","_fontName","_fontName2","_fontName3","canCombine","tryCombineChars","chars","sizeElementFromChildren","elem","maxFontSize","makeSpan","makeSvgSpan","makeLineSpan","makeAnchor","anchor","wrapFragment","getVListChildrenAndDepth","oldChildren","_depth","currPos","firstChild","makeVList","pstrutSize","pstrut","realChildren","minPos","maxPos","_child","_elem","childWrap","vlist","emptySpan","depthStrut","topStrut","vtable","makeGlue","measurement","fontShape","baseFontName","fontStylesName","svgData","staticSvg","svgNode","thinspace","mediumspace","thickspace","spacings","tightSpacings","_functions","_htmlGroupBuilders","_mathmlGroupBuilders","defineFunction","names","htmlBuilder","mathmlBuilder","defineFunctionBuilders","normalizeArgument","ordargument","binLeftCanceller","binRightCanceller","styleMap$1","DomEnum","buildExpression$1","isRealGroup","surrounding","groups","buildGroup$1","glueOptions","dummyPrev","dummyNext","isRoot","_traverseNonSpaceNodes","prevType","_tightSpacings$prevTy","_spacings$prevType","getTypeOfDomTree","partialGroup","checkPartialGroup","nonspace","_getOutermostNode","makeNullDelimiter","moreClasses","baseOptions","groupNode","multiplier","buildHTMLUnbreakable","strut","buildHTML","eqnNum","nobreak","tagChild","htmlNode","newDocumentFragment","MathNode","TextNode","SpaceNode","noVariantSymbols","rowLikeTypes","makeText","makeRow","getVariant","isNumberPunctuation","buildExpression","isOrdgroup","buildGroup","lastGroup","_group","lastChild","buildExpressionRow","buildMathML","texExpression","isDisplayMode","forMathmlOnly","annotation","semantics","wrapperClass","sizeStyleMap","sizeMultipliers","sizeAtStyle","Options","wantSize","oldOptions","optionsFromSettings","displayWrap","buildTree","katexNode","mathMLNode","_htmlNode","buildHTMLTree","stretchyCodePoint","stretchyMathML","katexImagesData","wideAccentLabels","stretchySvg","buildSvgSpan_","viewBoxWidth","grp","numChars","_height","imgIndex","spans","paths","_minWidth","_viewBoxHeight","_height2","numSvgChildren","widthClasses","aligns","align1","_path","_svgNode","stretchyEnclose","topPad","bottomPad","totalHeight","assertNodeType","assertSymbolNodeType","typedNode","checkSymbolNodeType","getBaseSymbol","htmlBuilder$a","supSubGroup","mustShift","_getBaseSymbol$skew","_getBaseSymbol","accentBelow","clearance","accentBody","accentFull","accentWrap","mathmlBuilder$9","accentNode","NON_STRETCHY_ACCENT_REGEX","isStretchy","isShifty","funcName","innerGroup","kern","paddedNode","optArgs","newOptions","upperGroup","arrowPrefix","lowerGroup","arrowBody","arrowShift","upperShift","lowerShift","arrowNode","upperNode","lowerNode","_lowerNode","htmlBuilder$9","mathmlBuilder$8","binrelClass","atom","baseArg","shiftedArg","mclass","baseOp","supsub","cdArrowFunctionName","newCell","isStartOfArrow","isLabelEnd","endChar","cdArrow","arrowChar","leftLabel","bareArrow","sizedArrow","rightLabel","arrowGroup","parseCD","parsedRows","rowNodes","labelNum","inLabel","wrappedArrow","htmlBuilder$8","mathmlBuilder$7","breakOnTokenText","newLine","globalMap","checkControlSequence","tok","getRHS","letCommand","global","macro","numArgs","insert","delimiters","middle","getMetrics","symbol","styleWrap","delim","toStyle","delimSizeMultiplier","centerSpan","shift","makeSmallDelim","mathrmSize","makeLargeDelim","makeGlyphSpan","sizeClass","corner","makeInner","lapInEms","lap","verts","doubleVerts","makeStackedDelim","heightTotal","repeat","svgLabel","topMetrics","topHeightTotal","repeatMetrics","repeatHeightTotal","bottomMetrics","bottomHeightTotal","middleHeightTotal","middleFactor","middleMetrics","repeatCount","realHeightTotal","axisHeight","pathStr","_innerHeight","vbPad","emPad","sqrtSvg","sqrtName","pathNode","makeSqrtImage","traverseSequence","stackLargeDelimiterSequence","sizeMultiplier","spanHeight","texHeight","advanceWidth","sizeToMaxHeight","stackLargeDelimiters","stackAlwaysDelimiters","stackNeverDelimiters","makeSizedDelim","stackNeverDelimiterSequence","stackAlwaysDelimiterSequence","delimTypeToFont","delimKind","delimType","heightDepth","makeCustomSizedDelim","makeLeftRightDelim","delimiterFactor","delimiterExtend","maxDistFromAxis","delimiterSizes","checkDelimiter","symDelim","assertParsed","innerDepth","hadMiddle","leftDelim","middleDelim","isMiddle","rightDelim","colorOptions","leftNode","rightNode","textNode","middleNode","htmlBuilder$7","imgShift","isSingleChar","lineWeight","angleHeight","ruleThickness","mathmlBuilder$6","fboxsep","thk","_ref6","_environments","defineEnvironment","_macros","defineMacro","SourceLocation","lexer","second","Token","endToken","getHLines","hlineInfo","nxt","validateAmsEnvironmentContext","gatherEnvironments","getAutoTag","parseArray","hskipBeforeAndAfter","addJot","arraystretch","colSeparationType","autoTag","singleRow","emptySingleRow","maxNumCols","leqno","stretch","rowGaps","hLinesBeforeRow","beginRow","endRow","cellBody","dCellStyle","envName","htmlBuilder$6","nr","nc","hlines","arraycolsep","localMultiplier","baselineskip","jot","arrayskip","arstrutHeight","arstrutDepth","setHLinePos","hlinesInGap","inrow","outrow","elt","colDescriptions","colSep","colDescrNum","tagSpans","rw","tagSpan","_colDescr3","colDescr","firstSeparator","_colDescr","lineType","separator","_shift","sepwidth","_colDescr$pregap","_colDescr2","colElems","_shift2","colVList","colSpan","_colDescr$postgap","_colDescr4","tableBody","vListElems","hline","lineShift","eqnNumCol","tagCol","alignMap","mathmlBuilder$5","tbl","glue","menclose","columnLines","prevTypeWasAlign","iStart","iEnd","_cols","rowLines","alignedHandler","separationType","isSplit","res","numMaths","emptyGroup","arg0","isAligned","styling","ordgroup","curMaths","pregap","symNode","colalign","nde","ca","colAlign","environments","nameGroup","_args","endNameToken","htmlBuilder$5","mathmlBuilder$4","fontAliases","htmlBuilder$4","nstyle","dstyle","numerm","hStrut","dStrut","denomm","ruleWidth","ruleSpacing","numShift","denomShift","frac","midShift","candidateClearance","delimSize","mathmlBuilder$3","withDelims","leftOp","rightOp","wrapWithStyle","numer","hasBarLine","replaceWith","stylArray","delimFromValue","delimString","barNode","barSize","styl","textOrd","htmlBuilder$3","braceBody","vSpan","mathmlBuilder$2","trustContext","firstEquals","_value","sizeData","totalheight","attributeStr","keyVal","mathFunction","muUnit","dimension","fix","outerMode","chooseMathStyle","assembleSupSub","supGroup","subGroup","slant","baseShift","subIsSingleCharacter","finalGroup","_bottom","spacer","noSuccessor","htmlBuilder$2","hasLimits","large","stash","oval","mathmlBuilder$1","operator","singleCharBigOps","fName","singleCharIntegrals","htmlBuilder$1","childText","isAllString","word","defaultRuleThickness","phantom","amount","dy","sizingGroup","sizeFuncs","smashHeight","smashDepth","tbArg","smashedNode","theta","phi","lineClearance","minDelimiterHeight","delimDepth","rootm","toShift","rootVList","rootVListWrap","styleMap","styleAttributes","htmlBuilderDelegate","delegate","_delegate","isSup","builderDelegate","valueBase","valueSup","valueSub","supm","subm","supShift","subShift","isCharBox","_newOptions","minSupShift","marginRight","marginLeft","isOiint","psi","vlistElem","_vlistElem","isBrace","isOver","nodeType","_base2","_base","defaultVariant","cssSpace","regularSpace","ord","pad","padNode","textFontFamilies","textFontWeights","textFontShapes","optionsWithFont","mpadded","makeVerb","functions","spaceRegexString","controlWordRegexString","controlSymbolRegexString","controlWordWhitespaceRegexString","controlSpaceRegexString","combiningDiacriticalMarkString","combiningDiacriticalMarksEndRegex","tokenRegexString","Lexer","nlIndex","Namespace","builtins","globalMacros","undefs","undef","macros","nextToken","digitToNumber","digit","newcommand","existsOK","nonexistsOK","skipIfExists","exists","argText","dotsByToken","dotsbGroups","thedots","spaceAfterDots","latexRaiseA","braketHelper","middleDouble","oldMiddle","oldMiddleDouble","midMacro","double","doubled","expanded","implicitCommands","MacroExpander","newMode","isOptional","delims","isDelimited","expandableOnly","topToken","expansion","oldStackLength","catcode","stripped","bodyLexer","unicodeSubRegEx","uSubsAndSups","unicodeAccents","unicodeSymbols","Parser","oldToken","breakOnInfix","lex","overIndex","numerNode","denomNode","numerBody","denomBody","_node","symbolToken","textordArray","colorNode","superscript","subscript","limits","prime","primes","isSub","subsupTokens","funcData","totalArgs","argType","optional","_group2","modeName","argToken","firstToken","lastToken","isBlank","groupEnd","afterNext","nucleus","star","family","toParse","render","baseNode","renderToDomTree","renderToString","generateParseTree","Settings","renderError","renderToHTMLTree","__domTree","katex","emptyClasses","rehypeKatex","languageMath","mathDisplay","mathInline","displayMode","ruleId","defaultSchema","sanitize","unsafe","properties_","safeElement","ancestors","childrenUnknown","specific","defaults","safe","propertyValue","findDefinition","propertyValueMany","propertyValuePrimitive","allowed","protocols","cleanPosition","dataDefault","rehypeSanitize","ccount","escapeStringRegexp","findAndReplace","pairs","toPairs","pairIndex","grandparent","change","matchObject","tupleOrList","tuple","toExpression","toFunction","inConstruct","notInConstruct","gfmAutolinkLiteralFromMarkdown","transformGfmAutolinkLiterals","enterLiteralAutolink","enterLiteralAutolinkValue","exitLiteralAutolink","exitLiteralAutolinkEmail","exitLiteralAutolinkHttp","exitLiteralAutolinkWww","gfmAutolinkLiteralToMarkdown","findUrl","findEmail","domain","isCorrectDomain","splitUrl","atext","trailExec","trail","closingParenIndex","openingParens","closingParens","email","footnoteReferencePeek","enterFootnoteCallString","enterFootnoteCall","enterFootnoteDefinitionLabelString","enterFootnoteDefinition","exitFootnoteCallString","exitFootnoteCall","exitFootnoteDefinitionLabelString","exitFootnoteDefinition","subexit","gfmFootnoteFromMarkdown","gfmFootnoteToMarkdown","firstLineBlank","footnoteDefinition","mapAll","mapExceptFirst","blank","constructsWithoutStrikethrough","handleDelete","peekDelete","gfmStrikethroughFromMarkdown","enterStrikethrough","exitStrikethrough","gfmStrikethroughToMarkdown","defaultStringLength","markdownTable","stringLength","alignments","cellMatrix","sizeMatrix","longestCellByColumn","mostCellsPerRow","columnIndex","toAlignment","patternInScope","listInScope","none","_1","longestStreak","substring","formatCodeAsIndented","checkFence","checkQuote","quote","checkEmphasis","encodeCharacterReference","encodeInfo","outside","outsideKind","insideKind","emphasisPeek","betweenHead","betweenTail","formatHeadingAsSetext","literalWithBreak","rank","htmlPeek","imagePeek","imageReferencePeek","inlineCodePeek","formatLinkAsAutolink","linkPeek","linkReferencePeek","checkBullet","checkBulletOther","bullet","bulletOther","checkBulletOrdered","checkRule","bulletCurrent","useDifferentMarker","firstListItem","checkListItemIndent","listItemIndent","phrasing","checkStrong","strongPeek","checkRuleRepetition","repetition","gfmTableFromMarkdown","enterTable","enterCell","enterRow","exitCodeText","exitTable","gfmTableToMarkdown","alignDelimiters","around","inlineCodeWithTable","handleTable","handleTableCell","handleTableRow","serializeData","handleTableAsData","handleTableRowAsData","matrix","gfmTaskListItemFromMarkdown","exitCheck","exitParagraphWithTaskListItem","gfmTaskListItemToMarkdown","listItemWithTaskListItem","firstParaghraph","sibling","checkable","checkbox","gfmFromMarkdown","gfmToMarkdown","wwwPrefix","tokenizeWwwPrefix","tokenizeDomain","tokenizePath","tokenizeTrail","emailDomainDotTrail","tokenizeEmailDomainDotTrail","wwwAutolink","tokenizeWwwAutolink","previousWww","protocolAutolink","tokenizeProtocolAutolink","previousProtocol","emailAutolink","tokenizeEmailAutolink","previousEmail","gfmAutolinkLiteral","dot","gfmAtext","previousUnbalanced","emailDomain","emailDomainAfter","emailDomainDot","wwwStart","wwwAfter","protocolStart","protocolPrefixInside","protocolSlashesInside","afterProtocol","protocolAfter","wwwPrefixInside","wwwPrefixAfter","underscoreInLastSegment","underscoreInLastLastSegment","domainInside","domainAfter","domainAtPunctuation","sizeClose","pathInside","pathAtPunctuation","trailCharacterReferenceStart","trailBracketAfter","trailCharacterReferenceInside","gfmFootnote","tokenizeDefinitionStart","tokenizeDefinitionContinuation","gfmFootnoteDefinitionEnd","tokenizeGfmFootnoteCall","tokenizePotentialGfmFootnoteCall","resolveToPotentialGfmFootnoteCall","call","callStart","callData","callEscape","labelAtMarker","whitespaceAfter","gfmStrikethrough","tokenizeStrikethrough","resolveAllStrikethrough","EditMap","addImplementation","vecs","editMap","at","gfmTableAlign","inDelimiterRow","alignIndex","gfmTable","tokenizeTable","resolveTable","sizeB","bodyRowStart","headRowBefore","headRowStart","headRowBreak","headDelimiterStart","headRowData","headRowEscape","headDelimiterBefore","headDelimiterValueBefore","headDelimiterCellBefore","headDelimiterNok","headDelimiterLeftAlignmentAfter","headDelimiterCellAfter","headDelimiterFiller","headDelimiterRightAlignmentAfter","bodyRowBreak","bodyRowData","bodyRowEscape","inFirstCellAwaitingPipe","rowKind","lastCell","afterHeadAwaitingFirstBodyRow","lastTableEnd","currentTable","currentBody","currentCell","flushTableEnd","flushCell","rowEnd","previousCell","groupName","valueName","getPoint","relatedStart","relatedEnd","valueToken","exits","related","tasklistCheck","tokenizeTasklistCheck","gfmTaskListItem","spaceThenNonSpace","gfm","remarkGfm","micromarkExtensions","fromMarkdownExtensions","toMarkdownExtensions","mathFromMarkdown","enterMathFlow","enterMathFlowMeta","enterMathText","exitMathFlow","exitMathFlowFence","exitMathFlowMeta","exitMathData","exitMathText","mathToMarkdown","inlineMath","inlineMathPeek","mathFlow","tokenizeMathFenced","metaAfter","beforeNonLazyContinuation","tokenizeClosingFence","afterSequenceClose","mathText","tokenizeMathText","resolveMathText","remarkMath","TypingEffect","isUser","onTypingUpdate","displayedText","setDisplayedText","isTyping","setIsTyping","messageRef","inIframe","containerStyle","typingInterval","messageContent","ReactMarkdown","MessageBubble","_onOpenSettings","getLLMAvatar","SuggestionChip","memo","suggestion","Suggestions","onSuggestionClick","Chat","messages","inputMessage","setInputMessage","messagesEndRef","messagesContainerRef","lastScrollHeightRef","mutationObserverRef","handleOpenSettings","scrollToBottom","force","mutations","shouldScroll","mutation","currentHeight","handleSend","handleSuggestionClick","handleKeyPress","CommandPalette","searchInputRef","enterPressedRef","filteredCommands","searchLower","listElement","selectedElement","listRect","elementRect","handleCommandSelect","handleSearchChange","selectedCommand","HelpRow","Help","Review","LlmValidationService","MIN_CUSTOM_INSTRUCTION_LENGTH","getValidVersion","SettingRow","alignLabel","LlmModelSettingRow","modelSettings","onToggle","onChangeKey","onChangeVersion","validVersion","isValidating","setIsValidating","isValid","setIsValid","getHelperText","validateApiKey","debounceTimer","renderMenuItems","isSelected","newVersion","general","generalSettings","setGeneralSettings","setLlmSettings","handleGeneralChange","handleLlmChange","handleLlmModelChange","propKey","handleReset","handleSave","handleSelectClick","handleSelectChange","isCustomInstructionValid","Text","announce","revision","rotor_value","navText","messageText","visual","tooltip","isHovering","setIsHovering","positionRef","virtualAnchor","handleMouseEnter","MuiTooltip","getTargetBoxSx","GoToExtrema","selectedItemRef","listContainerRef","searchOptionRef","inputValue","setInputValue","isDropdownOpen","setIsDropdownOpen","filteredOptions","setFilteredOptions","dropdownSelectedIndex","setDropdownSelectedIndex","inputFieldWrapperRef","inputElRef","listboxRef","liveRegionRef","availableXValues","activeOptionText","textFieldSlotProps","listContainer","selectedItem","containerRect","itemRect","handleTargetSelect","hasNavigateToExtrema","handleOptionSelect","hasMoveToXValue","focusSearchInput","announceToScreenReader","handleListboxKeyDown","newOption","handleInputKeyDown","lastSelectedOption","isIntersection","displayLabel","labelParts","App","renderFocusedComponent","MaidrApp","getInitialInstruction","subplotCount","firstSubplot","layerCount","firstLayer","groupCount","displayType","Maidr","storeRef","initialInstruction"],"mappings":"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A,GAAa,GAAG,GAAG,GAAG,IAAI,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,CAAC,GAAGA,GAAa,GAAG,GAAG,GAAG,IAAI,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,CAAC,GAAGA,GAAa,GAAG,GAAG,GAAG,IAAI,GAAG,GAAG,IAAI,GAAG,GAAG,GAAG,IAAI,CAAC,GAAGA,GAAa,GAAG,GAAG,GAAG,IAAI,GAAG,GAAG,IAAI,GAAG,GAAG,GAAG,IAAI,CAAC,GAAGA,GAAa,GAAG,GAAG,GAAG,IAAI,GAAG,GAAG,IAAI,GAAG,GAAG,GAAG,IAAI,CAAC,GAAGA,GAAa,GAAG,GAAG,GAAG,IAAI,GAAG,GAAG,IAAI,GAAG,GAAG,GAAG,IAAI,CAAC,GAAGA,GAAa,GAAG,GAAG,GAAG,IAAI,GAAG,IAAI,IAAI,GAAG,GAAG,GAAG,IAAI,CAAC,GAAGA,GAAa,GAAG,GAAG,GAAG,IAAI,GAAG,IAAI,IAAI,GAAG,GAAG,GAAG,IAAI,CAAC,GAAGA,GAAa,GAAG,GAAG,GAAG,IAAI,GAAG,IAAI,IAAI,GAAG,GAAG,GAAG,IAAI,CAAC,GAAGA,GAAa,GAAG,GAAG,GAAG,IAAI,GAAG,IAAI,IAAI,GAAG,GAAG,GAAG,IAAI,CAAC,GAAGA,GAAa,GAAG,GAAG,GAAG,IAAI,GAAG,IAAI,IAAI,GAAG,GAAG,GAAG,IAAI,CAAC,GAAGA,GAAa,GAAG,GAAG,GAAG,IAAI,GAAG,IAAI,IAAI,GAAG,GAAG,GAAG,IAAI,CAAC,GAAGA,GAAa,GAAG,GAAG,IAAI,IAAI,GAAG,IAAI,IAAI,GAAG,GAAG,GAAG,IAAI,CAAC,GAAGA,GAAa,GAAG,GAAG,IAAI,IAAI,GAAG,IAAI,IAAI,GAAG,GAAG,GAAG,IAAI,CAAC,GAAGA,GAAa,GAAG,GAAG,IAAI,IAAI,GAAG,IAAI,IAAI,GAAG,GAAG,GAAG,IAAI,CAAC,GAAGA,GAAa,GAAG,GAAG,IAAI,IAAI,GAAG,IAAI,IAAI,GAAG,GAAG,GAAG,IAAI,CAAC,GAAGA,GAAa,GAAG,IAAI,IAAI,IAAI,GAAG,IAAI,IAAI,GAAG,GAAG,GAAG,IAAI,CA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ACzC,OAAS,CAAC,SAAS,SAAS,GAAG,GAAG,OAAO;AAAA,IACzC,OAAS,CAAC,SAAS,SAAS,GAAG,GAAG,OAAO;AAAA,IACzC,OAAS,CAAC,SAAS,SAAS,GAAG,GAAG,OAAO;AAAA,IACzC,OAAS,CAAC,SAAS,SAAS,GAAG,GAAG,OAAO;AAAA,IACzC,OAAS,CAAC,SAAS,SAAS,GAAG,GAAG,OAAO;AAAA,IACzC,OAAS,CAAC,SAAS,SAAS,GAAG,GAAG,OAAO;AAAA,IACzC,OAAS,CAAC,SAAS,SAAS,GAAG,GAAG,OAAO;AAAA,IACzC,OAAS,CAAC,SAAS,SAAS,GAAG,GAAG,OAAO;AAAA,IACzC,OAAS,CAAC,SAAS,SAAS,GAAG,GAAG,OAAO;AAAA,IACzC,OAAS,CAAC,SAAS,SAAS,GAAG,GAAG,OAAO;AAAA,IACzC,OAAS,CAAC,SAAS,SAAS,GAAG,GAAG,OAAO;AAAA,IACzC,OAAS,CAAC,SAAS,SAAS,GAAG,GAAG,OAAO;AAAA,IACzC,OAAS,CAAC,SAAS,SAAS,GAAG,GAAG,OAAO;AAAA,IACzC,OAAS,CAAC,SAAS,SAAS,GAAG,GAAG,OAAO;AAAA,IACzC,OAAS,CAAC,SAAS,SAAS,GAAG,GAAG,OAAO;AAAA,IACzC,OAAS,CAAC,SAAS,SAAS,GAAG,GAAG,OAAO;AAAA,IACzC,OAAS,CAAC,SAAS,SAAS,GAAG,GAAG,OAAO;AAAA,IACzC,OAAS,CAAC,SAAS,SAAS,GAAG,GAAG,OAAO;AAAA,IACzC,OAAS,CAAC,SAAS,SAAS,GAAG,GAAG,OAAO;AAAA,IACzC,OAAS,CAAC,GAAG,SAAS,SAAS,GAAG,OAAO;AAAA,IACzC,OAAS,CAAC,SAAS,SAAS,GAAG,GAAG,OAAO;AAAA,IACzC,OAAS,CAAC,SAAS,SAAS,GAAG,GAAG,OAAO;AAAA,IACzC,OAAS,CAAC,SAAS,SAAS,GAAG,GAAG,OAAO;AAAA,IACzC,OAAS,CAAC,SAAS,SAAS,GAAG,GAAG,OAAO;AAAA,IACzC,OAAS,CAAC,SAAS,SAAS,GAAG,GAAG,OAAO;AAAA,IACzC,OAAS,CAAC,SAAS,SAAS,GAAG,GAAG,OAAO;AAAA,IACzC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AAAA,IAC/B,KAAO,CAAC,GAAG,SAAS,GAAG,GAAG,KAAK;AAAA,IAC/B,KAAO,CAAC,GAAG,SAAS,GAAG,GAAG,KAAK;AAAA,IAC/B,KAAO,CAAC,GAAG,SAAS,GAAG,GAAG,KAAK;AAAA,IAC/B,KAAO,CAAC,GAAG,SAAS,GAAG,GAAG,KAAK;AAAA,IAC/B,KAAO,CAAC,SAAS,SAAS,GAAG,GAAG,KAAK;AAAA,IACrC,KAAO,CAAC,SAAS,SAAS,GAAG,GAAG,KAAK;AAAA,IACrC,KAAO,CAAC,GAAG,SAAS,GAAG,GAAG,KAAK;AAAA,IAC/B,KAAO,CAAC,GAAG,SAAS,GAAG,GAAG,KAAK;AAAA,IAC/B,KAAO,CAAC,GAAG,SAAS,GAAG,GAAG,KAAK;AAAA,IAC/B,KAAO,CAAC,GAAG,SAAS,GAAG,GAAG,KAAK;AAAA,IAC/B,KAAO,CAAC,GAAG,SAAS,GAAG,GAAG,KAAK;AAAA,IAC/B,KAAO,CAAC,GAAG,SAAS,GAAG,GAAG,KAAK;AAAA,IAC/B,KAAO,CAAC,GAAG,SAAS,GAAG,GAAG,KAAK;AAAA,IAC/B,KAAO,CAAC,SAAS,SAAS,GAAG,GAAG,KAAK;AAAA,IACrC,KAAO,CAAC,GAAG,SAAS,GAAG,GAAG,KAAK;AAAA,IAC/B,KAAO,CAAC,SAAS,SAAS,GAAG,GAAG,KAAK;AAAA,IACrC,KAAO,CAAC,SAAS,SAAS,GAAG,GAAG,KAAK;AAAA,IACrC,KAAO,CAAC,SAAS,SAAS,GAAG,GAAG,KAAK;AAAA,IACrC,KAAO,CAAC,GAAG,SAAS,GAAG,GAAG,KAAK;AAAA,IAC/B,KAAO,CAAC,GAAG,SAAS,GAAG,GAAG,KAAK;AAAA,IAC/B,KAAO,CAAC,GAAG,GAAG,GAAG,GAAG,KAAK;AAAA,IACzB,KAAO,CAAC,GAAG,SAAS,GAAG,GAAG,KAAK;AAAA,IAC/B,KAAO,CAAC,SAAS,GAAG,GAAG,GAAG,KAAK;AAAA,IAC/B,KAAO,CAAC,GAAG,SAAS,GAAG,GAAG,KAAK;AAAA,IAC/B,KAAO,CAAC,SAAS,SAAS,GAAG,GAAG,KAAK;AAAA,IACrC,KAAO,CAAC,GAAG,SAAS,GAAG,GAAG,KAAK;AAAA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L,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EACL,GAAK;AAAA,EAC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","x_google_ignoreList":[6,66,67,68,69,89,90,91,92,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,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,265,266,267,268,269,270,271,272,273,274,275,276,277,278,279,280,281,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,399,400,401,402,403,404,405,406,407,408,409,410,411,412,413,414,415,416,417,418,419,420,421,422,423,424,425,426,427,428,429,430,431,432,433,434,435,436,437,438,439,440,441,442,443,444,445,446,447,448,449,450,451,452,453,454,455,456,457,458,459,460,461,462,463,464,465,466,467,468,469,470,471,472,473,474,475,476,477,480,481,482,483,484,485,486,487,488,489,490,491,492,493,494,495,496,497,498,499,500,501,502,503,504,505,506,507,508,509,510,511,512,513,514,515,516,517,518,519,520,521,522,523,524,525,526,527,528,529,530,531,532,533,534,535,536,537,538,539,540,541,542,543,544,545,546,547,548,549,550,551,552,553,554,555,556,557,558,559,560,561,562,563,564,565,566,567,568,569,570,571,572,573,574,575,576,577,578,579,580,581,582,583,584,585,586,587,588,589,590,591,592,593,594,595,596,597,598,599,600,601,602,603,604,605,606,607,608,609,610,611,612,613,614,615,616,617,618,619,620,621,622,623,624,625,626,627,628,629,630,631,632,633,634,635,636,637,638,639,640,641,642,643,644,645,646,647,648,649,650,651,652,653,654,655,656,657,658,659,660,661,662,663,664,665,666,667,668,669,670,671,672,673,674,675,676,677,678,679,680,681,682,683,684,685,686,687,688]}