{"version":3,"file":"static/js/main.6fe7baa6.js","sources":["Repository.ts","actions/applicationUIActions.ts","actions/processingActions.ts","appMetadata.ts","assets/buttonStyles.ts","assets/icons/addCopy.tsx","assets/icons/building.tsx","assets/icons/pin.tsx","assets/icons/warning.tsx","assets/modelCardStyles.ts","assets/optionStyles.ts","assets/studioPaneStyles.ts","assets/studioToolbarHeaderStyles.ts","assets/text/textBody.tsx","assets/text/textBody2.tsx","assets/text/textButton.tsx","assets/text/textH2.tsx","assets/text/textH1.tsx","assets/text/textH3.tsx","assets/text/tagH4.tsx","assets/text/tagH4ExternalLink.tsx","assets/text/textH4.tsx","components/appButton.tsx","components/appTag.tsx","components/confirmDialog.tsx","components/forge/loaders/svfLoaderWithoutCredentials.ts","components/forge/loaders/viewingWithoutCredentialsLoadOperation.ts","components/forge/ralColorsFactory.ts","components/forge/userObjectIds.ts","components/forge/viewer-utils/viewerModelCollector.ts","components/forge/viewer-utils/viewerModelSelectionLock.ts","components/forge/viewer-utils/viewerModelUtils.ts","components/forge/viewer-utils/viewerObjectTreeUtils.ts","components/forge/viewer-utils/viewerToolsModality.ts","components/forge/wallFacesCollection.ts","components/forgeExtensionsLoader.ts","../node_modules/react-feather/dist/icons/chevron-left.js","components/listItemByIndexSelector.tsx","components/modalHeader.tsx","components/model3d.ts","components/modelAnalytics.ts","components/modelCard.tsx","components/optionSwitcherCard.tsx","components/processingFailure.tsx","../node_modules/@weave-design/progress-bar/build/index.es.js","components/processingIndicator.tsx","components/processingPane.tsx","components/project.ts","components/ralColorSelectorUsedColorsCache.ts","components/shared.ts","config/colors.ts","reducers/profileReducer.ts","reducers/loginReducer.ts","reducers/uploadModelReducer.ts","reducers/processingReducer.ts","reducers/applicationUIReducer.ts","reducers/modelsAnalyticsReducer.ts","reducers/insulatedGlassUnitsReducer.ts","reducers/priceReducer.ts","reducers/modelSaveCycleReducer.ts","reducers/mainReducer.ts","reducers/modelsReducer.ts","reducers/projectsReducer.ts","../node_modules/@emotion/sheet/dist/emotion-sheet.browser.esm.js","../node_modules/stylis/src/Utility.js","../node_modules/stylis/src/Tokenizer.js","../node_modules/stylis/src/Enum.js","../node_modules/stylis/src/Serializer.js","../node_modules/stylis/src/Parser.js","../node_modules/@emotion/cache/dist/emotion-cache.browser.esm.js","../node_modules/stylis/src/Middleware.js","../node_modules/@emotion/react/dist/emotion-element-c39617d8.browser.esm.js","../node_modules/@emotion/react/dist/emotion-react.browser.esm.js","../node_modules/@emotion/serialize/node_modules/@emotion/unitless/dist/emotion-unitless.esm.js","../node_modules/@emotion/serialize/node_modules/@emotion/memoize/dist/emotion-memoize.esm.js","../node_modules/@emotion/serialize/dist/emotion-serialize.esm.js","../node_modules/@emotion/hash/dist/emotion-hash.esm.js","../node_modules/@emotion/use-insertion-effect-with-fallbacks/dist/emotion-use-insertion-effect-with-fallbacks.browser.esm.js","../node_modules/@emotion/utils/dist/emotion-utils.browser.esm.js","../node_modules/@mui/icons-material/AttachFile.js","../node_modules/@mui/icons-material/Close.js","../node_modules/@mui/icons-material/ExpandMore.js","../node_modules/@mui/icons-material/QuestionAnswer.js","../node_modules/@mui/icons-material/Send.js","../node_modules/@mui/icons-material/utils/createSvgIcon.js","../node_modules/react-transition-group/esm/utils/ChildMapping.js","../node_modules/react-transition-group/esm/TransitionGroup.js","../node_modules/@babel/runtime/helpers/esm/assertThisInitialized.js","../node_modules/@mui/material/ButtonBase/Ripple.js","../node_modules/@mui/material/ButtonBase/touchRippleClasses.js","../node_modules/@mui/material/ButtonBase/TouchRipple.js","../node_modules/@mui/material/ButtonBase/buttonBaseClasses.js","../node_modules/@mui/material/ButtonBase/ButtonBase.js","../node_modules/@mui/material/internal/switchBaseClasses.js","../node_modules/@mui/material/internal/SwitchBase.js","../node_modules/@mui/material/internal/svg-icons/CheckBoxOutlineBlank.js","../node_modules/@mui/material/internal/svg-icons/CheckBox.js","../node_modules/@mui/material/internal/svg-icons/IndeterminateCheckBox.js","../node_modules/@mui/material/Checkbox/checkboxClasses.js","../node_modules/@mui/material/Checkbox/Checkbox.js","../node_modules/@mui/system/esm/DefaultPropsProvider/DefaultPropsProvider.js","../node_modules/@mui/material/DefaultPropsProvider/DefaultPropsProvider.js","../node_modules/@mui/material/FormControl/FormControlContext.js","../node_modules/@mui/material/FormControl/useFormControl.js","../node_modules/@mui/material/Grow/Grow.js","../node_modules/@mui/material/Portal/Portal.js","../node_modules/@popperjs/core/lib/dom-utils/getWindow.js","../node_modules/@popperjs/core/lib/dom-utils/instanceOf.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/getWindowScroll.js","../node_modules/@popperjs/core/lib/dom-utils/getNodeName.js","../node_modules/@popperjs/core/lib/dom-utils/getDocumentElement.js","../node_modules/@popperjs/core/lib/dom-utils/getWindowScrollBarX.js","../node_modules/@popperjs/core/lib/dom-utils/getComputedStyle.js","../node_modules/@popperjs/core/lib/dom-utils/isScrollParent.js","../node_modules/@popperjs/core/lib/dom-utils/getCompositeRect.js","../node_modules/@popperjs/core/lib/dom-utils/getNodeScroll.js","../node_modules/@popperjs/core/lib/dom-utils/getHTMLElementScroll.js","../node_modules/@popperjs/core/lib/dom-utils/getLayoutRect.js","../node_modules/@popperjs/core/lib/dom-utils/getParentNode.js","../node_modules/@popperjs/core/lib/dom-utils/getScrollParent.js","../node_modules/@popperjs/core/lib/dom-utils/listScrollParents.js","../node_modules/@popperjs/core/lib/dom-utils/isTableElement.js","../node_modules/@popperjs/core/lib/dom-utils/getOffsetParent.js","../node_modules/@popperjs/core/lib/enums.js","../node_modules/@popperjs/core/lib/utils/orderModifiers.js","../node_modules/@popperjs/core/lib/utils/debounce.js","../node_modules/@popperjs/core/lib/createPopper.js","../node_modules/@popperjs/core/lib/utils/mergeByName.js","../node_modules/@popperjs/core/lib/modifiers/eventListeners.js","../node_modules/@popperjs/core/lib/utils/getBasePlacement.js","../node_modules/@popperjs/core/lib/utils/getVariation.js","../node_modules/@popperjs/core/lib/utils/getMainAxisFromPlacement.js","../node_modules/@popperjs/core/lib/utils/computeOffsets.js","../node_modules/@popperjs/core/lib/modifiers/computeStyles.js","../node_modules/@popperjs/core/lib/modifiers/offset.js","../node_modules/@popperjs/core/lib/utils/getOppositePlacement.js","../node_modules/@popperjs/core/lib/utils/getOppositeVariationPlacement.js","../node_modules/@popperjs/core/lib/dom-utils/contains.js","../node_modules/@popperjs/core/lib/utils/rectToClientRect.js","../node_modules/@popperjs/core/lib/dom-utils/getClippingRect.js","../node_modules/@popperjs/core/lib/dom-utils/getViewportRect.js","../node_modules/@popperjs/core/lib/dom-utils/getDocumentRect.js","../node_modules/@popperjs/core/lib/utils/mergePaddingObject.js","../node_modules/@popperjs/core/lib/utils/getFreshSideObject.js","../node_modules/@popperjs/core/lib/utils/expandToHashMap.js","../node_modules/@popperjs/core/lib/utils/detectOverflow.js","../node_modules/@popperjs/core/lib/utils/within.js","../node_modules/@popperjs/core/lib/modifiers/preventOverflow.js","../node_modules/@popperjs/core/lib/utils/getAltAxis.js","../node_modules/@popperjs/core/lib/modifiers/arrow.js","../node_modules/@popperjs/core/lib/modifiers/hide.js","../node_modules/@popperjs/core/lib/popper.js","../node_modules/@popperjs/core/lib/modifiers/popperOffsets.js","../node_modules/@popperjs/core/lib/modifiers/applyStyles.js","../node_modules/@popperjs/core/lib/modifiers/flip.js","../node_modules/@popperjs/core/lib/utils/computeAutoPlacement.js","../node_modules/@mui/material/Popper/popperClasses.js","../node_modules/@mui/material/Popper/BasePopper.js","../node_modules/@mui/material/Popper/Popper.js","../node_modules/@mui/material/Tooltip/tooltipClasses.js","../node_modules/@mui/material/Tooltip/Tooltip.js","../node_modules/@mui/material/Typography/typographyClasses.js","../node_modules/@mui/material/Typography/Typography.js","../node_modules/@mui/material/colors/common.js","../node_modules/@mui/material/colors/grey.js","../node_modules/@mui/material/colors/purple.js","../node_modules/@mui/material/colors/red.js","../node_modules/@mui/material/colors/orange.js","../node_modules/@mui/material/colors/blue.js","../node_modules/@mui/material/colors/lightBlue.js","../node_modules/@mui/material/colors/green.js","../node_modules/@mui/material/styles/createPalette.js","../node_modules/@mui/material/styles/createTypography.js","../node_modules/@mui/material/styles/shadows.js","../node_modules/@mui/material/styles/zIndex.js","../node_modules/@mui/material/styles/createTheme.js","../node_modules/@mui/material/styles/createMixins.js","../node_modules/@mui/material/styles/createTransitions.js","../node_modules/@mui/material/styles/defaultTheme.js","../node_modules/@mui/material/styles/identifier.js","../node_modules/@mui/material/styles/rootShouldForwardProp.js","../node_modules/@mui/material/styles/slotShouldForwardProp.js","../node_modules/@mui/material/styles/styled.js","../node_modules/@mui/material/styles/useTheme.js","../node_modules/@mui/material/transitions/utils.js","../node_modules/@mui/material/utils/capitalize.js","../node_modules/@mui/material/SvgIcon/svgIconClasses.js","../node_modules/@mui/material/SvgIcon/SvgIcon.js","../node_modules/@mui/material/utils/createSvgIcon.js","../node_modules/@mui/material/utils/debounce.js","../node_modules/@mui/material/utils/createChainedFunction.js","../node_modules/@mui/material/utils/deprecatedPropType.js","../node_modules/@mui/utils/esm/deprecatedPropType/deprecatedPropType.js","../node_modules/@mui/material/utils/requirePropFactory.js","../node_modules/@mui/utils/esm/requirePropFactory/requirePropFactory.js","../node_modules/@mui/material/utils/setRef.js","../node_modules/@mui/material/utils/unsupportedProp.js","../node_modules/@mui/utils/esm/unsupportedProp/unsupportedProp.js","../node_modules/@mui/material/utils/index.js","../node_modules/@mui/material/utils/isMuiElement.js","../node_modules/@mui/utils/esm/isMuiElement/isMuiElement.js","../node_modules/@mui/material/utils/ownerDocument.js","../node_modules/@mui/material/utils/ownerWindow.js","../node_modules/@mui/material/utils/useControlled.js","../node_modules/@mui/utils/esm/useControlled/useControlled.js","../node_modules/@mui/material/utils/useEnhancedEffect.js","../node_modules/@mui/material/utils/useEventCallback.js","../node_modules/@mui/material/utils/useForkRef.js","../node_modules/@mui/material/utils/useId.js","../node_modules/@mui/utils/esm/useIsFocusVisible/useIsFocusVisible.js","../node_modules/@mui/material/utils/useIsFocusVisible.js","../node_modules/@mui/styled-engine/GlobalStyles/GlobalStyles.js","../node_modules/@emotion/styled/node_modules/@emotion/memoize/dist/emotion-memoize.esm.js","../node_modules/@emotion/styled/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/StyledEngineProvider/StyledEngineProvider.js","../node_modules/@mui/styled-engine/index.js","../node_modules/@mui/system/colorManipulator.js","../node_modules/@mui/system/createStyled.js","../node_modules/@mui/system/esm/RtlProvider/index.js","../node_modules/@mui/system/esm/breakpoints.js","../node_modules/@mui/system/esm/createTheme/applyStyles.js","../node_modules/@mui/system/esm/createTheme/createBreakpoints.js","../node_modules/@mui/system/esm/createTheme/shape.js","../node_modules/@mui/system/esm/createTheme/createTheme.js","../node_modules/@mui/system/esm/createTheme/createSpacing.js","../node_modules/@mui/system/esm/merge.js","../node_modules/@mui/system/esm/spacing.js","../node_modules/@mui/system/esm/memoize.js","../node_modules/@mui/system/esm/style.js","../node_modules/@mui/system/esm/compose.js","../node_modules/@mui/system/esm/borders.js","../node_modules/@mui/system/esm/cssGrid.js","../node_modules/@mui/system/esm/palette.js","../node_modules/@mui/system/esm/sizing.js","../node_modules/@mui/system/esm/styleFunctionSx/defaultSxConfig.js","../node_modules/@mui/system/esm/styleFunctionSx/extendSxProp.js","../node_modules/@mui/system/esm/styleFunctionSx/styleFunctionSx.js","../node_modules/@mui/system/esm/useThemeWithoutDefault.js","../node_modules/@mui/system/esm/useTheme.js","../node_modules/@mui/system/useThemeWithoutDefault.js","../node_modules/@mui/utils/esm/ClassNameGenerator/ClassNameGenerator.js","../node_modules/@mui/utils/esm/appendOwnerState/appendOwnerState.js","../node_modules/@mui/utils/esm/capitalize/capitalize.js","../node_modules/@mui/utils/esm/clamp/clamp.js","../node_modules/@mui/utils/esm/composeClasses/composeClasses.js","../node_modules/@mui/utils/esm/createChainedFunction/createChainedFunction.js","../node_modules/@mui/utils/esm/debounce/debounce.js","../node_modules/@mui/utils/esm/deepmerge/deepmerge.js","../node_modules/@mui/utils/esm/extractEventHandlers/extractEventHandlers.js","../node_modules/@mui/utils/esm/formatMuiErrorMessage/formatMuiErrorMessage.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/utils/esm/isHostComponent/isHostComponent.js","../node_modules/@mui/utils/esm/omitEventHandlers/omitEventHandlers.js","../node_modules/@mui/utils/esm/mergeSlotProps/mergeSlotProps.js","../node_modules/@mui/utils/esm/ownerDocument/ownerDocument.js","../node_modules/@mui/utils/esm/ownerWindow/ownerWindow.js","../node_modules/@mui/utils/esm/resolveComponentProps/resolveComponentProps.js","../node_modules/@mui/utils/esm/resolveProps/resolveProps.js","../node_modules/@mui/utils/esm/setRef/setRef.js","../node_modules/@mui/utils/esm/useEnhancedEffect/useEnhancedEffect.js","../node_modules/@mui/utils/esm/useEventCallback/useEventCallback.js","../node_modules/@mui/utils/esm/useForkRef/useForkRef.js","../node_modules/@mui/utils/esm/useId/useId.js","../node_modules/@mui/utils/esm/useSlotProps/useSlotProps.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/@weave-design/behaviors/build/index.es.js","../node_modules/@weave-design/button/build/index.es.js","../node_modules/compute-scroll-into-view/src/index.ts","../node_modules/downshift/dist/downshift.esm.js","../node_modules/@weave-design/multi-downshift/build/index.es.js","../node_modules/@weave-design/dropdown/build/index.es.js","../node_modules/@weave-design/flyout/build/index.es.js","../node_modules/@weave-design/icon-button/build/index.es.js","../node_modules/@weave-design/icons/build/index.es.js","../node_modules/@weave-design/input/build/index.es.js","../node_modules/@weave-design/label/build/index.es.js","../node_modules/@weave-design/modal/build/index.es.js","../node_modules/@weave-design/spacer/build/index.es.js","../node_modules/@weave-design/theme-context/build/index.es.js","../node_modules/@weave-design/typography/build/index.es.js","../node_modules/@weave-design/utils/build/index.es.js","../node_modules/downshift/node_modules/react-is/cjs/react-is.production.min.js","../node_modules/downshift/node_modules/react-is/index.js","../node_modules/create-emotion/node_modules/@emotion/sheet/dist/sheet.browser.esm.js","../node_modules/@emotion/stylis/dist/stylis.browser.esm.js","../node_modules/create-emotion/node_modules/@emotion/cache/dist/cache.browser.esm.js","../node_modules/create-emotion/node_modules/@emotion/hash/dist/hash.browser.esm.js","../node_modules/create-emotion/node_modules/@emotion/unitless/dist/unitless.browser.esm.js","../node_modules/create-emotion/node_modules/@emotion/memoize/dist/memoize.browser.esm.js","../node_modules/create-emotion/node_modules/@emotion/serialize/dist/serialize.browser.esm.js","../node_modules/create-emotion/node_modules/@emotion/utils/dist/utils.browser.esm.js","../node_modules/create-emotion/dist/create-emotion.browser.esm.js","../node_modules/emotion/dist/emotion.esm.js","../node_modules/hoist-non-react-statics/dist/hoist-non-react-statics.cjs.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/index.js","../node_modules/linkify-it/index.js","../node_modules/linkify-it/lib/re.js","../node_modules/lodash.memoize/index.js","../node_modules/lodash.merge/index.js","../node_modules/prop-types/factoryWithThrowingShims.js","../node_modules/prop-types/index.js","../node_modules/prop-types/lib/ReactPropTypesSecret.js","../node_modules/react-autocomplete-hint/dist/src/index.js","../node_modules/react-autocomplete-hint/dist/src/utils.js","../node_modules/react-circular-progressbar/src/constants.ts","../node_modules/react-circular-progressbar/src/Path.tsx","../node_modules/react-circular-progressbar/src/CircularProgressbar.tsx","../node_modules/react-circular-progressbar/src/buildStyles.ts","../node_modules/react-dom/cjs/react-dom.production.min.js","../node_modules/react-dom/client.js","../node_modules/react-dom/index.js","../node_modules/react-feather/dist/icons/alert-triangle.js","../node_modules/react-feather/dist/icons/chevron-right.js","../node_modules/react-feather/dist/icons/download.js","../node_modules/react-feather/dist/icons/edit.js","../node_modules/react-feather/dist/icons/refresh-ccw.js","../node_modules/react-feather/dist/icons/settings.js","../node_modules/react-feather/dist/icons/trash.js","../node_modules/react-feather/dist/icons/x.js","../node_modules/react-is/cjs/react-is.production.min.js","../node_modules/react-is/index.js","../node_modules/react-linkify/dist/components/Linkify.js","../node_modules/react-linkify/dist/decorators/defaultComponentDecorator.js","../node_modules/react-linkify/dist/decorators/defaultHrefDecorator.js","../node_modules/react-linkify/dist/decorators/defaultMatchDecorator.js","../node_modules/react-linkify/dist/decorators/defaultTextDecorator.js","../node_modules/react-linkify/dist/index.js","../node_modules/react-transition-group/esm/config.js","../node_modules/react-transition-group/esm/Transition.js","../node_modules/react-transition-group/esm/utils/reflow.js","../node_modules/react-transition-group/esm/TransitionGroupContext.js","../node_modules/react/cjs/react-jsx-runtime.production.min.js","../node_modules/react/cjs/react.production.min.js","../node_modules/react/index.js","../node_modules/react/jsx-runtime.js","../node_modules/scheduler/cjs/scheduler.production.min.js","../node_modules/scheduler/index.js","../node_modules/shallowequal/index.js","../node_modules/uc.micro/categories/Cc/regex.js","../node_modules/uc.micro/categories/P/regex.js","../node_modules/uc.micro/categories/Z/regex.js","../node_modules/uc.micro/properties/Any/regex.js","../node_modules/use-sync-external-store/cjs/use-sync-external-store-with-selector.production.min.js","../node_modules/use-sync-external-store/with-selector.js","../node_modules/@babel/runtime/helpers/extends.js","../node_modules/@babel/runtime/helpers/interopRequireDefault.js","../node_modules/@babel/runtime/helpers/objectWithoutPropertiesLoose.js","../node_modules/@babel/runtime/helpers/esm/extends.js","../node_modules/@babel/runtime/helpers/esm/setPrototypeOf.js","../node_modules/@babel/runtime/helpers/esm/inheritsLoose.js","../node_modules/@babel/runtime/helpers/esm/objectWithoutPropertiesLoose.js","components/forge/fixes/Earcut.js","components/forge/fixes/ShapeUtils.js","../node_modules/@dextall/interop/build/generator-interop.mjs","../node_modules/@dextall/rtree/build/index.js","../node_modules/@dextall/shared/build/index.js","../node_modules/@dextall/windows-builder/dist/index.js","../node_modules/redux-thunk/dist/redux-thunk.mjs","../node_modules/@reduxjs/toolkit/src/devtoolsExtension.ts","../node_modules/@reduxjs/toolkit/src/utils.ts","../node_modules/@reduxjs/toolkit/src/getDefaultMiddleware.ts","../node_modules/@reduxjs/toolkit/src/autoBatchEnhancer.ts","../node_modules/@reduxjs/toolkit/src/getDefaultEnhancers.ts","../node_modules/@reduxjs/toolkit/src/configureStore.ts","../node_modules/@reduxjs/toolkit/src/listenerMiddleware/task.ts","../node_modules/@reduxjs/toolkit/src/listenerMiddleware/index.ts","../node_modules/@reduxjs/toolkit/src/combineSlices.ts","../node_modules/@reduxjs/toolkit/src/formatProdErrorMessage.ts","../node_modules/@sentry/browser/node_modules/@sentry/core/src/constants.ts","../node_modules/@sentry/browser/node_modules/@sentry/core/src/carrier.ts","../node_modules/@sentry/browser/node_modules/@sentry/core/src/asyncContext/stackStrategy.ts","../node_modules/@sentry/browser/node_modules/@sentry/core/src/defaultScopes.ts","../node_modules/@sentry/browser/node_modules/@sentry/core/src/asyncContext/index.ts","../node_modules/@sentry/browser/node_modules/@sentry/core/src/currentScopes.ts","../node_modules/@sentry/browser/node_modules/@sentry/core/src/debug-build.ts","../node_modules/@sentry/browser/node_modules/@sentry/core/src/exports.ts","../node_modules/@sentry/browser/node_modules/@sentry/utils/src/propagationContext.ts","../node_modules/@sentry/browser/node_modules/@sentry/core/src/utils/spanOnScope.ts","../node_modules/@sentry/browser/node_modules/@sentry/core/src/scope.ts","../node_modules/@sentry/browser/node_modules/@sentry/core/src/semanticAttributes.ts","../node_modules/@sentry/browser/node_modules/@sentry/core/src/session.ts","../node_modules/@sentry/browser/node_modules/@sentry/utils/src/baggage.ts","../node_modules/@sentry/browser/node_modules/@sentry/core/src/tracing/dynamicSamplingContext.ts","../node_modules/@sentry/browser/node_modules/@sentry/core/src/utils/hasTracingEnabled.ts","../node_modules/@sentry/browser/node_modules/@sentry/core/src/eventProcessors.ts","../node_modules/@sentry/browser/node_modules/@sentry/core/src/utils/applyScopeDataToEvent.ts","../node_modules/@sentry/browser/node_modules/@sentry/core/src/utils/prepareEvent.ts","../node_modules/@sentry/browser/node_modules/@sentry/core/src/metrics/metric-summary.ts","../node_modules/@sentry/browser/node_modules/@sentry/core/src/tracing/spanstatus.ts","../node_modules/@sentry/browser/node_modules/@sentry/core/src/utils/spanUtils.ts","../node_modules/@sentry/browser/node_modules/@sentry/utils/src/browser.ts","../node_modules/@sentry/browser/node_modules/@sentry/utils/src/debug-build.ts","../node_modules/@sentry/browser/node_modules/@sentry/utils/src/is.ts","../node_modules/@sentry/browser/node_modules/@sentry/utils/src/logger.ts","../node_modules/@sentry/browser/node_modules/@sentry/utils/src/misc.ts","../node_modules/@sentry/browser/node_modules/@sentry/utils/src/normalize.ts","../node_modules/@sentry/browser/node_modules/@sentry/utils/src/memo.ts","../node_modules/@sentry/browser/node_modules/@sentry/utils/src/object.ts","../node_modules/@sentry/browser/node_modules/@sentry/utils/src/stacktrace.ts","../node_modules/@sentry/browser/node_modules/@sentry/utils/src/string.ts","../node_modules/@sentry/browser/node_modules/@sentry/utils/src/syncpromise.ts","../node_modules/@sentry/browser/node_modules/@sentry/utils/src/time.ts","../node_modules/@sentry/browser/node_modules/@sentry/utils/src/version.ts","../node_modules/@sentry/browser/node_modules/@sentry/utils/src/worldwide.ts","../node_modules/axios/index.js","../node_modules/axios/lib/helpers/bind.js","../node_modules/axios/lib/utils.js","../node_modules/axios/lib/core/AxiosError.js","../node_modules/axios/lib/helpers/toFormData.js","../node_modules/axios/lib/helpers/AxiosURLSearchParams.js","../node_modules/axios/lib/helpers/buildURL.js","../node_modules/axios/lib/core/InterceptorManager.js","../node_modules/axios/lib/defaults/transitional.js","../node_modules/axios/lib/platform/browser/index.js","../node_modules/axios/lib/platform/browser/classes/URLSearchParams.js","../node_modules/axios/lib/platform/browser/classes/FormData.js","../node_modules/axios/lib/platform/browser/classes/Blob.js","../node_modules/axios/lib/platform/common/utils.js","../node_modules/axios/lib/platform/index.js","../node_modules/axios/lib/helpers/formDataToJSON.js","../node_modules/axios/lib/defaults/index.js","../node_modules/axios/lib/helpers/toURLEncodedForm.js","../node_modules/axios/lib/helpers/parseHeaders.js","../node_modules/axios/lib/core/AxiosHeaders.js","../node_modules/axios/lib/core/transformData.js","../node_modules/axios/lib/cancel/isCancel.js","../node_modules/axios/lib/cancel/CanceledError.js","../node_modules/axios/lib/core/settle.js","../node_modules/axios/lib/helpers/speedometer.js","../node_modules/axios/lib/helpers/throttle.js","../node_modules/axios/lib/helpers/progressEventReducer.js","../node_modules/axios/lib/helpers/isURLSameOrigin.js","../node_modules/axios/lib/helpers/cookies.js","../node_modules/axios/lib/core/buildFullPath.js","../node_modules/axios/lib/helpers/isAbsoluteURL.js","../node_modules/axios/lib/helpers/combineURLs.js","../node_modules/axios/lib/core/mergeConfig.js","../node_modules/axios/lib/helpers/resolveConfig.js","../node_modules/axios/lib/adapters/xhr.js","../node_modules/axios/lib/helpers/parseProtocol.js","../node_modules/axios/lib/helpers/composeSignals.js","../node_modules/axios/lib/helpers/trackStream.js","../node_modules/axios/lib/adapters/fetch.js","../node_modules/axios/lib/adapters/adapters.js","../node_modules/axios/lib/helpers/null.js","../node_modules/axios/lib/core/dispatchRequest.js","../node_modules/axios/lib/env/data.js","../node_modules/axios/lib/helpers/validator.js","../node_modules/axios/lib/core/Axios.js","../node_modules/axios/lib/cancel/CancelToken.js","../node_modules/axios/lib/helpers/HttpStatusCode.js","../node_modules/axios/lib/axios.js","../node_modules/axios/lib/helpers/spread.js","../node_modules/axios/lib/helpers/isAxiosError.js","../node_modules/clsx/dist/clsx.mjs","../node_modules/react-icons/io/index.mjs","../node_modules/react-icons/lib/iconsManifest.mjs","../node_modules/react-icons/lib/iconContext.mjs","../node_modules/react-icons/lib/iconBase.mjs","../node_modules/react-redux/src/utils/react.ts","../node_modules/react-redux/src/components/Context.ts","../node_modules/react-redux/src/utils/useSyncExternalStore.ts","../node_modules/react-redux/src/hooks/useReduxContext.ts","../node_modules/react-redux/src/hooks/useSelector.ts","../node_modules/react-redux/src/utils/react-is.ts","../node_modules/react-redux/src/connect/selectorFactory.ts","../node_modules/react-redux/src/connect/wrapMapToProps.ts","../node_modules/react-redux/src/connect/invalidArgFactory.ts","../node_modules/react-redux/src/connect/mergeProps.ts","../node_modules/react-redux/src/utils/batch.ts","../node_modules/react-redux/src/utils/Subscription.ts","../node_modules/react-redux/src/utils/useIsomorphicLayoutEffect.ts","../node_modules/react-redux/src/utils/shallowEqual.ts","../node_modules/react-redux/src/utils/hoistStatics.ts","../node_modules/react-redux/src/components/connect.tsx","../node_modules/react-redux/src/connect/mapStateToProps.ts","../node_modules/react-redux/src/connect/mapDispatchToProps.ts","../node_modules/react-redux/src/utils/bindActionCreators.ts","../node_modules/react-redux/src/components/Provider.tsx","../node_modules/react-redux/src/hooks/useStore.ts","../node_modules/react-redux/src/hooks/useDispatch.ts","../node_modules/react-redux/src/index.ts","../node_modules/redux/src/utils/formatProdErrorMessage.ts","../node_modules/redux/src/utils/symbol-observable.ts","../node_modules/redux/src/utils/actionTypes.ts","../node_modules/redux/src/utils/isPlainObject.ts","../node_modules/redux/src/createStore.ts","../node_modules/redux/src/combineReducers.ts","../node_modules/redux/src/compose.ts","../node_modules/redux/src/applyMiddleware.ts","../node_modules/redux/src/utils/isAction.ts","../node_modules/tslib/tslib.es6.mjs","../webpack/bootstrap","../webpack/runtime/compat get default export","../webpack/runtime/create fake namespace object","../webpack/runtime/define property getters","../webpack/runtime/ensure chunk","../webpack/runtime/get javascript chunk filename","../webpack/runtime/get mini-css chunk filename","../webpack/runtime/global","../webpack/runtime/hasOwnProperty shorthand","../webpack/runtime/load script","../webpack/runtime/make namespace object","../webpack/runtime/node module decorator","../webpack/runtime/publicPath","../webpack/runtime/css loading","../webpack/runtime/jsonp chunk loading","../webpack/runtime/nonce","../node_modules/@sentry/browser/node_modules/@sentry/core/src/integration.ts","../node_modules/@sentry/browser/node_modules/@sentry/core/src/integrations/inboundfilters.ts","../node_modules/@sentry/browser/node_modules/@sentry/core/src/integrations/functiontostring.ts","../node_modules/@sentry/browser/node_modules/@sentry/core/src/integrations/dedupe.ts","../node_modules/@sentry/browser/node_modules/@sentry/core/src/sdk.ts","../node_modules/@sentry/browser/node_modules/@sentry/utils/src/supports.ts","../node_modules/@sentry-internal/browser-utils/node_modules/@sentry/utils/src/debug-build.ts","../node_modules/@sentry-internal/browser-utils/node_modules/@sentry/utils/src/version.ts","../node_modules/@sentry-internal/browser-utils/node_modules/@sentry/utils/src/worldwide.ts","../node_modules/@sentry-internal/browser-utils/node_modules/@sentry/utils/src/logger.ts","../node_modules/@sentry-internal/browser-utils/node_modules/@sentry/utils/src/stacktrace.ts","../node_modules/@sentry-internal/browser-utils/node_modules/@sentry/utils/src/instrument/handlers.ts","../node_modules/@sentry-internal/browser-utils/node_modules/@sentry/utils/src/vendor/supportsHistory.ts","../node_modules/@sentry-internal/browser-utils/node_modules/@sentry/utils/src/object.ts","../node_modules/@sentry-internal/browser-utils/src/types.ts","../node_modules/@sentry-internal/browser-utils/src/instrument/history.ts","../node_modules/@sentry/browser/node_modules/@sentry/utils/src/dsn.ts","../node_modules/@sentry/browser/node_modules/@sentry/utils/src/envelope.ts","../node_modules/@sentry/browser/node_modules/@sentry/utils/src/error.ts","../node_modules/@sentry/browser/node_modules/@sentry/core/src/api.ts","../node_modules/@sentry/browser/node_modules/@sentry/core/src/envelope.ts","../node_modules/@sentry/browser/node_modules/@sentry/core/src/baseclient.ts","../node_modules/@sentry/browser/node_modules/@sentry/core/src/utils/parseSampleRate.ts","../node_modules/@sentry/browser/node_modules/@sentry/utils/src/clientreport.ts","../node_modules/@sentry/browser/src/debug-build.ts","../node_modules/@sentry/browser/src/eventbuilder.ts","../node_modules/@sentry/browser/src/helpers.ts","../node_modules/@sentry/browser/src/client.ts","../node_modules/@sentry/browser/node_modules/@sentry/core/src/utils/sdkMetadata.ts","../node_modules/@sentry/browser/node_modules/@sentry/utils/src/env.ts","../node_modules/@sentry/browser/src/userfeedback.ts","../node_modules/@sentry-internal/browser-utils/src/instrument/dom.ts","../node_modules/@sentry-internal/browser-utils/node_modules/@sentry/utils/src/misc.ts","../node_modules/@sentry-internal/browser-utils/node_modules/@sentry/utils/src/time.ts","../node_modules/@sentry-internal/browser-utils/node_modules/@sentry/utils/src/is.ts","../node_modules/@sentry-internal/browser-utils/src/instrument/xhr.ts","../node_modules/@sentry/browser/node_modules/@sentry/core/src/breadcrumbs.ts","../node_modules/@sentry/browser/node_modules/@sentry/utils/src/instrument/handlers.ts","../node_modules/@sentry/browser/node_modules/@sentry/utils/src/instrument/console.ts","../node_modules/@sentry/browser/node_modules/@sentry/utils/src/instrument/fetch.ts","../node_modules/@sentry/browser/node_modules/@sentry/utils/src/severity.ts","../node_modules/@sentry/browser/node_modules/@sentry/utils/src/breadcrumb-log-level.ts","../node_modules/@sentry/browser/node_modules/@sentry/utils/src/url.ts","../node_modules/@sentry/browser/src/integrations/breadcrumbs.ts","../node_modules/@sentry/browser/src/integrations/browserapierrors.ts","../node_modules/@sentry/browser/node_modules/@sentry/utils/src/instrument/globalError.ts","../node_modules/@sentry/browser/node_modules/@sentry/utils/src/instrument/globalUnhandledRejection.ts","../node_modules/@sentry/browser/src/integrations/globalhandlers.ts","../node_modules/@sentry/browser/src/integrations/httpcontext.ts","../node_modules/@sentry/browser/node_modules/@sentry/utils/src/aggregate-errors.ts","../node_modules/@sentry/browser/src/integrations/linkederrors.ts","../node_modules/@sentry/browser/src/stack-parsers.ts","../node_modules/@sentry-internal/browser-utils/node_modules/@sentry/utils/src/supports.ts","../node_modules/@sentry-internal/browser-utils/src/debug-build.ts","../node_modules/@sentry-internal/browser-utils/src/getNativeImplementation.ts","../node_modules/@sentry/browser/node_modules/@sentry/utils/src/promisebuffer.ts","../node_modules/@sentry/browser/node_modules/@sentry/utils/src/ratelimit.ts","../node_modules/@sentry/browser/node_modules/@sentry/core/src/transports/base.ts","../node_modules/@sentry/browser/src/transports/fetch.ts","../node_modules/@sentry/browser/src/sdk.ts","../node_modules/@sentry/react/node_modules/@sentry/utils/src/version.ts","../node_modules/@sentry-internal/replay/node_modules/@sentry/utils/src/buildPolyfills/_optionalChain.ts","../node_modules/@sentry-internal/replay/node_modules/@sentry/utils/src/version.ts","../node_modules/@sentry-internal/replay/node_modules/@sentry/utils/src/worldwide.ts","../node_modules/@sentry-internal/replay/node_modules/@sentry/utils/src/time.ts","../node_modules/@sentry-internal/replay/node_modules/@sentry/utils/src/debug-build.ts","../node_modules/@sentry-internal/replay/node_modules/@sentry/utils/src/logger.ts","../node_modules/@sentry-internal/replay/node_modules/@sentry/core/src/carrier.ts","../node_modules/@sentry-internal/replay/node_modules/@sentry/utils/src/is.ts","../node_modules/@sentry-internal/replay/node_modules/@sentry/utils/src/misc.ts","../node_modules/@sentry-internal/replay/node_modules/@sentry/utils/src/propagationContext.ts","../node_modules/@sentry-internal/replay/node_modules/@sentry/core/src/session.ts","../node_modules/@sentry-internal/replay/node_modules/@sentry/utils/src/browser.ts","../node_modules/@sentry-internal/replay/node_modules/@sentry/utils/src/object.ts","../node_modules/@sentry-internal/replay/node_modules/@sentry/core/src/utils/spanOnScope.ts","../node_modules/@sentry-internal/replay/node_modules/@sentry/core/src/scope.ts","../node_modules/@sentry-internal/replay/node_modules/@sentry/core/src/asyncContext/stackStrategy.ts","../node_modules/@sentry-internal/replay/node_modules/@sentry/core/src/defaultScopes.ts","../node_modules/@sentry-internal/replay/node_modules/@sentry/core/src/asyncContext/index.ts","../node_modules/@sentry-internal/replay/node_modules/@sentry/core/src/currentScopes.ts","../node_modules/@sentry-internal/replay/node_modules/@sentry/core/src/breadcrumbs.ts","../node_modules/@sentry-internal/replay/node_modules/@sentry/utils/src/string.ts","../node_modules/@sentry-internal/replay/node_modules/@sentry/utils/src/stacktrace.ts","../node_modules/@sentry-internal/replay/node_modules/@sentry/utils/src/normalize.ts","../node_modules/@sentry-internal/replay/node_modules/@sentry/utils/src/memo.ts","../node_modules/@sentry-internal/replay/node_modules/@sentry/core/src/constants.ts","../node_modules/@sentry-internal/replay/node_modules/@sentry/utils/src/syncpromise.ts","../node_modules/@sentry-internal/replay/node_modules/@sentry/core/src/debug-build.ts","../node_modules/@sentry-internal/replay/node_modules/@sentry/core/src/eventProcessors.ts","../node_modules/@sentry-internal/replay/node_modules/@sentry/utils/src/baggage.ts","../node_modules/@sentry-internal/replay/node_modules/@sentry/core/src/semanticAttributes.ts","../node_modules/@sentry-internal/replay/node_modules/@sentry/core/src/metrics/metric-summary.ts","../node_modules/@sentry-internal/replay/node_modules/@sentry/core/src/tracing/spanstatus.ts","../node_modules/@sentry-internal/replay/node_modules/@sentry/core/src/utils/spanUtils.ts","../node_modules/@sentry-internal/replay/node_modules/@sentry/core/src/tracing/dynamicSamplingContext.ts","../node_modules/@sentry-internal/replay/node_modules/@sentry/core/src/utils/hasTracingEnabled.ts","../node_modules/@sentry-internal/replay/node_modules/@sentry/core/src/utils/applyScopeDataToEvent.ts","../node_modules/@sentry-internal/replay/node_modules/@sentry/core/src/utils/prepareEvent.ts","../node_modules/@sentry-internal/replay/node_modules/@sentry/core/src/utils/isSentryRequestUrl.ts","../node_modules/@sentry-internal/replay/node_modules/@sentry/core/src/utils/parseSampleRate.ts","../node_modules/@sentry-internal/replay/node_modules/@sentry/utils/src/severity.ts","../node_modules/@sentry-internal/replay/node_modules/@sentry/utils/src/dsn.ts","../node_modules/@sentry-internal/replay/node_modules/@sentry/utils/src/ratelimit.ts","../node_modules/@sentry-internal/replay/node_modules/@sentry/utils/src/node.ts","../node_modules/@sentry-internal/replay/node_modules/@sentry/utils/src/env.ts","../node_modules/@sentry-internal/replay/node_modules/@sentry/utils/src/isBrowser.ts","../node_modules/@sentry-internal/browser-utils/src/metrics/web-vitals/lib/bindReporter.ts","../node_modules/@sentry-internal/browser-utils/src/metrics/web-vitals/lib/getNavigationEntry.ts","../node_modules/@sentry-internal/browser-utils/src/metrics/web-vitals/lib/getActivationStart.ts","../node_modules/@sentry-internal/browser-utils/src/metrics/web-vitals/lib/initMetric.ts","../node_modules/@sentry-internal/browser-utils/src/metrics/web-vitals/lib/generateUniqueID.ts","../node_modules/@sentry-internal/browser-utils/src/metrics/web-vitals/lib/observe.ts","../node_modules/@sentry-internal/browser-utils/src/metrics/web-vitals/lib/onHidden.ts","../node_modules/@sentry-internal/browser-utils/src/metrics/web-vitals/lib/runOnce.ts","../node_modules/@sentry-internal/browser-utils/src/metrics/web-vitals/lib/getVisibilityWatcher.ts","../node_modules/@sentry-internal/browser-utils/src/metrics/web-vitals/lib/whenActivated.ts","../node_modules/@sentry-internal/browser-utils/src/metrics/web-vitals/onFCP.ts","../node_modules/@sentry-internal/browser-utils/src/metrics/web-vitals/getCLS.ts","../node_modules/@sentry-internal/browser-utils/src/metrics/web-vitals/getFID.ts","../node_modules/@sentry-internal/browser-utils/src/metrics/web-vitals/lib/polyfills/interactionCountPolyfill.ts","../node_modules/@sentry-internal/browser-utils/src/metrics/web-vitals/getINP.ts","../node_modules/@sentry-internal/browser-utils/src/metrics/web-vitals/getLCP.ts","../node_modules/@sentry-internal/browser-utils/src/metrics/instrument.ts","../node_modules/@sentry-internal/replay/src/constants.ts","../node_modules/node_modules/@sentry-internal/rrweb/es/rrweb/packages/rrweb-snapshot/es/rrweb-snapshot.js","../node_modules/node_modules/@sentry-internal/rrweb/es/rrweb/packages/rrweb/src/utils.js","../node_modules/@sentry-internal/replay/node_modules/@sentry/utils/src/buildPolyfills/_nullishCoalesce.ts","../node_modules/node_modules/@sentry-internal/rrweb/es/rrweb/packages/types/dist/rrweb-types.js","../node_modules/node_modules/@sentry-internal/rrweb/es/rrweb/packages/rrweb/src/record/mutation.js","../node_modules/node_modules/@sentry-internal/rrweb/es/rrweb/packages/rrweb/src/record/error-handler.js","../node_modules/node_modules/@sentry-internal/rrweb/es/rrweb/packages/rrweb/src/record/observer.js","../node_modules/node_modules/@sentry-internal/rrweb/es/rrweb/packages/rrweb/src/record/cross-origin-iframe-mirror.js","../node_modules/node_modules/@sentry-internal/rrweb/es/rrweb/packages/rrweb/src/record/iframe-manager.js","../node_modules/node_modules/@sentry-internal/rrweb/es/rrweb/packages/rrweb/src/record/shadow-dom-manager.js","../node_modules/node_modules/@sentry-internal/rrweb/es/rrweb/packages/rrweb/src/record/observers/canvas/canvas-manager.js","../node_modules/node_modules/@sentry-internal/rrweb/es/rrweb/packages/rrweb/src/record/stylesheet-manager.js","../node_modules/node_modules/@sentry-internal/rrweb/es/rrweb/packages/rrweb/src/record/processed-node-manager.js","../node_modules/node_modules/@sentry-internal/rrweb/es/rrweb/packages/rrweb/src/record/index.js","../node_modules/@sentry-internal/replay/src/debug-build.ts","../node_modules/@sentry-internal/replay/src/util/logger.ts","../node_modules/@sentry-internal/replay/node_modules/@sentry/core/src/exports.ts","../node_modules/@sentry-internal/replay/src/types/rrweb.ts","../node_modules/@sentry-internal/replay/src/util/timestamp.ts","../node_modules/@sentry-internal/replay/src/coreHandlers/util/addBreadcrumbEvent.ts","../node_modules/@sentry-internal/replay/src/coreHandlers/util/domUtils.ts","../node_modules/@sentry-internal/replay/src/coreHandlers/util/onWindowOpen.ts","../node_modules/@sentry-internal/replay/src/coreHandlers/handleClick.ts","../node_modules/@sentry-internal/replay/src/util/createBreadcrumb.ts","../node_modules/node_modules/@sentry-internal/rrweb-snapshot/es/rrweb-snapshot.js","../node_modules/@sentry-internal/replay/src/coreHandlers/util/getAttributesToRecord.ts","../node_modules/@sentry-internal/replay/src/coreHandlers/handleDom.ts","../node_modules/@sentry-internal/replay/src/coreHandlers/handleKeyboardEvent.ts","../node_modules/@sentry-internal/replay/src/util/createPerformanceEntries.ts","../node_modules/@sentry-internal/replay/src/coreHandlers/performanceObserver.ts","../node_modules/@sentry-internal/replay-worker/build/esm/worker.ts","../node_modules/@sentry-internal/replay/src/eventBuffer/error.ts","../node_modules/@sentry-internal/replay/src/eventBuffer/EventBufferArray.ts","../node_modules/@sentry-internal/replay/src/eventBuffer/WorkerHandler.ts","../node_modules/@sentry-internal/replay/src/eventBuffer/EventBufferCompressionWorker.ts","../node_modules/@sentry-internal/replay/src/eventBuffer/EventBufferProxy.ts","../node_modules/@sentry-internal/replay/src/eventBuffer/index.ts","../node_modules/@sentry-internal/replay-worker/build/esm/index.js","../node_modules/@sentry-internal/replay/src/util/hasSessionStorage.ts","../node_modules/@sentry-internal/replay/src/session/clearSession.ts","../node_modules/@sentry-internal/replay/src/util/isSampled.ts","../node_modules/@sentry-internal/replay/src/session/Session.ts","../node_modules/@sentry-internal/replay/src/session/saveSession.ts","../node_modules/@sentry-internal/replay/src/session/createSession.ts","../node_modules/@sentry-internal/replay/src/util/isExpired.ts","../node_modules/@sentry-internal/replay/src/util/isSessionExpired.ts","../node_modules/@sentry-internal/replay/src/session/shouldRefreshSession.ts","../node_modules/@sentry-internal/replay/src/session/loadOrCreateSession.ts","../node_modules/@sentry-internal/replay/src/session/fetchSession.ts","../node_modules/@sentry-internal/replay/src/util/addEvent.ts","../node_modules/@sentry-internal/replay/src/util/eventUtils.ts","../node_modules/@sentry-internal/replay/src/coreHandlers/handleAfterSendEvent.ts","../node_modules/@sentry-internal/replay/src/coreHandlers/handleBeforeSendEvent.ts","../node_modules/@sentry-internal/replay/src/coreHandlers/handleBreadcrumbs.ts","../node_modules/@sentry-internal/replay/src/coreHandlers/handleGlobalEvent.ts","../node_modules/@sentry-internal/replay/src/coreHandlers/util/addFeedbackBreadcrumb.ts","../node_modules/@sentry-internal/replay/src/util/isRrwebError.ts","../node_modules/@sentry-internal/replay/src/coreHandlers/util/shouldSampleForBufferEvent.ts","../node_modules/@sentry-internal/replay/src/util/createPerformanceSpans.ts","../node_modules/@sentry-internal/replay/src/coreHandlers/handleHistory.ts","../node_modules/@sentry-internal/replay/src/coreHandlers/util/addNetworkBreadcrumb.ts","../node_modules/@sentry-internal/replay/src/util/shouldFilterRequest.ts","../node_modules/@sentry-internal/replay/src/coreHandlers/util/networkUtils.ts","../node_modules/@sentry-internal/replay/src/coreHandlers/util/fetchUtils.ts","../node_modules/@sentry-internal/replay/src/coreHandlers/util/xhrUtils.ts","../node_modules/@sentry-internal/replay/src/coreHandlers/handleNetworkBreadcrumbs.ts","../node_modules/@sentry-internal/replay/src/util/addGlobalListeners.ts","../node_modules/@sentry-internal/replay/src/util/addMemoryEntry.ts","../node_modules/@sentry-internal/replay/src/util/handleRecordingEmit.ts","../node_modules/@sentry-internal/replay/src/util/createReplayEnvelope.ts","../node_modules/@sentry-internal/replay/node_modules/@sentry/utils/src/envelope.ts","../node_modules/@sentry-internal/replay/src/util/sendReplayRequest.ts","../node_modules/@sentry-internal/replay/src/util/prepareRecordingData.ts","../node_modules/@sentry-internal/replay/src/util/prepareReplayEvent.ts","../node_modules/@sentry-internal/replay/src/util/sendReplay.ts","../node_modules/@sentry-internal/replay/src/util/throttle.ts","../node_modules/@sentry-internal/replay/src/replay.ts","../node_modules/@sentry-internal/replay/src/util/debounce.ts","../node_modules/@sentry-internal/replay/src/util/getPrivacyOptions.ts","../node_modules/@sentry-internal/replay/src/integration.ts","../node_modules/@sentry-internal/replay/src/util/maskAttribute.ts","../node_modules/@sentry/browser/node_modules/@sentry/core/src/integrations/captureconsole.ts","../node_modules/@sentry/react/node_modules/@sentry/utils/src/worldwide.ts","../node_modules/@sentry/react/node_modules/@sentry/core/src/carrier.ts","../node_modules/@sentry/react/node_modules/@sentry/utils/src/is.ts","../node_modules/@sentry/react/node_modules/@sentry/utils/src/misc.ts","../node_modules/@sentry/react/node_modules/@sentry/utils/src/propagationContext.ts","../node_modules/@sentry/react/node_modules/@sentry/utils/src/time.ts","../node_modules/@sentry/react/node_modules/@sentry/utils/src/debug-build.ts","../node_modules/@sentry/react/node_modules/@sentry/utils/src/logger.ts","../node_modules/@sentry/react/node_modules/@sentry/core/src/session.ts","../node_modules/@sentry/react/node_modules/@sentry/utils/src/object.ts","../node_modules/@sentry/react/node_modules/@sentry/core/src/utils/spanOnScope.ts","../node_modules/@sentry/react/node_modules/@sentry/core/src/scope.ts","../node_modules/@sentry/react/node_modules/@sentry/core/src/asyncContext/stackStrategy.ts","../node_modules/@sentry/react/node_modules/@sentry/core/src/defaultScopes.ts","../node_modules/@sentry/react/node_modules/@sentry/core/src/asyncContext/index.ts","../node_modules/@sentry/react/node_modules/@sentry/core/src/currentScopes.ts","../node_modules/@sentry/react/node_modules/@sentry/core/src/breadcrumbs.ts","../node_modules/@sentry/react/src/redux.ts","../node_modules/@remix-run/router/history.ts","../node_modules/@remix-run/router/utils.ts","../node_modules/@remix-run/router/router.ts","../node_modules/react-router/lib/context.ts","../node_modules/react-router/lib/hooks.tsx","../node_modules/react-router/lib/components.tsx","../node_modules/react-router-dom/dom.ts","../node_modules/react-router-dom/index.tsx","components/copyright.tsx","assets/studioStyles.ts","components/contentNotReady.tsx","components/forgeInitializer.tsx","components/forge/fixes/fixes.js","../node_modules/styled-components/node_modules/stylis/src/Enum.js","../node_modules/styled-components/node_modules/stylis/src/Utility.js","../node_modules/styled-components/node_modules/stylis/src/Tokenizer.js","../node_modules/styled-components/node_modules/stylis/src/Serializer.js","../node_modules/styled-components/node_modules/stylis/src/Prefixer.js","../node_modules/styled-components/node_modules/stylis/src/Middleware.js","../node_modules/styled-components/node_modules/stylis/src/Parser.js","../node_modules/@emotion/unitless/dist/emotion-unitless.esm.js","../node_modules/styled-components/src/constants.ts","../node_modules/styled-components/src/utils/empties.ts","../node_modules/styled-components/src/utils/checkDynamicCreation.ts","../node_modules/styled-components/src/utils/determineTheme.ts","../node_modules/styled-components/src/utils/domElements.ts","../node_modules/styled-components/src/utils/escape.ts","../node_modules/styled-components/src/utils/generateAlphabeticName.ts","../node_modules/styled-components/src/utils/hash.ts","../node_modules/styled-components/src/utils/generateComponentId.ts","../node_modules/styled-components/src/utils/getComponentName.ts","../node_modules/styled-components/src/utils/isTag.ts","../node_modules/styled-components/src/utils/hoist.ts","../node_modules/styled-components/src/utils/isFunction.ts","../node_modules/styled-components/src/utils/isStyledComponent.ts","../node_modules/styled-components/src/utils/joinStrings.ts","../node_modules/styled-components/src/utils/isPlainObject.ts","../node_modules/styled-components/src/utils/mixinDeep.ts","../node_modules/styled-components/src/utils/setToString.ts","../node_modules/styled-components/src/utils/error.ts","../node_modules/styled-components/src/sheet/GroupedTag.ts","../node_modules/styled-components/src/sheet/GroupIDAllocator.ts","../node_modules/styled-components/src/sheet/Rehydration.ts","../node_modules/styled-components/src/utils/nonce.ts","../node_modules/styled-components/src/sheet/dom.ts","../node_modules/styled-components/src/sheet/Tag.ts","../node_modules/styled-components/src/sheet/Sheet.ts","../node_modules/styled-components/src/utils/stylis.ts","../node_modules/styled-components/src/models/StyleSheetManager.tsx","../node_modules/styled-components/src/models/Keyframes.ts","../node_modules/styled-components/src/utils/hyphenateStyleName.ts","../node_modules/styled-components/src/utils/flatten.ts","../node_modules/styled-components/src/utils/addUnitIfNeeded.ts","../node_modules/styled-components/src/utils/isStatelessFunction.ts","../node_modules/styled-components/src/utils/isStaticRules.ts","../node_modules/styled-components/src/models/ComponentStyle.ts","../node_modules/styled-components/src/models/ThemeProvider.tsx","../node_modules/styled-components/src/models/StyledComponent.ts","../node_modules/styled-components/src/utils/generateDisplayName.ts","../node_modules/styled-components/src/utils/interleave.ts","../node_modules/styled-components/src/constructors/css.ts","../node_modules/styled-components/src/constructors/constructWithOptions.ts","../node_modules/styled-components/src/constructors/styled.tsx","../node_modules/styled-components/src/models/GlobalStyle.ts","../node_modules/styled-components/src/constructors/keyframes.ts","../node_modules/styled-components/src/models/ServerStyleSheet.tsx","../node_modules/styled-components/src/base.ts","../node_modules/react-loader-spinner/src/type.ts","../node_modules/react-loader-spinner/src/shared/svg-wrapper.tsx","../node_modules/react-loader-spinner/src/loader/infinity-spin.tsx","../node_modules/react-loader-spinner/src/loader/oval.tsx","../node_modules/react-loader-spinner/src/loader/rotating-lines.tsx","../node_modules/react-loader-spinner/src/loader/triangle.tsx","components/appLoadingSpinner.tsx","components/panelTypesCatalog.tsx","AdminPanelTypesApp.tsx","../node_modules/react-feather/dist/icons/folder.js","assets/projectCardStyles.ts","components/useButtonState.ts","components/projectCard.tsx","../node_modules/react-feather/dist/icons/plus.js","actions/notificationActions.ts","actions/sourceRevitModelsActions.ts","actions/projectsActions.ts","../node_modules/react-feather/dist/icons/search.js","assets/searchBarStyles.tsx","components/searchBar.tsx","components/projectsNavigationBar.tsx","../node_modules/react-feather/dist/icons/log-out.js","actions/profileActions.ts","actions/loginActions.ts","components/studioNavigationBar.tsx","../node_modules/react-feather/dist/icons/info.js","components/projectToolbarControls.tsx","assets/panelSystemTypeStyles.tsx","components/modelSubmitToBidControls.tsx","components/projectSelector.tsx","components/createNewModelFromBidControls.tsx","components/modelToolbarControls.tsx","../node_modules/react-icons/io5/index.mjs","components/engineeringProductionModelToolbarControls.tsx","components/studioToolbarHeader.tsx","components/studioToolbar.tsx","assets/inputTextStyles.ts","components/inputText.tsx","assets/projectEditorFieldStyle.ts","components/projectProperty.tsx","components/projectPropertyPreview.tsx","components/inputTextArea.tsx","components/projectEditorField.tsx","components/projectEditorAutocompleteField.tsx","../node_modules/get-user-locale/dist/esm/index.js","../node_modules/@wojtekmaj/date-utils/dist/esm/index.js","../node_modules/react-calendar/dist/esm/shared/const.js","../node_modules/react-calendar/dist/esm/shared/dateFormatter.js","../node_modules/react-calendar/dist/esm/shared/dates.js","../node_modules/react-calendar/dist/esm/Calendar/Navigation.js","../node_modules/react-calendar/dist/esm/Flex.js","../node_modules/react-calendar/dist/esm/shared/utils.js","../node_modules/react-calendar/dist/esm/TileGroup.js","../node_modules/react-calendar/dist/esm/Tile.js","../node_modules/react-calendar/dist/esm/CenturyView/Decade.js","../node_modules/react-calendar/dist/esm/CenturyView/Decades.js","../node_modules/react-calendar/dist/esm/CenturyView.js","../node_modules/react-calendar/dist/esm/DecadeView/Year.js","../node_modules/react-calendar/dist/esm/DecadeView/Years.js","../node_modules/react-calendar/dist/esm/DecadeView.js","../node_modules/react-calendar/dist/esm/YearView/Month.js","../node_modules/react-calendar/dist/esm/YearView/Months.js","../node_modules/react-calendar/dist/esm/YearView.js","../node_modules/react-calendar/dist/esm/MonthView/Day.js","../node_modules/react-calendar/dist/esm/MonthView/Days.js","../node_modules/react-calendar/dist/esm/MonthView/Weekdays.js","../node_modules/react-calendar/dist/esm/MonthView/WeekNumber.js","../node_modules/react-calendar/dist/esm/MonthView/WeekNumbers.js","../node_modules/react-calendar/dist/esm/MonthView.js","../node_modules/react-calendar/dist/esm/Calendar.js","../node_modules/react-calendar/dist/esm/index.js","../node_modules/react-feather/dist/icons/calendar.js","components/calendarEditorField.tsx","../node_modules/react-feather/dist/icons/user.js","../node_modules/react-feather/dist/icons/home.js","../node_modules/react-feather/dist/icons/map-pin.js","../node_modules/react-feather/dist/icons/message-square.js","../node_modules/react-feather/dist/icons/percent.js","../node_modules/react-feather/dist/icons/layout.js","assets/icons/engine.tsx","components/projectSystemType.tsx","components/projectSystemEditorField.tsx","../node_modules/react-feather/dist/icons/code.js","components/igu/iguProperty.tsx","components/igu/iguWindowProfileSwitcher.tsx","components/igu/projectWindowsIGUPreferences.tsx","components/forge/insulatedGlassUnit.ts","components/igu/iguPrice.tsx","components/igu/iguTitle.tsx","components/igu/iguItemOperation.tsx","components/igu/iguItemOperationHeader.tsx","components/igu/iguItemOperationsList.tsx","components/igu/iguItem.tsx","components/igu/windowIguListSelection.tsx","components/projectWindowsIGUPreferencesDialog.tsx","actions/uploadModelActions.ts","assets/modelsNavigationBarStyles.ts","assets/addModelStyles.ts","components/addModel.tsx","assets/modalWindowStyles.ts","components/modalWindow.tsx","assets/modelInfoStyles.ts","assets/optionSwitcherStyles.ts","../node_modules/@mui/material/Unstable_TrapFocus/FocusTrap.js","../node_modules/@mui/material/Fade/Fade.js","../node_modules/@mui/material/Backdrop/backdropClasses.js","../node_modules/@mui/material/Backdrop/Backdrop.js","../node_modules/@mui/utils/esm/getScrollbarSize/getScrollbarSize.js","../node_modules/@mui/material/Modal/ModalManager.js","../node_modules/@mui/material/Modal/useModal.js","../node_modules/@mui/material/Modal/modalClasses.js","../node_modules/@mui/material/Modal/Modal.js","../node_modules/@mui/material/styles/getOverlayAlpha.js","../node_modules/@mui/material/Paper/paperClasses.js","../node_modules/@mui/material/Paper/Paper.js","../node_modules/@mui/material/Dialog/dialogClasses.js","../node_modules/@mui/material/Dialog/DialogContext.js","../node_modules/@mui/material/Dialog/Dialog.js","components/modelNameEditor.tsx","components/modelDownload.tsx","components/modelInfoDialog.tsx","components/modelUtils.ts","components/optionSwitcher.tsx","components/modelInfoProperty.tsx","components/optionNameEditor.tsx","components/modelInfo.tsx","components/modelsNavigationBar.tsx","components/engineeringProductionModelCard.tsx","components/engineeringProductionModelsNavigationBar.tsx","components/studioProjectPane.tsx","actions/modelsAnalyticsActions.ts","actions/modelSaveCycleActions.ts","components/modelSaveCycle.ts","components/forgeViewer.tsx","components/forge/modelBufferedGeometry.ts","components/forge/viewer-utils/modelBuilderObjectRecreationFix.ts","components/forge/workers/modelsGenerator.ts","../node_modules/@weave-design/rich-text/build/index.es.js","../node_modules/react-flip-move/dist/react-flip-move.es.js","../node_modules/@weave-design/notifications-toast/build/index.es.js","assets/notificationStyles.ts","components/modelSaveFailuresNotifications.tsx","components/modelEditorViewer.tsx","components/forgeHighLodView.tsx","assets/analyticsStyles.ts","assets/analyticsCardStyles.ts","components/analyticsCard.tsx","components/analyticsCardGraph.tsx","components/analyticsTitleCard.tsx","assets/icons/material.tsx","assets/toggleOptionsStyles.ts","components/toggleOptions.tsx","components/analytics.tsx","actions/priceActions.ts","../node_modules/@mui/material/Collapse/collapseClasses.js","../node_modules/@mui/material/Collapse/Collapse.js","../node_modules/@mui/material/Accordion/AccordionContext.js","../node_modules/@mui/material/utils/useSlot.js","../node_modules/@mui/material/Accordion/accordionClasses.js","../node_modules/@mui/material/Accordion/Accordion.js","../node_modules/@mui/material/AccordionDetails/accordionDetailsClasses.js","../node_modules/@mui/material/AccordionDetails/AccordionDetails.js","../node_modules/@mui/material/AccordionSummary/accordionSummaryClasses.js","../node_modules/@mui/material/AccordionSummary/AccordionSummary.js","components/priceBreakdownDialog.tsx","components/studioModelPane.tsx","components/studioEngineeringModelPane.tsx","../node_modules/@mui/material/IconButton/iconButtonClasses.js","../node_modules/@mui/material/IconButton/IconButton.js","../node_modules/@mui/material/TextareaAutosize/TextareaAutosize.js","../node_modules/@mui/material/FormControl/formControlState.js","../node_modules/@mui/system/esm/GlobalStyles/GlobalStyles.js","../node_modules/@mui/material/GlobalStyles/GlobalStyles.js","../node_modules/@mui/material/InputBase/utils.js","../node_modules/@mui/material/InputBase/inputBaseClasses.js","../node_modules/@mui/material/InputBase/InputBase.js","../node_modules/@mui/material/Input/inputClasses.js","../node_modules/@mui/material/Input/Input.js","../node_modules/@mui/material/FilledInput/filledInputClasses.js","../node_modules/@mui/material/FilledInput/FilledInput.js","../node_modules/@mui/material/OutlinedInput/NotchedOutline.js","../node_modules/@mui/material/OutlinedInput/outlinedInputClasses.js","../node_modules/@mui/material/OutlinedInput/OutlinedInput.js","../node_modules/@mui/material/FormLabel/formLabelClasses.js","../node_modules/@mui/material/FormLabel/FormLabel.js","../node_modules/@mui/material/InputLabel/inputLabelClasses.js","../node_modules/@mui/material/InputLabel/InputLabel.js","../node_modules/@mui/material/FormControl/formControlClasses.js","../node_modules/@mui/material/FormControl/FormControl.js","../node_modules/@mui/material/FormHelperText/formHelperTextClasses.js","../node_modules/@mui/material/FormHelperText/FormHelperText.js","../node_modules/@mui/material/List/ListContext.js","../node_modules/@mui/material/List/listClasses.js","../node_modules/@mui/material/List/List.js","../node_modules/@mui/material/utils/getScrollbarSize.js","../node_modules/@mui/material/MenuList/MenuList.js","../node_modules/@mui/material/Popover/popoverClasses.js","../node_modules/@mui/material/Popover/Popover.js","../node_modules/@mui/material/Menu/menuClasses.js","../node_modules/@mui/material/Menu/Menu.js","../node_modules/@mui/material/NativeSelect/nativeSelectClasses.js","../node_modules/@mui/material/NativeSelect/NativeSelectInput.js","../node_modules/@mui/material/Select/selectClasses.js","../node_modules/@mui/material/Select/SelectInput.js","../node_modules/@mui/material/internal/svg-icons/ArrowDropDown.js","../node_modules/@mui/material/Select/Select.js","../node_modules/@mui/material/TextField/textFieldClasses.js","../node_modules/@mui/material/TextField/TextField.js","components/chat/chatWindow.tsx","components/chat/chat.tsx","components/studio.tsx","assets/loginStyles.ts","components/loginForm.tsx","components/modelPrepareWallsOffsetSelector.tsx","components/uploadForm.tsx","actions/insulatedGlassUnitsActions.ts","components/pluginsDownload.tsx","components/maintenance/onGoingMaintenance.tsx","../node_modules/@weave-design/banner/build/index.es.js","components/maintenance/scheduldedMaintenance.tsx","components/maintenance/appMaintenance.tsx","App.tsx","ProfileLoader.tsx","assets/adminPanelStyles.ts","../node_modules/react-feather/dist/icons/filter.js","components/userRolesConfig.ts","../node_modules/react-feather/dist/icons/trash-2.js","components/admin/usersTable.tsx","../node_modules/@mui/system/esm/createBox.js","../node_modules/@mui/material/Box/boxClasses.js","../node_modules/@mui/material/Box/Box.js","../node_modules/@mui/material/Alert/alertClasses.js","../node_modules/@mui/material/internal/svg-icons/SuccessOutlined.js","../node_modules/@mui/material/internal/svg-icons/ReportProblemOutlined.js","../node_modules/@mui/material/internal/svg-icons/ErrorOutline.js","../node_modules/@mui/material/internal/svg-icons/InfoOutlined.js","../node_modules/@mui/material/internal/svg-icons/Close.js","../node_modules/@mui/material/Alert/Alert.js","../node_modules/@mui/material/DialogTitle/dialogTitleClasses.js","../node_modules/@mui/material/DialogTitle/DialogTitle.js","../node_modules/@mui/material/DialogContent/dialogContentClasses.js","../node_modules/@mui/material/DialogContent/DialogContent.js","../node_modules/@mui/material/DialogActions/dialogActionsClasses.js","../node_modules/@mui/material/DialogActions/DialogActions.js","../node_modules/@mui/material/Button/buttonClasses.js","../node_modules/@mui/material/ButtonGroup/ButtonGroupContext.js","../node_modules/@mui/material/ButtonGroup/ButtonGroupButtonContext.js","../node_modules/@mui/material/Button/Button.js","components/admin/createUserModal.tsx","../node_modules/@mui/system/esm/createStyled.js","../node_modules/@mui/system/esm/styled.js","../node_modules/@mui/system/esm/useThemeProps/useThemeProps.js","../node_modules/@mui/system/esm/useThemeProps/getThemeProps.js","../node_modules/@mui/system/esm/Stack/createStack.js","../node_modules/@mui/material/Stack/Stack.js","../node_modules/@mui/material/FormControlLabel/formControlLabelClasses.js","../node_modules/@mui/material/FormControlLabel/FormControlLabel.js","components/admin/editUserModal.tsx","components/admin/filterPanel.tsx","components/admin/usersWindow.tsx","components/admin/usersStatsTable.tsx","components/admin/statsWindow.tsx","../node_modules/@weave-design/toggle/build/index.es.js","../node_modules/react-google-charts/src/hooks/useLoadGoogleCharts.ts","../node_modules/react-google-charts/src/hooks/useLoadScript.ts","../node_modules/react-google-charts/src/default-props.ts","../node_modules/react-google-charts/src/generate-unique-id.ts","../node_modules/react-google-charts/src/constants.ts","../node_modules/react-google-charts/src/Context.tsx","../node_modules/react-google-charts/src/components/GoogleChartDataTable.tsx","../node_modules/react-google-charts/src/load-data-table-from-spreadsheet.ts","../node_modules/react-google-charts/src/components/GoogleChartEvents.tsx","../node_modules/react-google-charts/src/components/GoogleChart.tsx","../node_modules/react-google-charts/src/ReactGoogleCharts.tsx","../node_modules/react-google-charts/src/types.ts","components/statistics/dailyModelsStatistics.tsx","components/statistics/dailySessionDurationsStatistics.tsx","components/statistics/dailySessionsStatistics.tsx","components/statistics/dailyUsersCreationStatistics.tsx","components/statistics/weeklyModelsStatistics.tsx","components/statistics/weeklySessionDurationsStatistics.tsx","components/statistics/weeklySessionsStatistics.tsx","components/statistics/weeklyUsersCreationStatistics.tsx","components/admin/dashboardWindow.tsx","components/admin/adminPanel.tsx","AdminUsersApp.tsx","ConnectedAdminUsersApp.tsx","index.tsx","../node_modules/@sentry/react/src/sdk.ts","../node_modules/@sentry/react/node_modules/@sentry/core/src/utils/sdkMetadata.ts"],"sourceRoot":"","sourcesContent":["import axios, { AxiosError } from 'axios';\nimport { IActiveUsersStatisticsItem, IApplicationUser, IDailyActiveUsersStatisticsItem, IExtendedUser, IModelStatisticsDailyItem, IModelStatisticsWeeklyItem, ISessionsDailyStatisticsItem, ISessionsWeeklyStatisticsItem, IUserCreationStatisticsDailyItem, IUserCreationStatisticsWeeklyItem, IUserCredentials, IWeeklyActiveUsersStatisticsItem } from './components/appStatistics';\nimport { ICornerPanelSource, ICornerPanelTemplateSource } from './components/forge/cornerPanelSource';\nimport { IInsulatedGlassUnit } from './components/forge/insulatedGlassUnit';\nimport { IModelCorner } from './components/forge/modelCorner';\nimport { AssistPanelsLayoutOptimizationCommand, OptimizePanelsLayoutCommand, IPanelsLayoutOptimizationResults, PanelsLayoutAssistanceResponse } from './components/forge/optimizationDomainEntities';\nimport { IPanelCommentAttachment, IPanelSource, IPanelSourceType, IPanelTemplateSource } from './components/forge/panelSource';\nimport { CreateRevitFacadeModelSharedParametersProfileCommand, FacadeRevitModelStatus, IRevitFacadeModel, IRevitFamiliesGeneratingJob, RevitFacadeModelSharedParametersProfile } from './components/forge/revitFacadeModelDomainEntities';\nimport { SystemSettings } from './components/forge/systemSettings';\nimport { ITeamsChannel, ITeamsSendMessage } from './components/forge/teams';\nimport { IWallFace, IWallWindowSource, IWallWindowTemplateSource, WallWindowType } from './components/forge/wallFace';\nimport { IGeocodeResponse } from './components/maps/geocode';\nimport { AssignLinkedModelCommand, CreateLinkedModelCommand, CreateSourceModelCommand, IEngineeringProductionModel, ILinkedModel, IModel3D, IModel3DVersion, IModelStorageObject, LinkedModelExtension, UploadFileRequest, UploadLinkedModelFileRequest, UploadModelFileRequest } from './components/model3d';\nimport { IMaterial, IModelAnalytics, IModelBom, ITaxes } from './components/modelAnalytics';\nimport { IProject, ICreateUpdateProjectCommand, BasicResponse, BasicItemResponse, BasicItemsResponse, IForgeToken, IApplicationMetadata } from './components/project';\nimport { IUserProfile } from './components/userProfile';\nimport { CreateWindowTypeCommand } from './components/forge/windowsLibraryDomainEntities';\n\nconst AuthorizationHeader = 'Authorization';\nconst unknownFailureMessage = \"Server error. Repeat operation later\";\n\nclass Repository {\n private _accessToken: string | null = null;\n\n async validateAccessToken() {\n const response = await axios.post(\"/api/login/validate\");\n\n return response.data.item;\n }\n\n async loadProfile(): Promise {\n const response = await axios.get(\"/api/login/profile\");\n\n return response.data.item;\n }\n\n async login(userData: { name: string, password: string }): Promise> {\n const formData = new FormData();\n\n formData.append('name', userData.name);\n formData.append('password', userData.password);\n\n const result = await axios.post('/api/login', formData, {\n headers: {\n 'Content-Type': 'multipart/form-data'\n }\n });\n\n return result.data;\n }\n\n async loadModels(projectId: string): Promise> {\n try {\n const result = await axios.get>(`/api/projects/${projectId}/models`);\n\n return result.data;\n } catch (e) {\n if (e instanceof AxiosError && e.response?.data?.message)\n return e.response.data;\n\n return { isSuccess: false, message: unknownFailureMessage, items: null };\n }\n }\n\n async loadEngineerModels(projectId: string): Promise> {\n try {\n const result = await axios.get>(`/api/projects/${projectId}/engineering-models`);\n\n return result.data;\n } catch (e) {\n if (e instanceof AxiosError && e.response?.data?.message)\n return e.response.data;\n\n return { isSuccess: false, message: unknownFailureMessage, items: null };\n }\n }\n\n async loadBidModels(projectId: string): Promise> {\n try {\n const result = await axios.get>(`/api/projects/${projectId}/bid-models`);\n\n return result.data;\n } catch (e) {\n if (e instanceof AxiosError && e.response?.data?.message)\n return e.response.data;\n\n return { isSuccess: false, message: unknownFailureMessage, items: null };\n }\n }\n\n async loadProductionEnginneringModels(projectId: string): Promise> {\n const url = `https://engineering.dextall.com/api/projects/${projectId}/models`;\n\n try {\n const response = await axios.get>(url);\n\n return response.data;\n } catch (e) {\n if (e instanceof AxiosError && e.response?.data?.message)\n return e.response.data;\n\n return { isSuccess: false, message: unknownFailureMessage, items: null };\n }\n }\n\n async removeModel(versionIdentificator: string): Promise {\n const url = `/api/models/${versionIdentificator}`;\n\n const result = await axios({\n url: url,\n method: \"DELETE\"\n });\n\n return result.data;\n }\n\n async removeModelVersion(id: string): Promise {\n const url = `/api/models/${id}/version`;\n\n const result = await axios({\n url: url,\n method: \"DELETE\"\n });\n\n return result.data;\n }\n\n async pinModelVersion(modelId: string, versionId: string, pin: boolean): Promise {\n const response = await axios({\n url: \"/api/models/main-option\",\n method: \"PATCH\",\n data: {\n versionIdentificator: modelId,\n versionId,\n isMainOption: pin\n }\n });\n\n return response.data;\n }\n\n async renameModelVersion(versionId: string, name: string): Promise {\n try {\n const response = await axios.patch(`/api/models/${versionId}/rename`, { name });\n\n return response.data;\n } catch (e) {\n if (e instanceof AxiosError && e.response?.data?.message)\n return e.response.data;\n\n return { isSuccess: false, message: unknownFailureMessage };\n }\n }\n\n async renameModel(modelId: string, name: string): Promise {\n try {\n const response = await axios.patch(`/api/models/${modelId}/rename-model`, { name });\n\n return response.data;\n } catch (e) {\n if (e instanceof AxiosError && e.response?.data?.message)\n return e.response.data;\n\n return { isSuccess: false, message: unknownFailureMessage };\n }\n }\n\n async findModelsByIds(ids: string[]): Promise {\n const response = await axios({\n url: \"/api/models/ids\",\n method: \"POST\",\n data: { ids: ids }\n });\n\n return response.data.items;\n }\n\n async getModelAnalytics(modelId: string): Promise> {\n const response = await axios.get(`/api/models/${modelId}/analytics`);\n\n return response.data;\n }\n\n async getModelDownloadableUrl(modelId: string): Promise> {\n const response = await axios.post>(`/api/models/${modelId}/downloadable`);\n\n return response.data;\n }\n\n async uploadChatFileToBucket(url: string, file: File): Promise {\n await fetch(url, {\n method: \"put\",\n body: file,\n redirect: \"follow\"\n });\n }\n\n async createFileStorage(fileExtension: LinkedModelExtension): Promise> {\n try {\n const response = await axios.post>(`/api/forge/create-storage/${fileExtension}`);\n\n return response.data;\n } catch (e) {\n if (e instanceof AxiosError && e.response?.data?.message)\n return e.response.data;\n\n return { isSuccess: false, message: unknownFailureMessage, item: null };\n }\n }\n\n async uploadFileToBucket(model: UploadFileRequest, fileExtension: LinkedModelExtension): Promise> {\n const createStorageResponse = await this.createFileStorage(fileExtension);\n\n if (!createStorageResponse.isSuccess)\n return createStorageResponse;\n\n const fileName = model.file.name;\n\n try {\n await axios({\n url: createStorageResponse.item.signedUrl,\n method: \"put\",\n data: model.file,\n headers: {\n \"Content-Disposition\": \"attachment; filename=\\\"\" + encodeURIComponent(fileName) + \"\\\"\"\n }\n });\n } catch (e) {\n return { isSuccess: false, message: unknownFailureMessage, item: null };\n }\n\n return createStorageResponse;\n }\n\n async uploadFile(request: UploadModelFileRequest): Promise> {\n const fileName = request.file.name;\n\n const storage = await this.uploadFileToBucket(request, \"rvt\");\n\n if (!storage.isSuccess)\n return storage;\n\n const command: CreateSourceModelCommand = {\n fileName: fileName,\n objectKey: storage.item.objectKey,\n wallsOffset: request.wallsOffset,\n externalWallTypeNameStartsWith: request.externalWallTypeNameStartsWith\n }\n\n try {\n const response = await axios.post>(`/api/models/${request.projectId}`, command);\n\n return response.data;\n } catch (e) {\n if (e instanceof AxiosError && e.response?.data?.message)\n return e.response.data;\n\n return { isSuccess: false, message: unknownFailureMessage, item: null };\n }\n }\n\n async startModelDerivativeProcessing(modelId: string): Promise {\n const url = `/api/models/${modelId}/translate`;\n\n const result = await axios({\n url: url,\n method: \"post\"\n });\n\n return result.data;\n }\n\n async findModelCorners(modelId: string): Promise {\n const url = `/api/models/${modelId}/model-corners`;\n\n const result = await axios.get(url);\n\n return result.data.items;\n }\n\n async findModelWallFaces(modelId: string): Promise {\n const url = `/api/models/${modelId}/model-faces`;\n\n const result = await axios.get(url);\n\n return result.data.items;\n }\n\n async findModelWallWindows(modelId: string): Promise {\n const url = `/api/models/${modelId}/wall-windows`;\n\n const result = await axios.get(url);\n\n return result.data.items;\n }\n\n async getForgeViewerToken(): Promise> {\n try {\n const response = await axios.get>(\"/api/forge/token\")\n\n return response.data;\n } catch (e) {\n if (e instanceof AxiosError && e.response?.data?.message)\n return e.response.data;\n\n return { isSuccess: false, message: unknownFailureMessage, item: null };\n }\n }\n\n async findPanels(modelId: string): Promise {\n const url = `/api/models/${modelId}/wall-panels`;\n\n const result = await axios.get(url);\n\n return result.data.items;\n }\n\n async findPanelsByIds(ids: string[]): Promise> {\n try {\n const response = await axios.post>(\"/api/find-wall-panels-batch\", ids);\n\n return response.data;\n } catch (e) {\n if (e instanceof AxiosError && e.response?.data?.message)\n return e.response.data;\n\n return { isSuccess: false, message: unknownFailureMessage, items: null };\n }\n }\n\n async createNewPanels(modelId: string, panels: IPanelSource[]): Promise {\n const command = {\n panels\n };\n\n try {\n const response = await axios.post(`/api/models/${modelId}/wall-panels`, command);\n\n return response.data;\n } catch (e) {\n if (e instanceof AxiosError && e.response?.data?.message)\n return e.response.data;\n\n return { isSuccess: false, message: unknownFailureMessage };\n }\n }\n\n async updatePanels(modelId: string, panels: IPanelSource[]): Promise {\n const command = {\n panels\n };\n\n try {\n const response = await axios.patch(`/api/models/${modelId}/wall-panels`, command);\n\n return response.data;\n } catch (e) {\n if (e instanceof AxiosError && e.response?.data?.message)\n return e.response.data;\n\n return { isSuccess: false, message: unknownFailureMessage };\n }\n }\n\n async removePanels(modelId: string, panelIds: string[]): Promise {\n const command = {\n ids: panelIds\n }\n\n try {\n const response = await axios({\n url: `/api/models/${modelId}/wall-panels`,\n method: \"DELETE\",\n data: command\n });\n\n return response.data;\n } catch (e) {\n if (e instanceof AxiosError && e.response?.data?.message)\n return e.response.data;\n\n return { isSuccess: false, message: unknownFailureMessage };\n }\n }\n\n async findCornerPanels(modelId: string): Promise {\n const url = `/api/models/${modelId}/wall-corner-panels`;\n\n const result = await axios.get(url);\n\n return result.data.items;\n }\n\n async findCornerPanelsByIds(ids: string[]): Promise> {\n try {\n const response = await axios.post>(\"/api/find-wall-corner-panels-batch\", ids);\n\n return response.data;\n } catch (e) {\n if (e instanceof AxiosError && e.response?.data?.message)\n return e.response.data;\n\n return { isSuccess: false, message: unknownFailureMessage, items: null };\n }\n }\n\n async createNewCornerPanels(modelId: string, corners: ICornerPanelSource[]): Promise {\n const command = {\n corners\n };\n\n try {\n const response = await axios.post(`/api/models/${modelId}/wall-corner-panels`, command);\n\n return response.data;\n } catch (e) {\n if (e instanceof AxiosError && e.response?.data?.message)\n return e.response.data;\n\n return { isSuccess: false, message: unknownFailureMessage };\n }\n }\n\n async updateCornerPanels(modelId: string, corners: ICornerPanelSource[]): Promise {\n const command = {\n corners\n };\n\n try {\n const response = await axios.patch(`/api/models/${modelId}/wall-corner-panels`, command);\n\n return response.data;\n } catch (e) {\n if (e instanceof AxiosError && e.response?.data?.message)\n return e.response.data;\n\n return { isSuccess: false, message: unknownFailureMessage };\n }\n }\n\n async removeCornerPanels(modelId: string, cornerIds: string[]): Promise {\n const command = {\n ids: cornerIds\n };\n\n try {\n const response = await axios({\n url: `/api/models/${modelId}/wall-corner-panels`,\n method: \"DELETE\",\n data: command\n });\n\n return response.data;\n } catch (e) {\n if (e instanceof AxiosError && e.response?.data?.message)\n return e.response.data;\n\n return { isSuccess: false, message: unknownFailureMessage };\n }\n }\n\n async createNewWindows(modelId: string, wallWindows: IWallWindowSource[]): Promise {\n const command = {\n windows: wallWindows\n };\n\n try {\n const response = await axios.post(`/api/models/${modelId}/wall-windows`, command);\n\n return response.data;\n } catch (e) {\n if (e instanceof AxiosError && e.response?.data?.message)\n return e.response.data;\n\n return { isSuccess: false, message: unknownFailureMessage };\n }\n }\n\n async updateWallWindows(modelId: string, wallWindows: IWallWindowSource[]): Promise {\n const command = {\n windows: wallWindows\n };\n\n try {\n const response = await axios.patch(`/api/models/${modelId}/wall-windows`, command);\n\n return response.data;\n } catch (e) {\n if (e instanceof AxiosError && e.response?.data?.message)\n return e.response.data;\n\n return { isSuccess: false, message: unknownFailureMessage };\n }\n }\n\n async removeWallWindows(modelId: string, wallWindowsIds: string[]): Promise {\n const command = {\n ids: wallWindowsIds\n }\n\n try {\n const response = await axios({\n url: `/api/models/${modelId}/wall-windows`,\n method: \"DELETE\",\n data: command\n });\n\n return response.data;\n } catch (e) {\n if (e instanceof AxiosError && e.response?.data?.message)\n return e.response.data;\n\n return { isSuccess: false, message: unknownFailureMessage };\n }\n }\n\n async createSinglePanelType(panelId: string): Promise> {\n try {\n const response = await axios.post(`/api/panels/${panelId}/create-panel-type`);\n\n return response.data;\n } catch (e) {\n if (e instanceof AxiosError && e.response?.data?.message)\n return e.response.data;\n\n return { isSuccess: false, message: unknownFailureMessage, items: null };\n }\n }\n\n async createSingleCornerPanelType(cornerId: string): Promise> {\n try {\n const response = await axios.post>(`/api/corners/${cornerId}/create-panel-type`);\n\n return response.data;\n } catch (e) {\n if (e instanceof AxiosError && e.response?.data?.message)\n return e.response.data;\n\n return { isSuccess: false, message: unknownFailureMessage, items: null };\n }\n }\n\n async createNewModelVersion(modelId: string): Promise> {\n const response = await axios({\n url: `/api/models/${modelId}/create-new-version`,\n method: \"POST\"\n });\n\n return response.data;\n }\n\n async createNewBidModelVersion(modelId: string, targetProjectId: string): Promise {\n try {\n const response = await axios({\n url: `/api/models/${modelId}/create-new-bid-version?targetProjectId=${targetProjectId}`,\n method: \"POST\"\n });\n\n return response.data;\n } catch (e) {\n if (e instanceof AxiosError && e.response?.data?.message)\n return e.response.data;\n\n return { isSuccess: false, message: unknownFailureMessage };\n }\n }\n\n async createNewModelEngineerVersion(modelId: string): Promise> {\n const response = await axios({\n url: `/api/models/${modelId}/create-new-version-engineering`,\n method: \"POST\"\n });\n\n return response.data;\n }\n\n async submitModelToReview(modelId: string): Promise {\n try {\n const response = await axios({\n url: `/api/models/${modelId}/submit`,\n method: \"POST\"\n });\n\n return response.data;\n } catch (e) {\n if (e instanceof AxiosError && e.response?.data?.message)\n return e.response.data;\n\n return { isSuccess: false, message: unknownFailureMessage };\n }\n }\n\n async submitModelToBid(modelId: string): Promise {\n try {\n const response = await axios({\n url: `/api/models/${modelId}/submit-to-bid`,\n method: \"POST\"\n });\n\n return response.data;\n } catch (e) {\n if (e instanceof AxiosError && e.response?.data?.message)\n return e.response.data;\n\n return { isSuccess: false, message: unknownFailureMessage };\n }\n }\n\n async submitModelToApprove(modelId: string, comment: string): Promise {\n const command = {\n comment: comment\n };\n\n const response = await axios({\n url: `/api/models/${modelId}/approve`,\n method: \"POST\",\n data: command\n });\n\n return response.data;\n }\n\n async createChannel(email: string): Promise> {\n const response = await axios({\n url: `/api/channels`,\n method: \"POST\",\n data: { email }\n });\n\n return response.data;\n\n }\n\n async findChannels(): Promise> {\n const response = await axios({\n url: `/api/channels`,\n method: \"GET\"\n });\n\n return response.data;\n }\n\n\n async createChatBlobSignedUrl(userName: string, fileName: string): Promise> {\n const command = {\n Username: userName,\n FileName: fileName\n }\n\n const response = await axios({\n url: \"/api/chat/blob/createSignedUrl\",\n method: \"POST\",\n data: command\n });\n\n return response.data;\n\n }\n\n async sendMessage(channelId: string, message: string): Promise> {\n\n const response = await axios({\n url: `/api/channels/${channelId}/messages/`,\n method: \"POST\",\n data: { message }\n });\n\n return response.data;\n }\n\n async sendMessageAnswer(channelId: string, messageId: string, message: string): Promise> {\n\n const response = await axios({\n url: `/api/channels/${channelId}/messages/${messageId}/replies`,\n method: \"POST\",\n data: { message }\n });\n\n return response.data;\n }\n\n async findMessages(channelId: string, messageId: string): Promise> {\n const response = await axios({\n url: `/api/channels/${channelId}/messages/${messageId}`,\n method: \"GET\"\n });\n\n return response.data;\n }\n\n async findMessagesReplies(channelId: string, messageId: string): Promise> {\n const response = await axios({\n url: `/api/channels/${channelId}/messages/${messageId}/replies`,\n method: \"GET\"\n });\n\n return response.data;\n }\n\n async optimizePanelsLayout(command: OptimizePanelsLayoutCommand, signal?: AbortSignal): Promise {\n const failureResponse: IPanelsLayoutOptimizationResults = { isSuccess: false, panelsLayout: [] };\n\n try {\n const response = await axios.post>(\n \"https://optimizer.dextall.com/optimize/panels-layout\",\n command,\n { signal }\n );\n\n return response.data.isSuccess\n ? response.data.item\n : failureResponse;\n } catch (e) {\n return failureResponse;\n }\n }\n\n async symmetricalPanelsLayout(command: OptimizePanelsLayoutCommand, signal?: AbortSignal): Promise {\n const failureResponse: IPanelsLayoutOptimizationResults = { isSuccess: false, panelsLayout: [] };\n\n try {\n const response = await axios.post>(\n \"https://optimizer.dextall.com/optimize/symmetrical-layout\",\n command,\n { signal }\n );\n\n return response.data.isSuccess\n ? response.data.item\n : failureResponse;\n } catch (e) {\n return failureResponse;\n }\n }\n\n async symmetricalSplitLinesPanelsLayout(command: OptimizePanelsLayoutCommand, signal?: AbortSignal): Promise {\n const failureResponse: IPanelsLayoutOptimizationResults = { isSuccess: false, panelsLayout: [] };\n\n try {\n const response = await axios.post>(\n \"https://optimizer.dextall.com/optimize/symmetrical-split-lines-layout\",\n command,\n { signal }\n );\n\n return response.data.isSuccess\n ? response.data.item\n : failureResponse;\n } catch (e) {\n return failureResponse;\n }\n }\n\n async symmetricalGridLinesPanelsLayout(command: OptimizePanelsLayoutCommand, signal?: AbortSignal): Promise {\n const failureResponse: IPanelsLayoutOptimizationResults = { isSuccess: false, panelsLayout: [] };\n\n try {\n const response = await axios.post>(\n \"https://optimizer.dextall.com/optimize/symmetrical-grid-layout\",\n command,\n { signal }\n );\n\n return response.data.isSuccess\n ? response.data.item\n : failureResponse;\n } catch (e) {\n return failureResponse;\n }\n }\n\n async assistPanelsLayout(command: AssistPanelsLayoutOptimizationCommand): Promise {\n try {\n const response = await axios.post(\n \"https://optimizer.dextall.com/optimize/assist\", command);\n\n return response.data;\n } catch (e: any) {\n if (e.response?.data?.message)\n return e.data;\n\n return { isSuccess: false, message: \"\", items: null, canSkipInvalidZones: false }\n }\n }\n\n async createMissingModelPanelTypes(modelId: string): Promise> {\n try {\n const response = await axios.post>(`/api/models/${modelId}/create-panel-types`);\n\n return response.data;\n } catch (e) {\n if (e instanceof AxiosError && e.response?.data?.message)\n return e.response.data;\n\n return { isSuccess: false, message: unknownFailureMessage, items: null };\n }\n }\n\n async createMissingCornerPanelTypes(modelId: string): Promise> {\n try {\n const response = await axios.post>(`/api/models/${modelId}/create-corner-types`);\n\n return response.data;\n } catch (e) {\n if (e instanceof AxiosError && e.response?.data?.message)\n return e.response.data;\n\n return { isSuccess: false, message: unknownFailureMessage, items: null };\n }\n }\n\n async createMissingRevitFamilies(modelId: string, highResolutionFamilies: boolean): Promise> {\n try {\n const response = await axios.post>(\n \"/api/panel-types/create-model-revit-families\",\n { modelId, highResolutionFamilies },\n );\n\n return response.data;\n } catch (e) {\n if (e instanceof AxiosError && e.response?.data?.message)\n return e.response.data;\n\n return { isSuccess: false, message: unknownFailureMessage, item: null };\n }\n }\n\n async checkModelRevitFamiliesStatus(modelId: string, highResolutionFamilies: boolean): Promise> {\n try {\n const response = await axios.get>(`/api/panel-types/model/${modelId}/status?highRes=${highResolutionFamilies}`);\n\n return response.data;\n } catch (e) {\n if (e instanceof AxiosError && e.response?.data?.message)\n return e.response.data;\n\n return { isSuccess: false, message: unknownFailureMessage, item: null };\n }\n }\n\n async createRevitFacadeModel(modelId: string, sharedParameterProfileId: string | null, highResolutionModel: boolean): Promise> {\n try {\n const response = await axios.post>(\n \"/api/revit-facade-model/create\",\n { modelId, highResolutionModel, sharedParameterProfileId, regenerateIfExists: true },\n );\n\n return response.data;\n } catch (e) {\n if (e instanceof AxiosError && e.response?.data?.message)\n return e.response.data;\n\n return { isSuccess: false, message: unknownFailureMessage, item: null };\n }\n }\n\n async getRevitFacadeModel(modelId: string, highResolutionModel: boolean): Promise> {\n try {\n const resolution = highResolutionModel ? \"high-res\" : \"low-res\";\n\n const response = await axios.get>(`/api/revit-facade-model/${modelId}/${resolution}/status`);\n\n return response.data;\n } catch (e) {\n if (e instanceof AxiosError && e.response?.data?.message)\n return e.response.data;\n\n return { isSuccess: false, message: unknownFailureMessage, item: null };\n }\n }\n\n async getRevitFacadeModelStatus(modelId: string, highResolutionModel: boolean): Promise> {\n try {\n const resolution = highResolutionModel ? \"high-res\" : \"low-res\";\n\n const response = await axios.get>(`/api/revit-facade-model/${modelId}/${resolution}/latest-model-status`);\n\n return response.data;\n } catch (e: any) {\n if (e.response?.data?.message)\n return e.data;\n\n return { isSuccess: false, message: unknownFailureMessage, item: null }\n }\n }\n\n async exposeModelPublicly(facadeModelId: string): Promise {\n const response = await axios.post(`/api/revit-facade-model/${facadeModelId}/expose-publicly`);\n\n return response.data;\n }\n\n async loadProjects(): Promise> {\n try {\n const response = await axios.get>(\"/api/projects\");\n\n return response.data;\n } catch (e) {\n if (e instanceof AxiosError && e.response?.data?.message)\n return e.response.data;\n\n return { isSuccess: false, message: unknownFailureMessage, items: null };\n }\n }\n\n async loadEngineeringProjects(): Promise> {\n try {\n const response = await axios.get>(\"/api/projects/engineering\");\n\n return response.data;\n } catch (e) {\n if (e instanceof AxiosError && e.response?.data?.message)\n return e.response.data;\n\n return { isSuccess: false, message: unknownFailureMessage, items: null };\n }\n }\n\n async loadBidProjects(): Promise> {\n try {\n const response = await axios.get>(\"/api/projects/bid\");\n\n return response.data;\n } catch (e) {\n if (e instanceof AxiosError && e.response?.data?.message)\n return e.response.data;\n\n return { isSuccess: false, message: unknownFailureMessage, items: null };\n }\n }\n\n async createProject(project: IProject): Promise {\n const command: ICreateUpdateProjectCommand = {\n id: project.id,\n name: project.name,\n postalCode: project.postalCode,\n address: project.address,\n number: \"\",\n organizationName: project.organizationName,\n organizationDescription: \"\",\n buildingName: project.buildingName,\n author: project.author,\n margin: project.margin,\n taxRate: project.taxRate,\n duties: project.duties,\n clientName: project.clientName,\n issueDate: this.getIssueDate(project),\n location: project.location ? { ...project.location } : null,\n insulatedGlassUnitValuesPreferences: project.insulatedGlassUnitValuesPreferences,\n selectedInsulatedGlassUnitId: project.selectedInsulatedGlassUnit?.id || null,\n description: project.description,\n systemType: project.systemType\n };\n\n try {\n const response = await axios({\n method: \"POST\",\n url: \"/api/projects\",\n data: command\n });\n\n return response.data;\n } catch (e) {\n if (e instanceof AxiosError && e.response?.data?.message)\n return e.response.data;\n\n return { isSuccess: false, message: unknownFailureMessage };\n }\n }\n\n async updateProject(project: IProject): Promise {\n const command: ICreateUpdateProjectCommand = {\n id: project.id,\n name: project.name,\n postalCode: project.postalCode,\n address: project.address,\n number: \"\",\n organizationName: project.organizationName,\n organizationDescription: \"\",\n buildingName: project.buildingName,\n author: project.author,\n margin: project.margin,\n taxRate: project.taxRate,\n duties: project.duties,\n clientName: project.clientName,\n issueDate: this.getIssueDate(project),\n location: project.location ? { ...project.location } : null,\n insulatedGlassUnitValuesPreferences: project.insulatedGlassUnitValuesPreferences,\n selectedInsulatedGlassUnitId: project.selectedInsulatedGlassUnit?.id || null,\n description: project.description,\n systemType: project.systemType\n };\n\n try {\n const response = await axios({\n method: \"PATCH\",\n url: \"/api/projects\",\n data: command\n });\n\n return response.data;\n } catch (e) {\n if (e instanceof AxiosError && e.response?.data?.message)\n return e.response.data;\n\n return { isSuccess: false, message: unknownFailureMessage };\n }\n }\n\n async removeProject(projectId: string): Promise {\n const response = await axios({\n method: \"DELETE\",\n url: `/api/projects/${projectId}`\n })\n\n return response.data;\n }\n\n async findWindowTemplates(): Promise {\n const response = await axios.get(\"/api/windows/templates\");\n\n return response.data.items;\n }\n\n async findWindowTypes(modelId: string): Promise> {\n try {\n const response = await axios.get>(`/api/model/${modelId}/window-library`);\n\n return response.data;\n } catch (e) {\n if (e instanceof AxiosError && e.response?.data?.message)\n return e.response.data;\n else\n return { isSuccess: false, items: null, message: unknownFailureMessage };\n }\n }\n\n async createWindowType(modelId: string, command: CreateWindowTypeCommand): Promise> {\n try {\n const response = await axios.post>(`/api/model/${modelId}/window-library`, command);\n\n return response.data;\n } catch (e) {\n if (e instanceof AxiosError && e.response?.data?.message)\n return e.response.data;\n else\n return { isSuccess: false, item: null, message: unknownFailureMessage };\n }\n }\n\n async canEditWindowType(modelId: string, windowTypeId: string): Promise> {\n try {\n const response = await axios.get>(`/api/model/${modelId}/window-library/${windowTypeId}/can-edit`);\n\n return response.data;\n } catch (e) {\n if (e instanceof AxiosError && e.response?.data?.message)\n return e.response.data;\n else\n return { isSuccess: false, item: null, message: unknownFailureMessage };\n }\n }\n\n async removeWindowType(windowTypeId: string): Promise {\n try {\n const response = await axios.delete(`/api/window-library/${windowTypeId}/remove`);\n\n return response.data;\n } catch (e) {\n if (e instanceof AxiosError && e.response?.data?.message)\n return e.response.data;\n else\n return { isSuccess: false, message: unknownFailureMessage };\n }\n }\n\n async updateWindowType(modelId: string, windowType: WallWindowType): Promise> {\n try {\n const response = await axios.patch>(`/api/model/${modelId}/window-library`, windowType);\n\n return response.data;\n } catch (e) {\n if (e instanceof AxiosError && e.response?.data?.message)\n return e.response.data;\n else\n return { isSuccess: false, item: null, message: unknownFailureMessage };\n }\n }\n\n async findAddressByCoordinates(latitude: number, longitude: number): Promise> {\n try {\n const response = await axios.post>(\"https://geo.dextall.com/maps/geocode\", { lat: latitude, lng: longitude });\n\n return response.data;\n } catch (e) {\n if (e instanceof AxiosError && e.response?.data?.message) {\n return e.response.data;\n } else {\n return { isSuccess: false, message: \"Failed to get BOM\", item: null }\n }\n }\n }\n\n async autocompleteAddress(address: string): Promise> {\n if (address.length < 5)\n return {\n isSuccess: false,\n item: null,\n message: \"address too short\"\n }\n\n const response = await axios({\n url: \"https://geo.dextall.com/maps/places\",\n method: \"POST\",\n data: { address }\n });\n\n return response.data;\n }\n\n async findAllPanelTypes(): Promise {\n const response = await axios.get(\"/api/types/panels\");\n\n return response.data.items;\n }\n\n async findAllCornerTypes(): Promise {\n const response = await axios.get(\"/api/types/corners\");\n\n return response.data.items;\n }\n\n async findPanelInventorDefinition(id: string): Promise {\n const response = await axios.get(`/api/panel-types-inventor-definition/${id}`);\n\n return response.data;\n }\n\n async findCornerInventorDefinition(id: string): Promise {\n const response = await axios.get(`/api/corner-panel-types-inventor-definition/${id}`);\n\n return response.data;\n }\n\n async findPanelTemplates(modelId: string): Promise {\n const response = await axios.get(`/api/models/${modelId}/panels/templates`);\n\n return response.data.items;\n }\n\n async findCornerTemplates(): Promise {\n const response = await axios.get(\"/api/corners/templates\");\n\n return response.data.items;\n }\n\n async findModelBom(id: string): Promise> {\n try {\n const response = await axios.get>(`https://bom.dextall.com/api/model/${id}/bom`);\n\n return response.data;\n } catch (e) {\n if (e instanceof AxiosError && e.response?.data?.message) {\n return e.response.data;\n } else {\n return { isSuccess: false, message: \"Failed to get BOM\", item: null }\n }\n }\n }\n\n async findModelSystemSettings(id: string): Promise {\n const response = await axios.get>(`/api/models/${id}/system-settings`);\n\n if (!response.data.isSuccess)\n throw new Error(\"Failed to get system settings!\")\n\n return response.data.item;\n }\n\n async getExcelBom(id: string): Promise {\n const response = await axios.get(`https://bom.dextall.com/api/model/${id}/bom-excel`, {\n responseType: \"arraybuffer\"\n });\n\n return response.data;\n }\n\n async getBomPrices(panelTypeId: string): Promise> {\n const response = await axios.get>(`https://bom.dextall.com/api/model/${panelTypeId}/price`);\n\n return response.data\n }\n\n async getTaxesByAddress(postalCode: string): Promise> {\n const response = await axios.get>(\"/api/taxes\");\n\n return response.data\n }\n\n async findPanelTypeBom(panelTypeId: string, metric: boolean): Promise> {\n const response = await axios.get>(\n `https://bom.dextall.com/api/panel-types/${panelTypeId}/bom?system=${metric ? \"metric\" : \"imperial\"}`);\n\n return response.data;\n }\n\n async getExcelPanelTypeBom(panelTypeId: string, metric: boolean): Promise {\n const response = await axios.get(\n `https://bom.dextall.com/api/panel-types/${panelTypeId}/bom-excel?system=${metric ? \"metric\" : \"imperial\"}`,\n { responseType: \"arraybuffer\" });\n\n return response.data;\n }\n\n async findCornerTypeBom(panelTypeId: string, metric: boolean): Promise> {\n const response = await axios.get>(\n `https://bom.dextall.com/api/panel-corner-types/${panelTypeId}/bom?system=${metric ? \"metric\" : \"imperial\"}`);\n\n return response.data;\n }\n\n async getExcelCornerTypeBom(panelTypeId: string, metric: boolean): Promise {\n const response = await axios.get(\n `https://bom.dextall.com/api/panel-corner-types/${panelTypeId}/bom?system=${metric ? \"metric\" : \"imperial\"}`,\n { responseType: \"arraybuffer\" });\n\n return response.data;\n }\n\n async confirmPanelTypeTemplateUsage(templateId: string): Promise {\n const response = await axios.patch(`/api/panels/templates/${templateId}`);\n\n return response.data;\n }\n\n async removePanelTypeTemplate(templateId: string): Promise {\n const response = await axios.delete(`/api/panels/templates/${templateId}`);\n\n return response.data;\n }\n\n async confirmCornerTypeTemplateUsage(templateId: string): Promise {\n const response = await axios.patch(`/api/corners/templates/${templateId}`);\n\n return response.data;\n }\n\n async removeCornerTypeTemplate(templateId: string): Promise {\n const response = await axios.delete(`/api/corners/templates/${templateId}`);\n\n return response.data;\n }\n\n async loadInsulatedGlassUnits(): Promise> {\n const response = await axios.get>(\"/api/insulated-glass-units\");\n\n return response.data;\n }\n\n async findApplicationUsers(): Promise> {\n try {\n const response = await axios.get>(\"/api/users/admin/list\")\n\n return response.data;\n } catch (e) {\n if (e instanceof AxiosError && e.response?.data?.message)\n return e.response.data;\n\n return { isSuccess: false, message: unknownFailureMessage, items: null };\n }\n }\n\n async findExtendedUsers(): Promise> {\n try {\n const response = await axios.get>(\"/api/users/admin/extended-list\")\n\n return response.data;\n } catch (e) {\n if (e instanceof AxiosError && e.response?.data?.message)\n return e.response.data;\n\n return { isSuccess: false, message: unknownFailureMessage, items: null };\n }\n }\n\n async createUser(username: string): Promise> {\n let usernames = [];\n usernames.push(username)\n const command = {\n usernames\n };\n\n const response = await axios({\n url: `/api/users/admin/create`,\n method: \"POST\",\n data: command\n });\n\n return response.data;\n }\n\n async updateUsers(users: IExtendedUser[]): Promise {\n const command = {\n users\n };\n\n const response = await axios({\n url: \"/api/users/admin/update\",\n method: \"PATCH\",\n data: command\n })\n\n return response.data;\n }\n\n async deleteUser(id: string): Promise {\n try {\n const response = await axios.delete(`/api/users/admin/${id}`);\n\n return response.data;\n } catch (e) {\n if (e instanceof AxiosError && e.response?.data?.message)\n return e.response.data;\n\n return { isSuccess: false, message: unknownFailureMessage };\n }\n }\n\n async findSessionsWeeklyStatistics(): Promise> {\n try {\n const response = await axios.get>(\"https://stats.dextall.com/api/statistics/sessions/weekly\");\n\n return response.data;\n } catch (e) {\n if (e instanceof AxiosError && e.response?.data?.message)\n return e.response.data;\n\n return { isSuccess: false, message: unknownFailureMessage, items: null };\n }\n }\n\n async findUserSessionsWeeklyStatistics(userId: string): Promise> {\n try {\n const url = `https://stats.dextall.com/api/statistics/sessions/weekly/${userId}`;\n\n const response = await axios.get>(url);\n\n return response.data;\n } catch (e) {\n if (e instanceof AxiosError && e.response?.data?.message)\n return e.response.data;\n\n return { isSuccess: false, message: unknownFailureMessage, items: null };\n }\n }\n\n async findSessionsDailyStatistics(): Promise> {\n try {\n const response = await axios.get>(\"https://stats.dextall.com/api/statistics/sessions/daily\");\n\n return response.data;\n } catch (e) {\n if (e instanceof AxiosError && e.response?.data?.message)\n return e.response.data;\n\n return { isSuccess: false, message: unknownFailureMessage, items: null };\n }\n }\n\n async findUserSessionsDailyStatistics(userId: string): Promise> {\n try {\n const url = `https://stats.dextall.com/api/statistics/sessions/daily/${userId}`;\n\n const response = await axios.get>(url);\n\n return response.data;\n } catch (e) {\n if (e instanceof AxiosError && e.response?.data?.message)\n return e.response.data;\n\n return { isSuccess: false, message: unknownFailureMessage, items: null };\n }\n }\n\n async findActiveUsersWeeklyStatistics(): Promise> {\n try {\n const response = await axios.get>(\"https://stats.dextall.com/api/statistics/active-users/weekly\");\n\n return response.data;\n } catch (e) {\n if (e instanceof AxiosError && e.response?.data?.message)\n return e.response.data;\n\n return { isSuccess: false, message: unknownFailureMessage, items: null };\n }\n }\n\n async findActiveUsersDailyStatistics(): Promise> {\n try {\n const response = await axios.get>(\"https://stats.dextall.com/api/statistics/active-users/daily\");\n\n return response.data;\n } catch (e) {\n if (e instanceof AxiosError && e.response?.data?.message)\n return e.response.data;\n\n return { isSuccess: false, message: unknownFailureMessage, items: null };\n }\n }\n\n async findModelsCreationWeeklyStatistics(): Promise> {\n try {\n const response = await axios.get>(\"https://stats.dextall.com/api/statistics/model/new-uploads/weekly\");\n\n return response.data;\n } catch (e) {\n if (e instanceof AxiosError && e.response?.data?.message)\n return e.response.data;\n\n return { isSuccess: false, message: unknownFailureMessage, items: null };\n }\n }\n\n async findUserModelsCreationWeeklyStatistics(userId: string): Promise> {\n try {\n const url = `https://stats.dextall.com/api/statistics/model/new-uploads/weekly/${userId}`;\n\n const response = await axios.get>(url);\n\n return response.data;\n } catch (e) {\n if (e instanceof AxiosError && e.response?.data?.message)\n return e.response.data;\n\n return { isSuccess: false, message: unknownFailureMessage, items: null };\n }\n }\n\n async findModelsCreationDailyStatistics(): Promise> {\n try {\n const response = await axios.get>(\"https://stats.dextall.com/api/statistics/model/new-uploads/daily\")\n\n return response.data;\n } catch (e) {\n if (e instanceof AxiosError && e.response?.data?.message)\n return e.response.data;\n\n return { isSuccess: false, message: unknownFailureMessage, items: null };\n }\n }\n\n async findUserModelsCreationDailyStatistics(userId: string): Promise> {\n try {\n const url = `https://stats.dextall.com/api/statistics/model/new-uploads/daily/${userId}`;\n\n const response = await axios.get>(url);\n\n return response.data;\n } catch (e) {\n if (e instanceof AxiosError && e.response?.data?.message)\n return e.response.data;\n\n return { isSuccess: false, message: unknownFailureMessage, items: null };\n }\n }\n\n async findModelVersionsCreationWeeklyStatistics(): Promise> {\n try {\n const response = await axios.get>(\"https://stats.dextall.com/api/statistics/model/new-versions/weekly\");\n\n return response.data;\n } catch (e) {\n if (e instanceof AxiosError && e.response?.data?.message)\n return e.response.data;\n\n return { isSuccess: false, message: unknownFailureMessage, items: null };\n }\n }\n\n async findUserModelVersionsCreationWeeklyStatistics(userId: string): Promise> {\n try {\n const url = `https://stats.dextall.com/api/statistics/model/new-versions/weekly/${userId}`;\n\n const response = await axios.get>(url);\n\n return response.data;\n } catch (e) {\n if (e instanceof AxiosError && e.response?.data?.message)\n return e.response.data;\n\n return { isSuccess: false, message: unknownFailureMessage, items: null };\n }\n }\n\n async findModelVersionsCreationDailyStatistics(): Promise> {\n try {\n const response = await axios.get>(\"https://stats.dextall.com/api/statistics/model/new-versions/daily\")\n\n return response.data;\n } catch (e) {\n if (e instanceof AxiosError && e.response?.data?.message)\n return e.response.data;\n\n return { isSuccess: false, message: unknownFailureMessage, items: null };\n }\n }\n\n async findUserModelVersionsCreationDailyStatistics(userId: string): Promise> {\n try {\n const url = `https://stats.dextall.com/api/statistics/model/new-versions/daily/${userId}`;\n\n const response = await axios.get>(url);\n\n return response.data;\n } catch (e) {\n if (e instanceof AxiosError && e.response?.data?.message)\n return e.response.data;\n\n return { isSuccess: false, message: unknownFailureMessage, items: null };\n }\n }\n\n async findActiveUsersStatistics(): Promise> {\n try {\n const response = await axios.get>(\"https://stats.dextall.com/api/statistics/active-users/content\");\n\n return response.data;\n } catch (e) {\n if (e instanceof AxiosError && e.response?.data?.message)\n return e.response.data;\n\n return { isSuccess: false, message: unknownFailureMessage, items: null };\n }\n }\n\n async findUsersCreationWeeklyStatistics(): Promise> {\n try {\n const response = await axios.get>(\"https://stats.dextall.com/api/statistics/created-users/weekly\");\n\n return response.data;\n } catch (e) {\n if (e instanceof AxiosError && e.response?.data?.message)\n return e.response.data;\n\n return { isSuccess: false, message: unknownFailureMessage, items: null };\n }\n }\n\n async findUsersCreationDailyStatistics(): Promise> {\n try {\n const response = await axios.get>(\"https://stats.dextall.com/api/statistics/created-users/daily\");\n\n return response.data;\n } catch (e) {\n if (e instanceof AxiosError && e.response?.data?.message)\n return e.response.data;\n\n return { isSuccess: false, message: unknownFailureMessage, items: null };\n }\n }\n\n async findModelDemosWeeklyStatistics(): Promise> {\n try {\n const response = await axios.get>(\"https://stats.dextall.com/api/statistics/model-demos/weekly\");\n\n return response.data;\n } catch (e) {\n if (e instanceof AxiosError && e.response?.data?.message)\n return e.response.data;\n\n return { isSuccess: false, message: unknownFailureMessage, items: null };\n }\n }\n\n async findModelDemosDailyStatistics(): Promise> {\n try {\n const response = await axios.get>(\"https://stats.dextall.com/api/statistics/model-demos/daily\")\n\n return response.data;\n } catch (e) {\n if (e instanceof AxiosError && e.response?.data?.message)\n return e.response.data;\n\n return { isSuccess: false, message: unknownFailureMessage, items: null };\n }\n }\n\n async pushModelToEngineeringService(modelId: string): Promise {\n try {\n const response = await axios.post(`/api/models/${modelId}/push-to-engineering`);\n\n return response.data;\n } catch (e) {\n if (e instanceof AxiosError && e.response?.data?.message)\n return e.response.data;\n\n return { isSuccess: false, message: unknownFailureMessage };\n }\n }\n\n async loadApplicationMetadata(): Promise {\n const response = await axios.get(\"/metadata.json\");\n\n return response.data;\n }\n\n async loadUserSharedParametersProfiles(): Promise> {\n try {\n const response = await axios.get>(\"/api/facade-models/shared-parameter-profile\");\n\n return response.data;\n } catch (e) {\n if (e instanceof AxiosError && e.response?.data?.message)\n return e.response.data;\n\n return { isSuccess: false, message: unknownFailureMessage, items: null };\n }\n }\n\n async createUserSharedParametersProfile(command: CreateRevitFacadeModelSharedParametersProfileCommand): Promise> {\n try {\n const response = await axios.post>(\"/api/facade-models/shared-parameter-profile\", command);\n\n return response.data;\n } catch (e) {\n if (e instanceof AxiosError && e.response?.data?.message)\n return e.response.data;\n\n return { isSuccess: false, message: unknownFailureMessage, item: null };\n }\n }\n\n async updateUserSharedParametersProfile(sharedParametersProfile: RevitFacadeModelSharedParametersProfile): Promise {\n try {\n const response = await axios.patch(\"/api/facade-models/shared-parameter-profile\", sharedParametersProfile);\n\n return response.data;\n } catch (e) {\n if (e instanceof AxiosError && e.response?.data?.message)\n return e.response.data;\n\n return { isSuccess: false, message: unknownFailureMessage };\n }\n }\n\n async createLinkedModel(request: UploadLinkedModelFileRequest): Promise> {\n const fileName = request.file.name;\n\n let extension: LinkedModelExtension | undefined = undefined;\n\n if (fileName.toLowerCase().endsWith(\".rvt\"))\n extension = \"rvt\";\n else if (fileName.toLowerCase().endsWith(\".ifc\"))\n extension = \"ifc\";\n\n if (!extension)\n return { isSuccess: false, message: \"Invalid file extension!\", item: null };\n\n const storage = await this.uploadFileToBucket(request, extension);\n\n if (!storage.isSuccess)\n return storage;\n\n const command: CreateLinkedModelCommand = { fileName, objectKey: storage.item.objectKey }\n\n try {\n const response = await axios.post>(`/api/models/${request.modelId}/create-linked-model`, command);\n\n return response.data;\n } catch (e) {\n if (e instanceof AxiosError && e.response?.data?.message)\n return e.response.data;\n\n return { isSuccess: false, message: unknownFailureMessage, item: null };\n }\n }\n\n async findLinkedModels(modelId: string): Promise> {\n try {\n const response = await axios.get>(`/api/models/${modelId}/linked-model`);\n\n return response.data;\n } catch (e) {\n if (e instanceof AxiosError && e.response?.data?.message)\n return e.response.data;\n\n return { isSuccess: false, message: unknownFailureMessage, items: null };\n }\n }\n\n async findLinkedModelsByIds(ids: string[]): Promise> {\n try {\n const response = await axios.post>(\"/api/linked-models/search-by-ids\", { ids });\n\n return response.data;\n } catch (e) {\n if (e instanceof AxiosError && e.response?.data?.message)\n return e.response.data;\n\n return { isSuccess: false, message: unknownFailureMessage, items: null };\n }\n }\n\n async findProjectPrimaryLinkedModels(projectId: string): Promise> {\n try {\n const response = await axios.get>(`/api/projects/${projectId}/primary-linked-models`);\n\n return response.data;\n } catch (e) {\n if (e instanceof AxiosError && e.response?.data?.message)\n return e.response.data;\n\n return { isSuccess: false, message: unknownFailureMessage, items: null };\n }\n }\n\n async assignPrimaryLinkedModel(command: AssignLinkedModelCommand): Promise> {\n try {\n const response = await axios.post>(\"/api/linked-models/assign\", command);\n\n return response.data;\n } catch (e) {\n if (e instanceof AxiosError && e.response?.data?.message)\n return e.response.data;\n\n return { isSuccess: false, message: unknownFailureMessage, item: null };\n }\n }\n\n async removeLinkedModel(id: string): Promise {\n try {\n const response = await axios.delete(`/api/linked-models/${id}`);\n\n return response.data;\n } catch (e) {\n if (e instanceof AxiosError && e.response?.data?.message)\n return e.response.data;\n\n return { isSuccess: false, message: unknownFailureMessage };\n }\n }\n\n async updateLinkedModelOrigin(id: string, origin: THREE.Vector3): Promise {\n try {\n const response = await axios.patch(`/api/linked-models/${id}/origin`, origin);\n\n return response.data;\n } catch (e) {\n if (e instanceof AxiosError && e.response?.data?.message)\n return e.response.data;\n\n return { isSuccess: false, message: unknownFailureMessage };\n }\n }\n\n async uploadCommentAttachment(file: File): Promise> {\n try {\n type CommentStorage = {\n uploadFileUrl: string;\n downloadUrl: string;\n }\n\n const fileName = file.name;\n\n const createStorageResponse = await axios.post>(\"/api/comments/create-attachment-storage\", { fileName });\n\n if (!createStorageResponse.data.isSuccess)\n return {\n isSuccess: false,\n message: createStorageResponse.data.message,\n item: null\n }\n\n const storage = createStorageResponse.data.item;\n\n await axios({\n url: storage.uploadFileUrl,\n method: \"put\",\n data: file,\n headers: {\n \"Content-Disposition\": \"attachment; filename=\\\"\" + encodeURIComponent(fileName) + \"\\\"\"\n }\n });\n\n return {\n isSuccess: true,\n message: null,\n item: {\n downloadUrl: storage.downloadUrl,\n fileName\n }\n };\n } catch (e) {\n if (e instanceof AxiosError && e.response?.data?.message)\n return e.response.data;\n\n return { isSuccess: false, message: unknownFailureMessage, item: null };\n }\n }\n\n getAccessToken(): string | null {\n return this._accessToken;\n }\n\n setAccessToken(value: string) {\n this._accessToken = value;\n axios.defaults.headers.common[AuthorizationHeader] = `Bearer ${value}`;\n }\n\n forgetAccessToken() {\n delete axios.defaults.headers.common[AuthorizationHeader];\n this._accessToken = null;\n }\n\n hasAccessToken() { return !!this._accessToken; }\n\n private getIssueDate = (project: IProject) => {\n if (project.issueDate instanceof Date)\n return project.issueDate.toISOString();\n\n if (typeof project.issueDate === \"string\" && project.issueDate !== \"\")\n return project.issueDate;\n\n return null;\n }\n}\n\nexport default new Repository();","import { getLocalApplicationMetadata } from \"../appMetadata\";\nimport repo from \"../Repository\";\n\nexport type ApplicationTabType = \"project\" | \"model\" | \"engineering-model\"\n\ntype SetActiveTabType = {\n type: \"SET_ACTIVE_TAB\";\n tab: ApplicationTabType;\n}\n\ntype SetFullScreenModeType = {\n type: \"SET_FULL_SCREEN\";\n isInFullScreen: boolean;\n}\n\ntype SetModelInfoVisibilityType = {\n type: \"SET_MODEL_INFO_VISIBILITY\";\n isVisible: boolean;\n}\n\ntype SetAnalyticsVisibilityType = {\n type: \"SET_ANALYTICS_VISIBILITY\";\n isVisible: boolean;\n}\n\nexport type ApplicationUIActionType = SetActiveTabType | SetFullScreenModeType | SetModelInfoVisibilityType | SetAnalyticsVisibilityType;\n\nexport const setActiveTab = (tab: ApplicationTabType): SetActiveTabType => {\n return {\n type: \"SET_ACTIVE_TAB\",\n tab\n }\n}\n\nexport const setFullScreenMode = (isInFullScreen: boolean): SetFullScreenModeType => {\n return {\n type: \"SET_FULL_SCREEN\",\n isInFullScreen\n }\n}\n\nexport const setModelInfoVisibility = (isVisible: boolean): SetModelInfoVisibilityType => {\n return {\n type: \"SET_MODEL_INFO_VISIBILITY\",\n isVisible\n }\n}\n\nexport const setAnalyticsVisibility = (isVisible: boolean): SetAnalyticsVisibilityType => {\n return {\n type: \"SET_ANALYTICS_VISIBILITY\",\n isVisible\n }\n}\n\nexport const validateVersion = () => async () => {\n const localMetadata = getLocalApplicationMetadata();\n\n if (localMetadata.environment === \"development\")\n return;\n\n const applicationMetadata = await repo.loadApplicationMetadata();\n\n if (applicationMetadata.version === localMetadata.version)\n return;\n\n if (caches) {\n const keys = await caches.keys();\n\n for (const key of keys)\n caches.delete(key);\n }\n\n window.location.search = `?r=${Date.now().toString()}`;\n}","type ShowProcessingPaneType = {\n type: \"PROCESSING_PANE_SHOW\";\n visible: boolean;\n title?: string;\n}\n\ntype ReportProcessingProgressType = {\n type: \"PROCESSING_PANE_PROGRESS\";\n message: string;\n}\n\ntype ShowProcessingErrorType = {\n type: \"SET_PROCESSING_FAILURE\";\n title: string;\n message: string;\n}\n\ntype CloseProcessingErrorDialogType = {\n type: \"CLOSE_PROCESSING_FAILURE\"\n}\n\nexport type ProcessingActionType = ShowProcessingPaneType | ReportProcessingProgressType | ShowProcessingErrorType | CloseProcessingErrorDialogType;\n\nexport const showProcessingPane = (visible: boolean, title?: string): ShowProcessingPaneType => {\n return {\n type: \"PROCESSING_PANE_SHOW\",\n visible,\n title\n }\n}\n\nexport const reportProcessingProgress = (message: string): ReportProcessingProgressType => {\n return {\n type: \"PROCESSING_PANE_PROGRESS\",\n message\n }\n}\n\nexport const showProcessingError = (title: string, message: string): ShowProcessingErrorType => {\n return {\n type: \"SET_PROCESSING_FAILURE\",\n title,\n message\n }\n}\n\nexport const closeProcessingErrorDialog = (): CloseProcessingErrorDialogType => {\n return {\n type: \"CLOSE_PROCESSING_FAILURE\"\n }\n}","import { appRootId } from \"./components/shared\";\n\nexport const getLocalApplicationMetadata = () => {\n const appRoot = document.getElementById(appRootId)!;\n\n const environment = appRoot.attributes.getNamedItem(\"data-app_env\")?.value;\n\n const version = appRoot.attributes.getNamedItem(\"data-app_version\")?.value;\n\n const builded = appRoot.attributes.getNamedItem(\"data-app_build\")?.value;\n\n const year = new Date(builded ? parseInt(builded) : Date.now()).getFullYear();\n\n return { environment, version, year };\n}","import React from \"react\"\n\nconst hoveredText: React.CSSProperties = { \n color: \"#304E49\"\n}\n\nconst hoveredButton: React.CSSProperties = {\n boxShadow: \"0 0 0 2px #304E49\",\n};\n\nconst tinyHoveredButton: React.CSSProperties = {\n boxShadow: \"0 0 0 0.5px #304E49\",\n};\n\nconst selectedButton: React.CSSProperties = {\n backgroundColor: \"#b8d5d6d4\",\n color: \"black\",\n boxShadow: \"none\"\n}\n\nconst selectedText: React.CSSProperties = { \n color: \"black\"\n}\n\nexport const buttonStyles = {\n hoveredText,\n hoveredButton,\n tinyHoveredButton,\n selectedButton,\n selectedText\n };","import React from \"react\";\n\ntype Props = {\n colored?: boolean,\n color?: string\n}\n\nexport const AddCopy = ({ colored, color }: Props) => {\n return (\n \n \n \n );\n};\n","import React from \"react\";\n\nexport const Building = ({ color }: { color: string }) => {\n return (\n \n \n \n );\n};\n","import React from \"react\";\n\ntype Props = {\n style?: React.CSSProperties;\n}\n\nexport const Pin = ({ style }: Props) => (\n \n \n \n);\n","import React from \"react\";\n\nexport const Warning = ({ size = 34, color }: { size: number, color: string }) => {\n return (\n \n \n \n \n \n );\n};\n","import React from \"react\";\nimport { colors, icon } from \"../config/colors\";\n\ntype Styles = {\n card: React.CSSProperties;\n cardS: React.CSSProperties;\n icon: React.CSSProperties;\n iconS: React.CSSProperties;\n text: React.CSSProperties;\n textS: React.CSSProperties;\n button: React.CSSProperties;\n pinButton: React.CSSProperties;\n submit: React.CSSProperties;\n}\n\nexport const styles: Styles = {\n card: {\n position: \"relative\",\n display: \"flex\",\n backgroundColor: \"#DDDDDD\",\n width: 110,\n height: 110,\n borderRadius: \"6px\",\n justifyContent: \"center\",\n alignItems: \"center\",\n flexDirection: \"column\",\n margin: \"0 0 0 0\",\n zIndex: 3, \n marginLeft: \"2px\",\n marginTop: \"2px\"\n },\n cardS: {\n backgroundColor: \"#e7e7e7\",\n },\n icon: {\n color: icon.defualt,\n },\n iconS: {\n color: \"#B4B4B4\",\n },\n text: {\n color: \"#959595\",\n paddingTop: \"6px\",\n marginBottom: 6,\n maxWidth: \"110px\",\n overflowX: \"hidden\",\n textOverflow: \"ellipsis\"\n },\n textS: {\n color: colors.textBlack,\n },\n button: {\n position: \"absolute\",\n backgroundColor: colors.formBg,\n top: 10,\n right: 20,\n borderRadius: 3,\n zIndex: 10,\n height: 24,\n },\n pinButton: {\n position: \"absolute\",\n backgroundColor: \"#888888\",\n top: 10,\n right: 50,\n borderRadius: 3,\n zIndex: 10,\n height: 24,\n },\n submit: {\n fontSize: 13,\n backgroundColor: \"#fff\",\n border: \"1px solid #DDDDDD\",\n borderRadius: 11,\n padding: \"2px 10px\",\n height: 22,\n },\n};","import React from \"react\";\n\ntype Styles = {\n container: React.CSSProperties;\n selectedVersion: React.CSSProperties;\n input: React.CSSProperties;\n content: React.CSSProperties;\n editButton: React.CSSProperties;\n errorMessage: React.CSSProperties;\n ellipsisStyle: React.CSSProperties;\n textContainerStyle: React.CSSProperties;\n}\n\nexport const styles: Styles = {\n container: {\n marginBottom: 6,\n justifyContent: \"space-between\",\n width: \"100%\",\n padding: \"8px\",\n border: \"1px solid #fff\",\n borderRadius: 8,\n cursor: \"pointer\",\n boxSizing: \"border-box\",\n display: \"flex\",\n flexFlow: \"row\"\n },\n selectedVersion: {\n border: \"1px solid #DDDDDD\",\n backgroundColor: \"#F7F7F7\",\n borderRadius: 8,\n },\n input: {\n border: \"none\",\n borderRadius: \"unset\",\n padding: 0,\n top: 25,\n fontSize: \"14px\",\n boxSizing: \"border-box\",\n width: \"100%\",\n },\n content: {\n fontSize: \"13px\",\n display: \"flex\",\n flexDirection: \"row\",\n alignItems: \"baseline\",\n justifyContent: \"left\",\n },\n editButton: {\n marginLeft: 8,\n marginRight: 5\n },\n errorMessage: {\n color: 'red',\n fontSize: '0.8rem',\n marginTop: '0.5rem'\n },\n ellipsisStyle: {\n overflow: 'hidden',\n whiteSpace: 'nowrap',\n textOverflow: 'ellipsis',\n },\n textContainerStyle: {\n maxWidth: '150px',\n overflow: 'hidden',\n whiteSpace: 'nowrap',\n textOverflow: 'ellipsis',\n }\n\n};\n\nexport default styles;\n","import React from \"react\"\nimport { colors } from \"../config/colors\";\nimport { card } from \"../config/colors\";\n\nconst folderContainer: React.CSSProperties = {\n paddingTop: \"2px\",\n paddingRight: \"2px\",\n paddingLeft: \"2px\",\n display: \"flex\",\n flexDirection: \"column\",\n flex: 1,\n};\n\nconst folder: React.CSSProperties = {\n display: \"flex\",\n flexDirection: \"row\",\n justifyContent: \"space-between\",\n flex: 1,\n borderRadius: \"24px 0 24px 24px\",\n backgroundColor: colors.white,\n padding: \"20px\"\n};\n\nconst projectPane: React.CSSProperties = {\n overflowY: \"auto\",\n width: \"100%\",\n maxHeight: \"calc(100vh - 160px)\"\n};\n\nconst dialogContainer: React.CSSProperties = {\n display: \"flex\",\n flex: 1,\n flexDirection: \"row\",\n justifyContent: \"space-between\",\n padding: \"30px\"\n};\n\nconst projectInfo: React.CSSProperties = {\n paddingRight: \"15px\",\n paddingLeft: \"15px\",\n overflow: \"hidden scroll\",\n minWidth: \"360px\",\n};\n\nconst dialogTitle: React.CSSProperties = {\n textAlign: \"center\",\n marginBottom: \"13px\"\n};\n\nconst closeButton: React.CSSProperties = {\n backgroundColor: card.declined,\n padding: \"7px\",\n marginLeft: \"8px\",\n marginRight: \"8px\",\n position: \"absolute\",\n top: \"23px\",\n right: \"5px\"\n};\n\nconst saveButton: React.CSSProperties = {\n backgroundColor: \"#E2FFDD\",\n padding: \"7px\",\n marginLeft: \"8px\",\n color: \"#2D861E\",\n fontSize: \"13px\",\n position: \"absolute\",\n top: \"25px\",\n right: \"50px\"\n};\n\nconst cancelButton: React.CSSProperties = {\n backgroundColor: card.declined,\n padding: \"7px\",\n marginRight: \"3px\",\n position: \"absolute\",\n top: \"25px\",\n right: \"5px\"\n};\n\nconst editButton: React.CSSProperties = {\n backgroundColor: colors.folderTopButton,\n padding: \"10px\",\n marginLeft: \"8px\",\n position: \"absolute\",\n bottom: \"25px\",\n right: \"10px\"\n};\n\nconst modelView: React.CSSProperties = {\n position: \"relative\",\n flex: 1,\n backgroundColor: \"#EBF3FF\",\n height: \"100%\",\n borderRadius: \"18px\",\n};\n\nconst fullscreen: React.CSSProperties = {\n position: \"absolute\",\n width: \"100%\",\n height: \"100vh\",\n top: \"0px\",\n left: \"0px\",\n borderRadius: \"0px\",\n zIndex: 1000,\n};\n\nconst fullscreenButton: React.CSSProperties = {\n backgroundColor: colors.fullscreen,\n position: \"absolute\",\n top: \"2px\",\n left: \"2px\",\n padding: \"8px\",\n zIndex: 5\n};\n\nconst folderTopContainer: React.CSSProperties = {\n display: \"flex\",\n flexDirection: \"row\",\n};\n\nconst folderTop: React.CSSProperties = {\n display: \"flex\",\n flexDirection: \"row\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n flex: 1,\n paddingTop: \"10px\",\n paddingLeft: \"0px\",\n paddingRight: \"20px\",\n height: \"50px\",\n borderRadius: \"24px 24px 0 0\",\n backgroundColor: colors.white,\n alignSelf: \"flex-end\",\n};\n\nconst modelFolderTop: React.CSSProperties = {\n flex: 1,\n paddingTop: \"10px\",\n paddingLeft: \"10px\",\n paddingRight: \"20px\",\n height: \"50px\",\n borderRadius: \"24px 24px 0 0\",\n backgroundColor: colors.white,\n alignSelf: \"flex-end\",\n};\n\nconst topTextContainer: React.CSSProperties = {\n display: \"flex\",\n flexDirection: \"row\",\n alignItems: \"center\",\n marginLeft: \"15px\"\n};\n\nexport const styles = {\n folderContainer,\n folder,\n projectPane,\n dialogContainer,\n projectInfo,\n dialogTitle,\n closeButton,\n saveButton,\n cancelButton,\n editButton,\n modelView,\n fullscreen,\n fullscreenButton,\n folderTopContainer,\n folderTop,\n modelFolderTop,\n topTextContainer\n};\n","import React from \"react\"\n\nconst folderTopSelector: React.CSSProperties = {\n display: \"flex\",\n height: 50,\n flexDirection: \"row\",\n alignSelf: \"flex-start\",\n alignItems: \"center\",\n justifyContent: \"center\",\n marginLeft: 7,\n}\n\nconst logo: React.CSSProperties = {\n width: \"100%\",\n height: 42,\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n marginLeft: 8,\n marginRight: 5\n};\n\nexport const styles = { folderTopSelector, logo };","import React from \"react\";\nimport { colors } from \"../../config/colors\";\n\ntype Props = {\n style?: React.CSSProperties;\n children?: React.ReactNode;\n}\n\nexport const TextBody = ({ children, style }: Props) => {\n return

{children}

;\n};\n\ntype Styles = {\n text: React.CSSProperties;\n}\n\nconst styles: Styles = {\n text: {\n fontSize: \"15px\",\n fontFamily: \"Roboto\",\n lineHeight: \"20px\",\n color: colors.textBlack,\n fontStyle: \"normal\",\n fontWeight: 400,\n },\n};\n","import React from \"react\";\nimport { colors } from \"../../config/colors\";\n\ntype Props = {\n style?: React.CSSProperties;\n children?: React.ReactNode;\n}\n\nexport const TextBody2 = ({ children, style }: Props) => {\n return

{children}

;\n};\n\ntype Styles = {\n text: React.CSSProperties;\n}\n\nconst styles: Styles = {\n text: {\n fontSize: \"13px\",\n fontFamily: \"Roboto\",\n lineHeight: \"20px\",\n color: colors.subheading,\n fontStyle: \"normal\",\n fontWeight: 400,\n },\n};\n","import React from \"react\";\nimport { colors } from \"../../config/colors\";\n\ntype Props = {\n style?: React.CSSProperties;\n children?: React.ReactNode;\n}\n\nexport const TextButton = ({ children, style }: Props) => {\n return (\n

\n {children}\n

\n );\n};\n\ntype Styles = {\n text: React.CSSProperties;\n}\n\nconst styles: Styles = {\n text: {\n fontSize: \"15px\",\n fontFamily: \"Roboto\",\n lineHeight: \"20px\",\n color: colors.textBlack,\n fontStyle: \"normal\",\n fontWeight: 400,\n },\n};\n","import React from \"react\";\nimport { colors } from \"../../config/colors\";\n\ntype Props = {\n style?: React.CSSProperties;\n children?: React.ReactNode;\n}\n\nexport const TextH2 = ({ children, style }: Props) => {\n return

{children}

;\n};\n\nconst styles = {\n text: {\n fontSize: \"24px\",\n fontFamily: \"Roboto\",\n color: colors.textBlack,\n fontStyle: \"normal\",\n fontWeight: 500,\n }\n};\n","import React from \"react\";\nimport { colors } from \"../../config/colors\";\n\ntype Props = {\n style?: React.CSSProperties;\n children?: React.ReactNode;\n}\n\nexport const TextH1 = ({ children, style }: Props) => {\n return

{children}

;\n};\n\ntype Styles = {\n text: React.CSSProperties;\n}\n\nconst styles: Styles = {\n text: {\n fontSize: \"32px\",\n fontFamily: \"Roboto\",\n lineHeight: \"40px\",\n color: colors.textBlack,\n fontStyle: \"normal\",\n fontWeight: 500,\n },\n};\n","import React from \"react\";\nimport { colors } from \"../../config/colors\";\n\ntype Props = {\n style?: React.CSSProperties;\n children?: React.ReactNode;\n}\n\nexport const TextH3 = ({ children, style }: Props) => {\n return

{children}

;\n};\n\nconst styles = {\n text: {\n fontSize: \"17px\",\n fontFamily: \"Roboto\",\n lineHeight: \"24px\",\n color: colors.textBlack,\n fontStyle: \"normal\",\n fontWeight: 500,\n },\n};\n","import React, { useState } from \"react\";\nimport { colors, icon } from \"../../config/colors\";\n\ntype Props = {\n style?: React.CSSProperties;\n children?: React.ReactNode;\n onClick?: () => void;\n}\n\nexport const TagH4 = ({ children, style, onClick }: Props) => {\n const [isShown, setIsShown] = useState(false);\n\n return (\n setIsShown(true)}\n onMouseLeave={() => setIsShown(false)}\n >\n {children}\n \n );\n};\n\ntype Styles = {\n text: React.CSSProperties;\n textH: React.CSSProperties;\n}\n\nconst styles: Styles = {\n text: {\n fontSize: \"17px\",\n fontFamily: \"Roboto\",\n lineHeight: \"20px\",\n color: colors.tag,\n fontStyle: \"normal\",\n fontWeight: 500,\n margin: \"0 0 0 0\",\n padding: \"0 0 0 0\",\n border: \"none\",\n background: \"none\",\n },\n\n textH: {\n fontSize: \"17px\",\n fontFamily: \"Roboto\",\n lineHeight: \"20px\",\n color: icon.selected,\n fontStyle: \"normal\",\n fontWeight: 500,\n margin: \"0 0 0 0\",\n padding: \"0 0 0 0\",\n border: \"none\",\n background: \"none\",\n },\n};\n","import React from \"react\"\nimport { ExternalLink16 } from \"@weave-design/icons\";\nimport { colors } from \"../../config/colors\";\n\ntype Props = {\n title: string;\n url: string;\n}\n\nexport const TagH4ExternalLink = ({ title, url }: Props) => {\n return {title} \n}\n\nconst styles: React.CSSProperties = {\n fontSize: 15,\n fontFamily: \"Roboto\",\n color: colors.black,\n fontStyle: \"normal\",\n fontWeight: 500,\n textDecoration: \"none\",\n margin: \"0 0 0 0\",\n padding: \"0 0 0 0\"\n};","import React from \"react\";\nimport { colors } from \"../../config/colors\";\n\ntype Props = {\n title?: string;\n style?: React.CSSProperties;\n children?: React.ReactNode;\n verticallyLimited?: boolean;\n}\n\nexport const TextH4 = ({ children, style, title, verticallyLimited }: Props) => {\n const className = verticallyLimited\n ? \"unselectable two-lines-textbox\"\n : \"unselectable\";\n\n return (\n

\n {children}\n

\n );\n};\n\nconst styles = {\n text: {\n fontSize: \"15px\",\n fontFamily: \"Roboto\",\n lineHeight: \"20px\",\n color: colors.textBlack,\n fontStyle: \"normal\",\n fontWeight: 500,\n margin: \"0 0 0 0\",\n padding: \"0 0 0 0\",\n },\n};\n","import { Tooltip } from \"@mui/material\";\nimport React from \"react\";\nimport { buttonStyles } from \"../assets/buttonStyles\";\nimport { colors } from \"../config\";\n\ntype Props = {\n title?: string;\n prompt?: string;\n hidden?: boolean;\n style?: React.CSSProperties;\n onClick?: React.MouseEventHandler;\n children?: React.ReactNode;\n colored?: boolean;\n hovered?: boolean;\n handleMouseEnter?: () => void;\n handleMouseLeave?: () => void;\n selected?: boolean;\n handleMouseDown?: () => void;\n handleMouseUp?: () => void;\n}\n\nexport const AppButton = ({ title, prompt, style, children, colored, hovered, selected, hidden, onClick, handleMouseEnter, handleMouseLeave, handleMouseDown, handleMouseUp }: Props) => {\n if (hidden)\n return null;\n\n return (\n \n { handleMouseLeave && handleMouseLeave(); handleMouseUp && handleMouseUp() }}\n onMouseDown={handleMouseDown}\n onMouseUp={handleMouseUp}\n >\n <>\n {title && title}\n {children && children}\n \n \n \n );\n};\n\n\nconst styles = {\n button: {\n backgroundColor: colors.folderTopButton,\n color: colors.tag,\n fontFamily: \"Arial\",\n fontSize: \"15px\",\n lineHeight: \"20px\",\n borderRadius: \"6px\",\n border: \"none\",\n padding: \"5px\",\n display: \"flex\",\n justifyContent: \"center\",\n alignItems: \"center\",\n cursor: \"pointer\"\n },\n};\n","import React from \"react\";\nimport { colors } from \"../config/index\";\n\ntype Props = {\n title?: string;\n style?: React.CSSProperties;\n children?: React.ReactNode;\n onClick?: () => void;\n}\n\nexport const AppTag = ({ title, style, children, onClick }: Props) => {\n return (\n \n {title && title}\n {children && children}\n \n );\n};\n\ntype Styles = {\n button: React.CSSProperties;\n}\n\nconst styles: Styles = {\n button: {\n fontFamily: \"Arial\",\n fontSize: \"13px\",\n fontWeight: 400,\n borderRadius: \"4px\",\n border: \"none\",\n padding: \"4px 10px\",\n backgroundColor: colors.appTag,\n },\n};\n","import React, { Component } from 'react';\nimport Modal from '@weave-design/modal';\nimport Button from '@weave-design/button';\nimport Spacer from '@weave-design/spacer';\nimport merge from \"lodash.merge\";\nimport \"./confirmDialog.css\"\n\nexport interface IConfirmDialogProps {\n title: string;\n isOpened: boolean;\n confirmButtonTitle?: string;\n deleteButtonClassName?: string;\n onCancel: () => void;\n onConfirm: () => void;\n windowStyles?: React.CSSProperties;\n promptContainerStyles?: React.CSSProperties;\n children?: React.ReactNode;\n}\n\nexport class ConfirmDialog extends Component {\n render() {\n const promptContainerStyle: React.CSSProperties = { height: \"116px\", overflowY: \"auto\", ...this.props.promptContainerStyles }\n\n const modalStyles = (styles: any) =>\n merge(styles, {\n modal: {\n window: { width: \"370px\", ...this.props.windowStyles }\n }\n });\n\n return ( this.props.onCancel()}\n stylesheet={modalStyles}>\n <>\n
{this.props.children}
\n \n\n
\n
\n this.props.onConfirm()} />\n
\n\n
\n\n { this.props.onCancel(); }} />\n
\n \n )\n }\n}","import { AutodeskSvfLoader } from \"./svfLoader\";\nimport { loadData } from \"./viewingWithoutCredentialsLoadOperation\";\n\nexport const createLoaderWithoutCredentials = (): Autodesk.Viewing.FileLoaderConstructor => {\n const SvfLoader = Autodesk.Viewing.FileLoaderManager.getFileLoader(\"svf\")!;\n\n return class extends SvfLoader {\n constructor(parent: Autodesk.Viewing.Viewer3D | Autodesk.Viewing.Private.Viewer3DImpl) {\n super(parent);\n }\n\n protected loadSvfCB(path: string, options: Autodesk.Viewing.FileLoaderOptions, onDone: (message: string | null, model?: Autodesk.Viewing.Model | null) => void, onWorkerStart: () => void) {\n loadData(() => super.loadSvfCB(path, options, onDone, onWorkerStart));\n }\n\n protected loadGeometryPack(packId: any, path: any) {\n loadData(() => super.loadGeometryPack(packId, path));\n }\n\n protected loadPropertyDb() {\n loadData(() => super.loadPropertyDb());\n }\n }\n}","export const loadData = (operation: () => void) => {\n Autodesk.Viewing.endpoint.setUseCredentials(false);\n Autodesk.Viewing.setOffline(true);\n const headers = Autodesk.Viewing.endpoint.HTTP_REQUEST_HEADERS;\n\n Autodesk.Viewing.endpoint.HTTP_REQUEST_HEADERS = {};\n\n operation();\n\n Autodesk.Viewing.endpoint.HTTP_REQUEST_HEADERS = headers;\n Autodesk.Viewing.setOffline(false);\n Autodesk.Viewing.endpoint.setUseCredentials(true);\n}","class RalColorsFactory {\n private readonly colors: Map = new Map();\n\n constructor() {\n this.colors.set(\"RAL 1000\", '#BEBD7F');\n this.colors.set(\"RAL 1001\", '#C2B078');\n this.colors.set(\"RAL 1002\", '#C6A664');\n this.colors.set(\"RAL 1003\", '#E5BE01');\n this.colors.set(\"RAL 1004\", '#CDA434');\n this.colors.set(\"RAL 1005\", '#A98307');\n this.colors.set(\"RAL 1006\", '#E4A010');\n this.colors.set(\"RAL 1007\", '#DC9D00');\n this.colors.set(\"RAL 1011\", '#8A6642');\n this.colors.set(\"RAL 1012\", '#C7B446');\n this.colors.set(\"RAL 1013\", '#EAE6CA');\n this.colors.set(\"RAL 1014\", '#E1CC4F');\n this.colors.set(\"RAL 1015\", '#E6D690');\n this.colors.set(\"RAL 1016\", '#EDFF21');\n this.colors.set(\"RAL 1017\", '#F5D033');\n this.colors.set(\"RAL 1018\", '#F8F32B');\n this.colors.set(\"RAL 1019\", '#9E9764');\n this.colors.set(\"RAL 1020\", '#999950');\n this.colors.set(\"RAL 1021\", '#F3DA0B');\n this.colors.set(\"RAL 1023\", '#FAD201');\n this.colors.set(\"RAL 1024\", '#AEA04B');\n this.colors.set(\"RAL 1026\", '#FFFF00');\n this.colors.set(\"RAL 1027\", '#9D9101');\n this.colors.set(\"RAL 1028\", '#F4A900');\n this.colors.set(\"RAL 1032\", '#D6AE01');\n this.colors.set(\"RAL 1033\", '#F3A505');\n this.colors.set(\"RAL 1034\", '#EFA94A');\n this.colors.set(\"RAL 1035\", '#6A5D4D');\n this.colors.set(\"RAL 1036\", '#705335');\n this.colors.set(\"RAL 1037\", '#F39F18');\n this.colors.set(\"RAL 2000\", '#ED760E');\n this.colors.set(\"RAL 2001\", '#C93C20');\n this.colors.set(\"RAL 2002\", '#CB2821');\n this.colors.set(\"RAL 2003\", '#FF7514');\n this.colors.set(\"RAL 2004\", '#F44611');\n this.colors.set(\"RAL 2005\", '#FF2301');\n this.colors.set(\"RAL 2007\", '#FFA420');\n this.colors.set(\"RAL 2008\", '#F75E25');\n this.colors.set(\"RAL 2009\", '#F54021');\n this.colors.set(\"RAL 2010\", '#D84B20');\n this.colors.set(\"RAL 2011\", '#EC7C26');\n this.colors.set(\"RAL 2012\", '#E55137');\n this.colors.set(\"RAL 2013\", '#C35831');\n this.colors.set(\"RAL 3000\", '#AF2B1E');\n this.colors.set(\"RAL 3001\", '#A52019');\n this.colors.set(\"RAL 3002\", '#A2231D');\n this.colors.set(\"RAL 3003\", '#9B111E');\n this.colors.set(\"RAL 3004\", '#75151E');\n this.colors.set(\"RAL 3005\", '#5E2129');\n this.colors.set(\"RAL 3007\", '#412227');\n this.colors.set(\"RAL 3009\", '#642424');\n this.colors.set(\"RAL 3011\", '#781F19');\n this.colors.set(\"RAL 3012\", '#C1876B');\n this.colors.set(\"RAL 3013\", '#A12312');\n this.colors.set(\"RAL 3014\", '#D36E70');\n this.colors.set(\"RAL 3015\", '#EA899A');\n this.colors.set(\"RAL 3016\", '#B32821');\n this.colors.set(\"RAL 3017\", '#E63244');\n this.colors.set(\"RAL 3018\", '#D53032');\n this.colors.set(\"RAL 3020\", '#CC0605');\n this.colors.set(\"RAL 3022\", '#D95030');\n this.colors.set(\"RAL 3024\", '#F80000');\n this.colors.set(\"RAL 3026\", '#FE0000');\n this.colors.set(\"RAL 3027\", '#C51D34');\n this.colors.set(\"RAL 3028\", '#CB3234');\n this.colors.set(\"RAL 3031\", '#B32428');\n this.colors.set(\"RAL 3032\", '#721422');\n this.colors.set(\"RAL 3033\", '#B44C43');\n this.colors.set(\"RAL 4001\", '#6D3F5B');\n this.colors.set(\"RAL 4002\", '#922B3E');\n this.colors.set(\"RAL 4003\", '#DE4C8A');\n this.colors.set(\"RAL 4004\", '#641C34');\n this.colors.set(\"RAL 4005\", '#6C4675');\n this.colors.set(\"RAL 4006\", '#A03472');\n this.colors.set(\"RAL 4007\", '#4A192C');\n this.colors.set(\"RAL 4008\", '#924E7D');\n this.colors.set(\"RAL 4009\", '#A18594');\n this.colors.set(\"RAL 4010\", '#CF3476');\n this.colors.set(\"RAL 4011\", '#8673A1');\n this.colors.set(\"RAL 4012\", '#6C6874');\n this.colors.set(\"RAL 5000\", '#354D73');\n this.colors.set(\"RAL 5001\", '#1F3438');\n this.colors.set(\"RAL 5002\", '#20214F');\n this.colors.set(\"RAL 5003\", '#1D1E33');\n this.colors.set(\"RAL 5004\", '#18171C');\n this.colors.set(\"RAL 5005\", '#1E2460');\n this.colors.set(\"RAL 5007\", '#3E5F8A');\n this.colors.set(\"RAL 5008\", '#26252D');\n this.colors.set(\"RAL 5009\", '#025669');\n this.colors.set(\"RAL 5010\", '#0E294B');\n this.colors.set(\"RAL 5011\", '#231A24');\n this.colors.set(\"RAL 5012\", '#3B83BD');\n this.colors.set(\"RAL 5013\", '#1E213D');\n this.colors.set(\"RAL 5014\", '#606E8C');\n this.colors.set(\"RAL 5015\", '#2271B3');\n this.colors.set(\"RAL 5017\", '#063971');\n this.colors.set(\"RAL 5018\", '#3F888F');\n this.colors.set(\"RAL 5019\", '#1B5583');\n this.colors.set(\"RAL 5020\", '#1D334A');\n this.colors.set(\"RAL 5021\", '#256D7B');\n this.colors.set(\"RAL 5022\", '#252850');\n this.colors.set(\"RAL 5023\", '#49678D');\n this.colors.set(\"RAL 5024\", '#5D9B9B');\n this.colors.set(\"RAL 5025\", '#2A6478');\n this.colors.set(\"RAL 5026\", '#102C54');\n this.colors.set(\"RAL 6000\", '#316650');\n this.colors.set(\"RAL 6001\", '#287233');\n this.colors.set(\"RAL 6002\", '#2D572C');\n this.colors.set(\"RAL 6003\", '#424632');\n this.colors.set(\"RAL 6004\", '#1F3A3D');\n this.colors.set(\"RAL 6005\", '#2F4538');\n this.colors.set(\"RAL 6006\", '#3E3B32');\n this.colors.set(\"RAL 6007\", '#343B29');\n this.colors.set(\"RAL 6008\", '#39352A');\n this.colors.set(\"RAL 6009\", '#31372B');\n this.colors.set(\"RAL 6010\", '#35682D');\n this.colors.set(\"RAL 6011\", '#587246');\n this.colors.set(\"RAL 6012\", '#343E40');\n this.colors.set(\"RAL 6013\", '#6C7156');\n this.colors.set(\"RAL 6014\", '#47402E');\n this.colors.set(\"RAL 6015\", '#3B3C36');\n this.colors.set(\"RAL 6016\", '#1E5945');\n this.colors.set(\"RAL 6017\", '#4C9141');\n this.colors.set(\"RAL 6018\", '#57A639');\n this.colors.set(\"RAL 6019\", '#BDECB6');\n this.colors.set(\"RAL 6020\", '#2E3A23');\n this.colors.set(\"RAL 6021\", '#89AC76');\n this.colors.set(\"RAL 6022\", '#25221B');\n this.colors.set(\"RAL 6024\", '#308446');\n this.colors.set(\"RAL 6025\", '#3D642D');\n this.colors.set(\"RAL 6026\", '#015D52');\n this.colors.set(\"RAL 6027\", '#84C3BE');\n this.colors.set(\"RAL 6028\", '#2C5545');\n this.colors.set(\"RAL 6029\", '#20603D');\n this.colors.set(\"RAL 6032\", '#317F43');\n this.colors.set(\"RAL 6033\", '#497E76');\n this.colors.set(\"RAL 6034\", '#7FB5B5');\n this.colors.set(\"RAL 6035\", '#1C542D');\n this.colors.set(\"RAL 6036\", '#193737');\n this.colors.set(\"RAL 6037\", '#008F39');\n this.colors.set(\"RAL 6038\", '#00BB2D');\n this.colors.set(\"RAL 7000\", '#78858B');\n this.colors.set(\"RAL 7001\", '#8A9597');\n this.colors.set(\"RAL 7002\", '#7E7B52');\n this.colors.set(\"RAL 7003\", '#6C7059');\n this.colors.set(\"RAL 7004\", '#969992');\n this.colors.set(\"RAL 7005\", '#646B63');\n this.colors.set(\"RAL 7006\", '#6D6552');\n this.colors.set(\"RAL 7008\", '#6A5F31');\n this.colors.set(\"RAL 7009\", '#4D5645');\n this.colors.set(\"RAL 7010\", '#4C514A');\n this.colors.set(\"RAL 7011\", '#434B4D');\n this.colors.set(\"RAL 7012\", '#4E5754');\n this.colors.set(\"RAL 7013\", '#464531');\n this.colors.set(\"RAL 7015\", '#434750');\n this.colors.set(\"RAL 7016\", '#293133');\n this.colors.set(\"RAL 7021\", '#23282B');\n this.colors.set(\"RAL 7022\", '#332F2C');\n this.colors.set(\"RAL 7023\", '#686C5E');\n this.colors.set(\"RAL 7024\", '#474A51');\n this.colors.set(\"RAL 7026\", '#2F353B');\n this.colors.set(\"RAL 7030\", '#8B8C7A');\n this.colors.set(\"RAL 7031\", '#474B4E');\n this.colors.set(\"RAL 7032\", '#B8B799');\n this.colors.set(\"RAL 7033\", '#7D8471');\n this.colors.set(\"RAL 7034\", '#8F8B66');\n this.colors.set(\"RAL 7035\", '#CBD0CC');\n this.colors.set(\"RAL 7036\", '#7F7679');\n this.colors.set(\"RAL 7037\", '#7D7F7D');\n this.colors.set(\"RAL 7038\", '#B5B8B1');\n this.colors.set(\"RAL 7039\", '#6C6960');\n this.colors.set(\"RAL 7040\", '#9DA1AA');\n this.colors.set(\"RAL 7042\", '#8D948D');\n this.colors.set(\"RAL 7043\", '#4E5452');\n this.colors.set(\"RAL 7044\", '#CAC4B0');\n this.colors.set(\"RAL 7045\", '#909090');\n this.colors.set(\"RAL 7046\", '#82898F');\n this.colors.set(\"RAL 7047\", '#D0D0D0');\n this.colors.set(\"RAL 7048\", '#898176');\n this.colors.set(\"RAL 8000\", '#826C34');\n this.colors.set(\"RAL 8001\", '#955F20');\n this.colors.set(\"RAL 8002\", '#6C3B2A');\n this.colors.set(\"RAL 8003\", '#734222');\n this.colors.set(\"RAL 8004\", '#8E402A');\n this.colors.set(\"RAL 8007\", '#59351F');\n this.colors.set(\"RAL 8008\", '#6F4F28');\n this.colors.set(\"RAL 8011\", '#5B3A29');\n this.colors.set(\"RAL 8012\", '#592321');\n this.colors.set(\"RAL 8014\", '#382C1E');\n this.colors.set(\"RAL 8015\", '#633A34');\n this.colors.set(\"RAL 8016\", '#4C2F27');\n this.colors.set(\"RAL 8017\", '#45322E');\n this.colors.set(\"RAL 8019\", '#403A3A');\n this.colors.set(\"RAL 8022\", '#212121');\n this.colors.set(\"RAL 8023\", '#A65E2E');\n this.colors.set(\"RAL 8024\", '#79553D');\n this.colors.set(\"RAL 8025\", '#755C48');\n this.colors.set(\"RAL 8028\", '#4E3B31');\n this.colors.set(\"RAL 8029\", '#763C28');\n this.colors.set(\"RAL 9001\", '#FDF4E3');\n this.colors.set(\"RAL 9002\", '#E7EBDA');\n this.colors.set(\"RAL 9003\", '#F4F4F4');\n this.colors.set(\"RAL 9004\", '#282828');\n this.colors.set(\"RAL 9005\", '#0A0A0A');\n this.colors.set(\"RAL 9006\", '#A5A5A5');\n this.colors.set(\"RAL 9007\", '#8F8F8F');\n this.colors.set(\"RAL 9010\", '#FFFFFF');\n this.colors.set(\"RAL 9011\", '#1C1C1C');\n this.colors.set(\"RAL 9016\", '#F6F6F6');\n this.colors.set(\"RAL 9017\", '#1E1E1E');\n this.colors.set(\"RAL 9018\", '#CFD3CD');\n this.colors.set(\"RAL 9022\", '#9C9C9C');\n this.colors.set(\"RAL 9023\", '#828282');\n }\n\n getColorCodes(): string[] {\n return Array.from(this.colors.keys());\n }\n\n getColor(code: string) {\n return this.colors.get(code);\n }\n}\n\nexport default new RalColorsFactory();","export class UserObjectIds {\n private readonly freeIds = new Set();\n private highestId: number = 0;\n\n occupyId(id: number) {\n if (this.highestId < id) {\n for (let i = this.highestId + 1; i <= id; ++i)\n this.freeIds.add(i);\n\n this.highestId = id;\n }\n\n this.freeIds.delete(id);\n }\n\n releaseId(id: number) {\n this.freeIds.add(id);\n }\n\n getNewId() {\n const nextFreeIdResult = this.freeIds.values().next();\n\n if (!nextFreeIdResult.done) {\n const id = nextFreeIdResult.value;\n\n this.freeIds.delete(id);\n\n return id;\n }\n\n const id = this.highestId + 1;\n this.highestId = id;\n\n return id;\n }\n\n reset() {\n this.freeIds.clear();\n this.highestId = 0;\n }\n}\n\nexport type UserUniqueIdObjectPrefix = \"DXP-\" | \"DXC-\" | \"DXW-\";\n\nexport const getPanelUserUniqueIdObjectPrefix = (): UserUniqueIdObjectPrefix => \"DXP-\";\nexport const getCornerUserUniqueIdObjectPrefix = (): UserUniqueIdObjectPrefix => \"DXC-\";\nexport const getWindowUserUniqueIdObjectPrefix = (): UserUniqueIdObjectPrefix => \"DXW-\";\n\nconst panelUserIds = new UserObjectIds();\nconst cornerUserIds = new UserObjectIds();\nconst windowUserIds = new UserObjectIds();\n\nexport default { panelUserIds, cornerUserIds, windowUserIds }","export type Category = \"Walls\" | \"Windows\" | \"Doors\" | \"Levels\";\n\nexport class ViewerModelCategoriesMap {\n private readonly categoriesMap: Map = new Map();\n\n constructor() {\n this.categoriesMap.set(\"Walls\", -2000011);\n this.categoriesMap.set(\"Windows\", -2000014);\n this.categoriesMap.set(\"Levels\", -2000240);\n this.categoriesMap.set(\"Doors\", -2000023);\n }\n\n findCategoryId(category: Category): number | undefined {\n return this.categoriesMap.get(category);\n }\n}\n\nexport class ViewerModelCollector {\n private readonly categoriesMap = new ViewerModelCategoriesMap();\n\n constructor(private readonly model: Autodesk.Viewing.Model) {\n }\n\n findElementsByCategory(category: Category): Promise {\n const categoryId = this.categoriesMap.findCategoryId(category)?.toString();\n\n if (categoryId)\n return this.findElementsByCategoryId(categoryId);\n\n return new Promise((resolve, reject) => {\n this.model.search(category, x => resolve(x), () => reject(), [\"_RC\"], { searchHidden: true });\n });\n }\n\n private findElementsByCategoryId(categoryId: string): Promise {\n return new Promise((resolve, reject) => this.model.search(categoryId, ids => resolve(ids), () => reject(), [\"CategoryId\"], { searchHidden: true }));\n }\n}","import { getLeafNodes } from \"./viewerObjectTreeUtils\"\n\nexport class ViewerModelSelectionLock {\n private readonly viewer: Autodesk.Viewing.Viewer3D;\n private readonly model: Autodesk.Viewing.Model;\n private readonly dbIds: number[];\n private isLocked: boolean;\n\n constructor(viewer: Autodesk.Viewing.Viewer3D, model: Autodesk.Viewing.Model, dbIds: number[]) {\n this.viewer = viewer;\n this.model = model;\n this.dbIds = dbIds;\n this.isLocked = false;\n }\n\n lock() {\n if (this.isLocked)\n return;\n\n this.viewer.lockSelection(this.dbIds, true, this.model);\n this.isLocked = true;\n }\n\n unlock() {\n if (!this.isLocked)\n return;\n\n this.viewer.lockSelection(this.dbIds, false, this.model);\n this.isLocked = false;\n }\n}\n\nexport const createModelSelectionLock = (viewer: Autodesk.Viewing.Viewer3D, model: Autodesk.Viewing.Model) => async () => {\n const leafNodes = await getLeafNodes(model);\n\n return new ViewerModelSelectionLock(viewer, model, leafNodes);\n}","export type ExternalIdsMapping = {\n [key: string]: number;\n}\n\nexport class ViewerModelUtils {\n static isMetric(model: Autodesk.Viewing.Model): boolean {\n const displayUnit = model.getDisplayUnit();\n\n return displayUnit === \"mm\" || displayUnit === \"cm\" || displayUnit === \"m\";\n }\n\n static getExternalIdsMapping(model: Autodesk.Viewing.Model): Promise {\n return new Promise((resolve, reject) => model.getExternalIdMapping(resolve, reject));\n }\n}","export const getLeafNodes = (model: Autodesk.Viewing.Model, dbIds?: number[]): Promise => {\n return new Promise((resolve, reject) => {\n try {\n const instanceTree = model.getInstanceTree()\n\n const nodeIds = dbIds || [instanceTree.getRootId()];\n\n const leafIds: number[] = []\n\n const getLeafNodeIdsRec = (id: number) => {\n let childCount = 0\n\n instanceTree.enumNodeChildren(id, (childId) => {\n getLeafNodeIdsRec(childId)\n ++childCount\n })\n\n if (childCount === 0) {\n leafIds.push(id)\n }\n }\n\n nodeIds.forEach((dbId) => {\n getLeafNodeIdsRec(dbId)\n })\n\n return resolve(leafIds)\n } catch (ex) {\n return reject(ex)\n }\n })\n}\n\nexport const getFragments = (model: Autodesk.Viewing.Model, dbId: number): number[] => {\n const fragments: number[] = [];\n\n const instanceTree = model.getInstanceTree();\n\n instanceTree.enumNodeFragments(dbId, x => {fragments.push(x)});\n\n return fragments;\n}","export const setViewerToolsModality = (viewer: Autodesk.Viewing.GuiViewer3D, toolNames: string[]) => {\n for (const toolName of toolNames) {\n const modality: { [key: string]: boolean } = {};\n\n for (const modalTool of toolNames)\n if (modalTool !== toolName)\n modality[modalTool] = false;\n\n viewer.toolController.setToolModality(toolName, modality);\n }\n}","import { ExternalIdsMapping, ViewerModelUtils } from \"./viewer-utils/viewerModelUtils\";\nimport { IWallFace } from \"./wallFace\";\n\nexport class WallFacesCollection {\n private readonly wallFacesById = new Map();\n private readonly wallFacesByUniqueId = new Map();\n private readonly wallFacesByDbId = new Map();\n private readonly dbIdsByWallFaceId = new Map();\n private hasRemovedWalls = false;\n\n private constructor(private readonly wallFaces: IWallFace[], externalIdsMapping: ExternalIdsMapping) {\n for (const wallFace of wallFaces) {\n this.wallFacesById.set(wallFace.id, wallFace);\n\n const facesByUniqueId = this.wallFacesByUniqueId.get(wallFace.wallUniqueId) || [];\n facesByUniqueId.push(wallFace);\n this.wallFacesByUniqueId.set(wallFace.wallUniqueId, facesByUniqueId);\n\n const dbId = externalIdsMapping[wallFace.wallUniqueId];\n\n if (dbId !== undefined) {\n const facesByDbId = this.wallFacesByDbId.get(dbId) || [];\n facesByDbId.push(wallFace);\n this.wallFacesByDbId.set(dbId, facesByDbId);\n this.dbIdsByWallFaceId.set(wallFace.id, dbId);\n }\n }\n }\n\n static async create(wallFaces: IWallFace[], model: Autodesk.Viewing.Model): Promise {\n const externalIdsMapping = await ViewerModelUtils.getExternalIdsMapping(model);\n\n return new WallFacesCollection(wallFaces, externalIdsMapping);\n }\n\n static createWithoutDbIds(wallFaces: IWallFace[]): WallFacesCollection {\n return new WallFacesCollection(wallFaces, {});\n }\n\n static createEmpty(): WallFacesCollection {\n return new WallFacesCollection([], {});\n }\n\n asArray(): IWallFace[] {\n // for performance reasons: in most cases we don't change the collection after creation\n // so no need to create new arrays each time we're calling this\n return !this.hasRemovedWalls\n ? this.wallFaces\n : Array.from(this.wallFacesById.values());\n }\n\n findById(id: string): IWallFace | undefined {\n return this.wallFacesById.get(id);\n }\n\n findByUniqueId(uniqueId: string): IWallFace[] {\n return this.wallFacesByUniqueId.get(uniqueId) || [];\n }\n\n findByDbId(dbId: number): IWallFace[] {\n return this.wallFacesByDbId.get(dbId) || [];\n }\n\n findWallFaceDbId(id: string): number | undefined {\n return this.dbIdsByWallFaceId.get(id);\n }\n\n findWallFaceDbIdByWallUniqueId(uniqueId: string): number[] {\n return this.findByUniqueId(uniqueId)\n .map(x => this.findWallFaceDbId(x.id))\n .filter((x): x is number => x !== undefined);\n }\n\n getAllDbIds(): number[] {\n return Array.from(this.wallFacesByDbId.keys());\n }\n\n remove(wallFace: IWallFace) {\n if (!this.wallFacesById.delete(wallFace.id))\n return;\n\n this.wallFacesByUniqueId.delete(wallFace.wallUniqueId);\n\n const dbId = this.findWallFaceDbId(wallFace.id);\n\n if (dbId !== undefined) {\n this.wallFacesByDbId.delete(dbId);\n this.dbIdsByWallFaceId.delete(wallFace.id);\n }\n\n this.hasRemovedWalls = true;\n }\n\n isEmpty(): boolean {\n return this.wallFacesById.size === 0;\n }\n\n dispose() {\n this.wallFacesById.clear();\n this.wallFacesByUniqueId.clear();\n this.wallFacesByDbId.clear();\n this.dbIdsByWallFaceId.clear();\n }\n}","import { ForgeAlignmentExtensionLoadOptions, ForgeAlignmentExtensionName } from \"./forge/extensions/forgeAlignmentExtension\";\nimport { ForgeAnalyticsRefreshExtensionLoadOptions, ForgeAnalyticsRefreshExtensionName } from \"./forge/extensions/forgeAnalyticsRefreshExtension\";\nimport { ForgeApplyDesignFromAnotherModelExtensionLoadOptions, ForgeApplyDesignFromAnotherModelExtensionName } from \"./forge/extensions/forgeApplyDesignFromAnotherModelExtension\";\nimport { ForgeApplyTypeToSimilarPanelsExtensionLoadOptions, ForgeApplyTypeToSimilarPanelsExtensionName } from \"./forge/extensions/forgeApplyTypeToSimilarPanelsExtension\";\nimport { ForgeAutomaticalPanelsLayoutAssistantExtensionLoadOptions, ForgeAutomaticalPanelsLayoutAssistantExtensionName } from \"./forge/extensions/forgeAutomaticalPanelsLayoutAssistantExtension\";\nimport { ForgeAutomaticalPanelsLayoutExtensionLoadOptions, ForgeAutomaticalPanelsLayoutExtensionName } from \"./forge/extensions/forgeAutomaticalPanelsLayoutExtension\";\nimport { ForgeBuildingWideChangeExtensionLoadOptions, ForgeBuildingWideChangeExtensionName } from \"./forge/extensions/forgeBuildingWideChangeExtension\";\nimport { ForgeContextMenusExtensionLoadOptions, ForgeContextMenusExtensionName } from \"./forge/extensions/forgeContextMenusExtension\";\nimport { ForgeCornerEditorExtensionLoadOptions, ForgeCornerEditorExtensionName } from \"./forge/extensions/forgeCornerEditorExtension\";\nimport { ForgeHighLodPanelModelsExtensionLoadOptions, ForgeHighLodPanelModelsExtensionName } from \"./forge/extensions/forgeHighLodPanelModelsExtension\";\nimport { ForgeInteractiveBomExtensionLoadOptions, ForgeInteractiveBomExtensionName } from \"./forge/extensions/forgeInteractiveBomExtension\";\nimport { ForgeLinkedModelsExtensionLoadOptions, ForgeLinkedModelsExtensionName } from \"./forge/extensions/forgeLinkedModelsExtension\";\nimport { ForgeModelWarningsControllerExtensionLoadOptions, ForgeModelWarningsControllerExtensionName } from \"./forge/extensions/forgeModelWarningsControllerExtension\";\nimport { ForgePanelCatalogsExtensionLoadOptions, ForgePanelCatalogsExtensionName } from \"./forge/extensions/forgePanelCatalogsExtension\";\nimport { ForgePanelEditorExtensionLoadOptions, ForgePanelEditorExtensionName } from \"./forge/extensions/forgePanelEditorExtension\";\nimport { ForgePanelPreviewExtensionLoadOptions, ForgePanelPreviewExtensionName } from \"./forge/extensions/forgePanelPreviewExtension\";\nimport { ForgePanelsGridEditor2DExtensionLoadOptions, ForgePanelsGridEditor2DExtensionName } from \"./forge/extensions/forgePanelsGridEditor2DExtension\";\nimport { ForgePanelsGridEditorExtensionLoadOptions, ForgePanelsGridEditorExtensionName } from \"./forge/extensions/forgePanelsGridEditorExtension\";\nimport { ForgePanelsLayoutAssistant2DExtensionLoadOptions, ForgePanelsLayoutAssistant2DExtensionName } from \"./forge/extensions/forgePanelsLayoutAssistant2DExtension\";\nimport { ForgePanelsPropertiesExtensionLoadOptions, ForgePanelsPropertiesExtensionName } from \"./forge/extensions/forgePanelsPropertiesExtension\";\nimport { ForgeRevitFacadeModelExtensionLoadOptions, ForgeRevitFacadeModelExtensionName } from \"./forge/extensions/forgeRevitFacadeModelExtension\";\nimport { ForgeSearchElementsByIdExtensionLoadOptions, ForgeSearchElementsByIdExtensionName } from \"./forge/extensions/forgeSearchElementsByIdExtension\";\nimport { ForgeUndoRedoExtensionLoadOptions, ForgeUndoRedoExtensionName } from \"./forge/extensions/forgeUndoRedoExtension\";\nimport { ForgeViewerModeSwitcherExtensionLoadOptions, ForgeViewerModeSwitcherExtensionName } from \"./forge/extensions/forgeViewerModeSwitcherExtension\";\nimport { ForgeWallWindows2dEditorExtensionLoadOptions, ForgeWallWindows2dEditorExtensionName } from \"./forge/extensions/forgeWallWindows2dEditorExtension\";\nimport { ForgeWallsEditorExtensionLoadOptions, ForgeWallsEditorExtensionName } from \"./forge/extensions/forgeWallsEditorExtension\";\nimport { ForgeWallsEditorUndoRedoExtensionLoadOptions, ForgeWallsEditorUndoRedoExtensionName } from \"./forge/extensions/forgeWallsEditorUndoRedoExtension\";\nimport { ForgeWindowsEditorExtensionLoadOptions, ForgeWindowsEditorExtensionName } from \"./forge/extensions/forgeWindowsEditorExtension\";\nimport { ViewerState } from \"./forgeViewer\";\nimport { IModel3DVersion } from \"./model3d\";\nimport { ForgeAtypicalSolutionsListExtensionLoadOptions, ForgeAtypicalSolutionsListExtensionName } from \"./forge/extensions/forgeAtypicalSolutionsListExtension\";\nimport { ForgeTypesManagerExtensionLoadOptions, ForgeTypesManagerExtensionName } from \"./forge/extensions/forgeTypesManagerExtension\";\n\ntype ViewerExtension = { id: TName, loadOptions: TLoadOptions };\n\nexport type LoadingExtension =\n | ViewerExtension\n | ViewerExtension\n | ViewerExtension\n | ViewerExtension\n | ViewerExtension\n | ViewerExtension\n | ViewerExtension\n | ViewerExtension\n | ViewerExtension\n | ViewerExtension\n | ViewerExtension\n | ViewerExtension\n | ViewerExtension\n | ViewerExtension\n | ViewerExtension\n | ViewerExtension\n | ViewerExtension\n | ViewerExtension\n | ViewerExtension\n | ViewerExtension\n | ViewerExtension\n | ViewerExtension\n | ViewerExtension\n | ViewerExtension\n | ViewerExtension\n | ViewerExtension\n | ViewerExtension\n | ViewerExtension\n | ViewerExtension\n | ViewerExtension\ntype Props = {\n selectedModel: IModel3DVersion | null;\n}\n\nexport const loadViewerExtensions = async ({ selectedModel }: Props, viewer: Autodesk.Viewing.GuiViewer3D,\n extensions: LoadingExtension[], urn: string, state: ViewerState) => {\n for (const extension of extensions) {\n await loadViewerExtension(viewer, extension);\n\n if (selectedModel?.urn !== urn || state.shutdownSignaled)\n return;\n }\n}\n\nexport const loadViewerExtension = (viewer: Autodesk.Viewing.Viewer3D, extension: LoadingExtension) => viewer.loadExtension(extension.id, extension.loadOptions);","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport React, { forwardRef } from 'react';\nimport PropTypes from 'prop-types';\nvar ChevronLeft = forwardRef(function (_ref, ref) {\n var _ref$color = _ref.color,\n color = _ref$color === void 0 ? 'currentColor' : _ref$color,\n _ref$size = _ref.size,\n size = _ref$size === void 0 ? 24 : _ref$size,\n rest = _objectWithoutProperties(_ref, [\"color\", \"size\"]);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n ref: ref,\n xmlns: \"http://www.w3.org/2000/svg\",\n width: size,\n height: size,\n viewBox: \"0 0 24 24\",\n fill: \"none\",\n stroke: color,\n strokeWidth: \"2\",\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\"\n }, rest), /*#__PURE__*/React.createElement(\"polyline\", {\n points: \"15 18 9 12 15 6\"\n }));\n});\nChevronLeft.propTypes = {\n color: PropTypes.string,\n size: PropTypes.oneOfType([PropTypes.string, PropTypes.number])\n};\nChevronLeft.displayName = 'ChevronLeft';\nexport default ChevronLeft;","import React from 'react';\nimport { ChevronLeft, ChevronRight } from 'react-feather';\nimport { TextH2 } from '../assets/text/index';\nimport { colors } from \"../config/colors\";\n\ninterface IComponentProperties {\n listLength: number;\n selectedIndex: number;\n setSelectedIndex: (index: number) => void;\n}\n\nexport const ListItemByIndexSelector = ({ listLength, selectedIndex, setSelectedIndex }: IComponentProperties) => {\n const selectPrevious = () => {\n if (selectedIndex > 0)\n setSelectedIndex(selectedIndex - 1);\n }\n\n const selectNext = () => {\n if (selectedIndex < listLength - 1)\n setSelectedIndex(selectedIndex + 1);\n }\n\n if (listLength === 0)\n return (null);\n\n const canMoveLeft = selectedIndex > 0;\n const canMoveRight = selectedIndex < listLength - 1;\n\n const leftColor = canMoveLeft ? colors.black : colors.subheading;\n const rightColor = canMoveRight ? colors.black : colors.subheading;\n\n return (<>\n selectPrevious()} />\n #{selectedIndex + 1}\n selectNext()} />\n )\n}","import React from 'react';\nimport Typography from '@mui/material/Typography';\nimport IconButton from \"@weave-design/icon-button\";\nimport { CloseMUI } from \"@weave-design/icons\";\nimport \"./modalHeader.css\";\n\ninterface IModalHeaderProps {\n title: string;\n onClose?: () => void;\n isCancellable?: boolean;\n icon?: React.ReactNode;\n}\n\nconst ModalHeader: React.FC = ({ title, onClose, isCancellable, icon }) => {\n return (\n
\n
\n
\n {icon}\n \n {title}\n \n
\n {isCancellable &&\n }\n onClick={onClose}\n title=\"\"\n />}\n
\n
\n );\n};\n\nexport default ModalHeader;","import { DextallGeneratorInterop } from \"@dextall/interop\";\nimport { SystemType } from \"./project\";\n\nexport enum ModelTranslationStatus {\n Created = 1,\n\n Ready = 2,\n\n Failed = 3\n}\n\nexport enum ModelWorkflowStatus {\n Draft = 1,\n\n Submitted = 2,\n\n Approved = 3,\n\n Declined = 4,\n\n EngineerDraft = 5,\n\n Bid = 6\n}\n\nexport interface IModel3D {\n id: string;\n name: string;\n originalFileName: string;\n versions: IModel3DVersion[];\n}\n\nexport interface IModel3DVersion {\n id: string;\n fileName: string;\n originalFileName: string;\n urn: string | null;\n status: ModelTranslationStatus;\n workflowStatus: ModelWorkflowStatus;\n systemType: DextallGeneratorInterop.Entities.Inputs.SystemType;\n forgeStatus: string | null;\n forgePercentage: number;\n createdAt: Date;\n versionNumber: number;\n parentVersionNumber: number | null;\n isRetrofitModel: boolean;\n offsetFromWall: number;\n isMainOption: boolean;\n optionName: string | null;\n approvedAt: Date | null;\n comment: string | null;\n wallsOffset: ModelPrepareWallsOffset;\n externalWallTypeNameStartsWith: string | null;\n}\n\nexport interface IModelStorageObject {\n objectKey: string;\n signedUrl: string;\n}\n\nexport interface IEngineeringProductionModel {\n id: string;\n urn: string;\n name: string;\n version: number;\n systemType: SystemType;\n architect: string;\n}\n\nexport enum ModelPrepareWallsOffset {\n None = 0,\n\n Inch1 = 1,\n\n Inch2 = 2,\n\n Inch3 = 3,\n\n Inch4 = 4,\n\n Inch5 = 5,\n\n Inch6 = 6,\n\n Acm = 7\n}\n\nexport type UploadFileRequest = {\n file: File;\n}\n\nexport type ModelPrepareOptions = {\n wallsOffset: ModelPrepareWallsOffset;\n externalWallTypeNameStartsWith: string;\n}\n\nexport type UploadModelFileRequest = UploadFileRequest & ModelPrepareOptions & { projectId: string; }\n\nexport type UploadLinkedModelFileRequest = UploadFileRequest & { modelId: string; }\n\nexport type CreateLinkedModelCommand = {\n fileName: string;\n objectKey: string;\n}\n\nexport type CreateSourceModelCommand = CreateLinkedModelCommand & ModelPrepareOptions;\n\nexport type RevitModelExtension = \"rvt\";\n\nexport type LinkedModelExtension = RevitModelExtension | \"ifc\";\n\nexport interface ILinkedModel {\n id: string;\n fileName: string;\n urn: string;\n status: ModelTranslationStatus;\n origin: THREE.Vector3;\n createdAt: Date;\n translationProgressPercentage: number;\n}\n\nexport type AssignLinkedModelCommand = {\n modelId: string;\n primaryLinkedModelId: string;\n}","import { roundToDecimalSigns } from \"@dextall/shared\";\nimport { IMaterialPrice } from \"./price\";\n\nexport enum DisplayUnits {\n Metric = 1,\n\n Imperial = 2\n}\n\nexport enum DisplayCurrencies {\n Eur = 1,\n Usd = 2\n}\n\nexport interface IModelAnalytics {\n totalWallsArea: number;\n totalWindowsArea: number;\n totalPanelsArea: number;\n panelTypesCount: number;\n cornerTypesCount: number;\n panelsCount: number;\n cornersCount: number;\n opaquePanelsFootage: number;\n windowPanelsFootage: number;\n cornerPanelsFootage: number;\n averageOpaquePanelWidth: number | null;\n averageOpaquePanelHeight: number | null;\n averageWindowPanelWidth: number | null;\n averageWindowPanelHeight: number | null;\n averageCornerPanelWidth: number | null;\n averageCornerPanelHeight: number | null;\n opaquePanelsArea: number;\n windowPanelsArea: number;\n cornerPanelsArea: number;\n atypicalPanelsCount: number;\n atypicalCornerPanelsCount: number;\n atypicalPanelsArea: number;\n atypicalCornerPanelsArea: number;\n colors: IModelAnalyticsColorSummary[];\n displayUnits: DisplayUnits;\n}\n\nexport interface IModelAnalyticsColorSummary {\n color: string;\n totalArea: number;\n}\n\nexport interface IModelBom {\n units: DisplayUnits;\n frameProfile: IModelBomEntity[];\n claddings: IModelBomEntity[];\n outerBoards: IModelBomEntity[];\n innerSheets: IModelBomEntity[];\n}\n\nexport interface IMaterial {\n totalPanelsArea: number;\n totalRate: number;\n bidCosts: IBidCosts;\n prices: IPrice[];\n panelPacking: IPanelPacking;\n cornerPacking: IPanelPacking;\n woodPrice: number;\n screwPrice: number;\n tapePrice: number;\n currency: number;\n}\n\nexport interface ITaxes {\n totalRate: number;\n}\n\nexport interface ICurrencies {\n source: string;\n quotes: IQuote[]\n}\n\nexport interface IQuote {\n eurusd: string;\n}\n\n\nexport interface IPrice {\n id: string;\n category: string;\n group: string;\n units: string;\n quantity: number;\n itemName: string;\n lowPrice: number;\n highPrice: number;\n}\n\nexport interface IPanelPacking {\n boxWidth: number;\n boxLength: number;\n boxHeight: number;\n surfaceArea: number;\n totalContainers: number;\n totalBoxesPerContainer: number;\n hasInvalidPanels: boolean;\n}\n\nexport interface IBidCosts {\n productionPrice: number;\n transportationPrice: number;\n duties: number;\n administrativeCost: number;\n}\n\nexport interface IModelBomEntity {\n partNumber: string;\n quantity: number;\n depth: number;\n height: number;\n width: number;\n length: number;\n thickness: number;\n flatpatternLength: number;\n flatpatternWidth: number;\n flatpatternArea: number;\n totalFlatPatternArea: number;\n materialGroup: string;\n material: string;\n color: string;\n gloss: string;\n elements: IModelBomEntityElement[];\n}\n\nexport interface IModelBomEntityElement {\n id: string;\n partNumber: string;\n}\n\nexport const highPrices = (prices: IPrice[]) => {\n return prices.reduce((acc, elem) => acc + elem.highPrice, 0);\n}\n\nexport const roundToEuro = (price: number, currency: DisplayCurrencies, currencyCoef: number) => {\n const sign = currency === DisplayCurrencies.Eur ? \"€\" : \"$\";\n const priceValue = currency === DisplayCurrencies.Eur ? roundToDecimalSigns(price, 2) : roundToDecimalSigns(price * currencyCoef, 2);\n return `${priceValue} ${sign}`\n}\n\nexport const fullPrice = (materialPrices: IMaterial | null | undefined, margin: number | undefined, duties: number | undefined, taxRate: number | undefined): IMaterialPrice => {\n\n const prices = materialPrices?.prices || [];\n const administrative = materialPrices?.bidCosts.administrativeCost!;\n const totalArea = materialPrices?.totalPanelsArea!;\n const prodPrices = totalArea * materialPrices?.bidCosts.productionPrice!;\n const dutiesPrice = ((prodPrices + highPrices(prices)) * duties! / 100);\n const marginPrice = ((prodPrices + highPrices(prices) + dutiesPrice) * margin! / 100);\n const administrativePrice = ((prodPrices + highPrices(prices) + dutiesPrice + marginPrice) * administrative / 100);\n const transportationPanelsPrice = materialPrices?.panelPacking.totalContainers! * materialPrices?.bidCosts.transportationPrice!;\n const transportationCornerPrice = materialPrices?.cornerPacking.totalContainers! * materialPrices?.bidCosts.transportationPrice!;\n const transportationPrice = transportationPanelsPrice + transportationCornerPrice;\n\n\n const totalPanelBoxes = materialPrices?.panelPacking.totalContainers! * materialPrices?.panelPacking.totalBoxesPerContainer!;\n const totalCornerBoxes = materialPrices?.cornerPacking.totalContainers! * materialPrices?.cornerPacking.totalBoxesPerContainer!;\n const totalBoxes = totalPanelBoxes + totalCornerBoxes;\n\n const stepCoverLength = 0.3;\n const stepCover = 0.9;\n const stepDiagonals = 1.0\n const stepVerticals = 0.6;\n const woodProfileHeight = 0.022;\n const woodProfileWidth = 0.1;\n const stretchTapeLayers = 3;\n\n const woodRequiredPerBox = (boxLength: number, boxWidth: number, boxHeight: number) => {\n const profile_1_1 = boxLength * woodProfileHeight * woodProfileWidth * 8;\n const profile_1_2 = boxWidth * woodProfileHeight * woodProfileWidth * 8;\n const profile_2 = boxWidth * woodProfileHeight * woodProfileWidth * Math.trunc(2 * (boxHeight / stepDiagonals)) + 2;\n const profile_3 = boxHeight * woodProfileWidth * woodProfileWidth * Math.trunc((boxLength * 2 + boxWidth * 2) / stepVerticals);\n const profile_4 = boxLength * woodProfileHeight * woodProfileWidth * Math.trunc(2 * (boxHeight / stepDiagonals)) + 2;\n const profile_5 = boxLength * woodProfileHeight * woodProfileWidth * Math.trunc(boxWidth * 2) / stepDiagonals;\n const profile_6 = boxWidth * woodProfileHeight * woodProfileWidth * Math.trunc(boxHeight * 2) / stepDiagonals;\n const profile_7_1 = boxWidth * woodProfileHeight * woodProfileWidth * Math.trunc(boxLength / stepCover);\n const profile_7_2 = boxWidth * woodProfileHeight * woodProfileWidth * Math.trunc(boxWidth / stepCoverLength);\n const addProfiles = 0.05 * 0.1 * boxLength * Math.trunc(3 * (boxLength / stepVerticals));\n return [profile_1_1, profile_1_2, profile_2, profile_3, profile_4, profile_5, profile_6, profile_7_1, profile_7_2, addProfiles].reduce((sum, current) => sum + current, 0);\n }\n\n const woodRequiredPerBoxPanels = woodRequiredPerBox(materialPrices?.panelPacking.boxLength!, materialPrices?.panelPacking.boxWidth!, materialPrices?.panelPacking.boxHeight!) * 1.3;\n const cornerBoxWoodVolume = woodRequiredPerBox(materialPrices?.cornerPacking.boxLength!, materialPrices?.cornerPacking.boxWidth!, materialPrices?.cornerPacking.boxHeight!) * 2.0;\n\n const panelsWood = Math.ceil(totalPanelBoxes * woodRequiredPerBoxPanels);\n const cornersWood = Math.ceil(totalCornerBoxes * cornerBoxWoodVolume);\n const totalWood = panelsWood + cornersWood;\n\n const panelsScrews = Math.ceil(Math.trunc(materialPrices?.panelPacking.surfaceArea! * 5) * totalPanelBoxes);\n const cornersScrews = Math.ceil(Math.trunc(materialPrices?.cornerPacking.surfaceArea! * 5) * totalCornerBoxes);\n const totalScrews = panelsScrews + cornersScrews;\n\n const panelsStretch = Math.ceil(materialPrices?.panelPacking.surfaceArea! * stretchTapeLayers * totalPanelBoxes);\n const cornersStretch = Math.ceil(materialPrices?.cornerPacking.surfaceArea! * stretchTapeLayers * totalCornerBoxes);\n const totalStretch = panelsStretch + cornersStretch;\n\n const woodPrice = materialPrices?.woodPrice!;\n const screwPrice = materialPrices?.screwPrice!;\n const tapePrice = materialPrices?.tapePrice!;\n\n const woodPriceValue = totalWood * woodPrice;\n const screwPriceValue = totalScrews * screwPrice;\n const tapePriceValue = totalStretch * tapePrice;\n\n const packingPrice = woodPriceValue! + screwPriceValue! + tapePriceValue!;\n\n const summ = prodPrices + highPrices(prices) + administrativePrice + transportationPrice + packingPrice;\n const taxes = (summ * taxRate!) / 100.0;\n const coef = materialPrices?.currency;\n\n const isInvalid = materialPrices?.panelPacking.hasInvalidPanels! || materialPrices?.cornerPacking.hasInvalidPanels\n\n return {\n administrativePrice: administrativePrice,\n totalArea: totalArea,\n productionPrice: prodPrices,\n dutiesPrice: dutiesPrice,\n marginPrice: marginPrice,\n transportationPrice: transportationPrice,\n totalBoxes: totalBoxes,\n totalWood: totalWood,\n totalScrews: totalScrews,\n totalStretch: totalStretch,\n woodPrice: woodPriceValue,\n screwPrice: screwPriceValue,\n tapePrice: tapePriceValue,\n packingPrice: packingPrice,\n taxes: taxes,\n sum: summ,\n hasInvalidPanels: isInvalid!,\n currencyCoef: coef!\n };\n}\n\n","import React, { useState } from \"react\";\nimport { buildStyles, CircularProgressbar } from \"react-circular-progressbar\";\nimport \"react-circular-progressbar/dist/styles.css\";\nimport { Building, Warning } from \"../assets/icons/index\";\nimport { card, colors } from \"../config/colors\";\nimport { TextH4 } from \"../assets/text/index\";\nimport { AppButton } from \"./appButton\";\nimport { AppTag } from \"./appTag\";\nimport { styles } from \"../assets/modelCardStyles\";\nimport { IModel3DVersion, ModelTranslationStatus, ModelWorkflowStatus } from \"./model3d\";\nimport { Model3D } from \"../reducers/modelsReducer\";\nimport { Pin } from \"../assets/icons/pin\";\n\nexport const getModelVersionWorkflowStatusInfo = (modelVersion: IModel3DVersion) => {\n switch (modelVersion.workflowStatus) {\n case ModelWorkflowStatus.Submitted:\n return {\n workflowStatus: \"Submitted\",\n workflowTagStyle: { backgroundColor: card.pending, fontSize: \"12px\", height: \"23px\" }\n };\n\n case ModelWorkflowStatus.Approved:\n return {\n workflowStatus: \"Approved\",\n workflowTagStyle: { backgroundColor: card.approved }\n };\n\n case ModelWorkflowStatus.Declined:\n return {\n workflowStatus: \"Declined\",\n workflowTagStyle: { backgroundColor: card.declined }\n };\n\n case ModelWorkflowStatus.EngineerDraft:\n return {\n workflowStatus: \"Draft\",\n workflowTagStyle: { backgroundColor: card.engineer }\n }\n\n case ModelWorkflowStatus.Bid:\n return {\n workflowStatus: \"Bid\",\n workflowTagStyle: { backgroundColor: card.bid }\n }\n\n default:\n return {\n workflowStatus: \"Draft\",\n workflowTagStyle: { backgroundColor: \"#fff\" }\n };\n }\n}\n\ntype Props = {\n item: Model3D;\n isSelected: boolean;\n isEngineer: boolean;\n onSelect: () => void;\n}\n\nexport const ModelCard = React.forwardRef(({\n item,\n isSelected,\n isEngineer,\n onSelect, }, ref) => {\n const [isHovered, setIsHovered] = useState(false);\n\n const currentVersion = item.versions[item.selectedVersionIndex];\n const name = item.name;\n const itemStatus = currentVersion.status;\n const { workflowStatus, workflowTagStyle } = getModelVersionWorkflowStatusInfo(currentVersion);\n\n const isModelInProgress = currentVersion.status === ModelTranslationStatus.Created;\n const isModelNotReady = currentVersion.status !== ModelTranslationStatus.Ready;\n\n const versionsSize = item.versions.length - 1\n const isPrevVersionAvailable = item.selectedVersionIndex < versionsSize;\n const isSecondPrevVersionAvailable = item.selectedVersionIndex < versionsSize - 1;\n\n const hoverStyles = {\n boxShadow: \"0 0 0 2px #304E49\",\n };\n\n return (
setIsHovered(true)}\n onMouseLeave={() => setIsHovered(false)}>\n {isSelected && currentVersion.status !== ModelTranslationStatus.Created && (\n <>\n {currentVersion.isMainOption && !isEngineer && (\n \n \n \n )}\n \n )}\n {\n onSelect();\n }}\n >\n {itemStatus === ModelTranslationStatus.Created &&
\n \n
}\n \n {itemStatus === ModelTranslationStatus.Ready &&\n \n }\n \n {itemStatus === ModelTranslationStatus.Failed && }\n
\n {isPrevVersionAvailable && (\n
\n )}\n {isSecondPrevVersionAvailable && (\n \n )}\n {isModelNotReady && <>\n {name}\n {item.versions[0].forgeStatus || \"Pending...\"}\n }\n {!isModelNotReady && <>\n {name}\n
\n {`# ${currentVersion.versionNumber}`}\n {workflowStatus}\n
\n }\n );\n});","import { AppTag } from \"./appTag\";\nimport { IModel3DVersion } from \"./model3d\"\nimport { getModelVersionWorkflowStatusInfo } from \"./modelCard\";\nimport { styles } from \"../assets/optionStyles\";\nimport { setActiveTab } from \"../actions/applicationUIActions\";\nimport { useDispatch } from \"react-redux\";\n\ntype Props = {\n selectedVersion: IModel3DVersion;\n isSelected: boolean;\n isInModelInfo?: boolean;\n\n onSelect: () => void;\n}\n\nexport const OptionSwitcherCard = ({ selectedVersion, isSelected, onSelect, isInModelInfo }: Props) => {\n const dispatch = useDispatch();\n const { workflowStatus, workflowTagStyle } = getModelVersionWorkflowStatusInfo(selectedVersion);\n\n const maxWidthForText = 108;\n\n const handleClick = () => {\n onSelect();\n if (isSelected) {\n dispatch(setActiveTab(\"model\"));\n }\n };\n\n const cardStyle = {\n ...styles.container,\n ...(isSelected ? styles.selectedVersion : {}),\n cursor: 'pointer',\n };\n\n return (\n \n
\n {selectedVersion.versionNumber}\n {workflowStatus}\n {selectedVersion.optionName || \"\"}\n
\n \n );\n}\n","import React from 'react';\nimport { connect } from 'react-redux';\nimport Modal from '@weave-design/modal';\nimport Typography from \"@weave-design/typography\";\nimport merge from \"lodash.merge\";\nimport Button from '@weave-design/button';\nimport { Error24 } from \"@weave-design/icons\";\nimport ModalHeader from './modalHeader';\nimport { closeProcessingErrorDialog } from \"../actions/processingActions\";\nimport { isProcessingFailed, getProcessingFailure, getProcessingFailureTitle, State } from \"../reducers/mainReducer\";\nimport './modalFail.css';\n\ninterface IComponentProps {\n isVisible: boolean;\n message: string | React.ReactNode | null;\n title: string | null;\n style?: React.CSSProperties;\n\n closeProcessingErrorDialog: () => void;\n}\n\nexport const ProcessingFailure = (props: IComponentProps) => {\n if (!props.isVisible)\n return (null);\n\n const modalStyles = (styles: any) =>\n merge(styles, {\n modal: {\n window: {\n ...props.style,\n width: \"371px\",\n height: \"263px\",\n borderLeftStyle: \"solid\",\n borderLeftWidth: \"thick\",\n borderLeftColor: \"#ec4a41\"\n }\n }\n });\n\n return ( props.closeProcessingErrorDialog()}\n stylesheet={modalStyles}\n headerChildren={\n }\n />\n }>\n
\n
\n {props.title}\n
\n {props.message}\n
\n
\n
\n
\n
\n )\n}\n\nexport default connect(function (store: State) {\n return {\n isVisible: isProcessingFailed(store),\n message: getProcessingFailure(store),\n title: getProcessingFailureTitle(store)\n }\n}, { closeProcessingErrorDialog })(ProcessingFailure)","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { keyframes, cx, css } from 'emotion';\nimport { ThemeContext } from '@weave-design/theme-context';\nimport { createCustomClassNames } from '@weave-design/utils';\n\nfunction ownKeys(object, enumerableOnly) {\n var keys = Object.keys(object);\n\n if (Object.getOwnPropertySymbols) {\n var symbols = Object.getOwnPropertySymbols(object);\n enumerableOnly && (symbols = symbols.filter(function (sym) {\n return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n })), keys.push.apply(keys, symbols);\n }\n\n return keys;\n}\n\nfunction _objectSpread2(target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = null != arguments[i] ? arguments[i] : {};\n i % 2 ? ownKeys(Object(source), !0).forEach(function (key) {\n _defineProperty(target, key, source[key]);\n }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) {\n Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));\n });\n }\n\n return target;\n}\n\nfunction _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n}\n\nfunction _objectWithoutPropertiesLoose(source, excluded) {\n if (source == null) return {};\n var target = {};\n var sourceKeys = Object.keys(source);\n var key, i;\n\n for (i = 0; i < sourceKeys.length; i++) {\n key = sourceKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n target[key] = source[key];\n }\n\n return target;\n}\n\nfunction _objectWithoutProperties(source, excluded) {\n if (source == null) return {};\n\n var target = _objectWithoutPropertiesLoose(source, excluded);\n\n var key, i;\n\n if (Object.getOwnPropertySymbols) {\n var sourceSymbolKeys = Object.getOwnPropertySymbols(source);\n\n for (i = 0; i < sourceSymbolKeys.length; i++) {\n key = sourceSymbolKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue;\n target[key] = source[key];\n }\n }\n\n return target;\n}\n\nfunction getProgressBarIndeterminateRules() {\n const indeterminateCycle = keyframes`\n from {\n transform: translateX(-100%);\n }\n to {\n transform: translateX(200px);\n }\n `;\n return {\n animation: `2s linear infinite ${indeterminateCycle}`\n };\n}\n\nfunction getProgressBarFillIndeterminateRules(themeData) {\n return {\n \"&:before\": {\n content: `\"\"`,\n position: `absolute`,\n right: `2px`,\n width: `200px`,\n height: `4px`,\n backgroundImage: `linear-gradient(135deg, transparent, ${themeData[\"progress.bar.highlightColor\"]} 100%)`,\n backgroundSize: `200px 4px`\n }\n };\n}\n/**\n * @param {Number} percent, an integer or float\n * @returns {Integer}\n */\n\n\nconst renderedBarWidth = percent => {\n const percentageWidth = parseInt(percent, 10);\n\n if (!percentageWidth) {\n return null;\n }\n\n if (percentageWidth >= 100) {\n return 101;\n }\n\n return percentageWidth;\n};\nfunction stylesheet(props, themeData) {\n const {\n percentComplete,\n stylesheet: customStylesheet\n } = props;\n const isIndeterminate = percentComplete === null || percentComplete === undefined;\n const styles = {\n wrapper: {\n position: `relative`,\n borderRadius: themeData[\"progress.bar.borderRadius\"],\n backgroundColor: themeData[\"progress.bar.backgroundColor\"],\n overflow: `hidden`,\n width: `100%`,\n height: themeData[\"progress.bar.minHeight\"]\n },\n progressBar: _objectSpread2({\n position: `absolute`,\n top: 0,\n bottom: 0,\n left: `-3px`,\n display: `flex`,\n alignItems: `stretch`,\n transition: `width 0.3s ease-in-out`,\n width: isIndeterminate ? `100%` : `${renderedBarWidth(props.percentComplete)}%`\n }, isIndeterminate ? getProgressBarIndeterminateRules() : {}),\n progressBarFill: _objectSpread2({\n backgroundColor: isIndeterminate ? `transparent` : themeData[\"progress.bar.highlightColor\"],\n flex: `1 1 0`\n }, isIndeterminate ? getProgressBarFillIndeterminateRules(themeData) : {}),\n polygon: {\n fill: themeData[\"progress.bar.highlightColor\"]\n }\n };\n return customStylesheet ? customStylesheet(styles, props, themeData) : styles;\n}\n\nconst _excluded = [\"percentComplete\", \"stylesheet\"];\n\nconst ProgressBar = props => {\n const {\n percentComplete,\n stylesheet: customStylesheet\n } = props,\n otherProps = _objectWithoutProperties(props, _excluded);\n\n const {\n className\n } = otherProps;\n const innerWrapperClassNames = createCustomClassNames(className, \"progress-bar\");\n const fillClassNames = createCustomClassNames(className, \"fill\");\n const polygonClassNames = createCustomClassNames(className, \"polygon\");\n return /*#__PURE__*/React.createElement(ThemeContext.Consumer, null, _ref => {\n let {\n resolvedRoles\n } = _ref;\n const styles = stylesheet({\n percentComplete,\n stylesheet: customStylesheet\n }, resolvedRoles);\n return /*#__PURE__*/React.createElement(\"div\", {\n className: cx(css(styles.wrapper), className),\n role: \"progressbar\",\n \"aria-valuemin\": \"0\",\n \"aria-valuemax\": \"100\",\n \"aria-valuenow\": percentComplete\n }, /*#__PURE__*/React.createElement(\"div\", {\n className: cx(css(styles.progressBar), innerWrapperClassNames)\n }, /*#__PURE__*/React.createElement(\"div\", {\n className: cx(css(styles.progressBarFill), fillClassNames)\n }), /*#__PURE__*/React.createElement(\"svg\", {\n width: \"3px\",\n height: \"4px\",\n viewBox: \"0 0 3 4\",\n version: \"1.1\",\n xmlns: \"http://www.w3.org/2000/svg\",\n xmlnsXlink: \"http://www.w3.org/1999/xlink\"\n }, /*#__PURE__*/React.createElement(\"polygon\", {\n className: cx(css(styles.polygon), polygonClassNames),\n id: \"end-right\",\n points: \"0 0 2.68 0 1 4 0 4\"\n }))));\n });\n};\n\nProgressBar.displayName = \"ProgressBar\";\nProgressBar.propTypes = {\n /**\n * A number from 0 to 100 representing the percent the delayed operation has completed\n */\n percentComplete: PropTypes.number,\n\n /**\n * Adds custom/overriding styles\n */\n stylesheet: PropTypes.func\n};\nProgressBar.__docgenInfo = {\n \"description\": \"\",\n \"displayName\": \"ProgressBar\",\n \"props\": {\n \"percentComplete\": {\n \"type\": {\n \"name\": \"number\"\n },\n \"required\": false,\n \"description\": \"A number from 0 to 100 representing the percent the delayed operation has completed\"\n },\n \"stylesheet\": {\n \"type\": {\n \"name\": \"func\"\n },\n \"required\": false,\n \"description\": \"Adds custom/overriding styles\"\n }\n }\n};\n\nexport { ProgressBar as default };\n","import React, { Component } from 'react';\nimport ProgressBar from '@weave-design/progress-bar';\nimport \"./processingPane.css\";\n\nexport class ProcessingIndicator extends Component<{ message?: string }> {\n render() {\n return (
\n
\n
\n
\n \n
\n
\n
This operation could take several minutes
\n {this.props.message &&
Status: {this.props.message}
}\n
);\n }\n}","import React, { useRef } from 'react';\nimport { connect } from 'react-redux';\nimport Modal from '@weave-design/modal';\nimport { ProcessingIndicator } from \"./processingIndicator\";\nimport ModalHeader from './modalHeader';\nimport { isProcessingPaneVisible, getProcessingMessage, getProcessingTitle, State } from \"../reducers/mainReducer\";\nimport merge from \"lodash.merge\";\nimport \"./processingPane.css\";\n\nexport interface IProcessingPaneProps {\n isVisible: boolean;\n title: string;\n message: string | null;\n onClose?: () => void;\n isCancellable?: boolean;\n}\n\nexport const ProcessingPane = (props: IProcessingPaneProps) => {\n const modalStyles = useRef((styles: any) =>\n merge(styles, {\n modal: {\n window: {\n width: \"400px\",\n height: \"200px\",\n top: \"calc(50% - 100px)\"\n },\n bodyContent: {\n overflow: \"hidden\"\n }\n }\n }));\n\n return (\n \n }>\n \n \n
)\n}\n\nexport default connect(function (store: State) {\n return {\n isVisible: isProcessingPaneVisible(store),\n message: getProcessingMessage(store),\n title: getProcessingTitle(store)\n }\n}, {})(ProcessingPane)","import { IInsulatedGlassUnit, InsulatedGlassUnitValuesPreferences } from \"./forge/insulatedGlassUnit\";\n\nexport enum SystemType {\n DWall = 0,\n\n Retrofit = 1,\n\n Snowman = 2\n}\n\nexport interface IProject {\n id: string;\n name: string;\n number: string;\n postalCode: string;\n address: string;\n author: string;\n margin: number;\n taxRate: number;\n duties: number;\n buildingName: string;\n clientName: string;\n createdAt: Date | string;\n issueDate: Date | string | null;\n organizationDescription: string;\n organizationName: string;\n location: IProjectLocation | null;\n description: string;\n systemType: SystemType;\n userName: string;\n insulatedGlassUnitValuesPreferences: InsulatedGlassUnitValuesPreferences | null;\n selectedInsulatedGlassUnit: IInsulatedGlassUnit | null;\n}\n\nexport interface IProjectLocation {\n lat: number;\n lng: number;\n}\n\nexport type BasicResponse = { isSuccess: true, message: null } | { isSuccess: false, message: string }\n\nexport type BasicItemResponse = { isSuccess: true, message: null, item: T } | { isSuccess: false, message: string, item: null }\n\nexport type BasicItemsResponse = { isSuccess: true, message: null, items: T[] } | { isSuccess: false, message: string, items: null }\n\nexport interface IForgeToken {\n access_token: string;\n expires_in: number;\n}\n\nexport interface ICreateUpdateProjectCommand {\n id: string;\n name: string;\n postalCode: string;\n address: string;\n number: string;\n organizationName: string;\n organizationDescription: string;\n buildingName: string;\n author: string;\n margin: number;\n taxRate: number;\n duties: number;\n clientName: string;\n issueDate: string | null;\n location: IProjectLocation | null;\n insulatedGlassUnitValuesPreferences: InsulatedGlassUnitValuesPreferences | null;\n selectedInsulatedGlassUnitId: string | null;\n description: string;\n systemType: number;\n}\n\nexport interface IApplicationMetadata {\n version: string;\n}","import ralColorsFactory from \"./forge/ralColorsFactory\";\n\nclass RalColorSelectorUsedColorsCache {\n private readonly usedColorsCodes = new Set();\n\n getLastUsedColorCodes(): string[] {\n return ralColorsFactory.getColorCodes().filter(x => this.usedColorsCodes.has(x));\n }\n\n use(colors: string | string[]) {\n const items = Array.isArray(colors) ? colors : [colors];\n\n for (const item of items)\n this.usedColorsCodes.add(item);\n }\n\n dispose() {\n this.usedColorsCodes.clear();\n }\n}\n\nexport default new RalColorSelectorUsedColorsCache();","// use fixed version of the viewer to avoid usage of untested viewer version\nimport { DisplayCurrencies } from \"./modelAnalytics\";\n\nconst viewerVersion = '7.101.0';\n\nexport const viewerCss = `https://developer.api.autodesk.com/modelderivative/v2/viewers/${viewerVersion}/style.min.css`;\nexport const viewerJs = `https://developer.api.autodesk.com/modelderivative/v2/viewers/${viewerVersion}/viewer3D.min.js`;\nexport const appRootId = 'root';\nexport const modalsContainerId = 'model-editor-viewer-modals-container';\n\nexport const roundToMillions = (x: number, currency: DisplayCurrencies, currencyCoef: number) => {\n const sign = currency === DisplayCurrencies.Eur ? \"€\" : \"$\";\n const coef = currency === DisplayCurrencies.Eur ? 1 : currencyCoef;\n\n const priceValue = Math.abs(Number(x)) >= 1.0e+9\n ? (Math.abs(Number(x) * coef) / 1.0e+9).toFixed(2) + \"B\"\n // Six Zeroes for Millions \n : Math.abs(Number(x)) >= 1.0e+6\n ? (Math.abs(Number(x) * coef) / 1.0e+6).toFixed(2) + \"M\"\n // Three Zeroes for Thousands\n : Math.abs(Number(x)) >= 1.0e+3\n ? (Math.abs(Number(x) * coef) / 1.0e+3).toFixed(2) + \"K\"\n : Math.abs(Number(x) * coef).toFixed(2);\n\n return `${priceValue} ${sign}`;\n}\n\nexport const roundToFixes = (x: number, currency: DisplayCurrencies, currencyCoef: number) => {\n const sign = currency === DisplayCurrencies.Eur ? \"€\" : \"$\";\n const coef = currency === DisplayCurrencies.Eur ? 1 : currencyCoef;\n const priceValue = (x * coef).toFixed(2);\n return `${priceValue} ${sign}`;\n}\n\nexport const tokenStorageName = \"dextallstudio.portaluser.token.v2\";","export const colors = {\n main: \"#0C4FBB\",\n selectedText: \"#848484\",\n white: \"#FFFFFF\",\n formBg: \"#F1F1F1\",\n subheading: \"#C4C4C4\",\n textBlack: \"#333333\",\n greyBackground: \"#F1F1F1\",\n tag: \"#A2A2A2\",\n appTag: \"#EDEDED\",\n fullscreen: \"#B9CDF2\",\n analyticsTitile: \"#535353\",\n folderTopButton: \"#F8F8FA\",\n concrete: \"#C4C4C4\",\n metal: \"#A1A1A1\",\n glass: \"#EEEEEE\",\n copper: \"#C17A5B\",\n plastic: \"#FFF6A3\",\n lightGray: \"#DFDFDF\",\n darkGray: \"#6F6F6F\",\n yellow: \"#EFDB26\",\n blue: \"#3558D6\",\n black: \"#313131\",\n admin: \"#F25C1B\",\n hovered: \"#304E49\"\n};\nexport const card = {\n approved: \"#4AFF2D4A\",\n selected: \"#DFDFDF\",\n default: \"#EEEEEE\",\n chevron: \"#656565\",\n middleCard: \"#E8E8E8\",\n pending: \"#FFF6A3\",\n declined: \"#FFCACA\",\n engineer: \"#cadcff\",\n bid: \"#87CEFA\",\n versionProject: \"#F8F8FA\",\n pin: \"#888888\",\n chat: \"#304E49\",\n};\n\nexport const icon = {\n selected: \"#8A8C92\",\n defualt: \"#C4C4C4\",\n};\n","import { LoginState } from '../actions/common';\nimport { ProfileActionType } from '../actions/profileActions';\nimport { IUserProfile } from '../components/userProfile';\n\nexport type State = {\n isLoggedIn: LoginState;\n profile: IUserProfile;\n}\n\nexport const initialState: State = {\n isLoggedIn: \"unknown\",\n profile: {\n name: \"Anonymous\",\n isEngineer: false,\n isBidManager: false,\n isDextallEmployee: false,\n canExposeFacadeModelToPublic: false,\n areUnreleasedFeaturesAvailable: false,\n applicationAdmin: false,\n revitFacadeGenerationEnabled: false,\n statsAdmin: false\n }\n};\n\nexport const isLoggedIn = function (state: State) {\n return state.isLoggedIn;\n}\n\nexport const isApplicationAdmin = function (state: State) {\n return state.profile.applicationAdmin;\n}\n\nexport const isStatsAdmin = function (state: State) {\n return state.profile.statsAdmin;\n}\n\nexport const getUserName = function (state: State) {\n return state.profile.name;\n}\n\nexport const isEngineer = function (state: State) {\n return state.profile.isEngineer;\n}\n\nexport const isBidManager = function (state: State) {\n return state.profile.isBidManager;\n}\n\nexport const isDextallEmployee = function (state: State) {\n return state.profile.isDextallEmployee;\n}\n\nexport const canExposeFacadeModelToPublic = function (state: State) {\n return state.profile.canExposeFacadeModelToPublic;\n}\n\nexport const areUnreleasedFeaturesAvailable = function (state: State) {\n return state.profile.areUnreleasedFeaturesAvailable;\n}\n\nexport const canGenerateRevitFacadeModel = function (state: State) {\n return state.profile.revitFacadeGenerationEnabled;\n}\n\nexport default function (state: State = initialState, action: ProfileActionType): State {\n switch (action.type) {\n case \"PROFILE_LOADED\": {\n return { isLoggedIn: action.isLoggedIn, profile: action.profile };\n }\n default:\n return state;\n }\n}","import { LoginActionType } from '../actions/loginActions'\n\nexport type State = {\n login: string;\n password: string;\n loginResult: {\n isSuccess: boolean;\n message: string;\n }\n}\n\nexport const initialState: State = {\n login: \"\",\n password: \"\",\n loginResult: {\n isSuccess: true,\n message: \"\"\n }\n}\n\nexport const canSignIn = function (state: State) {\n return state.login !== \"\" && state.password !== \"\";\n}\n\nexport const getUserName = function (state: State) {\n return state.login;\n}\n\nexport const getPassword = function (state: State) {\n return state.password;\n}\n\nexport const getLoginResults = function (state: State) {\n return state.loginResult;\n}\n\n// eslint-disable-next-line import/no-anonymous-default-export\nexport default function (state: State = initialState, action: LoginActionType): State {\n switch (action.type) {\n case \"EDIT_LOGIN_FORM_MESSAGE\":\n return { ...state, login: action.login, loginResult: { isSuccess: true, message: \"\" } }\n\n case \"EDIT_PASSWORD_FORM_MESSAGE\":\n return { ...state, password: action.password, loginResult: { isSuccess: true, message: \"\" } }\n\n case \"SHOW_LOGIN_FAILED\":\n return { ...state, loginResult: { isSuccess: false, message: action.message } };\n\n default:\n return state;\n }\n}","import { UploadModelActionType } from '../actions/uploadModelActions'\n\nexport type State = {\n showUploadDialog: boolean;\n newModelCreationError: string | null;\n}\n\nexport const initialState: State = {\n showUploadDialog: false,\n newModelCreationError: null\n}\n\nexport const isModelUploadDialogVisible = function (state: State) {\n return state.showUploadDialog;\n}\n\nexport const getNewModelCreationError = function (state: State) {\n return state.newModelCreationError;\n}\n\nexport default function (state: State = initialState, action: UploadModelActionType) {\n switch (action.type) {\n case \"SHOW_UPLOAD_MODEL_SOURCE\": {\n return { ...state, showUploadDialog: action.visible, newModelCreationError: null }\n }\n\n case \"SHOW_UPLOAD_NEW_FILE_ERROR\": {\n return { ...state, newModelCreationError: action.message }\n }\n\n default:\n return state;\n }\n}","import { ProcessingActionType } from '../actions/processingActions'\n\nexport type State = {\n processingPaneVisible: boolean;\n processingPaneTitle: string;\n processingCurrentMessageTitle: string | null;\n processingCurrentMessage: string | null;\n processingErrorMessage: string | null;\n}\n\nexport const initialState: State = {\n processingPaneVisible: false,\n processingPaneTitle: \"Processing...\",\n processingCurrentMessageTitle: null,\n processingCurrentMessage: null,\n processingErrorMessage: null\n}\n\nexport const isProcessingPaneVisible = function (state: State) {\n return state.processingPaneVisible;\n}\n\nexport const getProcessingMessage = function (state: State) {\n return state.processingCurrentMessage;\n}\n\nexport const getProcessingTitle = function (state: State) {\n return state.processingPaneTitle;\n}\n\nexport const isProcessingFailed = function (state: State) {\n return state.processingErrorMessage !== null;\n}\n\nexport const getProcessingFailure = function (state: State) {\n return state.processingErrorMessage;\n}\n\nexport const getProcessingFailureTitle = function (state: State) {\n return state.processingCurrentMessageTitle;\n}\n\n// eslint-disable-next-line import/no-anonymous-default-export\nexport default function (state: State = initialState, action: ProcessingActionType): State {\n switch (action.type) {\n case \"PROCESSING_PANE_SHOW\": {\n return { ...state, processingPaneVisible: action.visible, processingPaneTitle: action.title || \"\", processingCurrentMessage: null };\n }\n\n case \"PROCESSING_PANE_PROGRESS\": {\n return { ...state, processingCurrentMessage: action.message };\n }\n\n case \"SET_PROCESSING_FAILURE\": {\n return { ...state, processingCurrentMessageTitle: action.title, processingErrorMessage: action.message };\n }\n\n case \"CLOSE_PROCESSING_FAILURE\": {\n return { ...state, processingErrorMessage: null }\n }\n\n default:\n return state;\n }\n}","import { ApplicationUIActionType, ApplicationTabType } from '../actions/applicationUIActions'\n\nexport type State = {\n isModalInfoVisible: boolean;\n isAnalyticsTabVisible: boolean;\n activeTab: ApplicationTabType;\n}\n\nexport const initialState: State = {\n isModalInfoVisible: false,\n isAnalyticsTabVisible: false,\n activeTab: \"project\"\n}\n\nexport const isModalInfoVisible = function (state: State) {\n return state.isModalInfoVisible;\n}\n\nexport const isAnalyticsTabVisible = function (state: State) {\n return state.isAnalyticsTabVisible;\n}\n\nexport const getActiveTab = function (state: State) {\n return state.activeTab;\n}\n\nexport default function (state: State = initialState, action: ApplicationUIActionType): State {\n switch (action.type) {\n case \"SET_ACTIVE_TAB\": {\n return { ...state, activeTab: action.tab, isAnalyticsTabVisible: false }\n }\n\n case \"SET_MODEL_INFO_VISIBILITY\": {\n return { ...state, isModalInfoVisible: action.isVisible }\n }\n\n case \"SET_ANALYTICS_VISIBILITY\": {\n return { ...state, isAnalyticsTabVisible: action.isVisible }\n }\n\n default:\n return state;\n }\n}","import { ModelAnalyticsActionType } from '../actions/modelsAnalyticsActions';\nimport { IModelAnalytics } from '../components/modelAnalytics';\n\nexport type State = {\n modelAnalytics: IModelAnalytics | null;\n isRefreshNeeded: boolean;\n}\n\nexport const initialState: State = {\n modelAnalytics: null,\n isRefreshNeeded: false\n}\n\nexport const getModelAnalytics = function (state: State) {\n return state.modelAnalytics;\n}\n\nexport const getRefreshNeeded = function (state: State) {\n return state.isRefreshNeeded;\n}\n\nexport default function (state: State = initialState, action: ModelAnalyticsActionType) {\n switch (action.type) {\n case \"SET_CURRENT_MODEL_ANALYTICS\": {\n return { ...state, modelAnalytics: action.analytics };\n }\n case \"SET_IS_REFRESH_NEEDED\": {\n if (state.isRefreshNeeded === action.isRefreshNeeded)\n return state;\n\n return { ...state, isRefreshNeeded: action.isRefreshNeeded };\n }\n default:\n return state;\n }\n}","import { InsulaterGlassUnitActions } from \"../actions/insulatedGlassUnitsActions\";\nimport { IInsulatedGlassUnit } from \"../components/forge/insulatedGlassUnit\"\n\nexport type State = {\n insulatedGlassUnits: IInsulatedGlassUnit[];\n}\n\nconst initialState: State = {\n insulatedGlassUnits: []\n}\n\nexport const getInsulatedGlassUnits = function (state: State) {\n return state.insulatedGlassUnits;\n}\n\nexport default function (state: State = initialState, action: InsulaterGlassUnitActions): State {\n if (action.type === \"SET_INSULATION_GLASS_UNITS\")\n return { ...state, insulatedGlassUnits: action.units };\n\n return state;\n}","import {IMaterial} from \"../components/modelAnalytics\";\nimport { PricesActionType, PricesLoadingState } from \"../actions/priceActions\";\n\nexport type State = {\n materialPrices: IMaterial | null;\n isVisible: boolean;\n state: PricesLoadingState;\n}\n\nexport const initialState: State = {\n materialPrices: null,\n isVisible: false,\n state: \"loading\"\n}\n\nexport const getPricesLoadingState = function (state: State) {\n return state.state;\n}\n\nexport const getMaterialPrices = function (state: State) {\n return state.materialPrices;\n}\n\nexport const isMaterialTablelVisible = function (state: State) {\n return state.isVisible;\n}\n\nexport default function (state: State = initialState, action: PricesActionType) {\n switch (action.type) {\n case \"SET_CURRENT_MODEL_PRICES\": {\n return { ...state, materialPrices: action.materialPrices, state: action.priceLoadingState }\n }\n\n case \"SHOW_PRICES_BREAKDOWN_DIALOG\": {\n return { ...state, isVisible: action.visible }\n }\n\n default:\n return state;\n }\n}","import { SaveActionType } from \"../actions/modelSaveCycleActions\";\n\nexport type State = {\n isSaving: boolean;\n failureMessage: string | null;\n};\n\nexport const initialSaveState: State = {\n isSaving: false,\n failureMessage: null,\n};\n\nexport const getIsSaving = (state: State) => state.isSaving;\n\nexport const getModelCycleFailureMessage = (state: State) => state.failureMessage;\n\nexport default function saveReducer(state: State = initialSaveState, action: SaveActionType) {\n switch (action.type) {\n case \"SET_IS_SAVING\": {\n return { ...state, isSaving: action.isSaving };\n }\n case \"MODEL_SAVE_CYCLE_FAILURE\": {\n return { ...state, failureMessage: action.message };\n }\n default:\n return state;\n }\n}\n","import { combineReducers } from 'redux';\nimport profileReducer, * as profile from './profileReducer'\nimport { State as ProfileState } from './profileReducer'\nimport loginReducer, * as uilogin from './loginReducer'\nimport { State as LoginState } from './loginReducer'\nimport modelsReducer, * as models from \"./modelsReducer\";\nimport { State as ModelsState } from \"./modelsReducer\";\nimport projectsReducer, * as projects from \"./projectsReducer\";\nimport { State as ProjectsState } from \"./projectsReducer\";\nimport uploadModelReducer, * as modelUpload from \"./uploadModelReducer\";\nimport { State as UploadModelState } from \"./uploadModelReducer\";\nimport processingReducer, * as processing from \"./processingReducer\";\nimport { State as ProcessingState } from \"./processingReducer\";\nimport applicationUIReducer, * as applicationUI from \"./applicationUIReducer\";\nimport { State as ApplicationUIState } from \"./applicationUIReducer\";\nimport modelsAnalyticsReducer, * as modelAnalytics from \"./modelsAnalyticsReducer\";\nimport { State as ModelAnalyticsState } from \"./modelsAnalyticsReducer\";\nimport insulatedGlassUnitsReducer, * as insulatedGlassUnits from \"./insulatedGlassUnitsReducer\";\nimport { State as InsulatedGlassUnitsState } from \"./insulatedGlassUnitsReducer\";\nimport { ModelWorkflowStatus } from \"../components/model3d\";\nimport priceReducer, * as prices from \"./priceReducer\";\nimport { State as PriceState } from \"./priceReducer\";\nimport modelSaveCycleReducer, * as save from './modelSaveCycleReducer';\nimport { State as SaveState } from './modelSaveCycleReducer';\n\nexport const mainReducer = combineReducers({\n profile: profileReducer,\n login: loginReducer,\n models: modelsReducer,\n modelUpload: uploadModelReducer,\n processing: processingReducer,\n projects: projectsReducer,\n applicationUI: applicationUIReducer,\n modelAnalytics: modelsAnalyticsReducer,\n prices: priceReducer,\n insulatedGlassUnits: insulatedGlassUnitsReducer,\n save: modelSaveCycleReducer\n});\n\nexport type State = {\n profile: ProfileState;\n login: LoginState;\n models: ModelsState;\n modelUpload: UploadModelState;\n processing: ProcessingState;\n projects: ProjectsState;\n applicationUI: ApplicationUIState;\n modelAnalytics: ModelAnalyticsState,\n prices: PriceState,\n insulatedGlassUnits: InsulatedGlassUnitsState\n save: SaveState;\n}\n\n// LOGIN\nexport const getLoginResults = function (state: State) {\n return uilogin.getLoginResults(state.login);\n}\n\nexport const canSignIn = function (state: State) {\n return uilogin.canSignIn(state.login);\n}\n\nexport const getUserName = function (state: State) {\n return uilogin.getUserName(state.login);\n}\n\nexport const getPassword = function (state: State) {\n return uilogin.getPassword(state.login);\n}\n\nexport const getUserData = function (state: State) {\n return {\n name: getUserName(state),\n password: getPassword(state)\n }\n}\n\n// PROFILE\nexport const isLoggedIn = function (state: State) {\n return profile.isLoggedIn(state.profile);\n}\n\nexport const isApplicationAdmin = function (state: State) {\n return profile.isApplicationAdmin(state.profile);\n}\n\nexport const isStatsAdmin = function (state: State) {\n return profile.isStatsAdmin(state.profile);\n}\n\nexport const getProfile = function (state: State) {\n return state.profile;\n}\n\nexport const getApplicationUserName = function (state: State) {\n return profile.getUserName(state.profile);\n}\n\nexport const isEngineer = function (state: State) {\n return profile.isEngineer(state.profile);\n}\n\nexport const isBidManager = function (state: State) {\n return profile.isBidManager(state.profile);\n}\n\nexport const isDextallEmployee = function (state: State) {\n return profile.isDextallEmployee(state.profile);\n}\n\nexport const areUnreleasedFeaturesAvailable = function (state: State) {\n return profile.areUnreleasedFeaturesAvailable(state.profile);\n}\n\nexport const canExposeFacadeModelToPublic = function (state: State) {\n return profile.canExposeFacadeModelToPublic(state.profile);\n}\n\nexport const canGenerateRevitFacadeModel = function (state: State) {\n return profile.canGenerateRevitFacadeModel(state.profile);\n}\n\nexport const isEditable = function (state: State) {\n return models.getSelectedModelVersion(state.models)?.workflowStatus === ModelWorkflowStatus.Draft || (isEngineer(state) && models.getSelectedModelVersion(state.models)?.workflowStatus === ModelWorkflowStatus.EngineerDraft);\n}\n\n// PROCESSING\nexport const isProcessingPaneVisible = function (state: State) {\n return processing.isProcessingPaneVisible(state.processing);\n}\n\nexport const getProcessingMessage = function (state: State) {\n return processing.getProcessingMessage(state.processing);\n}\n\nexport const getProcessingTitle = function (state: State) {\n return processing.getProcessingTitle(state.processing);\n}\n\nexport const isProcessingFailed = function (state: State) {\n return processing.isProcessingFailed(state.processing);\n}\n\nexport const getProcessingFailure = function (state: State) {\n return processing.getProcessingFailure(state.processing);\n}\n\nexport const getProcessingFailureTitle = function (state: State) {\n return processing.getProcessingFailureTitle(state.processing);\n}\n\n// MODELS\nexport const getModels = function (state: State) {\n return models.getModels(state.models);\n}\n\nexport const getSelectedModel = function (state: State) {\n return models.getSelectedModel(state.models);\n}\n\nexport const getSelectedModelVersion = function (state: State) {\n return models.getSelectedModelVersion(state.models);\n}\n\nexport const isHighLodModelViewMode = function (state: State) {\n return models.isHighLodModelViewMode(state.models);\n}\n\nexport const getSelectedModelDownloadUrl = function (state: State) {\n return models.getSelectedModelDownloadUrl(state.models);\n}\n\nexport const getEngineeringProductionModels = function (state: State) {\n return models.getEngineeringProductionModels(state.models);\n}\n\nexport const getSelectedEngineeringProductionModel = function (state: State) {\n return models.getSelectedEngineeringProductionModel(state.models);\n}\n\nexport const isModelLoading = function (state: State) {\n return models.getIsModelLoading(state.models);\n}\n\nexport const isEngineeringModelLoading = function (state: State) {\n return models.getIsEngineeringModelLoading(state.models);\n}\n\n// MODEL ANALYTICS\nexport const getModelAnalytics = function (state: State) {\n return modelAnalytics.getModelAnalytics(state.modelAnalytics);\n}\n\nexport const getRefreshNeeded = function (state: State) {\n return modelAnalytics.getRefreshNeeded(state.modelAnalytics);\n}\n\n// MODEL PRICES\nexport const getMaterialPrices = function (state: State) {\n return prices.getMaterialPrices(state.prices)\n}\n\nexport const isMaterialTableVisible = function (state: State) {\n return prices.isMaterialTablelVisible(state.prices)\n}\n\nexport const getPricesLoadingState = function (state: State) {\n return prices.getPricesLoadingState(state.prices);\n}\n\n// MODELS UPLOAD\nexport const isModelUploadDialogVisible = function (state: State) {\n return modelUpload.isModelUploadDialogVisible(state.modelUpload);\n}\n\nexport const getNewModelCreationError = function (state: State) {\n return modelUpload.getNewModelCreationError(state.modelUpload);\n}\n\n// PROJECTS\nexport const getProjects = function (state: State) {\n return projects.getProjects(state.projects);\n}\n\nexport const getCurrentProject = function (state: State) {\n return projects.getCurrentProject(state.projects);\n}\n\nexport const isCurrentProjectInEditMode = function (state: State) {\n return projects.isCurrentProjectInEditMode(state.projects);\n}\n\nexport const isCurrentProjectInInfoMode = function (state: State) {\n return state.projects.showInfo;\n}\n\nexport const isCurrentProjectInSettingsMode = function (state: State) {\n return state.projects.showSettings;\n}\n\nexport const areProjectsInitialized = function (state: State) {\n return projects.areProjectsInitialized(state.projects);\n}\n\n// Windows IGU\nexport const getInsulatedGlassUnits = function (state: State) {\n return insulatedGlassUnits.getInsulatedGlassUnits(state.insulatedGlassUnits);\n}\n\n// APP UI FLAGS\nexport const isModalInfoVisible = function (state: State) {\n return applicationUI.isModalInfoVisible(state.applicationUI);\n}\n\nexport const getActiveTab = function (state: State) {\n return applicationUI.getActiveTab(state.applicationUI);\n}\n\nexport const isAnalyticsTabVisible = function (state: State) {\n return applicationUI.isAnalyticsTabVisible(state.applicationUI);\n}\n\n// MODEL SAVE CYCLE\nexport const isSaving = function (state: State) {\n return save.getIsSaving(state.save);\n};\n\nexport const getModelCycleFailureMessage = function (state: State) {\n return save.getModelCycleFailureMessage(state.save);\n};","import { SourceRevitModelActionType } from '../actions/sourceRevitModelsActions';\nimport { IEngineeringProductionModel, IModel3D, IModel3DVersion, ModelTranslationStatus, ModelWorkflowStatus } from '../components/model3d';\n\nexport type Model3D = IModel3D & { selectedVersionIndex: number };\n\nexport type State = {\n models: Model3D[];\n selectedModel: Model3D | null;\n selectedModelVersion: IModel3DVersion | null;\n highLodViewer: boolean;\n selectedModelDownloadUrl: string;\n engineeringProductionModels: IEngineeringProductionModel[];\n selectedEngineerindProductionModel: IEngineeringProductionModel | null;\n modelsLoading: boolean;\n engineeringModelsLoading: boolean,\n}\n\nexport const initialState: State = {\n models: [],\n selectedModel: null,\n selectedModelVersion: null,\n highLodViewer: false,\n selectedModelDownloadUrl: \"\",\n engineeringProductionModels: [],\n selectedEngineerindProductionModel: null,\n modelsLoading: false,\n engineeringModelsLoading: false,\n}\n\nexport const getModels = function (state: State) {\n return state.models;\n}\n\nexport const getSelectedModel = function (state: State) {\n return state.selectedModel;\n}\n\nexport const getSelectedModelVersion = function (state: State) {\n return state.selectedModelVersion;\n}\n\nexport const isHighLodModelViewMode = function (state: State) {\n return state.highLodViewer;\n}\n\nexport const getSelectedModelDownloadUrl = function (state: State) {\n return state.selectedModelDownloadUrl;\n}\n\nexport const getEngineeringProductionModels = function (state: State) {\n return state.engineeringProductionModels;\n}\n\nexport const getSelectedEngineeringProductionModel = function (state: State) {\n return state.selectedEngineerindProductionModel;\n}\n\nexport const getIsModelLoading = function (state: State) {\n return state.modelsLoading;\n}\n\nexport const getIsEngineeringModelLoading = function (state: State) {\n return state.engineeringModelsLoading;\n}\n\n// eslint-disable-next-line import/no-anonymous-default-export\nexport default function (state: State = initialState, action: SourceRevitModelActionType): State {\n switch (action.type) {\n case \"SET_SOURCE_MODELS\": {\n const models: Model3D[] = action.models.map(x => {\n const selectedVersionIndex = Math.max(x.versions.findIndex(v => v.isMainOption), 0);\n\n return { ...x, selectedVersionIndex }\n });\n\n const selectedModel = state.selectedModel && models.find(x => x.id === state.selectedModel?.id) ? state.selectedModel : null;\n\n if (selectedModel?.versions[0].status === ModelTranslationStatus.Created)\n return { ...state, models: models, selectedModel: null, selectedModelVersion: null };\n\n const selectedModelVersion = selectedModel && selectedModel.versions[selectedModel.selectedVersionIndex] || null;\n\n return { ...state, models: models, selectedModel, selectedModelVersion, highLodViewer: false, selectedModelDownloadUrl: \"\" };\n }\n\n case \"SET_SELECTED_MODEL\": {\n let selectedModel = state.models.find(x => x.id === action.modelId) || null;\n\n if (selectedModel?.versions[0].status === ModelTranslationStatus.Created)\n return { ...state };\n\n const versionIndex = action.versionIndex !== undefined\n ? action.versionIndex\n : selectedModel?.selectedVersionIndex || 0;\n\n if (selectedModel)\n selectedModel = { ...selectedModel, selectedVersionIndex: versionIndex };\n\n const selectedModelVersion = selectedModel && selectedModel.versions[versionIndex] || null;\n\n return { ...state, selectedModel: selectedModel ? { ...selectedModel } : null, selectedModelVersion, highLodViewer: false, selectedModelDownloadUrl: \"\" };\n }\n\n case \"REMOVE_CURRENT_MODEL\": {\n return removeCurrentModel(state);\n }\n\n case \"REMOVE_CURRENT_MODEL_VERSION\": {\n if (!state.selectedModel)\n return state;\n\n if (state.selectedModel.versions.length === 1)\n return removeCurrentModel(state);\n\n const selectedModelId = state.selectedModel.id;\n const selectedVersionIndex = state.selectedModel.selectedVersionIndex;\n\n const updateModel = (model: Model3D) => {\n if (model.id !== selectedModelId)\n return model;\n\n const versions = [...model.versions];\n\n versions.splice(selectedVersionIndex, 1);\n\n const newVersionIndex = model.selectedVersionIndex < versions.length ? model.selectedVersionIndex : model.selectedVersionIndex - 1;\n\n return { ...model, versions: versions, selectedVersionIndex: newVersionIndex };\n }\n\n const models = state.models.map(x => updateModel(x));\n\n const selectedModel = updateModel(state.selectedModel);\n\n const selectedModelVersion = selectedModel.versions[selectedModel.selectedVersionIndex];\n\n return { ...state, models, selectedModel, selectedModelVersion, highLodViewer: false, selectedModelDownloadUrl: \"\" };\n }\n\n case \"SET_PREVIOUS_MODEL_VERSION_SELECTED\": {\n if (!state.selectedModel || state.selectedModel.selectedVersionIndex === state.selectedModel.versions.length - 1)\n return state;\n\n const updateModel = (model: Model3D) => {\n if (model.id !== state.selectedModel?.id)\n return model;\n\n return { ...model, selectedVersionIndex: model.selectedVersionIndex + 1 }\n }\n\n const selectedModel = updateModel(state.selectedModel);\n\n const selectedModelVersion = selectedModel.versions[selectedModel.selectedVersionIndex];\n\n const models = state.models.map(x => updateModel(x));\n\n return { ...state, models, selectedModel, selectedModelVersion, highLodViewer: false, selectedModelDownloadUrl: \"\" };\n }\n\n case \"SET_NEXT_MODEL_VERSION_SELECTED\": {\n if (!state.selectedModel || state.selectedModel.selectedVersionIndex === 0)\n return state;\n\n const updateModel = (model: Model3D) => {\n if (model.id !== state.selectedModel?.id)\n return model;\n\n return { ...model, selectedVersionIndex: model.selectedVersionIndex - 1 }\n }\n\n const models = state.models.map(x => updateModel(x));\n\n const selectedModel = updateModel(state.selectedModel);\n\n const selectedModelVersion = selectedModel.versions[selectedModel.selectedVersionIndex];\n\n return { ...state, models, selectedModel, selectedModelVersion, highLodViewer: false, selectedModelDownloadUrl: \"\" };\n }\n\n case \"SET_CURRENT_MODEL_SELECTED_VERSION_INDEX\": {\n if (!state.selectedModel)\n return state;\n\n const updateModel = (model: Model3D): Model3D => {\n if (model.id !== state.selectedModel?.id)\n return model;\n\n return { ...model, selectedVersionIndex: action.versionIndex };\n }\n\n const models = state.models.map(x => updateModel(x));\n\n const selectedModel = updateModel(state.selectedModel);\n\n const selectedModelVersion = selectedModel.versions[selectedModel.selectedVersionIndex];\n\n return { ...state, models, selectedModel, selectedModelVersion, highLodViewer: false, selectedModelDownloadUrl: \"\" };\n }\n\n case \"SET_CURRENT_MODEL_SELECTED_VERSION_PIN\": {\n if (!state.selectedModel)\n return state;\n\n const updateModel = (model: Model3D): Model3D => {\n if (model.id !== state.selectedModel?.id)\n return model;\n\n const versions = model\n .versions\n .map((x, i) => ({ ...x, isMainOption: i === model.selectedVersionIndex && action.value }));\n\n return { ...model, versions };\n }\n\n const models = state.models.map(x => updateModel(x));\n\n const selectedModel = updateModel(state.selectedModel);\n\n const selectedModelVersion = selectedModel.versions[selectedModel.selectedVersionIndex];\n\n return { ...state, models, selectedModel, selectedModelVersion, selectedModelDownloadUrl: \"\" };\n }\n\n case \"SET_MODEL_VERSION_SUBMITTED\": {\n if (!state.selectedModelVersion)\n return state;\n const updateModel = (model: Model3D): Model3D => {\n if (model.id !== state.selectedModel?.id)\n return model;\n\n const versions = model.versions.map((x, i) => ({ ...x, workflowStatus: i === model.selectedVersionIndex ? ModelWorkflowStatus.Submitted : x.workflowStatus }));\n\n return { ...model, versions };\n }\n const models = state.models.map(x => updateModel(x));\n const selectedModel = updateModel(state.selectedModel!);\n const selectedModelVersion = { ...state.selectedModelVersion, workflowStatus: ModelWorkflowStatus.Submitted };\n\n return { ...state, models, selectedModel: selectedModel, selectedModelVersion: selectedModelVersion, selectedModelDownloadUrl: \"\" }\n }\n\n case \"SET_MODEL_VERSION_BID\": {\n if (!state.selectedModelVersion)\n return state;\n const updateModel = (model: Model3D): Model3D => {\n if (model.id !== state.selectedModel?.id)\n return model;\n\n const versions = model.versions.map((x, i) => ({ ...x, workflowStatus: i === model.selectedVersionIndex ? ModelWorkflowStatus.Bid : x.workflowStatus }));\n\n return { ...model, versions };\n }\n\n const models = state.models.map(x => updateModel(x));\n const selectedModel = updateModel(state.selectedModel!);\n const selectedModelVersion = { ...state.selectedModelVersion, workflowStatus: ModelWorkflowStatus.Bid };\n\n return { ...state, models, selectedModel, selectedModelVersion, selectedModelDownloadUrl: \"\" }\n }\n\n case \"SET_MODEL_VERSION_APPROVED\": {\n if (!state.selectedModelVersion)\n return state;\n const updateModel = (model: Model3D): Model3D => {\n if (model.id !== state.selectedModel?.id)\n return model;\n\n const versions = model.versions.map((x, i) => ({ ...x, workflowStatus: i === model.selectedVersionIndex ? ModelWorkflowStatus.Approved : x.workflowStatus }));\n\n return { ...model, versions };\n }\n const models = state.models.map(x => updateModel(x));\n const selectedModel = updateModel(state.selectedModel!);\n const selectedModelVersion = { ...state.selectedModelVersion, workflowStatus: ModelWorkflowStatus.Approved };\n\n return { ...state, models, selectedModel: selectedModel, selectedModelVersion: selectedModelVersion, selectedModelDownloadUrl: \"\" }\n }\n\n case \"SET_MODEL_FORGE_PERCENTAGE\": {\n const models: Model3D[] = state\n .models\n .map(x => {\n if (x.versions[0].id !== action.modelId)\n return x;\n\n const model: IModel3DVersion = { ...x.versions[0], forgePercentage: action.percentage, forgeStatus: action.forgeStatus };\n\n return { ...x, versions: [model] };\n });\n\n return { ...state, models };\n }\n\n case \"SET_MODEL_COMPLETED\": {\n const models: Model3D[] = state\n .models\n .map(x => {\n if (x.versions[0].id !== action.modelId)\n return x;\n\n const model: IModel3DVersion = { ...x.versions[0], status: ModelTranslationStatus.Ready };\n\n return { ...x, versions: [model] };\n });\n\n return { ...state, models };\n }\n\n case \"SET_MODEL_FAILED\": {\n const models = state\n .models\n .map(x => {\n if (x.versions[0].id !== action.modelId)\n return x;\n\n const model: IModel3DVersion = { ...x.versions[0], status: ModelTranslationStatus.Failed, forgeStatus: action.forgeStatus };\n\n return { ...x, versions: [model] };\n });\n\n return { ...state, models };\n }\n\n case \"TOGGLE_HIGH_LOD_MODE\": {\n return { ...state, highLodViewer: !!action.mode }\n }\n\n case \"SET_SELECTED_MODEL_DOWNLOAD_URL\": {\n return { ...state, selectedModelDownloadUrl: action.value }\n }\n\n case \"SET_ENGINEERING_PRODUCTION_MODELS\": {\n return { ...state, engineeringProductionModels: action.models, selectedEngineerindProductionModel: null }\n }\n\n case \"SET_SELECTED_ENGINEERING_PRODUCTION_MODEL\": {\n return { ...state, selectedEngineerindProductionModel: state.engineeringProductionModels.find(x => x.id === action.modelId) || null }\n }\n\n case \"SET_MODEL_VERSION_NAME\": {\n if (!state.selectedModel) return state;\n\n const updatedVersions = state.selectedModel.versions.map(version =>\n version.id === action.versionId ? { ...version, optionName: action.newName } : version\n );\n\n const updatedSelectedModel = { ...state.selectedModel, versions: updatedVersions };\n\n const updatedSelectedModelVersion = updatedVersions.find(v => v.id === action.versionId) || null;\n\n return {\n ...state,\n selectedModel: updatedSelectedModel,\n selectedModelVersion: updatedSelectedModelVersion\n };\n }\n\n case \"SET_MODELS_LOADING\": {\n return { ...state, modelsLoading: action.isLoading };\n }\n\n case \"SET_ENGINEERING_MODELS_LOADING\": {\n return { ...state, engineeringModelsLoading: action.isLoading };\n }\n\n case \"SET_MODEL_NAME\": {\n const updatedModels = state.models.map((model) => {\n if (model.id === action.modelId) {\n return { ...model, name: action.newName };\n }\n return model;\n });\n \n const updatedSelectedModel = state.selectedModel && state.selectedModel.id === action.modelId\n ? { ...state.selectedModel, name: action.newName }\n : state.selectedModel;\n \n return {\n ...state,\n models: updatedModels,\n selectedModel: updatedSelectedModel,\n };\n }\n\n default:\n return state;\n }\n}\n\nconst removeCurrentModel = (state: State): State => {\n if (!state.selectedModel)\n return state;\n\n const models = state.models.filter(x => x.id !== state.selectedModel?.id);\n\n const selectedModel = models.find(x => x) || null;\n\n if (selectedModel?.versions[0].status === ModelTranslationStatus.Created)\n return { ...state, models: models, selectedModel: null, selectedModelVersion: null };\n\n const selectedModelVersion = selectedModel && selectedModel.versions[0] || null;\n\n return { ...state, models, selectedModel, selectedModelVersion, highLodViewer: false, selectedModelDownloadUrl: \"\" }\n}","import { ProjectActionType } from '../actions/projectsActions';\nimport { IProject, SystemType } from '../components/project';\nimport { guid } from \"@dextall/shared\";\n\nexport type Project = IProject & { isTemporary?: boolean, isDirty?: boolean, isNew?: boolean }\n\nexport type State = {\n projects: Project[];\n currentProject: Project | null;\n editingProjectCopy: Project | null;\n projectsInitialized: boolean;\n showInfo: boolean,\n showSettings: boolean,\n}\n\nexport const initialState: State = {\n projects: [],\n currentProject: null,\n editingProjectCopy: null,\n projectsInitialized: false,\n showInfo: false,\n showSettings: false,\n}\n\nexport const getProjects = function (state: State) {\n return state.projects;\n}\n\nexport const getCurrentProject = function (state: State) {\n return state.currentProject;\n}\n\nexport const isCurrentProjectInEditMode = function (state: State) {\n return !!state.currentProject?.isDirty;\n}\n\nexport const areProjectsInitialized = function (state: State) {\n return state.projectsInitialized;\n}\n\nexport default function (state = initialState, action: ProjectActionType): State {\n switch (action.type) {\n case \"SET_PROJECTS\": {\n return { ...state, projects: action.projects, editingProjectCopy: null, projectsInitialized: true };\n }\n\n case \"CURRENT_PROJECT\": {\n return { ...state, currentProject: action.project, editingProjectCopy: null };\n }\n\n case \"CREATE_NEW_PROJECT\": {\n const newProject: Project = {\n id: guid(),\n name: \"My new project\",\n postalCode: \"\",\n address: \"\",\n author: \"\",\n buildingName: \"\",\n clientName: \"\",\n issueDate: \"\",\n organizationName: \"\",\n organizationDescription: \"\",\n isNew: true,\n isDirty: true,\n isTemporary: true,\n createdAt: \"\",\n description: \"\",\n location: null,\n number: \"\",\n systemType: SystemType.Snowman,\n userName: \"\",\n margin: 30,\n insulatedGlassUnitValuesPreferences: null,\n selectedInsulatedGlassUnit: action.insulatedGlassUnit,\n duties: 5,\n taxRate: 6.25\n }\n\n const projects = [...state.projects];\n\n projects.push(newProject);\n\n return { ...state, projects: projects, currentProject: newProject, editingProjectCopy: null };\n }\n\n case \"EDIT_CURRENT_PROJECT\": {\n if (!state.currentProject)\n return state;\n\n const projectCopy = action.mode ? { ...state.currentProject } : null;\n\n const currentProject = { ...state.currentProject, isDirty: action.mode };\n\n if (!action.mode)\n currentProject.isNew = false;\n\n const projects = [...state.projects].map(x => x.id === currentProject.id ? currentProject : x);\n\n return { ...state, projects, currentProject, editingProjectCopy: projectCopy };\n }\n\n case \"CANCEL_EDITING_PROJECT\": {\n if (!state.currentProject)\n return state;\n\n const currentProject = { ...state.currentProject };\n const editingCopy = state.editingProjectCopy;\n\n if (!(currentProject && currentProject.isDirty && (editingCopy || currentProject.isNew)))\n return state;\n\n if (currentProject.isNew) {\n const projects = state.projects.filter(x => x.id !== currentProject.id);\n\n const newCurrentProject = projects.find(x => x) || null;\n\n return { ...state, projects: projects, currentProject: newCurrentProject !== null ? { ...newCurrentProject } : null, editingProjectCopy: null };\n }\n\n if (!editingCopy)\n return state;\n\n currentProject.name = editingCopy.name;\n currentProject.address = editingCopy.address;\n currentProject.author = editingCopy.author;\n currentProject.buildingName = editingCopy.buildingName;\n currentProject.clientName = editingCopy.clientName;\n currentProject.issueDate = editingCopy.issueDate;\n currentProject.organizationName = editingCopy.organizationName;\n currentProject.organizationDescription = editingCopy.organizationDescription;\n currentProject.systemType = editingCopy.systemType;\n currentProject.insulatedGlassUnitValuesPreferences = editingCopy.insulatedGlassUnitValuesPreferences;\n currentProject.selectedInsulatedGlassUnit = editingCopy.selectedInsulatedGlassUnit;\n currentProject.isDirty = false;\n\n const projects = [...state.projects].map(x => x.id === currentProject.id ? currentProject : x);\n\n return { ...state, projects, currentProject, editingProjectCopy: null };\n }\n\n case \"UPDATE_PROJECT\": {\n const projects = state\n .projects\n .map(x => x.id === action.project.id ? action.project : x);\n\n const currentProject = state.currentProject?.id === action.project.id ? action.project : state.currentProject;\n\n return { ...state, projects, currentProject }\n }\n\n case \"CREATE_NEW_PROJECT_SUCCESS\": {\n const newProjects = state.projects.filter(p => !p.isTemporary);\n const updatedProjects = [...newProjects, { ...action.project, isTemporary: false }];\n return {\n ...state,\n projects: updatedProjects,\n currentProject: action.project,\n };\n } \n\n case \"CURRENT_PROJECT_REMOVED\": {\n if (!state.currentProject)\n return state;\n\n const projects = [...state.projects].filter(x => x.id !== state.currentProject?.id);\n\n const newCurrentProject = projects.find(x => x) || null;\n\n return { ...state, projects: projects, currentProject: newCurrentProject }\n }\n\n case \"SHOW_INFO_DIAGRAM\": {\n return { ...state, showInfo: action.mode, showSettings: false };\n }\n \n case \"SHOW_SETTINGS_DIAGRAM\": {\n return { ...state, showInfo: false, showSettings: action.mode };\n }\n\n default:\n return state;\n }\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// $FlowFixMe\nfunction sheetForTag(tag) {\n if (tag.sheet) {\n // $FlowFixMe\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 // $FlowFixMe\n return document.styleSheets[i];\n }\n }\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 ? process.env.NODE_ENV === 'production' : 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 (process.env.NODE_ENV !== 'production') {\n var isImportRule = rule.charCodeAt(0) === 64 && rule.charCodeAt(1) === 105;\n\n if (isImportRule && this._alreadyInsertedOrderInsensitiveRule) {\n // this would only cause problem in speedy mode\n // but we don't want enabling speedy to affect the observable behavior\n // so we report this error at all times\n console.error(\"You're attempting to insert the following rule:\\n\" + rule + '\\n\\n`@import` rules must be before all other types of rules in a stylesheet but other rules have already been inserted. Please ensure that `@import` rules are before all other rules.');\n }\n this._alreadyInsertedOrderInsensitiveRule = this._alreadyInsertedOrderInsensitiveRule || !isImportRule;\n }\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 if (process.env.NODE_ENV !== 'production' && !/:(-moz-placeholder|-moz-focus-inner|-moz-focusring|-ms-input-placeholder|-moz-read-write|-moz-read-only|-ms-clear|-ms-expand|-ms-reveal){/.test(rule)) {\n console.error(\"There was a problem inserting the following rule: \\\"\" + rule + \"\\\"\", e);\n }\n }\n } else {\n tag.appendChild(document.createTextNode(rule));\n }\n\n this.ctr++;\n };\n\n _proto.flush = function flush() {\n // $FlowFixMe\n this.tags.forEach(function (tag) {\n return tag.parentNode && tag.parentNode.removeChild(tag);\n });\n this.tags = [];\n this.ctr = 0;\n\n if (process.env.NODE_ENV !== 'production') {\n this._alreadyInsertedOrderInsensitiveRule = false;\n }\n };\n\n return StyleSheet;\n}();\n\nexport { StyleSheet };\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","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","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 {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 { 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, COMMENT, 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 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};\nvar ignoreFlag = 'emotion-disable-server-rendering-unsafe-selector-warning-please-do-not-use-this-the-warning-exists-for-a-reason';\n\nvar isIgnoringComment = function isIgnoringComment(element) {\n return element.type === 'comm' && element.children.indexOf(ignoreFlag) > -1;\n};\n\nvar createUnsafeSelectorsAlarm = function createUnsafeSelectorsAlarm(cache) {\n return function (element, index, children) {\n if (element.type !== 'rule' || cache.compat) return;\n var unsafePseudoClasses = element.value.match(/(:first|:nth|:nth-last)-child/g);\n\n if (unsafePseudoClasses) {\n var isNested = !!element.parent; // in nested rules comments become children of the \"auto-inserted\" rule and that's always the `element.parent`\n //\n // considering this input:\n // .a {\n // .b /* comm */ {}\n // color: hotpink;\n // }\n // we get output corresponding to this:\n // .a {\n // & {\n // /* comm */\n // color: hotpink;\n // }\n // .b {}\n // }\n\n var commentContainer = isNested ? element.parent.children : // global rule at the root level\n children;\n\n for (var i = commentContainer.length - 1; i >= 0; i--) {\n var node = commentContainer[i];\n\n if (node.line < element.line) {\n break;\n } // it is quite weird but comments are *usually* put at `column: element.column - 1`\n // so we seek *from the end* for the node that is earlier than the rule's `element` and check that\n // this will also match inputs like this:\n // .a {\n // /* comm */\n // .b {}\n // }\n //\n // but that is fine\n //\n // it would be the easiest to change the placement of the comment to be the first child of the rule:\n // .a {\n // .b { /* comm */ }\n // }\n // with such inputs we wouldn't have to search for the comment at all\n // TODO: consider changing this comment placement in the next major version\n\n\n if (node.column < element.column) {\n if (isIgnoringComment(node)) {\n return;\n }\n\n break;\n }\n }\n\n unsafePseudoClasses.forEach(function (unsafePseudoClass) {\n console.error(\"The pseudo class \\\"\" + unsafePseudoClass + \"\\\" is potentially unsafe when doing server-side rendering. Try changing it to \\\"\" + unsafePseudoClass.split('-child')[0] + \"-of-type\\\".\");\n });\n }\n };\n};\n\nvar isImportRule = function isImportRule(element) {\n return element.type.charCodeAt(1) === 105 && element.type.charCodeAt(0) === 64;\n};\n\nvar isPrependedWithRegularRules = function isPrependedWithRegularRules(index, children) {\n for (var i = index - 1; i >= 0; i--) {\n if (!isImportRule(children[i])) {\n return true;\n }\n }\n\n return false;\n}; // use this to remove incorrect elements from further processing\n// so they don't get handed to the `sheet` (or anything else)\n// as that could potentially lead to additional logs which in turn could be overhelming to the user\n\n\nvar nullifyElement = function nullifyElement(element) {\n element.type = '';\n element.value = '';\n element[\"return\"] = '';\n element.children = '';\n element.props = '';\n};\n\nvar incorrectImportAlarm = function incorrectImportAlarm(element, index, children) {\n if (!isImportRule(element)) {\n return;\n }\n\n if (element.parent) {\n console.error(\"`@import` rules can't be nested inside other rules. Please move it to the top level and put it before regular rules. Keep in mind that they can only be used within global styles.\");\n nullifyElement(element);\n } else if (isPrependedWithRegularRules(index, children)) {\n console.error(\"`@import` rules can't be after other rules. Please put your `@import` rules before your other rules.\");\n nullifyElement(element);\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 (process.env.NODE_ENV !== 'production' && !key) {\n throw new Error(\"You have to configure `key` for your cache. Please make sure it's unique (and not equal to 'css') as it's used for linking styles to your cache.\\n\" + \"If multiple caches share the same key they might \\\"fight\\\" for each other's style elements.\");\n }\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 document.head.appendChild(node);\n node.setAttribute('data-s', '');\n });\n }\n\n var stylisPlugins = options.stylisPlugins || defaultStylisPlugins;\n\n if (process.env.NODE_ENV !== 'production') {\n // $FlowFixMe\n if (/[^a-z-]/.test(key)) {\n throw new Error(\"Emotion key must only contain lower case alphabetical characters and - but \\\"\" + key + \"\\\" was passed\");\n }\n }\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(' '); // $FlowFixMe\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 if (process.env.NODE_ENV !== 'production') {\n omnipresentPlugins.push(createUnsafeSelectorsAlarm({\n get compat() {\n return cache.compat;\n }\n\n }), incorrectImportAlarm);\n }\n\n {\n var currentSheet;\n var finalizingPlugins = [stringify, process.env.NODE_ENV !== 'production' ? function (element) {\n if (!element.root) {\n if (element[\"return\"]) {\n currentSheet.insert(element[\"return\"]);\n } else if (element.value && element.type !== COMMENT) {\n // insert empty rule in non-production environments\n // so @emotion/jest can grab `key` from the (JS)DOM for caches without any rules inserted yet\n currentSheet.insert(element.value + \"{}\");\n }\n }\n } : 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 if (process.env.NODE_ENV !== 'production' && serialized.map !== undefined) {\n currentSheet = {\n insert: function insert(rule) {\n sheet.insert(rule + serialized.map);\n }\n };\n }\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","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","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 isBrowser = \"object\" !== 'undefined';\nvar hasOwnProperty = {}.hasOwnProperty;\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\nif (process.env.NODE_ENV !== 'production') {\n EmotionCacheContext.displayName = 'EmotionCacheContext';\n}\n\nvar CacheProvider = EmotionCacheContext.Provider;\nvar __unsafe_useEmotionCache = function useEmotionCache() {\n return useContext(EmotionCacheContext);\n};\n\nvar withEmotionCache = function withEmotionCache(func) {\n // $FlowFixMe\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\nif (!isBrowser) {\n withEmotionCache = function withEmotionCache(func) {\n return function (props) {\n var cache = useContext(EmotionCacheContext);\n\n if (cache === null) {\n // yes, we're potentially creating this on every render\n // it doesn't actually matter though since it's only on the server\n // so there will only every be a single render\n // that could change in the future because of suspense and etc. but for now,\n // this works and i don't want to optimise for a future thing that we aren't sure about\n cache = createCache({\n key: 'css'\n });\n return /*#__PURE__*/React.createElement(EmotionCacheContext.Provider, {\n value: cache\n }, func(props, cache));\n } else {\n return func(props, cache);\n }\n };\n };\n}\n\nvar ThemeContext = /* #__PURE__ */React.createContext({});\n\nif (process.env.NODE_ENV !== 'production') {\n ThemeContext.displayName = 'EmotionThemeContext';\n}\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 if (process.env.NODE_ENV !== 'production' && (mergedTheme == null || typeof mergedTheme !== 'object' || Array.isArray(mergedTheme))) {\n throw new Error('[ThemeProvider] Please return an object from your theme function, i.e. theme={() => ({})}!');\n }\n\n return mergedTheme;\n }\n\n if (process.env.NODE_ENV !== 'production' && (theme == null || typeof theme !== 'object' || Array.isArray(theme))) {\n throw new Error('[ThemeProvider] Please make your theme prop a plain object');\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\n var render = 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 }; // $FlowFixMe\n\n\n var WithTheme = /*#__PURE__*/React.forwardRef(render);\n WithTheme.displayName = \"WithTheme(\" + componentName + \")\";\n return hoistNonReactStatics(WithTheme, Component);\n}\n\nvar getLastPart = function getLastPart(functionName) {\n // The match may be something like 'Object.createEmotionProps' or\n // 'Loader.prototype.render'\n var parts = functionName.split('.');\n return parts[parts.length - 1];\n};\n\nvar getFunctionNameFromStackTraceLine = function getFunctionNameFromStackTraceLine(line) {\n // V8\n var match = /^\\s+at\\s+([A-Za-z0-9$.]+)\\s/.exec(line);\n if (match) return getLastPart(match[1]); // Safari / Firefox\n\n match = /^([A-Za-z0-9$.]+)@/.exec(line);\n if (match) return getLastPart(match[1]);\n return undefined;\n};\n\nvar internalReactFunctionNames = /* #__PURE__ */new Set(['renderWithHooks', 'processChild', 'finishClassComponent', 'renderToString']); // These identifiers come from error stacks, so they have to be valid JS\n// identifiers, thus we only need to replace what is a valid character for JS,\n// but not for CSS.\n\nvar sanitizeIdentifier = function sanitizeIdentifier(identifier) {\n return identifier.replace(/\\$/g, '-');\n};\n\nvar getLabelFromStackTrace = function getLabelFromStackTrace(stackTrace) {\n if (!stackTrace) return undefined;\n var lines = stackTrace.split('\\n');\n\n for (var i = 0; i < lines.length; i++) {\n var functionName = getFunctionNameFromStackTraceLine(lines[i]); // The first line of V8 stack traces is just \"Error\"\n\n if (!functionName) continue; // If we reach one of these, we have gone too far and should quit\n\n if (internalReactFunctionNames.has(functionName)) break; // The component name is the first function in the stack that starts with an\n // uppercase letter\n\n if (/^[A-Z]/.test(functionName)) return sanitizeIdentifier(functionName);\n }\n\n return undefined;\n};\n\nvar typePropName = '__EMOTION_TYPE_PLEASE_DO_NOT_USE__';\nvar labelPropName = '__EMOTION_LABEL_PLEASE_DO_NOT_USE__';\nvar createEmotionProps = function createEmotionProps(type, props) {\n if (process.env.NODE_ENV !== 'production' && typeof props.css === 'string' && // check if there is a css declaration\n props.css.indexOf(':') !== -1) {\n throw new Error(\"Strings are not allowed as css prop values, please wrap it in a css template literal from '@emotion/react' like this: css`\" + props.css + \"`\");\n }\n\n var newProps = {};\n\n for (var key in props) {\n if (hasOwnProperty.call(props, key)) {\n newProps[key] = props[key];\n }\n }\n\n newProps[typePropName] = type; // For performance, only call getLabelFromStackTrace in development and when\n // the label hasn't already been computed\n\n if (process.env.NODE_ENV !== 'production' && !!props.css && (typeof props.css !== 'object' || typeof props.css.name !== 'string' || props.css.name.indexOf('-') === -1)) {\n var label = getLabelFromStackTrace(new Error().stack);\n if (label) newProps[labelPropName] = label;\n }\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 if (process.env.NODE_ENV !== 'production' && serialized.name.indexOf('-') === -1) {\n var labelFromStack = props[labelPropName];\n\n if (labelFromStack) {\n serialized = serializeStyles([serialized, 'label:' + labelFromStack + ';']);\n }\n }\n\n className += cache.key + \"-\" + serialized.name;\n var newProps = {};\n\n for (var key in props) {\n if (hasOwnProperty.call(props, key) && key !== 'css' && key !== typePropName && (process.env.NODE_ENV === 'production' || key !== labelPropName)) {\n newProps[key] = props[key];\n }\n }\n\n newProps.ref = ref;\n newProps.className = className;\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\nif (process.env.NODE_ENV !== 'production') {\n Emotion.displayName = 'EmotionCssPropInternal';\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, hasOwnProperty as h, isBrowser as i, useTheme as u, withEmotionCache as w };\n","import { h as hasOwnProperty, E as Emotion, c as createEmotionProps, w as withEmotionCache, T as ThemeContext, i as isBrowser$1 } from './emotion-element-c39617d8.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-c39617d8.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 pkg = {\n\tname: \"@emotion/react\",\n\tversion: \"11.11.1\",\n\tmain: \"dist/emotion-react.cjs.js\",\n\tmodule: \"dist/emotion-react.esm.js\",\n\tbrowser: {\n\t\t\"./dist/emotion-react.esm.js\": \"./dist/emotion-react.browser.esm.js\"\n\t},\n\texports: {\n\t\t\".\": {\n\t\t\tmodule: {\n\t\t\t\tworker: \"./dist/emotion-react.worker.esm.js\",\n\t\t\t\tbrowser: \"./dist/emotion-react.browser.esm.js\",\n\t\t\t\t\"default\": \"./dist/emotion-react.esm.js\"\n\t\t\t},\n\t\t\t\"import\": \"./dist/emotion-react.cjs.mjs\",\n\t\t\t\"default\": \"./dist/emotion-react.cjs.js\"\n\t\t},\n\t\t\"./jsx-runtime\": {\n\t\t\tmodule: {\n\t\t\t\tworker: \"./jsx-runtime/dist/emotion-react-jsx-runtime.worker.esm.js\",\n\t\t\t\tbrowser: \"./jsx-runtime/dist/emotion-react-jsx-runtime.browser.esm.js\",\n\t\t\t\t\"default\": \"./jsx-runtime/dist/emotion-react-jsx-runtime.esm.js\"\n\t\t\t},\n\t\t\t\"import\": \"./jsx-runtime/dist/emotion-react-jsx-runtime.cjs.mjs\",\n\t\t\t\"default\": \"./jsx-runtime/dist/emotion-react-jsx-runtime.cjs.js\"\n\t\t},\n\t\t\"./_isolated-hnrs\": {\n\t\t\tmodule: {\n\t\t\t\tworker: \"./_isolated-hnrs/dist/emotion-react-_isolated-hnrs.worker.esm.js\",\n\t\t\t\tbrowser: \"./_isolated-hnrs/dist/emotion-react-_isolated-hnrs.browser.esm.js\",\n\t\t\t\t\"default\": \"./_isolated-hnrs/dist/emotion-react-_isolated-hnrs.esm.js\"\n\t\t\t},\n\t\t\t\"import\": \"./_isolated-hnrs/dist/emotion-react-_isolated-hnrs.cjs.mjs\",\n\t\t\t\"default\": \"./_isolated-hnrs/dist/emotion-react-_isolated-hnrs.cjs.js\"\n\t\t},\n\t\t\"./jsx-dev-runtime\": {\n\t\t\tmodule: {\n\t\t\t\tworker: \"./jsx-dev-runtime/dist/emotion-react-jsx-dev-runtime.worker.esm.js\",\n\t\t\t\tbrowser: \"./jsx-dev-runtime/dist/emotion-react-jsx-dev-runtime.browser.esm.js\",\n\t\t\t\t\"default\": \"./jsx-dev-runtime/dist/emotion-react-jsx-dev-runtime.esm.js\"\n\t\t\t},\n\t\t\t\"import\": \"./jsx-dev-runtime/dist/emotion-react-jsx-dev-runtime.cjs.mjs\",\n\t\t\t\"default\": \"./jsx-dev-runtime/dist/emotion-react-jsx-dev-runtime.cjs.js\"\n\t\t},\n\t\t\"./package.json\": \"./package.json\",\n\t\t\"./types/css-prop\": \"./types/css-prop.d.ts\",\n\t\t\"./macro\": {\n\t\t\ttypes: {\n\t\t\t\t\"import\": \"./macro.d.mts\",\n\t\t\t\t\"default\": \"./macro.d.ts\"\n\t\t\t},\n\t\t\t\"default\": \"./macro.js\"\n\t\t}\n\t},\n\ttypes: \"types/index.d.ts\",\n\tfiles: [\n\t\t\"src\",\n\t\t\"dist\",\n\t\t\"jsx-runtime\",\n\t\t\"jsx-dev-runtime\",\n\t\t\"_isolated-hnrs\",\n\t\t\"types/*.d.ts\",\n\t\t\"macro.*\"\n\t],\n\tsideEffects: false,\n\tauthor: \"Emotion Contributors\",\n\tlicense: \"MIT\",\n\tscripts: {\n\t\t\"test:typescript\": \"dtslint types\"\n\t},\n\tdependencies: {\n\t\t\"@babel/runtime\": \"^7.18.3\",\n\t\t\"@emotion/babel-plugin\": \"^11.11.0\",\n\t\t\"@emotion/cache\": \"^11.11.0\",\n\t\t\"@emotion/serialize\": \"^1.1.2\",\n\t\t\"@emotion/use-insertion-effect-with-fallbacks\": \"^1.0.1\",\n\t\t\"@emotion/utils\": \"^1.2.1\",\n\t\t\"@emotion/weak-memoize\": \"^0.3.1\",\n\t\t\"hoist-non-react-statics\": \"^3.3.1\"\n\t},\n\tpeerDependencies: {\n\t\treact: \">=16.8.0\"\n\t},\n\tpeerDependenciesMeta: {\n\t\t\"@types/react\": {\n\t\t\toptional: true\n\t\t}\n\t},\n\tdevDependencies: {\n\t\t\"@definitelytyped/dtslint\": \"0.0.112\",\n\t\t\"@emotion/css\": \"11.11.0\",\n\t\t\"@emotion/css-prettifier\": \"1.1.3\",\n\t\t\"@emotion/server\": \"11.11.0\",\n\t\t\"@emotion/styled\": \"11.11.0\",\n\t\t\"html-tag-names\": \"^1.1.2\",\n\t\treact: \"16.14.0\",\n\t\t\"svg-tag-names\": \"^1.1.1\",\n\t\ttypescript: \"^4.5.5\"\n\t},\n\trepository: \"https://github.com/emotion-js/emotion/tree/main/packages/react\",\n\tpublishConfig: {\n\t\taccess: \"public\"\n\t},\n\t\"umd:main\": \"dist/emotion-react.umd.min.js\",\n\tpreconstruct: {\n\t\tentrypoints: [\n\t\t\t\"./index.js\",\n\t\t\t\"./jsx-runtime.js\",\n\t\t\t\"./jsx-dev-runtime.js\",\n\t\t\t\"./_isolated-hnrs.js\"\n\t\t],\n\t\tumdName: \"emotionReact\",\n\t\texports: {\n\t\t\tenvConditions: [\n\t\t\t\t\"browser\",\n\t\t\t\t\"worker\"\n\t\t\t],\n\t\t\textra: {\n\t\t\t\t\"./types/css-prop\": \"./types/css-prop.d.ts\",\n\t\t\t\t\"./macro\": {\n\t\t\t\t\ttypes: {\n\t\t\t\t\t\t\"import\": \"./macro.d.mts\",\n\t\t\t\t\t\t\"default\": \"./macro.d.ts\"\n\t\t\t\t\t},\n\t\t\t\t\t\"default\": \"./macro.js\"\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n};\n\nvar jsx = function jsx(type, props) {\n var args = arguments;\n\n if (props == null || !hasOwnProperty.call(props, 'css')) {\n // $FlowFixMe\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 } // $FlowFixMe\n\n\n return React.createElement.apply(null, createElementArgArray);\n};\n\nvar warnedAboutCssPropForGlobal = false; // maintain place over rerenders.\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 if (process.env.NODE_ENV !== 'production' && !warnedAboutCssPropForGlobal && ( // check for className as well since the user is\n // probably using the custom createElement which\n // means it will be turned into a className prop\n // $FlowFixMe I don't really want to add it to the type since it shouldn't be used\n props.className || props.css)) {\n console.error(\"It looks like you're using the css prop on Global, did you mean to use the styles prop instead?\");\n warnedAboutCssPropForGlobal = true;\n }\n\n var styles = props.styles;\n var serialized = serializeStyles([styles], undefined, React.useContext(ThemeContext));\n\n if (!isBrowser$1) {\n var _ref;\n\n var serializedNames = serialized.name;\n var serializedStyles = serialized.styles;\n var next = serialized.next;\n\n while (next !== undefined) {\n serializedNames += ' ' + next.name;\n serializedStyles += next.styles;\n next = next.next;\n }\n\n var shouldCache = cache.compat === true;\n var rules = cache.insert(\"\", {\n name: serializedNames,\n styles: serializedStyles\n }, cache.sheet, shouldCache);\n\n if (shouldCache) {\n return null;\n }\n\n return /*#__PURE__*/React.createElement(\"style\", (_ref = {}, _ref[\"data-emotion\"] = cache.key + \"-global \" + serializedNames, _ref.dangerouslySetInnerHTML = {\n __html: rules\n }, _ref.nonce = cache.sheet.nonce, _ref));\n } // yes, i know these hooks are used conditionally\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; // $FlowFixMe\n\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 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\nif (process.env.NODE_ENV !== 'production') {\n Global.displayName = 'EmotionGlobal';\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\nvar keyframes = function keyframes() {\n var insertable = css.apply(void 0, arguments);\n var name = \"animation-\" + insertable.name; // $FlowFixMe\n\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 if (process.env.NODE_ENV !== 'production' && arg.styles !== undefined && arg.name !== undefined) {\n console.error('You have passed styles created with `css` from `@emotion/react` package to the `cx`.\\n' + '`cx` is meant to compose class names (strings) so you should convert those styles to a class name by passing them to the `css` received from component.');\n }\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 && process.env.NODE_ENV !== 'production') {\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 && process.env.NODE_ENV !== 'production') {\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\nif (process.env.NODE_ENV !== 'production') {\n ClassNames.displayName = 'EmotionClassNames';\n}\n\nif (process.env.NODE_ENV !== 'production') {\n var isBrowser = \"object\" !== 'undefined'; // #1727, #2905 for some reason Jest and Vitest evaluate modules twice if some consuming module gets mocked\n\n var isTestEnv = typeof jest !== 'undefined' || typeof vi !== 'undefined';\n\n if (isBrowser && !isTestEnv) {\n // globalThis has wide browser support - https://caniuse.com/?search=globalThis, Node.js 12 and later\n var globalContext = // $FlowIgnore\n typeof globalThis !== 'undefined' ? globalThis // eslint-disable-line no-undef\n : isBrowser ? window : global;\n var globalKey = \"__EMOTION_REACT_\" + pkg.version.split('.')[0] + \"__\";\n\n if (globalContext[globalKey]) {\n console.warn('You are loading @emotion/react when it is already loaded. Running ' + 'multiple instances may cause problems. This can happen if multiple ' + 'versions are used, or if multiple builds of the same version are ' + 'used.');\n }\n\n globalContext[globalKey] = true;\n }\n}\n\nexport { ClassNames, Global, jsx as createElement, css, jsx, keyframes };\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 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","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 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\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;\\n{]+)\\s*(;|$)/g;\n// keyframes are stored on the SerializedStyles object as a linked list\n\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 }\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","/* 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","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","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 {\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","\"use strict\";\n\"use client\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\nvar _jsxRuntime = require(\"react/jsx-runtime\");\nvar _default = exports.default = (0, _createSvgIcon.default)( /*#__PURE__*/(0, _jsxRuntime.jsx)(\"path\", {\n d: \"M16.5 6v11.5c0 2.21-1.79 4-4 4s-4-1.79-4-4V5c0-1.38 1.12-2.5 2.5-2.5s2.5 1.12 2.5 2.5v10.5c0 .55-.45 1-1 1s-1-.45-1-1V6H10v9.5c0 1.38 1.12 2.5 2.5 2.5s2.5-1.12 2.5-2.5V5c0-2.21-1.79-4-4-4S7 2.79 7 5v12.5c0 3.04 2.46 5.5 5.5 5.5s5.5-2.46 5.5-5.5V6z\"\n}), 'AttachFile');","\"use strict\";\n\"use client\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\nvar _jsxRuntime = require(\"react/jsx-runtime\");\nvar _default = exports.default = (0, _createSvgIcon.default)( /*#__PURE__*/(0, _jsxRuntime.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 strict\";\n\"use client\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\nvar _jsxRuntime = require(\"react/jsx-runtime\");\nvar _default = exports.default = (0, _createSvgIcon.default)( /*#__PURE__*/(0, _jsxRuntime.jsx)(\"path\", {\n d: \"M16.59 8.59 12 13.17 7.41 8.59 6 10l6 6 6-6z\"\n}), 'ExpandMore');","\"use strict\";\n\"use client\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\nvar _jsxRuntime = require(\"react/jsx-runtime\");\nvar _default = exports.default = (0, _createSvgIcon.default)( /*#__PURE__*/(0, _jsxRuntime.jsx)(\"path\", {\n d: \"M21 6h-2v9H6v2c0 .55.45 1 1 1h11l4 4V7c0-.55-.45-1-1-1m-4 6V3c0-.55-.45-1-1-1H3c-.55 0-1 .45-1 1v14l4-4h10c.55 0 1-.45 1-1\"\n}), 'QuestionAnswer');","\"use strict\";\n\"use client\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\nvar _jsxRuntime = require(\"react/jsx-runtime\");\nvar _default = exports.default = (0, _createSvgIcon.default)( /*#__PURE__*/(0, _jsxRuntime.jsx)(\"path\", {\n d: \"M2.01 21 23 12 2.01 3 2 10l15 2-15 2z\"\n}), 'Send');","\"use strict\";\n'use client';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nObject.defineProperty(exports, \"default\", {\n enumerable: true,\n get: function () {\n return _utils.createSvgIcon;\n }\n});\nvar _utils = require(\"@mui/material/utils\");","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 `` component manages a set of transition components\n * (`` and ``) in a list. Like with the transition\n * components, `` 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 ``.\n *\n * Note that `` 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 * `` renders a `
` 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 `
` 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 `` components, that are toggled `in` and out as they\n * leave. the `` will inject specific transition props, so\n * remember to spread them through if you are wrapping the `` as\n * with our `` 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;","export default function _assertThisInitialized(self) {\n if (self === void 0) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n return self;\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 = {\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 _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/esm/objectWithoutPropertiesLoose\";\nconst _excluded = [\"center\", \"classes\", \"className\"];\nlet _ = t => t,\n _t,\n _t2,\n _t3,\n _t4;\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport { TransitionGroup } from 'react-transition-group';\nimport clsx from 'clsx';\nimport { keyframes } from '@mui/system';\nimport useTimeout from '@mui/utils/useTimeout';\nimport styled from '../styles/styled';\nimport { useDefaultProps } from '../DefaultPropsProvider';\nimport Ripple from './Ripple';\nimport touchRippleClasses from './touchRippleClasses';\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nconst DURATION = 550;\nexport const DELAY_RIPPLE = 80;\nconst enterKeyframe = keyframes(_t || (_t = _`\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(_t2 || (_t2 = _`\n 0% {\n opacity: 1;\n }\n\n 100% {\n opacity: 0;\n }\n`));\nconst pulsateKeyframe = keyframes(_t3 || (_t3 = _`\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})(_t4 || (_t4 = _`\n opacity: 0;\n position: absolute;\n\n &.${0} {\n opacity: 0.3;\n transform: scale(1);\n animation-name: ${0};\n animation-duration: ${0}ms;\n animation-timing-function: ${0};\n }\n\n &.${0} {\n animation-duration: ${0}ms;\n }\n\n & .${0} {\n opacity: 1;\n display: block;\n width: 100%;\n height: 100%;\n border-radius: 50%;\n background-color: currentColor;\n }\n\n & .${0} {\n opacity: 0;\n animation-name: ${0};\n animation-duration: ${0}ms;\n animation-timing-function: ${0};\n }\n\n & .${0} {\n position: absolute;\n /* @noflip */\n left: 0px;\n top: 0;\n animation-name: ${0};\n animation-duration: 2500ms;\n animation-timing-function: ${0};\n animation-iteration-count: infinite;\n animation-delay: 200ms;\n }\n`), touchRippleClasses.rippleVisible, enterKeyframe, DURATION, ({\n theme\n}) => theme.transitions.easing.easeInOut, touchRippleClasses.ripplePulsate, ({\n theme\n}) => theme.transitions.duration.shorter, touchRippleClasses.child, touchRippleClasses.childLeaving, exitKeyframe, DURATION, ({\n theme\n}) => theme.transitions.easing.easeInOut, touchRippleClasses.childPulsate, pulsateKeyframe, ({\n theme\n}) => theme.transitions.easing.easeInOut);\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 } = props,\n other = _objectWithoutPropertiesLoose(props, _excluded);\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 == null ? void 0 : event.type) === 'mousedown' && ignoringMouseDown.current) {\n ignoringMouseDown.current = false;\n return;\n }\n if ((event == null ? void 0 : 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 // Touche devices\n if (event != null && 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 == null ? void 0 : 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, _extends({\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 = {\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 _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/esm/objectWithoutPropertiesLoose\";\nconst _excluded = [\"action\", \"centerRipple\", \"children\", \"className\", \"component\", \"disabled\", \"disableRipple\", \"disableTouchRipple\", \"focusRipple\", \"focusVisibleClassName\", \"LinkComponent\", \"onBlur\", \"onClick\", \"onContextMenu\", \"onDragLeave\", \"onFocus\", \"onFocusVisible\", \"onKeyDown\", \"onKeyUp\", \"onMouseDown\", \"onMouseLeave\", \"onMouseUp\", \"onTouchEnd\", \"onTouchMove\", \"onTouchStart\", \"tabIndex\", \"TouchRippleProps\", \"touchRippleRef\", \"type\"];\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 styled from '../styles/styled';\nimport { useDefaultProps } from '../DefaultPropsProvider';\nimport useForkRef from '../utils/useForkRef';\nimport useEventCallback from '../utils/useEventCallback';\nimport useIsFocusVisible from '../utils/useIsFocusVisible';\nimport TouchRipple from './TouchRipple';\nimport buttonBaseClasses, { getButtonBaseUtilityClass } from './buttonBaseClasses';\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nimport { 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 overridesResolver: (props, styles) => styles.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 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 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 } = props,\n other = _objectWithoutPropertiesLoose(props, _excluded);\n const buttonRef = React.useRef(null);\n const rippleRef = React.useRef(null);\n const handleRippleRef = useForkRef(rippleRef, touchRippleRef);\n const {\n isFocusVisibleRef,\n onFocus: handleFocusVisible,\n onBlur: handleBlurVisible,\n ref: focusVisibleRef\n } = useIsFocusVisible();\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 [mountedState, setMountedState] = React.useState(false);\n React.useEffect(() => {\n setMountedState(true);\n }, []);\n const enableTouchRipple = mountedState && !disableRipple && !disabled;\n React.useEffect(() => {\n if (focusVisible && focusRipple && !disableRipple && mountedState) {\n rippleRef.current.pulsate();\n }\n }, [disableRipple, focusRipple, focusVisible, mountedState]);\n function useRippleHandler(rippleAction, eventCallback, skipRippleAction = disableTouchRipple) {\n return useEventCallback(event => {\n if (eventCallback) {\n eventCallback(event);\n }\n const ignore = skipRippleAction;\n if (!ignore && rippleRef.current) {\n rippleRef.current[rippleAction](event);\n }\n return true;\n });\n }\n const handleMouseDown = useRippleHandler('start', onMouseDown);\n const handleContextMenu = useRippleHandler('stop', onContextMenu);\n const handleDragLeave = useRippleHandler('stop', onDragLeave);\n const handleMouseUp = useRippleHandler('stop', onMouseUp);\n const handleMouseLeave = useRippleHandler('stop', event => {\n if (focusVisible) {\n event.preventDefault();\n }\n if (onMouseLeave) {\n onMouseLeave(event);\n }\n });\n const handleTouchStart = useRippleHandler('start', onTouchStart);\n const handleTouchEnd = useRippleHandler('stop', onTouchEnd);\n const handleTouchMove = useRippleHandler('stop', onTouchMove);\n const handleBlur = useRippleHandler('stop', event => {\n handleBlurVisible(event);\n if (isFocusVisibleRef.current === false) {\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 handleFocusVisible(event);\n if (isFocusVisibleRef.current === true) {\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 return component && component !== 'button' && !(button.tagName === 'A' && button.href);\n };\n\n /**\n * IE11 shim for https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/repeat\n */\n const keydownRef = React.useRef(false);\n const handleKeyDown = useEventCallback(event => {\n // Check if key is already down to avoid repeats being counted as multiple activations\n if (focusRipple && !keydownRef.current && focusVisible && rippleRef.current && event.key === ' ') {\n keydownRef.current = true;\n rippleRef.current.stop(event, () => {\n rippleRef.current.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