@telia-ace/widget-types-grid 1.0.8 → 1.0.9
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/{lib-esm → dist}/component-platform-factory.d.ts +0 -0
- package/{lib → dist}/index.d.ts +2 -1
- package/dist/index.js +1416 -0
- package/dist/index.js.map +1 -0
- package/dist/render.js +95 -0
- package/dist/render.js.map +1 -0
- package/{lib-esm → dist}/services.d.ts +0 -0
- package/{lib-esm → dist}/site-provider.d.ts +0 -0
- package/{lib-esm → dist}/ui/animated-view.d.ts +0 -0
- package/{lib-esm → dist}/ui/component.d.ts +0 -5
- package/{lib-esm → dist}/ui/detached-component.d.ts +0 -0
- package/{lib-esm → dist}/ui/determine-slide-direction.d.ts +0 -0
- package/{lib-esm → dist}/ui/html-element-handlers.d.ts +0 -0
- package/{lib-esm → dist}/ui/index.d.ts +0 -0
- package/{lib-esm → dist}/ui/not-found.d.ts +0 -0
- package/{lib-esm → dist}/ui/prepare-dom.d.ts +0 -0
- package/{lib-esm → dist}/ui/render.d.ts +0 -0
- package/{lib-esm → dist}/ui/resolvable-component.d.ts +0 -0
- package/dist/ui/styles.d.ts +17 -0
- package/{lib-esm → dist}/ui/switch.d.ts +0 -0
- package/{lib-esm → dist}/ui/unmount.d.ts +0 -0
- package/{lib-esm → dist}/ui/use-component-node-properties.d.ts +0 -0
- package/{lib-esm → dist}/ui/use-router.d.ts +0 -0
- package/{lib-esm → dist}/ui/view-outlet.d.ts +0 -0
- package/{lib-esm → dist}/ui/view.d.ts +0 -0
- package/{lib-esm → dist}/ui/wrapper.d.ts +0 -0
- package/dist/unmount.js +4 -0
- package/dist/unmount.js.map +1 -0
- package/{lib-esm → dist}/widget.d.ts +0 -0
- package/package.json +16 -15
- package/lib/component-platform-factory.d.ts +0 -13
- package/lib/component-platform-factory.js +0 -105
- package/lib/index.js +0 -16
- package/lib/services.d.ts +0 -7
- package/lib/services.js +0 -99
- package/lib/site-provider.d.ts +0 -5
- package/lib/site-provider.js +0 -18
- package/lib/ui/animated-view.d.ts +0 -6
- package/lib/ui/animated-view.js +0 -142
- package/lib/ui/component.d.ts +0 -21
- package/lib/ui/component.js +0 -180
- package/lib/ui/detached-component.d.ts +0 -7
- package/lib/ui/detached-component.js +0 -73
- package/lib/ui/determine-slide-direction.d.ts +0 -26
- package/lib/ui/determine-slide-direction.js +0 -51
- package/lib/ui/html-element-handlers.d.ts +0 -18
- package/lib/ui/html-element-handlers.js +0 -128
- package/lib/ui/index.d.ts +0 -6
- package/lib/ui/index.js +0 -19
- package/lib/ui/not-found.d.ts +0 -6
- package/lib/ui/not-found.js +0 -83
- package/lib/ui/prepare-dom.d.ts +0 -20
- package/lib/ui/prepare-dom.js +0 -122
- package/lib/ui/render.d.ts +0 -3
- package/lib/ui/render.js +0 -11
- package/lib/ui/resolvable-component.d.ts +0 -7
- package/lib/ui/resolvable-component.js +0 -87
- package/lib/ui/switch.d.ts +0 -11
- package/lib/ui/switch.js +0 -58
- package/lib/ui/unmount.d.ts +0 -2
- package/lib/ui/unmount.js +0 -4
- package/lib/ui/use-component-node-properties.d.ts +0 -3
- package/lib/ui/use-component-node-properties.js +0 -44
- package/lib/ui/use-router.d.ts +0 -4
- package/lib/ui/use-router.js +0 -32
- package/lib/ui/view-outlet.d.ts +0 -32
- package/lib/ui/view-outlet.js +0 -151
- package/lib/ui/view.d.ts +0 -6
- package/lib/ui/view.js +0 -75
- package/lib/ui/wrapper.d.ts +0 -7
- package/lib/ui/wrapper.js +0 -108
- package/lib/widget.d.ts +0 -54
- package/lib/widget.js +0 -554
- package/lib-esm/component-platform-factory.js +0 -101
- package/lib-esm/index.d.ts +0 -4
- package/lib-esm/index.js +0 -4
- package/lib-esm/services.js +0 -67
- package/lib-esm/site-provider.js +0 -14
- package/lib-esm/ui/animated-view.js +0 -114
- package/lib-esm/ui/component.js +0 -151
- package/lib-esm/ui/detached-component.js +0 -45
- package/lib-esm/ui/determine-slide-direction.js +0 -46
- package/lib-esm/ui/html-element-handlers.js +0 -120
- package/lib-esm/ui/index.js +0 -6
- package/lib-esm/ui/not-found.js +0 -58
- package/lib-esm/ui/prepare-dom.js +0 -116
- package/lib-esm/ui/render.js +0 -6
- package/lib-esm/ui/resolvable-component.js +0 -62
- package/lib-esm/ui/switch.js +0 -53
- package/lib-esm/ui/unmount.js +0 -2
- package/lib-esm/ui/use-component-node-properties.js +0 -42
- package/lib-esm/ui/use-router.js +0 -30
- package/lib-esm/ui/view-outlet.js +0 -126
- package/lib-esm/ui/view.js +0 -70
- package/lib-esm/ui/wrapper.js +0 -80
- package/lib-esm/widget.js +0 -551
|
@@ -0,0 +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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"}
|
package/dist/render.js
ADDED
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
import React, { useState, useEffect } from "react";
|
|
2
|
+
import { render as render$1 } from "react-dom";
|
|
3
|
+
import { useIsMounted, useComponentPlatform, ContainerContext, RoutingContext } from "@telia-ace/widget-ui";
|
|
4
|
+
import { appendClassNames } from "@telia-ace/widget-utilities";
|
|
5
|
+
import { Router } from "react-router-dom";
|
|
6
|
+
import { Component } from "./index.js";
|
|
7
|
+
import "@telia-ace/widget-core";
|
|
8
|
+
import "styled-components";
|
|
9
|
+
import "react-transition-group";
|
|
10
|
+
import "react-router";
|
|
11
|
+
import "@telia-ace/widget-routing";
|
|
12
|
+
import "@telia-ace/widget-services";
|
|
13
|
+
import "@webprovisions/bootstrapping";
|
|
14
|
+
import "@webprovisions/platform";
|
|
15
|
+
var useRouter = (container) => {
|
|
16
|
+
const [router, setRouter] = useState(null);
|
|
17
|
+
const isMounted = useIsMounted();
|
|
18
|
+
useEffect(() => {
|
|
19
|
+
container.getAsync("router").then((router2) => {
|
|
20
|
+
if (isMounted.current) {
|
|
21
|
+
setRouter(router2);
|
|
22
|
+
}
|
|
23
|
+
});
|
|
24
|
+
}, [container, isMounted]);
|
|
25
|
+
return router;
|
|
26
|
+
};
|
|
27
|
+
const keyNavigationKeys = ["Tab", "ArrowDown", "ArrowUp", "ArrowRight", "ArrowLeft"];
|
|
28
|
+
const Wrapper = ({ container }) => {
|
|
29
|
+
const components = useComponentPlatform(container);
|
|
30
|
+
const router = useRouter(container);
|
|
31
|
+
const env = container.get("$environment");
|
|
32
|
+
const [isTabbing, setIsTabbing] = useState((env == null ? void 0 : env.container.get("isTabbing")) || false);
|
|
33
|
+
const [entry, setEntry] = useState(null);
|
|
34
|
+
useEffect(() => {
|
|
35
|
+
const keydown = (event) => {
|
|
36
|
+
if (keyNavigationKeys.indexOf(event.key) > -1) {
|
|
37
|
+
if (!isTabbing) {
|
|
38
|
+
env == null ? void 0 : env.container.register("isTabbing", true);
|
|
39
|
+
}
|
|
40
|
+
setIsTabbing(true);
|
|
41
|
+
}
|
|
42
|
+
};
|
|
43
|
+
const click = (event) => {
|
|
44
|
+
if (event.screenX === 0 && event.screenY === 0) {
|
|
45
|
+
return;
|
|
46
|
+
}
|
|
47
|
+
if (isTabbing) {
|
|
48
|
+
env == null ? void 0 : env.container.register("isTabbing", false);
|
|
49
|
+
}
|
|
50
|
+
setIsTabbing(false);
|
|
51
|
+
};
|
|
52
|
+
window.addEventListener("keydown", keydown);
|
|
53
|
+
window.addEventListener("click", click);
|
|
54
|
+
return () => {
|
|
55
|
+
window.removeEventListener("keydown", keydown);
|
|
56
|
+
window.removeEventListener("click", click);
|
|
57
|
+
};
|
|
58
|
+
}, []);
|
|
59
|
+
useEffect(() => {
|
|
60
|
+
if (components) {
|
|
61
|
+
setEntry(components.nodes.root.children.default[0].id || null);
|
|
62
|
+
const unsubscribe = components.events.subscribe("components:root-children-changed", (event, { node }) => {
|
|
63
|
+
if (node.parent && node.parent.type === "root") {
|
|
64
|
+
const entry2 = node.parent.children.default[0].id;
|
|
65
|
+
setEntry(entry2);
|
|
66
|
+
}
|
|
67
|
+
});
|
|
68
|
+
return unsubscribe;
|
|
69
|
+
}
|
|
70
|
+
}, [components]);
|
|
71
|
+
if (!router || !router.history || !components) {
|
|
72
|
+
return null;
|
|
73
|
+
}
|
|
74
|
+
if (!entry) {
|
|
75
|
+
return null;
|
|
76
|
+
}
|
|
77
|
+
return /* @__PURE__ */ React.createElement(Router, {
|
|
78
|
+
history: router.history
|
|
79
|
+
}, /* @__PURE__ */ React.createElement(ContainerContext.Provider, {
|
|
80
|
+
value: container
|
|
81
|
+
}, /* @__PURE__ */ React.createElement(RoutingContext.Provider, {
|
|
82
|
+
value: router
|
|
83
|
+
}, /* @__PURE__ */ React.createElement(Component, {
|
|
84
|
+
className: appendClassNames([isTabbing, "humany-is-tabbing"]),
|
|
85
|
+
isTabbing,
|
|
86
|
+
id: entry,
|
|
87
|
+
branch: "default"
|
|
88
|
+
}))));
|
|
89
|
+
};
|
|
90
|
+
var Wrapper$1 = Wrapper;
|
|
91
|
+
var render = (container, element) => render$1(/* @__PURE__ */ React.createElement(Wrapper$1, {
|
|
92
|
+
container
|
|
93
|
+
}), element);
|
|
94
|
+
export { render as default };
|
|
95
|
+
//# sourceMappingURL=render.js.map
|
|
@@ -0,0 +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;;"}
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import { ComponentNode } from '@telia-ace/widget-core';
|
|
2
2
|
import React from 'react';
|
|
3
|
-
import { DefaultTheme } from 'styled-components';
|
|
4
3
|
declare type Props = {
|
|
5
4
|
className?: string;
|
|
6
5
|
isTabbing?: boolean;
|
|
@@ -14,8 +13,4 @@ declare type Props = {
|
|
|
14
13
|
};
|
|
15
14
|
};
|
|
16
15
|
declare const Component: React.ForwardRefExoticComponent<Props & React.RefAttributes<HTMLElement>>;
|
|
17
|
-
export declare const styling: import("styled-components").FlattenInterpolation<import("styled-components").ThemedStyledProps<{
|
|
18
|
-
'data-width': number;
|
|
19
|
-
'data-indent': number;
|
|
20
|
-
}, DefaultTheme>>;
|
|
21
16
|
export default Component;
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/// <reference types="react" />
|
|
2
|
+
export declare const styling: import("styled-components").FlattenInterpolation<import("styled-components").ThemedStyledProps<{
|
|
3
|
+
'data-width': number;
|
|
4
|
+
'data-indent': number;
|
|
5
|
+
}, import("styled-components").DefaultTheme>>;
|
|
6
|
+
export declare const StyledView: import("styled-components").StyledComponent<import("react").FC<{
|
|
7
|
+
className?: string | undefined;
|
|
8
|
+
}>, import("styled-components").DefaultTheme, {
|
|
9
|
+
'data-width': number;
|
|
10
|
+
'data-indent': number;
|
|
11
|
+
}, never>;
|
|
12
|
+
export declare const StyledAnimatedView: import("styled-components").StyledComponent<import("react").FC<{
|
|
13
|
+
className?: string | undefined;
|
|
14
|
+
}>, import("styled-components").DefaultTheme, {
|
|
15
|
+
'data-width': number;
|
|
16
|
+
'data-indent': number;
|
|
17
|
+
}, never>;
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
package/dist/unmount.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"unmount.js","sources":["../src/ui/unmount.tsx"],"sourcesContent":["import { unmountComponentAtNode } from 'react-dom';\r\n\r\nexport default (element: HTMLElement) => unmountComponentAtNode(element);\r\n"],"names":[],"mappings":";AAEA,IAAA,UAAe,CAAC,YAAyB,uBAAuB,OAAO;;"}
|
|
File without changes
|
package/package.json
CHANGED
|
@@ -1,39 +1,40 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@telia-ace/widget-types-grid",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.9",
|
|
4
4
|
"description": "Type definition for Grid widget.",
|
|
5
5
|
"license": "SEE LICENSE IN LICENSE.txt",
|
|
6
6
|
"author": "Telia Company AB",
|
|
7
7
|
"keywords": [
|
|
8
8
|
"telia"
|
|
9
9
|
],
|
|
10
|
-
"
|
|
11
|
-
"
|
|
10
|
+
"module": "dist/index.js",
|
|
11
|
+
"types": "dist/index.d.ts",
|
|
12
12
|
"files": [
|
|
13
13
|
"LICENSE.txt",
|
|
14
14
|
"README.md",
|
|
15
|
-
"
|
|
16
|
-
"lib-esm/"
|
|
15
|
+
"dist/"
|
|
17
16
|
],
|
|
18
17
|
"publishConfig": {
|
|
19
18
|
"access": "public"
|
|
20
19
|
},
|
|
21
20
|
"scripts": {
|
|
22
|
-
"clean": "
|
|
23
|
-
"
|
|
21
|
+
"clean": "rimraf ./dist",
|
|
22
|
+
"precompile": "tsc -emitDeclarationOnly",
|
|
23
|
+
"compile": "vite build"
|
|
24
24
|
},
|
|
25
25
|
"sideEffects": false,
|
|
26
|
-
"typings": "lib/index.d.ts",
|
|
27
26
|
"dependencies": {
|
|
28
27
|
"@telia-ace/knowledge-serviceclient": "^1.0.3",
|
|
29
|
-
"@telia-ace/widget-core": "^1.0.
|
|
30
|
-
"@telia-ace/widget-forms": "^1.0.
|
|
31
|
-
"@telia-ace/widget-routing": "^1.0.
|
|
32
|
-
"@telia-ace/widget-services": "^1.0.
|
|
33
|
-
"@telia-ace/widget-ui": "^1.0.
|
|
28
|
+
"@telia-ace/widget-core": "^1.0.5",
|
|
29
|
+
"@telia-ace/widget-forms": "^1.0.9",
|
|
30
|
+
"@telia-ace/widget-routing": "^1.0.6",
|
|
31
|
+
"@telia-ace/widget-services": "^1.0.5",
|
|
32
|
+
"@telia-ace/widget-ui": "^1.0.9",
|
|
34
33
|
"@telia-ace/widget-utilities": "^1.0.1",
|
|
35
34
|
"@webprovisions/bootstrapping": "^1.0.12",
|
|
36
|
-
"@webprovisions/platform": "^1.1.2"
|
|
35
|
+
"@webprovisions/platform": "^1.1.2"
|
|
36
|
+
},
|
|
37
|
+
"peerDependencies": {
|
|
37
38
|
"react": "^16.8.0",
|
|
38
39
|
"react-dom": "^16.8.0",
|
|
39
40
|
"react-router": "^5.0.0",
|
|
@@ -48,5 +49,5 @@
|
|
|
48
49
|
"@types/react-transition-group": "^4.4.4",
|
|
49
50
|
"@types/styled-components": "^5.1.7"
|
|
50
51
|
},
|
|
51
|
-
"gitHead": "
|
|
52
|
+
"gitHead": "bdce2ebc96e3f9f92bf2d385b841bce5293f355f"
|
|
52
53
|
}
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
import { ChangesetOptions, ChangesetProvider, ComponentNodeSettings, ComponentPlatform, ComponentQuery } from '@telia-ace/widget-core';
|
|
2
|
-
import { StorageWriter } from '@telia-ace/widget-services';
|
|
3
|
-
import { Container, Widget } from '@webprovisions/platform';
|
|
4
|
-
export declare class LocalStorageChangesetProvider implements ChangesetProvider {
|
|
5
|
-
private container;
|
|
6
|
-
private storageWriter;
|
|
7
|
-
constructor(container: Container, storageWriter: StorageWriter);
|
|
8
|
-
static create(container: Container): Promise<LocalStorageChangesetProvider>;
|
|
9
|
-
write(key: string, target: ComponentQuery, attributes: Partial<ComponentNodeSettings>, options: ChangesetOptions): Promise<any>;
|
|
10
|
-
remove(key: string): Promise<any>;
|
|
11
|
-
load(platform: ComponentPlatform): Promise<any>;
|
|
12
|
-
}
|
|
13
|
-
export declare const createPlatform: (widget: Widget) => Promise<ComponentPlatform>;
|