@telia-ace/widget-types-grid 1.0.10 → 1.0.11

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 {\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 ${(p) => !p.theme.accessibility?.isTabbing && 'outline: none;'}\r\n box-sizing: border-box;\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 {\r\n ${(p: any) => p.theme.accessibility?.isTabbing && 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, ThemeContext, 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 isTabbing?: boolean;\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 {\r\n className = '',\r\n isTabbing = false,\r\n id,\r\n branch,\r\n node,\r\n ariaLabel,\r\n tabIndex,\r\n context: extraContext,\r\n ...other\r\n },\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 themeContext = React.useContext(ThemeContext) || {};\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 isTabbing: themeContext.accessibility?.isTabbing || isTabbing,\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(proxy, {\r\n funnel: name.replace('_contact-method', '').replace('_contact', ''),\r\n site: createSiteProvider(site, forceHttps),\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 };\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":["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 {\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(proxy, {\n funnel: name.replace('_contact-method', '').replace('_contact', ''),\n site: createSiteProvider(site, forceHttps),\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 };\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 +1 @@
1
- {"version":3,"file":"render.js","sources":["../src/ui/use-router.ts","../src/ui/wrapper.tsx","../src/ui/render.tsx"],"sourcesContent":["import { RoutingService } from '@telia-ace/widget-routing';\r\nimport { useIsMounted } from '@telia-ace/widget-ui';\r\nimport { Container } from '@webprovisions/platform';\r\nimport { useEffect, useState } from 'react';\r\n\r\nexport default (container: Container): RoutingService | null => {\r\n const [router, setRouter] = useState<RoutingService | null>(null);\r\n const isMounted = useIsMounted();\r\n\r\n useEffect(() => {\r\n container.getAsync('router').then((router: RoutingService) => {\r\n if (isMounted.current) {\r\n setRouter(router);\r\n }\r\n });\r\n }, [container, isMounted]);\r\n\r\n return router;\r\n};\r\n","import { ContainerContext, RoutingContext, useComponentPlatform } from '@telia-ace/widget-ui';\r\nimport { appendClassNames } from '@telia-ace/widget-utilities';\r\nimport { Container } from '@webprovisions/platform';\r\nimport React, { useEffect, useState } from 'react';\r\nimport { Router } from 'react-router-dom';\r\nimport Component from './component';\r\nimport useRouter from './use-router';\r\n\r\nconst keyNavigationKeys = ['Tab', 'ArrowDown', 'ArrowUp', 'ArrowRight', 'ArrowLeft'];\r\n\r\ntype Props = {\r\n container: Container;\r\n};\r\n\r\nconst Wrapper: React.SFC<Props> = ({ container }) => {\r\n const components = useComponentPlatform(container);\r\n const router = useRouter(container);\r\n const env = container.get('$environment');\r\n const [isTabbing, setIsTabbing] = useState(env?.container.get('isTabbing') || false);\r\n const [entry, setEntry] = useState<string | null>(null);\r\n\r\n useEffect(() => {\r\n const keydown = (event: KeyboardEvent) => {\r\n if (keyNavigationKeys.indexOf(event.key) > -1) {\r\n if (!isTabbing) {\r\n env?.container.register('isTabbing', true);\r\n }\r\n setIsTabbing(true);\r\n }\r\n };\r\n const click = (event: any) => {\r\n if (event.screenX === 0 && event.screenY === 0) {\r\n return;\r\n }\r\n if (isTabbing) {\r\n env?.container.register('isTabbing', false);\r\n }\r\n setIsTabbing(false);\r\n };\r\n window.addEventListener('keydown', keydown);\r\n window.addEventListener('click', click);\r\n return () => {\r\n window.removeEventListener('keydown', keydown);\r\n window.removeEventListener('click', click);\r\n };\r\n }, []);\r\n\r\n useEffect(() => {\r\n if (components) {\r\n setEntry(components.nodes.root.children.default[0].id || null);\r\n const unsubscribe = components.events.subscribe(\r\n 'components:root-children-changed',\r\n (event, { node }) => {\r\n if (node.parent && node.parent.type === 'root') {\r\n const entry = node.parent.children.default[0].id;\r\n setEntry(entry);\r\n }\r\n }\r\n );\r\n\r\n return unsubscribe;\r\n }\r\n }, [components]);\r\n\r\n if (!router || !router.history || !components) {\r\n return null;\r\n }\r\n\r\n if (!entry) {\r\n return null;\r\n }\r\n\r\n return (\r\n <Router history={router.history}>\r\n <ContainerContext.Provider value={container}>\r\n <RoutingContext.Provider value={router}>\r\n <Component\r\n className={appendClassNames([isTabbing, 'humany-is-tabbing'])}\r\n isTabbing={isTabbing}\r\n id={entry}\r\n branch=\"default\"\r\n />\r\n </RoutingContext.Provider>\r\n </ContainerContext.Provider>\r\n </Router>\r\n );\r\n};\r\n\r\nexport default Wrapper;\r\n","import { Container } from '@webprovisions/platform';\r\nimport React from 'react';\r\nimport { render } from 'react-dom';\r\nimport Wrapper from './wrapper';\r\n\r\nexport default (container: Container, element: HTMLElement) =>\r\n render(<Wrapper container={container} />, element);\r\n"],"names":["render","Wrapper"],"mappings":";;;;;;;;;;;;;;AAKA,IAAe,YAAA,CAAC,cAAgD;AAC5D,QAAM,CAAC,QAAQ,aAAa,SAAgC,IAAI;AAChE,QAAM,YAAY;AAElB,YAAU,MAAM;AACZ,cAAU,SAAS,QAAQ,EAAE,KAAK,CAAC,YAA2B;AAC1D,UAAI,UAAU,SAAS;AACnB,kBAAU,OAAM;AAAA,MACpB;AAAA,IAAA,CACH;AAAA,EAAA,GACF,CAAC,WAAW,SAAS,CAAC;AAElB,SAAA;AACX;ACVA,MAAM,oBAAoB,CAAC,OAAO,aAAa,WAAW,cAAc,WAAW;AAMnF,MAAM,UAA4B,CAAC,EAAE,gBAAgB;AAC3C,QAAA,aAAa,qBAAqB,SAAS;AAC3C,QAAA,SAAS,UAAU,SAAS;AAC5B,QAAA,MAAM,UAAU,IAAI,cAAc;AAClC,QAAA,CAAC,WAAW,gBAAgB,SAAS,4BAAK,UAAU,IAAI,iBAAgB,KAAK;AACnF,QAAM,CAAC,OAAO,YAAY,SAAwB,IAAI;AAEtD,YAAU,MAAM;AACN,UAAA,UAAU,CAAC,UAAyB;AACtC,UAAI,kBAAkB,QAAQ,MAAM,GAAG,IAAI,IAAI;AAC3C,YAAI,CAAC,WAAW;AACP,qCAAA,UAAU,SAAS,aAAa;AAAA,QACzC;AACA,qBAAa,IAAI;AAAA,MACrB;AAAA,IAAA;AAEE,UAAA,QAAQ,CAAC,UAAe;AAC1B,UAAI,MAAM,YAAY,KAAK,MAAM,YAAY,GAAG;AAC5C;AAAA,MACJ;AACA,UAAI,WAAW;AACN,mCAAA,UAAU,SAAS,aAAa;AAAA,MACzC;AACA,mBAAa,KAAK;AAAA,IAAA;AAEf,WAAA,iBAAiB,WAAW,OAAO;AACnC,WAAA,iBAAiB,SAAS,KAAK;AACtC,WAAO,MAAM;AACF,aAAA,oBAAoB,WAAW,OAAO;AACtC,aAAA,oBAAoB,SAAS,KAAK;AAAA,IAAA;AAAA,EAEjD,GAAG,CAAE,CAAA;AAEL,YAAU,MAAM;AACZ,QAAI,YAAY;AACZ,eAAS,WAAW,MAAM,KAAK,SAAS,QAAQ,GAAG,MAAM,IAAI;AACvD,YAAA,cAAc,WAAW,OAAO,UAClC,oCACA,CAAC,OAAO,EAAE,WAAW;AACjB,YAAI,KAAK,UAAU,KAAK,OAAO,SAAS,QAAQ;AAC5C,gBAAM,SAAQ,KAAK,OAAO,SAAS,QAAQ,GAAG;AAC9C,mBAAS,MAAK;AAAA,QAClB;AAAA,MAAA,CAER;AAEO,aAAA;AAAA,IACX;AAAA,EAAA,GACD,CAAC,UAAU,CAAC;AAEf,MAAI,CAAC,UAAU,CAAC,OAAO,WAAW,CAAC,YAAY;AACpC,WAAA;AAAA,EACX;AAEA,MAAI,CAAC,OAAO;AACD,WAAA;AAAA,EACX;AAEA,SACK,sBAAA,cAAA,QAAA;AAAA,IAAO,SAAS,OAAO;AAAA,EACpB,GAAA,sBAAA,cAAC,iBAAiB,UAAjB;AAAA,IAA0B,OAAO;AAAA,EAC9B,GAAA,sBAAA,cAAC,eAAe,UAAf;AAAA,IAAwB,OAAO;AAAA,EAAA,GAC3B,sBAAA,cAAA,WAAA;AAAA,IACG,WAAW,iBAAiB,CAAC,WAAW,mBAAmB,CAAC;AAAA,IAC5D;AAAA,IACA,IAAI;AAAA,IACJ,QAAO;AAAA,EAAA,CACX,CACJ,CACJ,CACJ;AAER;AAEA,IAAA,YAAe;ACnFf,IAAA,SAAe,CAAC,WAAsB,YAClCA,SAAQ,sBAAA,cAAAC,WAAA;AAAA,EAAQ;AAAA,CAAsB,GAAI,OAAO;;"}
1
+ {"version":3,"file":"render.js","sources":["../src/ui/use-router.ts","../src/ui/wrapper.tsx","../src/ui/render.tsx"],"sourcesContent":["import { RoutingService } from '@telia-ace/widget-routing';\nimport { useIsMounted } from '@telia-ace/widget-ui';\nimport { Container } from '@webprovisions/platform';\nimport { useEffect, useState } from 'react';\n\nexport default (container: Container): RoutingService | null => {\n const [router, setRouter] = useState<RoutingService | null>(null);\n const isMounted = useIsMounted();\n\n useEffect(() => {\n container.getAsync('router').then((router: RoutingService) => {\n if (isMounted.current) {\n setRouter(router);\n }\n });\n }, [container, isMounted]);\n\n return router;\n};\n","import { ContainerContext, RoutingContext, useComponentPlatform } from '@telia-ace/widget-ui';\nimport { appendClassNames } from '@telia-ace/widget-utilities';\nimport { Container } from '@webprovisions/platform';\nimport React, { useEffect, useState } from 'react';\nimport { Router } from 'react-router-dom';\nimport Component from './component';\nimport useRouter from './use-router';\n\nconst keyNavigationKeys = ['Tab', 'ArrowDown', 'ArrowUp', 'ArrowRight', 'ArrowLeft'];\n\ntype Props = {\n container: Container;\n};\n\nconst Wrapper: React.SFC<Props> = ({ container }) => {\n const components = useComponentPlatform(container);\n const router = useRouter(container);\n const env = container.get('$environment');\n const [isTabbing, setIsTabbing] = useState(env?.container.get('isTabbing') || false);\n const [entry, setEntry] = useState<string | null>(null);\n\n useEffect(() => {\n const keydown = (event: KeyboardEvent) => {\n if (keyNavigationKeys.indexOf(event.key) > -1) {\n if (!isTabbing) {\n env?.container.register('isTabbing', true);\n }\n setIsTabbing(true);\n }\n };\n const click = (event: any) => {\n if (event.screenX === 0 && event.screenY === 0) {\n return;\n }\n if (isTabbing) {\n env?.container.register('isTabbing', false);\n }\n setIsTabbing(false);\n };\n window.addEventListener('keydown', keydown);\n window.addEventListener('click', click);\n return () => {\n window.removeEventListener('keydown', keydown);\n window.removeEventListener('click', click);\n };\n }, []);\n\n useEffect(() => {\n if (components) {\n setEntry(components.nodes.root.children.default[0].id || null);\n const unsubscribe = components.events.subscribe(\n 'components:root-children-changed',\n (event, { node }) => {\n if (node.parent && node.parent.type === 'root') {\n const entry = node.parent.children.default[0].id;\n setEntry(entry);\n }\n }\n );\n\n return unsubscribe;\n }\n }, [components]);\n\n if (!router || !router.history || !components) {\n return null;\n }\n\n if (!entry) {\n return null;\n }\n\n return (\n <Router history={router.history}>\n <ContainerContext.Provider value={container}>\n <RoutingContext.Provider value={router}>\n <Component\n className={appendClassNames([isTabbing, 'humany-is-tabbing'])}\n isTabbing={isTabbing}\n id={entry}\n branch=\"default\"\n />\n </RoutingContext.Provider>\n </ContainerContext.Provider>\n </Router>\n );\n};\n\nexport default Wrapper;\n","import { Container } from '@webprovisions/platform';\nimport React from 'react';\nimport { render } from 'react-dom';\nimport Wrapper from './wrapper';\n\nexport default (container: Container, element: HTMLElement) =>\n render(<Wrapper container={container} />, element);\n"],"names":["render","Wrapper"],"mappings":";;;;;;;;;;;;;;AAKA,IAAe,YAAA,CAAC,cAAgD;AAC5D,QAAM,CAAC,QAAQ,aAAa,SAAgC,IAAI;AAChE,QAAM,YAAY;AAElB,YAAU,MAAM;AACZ,cAAU,SAAS,QAAQ,EAAE,KAAK,CAAC,YAA2B;AAC1D,UAAI,UAAU,SAAS;AACnB,kBAAU,OAAM;AAAA,MACpB;AAAA,IAAA,CACH;AAAA,EAAA,GACF,CAAC,WAAW,SAAS,CAAC;AAElB,SAAA;AACX;ACVA,MAAM,oBAAoB,CAAC,OAAO,aAAa,WAAW,cAAc,WAAW;AAMnF,MAAM,UAA4B,CAAC,EAAE,gBAAgB;AAC3C,QAAA,aAAa,qBAAqB,SAAS;AAC3C,QAAA,SAAS,UAAU,SAAS;AAC5B,QAAA,MAAM,UAAU,IAAI,cAAc;AAClC,QAAA,CAAC,WAAW,gBAAgB,SAAS,4BAAK,UAAU,IAAI,iBAAgB,KAAK;AACnF,QAAM,CAAC,OAAO,YAAY,SAAwB,IAAI;AAEtD,YAAU,MAAM;AACN,UAAA,UAAU,CAAC,UAAyB;AACtC,UAAI,kBAAkB,QAAQ,MAAM,GAAG,IAAI,IAAI;AAC3C,YAAI,CAAC,WAAW;AACP,qCAAA,UAAU,SAAS,aAAa;AAAA,QACzC;AACA,qBAAa,IAAI;AAAA,MACrB;AAAA,IAAA;AAEE,UAAA,QAAQ,CAAC,UAAe;AAC1B,UAAI,MAAM,YAAY,KAAK,MAAM,YAAY,GAAG;AAC5C;AAAA,MACJ;AACA,UAAI,WAAW;AACN,mCAAA,UAAU,SAAS,aAAa;AAAA,MACzC;AACA,mBAAa,KAAK;AAAA,IAAA;AAEf,WAAA,iBAAiB,WAAW,OAAO;AACnC,WAAA,iBAAiB,SAAS,KAAK;AACtC,WAAO,MAAM;AACF,aAAA,oBAAoB,WAAW,OAAO;AACtC,aAAA,oBAAoB,SAAS,KAAK;AAAA,IAAA;AAAA,EAEjD,GAAG,CAAE,CAAA;AAEL,YAAU,MAAM;AACZ,QAAI,YAAY;AACZ,eAAS,WAAW,MAAM,KAAK,SAAS,QAAQ,GAAG,MAAM,IAAI;AACvD,YAAA,cAAc,WAAW,OAAO,UAClC,oCACA,CAAC,OAAO,EAAE,WAAW;AACjB,YAAI,KAAK,UAAU,KAAK,OAAO,SAAS,QAAQ;AAC5C,gBAAM,SAAQ,KAAK,OAAO,SAAS,QAAQ,GAAG;AAC9C,mBAAS,MAAK;AAAA,QAClB;AAAA,MAAA,CAER;AAEO,aAAA;AAAA,IACX;AAAA,EAAA,GACD,CAAC,UAAU,CAAC;AAEf,MAAI,CAAC,UAAU,CAAC,OAAO,WAAW,CAAC,YAAY;AACpC,WAAA;AAAA,EACX;AAEA,MAAI,CAAC,OAAO;AACD,WAAA;AAAA,EACX;AAEA,SACK,sBAAA,cAAA,QAAA;AAAA,IAAO,SAAS,OAAO;AAAA,EACpB,GAAA,sBAAA,cAAC,iBAAiB,UAAjB;AAAA,IAA0B,OAAO;AAAA,EAC9B,GAAA,sBAAA,cAAC,eAAe,UAAf;AAAA,IAAwB,OAAO;AAAA,EAAA,GAC3B,sBAAA,cAAA,WAAA;AAAA,IACG,WAAW,iBAAiB,CAAC,WAAW,mBAAmB,CAAC;AAAA,IAC5D;AAAA,IACA,IAAI;AAAA,IACJ,QAAO;AAAA,EAAA,CACX,CACJ,CACJ,CACJ;AAER;AAEA,IAAA,YAAe;ACnFf,IAAA,SAAe,CAAC,WAAsB,YAClCA,SAAQ,sBAAA,cAAAC,WAAA;AAAA,EAAQ;AAAA,CAAsB,GAAI,OAAO;;"}