@telia-ace/widget-types-grid 1.0.22 → 1.0.24

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../src/ui/determine-slide-direction.ts","../src/ui/switch.tsx","../src/ui/animated-view.tsx","../src/ui/view.tsx","../src/ui/styles.ts","../src/ui/resolvable-component.tsx","../src/ui/use-component-node-properties.ts","../src/ui/component.tsx","../src/ui/detached-component.tsx","../src/ui/not-found.tsx","../src/ui/html-element-handlers.ts","../src/ui/prepare-dom.ts","../src/ui/view-outlet.ts","../src/component-platform-factory.ts","../src/site-provider.ts","../src/services.ts","../src/widget.ts"],"sourcesContent":["export enum SlideDirection {\n back = 'back',\n forth = 'forth',\n}\n\nexport interface RouteStructure {\n name: string;\n children: RouteStructure[];\n}\n\n/**\n * Recursively find the parents of a nested route\n * @param routeName Name of route to find\n * @param routes Routes to look in\n * @param trail Trail of parents\n * @param level Level of the array currently looking in\n */\nexport const findParentRoutes = (\n routeName: string,\n routes: RouteStructure[],\n trail: string[] = [],\n level: number = 0\n): string[] | null => {\n let found: any = null;\n\n routes.forEach((route, index) => {\n if (!found) {\n if (route.name === routeName) {\n found = route;\n } else {\n trail[level] = route.name;\n found = findParentRoutes(routeName, route.children, trail, level + 1);\n }\n }\n });\n\n if (!found) {\n return null;\n }\n\n return trail;\n};\n\n/**\n * Determine if the sliding animation should back or forth\n * @param currentRouteName Name of current route\n * @param nextRouteName Name of route to transition to\n * @param routeRanking Hierarchical route ranking for the widget\n */\nexport const determineSlideDirection = (\n currentRouteName: string,\n nextRouteName: string,\n routeRanking: RouteRanking\n): SlideDirection => {\n if (\n typeof routeRanking[currentRouteName] === 'number' &&\n typeof routeRanking[nextRouteName] === 'number' &&\n routeRanking[currentRouteName] > routeRanking[nextRouteName]\n ) {\n return SlideDirection.back;\n }\n return SlideDirection.forth;\n};\n\nexport type RouteRanking = { [key: string]: number };\n","import { ViewDefinition } from '@telia-ace/widget-core';\nimport React from 'react';\nimport { Route, Switch as RouteSwitch } from 'react-router';\n\ntype Props = {\n location?: any;\n views: { [key: string]: ViewDefinition };\n render: (viewName: string) => JSX.Element | null;\n};\n\nconst Switch: React.FC<Props> = ({ views, location, render }) => {\n return (\n <RouteSwitch\n location={\n location\n ? {\n ...location,\n pathname: location.pathname.split('?')[0],\n }\n : location\n }\n >\n {[\n ...Object.keys(views).filter((key) => !!views[key].path),\n ...Object.keys(views).filter((key) => !views[key].path),\n ].map((name) => {\n const { path } = views[name];\n\n if (!path) {\n return <Route key={name} render={() => render(name)} />;\n }\n\n if (Array.isArray(path)) {\n return path.map((path: string) => (\n <Route key={name} exact path={path} render={() => render(name)} />\n ));\n }\n return <Route key={name} exact path={path} render={() => render(name)} />;\n })}\n </RouteSwitch>\n );\n};\n\nexport default Switch;\n","import { WidgetSettings } from '@telia-ace/widget-core';\nimport {\n Grid,\n transitionComposer,\n useComponentNode,\n useContainer,\n useContext,\n useProperties,\n useRouteData,\n useRouter,\n useScroll,\n} from '@telia-ace/widget-ui';\nimport { appendClassNames } from '@telia-ace/widget-utilities';\nimport React, { useState } from 'react';\nimport { Transition, TransitionGroup } from 'react-transition-group';\nimport { TransitionStatus } from 'react-transition-group/Transition';\nimport styled from 'styled-components';\nimport Component from './component';\nimport { determineSlideDirection, RouteRanking, SlideDirection } from './determine-slide-direction';\nimport Switch from './switch';\n\ntype Props = {\n className?: string;\n};\n\nconst StyledViewContainer = styled.div`\n position: relative;\n width: 100%;\n flex: 1;\n`;\n\nconst StyledView = styled(Grid)<{ scrollableCss?: any; animationCss?: any }>`\n position: absolute;\n left: 0;\n right: 0;\n ${(p) => !!p.animationCss && p.animationCss}\n ${(p) => !!p.scrollableCss && p.scrollableCss}\n`;\n\nconst routeHierarchy: RouteRanking = {\n index: 1,\n search: 2,\n browse: 3,\n guide: 4,\n contact: 5,\n 'contact-method': 6,\n conversation: 7,\n};\n\nconst AnimatedView: React.FC<Props> = ({ className = '', ...other }) => {\n const [routeName, setRouteName] = useState('index');\n const [transitionDirection, setTransitionDirection] = useState(SlideDirection.forth);\n const nextRoute = useRouteData();\n const router = useRouter();\n\n const properties = useProperties();\n const context = useContext();\n const container = useContainer();\n const node = useComponentNode();\n\n const { gap = '0' } = context;\n const { columns = 1, animation = 'none', scrollable = false, ...areaProperties } = properties;\n\n const [scrollableCss, elem] = useScroll(scrollable);\n\n if (!node || !router) {\n return null;\n }\n\n const { location } = router;\n\n if (nextRoute.name !== routeName && nextRoute.name !== '' && animation) {\n setTransitionDirection(determineSlideDirection(routeName, nextRoute.name, routeHierarchy));\n setRouteName(nextRoute.name);\n }\n\n const { views }: WidgetSettings = container.get('$settings');\n\n if (!Object.keys(views).length) {\n return null;\n }\n\n const renderView = (name: string, transitionState?: any, direction?: SlideDirection) => {\n const animationStyles = getAnimation(transitionState, direction);\n const childNode = node.getChildren(name)[0];\n\n return (\n <StyledView\n {...other}\n {...areaProperties}\n scrollableCss={scrollableCss}\n ref={elem}\n columns={columns}\n gap={gap}\n {...animationStyles}\n className={appendClassNames(className, 'humany-view')}\n >\n <Component id={childNode.id} branch=\"default\" />\n </StyledView>\n );\n };\n\n const getAnimation = (transitionState?: any, direction?: SlideDirection) => {\n if (animation === 'slide' || animation === 'fade') {\n return {\n animationCss: transitionComposer.composeViewTransition(\n transitionState,\n animation,\n direction\n ),\n ['data-state']: transitionState,\n };\n }\n return;\n };\n\n return (\n <StyledViewContainer className=\"humany-animated-view\">\n <TransitionGroup\n component={null}\n childFactory={(child) =>\n React.cloneElement(child, { direction: transitionDirection })\n }\n >\n <Transition\n key={routeName}\n timeout={{ enter: 500, exit: 500 }}\n onEnter={(node: HTMLElement) => node?.clientHeight}\n unmountOnExit={true}\n direction={SlideDirection.forth}\n >\n {(state: TransitionStatus, { direction }: { direction: SlideDirection }) => (\n <Switch\n views={views}\n location={location}\n render={(name) => renderView(name, state, direction)}\n />\n )}\n </Transition>\n </TransitionGroup>\n </StyledViewContainer>\n );\n};\n\nexport default AnimatedView;\n","import { WidgetSettings } from '@telia-ace/widget-core';\nimport {\n Grid,\n useComponentNode,\n useContainer,\n useContext,\n useProperties,\n useScroll,\n} from '@telia-ace/widget-ui';\nimport { appendClassNames } from '@telia-ace/widget-utilities';\nimport React from 'react';\nimport styled from 'styled-components';\nimport Component from './component';\nimport Switch from './switch';\n\ntype Props = {\n className?: string;\n};\n\nconst StyledView = styled(Grid)<{ scrollableCss?: string }>`\n ${(p) => !!p.scrollableCss && p.scrollableCss}\n`;\n\nconst View: React.FC<Props> = ({ className = '', ...other }) => {\n const properties = useProperties();\n const context = useContext();\n const container = useContainer();\n const node = useComponentNode();\n\n const { views }: WidgetSettings = container.get('$settings');\n\n const { gap = '0' } = context;\n const { columns = 1, animation = 'none', scrollable = false, ...areaProperties } = properties;\n\n const [scrollableCss, elem] = useScroll(scrollable);\n\n if (!node) {\n return null;\n }\n\n return (\n <StyledView\n {...other}\n {...areaProperties}\n scrollableCss={scrollableCss}\n ref={elem}\n columns={columns}\n gap={gap}\n className={appendClassNames(className, 'humany-view')}\n >\n <Switch\n views={views}\n render={(name) => {\n const childNode = node.getChildren(name)[0];\n return <Component id={childNode.id} node={childNode} branch=\"default\" />;\n }}\n />\n </StyledView>\n );\n};\n\nexport default View;\n","import { paddedBorderTabStyle } from '@telia-ace/widget-ui';\nimport styled, { css } from 'styled-components';\nimport AnimatedView from './animated-view';\nimport View from './view';\n\nexport const styling = css<{\n 'data-width': number;\n 'data-indent': number;\n}>`\n outline: none;\n box-sizing: border-box;\n * {\n ${(p) => !p.theme.accessibility?.isTabbing && 'outline: none;'}\n box-sizing: border-box;\n }\n\n grid-column: ${(p) =>\n p['data-indent']\n ? `${p['data-indent'] + 1} / ${p['data-indent'] + p['data-width'] + 1}`\n : `span ${p['data-width']}`};\n\n ${(p) =>\n p.theme.fonts?.type &&\n `\n font-family: ${p.theme.fonts.type};\n\n input, textarea {\n font-family: ${p.theme.fonts.type};\n }\n `}\n\n ${(p) =>\n p.theme.fonts?.base &&\n `\n font-size: ${p.theme.fonts.base};\n `}\n\n &:focus {\n ${(p: any) => p.theme.accessibility?.isTabbing && paddedBorderTabStyle};\n }\n`;\n\nexport const StyledView = styled(View)`\n ${styling}\n`;\n\nexport const StyledAnimatedView = styled(AnimatedView)`\n ${styling}\n`;\n","import {\n filterCssPropsStyle,\n Typography,\n useComponent,\n useComponentDescriptor,\n} from '@telia-ace/widget-ui';\nimport { appendClassNames } from '@telia-ace/widget-utilities';\nimport React, { forwardRef, Suspense, useMemo } from 'react';\nimport styled, { css } from 'styled-components';\nimport { styling } from './styles';\n\ntype Props = {\n role?: string;\n className?: string;\n};\n\nconst NonResolvedComponentWrapper = styled.div<any>`\n text-align: center;\n ${(p) =>\n typeof p.theme.colors?.warning !== 'undefined' &&\n css`\n color: ${p.theme.colors?.warning};\n border: 2px dashed ${p.theme.colors?.warning};\n `}\n ${(p) =>\n typeof p.theme.borderRadius !== 'undefined' && `border-radius: ${p.theme.borderRadius};`}\n ${styling}\n`;\n\nconst ResolvableComponent = forwardRef<HTMLElement, Props>(\n ({ className = '', children, ...other }, ref) => {\n const ResolvedComponent = useComponent();\n const { name, type, id } = useComponentDescriptor();\n\n const StyledResolvableComponent = useMemo(() => {\n if (ResolvedComponent) {\n return styled(ResolvedComponent)<any>`\n ${styling}\n ${filterCssPropsStyle}\n `;\n }\n return null;\n }, [ResolvedComponent]);\n\n if (typeof ResolvedComponent === 'undefined') {\n return null;\n }\n\n if (ResolvedComponent === null || StyledResolvableComponent === null) {\n if (process.env.NODE_ENV !== 'production') {\n return (\n <NonResolvedComponentWrapper\n {...other}\n title={`type: ${type}, definition-id: ${name}, instance-id: ${id}`}\n className={appendClassNames(className, 'humany-non-resolved-component')}\n >\n <Typography variant=\"h5\">Non Resolved Component Type</Typography>\n </NonResolvedComponentWrapper>\n );\n }\n return null;\n }\n\n return (\n <Suspense fallback={null}>\n <StyledResolvableComponent\n ref={ref}\n {...other}\n className={appendClassNames(\n className,\n 'humany-component',\n `humany-component-${name}`\n )}\n >\n {children}\n </StyledResolvableComponent>\n </Suspense>\n );\n }\n);\n\nexport default ResolvableComponent;\n","import { ComponentNodeProperties } from '@telia-ace/widget-core';\nimport { useComponentNode, useComponentPlatform, useIsMounted } from '@telia-ace/widget-ui';\nimport { useEffect, useState } from 'react';\n\nexport default (id: string) => {\n const node = useComponentNode(id);\n const components = useComponentPlatform();\n const [properties, setProperties] = useState<ComponentNodeProperties>({});\n const isMounted = useIsMounted();\n\n useEffect(() => {\n if (node && isMounted.current) {\n setProperties(node.attributes.properties);\n }\n }, [node, id, isMounted]);\n\n useEffect(() => {\n if (components) {\n const unsubscribe = components.events.subscribe(\n 'components:properties-changed',\n (event, data) => {\n if (node === data.node && isMounted.current) {\n setProperties(data.node.attributes.properties);\n }\n }\n );\n\n return () => {\n unsubscribe();\n };\n }\n }, [components, isMounted, id, node]);\n\n return properties;\n};\n","import { asDescriptor, ComponentDescriptor, ComponentNode, Size } from '@telia-ace/widget-core';\nimport {\n ComponentNodeContext,\n ComponentPropertyContext,\n filterCssProps,\n useColumns,\n useComponentPlatform,\n useContainer,\n useContext,\n useLayout,\n} from '@telia-ace/widget-ui';\nimport React, { forwardRef, useEffect, useState } from 'react';\nimport { DefaultTheme, ThemeContext, ThemeProvider } from 'styled-components';\nimport ResolvableComponent from './resolvable-component';\nimport { StyledAnimatedView, StyledView } from './styles';\nimport useComponentNodeProperties from './use-component-node-properties';\n\ntype Props = {\n className?: string;\n isTabbing?: boolean;\n id: string;\n branch: string;\n node?: ComponentNode;\n ariaLabel?: string;\n tabIndex?: number;\n context?: { [key: string]: any };\n};\n\nconst isVisible = (size: Size, node?: ComponentNode) => {\n if (node) {\n return true;\n }\n if (typeof size === 'string') {\n return size === 'full';\n }\n return size > 0;\n};\n\nconst Component = forwardRef<HTMLElement, Props>(\n (\n {\n className = '',\n isTabbing = false,\n id,\n branch,\n node,\n ariaLabel,\n tabIndex,\n context: extraContext,\n ...other\n },\n ref\n ) => {\n const components = useComponentPlatform();\n const container = useContainer();\n const [descriptor, setDescriptor] = useState<ComponentDescriptor>();\n\n const themeContext = React.useContext(ThemeContext) || {};\n const columns = useColumns();\n const context = useContext(id);\n const properties = useComponentNodeProperties(id);\n const { size = 'none', indent = 0 } = useLayout(id);\n const visible = isVisible(size, node);\n\n useEffect(() => {\n if (components) {\n if (id && !node) {\n const componentNode = components.nodes.get(id);\n if (componentNode) {\n setDescriptor(asDescriptor(componentNode, branch));\n\n if (visible) {\n const unmount = componentNode.mount(container);\n return () => {\n unmount();\n };\n }\n }\n } else if (node) {\n setDescriptor(asDescriptor(node, branch));\n const unmount = node.mount(container);\n return () => {\n unmount();\n };\n }\n }\n }, [components, id, node, visible]);\n\n if (!descriptor || !visible) {\n return null;\n }\n\n const mergedContexts = { ...context, ...(extraContext || {}) };\n const {\n cardinal,\n fonts: contextFonts = {},\n accessibility = {},\n ...restContext\n } = mergedContexts;\n\n const fonts = {\n type: contextFonts.type,\n base: contextFonts.base || '16px',\n small: contextFonts.small || '0.8em',\n normal: contextFonts.normal || '1em',\n medium: contextFonts.medium || '1.2em',\n large: contextFonts.large || '1.6em',\n huge: contextFonts.huge || '2.5em',\n };\n\n const theme: DefaultTheme = {\n ...restContext,\n fonts,\n accessibility: {\n ...accessibility,\n isTabbing: themeContext.accessibility?.isTabbing || isTabbing,\n },\n };\n\n if (typeof cardinal === 'number') {\n theme.sizes = {\n cardinal,\n small: `${cardinal}px`,\n normal: `${cardinal * 3}px`,\n medium: `${cardinal * 5}px`,\n large: `${cardinal * 8}px`,\n };\n }\n\n return (\n <ThemeProvider theme={theme}>\n <ComponentNodeContext.Provider value={descriptor}>\n <ComponentPropertyContext.Provider value={properties}>\n {(() => {\n const props = {\n 'data-width':\n size === 'full' ? columns : Math.min(size as number, columns),\n 'data-indent': indent,\n 'data-name': descriptor.name,\n 'data-node-id': descriptor.id,\n 'data-component-type': descriptor.type,\n 'aria-label': ariaLabel,\n tabIndex: tabIndex,\n id: descriptor.id,\n role: properties && properties.role,\n ...other,\n };\n switch (descriptor.type) {\n case 'view': {\n return typeof properties.animation === 'string' &&\n properties.animation !== 'none' ? (\n <StyledAnimatedView {...props} className={className} />\n ) : (\n <StyledView {...props} className={className} />\n );\n }\n default: {\n const cssProps = filterCssProps(properties);\n\n return (\n <ResolvableComponent\n ref={ref}\n {...props}\n {...cssProps}\n className={className}\n />\n );\n }\n }\n })()}\n </ComponentPropertyContext.Provider>\n </ComponentNodeContext.Provider>\n </ThemeProvider>\n );\n }\n);\n\nexport default Component;\n","import { ComponentNode, ComponentPlatform } from '@telia-ace/widget-core';\nimport { useContainer } from '@telia-ace/widget-ui';\nimport React, { useEffect, useState } from 'react';\nimport Component from './component';\n\ntype Props = {\n builder: (components: ComponentPlatform) => Promise<ComponentNode>;\n};\nconst DetachedComponent: React.FC<Props> = ({ builder }) => {\n const container = useContainer();\n const [node, setNode] = useState<ComponentNode | null>(null);\n\n useEffect(() => {\n container.getAsync('components').then((components: ComponentPlatform) => {\n return builder(components).then((createdNode) => {\n setNode(createdNode);\n });\n });\n }, []);\n\n useEffect(() => {\n return () => {\n if (node) {\n container.getAsync('components').then((components: ComponentPlatform) => {\n components.nodes.detached = components.nodes.detached.filter(\n (n) => n.id !== node.id\n );\n });\n }\n };\n }, [node]);\n\n if (!node) {\n return null;\n }\n\n return <Component id={node.id} node={node} branch=\"default\" />;\n};\n\nexport default DetachedComponent;\n","import { ComponentPlatform } from '@telia-ace/widget-core';\nimport { useContainer } from '@telia-ace/widget-ui';\nimport React, { useContext } from 'react';\nimport { ThemeContext } from 'styled-components';\n\nconst DetachedComponent = React.lazy(() => import('./detached-component'));\n\ntype Props = {\n showSearch?: boolean;\n};\nconst NotFound: React.FC<Props> = ({ showSearch = false }) => {\n const themeContext = useContext(ThemeContext);\n const container = useContainer();\n\n return (\n <React.Suspense fallback={null}>\n <DetachedComponent\n builder={(components: ComponentPlatform) => {\n return container.get('settings').then((settings: any) => {\n const { properties, context } = Object.keys(settings.components).reduce<{\n properties: any;\n context: any;\n }>(\n (acc, key) => {\n if (settings.components[key].type === 'not-found') {\n acc.properties = settings.components[key].properties;\n acc.context = settings.components[key].context;\n }\n\n return acc;\n },\n { properties: {}, context: {} }\n );\n\n properties.showSearch = showSearch;\n const node = components.createNode('area', { detached: true });\n node.name = 'not-found-area';\n node.writeLayout({\n size: 'full',\n });\n\n if (showSearch) {\n const searchComponentProps = Object.keys(settings.components).reduce(\n (acc, key) => {\n if (settings.components[key].type === 'search') {\n return settings.components[key].properties;\n }\n\n return acc;\n },\n {}\n );\n const searchNode = components.createNode('search', { detached: true });\n searchNode.writeLayout({ size: 'full' });\n searchNode.writeProperties({\n 'css-margin-bottom': themeContext?.sizes?.normal || '15px',\n ...searchComponentProps,\n });\n node.appendChild(searchNode);\n }\n\n const notFoundNode = components.createNode('not-found', { detached: true });\n notFoundNode.writeLayout({ size: 'full' });\n notFoundNode.writeProperties(properties);\n notFoundNode.writeContext(context);\n node.appendChild(notFoundNode);\n\n return node;\n });\n }}\n />\n </React.Suspense>\n );\n};\n\nexport default NotFound;\n","// tslint:disable max-line-length\nexport const renderSymbol = (symbol?: { type: string; content: string }) => {\n if (symbol) {\n const { type, content } = symbol;\n switch (type) {\n case 'FontAwesome':\n return `<i class=\"humany-icon fa fa-${content}\"></i>`;\n case 'Uri':\n return `<i class=\"humany-icon humany-custom-icon\" style=\"background: url(${content}) no-repeat center center;background-size: contain;\"></i>`;\n default:\n return '';\n }\n }\n};\n\nconst triggerTabHandler = (triggerDOMElement: HTMLElement) => {\n const toggleTabbing = (element: HTMLElement, tabbing: boolean) => {\n if (!element) {\n return;\n }\n\n if (tabbing) {\n element.classList.add('humany-tabbing');\n } else {\n element.classList.remove('humany-tabbing');\n }\n };\n\n const handleKeydown = (e: KeyboardEvent) => {\n if (e.key === 'Tab') {\n toggleTabbing(triggerDOMElement, true);\n } else if (\n !(\n e.key === 'Enter' &&\n document.activeElement &&\n document.activeElement.classList.contains('humany-trigger')\n )\n ) {\n toggleTabbing(triggerDOMElement, false);\n }\n };\n\n const handleClick = (e: MouseEvent) => {\n if (\n document.activeElement &&\n document.activeElement.classList.contains('humany-trigger') &&\n document.activeElement.classList.contains('humany-tabbing')\n ) {\n return;\n }\n toggleTabbing(triggerDOMElement, false);\n };\n\n document.addEventListener('keydown', handleKeydown);\n document.addEventListener('click', handleClick);\n\n return () => {\n document.removeEventListener('keydown', handleKeydown);\n document.removeEventListener('click', handleClick);\n };\n};\n\nexport type TriggerElementOptions = {\n symbol?: { type: string; content: string };\n widgetName: string;\n label?: string;\n ariaLabel?: string;\n tooltip?: string;\n};\n\nexport function createTriggerElement(element: HTMLElement, options: TriggerElementOptions) {\n const { symbol, widgetName, label = '', ariaLabel = '', tooltip = '' } = options;\n\n element.classList.add('humany-trigger');\n element.classList.add(`humany_${widgetName}`);\n\n if (label.length) {\n element.classList.add('humany-has-text');\n }\n\n if (ariaLabel.length && !element.getAttribute('aria-label')) {\n element.setAttribute('aria-label', ariaLabel);\n }\n\n if (ariaLabel.length && !element.getAttribute('tabindex')) {\n element.setAttribute('tabindex', '0');\n }\n\n if (tooltip.length && !element.getAttribute('title')) {\n element.setAttribute('title', tooltip);\n }\n\n const symbolHtml = renderSymbol(symbol) || '';\n element.innerHTML = `${symbolHtml}\n <span class=\"humany-close\">\n <svg width=\"18\" height=\"9\" viewBox=\"0 0 18 9\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M9 9C8.81794 9.00045 8.63759 8.96634 8.46939 8.89965C8.3012 8.83295 8.14851 8.735 8.02015 8.61145L0.194523 1.12367C0.068294 0.99862 -0.00155266 0.831133 2.61958e-05 0.657285C0.00160506 0.483436 0.0744832 0.317136 0.202964 0.194202C0.331445 0.0712675 0.505249 0.00153576 0.686941 2.50649e-05C0.868634 -0.00148563 1.04368 0.0653456 1.17437 0.186125L9 7.6739L16.8256 0.186125C16.9563 0.0653456 17.1314 -0.00148563 17.3131 2.50649e-05C17.4948 0.00153576 17.6686 0.0712675 17.797 0.194202C17.9255 0.317136 17.9984 0.483436 18 0.657285C18.0016 0.831133 17.9317 0.99862 17.8055 1.12367L9.97985 8.61145C9.85149 8.735 9.6988 8.83295 9.53061 8.89965C9.36241 8.96634 9.18206 9.00045 9 9Z\" fill=\"white\"/>\n </svg>\n </span>\n <span class=\"humany-loader\">\n <svg viewBox=\"25 25 50 50\">\n <circle\n cx=\"50\"\n cy=\"50\"\n r=\"20\"\n fill=\"none\"\n stroke=\"#000\"\n stroke-width=\"2\"\n stroke-miterlimit=\"10\" />\n </svg>\n </span>\n ${label.length ? `<span>${label}</span>` : ''}`;\n\n setTimeout(() => element && (element as HTMLElement).classList.add('humany-rendered'));\n\n return triggerTabHandler(element);\n}\n\nexport function setInactive(elements: HTMLElement | HTMLElement[], title?: string) {\n if (elements instanceof HTMLElement) {\n if (title) {\n elements.setAttribute('title', title);\n }\n elements.classList.remove('humany-active');\n elements.classList.remove('humany-loading');\n } else if (elements instanceof Array) {\n elements.forEach((e) => {\n if (title) {\n e.setAttribute('title', title);\n }\n e.classList.remove('humany-active');\n e.classList.remove('humany-loading');\n });\n }\n}\nexport function setLoading(elements: HTMLElement | HTMLElement[]) {\n if (elements instanceof HTMLElement) {\n elements.classList.remove('humany-active');\n elements.classList.add('humany-loading');\n } else if (elements instanceof Array) {\n elements.forEach((e) => {\n e.classList.remove('humany-active');\n e.classList.add('humany-loading');\n });\n }\n}\nexport function setActive(elements: HTMLElement | HTMLElement[], title?: string) {\n if (elements instanceof HTMLElement) {\n if (title) {\n elements.setAttribute('title', title);\n }\n elements.classList.add('humany-active');\n elements.classList.remove('humany-loading');\n } else if (elements instanceof Array) {\n elements.forEach((e) => {\n if (title) {\n e.setAttribute('title', title);\n }\n e.classList.add('humany-active');\n e.classList.remove('humany-loading');\n });\n }\n}\n","import { ViewOutletOptions } from './view-outlet';\n\nenum ProvidedElements {\n None = 'none',\n WidgetDOM = 'widgetDOM',\n TriggerDOM = 'triggerDOM',\n Both = 'both',\n}\n\nexport enum TriggerType {\n Inline = 'inline',\n Link = 'link',\n Badge = 'badge',\n Unsupported = 'unsupported',\n}\n\nexport const determineProvidedElements = (\n widgetDOMElement?: HTMLElement,\n triggerDOMElement?: HTMLElement\n): ProvidedElements => {\n if (widgetDOMElement && triggerDOMElement) {\n return ProvidedElements.Both;\n }\n if (widgetDOMElement) {\n return ProvidedElements.WidgetDOM;\n }\n if (triggerDOMElement) {\n return ProvidedElements.TriggerDOM;\n }\n return ProvidedElements.None;\n};\n\nexport const determineTriggerType = (triggerDefinition?: any) => {\n if (!triggerDefinition) {\n return TriggerType.Inline;\n }\n if (typeof triggerDefinition === 'boolean' && triggerDefinition) {\n return TriggerType.Link;\n }\n if (typeof triggerDefinition === 'object' && !Array.isArray(triggerDefinition)) {\n return TriggerType.Badge;\n }\n return TriggerType.Unsupported;\n};\n\ntype PrepareDOMElementsOutput = ViewOutletOptions & {\n callback?: () => void;\n};\n\nexport const prepareDOMElements = (\n name: string,\n providedWidgetElement?: HTMLElement,\n providedTriggerElement?: HTMLElement,\n triggerDefinition?: any,\n waitWithReplace: boolean = false\n): PrepareDOMElementsOutput => {\n const providedElements = determineProvidedElements(\n providedWidgetElement,\n providedTriggerElement\n );\n const triggerType = determineTriggerType(triggerDefinition);\n\n const cachedOriginals = {\n widgetDOMElement: providedWidgetElement ? providedWidgetElement.cloneNode(true) : undefined,\n triggerDOMElement: providedTriggerElement\n ? providedTriggerElement.cloneNode(true)\n : undefined,\n };\n\n const output: PrepareDOMElementsOutput = {\n triggerType,\n cachedOriginals,\n widgetDOMElement: document.createElement('div'),\n };\n\n switch (providedElements) {\n case ProvidedElements.Both: {\n output.widgetDOMElement = providedWidgetElement || document.createElement('div');\n if (triggerType !== TriggerType.Inline) {\n output.triggerDOMElement = providedTriggerElement;\n }\n break;\n }\n case ProvidedElements.WidgetDOM: {\n output.widgetDOMElement = providedWidgetElement || document.createElement('div');\n if (triggerType !== TriggerType.Inline) {\n const triggerElement = document.body.appendChild(document.createElement('a'));\n if (triggerType === TriggerType.Link) {\n triggerElement.innerText = name;\n }\n output.triggerDOMElement = triggerElement;\n }\n break;\n }\n case ProvidedElements.TriggerDOM: {\n const widgetElement = document.createElement('div');\n output.widgetDOMElement = widgetElement;\n if (triggerType === TriggerType.Inline) {\n // replace with widgetDOMElement in the DOM\n widgetElement.id = providedTriggerElement?.id || '';\n if (waitWithReplace) {\n widgetElement.style.display = 'none';\n providedTriggerElement?.parentNode?.appendChild(widgetElement);\n\n output.callback = () => {\n providedTriggerElement?.parentNode?.replaceChild(\n widgetElement,\n providedTriggerElement\n );\n widgetElement.style.display =\n providedTriggerElement?.style.display || 'block';\n };\n } else {\n providedTriggerElement?.parentNode?.replaceChild(\n widgetElement,\n providedTriggerElement\n );\n }\n output.cachedOriginals.widgetDOMElement = providedTriggerElement;\n output.cachedOriginals.triggerDOMElement = undefined;\n } else {\n output.widgetDOMElement = document.body.appendChild(widgetElement);\n output.triggerDOMElement = providedTriggerElement;\n }\n break;\n }\n case ProvidedElements.None: {\n const widgetElement = document.body.appendChild(document.createElement('div'));\n output.widgetDOMElement = widgetElement;\n if (triggerType !== TriggerType.Inline) {\n const triggerElement = document.body.appendChild(document.createElement('a'));\n if (triggerType === TriggerType.Link) {\n triggerElement.innerText = name;\n }\n output.triggerDOMElement = triggerElement;\n }\n break;\n }\n }\n\n return output;\n};\n","import { readStorage, StorageMedium } from '@telia-ace/widget-services';\nimport { Symbol } from '@telia-ace/widget-ui';\nimport { notifyDataLoaded } from '@telia-ace/widget-utilities';\nimport { Container, Widget } from '@webprovisions/platform';\nimport { createTriggerElement, setActive, setLoading } from './html-element-handlers';\nimport { TriggerType } from './prepare-dom';\n\nconst MODALS_STORAGE_KEY = 'modals';\n\nexport type BadgeOptions = {\n symbol?: Symbol;\n label?: string;\n ariaLabel?: string;\n openTooltip?: string;\n closedTooltip?: string;\n};\n\nexport type ViewOutletOptions = {\n widgetDOMElement: HTMLElement;\n triggerDOMElement?: HTMLElement;\n triggerOptions?: BadgeOptions | boolean;\n triggerType: TriggerType;\n cachedOriginals: {\n widgetDOMElement?: Node;\n triggerDOMElement?: Node;\n };\n};\n\ntype Modals = {\n name: string;\n ref?: HTMLElement;\n selector?: string;\n};\n\nexport class ViewOutlet {\n container: Container;\n private unsubscribe: (() => void)[] = [];\n\n constructor(container: Container, public options: ViewOutletOptions) {\n this.container = container.createChild(this);\n this.container.register('widgetDOMElement', this.options.widgetDOMElement);\n this.container.register('triggerDOMElement', this.options.triggerDOMElement);\n\n const widget: Widget = this.container.get('$widget');\n this.options.widgetDOMElement.classList.add('humany-widget');\n this.options.widgetDOMElement.classList.add(`humany_${widget.name}`);\n\n const widgetDOMElements = container.get('widgetDOMElements') || [];\n container.register('widgetDOMElements', [\n ...widgetDOMElements,\n this.options.widgetDOMElement,\n ]);\n }\n\n /**\n * Renders the view outlet to the DOM.\n */\n render() {\n const { widgetDOMElement, triggerDOMElement } = this.options;\n\n const widget: Widget = this.container.get('$widget');\n\n if (widgetDOMElement.getAttribute('data-rendered') === 'true') {\n return Promise.resolve();\n }\n\n if (triggerDOMElement && this.options.triggerType === TriggerType.Badge) {\n setLoading(triggerDOMElement);\n }\n\n return import('./render')\n .then((module) => module.default(this.container, widgetDOMElement))\n .then(() => {\n widgetDOMElement.setAttribute('data-rendered', 'true');\n\n if (triggerDOMElement && this.options.triggerType === TriggerType.Badge) {\n const tooltip = (this.options.triggerOptions as BadgeOptions).openTooltip;\n setActive(triggerDOMElement, tooltip);\n }\n notifyDataLoaded(this.container, widgetDOMElement);\n\n const widgets = this.container.get('$environment').widgets.all();\n\n readStorage<Modals[]>(\n this.container,\n MODALS_STORAGE_KEY,\n StorageMedium.Session\n ).then((modals) => {\n if (modals) {\n modals.forEach((modal) => {\n if (\n widgets.find(\n (w: Widget) => w.name === modal.name && w.state === 'activated'\n )\n ) {\n widget.events.dispatch('widget:modal-opened', modal);\n }\n });\n }\n });\n });\n }\n\n renderBadge(options: BadgeOptions) {\n const { triggerDOMElement } = this.options;\n\n if (!triggerDOMElement) {\n return;\n }\n\n if (!triggerDOMElement.getAttribute('role')) {\n triggerDOMElement.setAttribute('role', 'button');\n }\n\n const { name }: Widget = this.container.get('$widget');\n\n const { label, symbol, ariaLabel, closedTooltip, openTooltip } = options;\n\n const triggerOptions = { closedTooltip, openTooltip };\n this.options.triggerOptions = triggerOptions;\n\n const removeTriggerListeners = createTriggerElement(triggerDOMElement, {\n label,\n symbol,\n ariaLabel,\n widgetName: name,\n tooltip: closedTooltip,\n });\n this.unsubscribe.push(removeTriggerListeners);\n }\n\n dispose() {\n return import('./unmount').then((module) => {\n const { triggerDOMElement, widgetDOMElement } = this.options;\n module.default(widgetDOMElement);\n\n if (this.options.cachedOriginals.widgetDOMElement) {\n if (widgetDOMElement) {\n widgetDOMElement.parentNode?.replaceChild(\n this.options.cachedOriginals.widgetDOMElement,\n widgetDOMElement\n );\n }\n }\n if (this.options.cachedOriginals.triggerDOMElement) {\n if (triggerDOMElement) {\n triggerDOMElement.parentNode?.replaceChild(\n this.options.cachedOriginals.triggerDOMElement,\n triggerDOMElement\n );\n }\n }\n\n this.unsubscribe.forEach((unsubscribe) => {\n unsubscribe();\n });\n\n widgetDOMElement.parentNode?.removeChild(widgetDOMElement);\n triggerDOMElement?.parentNode?.removeChild(triggerDOMElement);\n });\n }\n}\n","import {\n ChangesetOptions,\n ChangesetProvider,\n ComponentNodeAttributes,\n ComponentNodeSettings,\n ComponentPlatform,\n ComponentQuery,\n ComponentQueryRule,\n createComponentModel,\n WidgetSettings,\n} from '@telia-ace/widget-core';\nimport {\n createStorageWriter,\n readStorage,\n StorageCategory,\n StorageMedium,\n StorageWriter,\n} from '@telia-ace/widget-services';\nimport { lock } from '@telia-ace/widget-utilities';\nimport { Container, Widget, WidgetState } from '@webprovisions/platform';\n\nconst STORAGE_KEY = 'changesets';\n\ntype ChangesetItem = {\n rules: ComponentQueryRule[];\n attributes: Partial<ComponentNodeAttributes>;\n options: ChangesetOptions;\n};\n\ntype ChangesetItemBag = {\n items?: { [key: string]: ChangesetItem };\n keys?: string[];\n};\n\nconst convertSettingsToAttributes = (\n settings: Partial<ComponentNodeSettings>\n): Partial<ComponentNodeAttributes> => {\n const attributes: Partial<ComponentNodeAttributes> = { tags: settings.tags };\n if (settings.context && typeof settings.context !== 'function') {\n attributes.context = settings.context;\n }\n if (settings.properties && typeof settings.properties !== 'function') {\n attributes.properties = settings.properties;\n }\n if (settings.layout && typeof settings.layout !== 'function') {\n attributes.layout = settings.layout;\n }\n\n return attributes;\n};\n\nexport class LocalStorageChangesetProvider implements ChangesetProvider {\n constructor(private container: Container, private storageWriter: StorageWriter) {}\n\n static create(container: Container): Promise<LocalStorageChangesetProvider> {\n return createStorageWriter(container, STORAGE_KEY, StorageCategory.Necessary, {\n medium: StorageMedium.Local,\n }).then((storageWriter) => new LocalStorageChangesetProvider(container, storageWriter));\n }\n\n write(\n key: string,\n target: ComponentQuery,\n attributes: Partial<ComponentNodeSettings>,\n options: ChangesetOptions\n ): Promise<any> {\n return lock(this)(() => {\n return readStorage<ChangesetItemBag>(\n this.container,\n STORAGE_KEY,\n StorageMedium.Local\n ).then((bag = {}) => {\n const { keys = [], items = {} } = bag;\n const existingIndex = keys.indexOf(key);\n if (existingIndex > -1) {\n keys.splice(existingIndex, 1);\n }\n keys.push(key);\n items[key] = {\n options,\n attributes: convertSettingsToAttributes(attributes),\n rules: target.rules,\n };\n return this.storageWriter({ keys, items });\n });\n });\n }\n\n remove(key: string): Promise<any> {\n return lock(this)(() => {\n return readStorage<ChangesetItemBag>(\n this.container,\n STORAGE_KEY,\n StorageMedium.Local\n ).then((bag = {}) => {\n const { keys = [], items = {} } = bag;\n const indexToRemove = keys.indexOf(key);\n if (indexToRemove > -1) {\n keys.splice(indexToRemove, 1);\n delete items[key];\n return this.storageWriter(bag);\n }\n });\n });\n }\n\n load(platform: ComponentPlatform): Promise<any> {\n return lock(this)(() => {\n return readStorage<ChangesetItemBag>(\n this.container,\n STORAGE_KEY,\n StorageMedium.Local\n ).then((bag = {}) => {\n const { keys = [], items = {} } = bag;\n keys.forEach((key) => {\n const item = items[key];\n if (item) {\n const { rules, attributes, options } = item;\n platform.write({\n attributes,\n options,\n target: new ComponentQuery(platform, rules),\n });\n }\n });\n });\n });\n }\n}\n\nexport const createPlatform = (widget: Widget): Promise<ComponentPlatform> => {\n const { container } = widget;\n return LocalStorageChangesetProvider.create(container).then((localStorage) => {\n const settings: WidgetSettings = container.get('$settings');\n const providers = { localStorage };\n const platform = new ComponentPlatform(widget, providers);\n const destructComponentModel = createComponentModel(platform, settings);\n\n widget.events.subscribe('widget:state-change', (event, data: { state: WidgetState }) => {\n if (data.state === WidgetState.Deactivating) {\n destructComponentModel();\n }\n });\n\n return platform;\n });\n};\n","export type SiteLocation = {\n host: string;\n pathname: string;\n};\n\nexport const createSiteProvider = (\n site: 'current' | 'referrer',\n forceHttps: boolean\n): (() => string) => {\n return () => {\n const parseLocation = (href: string): SiteLocation => {\n const link = document.createElement('a');\n link.href = href;\n return link;\n };\n\n let location: SiteLocation = window.location;\n if (site === 'referrer' && document.referrer) {\n location = parseLocation(document.referrer);\n }\n return [forceHttps ? 'https:' : '', '//', location.host, location.pathname].join('');\n };\n};\n","import { WidgetSettings } from '@telia-ace/widget-core';\nimport { Container, Widget } from '@webprovisions/platform';\nimport { createPlatform } from './component-platform-factory';\nimport { createSiteProvider } from './site-provider';\n\nexport const createRoutingService = (container: Container) => {\n return import('@telia-ace/widget-routing').then(({ RoutingService, HistoryMode }) => {\n return container.get('settings').then((settings: WidgetSettings) => {\n const {\n routing: { initialPath = '/', mode = HistoryMode.scopedHash, basePath },\n views,\n } = settings;\n\n const routingService = new RoutingService(container, {\n initialPath,\n mode,\n routes: Object.keys(views).map((name) => ({\n name,\n path: views[name].path,\n })),\n basePath,\n });\n return routingService;\n });\n });\n};\n\nexport const createStorageService = (container: Container) => {\n return import('@telia-ace/widget-services').then(({ StorageProvider }) => {\n return new StorageProvider();\n });\n};\n\nexport const createServiceClient = (container: Container) => {\n return import('@telia-ace/knowledge-serviceclient').then(({ ServiceClient, ServiceProxy }) => {\n return container.get('settings').then((settings: WidgetSettings) => {\n const { name, events }: Widget = container.get('$widget');\n const {\n data: { projection = '', site = 'current', forceHttps = false },\n } = settings;\n\n const proxy = new ServiceProxy(projection, { credentials: 'same-origin' });\n\n // Replacing '_contact' & '_contact-method' while\n // still using the shadow widget concept\n const client = new ServiceClient(\n proxy,\n {\n funnel: name.replace('_contact-method', '').replace('_contact', ''),\n site: createSiteProvider(site, forceHttps),\n },\n null,\n container\n );\n\n events.subscribe('widget:settings-updated', (event, { data }: WidgetSettings) => {\n if (data && data.projection !== projection) {\n client.proxy.setBaseUrl(data.projection);\n }\n });\n\n return client;\n });\n });\n};\n\nexport const createActionResolver = (container: Container) => {\n return import('@telia-ace/widget-core').then(({ ActionResolver }) => {\n return new ActionResolver(container);\n });\n};\n\nexport const createComponentResolver = (container: Container) => {\n return import('@telia-ace/widget-core').then(({ ComponentResolver }) => {\n return new ComponentResolver(container);\n });\n};\n\nexport const createComponentPlatform = (container: Container) => {\n return import('@telia-ace/widget-core').then(({ ComponentPlatform, createComponentModel }) => {\n return createPlatform(container.get('$widget'));\n });\n};\n","import {\n ActionResolver,\n ComponentPlatform,\n WidgetRenderState,\n WidgetSettings,\n} from '@telia-ace/widget-core';\nimport { onWidgetUrl, RouteData, RoutingService } from '@telia-ace/widget-routing';\nimport {\n createStorageWriter,\n readStorage,\n StorageCategory,\n StorageMedium,\n StorageScope,\n} from '@telia-ace/widget-services';\nimport { removeNullAndUndefinedValues, uuid } from '@telia-ace/widget-utilities';\nimport { BootstrappingActivationData, supportBootstrapping } from '@webprovisions/bootstrapping';\nimport { Container, EventSubscriptionCancellation, WidgetType } from '@webprovisions/platform';\nimport { BadgeOptions, ViewOutlet, ViewOutletOptions } from '././ui/view-outlet';\nimport {\n createActionResolver,\n createComponentPlatform,\n createComponentResolver,\n createRoutingService,\n createServiceClient,\n createStorageService,\n} from './services';\nimport { setActive, setInactive } from './ui/html-element-handlers';\nimport { determineTriggerType, prepareDOMElements, TriggerType } from './ui/prepare-dom';\n\nconst SETTINGS_STORAGE_KEY = '$settings';\nconst OPEN_STORAGE_KEY = 'open';\nconst STICKY_WIDGET_STORAGE_KEY = 'activeStickyWidget';\n\nexport enum InitialRenderState {\n Open = 'open',\n Closed = 'closed',\n Hidden = 'hidden',\n Storage = 'storage',\n}\n\nexport type RenderData = {\n widgetDOMElement?: HTMLElement;\n triggerDOMElement?: HTMLElement;\n key?: string;\n open?: boolean;\n withRenderState?: InitialRenderState;\n};\n\nexport type AttachData = {\n widgetDOMElement?: HTMLElement;\n triggerDOMElement?: HTMLElement;\n key?: string;\n withRenderState?: InitialRenderState;\n};\n\nexport default class Widget extends WidgetType {\n outlets = new Map<string, ViewOutlet>();\n activated: Promise<void> | undefined = undefined;\n subs: EventSubscriptionCancellation[] = [];\n\n constructor(container: Container) {\n super(container);\n\n this.container.registerAsync('storage', () => createStorageService(this.container));\n\n this.container.registerFactory('settings', () => {\n return readStorage<Partial<WidgetSettings>>(\n this.container,\n SETTINGS_STORAGE_KEY,\n StorageMedium.Local\n ).then((settings = {}) => {\n return {\n ...this.container.get('$settings'),\n ...settings,\n };\n });\n });\n\n supportBootstrapping(this as any, 'load', this.handleBootstrapping);\n\n this.container.registerAsync('componentResolver', () =>\n createComponentResolver(this.container)\n );\n this.container.registerAsync('matchingClient', () => createServiceClient(this.container));\n this.container.registerAsync('router', () => createRoutingService(this.container));\n this.container.registerAsync('actionResolver', () => createActionResolver(this.container));\n this.container.register('matchMedia', window.matchMedia);\n this.container.registerAsync('components', () => createComponentPlatform(this.container));\n }\n\n handleBootstrapping = (activationData: BootstrappingActivationData) => {\n const options = {\n triggerDOMElement: activationData.sourceDOMElement,\n withRenderState: InitialRenderState.Storage,\n };\n\n this.container.get('settings').then((settings: any) => {\n const { activate } = settings;\n const shouldActivate =\n typeof activate === 'undefined' || activate === null || activate === true;\n\n if (shouldActivate) {\n this.activated = (this.activated || this.widget.activate()).then(() =>\n this.attach(options)\n );\n }\n });\n };\n\n initialize() {\n const promises = this.container.getManyAsync(\n 'actionResolver',\n 'router',\n 'components'\n ) as Promise<{\n actionResolver: ActionResolver;\n router: RoutingService;\n components: ComponentPlatform;\n }>;\n\n return Promise.all([promises, this.container.get('settings')]).then(\n ([{ actionResolver, router, components }, settings]) => {\n actionResolver.subscribe(this.widget.name, (origin, action, value) =>\n this.onAction(action, value)\n );\n\n const switchViewNodes = (routeName: string) => {\n components.nodes.query({ type: 'view' }).forEach((viewNode) => {\n components.setSwitch(viewNode, routeName);\n });\n };\n\n const initialRoute = router.getInitialRoute()?.name || 'index';\n switchViewNodes(initialRoute);\n\n this.events.subscribe('widget:data-loaded', (e, { element }) => {\n if (this.widget.container.get('seoConfiguration')) {\n this.events.dispatch('widget:preloaded-replaced', {\n element,\n });\n }\n });\n\n this.events.subscribe(\n 'router:change',\n (e, { previous = { routeData: {} }, next = { routeData: {} } }) => {\n const { routeData: prevData }: { routeData: RouteData } = previous;\n const { routeData: nextData }: { routeData: RouteData } = next;\n\n const notFoundView = Object.keys(settings.views).reduce((acc, key) => {\n const view = settings.views[key];\n if (typeof view.path === 'undefined') {\n return key;\n }\n return acc;\n }, '');\n\n // route not found\n if (!nextData.name && notFoundView) {\n switchViewNodes(notFoundView);\n } else {\n switchViewNodes(nextData.name);\n }\n\n removeNullAndUndefinedValues(prevData && prevData.params);\n removeNullAndUndefinedValues(nextData && nextData.params);\n\n this.container\n .getAsync('actionResolver')\n .then((actionResolver: ActionResolver) => {\n actionResolver.action(this.widget.name, 'routeChange', {\n next: nextData,\n previous: prevData,\n });\n });\n }\n );\n\n return router.initialize();\n }\n );\n }\n\n attach(attachData: AttachData = {}) {\n return this.container.get('settings').then(({ trigger }: WidgetSettings) => {\n const {\n widgetDOMElement,\n key = uuid(),\n triggerDOMElement,\n withRenderState,\n } = attachData;\n\n const triggerType = determineTriggerType(trigger);\n\n // This could probably be defined already when bootstrapping occurs,\n // Webprovisions knows when a widget is prerendered,\n // see \"queryPrerenderedTargets in @webprovisions/bootstrapping\"\n const waitWithReplace =\n triggerType === TriggerType.Inline &&\n (triggerDOMElement?.childElementCount || 0) > 0;\n\n const outletOptions = prepareDOMElements(\n this.widget.name,\n widgetDOMElement,\n triggerDOMElement,\n trigger,\n waitWithReplace\n );\n\n if (this.outlets.size < 1 && !withRenderState) {\n this.setRenderState('unset');\n }\n\n const swap = () => {\n const isReady = () =>\n widgetDOMElement.querySelectorAll('[data-loading=true]').length === 0;\n const [widgetDOMElement] = this.widget.container.get('widgetDOMElements');\n\n const watcher = (mutations: MutationRecord[], observer: MutationObserver) => {\n if (isReady()) {\n if (outletOptions.callback) {\n outletOptions.callback();\n }\n observer.disconnect();\n }\n };\n const options = {\n attributes: true,\n subtree: true,\n childList: true\n };\n\n if (isReady()) {\n outletOptions.callback && outletOptions.callback();\n }\n const observer = new MutationObserver(watcher);\n\n observer.observe(widgetDOMElement, options);\n };\n\n if (waitWithReplace) {\n this.widget.container.getAsync('dataClient').then(({ events }: any) => {\n events.subscribe('data-client:fetched', (event: any, data: any) => {\n if (data.unresolvedQueries === 0) {\n swap();\n }\n });\n });\n }\n\n const outlet = this.getOrCreateViewOutlet(key, outletOptions);\n this.outlets.set(key, outlet);\n this.widget.events.dispatch('widget:attached', {}, { bubbles: true });\n\n if (outletOptions.triggerType === TriggerType.Badge && trigger) {\n outletOptions.triggerDOMElement?.setAttribute('aria-expanded', 'false');\n outlet?.renderBadge(trigger);\n }\n\n if (outletOptions.triggerType !== TriggerType.Inline) {\n outletOptions.triggerDOMElement?.addEventListener('click', (event: any) => {\n event.preventDefault();\n this.container\n .get('settings')\n .then(({ trigger: updatedTrigger }: WidgetSettings) => {\n outlet\n .render()\n .then(() => this.renderState())\n .then((renderState) => {\n if (\n updatedTrigger &&\n updatedTrigger.action &&\n updatedTrigger.action === 'hide'\n ) {\n return renderState === WidgetRenderState.open\n ? this.hide()\n : this.open();\n }\n return renderState === WidgetRenderState.open\n ? this.close()\n : this.open();\n });\n });\n });\n }\n\n if (this.outlets.size > 1) {\n return this.renderState().then((state: WidgetRenderState) => {\n // new outlets should have the same state as existing ones\n this.triggerStateIfApplicable(state);\n });\n }\n\n if (withRenderState) {\n if (withRenderState === InitialRenderState.Storage) {\n return this.renderState().then((state: WidgetRenderState) => {\n if (outletOptions.triggerType === TriggerType.Inline) {\n this.triggerStateIfApplicable('open');\n return;\n }\n this.triggerStateIfApplicable(state);\n });\n }\n return this.triggerStateIfApplicable(withRenderState);\n }\n });\n }\n\n detach(key?: string) {\n if (key) {\n if (this.outlets.has(key)) {\n const outlet = this.outlets.get(key);\n outlet?.dispose();\n this.outlets.delete(key);\n return;\n }\n if (process.env.NODE_ENV !== 'production') {\n console.warn(`detach(): Could not find View Outlet with key ${key}`);\n }\n return;\n }\n this.outlets.forEach((outlet) => {\n outlet.dispose();\n });\n this.outlets.clear();\n }\n\n private triggerStateIfApplicable(input: string) {\n return this.container.getAsync('router').then((router) => {\n switch (input) {\n case 'closed':\n this.close();\n break;\n case 'open':\n this.open();\n break;\n case 'hidden':\n this.hide();\n router.start();\n break;\n default:\n return;\n }\n });\n }\n\n private getOrCreateViewOutlet(key: string, options: ViewOutletOptions): ViewOutlet {\n return (\n this.outlets.has(key) ? this.outlets.get(key) : new ViewOutlet(this.container, options)\n )!;\n }\n\n render(renderData: RenderData = {}) {\n if (process.env.NODE_ENV !== 'production') {\n console.warn('widget.render() is deprecated. Use widget.attach() instead.');\n }\n if (renderData.open) {\n const options: AttachData = {\n ...renderData,\n withRenderState: InitialRenderState.Open,\n };\n return this.attach(options);\n }\n return this.attach(renderData);\n }\n\n activate(data?: any) {\n if (data?.override) {\n this.setSettings(() => data.override);\n }\n // TODO: this is considered a hack, remove apiNotificationPriorityBy\n // when there is a better way to get notifications from backend\n if (data?.apiNotificationPriorityBy) {\n this.container.register('apiNotificationPriorityBy', data.apiNotificationPriorityBy);\n }\n }\n\n setSettings(\n fn: (settings: WidgetSettings) => Promise<Partial<WidgetSettings>>\n ): Promise<WidgetSettings> {\n return Promise.all([\n this.container.get('settings'),\n createStorageWriter(this.container, SETTINGS_STORAGE_KEY, StorageCategory.Necessary, {\n medium: StorageMedium.Local,\n }),\n ]).then(([settings, write]) => {\n return Promise.resolve(fn(settings)).then((override) => {\n return write(override).then(() => {\n const updated = { ...settings, ...override };\n this.widget.events.dispatch('widget:settings-updated', updated);\n return updated;\n });\n });\n });\n }\n\n clearSettings(): Promise<void> {\n return createStorageWriter(\n this.container,\n SETTINGS_STORAGE_KEY,\n StorageCategory.Necessary,\n { medium: StorageMedium.Local }\n )\n .then((write) => write())\n .then(() => this.container.get('settings'))\n .then((settings) => {\n this.widget.events.dispatch('widget:settings-updated', settings);\n });\n }\n\n action({ action, value }: { action: string; value?: any }) {\n return this.container.getAsync('actionResolver').then((actionResolver: ActionResolver) => {\n actionResolver.action(this.widget.name, action, value);\n });\n }\n\n renderState(): Promise<WidgetRenderState> {\n if (onWidgetUrl(this.container)) {\n return Promise.resolve(WidgetRenderState.open);\n }\n const readSessionOpen = () =>\n readStorage<WidgetRenderState>(\n this.container,\n OPEN_STORAGE_KEY,\n StorageMedium.Session\n ).then((value = WidgetRenderState.closed) => value);\n\n const readLocalOpen = () =>\n readStorage<WidgetRenderState>(\n this.container,\n OPEN_STORAGE_KEY,\n StorageMedium.Session\n ).then((value = WidgetRenderState.closed) => value);\n\n return this.container.getAsync('router').then((routing: RoutingService) => {\n if (routing.isSticky()) {\n return readLocalOpen().then((localOpen) => {\n return localOpen === WidgetRenderState.open ? localOpen : readSessionOpen();\n });\n }\n return readSessionOpen();\n });\n }\n\n hide(): Promise<void> {\n if (this.outlets.size < 1) {\n if (process.env.NODE_ENV !== 'production') {\n console.warn(\n 'hide(): No-op as no view outlets are registered. Invoke the attach() command first.'\n );\n }\n return Promise.resolve();\n }\n this.outlets.forEach((outlet) => outlet.render());\n return this.action({ action: 'hide' }).then(() => {\n this.setTriggerState(false);\n });\n }\n\n open(): Promise<void> {\n if (this.outlets.size < 1) {\n if (process.env.NODE_ENV !== 'production') {\n console.warn(\n 'open(): No-op as no view outlets are registered. Invoke the attach() command first.'\n );\n }\n return Promise.resolve();\n }\n this.outlets.forEach((outlet) => outlet.render());\n return this.action({ action: 'open' }).then(() => {\n this.widget.events.dispatch('tracking:widget-rendered', {});\n return this.onOpen();\n });\n }\n\n close(): Promise<void> {\n if (this.outlets.size < 1) {\n if (process.env.NODE_ENV !== 'production') {\n console.warn(\n 'close(): No-op as no view outlets are registered. Invoke the attach() command first.'\n );\n }\n return Promise.resolve();\n }\n return this.action({ action: 'close' }).then(() => this.onClose());\n }\n\n show(): Promise<void> {\n if (process.env.NODE_ENV !== 'production') {\n console.warn(\n 'show(): Command is deprecated and will be removed in the future. Use open() instead.'\n );\n }\n return this.open();\n }\n\n private onAction(action: string, value: any) {\n switch (action) {\n case 'close':\n case 'open':\n case 'hide':\n const newState =\n action === 'open'\n ? WidgetRenderState.open\n : action === 'close'\n ? WidgetRenderState.closed\n : WidgetRenderState.hidden;\n\n return this.setRenderState(newState).then(() => {\n this.setTriggerState(newState === WidgetRenderState.open);\n if (newState !== WidgetRenderState.hidden) {\n newState === WidgetRenderState.open ? this.onOpen() : this.onClose();\n } else {\n this.outlets.forEach((outlet) =>\n outlet.options.triggerDOMElement?.setAttribute('aria-expanded', 'false')\n );\n }\n });\n }\n }\n\n private setRenderState(newState: string): Promise<void> {\n const { invoke, events } = this.container.get('$widget');\n return Promise.all([\n createStorageWriter(this.container, OPEN_STORAGE_KEY, StorageCategory.Necessary, {\n medium: StorageMedium.Session,\n }),\n createStorageWriter(this.container, OPEN_STORAGE_KEY, StorageCategory.Necessary, {\n medium: StorageMedium.Local,\n duration: { minutes: 5 },\n }),\n this.container.getAsync('router'),\n invoke('renderState'),\n ]).then(([writeSessionOpen, writeLocalOpen, routing, previousRenderState]) => {\n if (newState === 'unset' || !newState) {\n writeLocalOpen();\n writeSessionOpen();\n } else {\n if (routing.isSticky()) {\n writeLocalOpen(newState);\n }\n writeSessionOpen(newState);\n }\n events.dispatch('widget:render-state-changed', {\n previous: previousRenderState,\n next: newState,\n });\n });\n }\n\n private onOpen(): Promise<void> {\n return this.container.getAsync('router').then((router: RoutingService) => {\n this.outlets.forEach((outlet) =>\n outlet.options.triggerDOMElement?.setAttribute('aria-expanded', 'true')\n );\n return router.start();\n });\n }\n\n private onClose(): Promise<void> {\n const services = this.container.getManyAsync('router', 'components') as Promise<{\n router: RoutingService;\n components: ComponentPlatform;\n }>;\n\n const resetActivateProp = () => {\n return this.container.get('settings').then((widgetSettings: WidgetSettings) => {\n const { activate } = this.container.get('$settings');\n if (widgetSettings.activate !== activate) {\n return this.setSettings(() => Promise.resolve({ activate }));\n }\n return Promise.resolve();\n });\n };\n\n return resetActivateProp()\n .then(() => {\n return services;\n })\n .then(\n ({\n router,\n components,\n }: {\n router: RoutingService;\n components: ComponentPlatform;\n }) => {\n const visibleNodes = components.nodes.visible;\n this.outlets.forEach((outlet) =>\n outlet.options.triggerDOMElement?.setAttribute('aria-expanded', 'false')\n );\n\n if (\n visibleNodes.filter(\n (c) =>\n c.attributes.properties.animation &&\n c.attributes.properties.animation !== 'none'\n ).length\n ) {\n return new Promise<RoutingService>((resolve) => {\n setTimeout(() => {\n resolve(router);\n }, 200);\n });\n }\n\n return Promise.resolve(router);\n }\n )\n .then((router: RoutingService) => router.stop());\n }\n\n private setTriggerState(open: boolean) {\n this.outlets.forEach((outlet) => {\n const {\n options: { triggerDOMElement, triggerOptions },\n } = outlet;\n const { openTooltip, closedTooltip } = (triggerOptions as BadgeOptions) || {};\n if (triggerDOMElement) {\n open\n ? setActive(triggerDOMElement, openTooltip)\n : setInactive(triggerDOMElement, closedTooltip);\n }\n });\n }\n\n deactivate() {\n this.subs.forEach((s) => s());\n\n const promises: Promise<void>[] = [];\n this.outlets.forEach((outlet) => promises.push(outlet.dispose()));\n\n return readStorage<string>(\n this.container,\n STICKY_WIDGET_STORAGE_KEY,\n StorageMedium.Local\n ).then((value) => {\n /**\n * Remove stored sticky widget from implementation's localStorage if applicable\n */\n if (value === this.widget.name) {\n return createStorageWriter(\n this.container,\n STICKY_WIDGET_STORAGE_KEY,\n StorageCategory.Necessary,\n {\n medium: StorageMedium.Local,\n scope: StorageScope.Implementation,\n }\n )\n .then((write) => write())\n .then(() => Promise.all(promises));\n }\n return Promise.all(promises);\n });\n }\n}\n"],"names":["RouteSwitch","StyledView","DetachedComponent","useContext"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../src/ui/determine-slide-direction.ts","../src/ui/switch.tsx","../src/ui/animated-view.tsx","../src/ui/view.tsx","../src/ui/styles.ts","../src/ui/resolvable-component.tsx","../src/ui/use-component-node-properties.ts","../src/ui/component.tsx","../src/ui/detached-component.tsx","../src/ui/not-found.tsx","../src/ui/html-element-handlers.ts","../src/ui/prepare-dom.ts","../src/ui/view-outlet.ts","../src/component-platform-factory.ts","../src/site-provider.ts","../src/services.ts","../src/widget.ts"],"sourcesContent":["export enum SlideDirection {\r\n back = 'back',\r\n forth = 'forth',\r\n}\r\n\r\nexport interface RouteStructure {\r\n name: string;\r\n children: RouteStructure[];\r\n}\r\n\r\n/**\r\n * Recursively find the parents of a nested route\r\n * @param routeName Name of route to find\r\n * @param routes Routes to look in\r\n * @param trail Trail of parents\r\n * @param level Level of the array currently looking in\r\n */\r\nexport const findParentRoutes = (\r\n routeName: string,\r\n routes: RouteStructure[],\r\n trail: string[] = [],\r\n level: number = 0\r\n): string[] | null => {\r\n let found: any = null;\r\n\r\n routes.forEach((route, index) => {\r\n if (!found) {\r\n if (route.name === routeName) {\r\n found = route;\r\n } else {\r\n trail[level] = route.name;\r\n found = findParentRoutes(routeName, route.children, trail, level + 1);\r\n }\r\n }\r\n });\r\n\r\n if (!found) {\r\n return null;\r\n }\r\n\r\n return trail;\r\n};\r\n\r\n/**\r\n * Determine if the sliding animation should back or forth\r\n * @param currentRouteName Name of current route\r\n * @param nextRouteName Name of route to transition to\r\n * @param routeRanking Hierarchical route ranking for the widget\r\n */\r\nexport const determineSlideDirection = (\r\n currentRouteName: string,\r\n nextRouteName: string,\r\n routeRanking: RouteRanking\r\n): SlideDirection => {\r\n if (\r\n typeof routeRanking[currentRouteName] === 'number' &&\r\n typeof routeRanking[nextRouteName] === 'number' &&\r\n routeRanking[currentRouteName] > routeRanking[nextRouteName]\r\n ) {\r\n return SlideDirection.back;\r\n }\r\n return SlideDirection.forth;\r\n};\r\n\r\nexport type RouteRanking = { [key: string]: number };\r\n","import { ViewDefinition } from '@telia-ace/widget-core';\r\nimport React from 'react';\r\nimport { Route, Switch as RouteSwitch } from 'react-router';\r\n\r\ntype Props = {\r\n location?: any;\r\n views: { [key: string]: ViewDefinition };\r\n render: (viewName: string) => JSX.Element | null;\r\n};\r\n\r\nconst Switch: React.FC<Props> = ({ views, location, render }) => {\r\n return (\r\n <RouteSwitch\r\n location={\r\n location\r\n ? {\r\n ...location,\r\n pathname: location.pathname.split('?')[0],\r\n }\r\n : location\r\n }\r\n >\r\n {[\r\n ...Object.keys(views).filter((key) => !!views[key].path),\r\n ...Object.keys(views).filter((key) => !views[key].path),\r\n ].map((name) => {\r\n const { path } = views[name];\r\n\r\n if (!path) {\r\n return <Route key={name} render={() => render(name)} />;\r\n }\r\n\r\n if (Array.isArray(path)) {\r\n return path.map((path: string) => (\r\n <Route key={name} exact path={path} render={() => render(name)} />\r\n ));\r\n }\r\n return <Route key={name} exact path={path} render={() => render(name)} />;\r\n })}\r\n </RouteSwitch>\r\n );\r\n};\r\n\r\nexport default Switch;\r\n","import { WidgetSettings } from '@telia-ace/widget-core';\r\nimport {\r\n Grid,\r\n transitionComposer,\r\n useComponentNode,\r\n useContainer,\r\n useContext,\r\n useProperties,\r\n useRouteData,\r\n useRouter,\r\n useScroll,\r\n} from '@telia-ace/widget-ui';\r\nimport { appendClassNames } from '@telia-ace/widget-utilities';\r\nimport React, { useState } from 'react';\r\nimport { Transition, TransitionGroup } from 'react-transition-group';\r\nimport { TransitionStatus } from 'react-transition-group/Transition';\r\nimport styled from 'styled-components';\r\nimport Component from './component';\r\nimport { determineSlideDirection, RouteRanking, SlideDirection } from './determine-slide-direction';\r\nimport Switch from './switch';\r\n\r\ntype Props = {\r\n className?: string;\r\n};\r\n\r\nconst StyledViewContainer = styled.div`\r\n position: relative;\r\n width: 100%;\r\n flex: 1;\r\n`;\r\n\r\nconst StyledView = styled(Grid)<{ scrollableCss?: any; animationCss?: any }>`\r\n position: absolute;\r\n left: 0;\r\n right: 0;\r\n ${(p) => !!p.animationCss && p.animationCss}\r\n ${(p) => !!p.scrollableCss && p.scrollableCss}\r\n`;\r\n\r\nconst routeHierarchy: RouteRanking = {\r\n index: 1,\r\n search: 2,\r\n browse: 3,\r\n guide: 4,\r\n contact: 5,\r\n 'contact-method': 6,\r\n conversation: 7,\r\n};\r\n\r\nconst AnimatedView: React.FC<Props> = ({ className = '', ...other }) => {\r\n const [routeName, setRouteName] = useState('index');\r\n const [transitionDirection, setTransitionDirection] = useState(SlideDirection.forth);\r\n const nextRoute = useRouteData();\r\n const router = useRouter();\r\n\r\n const properties = useProperties();\r\n const context = useContext();\r\n const container = useContainer();\r\n const node = useComponentNode();\r\n\r\n const { gap = '0' } = context;\r\n const { columns = 1, animation = 'none', scrollable = false, ...areaProperties } = properties;\r\n\r\n const [scrollableCss, elem] = useScroll(scrollable);\r\n\r\n if (!node || !router) {\r\n return null;\r\n }\r\n\r\n const { location } = router;\r\n\r\n if (nextRoute.name !== routeName && nextRoute.name !== '' && animation) {\r\n setTransitionDirection(determineSlideDirection(routeName, nextRoute.name, routeHierarchy));\r\n setRouteName(nextRoute.name);\r\n }\r\n\r\n const { views }: WidgetSettings = container.get('$settings');\r\n\r\n if (!Object.keys(views).length) {\r\n return null;\r\n }\r\n\r\n const renderView = (name: string, transitionState?: any, direction?: SlideDirection) => {\r\n const animationStyles = getAnimation(transitionState, direction);\r\n const childNode = node.getChildren(name)[0];\r\n\r\n return (\r\n <StyledView\r\n {...other}\r\n {...areaProperties}\r\n scrollableCss={scrollableCss}\r\n ref={elem}\r\n columns={columns}\r\n gap={gap}\r\n {...animationStyles}\r\n className={appendClassNames(className, 'humany-view')}\r\n >\r\n <Component id={childNode.id} branch=\"default\" />\r\n </StyledView>\r\n );\r\n };\r\n\r\n const getAnimation = (transitionState?: any, direction?: SlideDirection) => {\r\n if (animation === 'slide' || animation === 'fade') {\r\n return {\r\n animationCss: transitionComposer.composeViewTransition(\r\n transitionState,\r\n animation,\r\n direction\r\n ),\r\n ['data-state']: transitionState,\r\n };\r\n }\r\n return;\r\n };\r\n\r\n return (\r\n <StyledViewContainer className=\"humany-animated-view\">\r\n <TransitionGroup\r\n component={null}\r\n childFactory={(child) =>\r\n React.cloneElement(child, { direction: transitionDirection })\r\n }\r\n >\r\n <Transition\r\n key={routeName}\r\n timeout={{ enter: 500, exit: 500 }}\r\n onEnter={(node: HTMLElement) => node?.clientHeight}\r\n unmountOnExit={true}\r\n direction={SlideDirection.forth}\r\n >\r\n {(state: TransitionStatus, { direction }: { direction: SlideDirection }) => (\r\n <Switch\r\n views={views}\r\n location={location}\r\n render={(name) => renderView(name, state, direction)}\r\n />\r\n )}\r\n </Transition>\r\n </TransitionGroup>\r\n </StyledViewContainer>\r\n );\r\n};\r\n\r\nexport default AnimatedView;\r\n","import { WidgetSettings } from '@telia-ace/widget-core';\r\nimport {\r\n Grid,\r\n useComponentNode,\r\n useContainer,\r\n useContext,\r\n useProperties,\r\n useScroll,\r\n} from '@telia-ace/widget-ui';\r\nimport { appendClassNames } from '@telia-ace/widget-utilities';\r\nimport React from 'react';\r\nimport styled from 'styled-components';\r\nimport Component from './component';\r\nimport Switch from './switch';\r\n\r\ntype Props = {\r\n className?: string;\r\n};\r\n\r\nconst StyledView = styled(Grid)<{ scrollableCss?: string }>`\r\n ${(p) => !!p.scrollableCss && p.scrollableCss}\r\n`;\r\n\r\nconst View: React.FC<Props> = ({ className = '', ...other }) => {\r\n const properties = useProperties();\r\n const context = useContext();\r\n const container = useContainer();\r\n const node = useComponentNode();\r\n\r\n const { views }: WidgetSettings = container.get('$settings');\r\n\r\n const { gap = '0' } = context;\r\n const { columns = 1, animation = 'none', scrollable = false, ...areaProperties } = properties;\r\n\r\n const [scrollableCss, elem] = useScroll(scrollable);\r\n\r\n if (!node) {\r\n return null;\r\n }\r\n\r\n return (\r\n <StyledView\r\n {...other}\r\n {...areaProperties}\r\n scrollableCss={scrollableCss}\r\n ref={elem}\r\n columns={columns}\r\n gap={gap}\r\n className={appendClassNames(className, 'humany-view')}\r\n >\r\n <Switch\r\n views={views}\r\n render={(name) => {\r\n const childNode = node.getChildren(name)[0];\r\n return <Component id={childNode.id} node={childNode} branch=\"default\" />;\r\n }}\r\n />\r\n </StyledView>\r\n );\r\n};\r\n\r\nexport default View;\r\n","import { paddedBorderTabStyle } from '@telia-ace/widget-ui';\r\nimport styled, { css } from 'styled-components';\r\nimport AnimatedView from './animated-view';\r\nimport View from './view';\r\n\r\nexport const styling = css<{\r\n 'data-width': number;\r\n 'data-indent': number;\r\n}>`\r\n outline: none;\r\n box-sizing: border-box;\r\n * {\r\n box-sizing: border-box;\r\n outline: none;\r\n }\r\n\r\n grid-column: ${(p) =>\r\n p['data-indent']\r\n ? `${p['data-indent'] + 1} / ${p['data-indent'] + p['data-width'] + 1}`\r\n : `span ${p['data-width']}`};\r\n\r\n ${(p) =>\r\n p.theme.fonts?.type &&\r\n `\r\n font-family: ${p.theme.fonts.type};\r\n\r\n input, textarea {\r\n font-family: ${p.theme.fonts.type};\r\n }\r\n `}\r\n\r\n ${(p) =>\r\n p.theme.fonts?.base &&\r\n `\r\n font-size: ${p.theme.fonts.base};\r\n `}\r\n\r\n &:focus-visible {\r\n ${paddedBorderTabStyle};\r\n }\r\n`;\r\n\r\nexport const StyledView = styled(View)`\r\n ${styling}\r\n`;\r\n\r\nexport const StyledAnimatedView = styled(AnimatedView)`\r\n ${styling}\r\n`;\r\n","import {\r\n filterCssPropsStyle,\r\n Typography,\r\n useComponent,\r\n useComponentDescriptor,\r\n} from '@telia-ace/widget-ui';\r\nimport { appendClassNames } from '@telia-ace/widget-utilities';\r\nimport React, { forwardRef, Suspense, useMemo } from 'react';\r\nimport styled, { css } from 'styled-components';\r\nimport { styling } from './styles';\r\n\r\ntype Props = {\r\n role?: string;\r\n className?: string;\r\n};\r\n\r\nconst NonResolvedComponentWrapper = styled.div<any>`\r\n text-align: center;\r\n ${(p) =>\r\n typeof p.theme.colors?.warning !== 'undefined' &&\r\n css`\r\n color: ${p.theme.colors?.warning};\r\n border: 2px dashed ${p.theme.colors?.warning};\r\n `}\r\n ${(p) =>\r\n typeof p.theme.borderRadius !== 'undefined' && `border-radius: ${p.theme.borderRadius};`}\r\n ${styling}\r\n`;\r\n\r\nconst ResolvableComponent = forwardRef<HTMLElement, Props>(\r\n ({ className = '', children, ...other }, ref) => {\r\n const ResolvedComponent = useComponent();\r\n const { name, type, id } = useComponentDescriptor();\r\n\r\n const StyledResolvableComponent = useMemo(() => {\r\n if (ResolvedComponent) {\r\n return styled(ResolvedComponent)<any>`\r\n ${styling}\r\n ${filterCssPropsStyle}\r\n `;\r\n }\r\n return null;\r\n }, [ResolvedComponent]);\r\n\r\n if (typeof ResolvedComponent === 'undefined') {\r\n return null;\r\n }\r\n\r\n if (ResolvedComponent === null || StyledResolvableComponent === null) {\r\n if (process.env.NODE_ENV !== 'production') {\r\n return (\r\n <NonResolvedComponentWrapper\r\n {...other}\r\n title={`type: ${type}, definition-id: ${name}, instance-id: ${id}`}\r\n className={appendClassNames(className, 'humany-non-resolved-component')}\r\n >\r\n <Typography variant=\"h5\">Non Resolved Component Type</Typography>\r\n </NonResolvedComponentWrapper>\r\n );\r\n }\r\n return null;\r\n }\r\n\r\n return (\r\n <Suspense fallback={null}>\r\n <StyledResolvableComponent\r\n ref={ref}\r\n {...other}\r\n className={appendClassNames(\r\n className,\r\n 'humany-component',\r\n `humany-component-${name}`\r\n )}\r\n >\r\n {children}\r\n </StyledResolvableComponent>\r\n </Suspense>\r\n );\r\n }\r\n);\r\n\r\nexport default ResolvableComponent;\r\n","import { ComponentNodeProperties } from '@telia-ace/widget-core';\r\nimport { useComponentNode, useComponentPlatform, useIsMounted } from '@telia-ace/widget-ui';\r\nimport { useEffect, useState } from 'react';\r\n\r\nexport default (id: string) => {\r\n const node = useComponentNode(id);\r\n const components = useComponentPlatform();\r\n const [properties, setProperties] = useState<ComponentNodeProperties>({});\r\n const isMounted = useIsMounted();\r\n\r\n useEffect(() => {\r\n if (node && isMounted.current) {\r\n setProperties(node.attributes.properties);\r\n }\r\n }, [node, id, isMounted]);\r\n\r\n useEffect(() => {\r\n if (components) {\r\n const unsubscribe = components.events.subscribe(\r\n 'components:properties-changed',\r\n (event, data) => {\r\n if (node === data.node && isMounted.current) {\r\n setProperties(data.node.attributes.properties);\r\n }\r\n }\r\n );\r\n\r\n return () => {\r\n unsubscribe();\r\n };\r\n }\r\n }, [components, isMounted, id, node]);\r\n\r\n return properties;\r\n};\r\n","import { asDescriptor, ComponentDescriptor, ComponentNode, Size } from '@telia-ace/widget-core';\r\nimport {\r\n ComponentNodeContext,\r\n ComponentPropertyContext,\r\n filterCssProps,\r\n useColumns,\r\n useComponentPlatform,\r\n useContainer,\r\n useContext,\r\n useLayout,\r\n} from '@telia-ace/widget-ui';\r\nimport React, { forwardRef, useEffect, useState } from 'react';\r\nimport { DefaultTheme, ThemeProvider } from 'styled-components';\r\nimport ResolvableComponent from './resolvable-component';\r\nimport { StyledAnimatedView, StyledView } from './styles';\r\nimport useComponentNodeProperties from './use-component-node-properties';\r\n\r\ntype Props = {\r\n className?: string;\r\n id: string;\r\n branch: string;\r\n node?: ComponentNode;\r\n ariaLabel?: string;\r\n tabIndex?: number;\r\n context?: { [key: string]: any };\r\n};\r\n\r\nconst isVisible = (size: Size, node?: ComponentNode) => {\r\n if (node) {\r\n return true;\r\n }\r\n if (typeof size === 'string') {\r\n return size === 'full';\r\n }\r\n return size > 0;\r\n};\r\n\r\nconst Component = forwardRef<HTMLElement, Props>(\r\n (\r\n { className = '', id, branch, node, ariaLabel, tabIndex, context: extraContext, ...other },\r\n ref\r\n ) => {\r\n const components = useComponentPlatform();\r\n const container = useContainer();\r\n const [descriptor, setDescriptor] = useState<ComponentDescriptor>();\r\n\r\n const columns = useColumns();\r\n const context = useContext(id);\r\n const properties = useComponentNodeProperties(id);\r\n const { size = 'none', indent = 0 } = useLayout(id);\r\n const visible = isVisible(size, node);\r\n\r\n useEffect(() => {\r\n if (components) {\r\n if (id && !node) {\r\n const componentNode = components.nodes.get(id);\r\n if (componentNode) {\r\n setDescriptor(asDescriptor(componentNode, branch));\r\n\r\n if (visible) {\r\n const unmount = componentNode.mount(container);\r\n return () => {\r\n unmount();\r\n };\r\n }\r\n }\r\n } else if (node) {\r\n setDescriptor(asDescriptor(node, branch));\r\n const unmount = node.mount(container);\r\n return () => {\r\n unmount();\r\n };\r\n }\r\n }\r\n }, [components, id, node, visible]);\r\n\r\n if (!descriptor || !visible) {\r\n return null;\r\n }\r\n\r\n const mergedContexts = { ...context, ...(extraContext || {}) };\r\n const {\r\n cardinal,\r\n fonts: contextFonts = {},\r\n accessibility = {},\r\n ...restContext\r\n } = mergedContexts;\r\n\r\n const fonts = {\r\n type: contextFonts.type,\r\n base: contextFonts.base || '16px',\r\n small: contextFonts.small || '0.8em',\r\n normal: contextFonts.normal || '1em',\r\n medium: contextFonts.medium || '1.2em',\r\n large: contextFonts.large || '1.6em',\r\n huge: contextFonts.huge || '2.5em',\r\n };\r\n\r\n const theme: DefaultTheme = {\r\n ...restContext,\r\n fonts,\r\n accessibility: {\r\n ...accessibility,\r\n },\r\n };\r\n\r\n if (typeof cardinal === 'number') {\r\n theme.sizes = {\r\n cardinal,\r\n small: `${cardinal}px`,\r\n normal: `${cardinal * 3}px`,\r\n medium: `${cardinal * 5}px`,\r\n large: `${cardinal * 8}px`,\r\n };\r\n }\r\n\r\n return (\r\n <ThemeProvider theme={theme}>\r\n <ComponentNodeContext.Provider value={descriptor}>\r\n <ComponentPropertyContext.Provider value={properties}>\r\n {(() => {\r\n const props = {\r\n 'data-width':\r\n size === 'full' ? columns : Math.min(size as number, columns),\r\n 'data-indent': indent,\r\n 'data-name': descriptor.name,\r\n 'data-node-id': descriptor.id,\r\n 'data-component-type': descriptor.type,\r\n 'aria-label': ariaLabel,\r\n tabIndex: tabIndex,\r\n id: descriptor.id,\r\n role: properties && properties.role,\r\n ...other,\r\n };\r\n switch (descriptor.type) {\r\n case 'view': {\r\n return typeof properties.animation === 'string' &&\r\n properties.animation !== 'none' ? (\r\n <StyledAnimatedView {...props} className={className} />\r\n ) : (\r\n <StyledView {...props} className={className} />\r\n );\r\n }\r\n default: {\r\n const cssProps = filterCssProps(properties);\r\n\r\n return (\r\n <ResolvableComponent\r\n ref={ref}\r\n {...props}\r\n {...cssProps}\r\n className={className}\r\n />\r\n );\r\n }\r\n }\r\n })()}\r\n </ComponentPropertyContext.Provider>\r\n </ComponentNodeContext.Provider>\r\n </ThemeProvider>\r\n );\r\n }\r\n);\r\n\r\nexport default Component;\r\n","import { ComponentNode, ComponentPlatform } from '@telia-ace/widget-core';\r\nimport { useContainer } from '@telia-ace/widget-ui';\r\nimport React, { useEffect, useState } from 'react';\r\nimport Component from './component';\r\n\r\ntype Props = {\r\n builder: (components: ComponentPlatform) => Promise<ComponentNode>;\r\n};\r\nconst DetachedComponent: React.FC<Props> = ({ builder }) => {\r\n const container = useContainer();\r\n const [node, setNode] = useState<ComponentNode | null>(null);\r\n\r\n useEffect(() => {\r\n container.getAsync('components').then((components: ComponentPlatform) => {\r\n return builder(components).then((createdNode) => {\r\n setNode(createdNode);\r\n });\r\n });\r\n }, []);\r\n\r\n useEffect(() => {\r\n return () => {\r\n if (node) {\r\n container.getAsync('components').then((components: ComponentPlatform) => {\r\n components.nodes.detached = components.nodes.detached.filter(\r\n (n) => n.id !== node.id\r\n );\r\n });\r\n }\r\n };\r\n }, [node]);\r\n\r\n if (!node) {\r\n return null;\r\n }\r\n\r\n return <Component id={node.id} node={node} branch=\"default\" />;\r\n};\r\n\r\nexport default DetachedComponent;\r\n","import { ComponentPlatform } from '@telia-ace/widget-core';\r\nimport { useContainer } from '@telia-ace/widget-ui';\r\nimport React, { useContext } from 'react';\r\nimport { ThemeContext } from 'styled-components';\r\n\r\nconst DetachedComponent = React.lazy(() => import('./detached-component'));\r\n\r\ntype Props = {\r\n showSearch?: boolean;\r\n};\r\nconst NotFound: React.FC<Props> = ({ showSearch = false }) => {\r\n const themeContext = useContext(ThemeContext);\r\n const container = useContainer();\r\n\r\n return (\r\n <React.Suspense fallback={null}>\r\n <DetachedComponent\r\n builder={(components: ComponentPlatform) => {\r\n return container.get('settings').then((settings: any) => {\r\n const { properties, context } = Object.keys(settings.components).reduce<{\r\n properties: any;\r\n context: any;\r\n }>(\r\n (acc, key) => {\r\n if (settings.components[key].type === 'not-found') {\r\n acc.properties = settings.components[key].properties;\r\n acc.context = settings.components[key].context;\r\n }\r\n\r\n return acc;\r\n },\r\n { properties: {}, context: {} }\r\n );\r\n\r\n properties.showSearch = showSearch;\r\n const node = components.createNode('area', { detached: true });\r\n node.name = 'not-found-area';\r\n node.writeLayout({\r\n size: 'full',\r\n });\r\n\r\n if (showSearch) {\r\n const searchComponentProps = Object.keys(settings.components).reduce(\r\n (acc, key) => {\r\n if (settings.components[key].type === 'search') {\r\n return settings.components[key].properties;\r\n }\r\n\r\n return acc;\r\n },\r\n {}\r\n );\r\n const searchNode = components.createNode('search', { detached: true });\r\n searchNode.writeLayout({ size: 'full' });\r\n searchNode.writeProperties({\r\n 'css-margin-bottom': themeContext?.sizes?.normal || '15px',\r\n ...searchComponentProps,\r\n });\r\n node.appendChild(searchNode);\r\n }\r\n\r\n const notFoundNode = components.createNode('not-found', { detached: true });\r\n notFoundNode.writeLayout({ size: 'full' });\r\n notFoundNode.writeProperties(properties);\r\n notFoundNode.writeContext(context);\r\n node.appendChild(notFoundNode);\r\n\r\n return node;\r\n });\r\n }}\r\n />\r\n </React.Suspense>\r\n );\r\n};\r\n\r\nexport default NotFound;\r\n","// tslint:disable max-line-length\r\nexport const renderSymbol = (symbol?: { type: string; content: string }) => {\r\n if (symbol) {\r\n const { type, content } = symbol;\r\n switch (type) {\r\n case 'FontAwesome':\r\n return `<i class=\"humany-icon fa fa-${content}\"></i>`;\r\n case 'Uri':\r\n return `<i class=\"humany-icon humany-custom-icon\" style=\"background: url(${content}) no-repeat center center;background-size: contain;\"></i>`;\r\n default:\r\n return '';\r\n }\r\n }\r\n};\r\n\r\nconst triggerTabHandler = (triggerDOMElement: HTMLElement) => {\r\n const toggleTabbing = (element: HTMLElement, tabbing: boolean) => {\r\n if (!element) {\r\n return;\r\n }\r\n\r\n if (tabbing) {\r\n element.classList.add('humany-tabbing');\r\n } else {\r\n element.classList.remove('humany-tabbing');\r\n }\r\n };\r\n\r\n const handleKeydown = (e: KeyboardEvent) => {\r\n if (e.key === 'Tab') {\r\n toggleTabbing(triggerDOMElement, true);\r\n } else if (\r\n !(\r\n e.key === 'Enter' &&\r\n document.activeElement &&\r\n document.activeElement.classList.contains('humany-trigger')\r\n )\r\n ) {\r\n toggleTabbing(triggerDOMElement, false);\r\n }\r\n };\r\n\r\n const handleClick = (e: MouseEvent) => {\r\n if (\r\n document.activeElement &&\r\n document.activeElement.classList.contains('humany-trigger') &&\r\n document.activeElement.classList.contains('humany-tabbing')\r\n ) {\r\n return;\r\n }\r\n toggleTabbing(triggerDOMElement, false);\r\n };\r\n\r\n document.addEventListener('keydown', handleKeydown);\r\n document.addEventListener('click', handleClick);\r\n\r\n return () => {\r\n document.removeEventListener('keydown', handleKeydown);\r\n document.removeEventListener('click', handleClick);\r\n };\r\n};\r\n\r\nexport type TriggerElementOptions = {\r\n symbol?: { type: string; content: string };\r\n widgetName: string;\r\n label?: string;\r\n ariaLabel?: string;\r\n tooltip?: string;\r\n};\r\n\r\nexport function createTriggerElement(element: HTMLElement, options: TriggerElementOptions) {\r\n const { symbol, widgetName, label = '', ariaLabel = '', tooltip = '' } = options;\r\n\r\n element.classList.add('humany-trigger');\r\n element.classList.add(`humany_${widgetName}`);\r\n\r\n if (label.length) {\r\n element.classList.add('humany-has-text');\r\n }\r\n\r\n if (ariaLabel.length && !element.getAttribute('aria-label')) {\r\n element.setAttribute('aria-label', ariaLabel);\r\n }\r\n\r\n if (ariaLabel.length && !element.getAttribute('tabindex')) {\r\n element.setAttribute('tabindex', '0');\r\n }\r\n\r\n if (tooltip.length && !element.getAttribute('title')) {\r\n element.setAttribute('title', tooltip);\r\n }\r\n\r\n const symbolHtml = renderSymbol(symbol) || '';\r\n element.innerHTML = `${symbolHtml}\r\n <span class=\"humany-close\">\r\n <svg width=\"18\" height=\"9\" viewBox=\"0 0 18 9\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path d=\"M9 9C8.81794 9.00045 8.63759 8.96634 8.46939 8.89965C8.3012 8.83295 8.14851 8.735 8.02015 8.61145L0.194523 1.12367C0.068294 0.99862 -0.00155266 0.831133 2.61958e-05 0.657285C0.00160506 0.483436 0.0744832 0.317136 0.202964 0.194202C0.331445 0.0712675 0.505249 0.00153576 0.686941 2.50649e-05C0.868634 -0.00148563 1.04368 0.0653456 1.17437 0.186125L9 7.6739L16.8256 0.186125C16.9563 0.0653456 17.1314 -0.00148563 17.3131 2.50649e-05C17.4948 0.00153576 17.6686 0.0712675 17.797 0.194202C17.9255 0.317136 17.9984 0.483436 18 0.657285C18.0016 0.831133 17.9317 0.99862 17.8055 1.12367L9.97985 8.61145C9.85149 8.735 9.6988 8.83295 9.53061 8.89965C9.36241 8.96634 9.18206 9.00045 9 9Z\" fill=\"white\"/>\r\n </svg>\r\n </span>\r\n <span class=\"humany-loader\">\r\n <svg viewBox=\"25 25 50 50\">\r\n <circle\r\n cx=\"50\"\r\n cy=\"50\"\r\n r=\"20\"\r\n fill=\"none\"\r\n stroke=\"#000\"\r\n stroke-width=\"2\"\r\n stroke-miterlimit=\"10\" />\r\n </svg>\r\n </span>\r\n ${label.length ? `<span>${label}</span>` : ''}`;\r\n\r\n setTimeout(() => element && (element as HTMLElement).classList.add('humany-rendered'));\r\n\r\n return triggerTabHandler(element);\r\n}\r\n\r\nexport function setInactive(elements: HTMLElement | HTMLElement[], title?: string) {\r\n if (elements instanceof HTMLElement) {\r\n if (title) {\r\n elements.setAttribute('title', title);\r\n }\r\n elements.classList.remove('humany-active');\r\n elements.classList.remove('humany-loading');\r\n } else if (elements instanceof Array) {\r\n elements.forEach((e) => {\r\n if (title) {\r\n e.setAttribute('title', title);\r\n }\r\n e.classList.remove('humany-active');\r\n e.classList.remove('humany-loading');\r\n });\r\n }\r\n}\r\nexport function setLoading(elements: HTMLElement | HTMLElement[]) {\r\n if (elements instanceof HTMLElement) {\r\n elements.classList.remove('humany-active');\r\n elements.classList.add('humany-loading');\r\n } else if (elements instanceof Array) {\r\n elements.forEach((e) => {\r\n e.classList.remove('humany-active');\r\n e.classList.add('humany-loading');\r\n });\r\n }\r\n}\r\nexport function setActive(elements: HTMLElement | HTMLElement[], title?: string) {\r\n if (elements instanceof HTMLElement) {\r\n if (title) {\r\n elements.setAttribute('title', title);\r\n }\r\n elements.classList.add('humany-active');\r\n elements.classList.remove('humany-loading');\r\n } else if (elements instanceof Array) {\r\n elements.forEach((e) => {\r\n if (title) {\r\n e.setAttribute('title', title);\r\n }\r\n e.classList.add('humany-active');\r\n e.classList.remove('humany-loading');\r\n });\r\n }\r\n}\r\n","import { ViewOutletOptions } from './view-outlet';\r\n\r\nenum ProvidedElements {\r\n None = 'none',\r\n WidgetDOM = 'widgetDOM',\r\n TriggerDOM = 'triggerDOM',\r\n Both = 'both',\r\n}\r\n\r\nexport enum TriggerType {\r\n Inline = 'inline',\r\n Link = 'link',\r\n Badge = 'badge',\r\n Unsupported = 'unsupported',\r\n}\r\n\r\nexport const determineProvidedElements = (\r\n widgetDOMElement?: HTMLElement,\r\n triggerDOMElement?: HTMLElement\r\n): ProvidedElements => {\r\n if (widgetDOMElement && triggerDOMElement) {\r\n return ProvidedElements.Both;\r\n }\r\n if (widgetDOMElement) {\r\n return ProvidedElements.WidgetDOM;\r\n }\r\n if (triggerDOMElement) {\r\n return ProvidedElements.TriggerDOM;\r\n }\r\n return ProvidedElements.None;\r\n};\r\n\r\nexport const determineTriggerType = (triggerDefinition?: any) => {\r\n if (!triggerDefinition) {\r\n return TriggerType.Inline;\r\n }\r\n if (typeof triggerDefinition === 'boolean' && triggerDefinition) {\r\n return TriggerType.Link;\r\n }\r\n if (typeof triggerDefinition === 'object' && !Array.isArray(triggerDefinition)) {\r\n return TriggerType.Badge;\r\n }\r\n return TriggerType.Unsupported;\r\n};\r\n\r\ntype PrepareDOMElementsOutput = ViewOutletOptions & {\r\n callback?: () => void;\r\n};\r\n\r\nexport const prepareDOMElements = (\r\n name: string,\r\n providedWidgetElement?: HTMLElement,\r\n providedTriggerElement?: HTMLElement,\r\n triggerDefinition?: any,\r\n waitWithReplace: boolean = false\r\n): PrepareDOMElementsOutput => {\r\n const providedElements = determineProvidedElements(\r\n providedWidgetElement,\r\n providedTriggerElement\r\n );\r\n const triggerType = determineTriggerType(triggerDefinition);\r\n\r\n const cachedOriginals = {\r\n widgetDOMElement: providedWidgetElement ? providedWidgetElement.cloneNode(true) : undefined,\r\n triggerDOMElement: providedTriggerElement\r\n ? providedTriggerElement.cloneNode(true)\r\n : undefined,\r\n };\r\n\r\n const output: PrepareDOMElementsOutput = {\r\n triggerType,\r\n cachedOriginals,\r\n widgetDOMElement: document.createElement('div'),\r\n };\r\n\r\n switch (providedElements) {\r\n case ProvidedElements.Both: {\r\n output.widgetDOMElement = providedWidgetElement || document.createElement('div');\r\n if (triggerType !== TriggerType.Inline) {\r\n output.triggerDOMElement = providedTriggerElement;\r\n }\r\n break;\r\n }\r\n case ProvidedElements.WidgetDOM: {\r\n output.widgetDOMElement = providedWidgetElement || document.createElement('div');\r\n if (triggerType !== TriggerType.Inline) {\r\n const triggerElement = document.body.appendChild(document.createElement('a'));\r\n if (triggerType === TriggerType.Link) {\r\n triggerElement.innerText = name;\r\n }\r\n output.triggerDOMElement = triggerElement;\r\n }\r\n break;\r\n }\r\n case ProvidedElements.TriggerDOM: {\r\n const widgetElement = document.createElement('div');\r\n output.widgetDOMElement = widgetElement;\r\n if (triggerType === TriggerType.Inline) {\r\n // replace with widgetDOMElement in the DOM\r\n widgetElement.id = providedTriggerElement?.id || '';\r\n if (waitWithReplace) {\r\n widgetElement.style.display = 'none';\r\n providedTriggerElement?.parentNode?.appendChild(widgetElement);\r\n\r\n output.callback = () => {\r\n providedTriggerElement?.parentNode?.replaceChild(\r\n widgetElement,\r\n providedTriggerElement\r\n );\r\n widgetElement.style.display =\r\n providedTriggerElement?.style.display || 'block';\r\n };\r\n } else {\r\n providedTriggerElement?.parentNode?.replaceChild(\r\n widgetElement,\r\n providedTriggerElement\r\n );\r\n }\r\n output.cachedOriginals.widgetDOMElement = providedTriggerElement;\r\n output.cachedOriginals.triggerDOMElement = undefined;\r\n } else {\r\n output.widgetDOMElement = document.body.appendChild(widgetElement);\r\n output.triggerDOMElement = providedTriggerElement;\r\n }\r\n break;\r\n }\r\n case ProvidedElements.None: {\r\n const widgetElement = document.body.appendChild(document.createElement('div'));\r\n output.widgetDOMElement = widgetElement;\r\n if (triggerType !== TriggerType.Inline) {\r\n const triggerElement = document.body.appendChild(document.createElement('a'));\r\n if (triggerType === TriggerType.Link) {\r\n triggerElement.innerText = name;\r\n }\r\n output.triggerDOMElement = triggerElement;\r\n }\r\n break;\r\n }\r\n }\r\n\r\n return output;\r\n};\r\n","import { readStorage, StorageMedium } from '@telia-ace/widget-services';\r\nimport { Symbol } from '@telia-ace/widget-ui';\r\nimport { notifyDataLoaded } from '@telia-ace/widget-utilities';\r\nimport { Container, Widget } from '@webprovisions/platform';\r\nimport { createTriggerElement, setActive, setLoading } from './html-element-handlers';\r\nimport { TriggerType } from './prepare-dom';\r\n\r\nconst MODALS_STORAGE_KEY = 'modals';\r\n\r\nexport type BadgeOptions = {\r\n symbol?: Symbol;\r\n label?: string;\r\n ariaLabel?: string;\r\n openTooltip?: string;\r\n closedTooltip?: string;\r\n};\r\n\r\nexport type ViewOutletOptions = {\r\n widgetDOMElement: HTMLElement;\r\n triggerDOMElement?: HTMLElement;\r\n triggerOptions?: BadgeOptions | boolean;\r\n triggerType: TriggerType;\r\n cachedOriginals: {\r\n widgetDOMElement?: Node;\r\n triggerDOMElement?: Node;\r\n };\r\n};\r\n\r\ntype Modals = {\r\n name: string;\r\n ref?: HTMLElement;\r\n selector?: string;\r\n};\r\n\r\nexport class ViewOutlet {\r\n container: Container;\r\n private unsubscribe: (() => void)[] = [];\r\n\r\n constructor(container: Container, public options: ViewOutletOptions) {\r\n this.container = container.createChild(this);\r\n this.container.register('widgetDOMElement', this.options.widgetDOMElement);\r\n this.container.register('triggerDOMElement', this.options.triggerDOMElement);\r\n\r\n const widget: Widget = this.container.get('$widget');\r\n this.options.widgetDOMElement.classList.add('humany-widget');\r\n this.options.widgetDOMElement.classList.add(`humany_${widget.name}`);\r\n\r\n const widgetDOMElements = container.get('widgetDOMElements') || [];\r\n container.register('widgetDOMElements', [\r\n ...widgetDOMElements,\r\n this.options.widgetDOMElement,\r\n ]);\r\n }\r\n\r\n /**\r\n * Renders the view outlet to the DOM.\r\n */\r\n render() {\r\n const { widgetDOMElement, triggerDOMElement } = this.options;\r\n\r\n const widget: Widget = this.container.get('$widget');\r\n\r\n if (widgetDOMElement.getAttribute('data-rendered') === 'true') {\r\n return Promise.resolve();\r\n }\r\n\r\n if (triggerDOMElement && this.options.triggerType === TriggerType.Badge) {\r\n setLoading(triggerDOMElement);\r\n }\r\n\r\n return import('./render')\r\n .then((module) => module.default(this.container, widgetDOMElement))\r\n .then(() => {\r\n widgetDOMElement.setAttribute('data-rendered', 'true');\r\n\r\n if (triggerDOMElement && this.options.triggerType === TriggerType.Badge) {\r\n const tooltip = (this.options.triggerOptions as BadgeOptions).openTooltip;\r\n setActive(triggerDOMElement, tooltip);\r\n }\r\n notifyDataLoaded(this.container, widgetDOMElement);\r\n\r\n const widgets = this.container.get('$environment').widgets.all();\r\n\r\n readStorage<Modals[]>(\r\n this.container,\r\n MODALS_STORAGE_KEY,\r\n StorageMedium.Session\r\n ).then((modals) => {\r\n if (modals) {\r\n modals.forEach((modal) => {\r\n if (\r\n widgets.find(\r\n (w: Widget) => w.name === modal.name && w.state === 'activated'\r\n )\r\n ) {\r\n widget.events.dispatch('widget:modal-opened', modal);\r\n }\r\n });\r\n }\r\n });\r\n });\r\n }\r\n\r\n renderBadge(options: BadgeOptions) {\r\n const { triggerDOMElement } = this.options;\r\n\r\n if (!triggerDOMElement) {\r\n return;\r\n }\r\n\r\n if (!triggerDOMElement.getAttribute('role')) {\r\n triggerDOMElement.setAttribute('role', 'button');\r\n }\r\n\r\n const { name }: Widget = this.container.get('$widget');\r\n\r\n const { label, symbol, ariaLabel, closedTooltip, openTooltip } = options;\r\n\r\n const triggerOptions = { closedTooltip, openTooltip };\r\n this.options.triggerOptions = triggerOptions;\r\n\r\n const removeTriggerListeners = createTriggerElement(triggerDOMElement, {\r\n label,\r\n symbol,\r\n ariaLabel,\r\n widgetName: name,\r\n tooltip: closedTooltip,\r\n });\r\n this.unsubscribe.push(removeTriggerListeners);\r\n }\r\n\r\n dispose() {\r\n return import('./unmount').then((module) => {\r\n const { triggerDOMElement, widgetDOMElement } = this.options;\r\n module.default(widgetDOMElement);\r\n\r\n if (this.options.cachedOriginals.widgetDOMElement) {\r\n if (widgetDOMElement) {\r\n widgetDOMElement.parentNode?.replaceChild(\r\n this.options.cachedOriginals.widgetDOMElement,\r\n widgetDOMElement\r\n );\r\n }\r\n }\r\n if (this.options.cachedOriginals.triggerDOMElement) {\r\n if (triggerDOMElement) {\r\n triggerDOMElement.parentNode?.replaceChild(\r\n this.options.cachedOriginals.triggerDOMElement,\r\n triggerDOMElement\r\n );\r\n }\r\n }\r\n\r\n this.unsubscribe.forEach((unsubscribe) => {\r\n unsubscribe();\r\n });\r\n\r\n widgetDOMElement.parentNode?.removeChild(widgetDOMElement);\r\n triggerDOMElement?.parentNode?.removeChild(triggerDOMElement);\r\n });\r\n }\r\n}\r\n","import {\r\n ChangesetOptions,\r\n ChangesetProvider,\r\n ComponentNodeAttributes,\r\n ComponentNodeSettings,\r\n ComponentPlatform,\r\n ComponentQuery,\r\n ComponentQueryRule,\r\n createComponentModel,\r\n WidgetSettings,\r\n} from '@telia-ace/widget-core';\r\nimport {\r\n createStorageWriter,\r\n readStorage,\r\n StorageCategory,\r\n StorageMedium,\r\n StorageWriter,\r\n} from '@telia-ace/widget-services';\r\nimport { lock } from '@telia-ace/widget-utilities';\r\nimport { Container, Widget, WidgetState } from '@webprovisions/platform';\r\n\r\nconst STORAGE_KEY = 'changesets';\r\n\r\ntype ChangesetItem = {\r\n rules: ComponentQueryRule[];\r\n attributes: Partial<ComponentNodeAttributes>;\r\n options: ChangesetOptions;\r\n};\r\n\r\ntype ChangesetItemBag = {\r\n items?: { [key: string]: ChangesetItem };\r\n keys?: string[];\r\n};\r\n\r\nconst convertSettingsToAttributes = (\r\n settings: Partial<ComponentNodeSettings>\r\n): Partial<ComponentNodeAttributes> => {\r\n const attributes: Partial<ComponentNodeAttributes> = { tags: settings.tags };\r\n if (settings.context && typeof settings.context !== 'function') {\r\n attributes.context = settings.context;\r\n }\r\n if (settings.properties && typeof settings.properties !== 'function') {\r\n attributes.properties = settings.properties;\r\n }\r\n if (settings.layout && typeof settings.layout !== 'function') {\r\n attributes.layout = settings.layout;\r\n }\r\n\r\n return attributes;\r\n};\r\n\r\nexport class LocalStorageChangesetProvider implements ChangesetProvider {\r\n constructor(private container: Container, private storageWriter: StorageWriter) {}\r\n\r\n static create(container: Container): Promise<LocalStorageChangesetProvider> {\r\n return createStorageWriter(container, STORAGE_KEY, StorageCategory.Necessary, {\r\n medium: StorageMedium.Local,\r\n }).then((storageWriter) => new LocalStorageChangesetProvider(container, storageWriter));\r\n }\r\n\r\n write(\r\n key: string,\r\n target: ComponentQuery,\r\n attributes: Partial<ComponentNodeSettings>,\r\n options: ChangesetOptions\r\n ): Promise<any> {\r\n return lock(this)(() => {\r\n return readStorage<ChangesetItemBag>(\r\n this.container,\r\n STORAGE_KEY,\r\n StorageMedium.Local\r\n ).then((bag = {}) => {\r\n const { keys = [], items = {} } = bag;\r\n const existingIndex = keys.indexOf(key);\r\n if (existingIndex > -1) {\r\n keys.splice(existingIndex, 1);\r\n }\r\n keys.push(key);\r\n items[key] = {\r\n options,\r\n attributes: convertSettingsToAttributes(attributes),\r\n rules: target.rules,\r\n };\r\n return this.storageWriter({ keys, items });\r\n });\r\n });\r\n }\r\n\r\n remove(key: string): Promise<any> {\r\n return lock(this)(() => {\r\n return readStorage<ChangesetItemBag>(\r\n this.container,\r\n STORAGE_KEY,\r\n StorageMedium.Local\r\n ).then((bag = {}) => {\r\n const { keys = [], items = {} } = bag;\r\n const indexToRemove = keys.indexOf(key);\r\n if (indexToRemove > -1) {\r\n keys.splice(indexToRemove, 1);\r\n delete items[key];\r\n return this.storageWriter(bag);\r\n }\r\n });\r\n });\r\n }\r\n\r\n load(platform: ComponentPlatform): Promise<any> {\r\n return lock(this)(() => {\r\n return readStorage<ChangesetItemBag>(\r\n this.container,\r\n STORAGE_KEY,\r\n StorageMedium.Local\r\n ).then((bag = {}) => {\r\n const { keys = [], items = {} } = bag;\r\n keys.forEach((key) => {\r\n const item = items[key];\r\n if (item) {\r\n const { rules, attributes, options } = item;\r\n platform.write({\r\n attributes,\r\n options,\r\n target: new ComponentQuery(platform, rules),\r\n });\r\n }\r\n });\r\n });\r\n });\r\n }\r\n}\r\n\r\nexport const createPlatform = (widget: Widget): Promise<ComponentPlatform> => {\r\n const { container } = widget;\r\n return LocalStorageChangesetProvider.create(container).then((localStorage) => {\r\n const settings: WidgetSettings = container.get('$settings');\r\n const providers = { localStorage };\r\n const platform = new ComponentPlatform(widget, providers);\r\n const destructComponentModel = createComponentModel(platform, settings);\r\n\r\n widget.events.subscribe('widget:state-change', (event, data: { state: WidgetState }) => {\r\n if (data.state === WidgetState.Deactivating) {\r\n destructComponentModel();\r\n }\r\n });\r\n\r\n return platform;\r\n });\r\n};\r\n","export type SiteLocation = {\r\n host: string;\r\n pathname: string;\r\n};\r\n\r\nexport const createSiteProvider = (\r\n site: 'current' | 'referrer',\r\n forceHttps: boolean\r\n): (() => string) => {\r\n return () => {\r\n const parseLocation = (href: string): SiteLocation => {\r\n const link = document.createElement('a');\r\n link.href = href;\r\n return link;\r\n };\r\n\r\n let location: SiteLocation = window.location;\r\n if (site === 'referrer' && document.referrer) {\r\n location = parseLocation(document.referrer);\r\n }\r\n return [forceHttps ? 'https:' : '', '//', location.host, location.pathname].join('');\r\n };\r\n};\r\n","import { WidgetSettings } from '@telia-ace/widget-core';\r\nimport { Container, Widget } from '@webprovisions/platform';\r\nimport { createPlatform } from './component-platform-factory';\r\nimport { createSiteProvider } from './site-provider';\r\n\r\nexport const createRoutingService = (container: Container) => {\r\n return import('@telia-ace/widget-routing').then(({ RoutingService, HistoryMode }) => {\r\n return container.get('settings').then((settings: WidgetSettings) => {\r\n const {\r\n routing: { initialPath = '/', mode = HistoryMode.scopedHash, basePath },\r\n views,\r\n } = settings;\r\n\r\n const routingService = new RoutingService(container, {\r\n initialPath,\r\n mode,\r\n routes: Object.keys(views).map((name) => ({\r\n name,\r\n path: views[name].path,\r\n })),\r\n basePath,\r\n });\r\n return routingService;\r\n });\r\n });\r\n};\r\n\r\nexport const createStorageService = (container: Container) => {\r\n return import('@telia-ace/widget-services').then(({ StorageProvider }) => {\r\n return new StorageProvider();\r\n });\r\n};\r\n\r\nexport const createServiceClient = (container: Container) => {\r\n return import('@telia-ace/knowledge-serviceclient').then(({ ServiceClient, ServiceProxy }) => {\r\n return container.get('settings').then((settings: WidgetSettings) => {\r\n const { name, events }: Widget = container.get('$widget');\r\n const {\r\n data: { projection = '', site = 'current', forceHttps = false },\r\n } = settings;\r\n\r\n const proxy = new ServiceProxy(projection, { credentials: 'same-origin' });\r\n\r\n // Replacing '_contact' & '_contact-method' while\r\n // still using the shadow widget concept\r\n const client = new ServiceClient(\r\n proxy,\r\n {\r\n funnel: name.replace('_contact-method', '').replace('_contact', ''),\r\n site: createSiteProvider(site, forceHttps),\r\n },\r\n null,\r\n container\r\n );\r\n\r\n events.subscribe('widget:settings-updated', (event, { data }: WidgetSettings) => {\r\n if (data && data.projection !== projection) {\r\n client.proxy.setBaseUrl(data.projection);\r\n }\r\n });\r\n\r\n return client;\r\n });\r\n });\r\n};\r\n\r\nexport const createActionResolver = (container: Container) => {\r\n return import('@telia-ace/widget-core').then(({ ActionResolver }) => {\r\n return new ActionResolver(container);\r\n });\r\n};\r\n\r\nexport const createComponentResolver = (container: Container) => {\r\n return import('@telia-ace/widget-core').then(({ ComponentResolver }) => {\r\n return new ComponentResolver(container);\r\n });\r\n};\r\n\r\nexport const createComponentPlatform = (container: Container) => {\r\n return import('@telia-ace/widget-core').then(({ ComponentPlatform, createComponentModel }) => {\r\n return createPlatform(container.get('$widget'));\r\n });\r\n};\r\n","import {\r\n ActionResolver,\r\n ComponentPlatform,\r\n WidgetRenderState,\r\n WidgetSettings,\r\n} from '@telia-ace/widget-core';\r\nimport { onWidgetUrl, RouteData, RoutingService } from '@telia-ace/widget-routing';\r\nimport {\r\n createStorageWriter,\r\n readStorage,\r\n StorageCategory,\r\n StorageMedium,\r\n StorageScope,\r\n} from '@telia-ace/widget-services';\r\nimport { removeNullAndUndefinedValues, uuid } from '@telia-ace/widget-utilities';\r\nimport { BootstrappingActivationData, supportBootstrapping } from '@webprovisions/bootstrapping';\r\nimport { Container, EventSubscriptionCancellation, WidgetType } from '@webprovisions/platform';\r\nimport { BadgeOptions, ViewOutlet, ViewOutletOptions } from '././ui/view-outlet';\r\nimport {\r\n createActionResolver,\r\n createComponentPlatform,\r\n createComponentResolver,\r\n createRoutingService,\r\n createServiceClient,\r\n createStorageService,\r\n} from './services';\r\nimport { setActive, setInactive } from './ui/html-element-handlers';\r\nimport { determineTriggerType, prepareDOMElements, TriggerType } from './ui/prepare-dom';\r\n\r\nconst SETTINGS_STORAGE_KEY = '$settings';\r\nconst OPEN_STORAGE_KEY = 'open';\r\nconst STICKY_WIDGET_STORAGE_KEY = 'activeStickyWidget';\r\n\r\nexport enum InitialRenderState {\r\n Open = 'open',\r\n Closed = 'closed',\r\n Hidden = 'hidden',\r\n Storage = 'storage',\r\n}\r\n\r\nexport type RenderData = {\r\n widgetDOMElement?: HTMLElement;\r\n triggerDOMElement?: HTMLElement;\r\n key?: string;\r\n open?: boolean;\r\n withRenderState?: InitialRenderState;\r\n};\r\n\r\nexport type AttachData = {\r\n widgetDOMElement?: HTMLElement;\r\n triggerDOMElement?: HTMLElement;\r\n key?: string;\r\n withRenderState?: InitialRenderState;\r\n};\r\n\r\nexport default class Widget extends WidgetType {\r\n outlets = new Map<string, ViewOutlet>();\r\n activated: Promise<void> | undefined = undefined;\r\n subs: EventSubscriptionCancellation[] = [];\r\n\r\n constructor(container: Container) {\r\n super(container);\r\n\r\n this.container.registerAsync('storage', () => createStorageService(this.container));\r\n\r\n this.container.registerFactory('settings', () => {\r\n return readStorage<Partial<WidgetSettings>>(\r\n this.container,\r\n SETTINGS_STORAGE_KEY,\r\n StorageMedium.Local\r\n ).then((settings = {}) => {\r\n return {\r\n ...this.container.get('$settings'),\r\n ...settings,\r\n };\r\n });\r\n });\r\n\r\n supportBootstrapping(this as any, 'load', this.handleBootstrapping);\r\n\r\n this.container.registerAsync('componentResolver', () =>\r\n createComponentResolver(this.container)\r\n );\r\n this.container.registerAsync('matchingClient', () => createServiceClient(this.container));\r\n this.container.registerAsync('router', () => createRoutingService(this.container));\r\n this.container.registerAsync('actionResolver', () => createActionResolver(this.container));\r\n this.container.register('matchMedia', window.matchMedia);\r\n this.container.registerAsync('components', () => createComponentPlatform(this.container));\r\n }\r\n\r\n handleBootstrapping = (activationData: BootstrappingActivationData) => {\r\n const options = {\r\n triggerDOMElement: activationData.sourceDOMElement,\r\n withRenderState: InitialRenderState.Storage,\r\n };\r\n\r\n this.container.get('settings').then((settings: any) => {\r\n const { activate } = settings;\r\n const shouldActivate =\r\n typeof activate === 'undefined' || activate === null || activate === true;\r\n\r\n if (shouldActivate) {\r\n this.activated = (this.activated || this.widget.activate()).then(() =>\r\n this.attach(options)\r\n );\r\n }\r\n });\r\n };\r\n\r\n initialize() {\r\n const promises = this.container.getManyAsync(\r\n 'actionResolver',\r\n 'router',\r\n 'components'\r\n ) as Promise<{\r\n actionResolver: ActionResolver;\r\n router: RoutingService;\r\n components: ComponentPlatform;\r\n }>;\r\n\r\n return Promise.all([promises, this.container.get('settings')]).then(\r\n ([{ actionResolver, router, components }, settings]) => {\r\n actionResolver.subscribe(this.widget.name, (origin, action, value) =>\r\n this.onAction(action, value)\r\n );\r\n\r\n const switchViewNodes = (routeName: string) => {\r\n components.nodes.query({ type: 'view' }).forEach((viewNode) => {\r\n components.setSwitch(viewNode, routeName);\r\n });\r\n };\r\n\r\n const initialRoute = router.getInitialRoute()?.name || 'index';\r\n switchViewNodes(initialRoute);\r\n\r\n this.events.subscribe('widget:data-loaded', (e, { element }) => {\r\n if (this.widget.container.get('seoConfiguration')) {\r\n this.events.dispatch('widget:preloaded-replaced', {\r\n element,\r\n });\r\n }\r\n });\r\n\r\n this.events.subscribe(\r\n 'router:change',\r\n (e, { previous = { routeData: {} }, next = { routeData: {} } }) => {\r\n const { routeData: prevData }: { routeData: RouteData } = previous;\r\n const { routeData: nextData }: { routeData: RouteData } = next;\r\n\r\n const notFoundView = Object.keys(settings.views).reduce((acc, key) => {\r\n const view = settings.views[key];\r\n if (typeof view.path === 'undefined') {\r\n return key;\r\n }\r\n return acc;\r\n }, '');\r\n\r\n // route not found\r\n if (!nextData.name && notFoundView) {\r\n switchViewNodes(notFoundView);\r\n } else {\r\n switchViewNodes(nextData.name);\r\n }\r\n\r\n removeNullAndUndefinedValues(prevData && prevData.params);\r\n removeNullAndUndefinedValues(nextData && nextData.params);\r\n\r\n this.container\r\n .getAsync('actionResolver')\r\n .then((actionResolver: ActionResolver) => {\r\n actionResolver.action(this.widget.name, 'routeChange', {\r\n next: nextData,\r\n previous: prevData,\r\n });\r\n });\r\n }\r\n );\r\n\r\n return router.initialize();\r\n }\r\n );\r\n }\r\n\r\n attach(attachData: AttachData = {}) {\r\n return this.container.get('settings').then(({ trigger }: WidgetSettings) => {\r\n const {\r\n widgetDOMElement,\r\n key = uuid(),\r\n triggerDOMElement,\r\n withRenderState,\r\n } = attachData;\r\n\r\n const triggerType = determineTriggerType(trigger);\r\n\r\n // This could probably be defined already when bootstrapping occurs,\r\n // Webprovisions knows when a widget is prerendered,\r\n // see \"queryPrerenderedTargets in @webprovisions/bootstrapping\"\r\n const waitWithReplace =\r\n triggerType === TriggerType.Inline &&\r\n (triggerDOMElement?.childElementCount || 0) > 0;\r\n\r\n const outletOptions = prepareDOMElements(\r\n this.widget.name,\r\n widgetDOMElement,\r\n triggerDOMElement,\r\n trigger,\r\n waitWithReplace\r\n );\r\n\r\n if (this.outlets.size < 1 && !withRenderState) {\r\n this.setRenderState('unset');\r\n }\r\n\r\n const swap = () => {\r\n const isReady = () =>\r\n widgetDOMElement.querySelectorAll('[data-loading=true]').length === 0;\r\n const [widgetDOMElement] = this.widget.container.get('widgetDOMElements');\r\n\r\n const watcher = (mutations: MutationRecord[], observer: MutationObserver) => {\r\n if (isReady()) {\r\n if (outletOptions.callback) {\r\n outletOptions.callback();\r\n }\r\n observer.disconnect();\r\n }\r\n };\r\n const options = {\r\n attributes: true,\r\n subtree: true,\r\n childList: true\r\n };\r\n\r\n if (isReady()) {\r\n outletOptions.callback && outletOptions.callback();\r\n }\r\n const observer = new MutationObserver(watcher);\r\n\r\n observer.observe(widgetDOMElement, options);\r\n };\r\n\r\n if (waitWithReplace) {\r\n this.widget.container.getAsync('dataClient').then(({ events }: any) => {\r\n events.subscribe('data-client:fetched', (event: any, data: any) => {\r\n if (data.unresolvedQueries === 0) {\r\n swap();\r\n }\r\n });\r\n });\r\n }\r\n\r\n const outlet = this.getOrCreateViewOutlet(key, outletOptions);\r\n this.outlets.set(key, outlet);\r\n this.widget.events.dispatch('widget:attached', {}, { bubbles: true });\r\n\r\n if (outletOptions.triggerType === TriggerType.Badge && trigger) {\r\n outletOptions.triggerDOMElement?.setAttribute('aria-expanded', 'false');\r\n outlet?.renderBadge(trigger);\r\n }\r\n\r\n if (outletOptions.triggerType !== TriggerType.Inline) {\r\n outletOptions.triggerDOMElement?.addEventListener('click', (event: any) => {\r\n event.preventDefault();\r\n this.container\r\n .get('settings')\r\n .then(({ trigger: updatedTrigger }: WidgetSettings) => {\r\n outlet\r\n .render()\r\n .then(() => this.renderState())\r\n .then((renderState) => {\r\n if (\r\n updatedTrigger &&\r\n updatedTrigger.action &&\r\n updatedTrigger.action === 'hide'\r\n ) {\r\n return renderState === WidgetRenderState.open\r\n ? this.hide()\r\n : this.open();\r\n }\r\n return renderState === WidgetRenderState.open\r\n ? this.close()\r\n : this.open();\r\n });\r\n });\r\n });\r\n }\r\n\r\n if (this.outlets.size > 1) {\r\n return this.renderState().then((state: WidgetRenderState) => {\r\n // new outlets should have the same state as existing ones\r\n this.triggerStateIfApplicable(state);\r\n });\r\n }\r\n\r\n if (withRenderState) {\r\n if (withRenderState === InitialRenderState.Storage) {\r\n return this.renderState().then((state: WidgetRenderState) => {\r\n if (outletOptions.triggerType === TriggerType.Inline) {\r\n this.triggerStateIfApplicable('open');\r\n return;\r\n }\r\n this.triggerStateIfApplicable(state);\r\n });\r\n }\r\n return this.triggerStateIfApplicable(withRenderState);\r\n }\r\n });\r\n }\r\n\r\n detach(key?: string) {\r\n if (key) {\r\n if (this.outlets.has(key)) {\r\n const outlet = this.outlets.get(key);\r\n outlet?.dispose();\r\n this.outlets.delete(key);\r\n return;\r\n }\r\n if (process.env.NODE_ENV !== 'production') {\r\n console.warn(`detach(): Could not find View Outlet with key ${key}`);\r\n }\r\n return;\r\n }\r\n this.outlets.forEach((outlet) => {\r\n outlet.dispose();\r\n });\r\n this.outlets.clear();\r\n }\r\n\r\n private triggerStateIfApplicable(input: string) {\r\n return this.container.getAsync('router').then((router) => {\r\n switch (input) {\r\n case 'closed':\r\n this.close();\r\n break;\r\n case 'open':\r\n this.open();\r\n break;\r\n case 'hidden':\r\n this.hide();\r\n router.start();\r\n break;\r\n default:\r\n return;\r\n }\r\n });\r\n }\r\n\r\n private getOrCreateViewOutlet(key: string, options: ViewOutletOptions): ViewOutlet {\r\n return (\r\n this.outlets.has(key) ? this.outlets.get(key) : new ViewOutlet(this.container, options)\r\n )!;\r\n }\r\n\r\n render(renderData: RenderData = {}) {\r\n if (process.env.NODE_ENV !== 'production') {\r\n console.warn('widget.render() is deprecated. Use widget.attach() instead.');\r\n }\r\n if (renderData.open) {\r\n const options: AttachData = {\r\n ...renderData,\r\n withRenderState: InitialRenderState.Open,\r\n };\r\n return this.attach(options);\r\n }\r\n return this.attach(renderData);\r\n }\r\n\r\n activate(data?: any) {\r\n if (data?.override) {\r\n this.setSettings(() => data.override);\r\n }\r\n // TODO: this is considered a hack, remove apiNotificationPriorityBy\r\n // when there is a better way to get notifications from backend\r\n if (data?.apiNotificationPriorityBy) {\r\n this.container.register('apiNotificationPriorityBy', data.apiNotificationPriorityBy);\r\n }\r\n }\r\n\r\n setSettings(\r\n fn: (settings: WidgetSettings) => Promise<Partial<WidgetSettings>>\r\n ): Promise<WidgetSettings> {\r\n return Promise.all([\r\n this.container.get('settings'),\r\n createStorageWriter(this.container, SETTINGS_STORAGE_KEY, StorageCategory.Necessary, {\r\n medium: StorageMedium.Local,\r\n }),\r\n ]).then(([settings, write]) => {\r\n return Promise.resolve(fn(settings)).then((override) => {\r\n return write(override).then(() => {\r\n const updated = { ...settings, ...override };\r\n this.widget.events.dispatch('widget:settings-updated', updated);\r\n return updated;\r\n });\r\n });\r\n });\r\n }\r\n\r\n clearSettings(): Promise<void> {\r\n return createStorageWriter(\r\n this.container,\r\n SETTINGS_STORAGE_KEY,\r\n StorageCategory.Necessary,\r\n { medium: StorageMedium.Local }\r\n )\r\n .then((write) => write())\r\n .then(() => this.container.get('settings'))\r\n .then((settings) => {\r\n this.widget.events.dispatch('widget:settings-updated', settings);\r\n });\r\n }\r\n\r\n action({ action, value }: { action: string; value?: any }) {\r\n return this.container.getAsync('actionResolver').then((actionResolver: ActionResolver) => {\r\n actionResolver.action(this.widget.name, action, value);\r\n });\r\n }\r\n\r\n renderState(): Promise<WidgetRenderState> {\r\n if (onWidgetUrl(this.container)) {\r\n return Promise.resolve(WidgetRenderState.open);\r\n }\r\n const readSessionOpen = () =>\r\n readStorage<WidgetRenderState>(\r\n this.container,\r\n OPEN_STORAGE_KEY,\r\n StorageMedium.Session\r\n ).then((value = WidgetRenderState.closed) => value);\r\n\r\n const readLocalOpen = () =>\r\n readStorage<WidgetRenderState>(\r\n this.container,\r\n OPEN_STORAGE_KEY,\r\n StorageMedium.Session\r\n ).then((value = WidgetRenderState.closed) => value);\r\n\r\n return this.container.getAsync('router').then((routing: RoutingService) => {\r\n if (routing.isSticky()) {\r\n return readLocalOpen().then((localOpen) => {\r\n return localOpen === WidgetRenderState.open ? localOpen : readSessionOpen();\r\n });\r\n }\r\n return readSessionOpen();\r\n });\r\n }\r\n\r\n hide(): Promise<void> {\r\n if (this.outlets.size < 1) {\r\n if (process.env.NODE_ENV !== 'production') {\r\n console.warn(\r\n 'hide(): No-op as no view outlets are registered. Invoke the attach() command first.'\r\n );\r\n }\r\n return Promise.resolve();\r\n }\r\n this.outlets.forEach((outlet) => outlet.render());\r\n return this.action({ action: 'hide' }).then(() => {\r\n this.setTriggerState(false);\r\n });\r\n }\r\n\r\n open(): Promise<void> {\r\n if (this.outlets.size < 1) {\r\n if (process.env.NODE_ENV !== 'production') {\r\n console.warn(\r\n 'open(): No-op as no view outlets are registered. Invoke the attach() command first.'\r\n );\r\n }\r\n return Promise.resolve();\r\n }\r\n this.outlets.forEach((outlet) => outlet.render());\r\n return this.action({ action: 'open' }).then(() => {\r\n this.widget.events.dispatch('tracking:widget-rendered', {});\r\n return this.onOpen();\r\n });\r\n }\r\n\r\n close(): Promise<void> {\r\n if (this.outlets.size < 1) {\r\n if (process.env.NODE_ENV !== 'production') {\r\n console.warn(\r\n 'close(): No-op as no view outlets are registered. Invoke the attach() command first.'\r\n );\r\n }\r\n return Promise.resolve();\r\n }\r\n return this.action({ action: 'close' }).then(() => this.onClose());\r\n }\r\n\r\n show(): Promise<void> {\r\n if (process.env.NODE_ENV !== 'production') {\r\n console.warn(\r\n 'show(): Command is deprecated and will be removed in the future. Use open() instead.'\r\n );\r\n }\r\n return this.open();\r\n }\r\n\r\n private onAction(action: string, value: any) {\r\n switch (action) {\r\n case 'close':\r\n case 'open':\r\n case 'hide':\r\n const newState =\r\n action === 'open'\r\n ? WidgetRenderState.open\r\n : action === 'close'\r\n ? WidgetRenderState.closed\r\n : WidgetRenderState.hidden;\r\n\r\n return this.setRenderState(newState).then(() => {\r\n this.setTriggerState(newState === WidgetRenderState.open);\r\n if (newState !== WidgetRenderState.hidden) {\r\n newState === WidgetRenderState.open ? this.onOpen() : this.onClose();\r\n } else {\r\n this.outlets.forEach((outlet) =>\r\n outlet.options.triggerDOMElement?.setAttribute('aria-expanded', 'false')\r\n );\r\n }\r\n });\r\n }\r\n }\r\n\r\n private setRenderState(newState: string): Promise<void> {\r\n const { invoke, events } = this.container.get('$widget');\r\n return Promise.all([\r\n createStorageWriter(this.container, OPEN_STORAGE_KEY, StorageCategory.Necessary, {\r\n medium: StorageMedium.Session,\r\n }),\r\n createStorageWriter(this.container, OPEN_STORAGE_KEY, StorageCategory.Necessary, {\r\n medium: StorageMedium.Local,\r\n duration: { minutes: 5 },\r\n }),\r\n this.container.getAsync('router'),\r\n invoke('renderState'),\r\n ]).then(([writeSessionOpen, writeLocalOpen, routing, previousRenderState]) => {\r\n if (newState === 'unset' || !newState) {\r\n writeLocalOpen();\r\n writeSessionOpen();\r\n } else {\r\n if (routing.isSticky()) {\r\n writeLocalOpen(newState);\r\n }\r\n writeSessionOpen(newState);\r\n }\r\n events.dispatch('widget:render-state-changed', {\r\n previous: previousRenderState,\r\n next: newState,\r\n });\r\n });\r\n }\r\n\r\n private onOpen(): Promise<void> {\r\n return this.container.getAsync('router').then((router: RoutingService) => {\r\n this.outlets.forEach((outlet) =>\r\n outlet.options.triggerDOMElement?.setAttribute('aria-expanded', 'true')\r\n );\r\n return router.start();\r\n });\r\n }\r\n\r\n private onClose(): Promise<void> {\r\n const services = this.container.getManyAsync('router', 'components') as Promise<{\r\n router: RoutingService;\r\n components: ComponentPlatform;\r\n }>;\r\n\r\n const resetActivateProp = () => {\r\n return this.container.get('settings').then((widgetSettings: WidgetSettings) => {\r\n const { activate } = this.container.get('$settings');\r\n if (widgetSettings.activate !== activate) {\r\n return this.setSettings(() => Promise.resolve({ activate }));\r\n }\r\n return Promise.resolve();\r\n });\r\n };\r\n\r\n return resetActivateProp()\r\n .then(() => {\r\n return services;\r\n })\r\n .then(\r\n ({\r\n router,\r\n components,\r\n }: {\r\n router: RoutingService;\r\n components: ComponentPlatform;\r\n }) => {\r\n const visibleNodes = components.nodes.visible;\r\n this.outlets.forEach((outlet) =>\r\n outlet.options.triggerDOMElement?.setAttribute('aria-expanded', 'false')\r\n );\r\n\r\n if (\r\n visibleNodes.filter(\r\n (c) =>\r\n c.attributes.properties.animation &&\r\n c.attributes.properties.animation !== 'none'\r\n ).length\r\n ) {\r\n return new Promise<RoutingService>((resolve) => {\r\n setTimeout(() => {\r\n resolve(router);\r\n }, 200);\r\n });\r\n }\r\n\r\n return Promise.resolve(router);\r\n }\r\n )\r\n .then((router: RoutingService) => router.stop());\r\n }\r\n\r\n private setTriggerState(open: boolean) {\r\n this.outlets.forEach((outlet) => {\r\n const {\r\n options: { triggerDOMElement, triggerOptions },\r\n } = outlet;\r\n const { openTooltip, closedTooltip } = (triggerOptions as BadgeOptions) || {};\r\n if (triggerDOMElement) {\r\n open\r\n ? setActive(triggerDOMElement, openTooltip)\r\n : setInactive(triggerDOMElement, closedTooltip);\r\n }\r\n });\r\n }\r\n\r\n deactivate() {\r\n this.subs.forEach((s) => s());\r\n\r\n const promises: Promise<void>[] = [];\r\n this.outlets.forEach((outlet) => promises.push(outlet.dispose()));\r\n\r\n return readStorage<string>(\r\n this.container,\r\n STICKY_WIDGET_STORAGE_KEY,\r\n StorageMedium.Local\r\n ).then((value) => {\r\n /**\r\n * Remove stored sticky widget from implementation's localStorage if applicable\r\n */\r\n if (value === this.widget.name) {\r\n return createStorageWriter(\r\n this.container,\r\n STICKY_WIDGET_STORAGE_KEY,\r\n StorageCategory.Necessary,\r\n {\r\n medium: StorageMedium.Local,\r\n scope: StorageScope.Implementation,\r\n }\r\n )\r\n .then((write) => write())\r\n .then(() => Promise.all(promises));\r\n }\r\n return Promise.all(promises);\r\n });\r\n }\r\n}\r\n"],"names":["SlideDirection","determineSlideDirection","currentRouteName","nextRouteName","routeRanking","Switch","views","location","render","React","RouteSwitch","__spreadProps","__spreadValues","key","name","path","Route","StyledViewContainer","styled","StyledView","Grid","p","routeHierarchy","AnimatedView","_a","_b","className","other","__objRest","routeName","setRouteName","useState","transitionDirection","setTransitionDirection","nextRoute","useRouteData","router","useRouter","properties","useProperties","context","useContext","container","useContainer","node","useComponentNode","gap","columns","animation","scrollable","areaProperties","scrollableCss","elem","useScroll","renderView","transitionState","direction","animationStyles","getAnimation","childNode","appendClassNames","Component","transitionComposer","TransitionGroup","child","Transition","state","View","styling","css","paddedBorderTabStyle","StyledAnimatedView","NonResolvedComponentWrapper","_c","ResolvableComponent","forwardRef","ref","children","ResolvedComponent","useComponent","type","id","useComponentDescriptor","StyledResolvableComponent","useMemo","filterCssPropsStyle","Typography","Suspense","useComponentNodeProperties","components","useComponentPlatform","setProperties","isMounted","useIsMounted","useEffect","unsubscribe","event","data","isVisible","size","branch","ariaLabel","tabIndex","extraContext","descriptor","setDescriptor","useColumns","indent","useLayout","visible","componentNode","asDescriptor","unmount","cardinal","contextFonts","accessibility","restContext","fonts","theme","ThemeProvider","ComponentNodeContext","ComponentPropertyContext","props","cssProps","filterCssProps","DetachedComponent","builder","setNode","createdNode","n","detachedComponent","NotFound","showSearch","themeContext","ThemeContext","settings","acc","searchComponentProps","searchNode","notFoundNode","renderSymbol","symbol","content","triggerTabHandler","triggerDOMElement","toggleTabbing","element","tabbing","handleKeydown","e","handleClick","createTriggerElement","options","widgetName","label","tooltip","symbolHtml","setInactive","elements","title","setLoading","setActive","TriggerType","determineProvidedElements","widgetDOMElement","determineTriggerType","triggerDefinition","prepareDOMElements","providedWidgetElement","providedTriggerElement","waitWithReplace","providedElements","triggerType","cachedOriginals","output","triggerElement","widgetElement","MODALS_STORAGE_KEY","ViewOutlet","__publicField","widget","widgetDOMElements","module","notifyDataLoaded","widgets","readStorage","StorageMedium","modals","modal","w","closedTooltip","openTooltip","triggerOptions","removeTriggerListeners","_d","STORAGE_KEY","convertSettingsToAttributes","attributes","LocalStorageChangesetProvider","storageWriter","createStorageWriter","StorageCategory","target","lock","bag","keys","items","existingIndex","indexToRemove","platform","item","rules","ComponentQuery","createPlatform","localStorage","providers","ComponentPlatform","destructComponentModel","createComponentModel","WidgetState","createSiteProvider","site","forceHttps","parseLocation","href","link","createRoutingService","RoutingService","HistoryMode","initialPath","mode","basePath","createStorageService","StorageProvider","createServiceClient","ServiceClient","ServiceProxy","events","projection","proxy","client","createActionResolver","ActionResolver","createComponentResolver","ComponentResolver","createComponentPlatform","SETTINGS_STORAGE_KEY","OPEN_STORAGE_KEY","STICKY_WIDGET_STORAGE_KEY","Widget","WidgetType","activationData","activate","supportBootstrapping","promises","actionResolver","origin","action","value","switchViewNodes","viewNode","initialRoute","previous","next","prevData","nextData","notFoundView","removeNullAndUndefinedValues","attachData","trigger","uuid","withRenderState","outletOptions","swap","isReady","watcher","mutations","observer","outlet","updatedTrigger","renderState","WidgetRenderState","input","renderData","fn","write","override","updated","onWidgetUrl","readSessionOpen","readLocalOpen","routing","localOpen","newState","invoke","writeSessionOpen","writeLocalOpen","previousRenderState","services","widgetSettings","visibleNodes","c","resolve","open","StorageScope"],"mappings":"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"}