@telia-ace/knowledge-widget-components-guide 1.0.21 → 1.0.22

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/LICENSE.txt CHANGED
@@ -1,6 +1,6 @@
1
- Copyright © 2021, Telia Company AB. All rights reserved.
2
-
3
- THIS PACKAGE AND CONTAINING SOFTWARE IS PART OF
4
- THE HUMANY SERVICE. BY USING THIS SOFTWARE YOU
5
- AGREE TO THE FOLLOWING TERMS AND CONDITIONS:
1
+ Copyright © 2021, Telia Company AB. All rights reserved.
2
+
3
+ THIS PACKAGE AND CONTAINING SOFTWARE IS PART OF
4
+ THE HUMANY SERVICE. BY USING THIS SOFTWARE YOU
5
+ AGREE TO THE FOLLOWING TERMS AND CONDITIONS:
6
6
  http://www.humany.com/legal
package/README.md CHANGED
@@ -1,3 +1,3 @@
1
- # `@telia-ace/knowledge-widget-components-guide`
2
-
3
- Guide component for ACE Knowledge Widgets.
1
+ # `@telia-ace/knowledge-widget-components-guide`
2
+
3
+ Guide component for ACE Knowledge Widgets.
@@ -1,10 +1,10 @@
1
- import React from 'react';
2
- import { AvailablePerspectives, GuideProps } from './guide-component';
3
- declare type Props = {
4
- className?: string;
5
- defaultAnswerVersionLabel: string;
6
- availablePerspectives?: AvailablePerspectives[];
7
- guide: GuideProps;
8
- };
9
- declare const AnswerVersionPicker: React.FC<Props>;
10
- export default AnswerVersionPicker;
1
+ import React from 'react';
2
+ import { AvailablePerspectives, GuideProps } from './guide-component';
3
+ declare type Props = {
4
+ className?: string;
5
+ defaultAnswerVersionLabel: string;
6
+ availablePerspectives?: AvailablePerspectives[];
7
+ guide: GuideProps;
8
+ };
9
+ declare const AnswerVersionPicker: React.FC<Props>;
10
+ export default AnswerVersionPicker;
@@ -1,8 +1,8 @@
1
- import React from 'react';
2
- import { GuideProps, ToolbarProps } from './guide-component';
3
- declare type Props = {
4
- guide: GuideProps;
5
- toolbar: ToolbarProps;
6
- };
7
- declare const Categories: React.FC<Props>;
8
- export default Categories;
1
+ import React from 'react';
2
+ import { GuideProps, ToolbarProps } from './guide-component';
3
+ declare type Props = {
4
+ guide: GuideProps;
5
+ toolbar: ToolbarProps;
6
+ };
7
+ declare const Categories: React.FC<Props>;
8
+ export default Categories;
@@ -1,7 +1,7 @@
1
- import React from 'react';
2
- declare type Props = {
3
- backButtonShown?: boolean;
4
- accordion?: boolean;
5
- };
6
- declare const Feedback: React.SFC<Props>;
7
- export default Feedback;
1
+ import React from 'react';
2
+ declare type Props = {
3
+ backButtonShown?: boolean;
4
+ accordion?: boolean;
5
+ };
6
+ declare const Feedback: React.SFC<Props>;
7
+ export default Feedback;
@@ -1,29 +1,29 @@
1
- import { PickerTypes } from '@telia-ace/knowledge-widget-core';
2
- import { DispatchAction } from '@telia-ace/knowledge-widget-ui';
3
- import React from 'react';
4
- import { GuideProps } from './guide-component';
5
- export declare type FunctionListItem = {
6
- type: string;
7
- child: React.ReactNode;
8
- };
9
- declare type Props = {
10
- header?: string;
11
- tooltip?: string;
12
- printActionLabel?: string;
13
- copyActionLabel?: string;
14
- addFavoriteTooltip?: string;
15
- removeFavoriteCancelLabel?: string;
16
- removeFavoriteConfirmLabel?: string;
17
- removeFavoriteHeader?: string;
18
- removeFavoriteLabel?: string;
19
- removeFavoriteTooltip?: string;
20
- toolbarFunctionsCloseButtonAriaLabel?: string;
21
- guide: GuideProps;
22
- allowCopy?: boolean;
23
- allowPrint?: boolean;
24
- showFavoriteToggle?: boolean;
25
- picker?: PickerTypes;
26
- dispatch: DispatchAction;
27
- };
28
- declare const Functions: React.FC<Props>;
29
- export default Functions;
1
+ import { PickerTypes } from '@telia-ace/knowledge-widget-core';
2
+ import { DispatchAction } from '@telia-ace/knowledge-widget-ui';
3
+ import React from 'react';
4
+ import { GuideProps } from './guide-component';
5
+ export declare type FunctionListItem = {
6
+ type: string;
7
+ child: React.ReactNode;
8
+ };
9
+ declare type Props = {
10
+ header?: string;
11
+ tooltip?: string;
12
+ printActionLabel?: string;
13
+ copyActionLabel?: string;
14
+ addFavoriteTooltip?: string;
15
+ removeFavoriteCancelLabel?: string;
16
+ removeFavoriteConfirmLabel?: string;
17
+ removeFavoriteHeader?: string;
18
+ removeFavoriteLabel?: string;
19
+ removeFavoriteTooltip?: string;
20
+ toolbarFunctionsCloseButtonAriaLabel?: string;
21
+ guide: GuideProps;
22
+ allowCopy?: boolean;
23
+ allowPrint?: boolean;
24
+ showFavoriteToggle?: boolean;
25
+ picker?: PickerTypes;
26
+ dispatch: DispatchAction;
27
+ };
28
+ declare const Functions: React.FC<Props>;
29
+ export default Functions;
@@ -1,69 +1,69 @@
1
- import { ContactMethodType } from '@telia-ace/knowledge-widget-adapters';
2
- import { FavoriteProperties, LanguageProperties, MetaDataProperties } from '@telia-ace/knowledge-widget-component-utilities';
3
- import { DialogItem, PickerTypes } from '@telia-ace/knowledge-widget-core';
4
- import { DataError } from '@telia-ace/knowledge-widget-types-grid';
5
- import { FormComponentInstanceProperties } from '@telia-ace/widget-forms';
6
- import { Container } from '@webprovisions/platform';
7
- export declare type GuideProps = {
8
- id: string;
9
- title: string;
10
- body: string;
11
- connection: string;
12
- categories: number[];
13
- hasHandover: boolean;
14
- allowFeedback: boolean;
15
- perspectives: {
16
- [key: string]: string;
17
- };
18
- translations?: {
19
- [key: string]: string;
20
- };
21
- modified?: string;
22
- published?: string;
23
- publishedBy?: string | null;
24
- modifiedBy?: string | null;
25
- perspective: string | null;
26
- };
27
- export declare type AvailablePerspectives = {
28
- name: string;
29
- title: string;
30
- };
31
- export declare type GuideComponentProps = {
32
- showHeader?: boolean;
33
- showFeedback?: boolean;
34
- feedbackDirection?: 'horizontal' | 'vertical';
35
- feedbackGiven?: 'positive' | 'negative';
36
- contactMethods?: ContactMethodType[];
37
- handoverContactMethods?: ContactMethodType[];
38
- showAnswerVersions?: boolean;
39
- feedbackHeader?: string;
40
- contactHeader?: string;
41
- toolbarFunctionsHeader?: string;
42
- toolbarLanguageHeader?: string;
43
- positiveFeedbackLabel?: string;
44
- negativeFeedbackLabel?: string;
45
- contactFeedbackLabel?: string;
46
- feedbackRecognitionLabel?: string;
47
- defaultAnswerVersionLabel?: string;
48
- backButtonLabel?: string;
49
- toolbarFunctionsTooltip?: string;
50
- toolbarFunctionsCloseButtonAriaLabel?: string;
51
- copyActionLabel?: string;
52
- printActionLabel?: string;
53
- toolbarLanguageTooltip?: string;
54
- toolbar?: ToolbarProps;
55
- guide?: GuideProps;
56
- dialog?: DialogItem[];
57
- error?: DataError;
58
- availablePerspectives?: AvailablePerspectives[];
59
- } & FormComponentInstanceProperties & FavoriteProperties & MetaDataProperties & LanguageProperties;
60
- export declare type ToolbarProps = {
61
- language?: boolean;
62
- guideCategories?: boolean;
63
- allowCopy?: boolean;
64
- allowPrint?: boolean;
65
- showFavoriteToggle?: boolean;
66
- picker?: PickerTypes;
67
- };
68
- export declare const GuideComponent: (container: Container) => Promise<void>;
69
- export default GuideComponent;
1
+ import { ContactMethodType } from '@telia-ace/knowledge-widget-adapters';
2
+ import { FavoriteProperties, LanguageProperties, MetaDataProperties } from '@telia-ace/knowledge-widget-component-utilities';
3
+ import { DialogItem, PickerTypes } from '@telia-ace/knowledge-widget-core';
4
+ import { DataError } from '@telia-ace/knowledge-widget-types-grid';
5
+ import { FormComponentInstanceProperties } from '@telia-ace/widget-forms';
6
+ import { Container } from '@webprovisions/platform';
7
+ export declare type GuideProps = {
8
+ id: string;
9
+ title: string;
10
+ body: string;
11
+ connection: string;
12
+ categories: number[];
13
+ hasHandover: boolean;
14
+ allowFeedback: boolean;
15
+ perspectives: {
16
+ [key: string]: string;
17
+ };
18
+ translations?: {
19
+ [key: string]: string;
20
+ };
21
+ modified?: string;
22
+ published?: string;
23
+ publishedBy?: string | null;
24
+ modifiedBy?: string | null;
25
+ perspective: string | null;
26
+ };
27
+ export declare type AvailablePerspectives = {
28
+ name: string;
29
+ title: string;
30
+ };
31
+ export declare type GuideComponentProps = {
32
+ showHeader?: boolean;
33
+ showFeedback?: boolean;
34
+ feedbackDirection?: 'horizontal' | 'vertical';
35
+ feedbackGiven?: 'positive' | 'negative';
36
+ contactMethods?: ContactMethodType[];
37
+ handoverContactMethods?: ContactMethodType[];
38
+ showAnswerVersions?: boolean;
39
+ feedbackHeader?: string;
40
+ contactHeader?: string;
41
+ toolbarFunctionsHeader?: string;
42
+ toolbarLanguageHeader?: string;
43
+ positiveFeedbackLabel?: string;
44
+ negativeFeedbackLabel?: string;
45
+ contactFeedbackLabel?: string;
46
+ feedbackRecognitionLabel?: string;
47
+ defaultAnswerVersionLabel?: string;
48
+ backButtonLabel?: string;
49
+ toolbarFunctionsTooltip?: string;
50
+ toolbarFunctionsCloseButtonAriaLabel?: string;
51
+ copyActionLabel?: string;
52
+ printActionLabel?: string;
53
+ toolbarLanguageTooltip?: string;
54
+ toolbar?: ToolbarProps;
55
+ guide?: GuideProps;
56
+ dialog?: DialogItem[];
57
+ error?: DataError;
58
+ availablePerspectives?: AvailablePerspectives[];
59
+ } & FormComponentInstanceProperties & FavoriteProperties & MetaDataProperties & LanguageProperties;
60
+ export declare type ToolbarProps = {
61
+ language?: boolean;
62
+ guideCategories?: boolean;
63
+ allowCopy?: boolean;
64
+ allowPrint?: boolean;
65
+ showFavoriteToggle?: boolean;
66
+ picker?: PickerTypes;
67
+ };
68
+ export declare const GuideComponent: (container: Container) => Promise<void>;
69
+ export default GuideComponent;
@@ -1 +1 @@
1
- {"version":3,"file":"guide.858ab7a6.js","sources":["../src/answer-version-picker.tsx","../src/feedback.tsx","../src/categories.tsx","../src/functions.tsx","../src/languages.tsx","../src/toolbar.tsx","../src/guide.tsx"],"sourcesContent":["import { List, paddedBorderTabStyle, TextLink, useRouteData } from '@telia-ace/knowledge-widget-ui';\nimport { appendClassNames } from '@telia-ace/widget-utilities';\nimport React, { useMemo } from 'react';\nimport styled, { css } from 'styled-components';\nimport { AvailablePerspectives, GuideProps } from './guide-component';\n\ntype Props = {\n className?: string;\n defaultAnswerVersionLabel: string;\n availablePerspectives?: AvailablePerspectives[];\n guide: GuideProps;\n};\n\ntype Perspective = { label: string; connection: string };\n\nconst AnswerVersionPicker: React.FC<Props> = ({\n className,\n defaultAnswerVersionLabel,\n guide: { perspective: selectedPerspective, perspectives: guidePerspectives },\n availablePerspectives = [],\n}) => {\n const { name, params } = useRouteData();\n\n const perspectives: Perspective[] = useMemo(() => {\n if (!guidePerspectives || !availablePerspectives.length) {\n return [];\n }\n\n return availablePerspectives\n .filter(({ name }) => !!guidePerspectives[name])\n .map(({ name, title }) => {\n return { label: title, connection: guidePerspectives[name] };\n });\n }, [guidePerspectives, availablePerspectives]);\n\n return (\n <StyledList\n className={appendClassNames(className, 'humany-guide-answer-version-picker')}\n items={perspectives}\n renderItem={(perspective: Perspective) => {\n const label =\n perspective.label === 'Default' ? defaultAnswerVersionLabel : perspective.label;\n const selected = selectedPerspective === perspective.connection;\n const isRoot =\n selected && (!params.connection || selectedPerspective === params.connection);\n\n return (\n <li key={perspective.connection} data-version={perspective.connection}>\n <VersionLink\n key={perspective.connection}\n forwardedAs={isRoot ? 'span' : undefined}\n text={label}\n routeName={name}\n selected={selected}\n aria-label={label}\n title={label}\n params={{\n ...params,\n connection: perspective.connection,\n }}\n />\n </li>\n );\n }}\n />\n );\n};\n\nexport default AnswerVersionPicker;\n\nconst StyledList = styled(List)`\n display: flex;\n align-items: center;\n flex-wrap: wrap;\n\n list-style: none;\n padding: 0;\n margin: 0;\n\n li:not(:last-child) {\n margin: 0 calc(${(p) => p.theme.sizes?.small} * 2) 0 0;\n }\n\n li > span {\n cursor: default;\n }\n`;\n\nconst VersionLink = styled(TextLink)<{ selected: boolean }>`\n font-weight: 300;\n color: ${(p) => p.theme.colors?.text};\n text-decoration: none;\n\n ${(p) =>\n p.selected &&\n css`\n font-weight: bold;\n text-decoration: underline;\n `}\n\n &:focus {\n ${(p: any) => p.theme.accessibility?.isTabbing && paddedBorderTabStyle};\n }\n`;\n","import { ContactList } from '@telia-ace/knowledge-widget-adapters';\nimport {\n Feedback as FeedbackUi,\n StyledHeaderText,\n useDispatch,\n useProperties,\n} from '@telia-ace/knowledge-widget-ui';\nimport React from 'react';\nimport styled from 'styled-components';\nimport { GuideComponentProps } from './guide-component';\n\ntype Props = { backButtonShown?: boolean; accordion?: boolean };\n\nconst StyledContactList = styled(ContactList)<{\n accordion: 'true' | 'false';\n backButtonShown: 'true' | 'false';\n}>`\n border-top: ${(p) => p.theme.border};\n ${(p) => p.backButtonShown === 'true' && `border-bottom: ${p.theme.border};`}\n`;\n\nconst StyledFeedback = styled(FeedbackUi)<{ accordion: 'true' | 'false' }>`\n ${(p) => `padding: ${p.theme.sizes?.large} ${p.theme.sizes?.large};`}\n`;\n\nconst Recognition = styled(StyledHeaderText)<{ accordion: 'true' | 'false' }>`\n ${(p) => `padding: ${p.theme.sizes?.large} ${p.theme.sizes?.large};`}\n\n display: block;\n font-size: ${(p) => p.theme.fonts?.normal};\n font-weight: bold;\n`;\n\nconst Feedback: React.SFC<Props> = ({ backButtonShown = false, accordion = false }) => {\n const dispatch = useDispatch();\n const {\n loading = false,\n dialog = [],\n guide,\n\n handoverContactMethods = [],\n contactHeader,\n\n showFeedback,\n feedbackDirection = 'horizontal',\n feedbackRecognitionLabel,\n feedbackGiven,\n feedbackHeader,\n positiveFeedbackLabel,\n negativeFeedbackLabel,\n contactFeedbackLabel,\n } = useProperties<GuideComponentProps>();\n\n if (\n !showFeedback ||\n !guide ||\n !guide.allowFeedback ||\n (loading && !feedbackGiven) ||\n dialog.length\n ) {\n return null;\n }\n\n if (feedbackGiven && feedbackRecognitionLabel && !handoverContactMethods.length) {\n return (\n <Recognition accordion={accordion ? 'true' : 'false'}>\n {feedbackRecognitionLabel}\n </Recognition>\n );\n }\n\n return guide.hasHandover && handoverContactMethods.length ? (\n <StyledContactList\n backButtonShown={backButtonShown ? 'true' : 'false'}\n accordion={accordion ? 'true' : 'false'}\n header={contactHeader}\n contactMethods={handoverContactMethods}\n dispatch={dispatch}\n />\n ) : (\n <StyledFeedback\n accordion={accordion ? 'true' : 'false'}\n positive={positiveFeedbackLabel}\n negative={guide.hasHandover ? contactFeedbackLabel : negativeFeedbackLabel}\n header={feedbackHeader}\n selected={feedbackGiven}\n onFeedback={(feedback) => dispatch('feedback', feedback)}\n direction={feedbackDirection}\n />\n );\n};\n\nexport default Feedback;\n","import { Category, PickerTypes } from '@telia-ace/knowledge-widget-core';\nimport {\n StyledListButton,\n SymbolBadge,\n Text,\n Tooltip,\n useContainer,\n} from '@telia-ace/knowledge-widget-ui';\nimport { buildCategoryTrail } from '@telia-ace/widget-utilities';\nimport React, { useEffect, useState } from 'react';\nimport styled from 'styled-components';\nimport { GuideProps, ToolbarProps } from './guide-component';\n\ntype Props = {\n guide: GuideProps;\n toolbar: ToolbarProps;\n};\n\nconst Categories: React.FC<Props> = ({\n guide: { categories = [] },\n toolbar: { picker = PickerTypes.NONE },\n}) => {\n const [trail, setTrail] = useState<Category[][]>([]);\n const container = useContainer();\n\n useEffect(() => {\n buildCategoryTrail(\n 'index',\n categories.map((id) => id.toString()),\n container\n ).then((result) => {\n setTrail(result);\n });\n }, [categories]);\n\n if (!trail.length) {\n return null;\n }\n\n return (\n <Tooltip\n className=\"humany-guide-category-tooltip\"\n sticky={picker === PickerTypes.DRAWER}\n content={\n <>\n {trail.map((segments) => {\n return (\n <CategoryTrail\n className=\"humany-guide-category-trail\"\n key={segments.map((c) => c.id).join('.')}\n >\n {segments.map((category, index: number) => {\n return (\n <Text\n className=\"humany-guide-category-trail-segment\"\n key={category.id}\n >\n {category.symbol && index === 0 && (\n <SymbolBadge size={14} symbol={category.symbol} />\n )}\n {category.title}\n {index !== segments.length - 1 && (\n <CategorySeparator className=\"humany-category-separator\">\n /\n </CategorySeparator>\n )}\n </Text>\n );\n })}\n </CategoryTrail>\n );\n })}\n </>\n }\n >\n {picker === PickerTypes.DRAWER ? (\n <StyledListButton\n className=\"humany-guide-category-tooltip-button\"\n data-has-label=\"false\"\n data-has-symbol=\"true\"\n >\n <CategoriesSymbolBadge\n size={19}\n symbol={{ type: 'Svg', content: 'information' }}\n />\n </StyledListButton>\n ) : (\n <CategoriesSymbolBadge size={19} symbol={{ type: 'Svg', content: 'information' }} />\n )}\n </Tooltip>\n );\n};\n\nexport default Categories;\n\nconst CategoryTrail = styled.div`\n i,\n svg {\n margin: 0 ${(p) => p.theme.sizes?.small} 0 0;\n }\n\n &:not(:last-child) {\n margin: 0 0 ${(p) => p.theme.sizes?.small};\n }\n`;\n\nconst CategorySeparator = styled(Text)`\n margin: 0 ${(p) => p.theme.sizes?.small};\n`;\n\nconst CategoriesSymbolBadge = styled(SymbolBadge)`\n display: block;\n`;\n","import { PickerTypes } from '@telia-ace/knowledge-widget-core';\nimport {\n DispatchAction,\n DrawerAnimationType,\n DrawerList,\n DropdownList,\n FavoriteButton,\n StyledListButton,\n StyledText,\n SymbolBadge,\n useFavorites,\n} from '@telia-ace/knowledge-widget-ui';\nimport React, { useCallback, useMemo } from 'react';\nimport styled from 'styled-components';\nimport { GuideProps } from './guide-component';\n\nexport type FunctionListItem = {\n type: string;\n child: React.ReactNode;\n};\n\ntype Props = {\n header?: string;\n tooltip?: string;\n printActionLabel?: string;\n copyActionLabel?: string;\n addFavoriteTooltip?: string;\n removeFavoriteCancelLabel?: string;\n removeFavoriteConfirmLabel?: string;\n removeFavoriteHeader?: string;\n removeFavoriteLabel?: string;\n removeFavoriteTooltip?: string;\n toolbarFunctionsCloseButtonAriaLabel?: string;\n guide: GuideProps;\n allowCopy?: boolean;\n allowPrint?: boolean;\n showFavoriteToggle?: boolean;\n picker?: PickerTypes;\n dispatch: DispatchAction;\n};\n\nconst Functions: React.FC<Props> = ({\n header,\n tooltip,\n printActionLabel,\n copyActionLabel,\n addFavoriteTooltip,\n removeFavoriteCancelLabel,\n removeFavoriteConfirmLabel,\n removeFavoriteHeader,\n removeFavoriteLabel,\n removeFavoriteTooltip,\n toolbarFunctionsCloseButtonAriaLabel,\n allowCopy = false,\n allowPrint = false,\n showFavoriteToggle = false,\n picker = PickerTypes.NONE,\n guide,\n dispatch,\n}) => {\n const [favorites, actions] = useFavorites();\n\n const handleCopy = useCallback(\n (event) => {\n if (guide) {\n dispatch('copy', guide);\n }\n },\n [guide, dispatch]\n );\n\n const handlePrint = useCallback(() => {\n if (guide) {\n dispatch('print');\n }\n }, [guide, dispatch]);\n\n const items = useMemo(() => {\n const { id, title } = guide;\n\n const items: FunctionListItem[] = [];\n\n if (allowCopy) {\n items.push({\n type: 'copy',\n child: (\n <StyledListButton\n data-has-label={copyActionLabel ? 'true' : 'false'}\n data-has-symbol=\"true\"\n title={copyActionLabel}\n aria-label={printActionLabel}\n onClick={handleCopy}\n >\n <ColoredSymbolBadge size={16} symbol={{ type: 'Svg', content: 'copy' }} />\n {copyActionLabel && <StyledText>{copyActionLabel}</StyledText>}\n </StyledListButton>\n ),\n });\n }\n\n if (allowPrint) {\n items.push({\n type: 'print',\n child: (\n <StyledListButton\n data-has-label={printActionLabel ? 'true' : 'false'}\n data-has-symbol=\"true\"\n title={printActionLabel}\n aria-label={printActionLabel}\n onClick={handlePrint}\n >\n <ColoredSymbolBadge size={16} symbol={{ type: 'Svg', content: 'print' }} />\n {printActionLabel && <StyledText>{printActionLabel}</StyledText>}\n </StyledListButton>\n ),\n });\n }\n\n if (showFavoriteToggle) {\n const isFavorite = favorites.indexOf(id) > -1;\n items.push({\n type: 'favorite',\n child: (\n <FavoriteButton\n id={id}\n guideTitle={title}\n isFavorite={isFavorite}\n buttonLabel={isFavorite ? removeFavoriteTooltip : addFavoriteTooltip}\n addFavoriteTooltip={addFavoriteTooltip}\n removeFavoriteCancelLabel={removeFavoriteCancelLabel}\n removeFavoriteConfirmLabel={removeFavoriteConfirmLabel}\n removeFavoriteHeader={removeFavoriteHeader}\n removeFavoriteLabel={removeFavoriteLabel}\n removeFavoriteTooltip={removeFavoriteTooltip}\n actions={actions}\n />\n ),\n });\n }\n\n return items;\n }, [\n favorites,\n guide,\n allowCopy,\n allowPrint,\n showFavoriteToggle,\n printActionLabel,\n copyActionLabel,\n addFavoriteTooltip,\n removeFavoriteCancelLabel,\n removeFavoriteConfirmLabel,\n removeFavoriteHeader,\n removeFavoriteLabel,\n removeFavoriteTooltip,\n ]);\n\n if (!items.length) {\n return null;\n }\n\n const trigger = (\n <StyledTriggerButton\n tabIndex={0}\n title={tooltip}\n data-has-symbol=\"true\"\n data-has-label=\"false\"\n >\n <ColoredSymbolBadge symbol={{ type: 'Svg', content: 'options' }} size={18} />\n </StyledTriggerButton>\n );\n\n const renderListItem = ({ type, child }: FunctionListItem) => {\n return (\n <li key={type} data-function-type={type}>\n {child}\n </li>\n );\n };\n\n if (picker === PickerTypes.DROPDOWN) {\n return (\n <StyledDropdownList\n className=\"humany-guide-functions-dropdown-list\"\n header={header}\n items={items}\n trigger={trigger}\n renderItem={renderListItem}\n closeButtonAriaLabel={toolbarFunctionsCloseButtonAriaLabel}\n />\n );\n }\n\n if (picker === PickerTypes.DRAWER) {\n return (\n <DrawerList\n className=\"humany-guide-functions-drawer-list\"\n animation={{ type: DrawerAnimationType.SlideInBottom }}\n header={header}\n items={items}\n trigger={trigger}\n renderItem={renderListItem}\n closeButtonAriaLabel={toolbarFunctionsCloseButtonAriaLabel}\n />\n );\n }\n\n return null;\n};\n\nexport default Functions;\n\nconst ColoredSymbolBadge = styled(SymbolBadge)`\n circle {\n fill: ${(p) => p.theme.colors?.text};\n }\n\n line,\n path,\n rect {\n stroke: ${(p) => p.theme.colors?.text};\n }\n`;\n\nconst StyledDropdownList = styled(DropdownList)`\n display: block;\n min-height: auto;\n`;\n\nconst StyledTriggerButton = styled(StyledListButton)<any>`\n padding: calc(${(p) => p.theme.sizes?.small} * 2) 0;\n`;\n","import { LanguageProperties } from '@telia-ace/knowledge-widget-component-utilities';\nimport { PickerTypes } from '@telia-ace/knowledge-widget-core';\nimport {\n DrawerAnimationType,\n DrawerList,\n DropdownList,\n paddedBorderTabStyle,\n StyledListButton,\n SymbolBadge,\n Text,\n TextLink,\n useRouteData,\n} from '@telia-ace/knowledge-widget-ui';\nimport { createParams } from '@telia-ace/widget-utilities';\nimport React, { useMemo } from 'react';\nimport styled, { css } from 'styled-components';\nimport { GuideProps } from './guide-component';\n\nexport type LanguageListItem = {\n id: string;\n key: string;\n label: string;\n};\n\ntype Props = Merge<\n {\n header?: string;\n tooltip?: string;\n guide: GuideProps;\n picker?: PickerTypes;\n },\n LanguageProperties\n>;\n\nconst getCurrentLanguageLabel = (guide: GuideProps, languages: LanguageListItem[]) => {\n return languages.find((l) => l.id === guide.id)?.label || '';\n};\n\nconst Languages: React.FC<Props> = ({\n header,\n tooltip,\n picker = PickerTypes.NONE,\n guide,\n ...other\n}) => {\n const { name, params } = useRouteData();\n\n const items = useMemo(() => {\n return Object.keys(guide.translations || {}).reduce((acc: LanguageListItem[], key) => {\n const item: Partial<LanguageListItem> = {};\n item.key = key;\n item.id = (guide.translations || {})[key];\n item.label = (other as { [key: string]: string })[`${key}LanguageLabel`];\n\n if (item.id || item.label) {\n acc.push(item as LanguageListItem);\n }\n\n return acc;\n }, []);\n }, [guide, other]);\n\n if (!items.length) {\n return null;\n }\n\n const currentLanguage = getCurrentLanguageLabel(guide, items);\n\n const trigger = (\n <Trigger\n tabIndex={0}\n title={tooltip}\n data-has-symbol=\"true\"\n data-has-label={picker === PickerTypes.DROPDOWN && currentLanguage ? 'true' : 'false'}\n >\n {picker === PickerTypes.DROPDOWN && (\n <>\n {currentLanguage && <LanguageButtonText>{currentLanguage}</LanguageButtonText>}\n <LanguageCaretSymbolBadge\n symbol={{ type: 'Svg', content: 'caret-down' }}\n size={11}\n />\n </>\n )}\n {picker === PickerTypes.DRAWER && (\n <>\n <ColoredSymbolBadge symbol={{ type: 'Svg', content: 'language' }} size={20} />\n </>\n )}\n </Trigger>\n );\n\n const renderListItem = ({ label, key, id }: LanguageListItem) => {\n return (\n <li key={key} data-language={key}>\n <LanguageLink\n tabIndex={0}\n text={label}\n routeName={name}\n selected={guide.id === id}\n params={createParams({\n ...params,\n connection: undefined,\n guide: id,\n })}\n />\n </li>\n );\n };\n\n if (picker === PickerTypes.DROPDOWN) {\n return (\n <StyledDropdownList\n className=\"humany-guide-languages-dropdown-list\"\n header={header}\n items={items}\n trigger={trigger}\n renderItem={renderListItem}\n />\n );\n }\n\n if (picker === PickerTypes.DRAWER) {\n return (\n <DrawerList\n className=\"humany-guide-languages-drawer-list\"\n animation={{ type: DrawerAnimationType.SlideInBottom }}\n header={header}\n items={items}\n trigger={trigger}\n renderItem={renderListItem}\n />\n );\n }\n\n return null;\n};\n\nexport default Languages;\n\nconst Trigger = styled(StyledListButton)`\n &&& {\n margin: 0 ${(p) => `calc(${p.theme.sizes?.small} * 2)`} 0 0;\n }\n`;\n\nconst ColoredSymbolBadge = styled(SymbolBadge)`\n circle {\n fill: ${(p) => p.theme.colors?.text};\n }\n\n line,\n path,\n rect {\n stroke: ${(p) => p.theme.colors?.text};\n }\n`;\n\nconst LanguageButtonText = styled(Text)`\n margin: 0 ${(p) => p.theme.sizes?.small} 0 0;\n font-size: ${(p) => p.theme.fonts?.normal};\n`;\n\nconst LanguageCaretSymbolBadge = styled(SymbolBadge)`\n align-self: flex-end;\n stroke-width: 2px;\n stroke-linecap: round;\n\n && {\n width: 0.6em;\n height: 1em;\n }\n line {\n stroke: ${(p) => p.theme.colors?.text};\n }\n`;\n\nconst StyledDropdownList = styled(DropdownList)`\n display: block;\n min-height: auto;\n`;\n\nconst LanguageLink = styled(TextLink)<any>`\n color: ${(p) => (p.selected ? p.theme.colors?.primary : p.theme.colors?.text)};\n ${(p) => p.selected && 'font-weight: bold;'}\n\n &:focus {\n ${(p) =>\n p.theme.accessibility?.isTabbing\n ? css`\n ${paddedBorderTabStyle}\n text-decoration: underline;\n `\n : 'outline: none;'}\n }\n`;\n","import { PickerTypes } from '@telia-ace/knowledge-widget-core';\nimport { DispatchAction, useProperties } from '@telia-ace/knowledge-widget-ui';\nimport { appendClassNames } from '@telia-ace/widget-utilities';\nimport React from 'react';\nimport styled from 'styled-components';\nimport Categories from './categories';\nimport Functions from './functions';\nimport { GuideComponentProps, ToolbarProps } from './guide-component';\nimport Languages from './languages';\n\ntype Props = {\n className?: string;\n dispatch: DispatchAction;\n};\n\nconst isEmpty = (toolbar: ToolbarProps) => {\n const {\n allowCopy = false,\n allowPrint = false,\n guideCategories = false,\n language = false,\n showFavoriteToggle = false,\n picker = PickerTypes.NONE,\n } = toolbar;\n\n if (\n (!allowCopy && !allowPrint && !language && !showFavoriteToggle && !guideCategories) ||\n picker === PickerTypes.NONE\n ) {\n return true;\n }\n\n return false;\n};\n\nconst Toolbar: React.FC<Props> = ({ className = '', dispatch }) => {\n const {\n toolbarLanguageHeader,\n toolbarFunctionsHeader,\n toolbarLanguageTooltip,\n toolbarFunctionsTooltip,\n toolbarFunctionsCloseButtonAriaLabel,\n printActionLabel,\n copyActionLabel,\n addFavoriteTooltip,\n removeFavoriteCancelLabel,\n removeFavoriteConfirmLabel,\n removeFavoriteHeader,\n removeFavoriteLabel,\n removeFavoriteTooltip,\n guide,\n toolbar,\n ...other\n } = useProperties<GuideComponentProps>();\n\n if (!guide || !toolbar || isEmpty(toolbar)) {\n return null;\n }\n\n const { language, guideCategories, allowCopy, allowPrint, showFavoriteToggle, picker } =\n toolbar;\n\n return (\n <Wrapper className={appendClassNames('humany-guide-toolbar', className)}>\n {language && Object.keys(guide.translations || {}).length > 1 && (\n <Languages\n guide={guide}\n header={toolbarLanguageHeader}\n tooltip={toolbarLanguageTooltip}\n picker={picker}\n {...other}\n />\n )}\n {guideCategories && <Categories guide={guide} toolbar={toolbar} />}\n {(allowCopy || allowPrint || showFavoriteToggle) && (\n <Functions\n guide={guide}\n header={toolbarFunctionsHeader}\n tooltip={toolbarFunctionsTooltip}\n printActionLabel={printActionLabel}\n copyActionLabel={copyActionLabel}\n addFavoriteTooltip={addFavoriteTooltip}\n removeFavoriteCancelLabel={removeFavoriteCancelLabel}\n removeFavoriteConfirmLabel={removeFavoriteConfirmLabel}\n removeFavoriteHeader={removeFavoriteHeader}\n removeFavoriteLabel={removeFavoriteLabel}\n removeFavoriteTooltip={removeFavoriteTooltip}\n toolbarFunctionsCloseButtonAriaLabel={toolbarFunctionsCloseButtonAriaLabel}\n allowCopy={allowCopy}\n allowPrint={allowPrint}\n showFavoriteToggle={showFavoriteToggle}\n picker={picker}\n dispatch={dispatch}\n />\n )}\n </Wrapper>\n );\n};\n\nexport default Toolbar;\n\nconst Wrapper = styled.div`\n display: flex;\n align-items: center;\n justify-content: space-between;\n margin: 0 0 0 auto;\n\n > :not(:last-child) {\n margin: 0 calc(${(p) => p.theme.sizes?.small} * 2) 0 0;\n }\n`;\n","import { contactLink, ContactList } from '@telia-ace/knowledge-widget-adapters';\nimport { Component, NotFound } from '@telia-ace/knowledge-widget-types-grid';\nimport {\n Button,\n contentBox,\n createEmptyComponent,\n DialogList,\n genericHtml,\n guideRenderInstructions,\n headingElement,\n linkTabStyle,\n Loader,\n loadingOpacity,\n Metadata,\n Paragraph,\n useChildren,\n useContainer,\n useDispatch,\n useProperties,\n useRouteData,\n} from '@telia-ace/knowledge-widget-ui';\nimport { appendClassNames } from '@telia-ace/widget-utilities';\nimport React, { forwardRef, useCallback } from 'react';\nimport styled, { css } from 'styled-components';\nimport AnswerVersionPicker from './answer-version-picker';\nimport Feedback from './feedback';\nimport { GuideComponentProps } from './guide-component';\nimport Toolbar from './toolbar';\n\ntype Props = { className: string; accordion?: boolean };\n\nconst Guide = forwardRef<HTMLDivElement, Props>(\n ({ className, accordion = false, ...other }, ref) => {\n const {\n loading = false,\n dialog = [],\n contactMethods = [],\n showHeader = true,\n showAnswerVersions = false,\n defaultAnswerVersionLabel = 'Default',\n backButtonLabel,\n metadataByLabel,\n metadataModifiedLabel,\n metadataPublishedLabel,\n availablePerspectives,\n metadata,\n toolbar,\n guide,\n error,\n } = useProperties<GuideComponentProps>();\n const {\n params: { connection },\n } = useRouteData();\n const container = useContainer();\n const children = useChildren();\n const dispatch = useDispatch();\n\n const handleBackButtonClick = useCallback(() => {\n dispatch('back');\n }, [dispatch]);\n\n if (!guide && !error && !loading) {\n return createEmptyComponent(container, {\n ...other,\n className: appendClassNames(className, 'humany-guide'),\n });\n }\n\n const { id = '', title = '', body = '', translations = {} } = guide || {};\n\n if (error && error.status === 404) {\n return <NotFound showSearch={false} />;\n }\n\n const showBackButton = !!accordion && !!connection;\n const language = Object.keys(translations).find((key) => translations[key] === `${id}`);\n\n return (\n <Wrapper\n ref={ref}\n {...other}\n data-loading={loading}\n className={appendClassNames(className, 'humany-guide')}\n >\n <Content\n data-loading={loading}\n accordion={accordion ? 'true' : 'false'}\n className=\"humany-guide-content\"\n >\n {((showAnswerVersions && guide) || !!toolbar) && (\n <Top className=\"humany-guide-top\">\n {showAnswerVersions && guide && (\n <AnswerVersionPicker\n defaultAnswerVersionLabel={defaultAnswerVersionLabel}\n availablePerspectives={availablePerspectives}\n guide={guide}\n />\n )}\n {!!toolbar && <Toolbar dispatch={dispatch} />}\n </Top>\n )}\n {!!(title || body) && (\n <Body\n className=\"humany-guide-body\"\n accordion={accordion ? 'true' : 'false'}\n header={(showHeader && title) || undefined}\n html={body}\n htmlParseInstruction={guideRenderInstructions(container, dialog)}\n lang={language}\n />\n )}\n {dialog && body.indexOf('h-option-link') === -1 && (\n <StyledDialogList dialog={dialog} />\n )}\n <StyledContactList\n backButtonShown={showBackButton ? 'true' : 'false'}\n contactMethods={contactMethods}\n dispatch={dispatch}\n guideId={guide && guide.id}\n />\n {!contactMethods.length && (\n <Feedback backButtonShown={showBackButton} accordion={accordion} />\n )}\n {showBackButton && (\n <BackButton aria-label={backButtonLabel} onClick={handleBackButtonClick}>\n <Caret\n width=\"7\"\n height=\"13\"\n viewBox=\"0 0 7 13\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <line x1=\"6.64645\" y1=\"12.5513\" x2=\"0.648357\" y2=\"6.55319\" />\n <line x1=\"0.646447\" y1=\"6.64455\" x2=\"6.64454\" y2=\"0.646465\" />\n </Caret>\n {backButtonLabel && <span>{backButtonLabel}</span>}\n </BackButton>\n )}\n {metadata && (\n <StyledMetadata\n {...metadata}\n modified={guide?.modified}\n published={guide?.published}\n modifiedBy={guide?.modifiedBy}\n publishedBy={guide?.publishedBy}\n byLabel={metadataByLabel}\n modifiedLabel={metadataModifiedLabel}\n publishedLabel={metadataPublishedLabel}\n />\n )}\n {children.map((child) => (\n <StyledComponents\n key={child.id}\n id={child.id}\n branch=\"default\"\n {...{ embedded: true }}\n />\n ))}\n </Content>\n\n <Loader loading={loading} />\n </Wrapper>\n );\n }\n);\n\nexport default Guide;\n\nconst Wrapper = styled.div<{ 'data-loading': boolean }>`\n ${loadingOpacity}\n min-width: 0;\n`;\n\nconst Body = styled(Paragraph)<{ accordion: 'true' | 'false' }>`\n ${genericHtml}\n ${(p) => `padding: ${p.theme.sizes?.large};`}\n display: block;\n line-height: 1.6em;\n ${headingElement(\n 'h1',\n css`\n font-size: ${(p) => p.theme.fonts?.large};\n font-weight: normal;\n line-height: 1.6em;\n line-height: 1.6em;\n margin: 0 0 ${(p) => p.theme.sizes?.small};\n `\n )}\n\n p {\n font-weight: 300;\n font-size: ${(p) => p.theme.fonts?.normal};\n color: ${(p) => p.theme.colors?.text};\n a {\n display: inline;\n }\n }\n`;\n\nconst StyledContactList = styled(ContactList)<{ backButtonShown: 'true' | 'false' }>`\n border-top: ${(p) => p.theme.border};\n ${(p) => p.backButtonShown === 'true' && `border-bottom: ${p.theme.border};`}\n`;\n\nconst StyledDialogList = styled(DialogList)`\n ${(p) => `padding: 0 ${p.theme.sizes?.large} ${p.theme.sizes?.large};`}\n display: block;\n`;\n\nconst Top = styled.div`\n ${(p) => `padding: calc(${p.theme.sizes?.normal}*2) ${p.theme.sizes?.large};`}\n display: flex;\n justify-content: space-between;\n align-items: center;\n border-bottom: ${(p) => p.theme.border};\n border-radius: ${(p) => `${p.theme.borderRadius} ${p.theme.borderRadius}`} 0 0;\n background-color: #ffffff;\n`;\n\nconst Content = styled.div<{ 'data-loading': boolean; accordion: 'true' | 'false' } & any>`\n ${contentBox}\n display: block;\n > a {\n ${contactLink}\n }\n\n ${(p) =>\n p.accordion === 'true' &&\n css`\n white-space: normal;\n box-shadow: none;\n background-color: #fafafa;\n `}\n`;\n\nconst StyledMetadata = styled(Metadata)`\n display: block;\n ${(p) => `padding: calc(${p.theme.sizes?.normal}*2) ${p.theme.sizes?.large};`}\n font-weight: 300;\n font-size: ${(p) => p.theme.fonts?.normal};\n color: ${(p) => p.theme.colors?.text};\n border-top: ${(p) => p.theme.border};\n`;\n\nconst StyledComponents = styled(Component)`\n border-top: ${(p) => p.theme.border};\n`;\n\nconst BackButton = styled(Button)`\n ${(p) => `padding: ${p.theme.sizes?.normal} calc(${p.theme.sizes?.normal} * 2);`}\n color: ${(p) => p.theme.colors?.primary};\n text-decoration: underline;\n font-size: ${(p) => p.theme.fonts?.normal};\n span {\n font-weight: 300;\n }\n &:focus {\n ${(p) =>\n p.theme.accessibility?.isTabbing &&\n css`\n ${linkTabStyle}\n padding: ${(p) => `calc(${p.theme.sizes?.small} / 2) ${p.theme.sizes?.small}`};\n `};\n }\n`;\n\nconst Caret = styled.svg`\n margin-right: ${(p) => p.theme.sizes?.small};\n line {\n stroke: ${(p) => p.theme.colors?.primary};\n }\n`;\n"],"names":["StyledContactList","FeedbackUi","ColoredSymbolBadge","StyledDropdownList","Wrapper"],"mappings":"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"}
1
+ {"version":3,"file":"guide.858ab7a6.js","sources":["../src/answer-version-picker.tsx","../src/feedback.tsx","../src/categories.tsx","../src/functions.tsx","../src/languages.tsx","../src/toolbar.tsx","../src/guide.tsx"],"sourcesContent":["import { List, paddedBorderTabStyle, TextLink, useRouteData } from '@telia-ace/knowledge-widget-ui';\r\nimport { appendClassNames } from '@telia-ace/widget-utilities';\r\nimport React, { useMemo } from 'react';\r\nimport styled, { css } from 'styled-components';\r\nimport { AvailablePerspectives, GuideProps } from './guide-component';\r\n\r\ntype Props = {\r\n className?: string;\r\n defaultAnswerVersionLabel: string;\r\n availablePerspectives?: AvailablePerspectives[];\r\n guide: GuideProps;\r\n};\r\n\r\ntype Perspective = { label: string; connection: string };\r\n\r\nconst AnswerVersionPicker: React.FC<Props> = ({\r\n className,\r\n defaultAnswerVersionLabel,\r\n guide: { perspective: selectedPerspective, perspectives: guidePerspectives },\r\n availablePerspectives = [],\r\n}) => {\r\n const { name, params } = useRouteData();\r\n\r\n const perspectives: Perspective[] = useMemo(() => {\r\n if (!guidePerspectives || !availablePerspectives.length) {\r\n return [];\r\n }\r\n\r\n return availablePerspectives\r\n .filter(({ name }) => !!guidePerspectives[name])\r\n .map(({ name, title }) => {\r\n return { label: title, connection: guidePerspectives[name] };\r\n });\r\n }, [guidePerspectives, availablePerspectives]);\r\n\r\n return (\r\n <StyledList\r\n className={appendClassNames(className, 'humany-guide-answer-version-picker')}\r\n items={perspectives}\r\n renderItem={(perspective: Perspective) => {\r\n const label =\r\n perspective.label === 'Default' ? defaultAnswerVersionLabel : perspective.label;\r\n const selected = selectedPerspective === perspective.connection;\r\n const isRoot =\r\n selected && (!params.connection || selectedPerspective === params.connection);\r\n\r\n return (\r\n <li key={perspective.connection} data-version={perspective.connection}>\r\n <VersionLink\r\n key={perspective.connection}\r\n forwardedAs={isRoot ? 'span' : undefined}\r\n text={label}\r\n routeName={name}\r\n selected={selected}\r\n aria-label={label}\r\n title={label}\r\n params={{\r\n ...params,\r\n connection: perspective.connection,\r\n }}\r\n />\r\n </li>\r\n );\r\n }}\r\n />\r\n );\r\n};\r\n\r\nexport default AnswerVersionPicker;\r\n\r\nconst StyledList = styled(List)`\r\n display: flex;\r\n align-items: center;\r\n flex-wrap: wrap;\r\n\r\n list-style: none;\r\n padding: 0;\r\n margin: 0;\r\n\r\n li:not(:last-child) {\r\n margin: 0 calc(${(p) => p.theme.sizes?.small} * 2) 0 0;\r\n }\r\n\r\n li > span {\r\n cursor: default;\r\n }\r\n`;\r\n\r\nconst VersionLink = styled(TextLink)<{ selected: boolean }>`\r\n font-weight: 300;\r\n color: ${(p) => p.theme.colors?.text};\r\n text-decoration: none;\r\n\r\n ${(p) =>\r\n p.selected &&\r\n css`\r\n font-weight: bold;\r\n text-decoration: underline;\r\n `}\r\n\r\n &:focus {\r\n ${(p: any) => p.theme.accessibility?.isTabbing && paddedBorderTabStyle};\r\n }\r\n`;\r\n","import { ContactList } from '@telia-ace/knowledge-widget-adapters';\r\nimport {\r\n Feedback as FeedbackUi,\r\n StyledHeaderText,\r\n useDispatch,\r\n useProperties,\r\n} from '@telia-ace/knowledge-widget-ui';\r\nimport React from 'react';\r\nimport styled from 'styled-components';\r\nimport { GuideComponentProps } from './guide-component';\r\n\r\ntype Props = { backButtonShown?: boolean; accordion?: boolean };\r\n\r\nconst StyledContactList = styled(ContactList)<{\r\n accordion: 'true' | 'false';\r\n backButtonShown: 'true' | 'false';\r\n}>`\r\n border-top: ${(p) => p.theme.border};\r\n ${(p) => p.backButtonShown === 'true' && `border-bottom: ${p.theme.border};`}\r\n`;\r\n\r\nconst StyledFeedback = styled(FeedbackUi)<{ accordion: 'true' | 'false' }>`\r\n ${(p) => `padding: ${p.theme.sizes?.large} ${p.theme.sizes?.large};`}\r\n`;\r\n\r\nconst Recognition = styled(StyledHeaderText)<{ accordion: 'true' | 'false' }>`\r\n ${(p) => `padding: ${p.theme.sizes?.large} ${p.theme.sizes?.large};`}\r\n\r\n display: block;\r\n font-size: ${(p) => p.theme.fonts?.normal};\r\n font-weight: bold;\r\n`;\r\n\r\nconst Feedback: React.SFC<Props> = ({ backButtonShown = false, accordion = false }) => {\r\n const dispatch = useDispatch();\r\n const {\r\n loading = false,\r\n dialog = [],\r\n guide,\r\n\r\n handoverContactMethods = [],\r\n contactHeader,\r\n\r\n showFeedback,\r\n feedbackDirection = 'horizontal',\r\n feedbackRecognitionLabel,\r\n feedbackGiven,\r\n feedbackHeader,\r\n positiveFeedbackLabel,\r\n negativeFeedbackLabel,\r\n contactFeedbackLabel,\r\n } = useProperties<GuideComponentProps>();\r\n\r\n if (\r\n !showFeedback ||\r\n !guide ||\r\n !guide.allowFeedback ||\r\n (loading && !feedbackGiven) ||\r\n dialog.length\r\n ) {\r\n return null;\r\n }\r\n\r\n if (feedbackGiven && feedbackRecognitionLabel && !handoverContactMethods.length) {\r\n return (\r\n <Recognition accordion={accordion ? 'true' : 'false'}>\r\n {feedbackRecognitionLabel}\r\n </Recognition>\r\n );\r\n }\r\n\r\n return guide.hasHandover && handoverContactMethods.length ? (\r\n <StyledContactList\r\n backButtonShown={backButtonShown ? 'true' : 'false'}\r\n accordion={accordion ? 'true' : 'false'}\r\n header={contactHeader}\r\n contactMethods={handoverContactMethods}\r\n dispatch={dispatch}\r\n />\r\n ) : (\r\n <StyledFeedback\r\n accordion={accordion ? 'true' : 'false'}\r\n positive={positiveFeedbackLabel}\r\n negative={guide.hasHandover ? contactFeedbackLabel : negativeFeedbackLabel}\r\n header={feedbackHeader}\r\n selected={feedbackGiven}\r\n onFeedback={(feedback) => dispatch('feedback', feedback)}\r\n direction={feedbackDirection}\r\n />\r\n );\r\n};\r\n\r\nexport default Feedback;\r\n","import { Category, PickerTypes } from '@telia-ace/knowledge-widget-core';\r\nimport {\r\n StyledListButton,\r\n SymbolBadge,\r\n Text,\r\n Tooltip,\r\n useContainer,\r\n} from '@telia-ace/knowledge-widget-ui';\r\nimport { buildCategoryTrail } from '@telia-ace/widget-utilities';\r\nimport React, { useEffect, useState } from 'react';\r\nimport styled from 'styled-components';\r\nimport { GuideProps, ToolbarProps } from './guide-component';\r\n\r\ntype Props = {\r\n guide: GuideProps;\r\n toolbar: ToolbarProps;\r\n};\r\n\r\nconst Categories: React.FC<Props> = ({\r\n guide: { categories = [] },\r\n toolbar: { picker = PickerTypes.NONE },\r\n}) => {\r\n const [trail, setTrail] = useState<Category[][]>([]);\r\n const container = useContainer();\r\n\r\n useEffect(() => {\r\n buildCategoryTrail(\r\n 'index',\r\n categories.map((id) => id.toString()),\r\n container\r\n ).then((result) => {\r\n setTrail(result);\r\n });\r\n }, [categories]);\r\n\r\n if (!trail.length) {\r\n return null;\r\n }\r\n\r\n return (\r\n <Tooltip\r\n className=\"humany-guide-category-tooltip\"\r\n sticky={picker === PickerTypes.DRAWER}\r\n content={\r\n <>\r\n {trail.map((segments) => {\r\n return (\r\n <CategoryTrail\r\n className=\"humany-guide-category-trail\"\r\n key={segments.map((c) => c.id).join('.')}\r\n >\r\n {segments.map((category, index: number) => {\r\n return (\r\n <Text\r\n className=\"humany-guide-category-trail-segment\"\r\n key={category.id}\r\n >\r\n {category.symbol && index === 0 && (\r\n <SymbolBadge size={14} symbol={category.symbol} />\r\n )}\r\n {category.title}\r\n {index !== segments.length - 1 && (\r\n <CategorySeparator className=\"humany-category-separator\">\r\n /\r\n </CategorySeparator>\r\n )}\r\n </Text>\r\n );\r\n })}\r\n </CategoryTrail>\r\n );\r\n })}\r\n </>\r\n }\r\n >\r\n {picker === PickerTypes.DRAWER ? (\r\n <StyledListButton\r\n className=\"humany-guide-category-tooltip-button\"\r\n data-has-label=\"false\"\r\n data-has-symbol=\"true\"\r\n >\r\n <CategoriesSymbolBadge\r\n size={19}\r\n symbol={{ type: 'Svg', content: 'information' }}\r\n />\r\n </StyledListButton>\r\n ) : (\r\n <CategoriesSymbolBadge size={19} symbol={{ type: 'Svg', content: 'information' }} />\r\n )}\r\n </Tooltip>\r\n );\r\n};\r\n\r\nexport default Categories;\r\n\r\nconst CategoryTrail = styled.div`\r\n i,\r\n svg {\r\n margin: 0 ${(p) => p.theme.sizes?.small} 0 0;\r\n }\r\n\r\n &:not(:last-child) {\r\n margin: 0 0 ${(p) => p.theme.sizes?.small};\r\n }\r\n`;\r\n\r\nconst CategorySeparator = styled(Text)`\r\n margin: 0 ${(p) => p.theme.sizes?.small};\r\n`;\r\n\r\nconst CategoriesSymbolBadge = styled(SymbolBadge)`\r\n display: block;\r\n`;\r\n","import { PickerTypes } from '@telia-ace/knowledge-widget-core';\r\nimport {\r\n DispatchAction,\r\n DrawerAnimationType,\r\n DrawerList,\r\n DropdownList,\r\n FavoriteButton,\r\n StyledListButton,\r\n StyledText,\r\n SymbolBadge,\r\n useFavorites,\r\n} from '@telia-ace/knowledge-widget-ui';\r\nimport React, { useCallback, useMemo } from 'react';\r\nimport styled from 'styled-components';\r\nimport { GuideProps } from './guide-component';\r\n\r\nexport type FunctionListItem = {\r\n type: string;\r\n child: React.ReactNode;\r\n};\r\n\r\ntype Props = {\r\n header?: string;\r\n tooltip?: string;\r\n printActionLabel?: string;\r\n copyActionLabel?: string;\r\n addFavoriteTooltip?: string;\r\n removeFavoriteCancelLabel?: string;\r\n removeFavoriteConfirmLabel?: string;\r\n removeFavoriteHeader?: string;\r\n removeFavoriteLabel?: string;\r\n removeFavoriteTooltip?: string;\r\n toolbarFunctionsCloseButtonAriaLabel?: string;\r\n guide: GuideProps;\r\n allowCopy?: boolean;\r\n allowPrint?: boolean;\r\n showFavoriteToggle?: boolean;\r\n picker?: PickerTypes;\r\n dispatch: DispatchAction;\r\n};\r\n\r\nconst Functions: React.FC<Props> = ({\r\n header,\r\n tooltip,\r\n printActionLabel,\r\n copyActionLabel,\r\n addFavoriteTooltip,\r\n removeFavoriteCancelLabel,\r\n removeFavoriteConfirmLabel,\r\n removeFavoriteHeader,\r\n removeFavoriteLabel,\r\n removeFavoriteTooltip,\r\n toolbarFunctionsCloseButtonAriaLabel,\r\n allowCopy = false,\r\n allowPrint = false,\r\n showFavoriteToggle = false,\r\n picker = PickerTypes.NONE,\r\n guide,\r\n dispatch,\r\n}) => {\r\n const [favorites, actions] = useFavorites();\r\n\r\n const handleCopy = useCallback(\r\n (event) => {\r\n if (guide) {\r\n dispatch('copy', guide);\r\n }\r\n },\r\n [guide, dispatch]\r\n );\r\n\r\n const handlePrint = useCallback(() => {\r\n if (guide) {\r\n dispatch('print');\r\n }\r\n }, [guide, dispatch]);\r\n\r\n const items = useMemo(() => {\r\n const { id, title } = guide;\r\n\r\n const items: FunctionListItem[] = [];\r\n\r\n if (allowCopy) {\r\n items.push({\r\n type: 'copy',\r\n child: (\r\n <StyledListButton\r\n data-has-label={copyActionLabel ? 'true' : 'false'}\r\n data-has-symbol=\"true\"\r\n title={copyActionLabel}\r\n aria-label={printActionLabel}\r\n onClick={handleCopy}\r\n >\r\n <ColoredSymbolBadge size={16} symbol={{ type: 'Svg', content: 'copy' }} />\r\n {copyActionLabel && <StyledText>{copyActionLabel}</StyledText>}\r\n </StyledListButton>\r\n ),\r\n });\r\n }\r\n\r\n if (allowPrint) {\r\n items.push({\r\n type: 'print',\r\n child: (\r\n <StyledListButton\r\n data-has-label={printActionLabel ? 'true' : 'false'}\r\n data-has-symbol=\"true\"\r\n title={printActionLabel}\r\n aria-label={printActionLabel}\r\n onClick={handlePrint}\r\n >\r\n <ColoredSymbolBadge size={16} symbol={{ type: 'Svg', content: 'print' }} />\r\n {printActionLabel && <StyledText>{printActionLabel}</StyledText>}\r\n </StyledListButton>\r\n ),\r\n });\r\n }\r\n\r\n if (showFavoriteToggle) {\r\n const isFavorite = favorites.indexOf(id) > -1;\r\n items.push({\r\n type: 'favorite',\r\n child: (\r\n <FavoriteButton\r\n id={id}\r\n guideTitle={title}\r\n isFavorite={isFavorite}\r\n buttonLabel={isFavorite ? removeFavoriteTooltip : addFavoriteTooltip}\r\n addFavoriteTooltip={addFavoriteTooltip}\r\n removeFavoriteCancelLabel={removeFavoriteCancelLabel}\r\n removeFavoriteConfirmLabel={removeFavoriteConfirmLabel}\r\n removeFavoriteHeader={removeFavoriteHeader}\r\n removeFavoriteLabel={removeFavoriteLabel}\r\n removeFavoriteTooltip={removeFavoriteTooltip}\r\n actions={actions}\r\n />\r\n ),\r\n });\r\n }\r\n\r\n return items;\r\n }, [\r\n favorites,\r\n guide,\r\n allowCopy,\r\n allowPrint,\r\n showFavoriteToggle,\r\n printActionLabel,\r\n copyActionLabel,\r\n addFavoriteTooltip,\r\n removeFavoriteCancelLabel,\r\n removeFavoriteConfirmLabel,\r\n removeFavoriteHeader,\r\n removeFavoriteLabel,\r\n removeFavoriteTooltip,\r\n ]);\r\n\r\n if (!items.length) {\r\n return null;\r\n }\r\n\r\n const trigger = (\r\n <StyledTriggerButton\r\n tabIndex={0}\r\n title={tooltip}\r\n data-has-symbol=\"true\"\r\n data-has-label=\"false\"\r\n >\r\n <ColoredSymbolBadge symbol={{ type: 'Svg', content: 'options' }} size={18} />\r\n </StyledTriggerButton>\r\n );\r\n\r\n const renderListItem = ({ type, child }: FunctionListItem) => {\r\n return (\r\n <li key={type} data-function-type={type}>\r\n {child}\r\n </li>\r\n );\r\n };\r\n\r\n if (picker === PickerTypes.DROPDOWN) {\r\n return (\r\n <StyledDropdownList\r\n className=\"humany-guide-functions-dropdown-list\"\r\n header={header}\r\n items={items}\r\n trigger={trigger}\r\n renderItem={renderListItem}\r\n closeButtonAriaLabel={toolbarFunctionsCloseButtonAriaLabel}\r\n />\r\n );\r\n }\r\n\r\n if (picker === PickerTypes.DRAWER) {\r\n return (\r\n <DrawerList\r\n className=\"humany-guide-functions-drawer-list\"\r\n animation={{ type: DrawerAnimationType.SlideInBottom }}\r\n header={header}\r\n items={items}\r\n trigger={trigger}\r\n renderItem={renderListItem}\r\n closeButtonAriaLabel={toolbarFunctionsCloseButtonAriaLabel}\r\n />\r\n );\r\n }\r\n\r\n return null;\r\n};\r\n\r\nexport default Functions;\r\n\r\nconst ColoredSymbolBadge = styled(SymbolBadge)`\r\n circle {\r\n fill: ${(p) => p.theme.colors?.text};\r\n }\r\n\r\n line,\r\n path,\r\n rect {\r\n stroke: ${(p) => p.theme.colors?.text};\r\n }\r\n`;\r\n\r\nconst StyledDropdownList = styled(DropdownList)`\r\n display: block;\r\n min-height: auto;\r\n`;\r\n\r\nconst StyledTriggerButton = styled(StyledListButton)<any>`\r\n padding: calc(${(p) => p.theme.sizes?.small} * 2) 0;\r\n`;\r\n","import { LanguageProperties } from '@telia-ace/knowledge-widget-component-utilities';\r\nimport { PickerTypes } from '@telia-ace/knowledge-widget-core';\r\nimport {\r\n DrawerAnimationType,\r\n DrawerList,\r\n DropdownList,\r\n paddedBorderTabStyle,\r\n StyledListButton,\r\n SymbolBadge,\r\n Text,\r\n TextLink,\r\n useRouteData,\r\n} from '@telia-ace/knowledge-widget-ui';\r\nimport { createParams } from '@telia-ace/widget-utilities';\r\nimport React, { useMemo } from 'react';\r\nimport styled, { css } from 'styled-components';\r\nimport { GuideProps } from './guide-component';\r\n\r\nexport type LanguageListItem = {\r\n id: string;\r\n key: string;\r\n label: string;\r\n};\r\n\r\ntype Props = Merge<\r\n {\r\n header?: string;\r\n tooltip?: string;\r\n guide: GuideProps;\r\n picker?: PickerTypes;\r\n },\r\n LanguageProperties\r\n>;\r\n\r\nconst getCurrentLanguageLabel = (guide: GuideProps, languages: LanguageListItem[]) => {\r\n return languages.find((l) => l.id === guide.id)?.label || '';\r\n};\r\n\r\nconst Languages: React.FC<Props> = ({\r\n header,\r\n tooltip,\r\n picker = PickerTypes.NONE,\r\n guide,\r\n ...other\r\n}) => {\r\n const { name, params } = useRouteData();\r\n\r\n const items = useMemo(() => {\r\n return Object.keys(guide.translations || {}).reduce((acc: LanguageListItem[], key) => {\r\n const item: Partial<LanguageListItem> = {};\r\n item.key = key;\r\n item.id = (guide.translations || {})[key];\r\n item.label = (other as { [key: string]: string })[`${key}LanguageLabel`];\r\n\r\n if (item.id || item.label) {\r\n acc.push(item as LanguageListItem);\r\n }\r\n\r\n return acc;\r\n }, []);\r\n }, [guide, other]);\r\n\r\n if (!items.length) {\r\n return null;\r\n }\r\n\r\n const currentLanguage = getCurrentLanguageLabel(guide, items);\r\n\r\n const trigger = (\r\n <Trigger\r\n tabIndex={0}\r\n title={tooltip}\r\n data-has-symbol=\"true\"\r\n data-has-label={picker === PickerTypes.DROPDOWN && currentLanguage ? 'true' : 'false'}\r\n >\r\n {picker === PickerTypes.DROPDOWN && (\r\n <>\r\n {currentLanguage && <LanguageButtonText>{currentLanguage}</LanguageButtonText>}\r\n <LanguageCaretSymbolBadge\r\n symbol={{ type: 'Svg', content: 'caret-down' }}\r\n size={11}\r\n />\r\n </>\r\n )}\r\n {picker === PickerTypes.DRAWER && (\r\n <>\r\n <ColoredSymbolBadge symbol={{ type: 'Svg', content: 'language' }} size={20} />\r\n </>\r\n )}\r\n </Trigger>\r\n );\r\n\r\n const renderListItem = ({ label, key, id }: LanguageListItem) => {\r\n return (\r\n <li key={key} data-language={key}>\r\n <LanguageLink\r\n tabIndex={0}\r\n text={label}\r\n routeName={name}\r\n selected={guide.id === id}\r\n params={createParams({\r\n ...params,\r\n connection: undefined,\r\n guide: id,\r\n })}\r\n />\r\n </li>\r\n );\r\n };\r\n\r\n if (picker === PickerTypes.DROPDOWN) {\r\n return (\r\n <StyledDropdownList\r\n className=\"humany-guide-languages-dropdown-list\"\r\n header={header}\r\n items={items}\r\n trigger={trigger}\r\n renderItem={renderListItem}\r\n />\r\n );\r\n }\r\n\r\n if (picker === PickerTypes.DRAWER) {\r\n return (\r\n <DrawerList\r\n className=\"humany-guide-languages-drawer-list\"\r\n animation={{ type: DrawerAnimationType.SlideInBottom }}\r\n header={header}\r\n items={items}\r\n trigger={trigger}\r\n renderItem={renderListItem}\r\n />\r\n );\r\n }\r\n\r\n return null;\r\n};\r\n\r\nexport default Languages;\r\n\r\nconst Trigger = styled(StyledListButton)`\r\n &&& {\r\n margin: 0 ${(p) => `calc(${p.theme.sizes?.small} * 2)`} 0 0;\r\n }\r\n`;\r\n\r\nconst ColoredSymbolBadge = styled(SymbolBadge)`\r\n circle {\r\n fill: ${(p) => p.theme.colors?.text};\r\n }\r\n\r\n line,\r\n path,\r\n rect {\r\n stroke: ${(p) => p.theme.colors?.text};\r\n }\r\n`;\r\n\r\nconst LanguageButtonText = styled(Text)`\r\n margin: 0 ${(p) => p.theme.sizes?.small} 0 0;\r\n font-size: ${(p) => p.theme.fonts?.normal};\r\n`;\r\n\r\nconst LanguageCaretSymbolBadge = styled(SymbolBadge)`\r\n align-self: flex-end;\r\n stroke-width: 2px;\r\n stroke-linecap: round;\r\n\r\n && {\r\n width: 0.6em;\r\n height: 1em;\r\n }\r\n line {\r\n stroke: ${(p) => p.theme.colors?.text};\r\n }\r\n`;\r\n\r\nconst StyledDropdownList = styled(DropdownList)`\r\n display: block;\r\n min-height: auto;\r\n`;\r\n\r\nconst LanguageLink = styled(TextLink)<any>`\r\n color: ${(p) => (p.selected ? p.theme.colors?.primary : p.theme.colors?.text)};\r\n ${(p) => p.selected && 'font-weight: bold;'}\r\n\r\n &:focus {\r\n ${(p) =>\r\n p.theme.accessibility?.isTabbing\r\n ? css`\r\n ${paddedBorderTabStyle}\r\n text-decoration: underline;\r\n `\r\n : 'outline: none;'}\r\n }\r\n`;\r\n","import { PickerTypes } from '@telia-ace/knowledge-widget-core';\r\nimport { DispatchAction, useProperties } from '@telia-ace/knowledge-widget-ui';\r\nimport { appendClassNames } from '@telia-ace/widget-utilities';\r\nimport React from 'react';\r\nimport styled from 'styled-components';\r\nimport Categories from './categories';\r\nimport Functions from './functions';\r\nimport { GuideComponentProps, ToolbarProps } from './guide-component';\r\nimport Languages from './languages';\r\n\r\ntype Props = {\r\n className?: string;\r\n dispatch: DispatchAction;\r\n};\r\n\r\nconst isEmpty = (toolbar: ToolbarProps) => {\r\n const {\r\n allowCopy = false,\r\n allowPrint = false,\r\n guideCategories = false,\r\n language = false,\r\n showFavoriteToggle = false,\r\n picker = PickerTypes.NONE,\r\n } = toolbar;\r\n\r\n if (\r\n (!allowCopy && !allowPrint && !language && !showFavoriteToggle && !guideCategories) ||\r\n picker === PickerTypes.NONE\r\n ) {\r\n return true;\r\n }\r\n\r\n return false;\r\n};\r\n\r\nconst Toolbar: React.FC<Props> = ({ className = '', dispatch }) => {\r\n const {\r\n toolbarLanguageHeader,\r\n toolbarFunctionsHeader,\r\n toolbarLanguageTooltip,\r\n toolbarFunctionsTooltip,\r\n toolbarFunctionsCloseButtonAriaLabel,\r\n printActionLabel,\r\n copyActionLabel,\r\n addFavoriteTooltip,\r\n removeFavoriteCancelLabel,\r\n removeFavoriteConfirmLabel,\r\n removeFavoriteHeader,\r\n removeFavoriteLabel,\r\n removeFavoriteTooltip,\r\n guide,\r\n toolbar,\r\n ...other\r\n } = useProperties<GuideComponentProps>();\r\n\r\n if (!guide || !toolbar || isEmpty(toolbar)) {\r\n return null;\r\n }\r\n\r\n const { language, guideCategories, allowCopy, allowPrint, showFavoriteToggle, picker } =\r\n toolbar;\r\n\r\n return (\r\n <Wrapper className={appendClassNames('humany-guide-toolbar', className)}>\r\n {language && Object.keys(guide.translations || {}).length > 1 && (\r\n <Languages\r\n guide={guide}\r\n header={toolbarLanguageHeader}\r\n tooltip={toolbarLanguageTooltip}\r\n picker={picker}\r\n {...other}\r\n />\r\n )}\r\n {guideCategories && <Categories guide={guide} toolbar={toolbar} />}\r\n {(allowCopy || allowPrint || showFavoriteToggle) && (\r\n <Functions\r\n guide={guide}\r\n header={toolbarFunctionsHeader}\r\n tooltip={toolbarFunctionsTooltip}\r\n printActionLabel={printActionLabel}\r\n copyActionLabel={copyActionLabel}\r\n addFavoriteTooltip={addFavoriteTooltip}\r\n removeFavoriteCancelLabel={removeFavoriteCancelLabel}\r\n removeFavoriteConfirmLabel={removeFavoriteConfirmLabel}\r\n removeFavoriteHeader={removeFavoriteHeader}\r\n removeFavoriteLabel={removeFavoriteLabel}\r\n removeFavoriteTooltip={removeFavoriteTooltip}\r\n toolbarFunctionsCloseButtonAriaLabel={toolbarFunctionsCloseButtonAriaLabel}\r\n allowCopy={allowCopy}\r\n allowPrint={allowPrint}\r\n showFavoriteToggle={showFavoriteToggle}\r\n picker={picker}\r\n dispatch={dispatch}\r\n />\r\n )}\r\n </Wrapper>\r\n );\r\n};\r\n\r\nexport default Toolbar;\r\n\r\nconst Wrapper = styled.div`\r\n display: flex;\r\n align-items: center;\r\n justify-content: space-between;\r\n margin: 0 0 0 auto;\r\n\r\n > :not(:last-child) {\r\n margin: 0 calc(${(p) => p.theme.sizes?.small} * 2) 0 0;\r\n }\r\n`;\r\n","import { contactLink, ContactList } from '@telia-ace/knowledge-widget-adapters';\r\nimport { Component, NotFound } from '@telia-ace/knowledge-widget-types-grid';\r\nimport {\r\n Button,\r\n contentBox,\r\n createEmptyComponent,\r\n DialogList,\r\n genericHtml,\r\n guideRenderInstructions,\r\n headingElement,\r\n linkTabStyle,\r\n Loader,\r\n loadingOpacity,\r\n Metadata,\r\n Paragraph,\r\n useChildren,\r\n useContainer,\r\n useDispatch,\r\n useProperties,\r\n useRouteData,\r\n} from '@telia-ace/knowledge-widget-ui';\r\nimport { appendClassNames } from '@telia-ace/widget-utilities';\r\nimport React, { forwardRef, useCallback } from 'react';\r\nimport styled, { css } from 'styled-components';\r\nimport AnswerVersionPicker from './answer-version-picker';\r\nimport Feedback from './feedback';\r\nimport { GuideComponentProps } from './guide-component';\r\nimport Toolbar from './toolbar';\r\n\r\ntype Props = { className: string; accordion?: boolean };\r\n\r\nconst Guide = forwardRef<HTMLDivElement, Props>(\r\n ({ className, accordion = false, ...other }, ref) => {\r\n const {\r\n loading = false,\r\n dialog = [],\r\n contactMethods = [],\r\n showHeader = true,\r\n showAnswerVersions = false,\r\n defaultAnswerVersionLabel = 'Default',\r\n backButtonLabel,\r\n metadataByLabel,\r\n metadataModifiedLabel,\r\n metadataPublishedLabel,\r\n availablePerspectives,\r\n metadata,\r\n toolbar,\r\n guide,\r\n error,\r\n } = useProperties<GuideComponentProps>();\r\n const {\r\n params: { connection },\r\n } = useRouteData();\r\n const container = useContainer();\r\n const children = useChildren();\r\n const dispatch = useDispatch();\r\n\r\n const handleBackButtonClick = useCallback(() => {\r\n dispatch('back');\r\n }, [dispatch]);\r\n\r\n if (!guide && !error && !loading) {\r\n return createEmptyComponent(container, {\r\n ...other,\r\n className: appendClassNames(className, 'humany-guide'),\r\n });\r\n }\r\n\r\n const { id = '', title = '', body = '', translations = {} } = guide || {};\r\n\r\n if (error && error.status === 404) {\r\n return <NotFound showSearch={false} />;\r\n }\r\n\r\n const showBackButton = !!accordion && !!connection;\r\n const language = Object.keys(translations).find((key) => translations[key] === `${id}`);\r\n\r\n return (\r\n <Wrapper\r\n ref={ref}\r\n {...other}\r\n data-loading={loading}\r\n className={appendClassNames(className, 'humany-guide')}\r\n >\r\n <Content\r\n data-loading={loading}\r\n accordion={accordion ? 'true' : 'false'}\r\n className=\"humany-guide-content\"\r\n >\r\n {((showAnswerVersions && guide) || !!toolbar) && (\r\n <Top className=\"humany-guide-top\">\r\n {showAnswerVersions && guide && (\r\n <AnswerVersionPicker\r\n defaultAnswerVersionLabel={defaultAnswerVersionLabel}\r\n availablePerspectives={availablePerspectives}\r\n guide={guide}\r\n />\r\n )}\r\n {!!toolbar && <Toolbar dispatch={dispatch} />}\r\n </Top>\r\n )}\r\n {!!(title || body) && (\r\n <Body\r\n className=\"humany-guide-body\"\r\n accordion={accordion ? 'true' : 'false'}\r\n header={(showHeader && title) || undefined}\r\n html={body}\r\n htmlParseInstruction={guideRenderInstructions(container, dialog)}\r\n lang={language}\r\n />\r\n )}\r\n {dialog && body.indexOf('h-option-link') === -1 && (\r\n <StyledDialogList dialog={dialog} />\r\n )}\r\n <StyledContactList\r\n backButtonShown={showBackButton ? 'true' : 'false'}\r\n contactMethods={contactMethods}\r\n dispatch={dispatch}\r\n guideId={guide && guide.id}\r\n />\r\n {!contactMethods.length && (\r\n <Feedback backButtonShown={showBackButton} accordion={accordion} />\r\n )}\r\n {showBackButton && (\r\n <BackButton aria-label={backButtonLabel} onClick={handleBackButtonClick}>\r\n <Caret\r\n width=\"7\"\r\n height=\"13\"\r\n viewBox=\"0 0 7 13\"\r\n fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n >\r\n <line x1=\"6.64645\" y1=\"12.5513\" x2=\"0.648357\" y2=\"6.55319\" />\r\n <line x1=\"0.646447\" y1=\"6.64455\" x2=\"6.64454\" y2=\"0.646465\" />\r\n </Caret>\r\n {backButtonLabel && <span>{backButtonLabel}</span>}\r\n </BackButton>\r\n )}\r\n {metadata && (\r\n <StyledMetadata\r\n {...metadata}\r\n modified={guide?.modified}\r\n published={guide?.published}\r\n modifiedBy={guide?.modifiedBy}\r\n publishedBy={guide?.publishedBy}\r\n byLabel={metadataByLabel}\r\n modifiedLabel={metadataModifiedLabel}\r\n publishedLabel={metadataPublishedLabel}\r\n />\r\n )}\r\n {children.map((child) => (\r\n <StyledComponents\r\n key={child.id}\r\n id={child.id}\r\n branch=\"default\"\r\n {...{ embedded: true }}\r\n />\r\n ))}\r\n </Content>\r\n\r\n <Loader loading={loading} />\r\n </Wrapper>\r\n );\r\n }\r\n);\r\n\r\nexport default Guide;\r\n\r\nconst Wrapper = styled.div<{ 'data-loading': boolean }>`\r\n ${loadingOpacity}\r\n min-width: 0;\r\n`;\r\n\r\nconst Body = styled(Paragraph)<{ accordion: 'true' | 'false' }>`\r\n ${genericHtml}\r\n ${(p) => `padding: ${p.theme.sizes?.large};`}\r\n display: block;\r\n line-height: 1.6em;\r\n ${headingElement(\r\n 'h1',\r\n css`\r\n font-size: ${(p) => p.theme.fonts?.large};\r\n font-weight: normal;\r\n line-height: 1.6em;\r\n line-height: 1.6em;\r\n margin: 0 0 ${(p) => p.theme.sizes?.small};\r\n `\r\n )}\r\n\r\n p {\r\n font-weight: 300;\r\n font-size: ${(p) => p.theme.fonts?.normal};\r\n color: ${(p) => p.theme.colors?.text};\r\n a {\r\n display: inline;\r\n }\r\n }\r\n`;\r\n\r\nconst StyledContactList = styled(ContactList)<{ backButtonShown: 'true' | 'false' }>`\r\n border-top: ${(p) => p.theme.border};\r\n ${(p) => p.backButtonShown === 'true' && `border-bottom: ${p.theme.border};`}\r\n`;\r\n\r\nconst StyledDialogList = styled(DialogList)`\r\n ${(p) => `padding: 0 ${p.theme.sizes?.large} ${p.theme.sizes?.large};`}\r\n display: block;\r\n`;\r\n\r\nconst Top = styled.div`\r\n ${(p) => `padding: calc(${p.theme.sizes?.normal}*2) ${p.theme.sizes?.large};`}\r\n display: flex;\r\n justify-content: space-between;\r\n align-items: center;\r\n border-bottom: ${(p) => p.theme.border};\r\n border-radius: ${(p) => `${p.theme.borderRadius} ${p.theme.borderRadius}`} 0 0;\r\n background-color: #ffffff;\r\n`;\r\n\r\nconst Content = styled.div<{ 'data-loading': boolean; accordion: 'true' | 'false' } & any>`\r\n ${contentBox}\r\n display: block;\r\n > a {\r\n ${contactLink}\r\n }\r\n\r\n ${(p) =>\r\n p.accordion === 'true' &&\r\n css`\r\n white-space: normal;\r\n box-shadow: none;\r\n background-color: #fafafa;\r\n `}\r\n`;\r\n\r\nconst StyledMetadata = styled(Metadata)`\r\n display: block;\r\n ${(p) => `padding: calc(${p.theme.sizes?.normal}*2) ${p.theme.sizes?.large};`}\r\n font-weight: 300;\r\n font-size: ${(p) => p.theme.fonts?.normal};\r\n color: ${(p) => p.theme.colors?.text};\r\n border-top: ${(p) => p.theme.border};\r\n`;\r\n\r\nconst StyledComponents = styled(Component)`\r\n border-top: ${(p) => p.theme.border};\r\n`;\r\n\r\nconst BackButton = styled(Button)`\r\n ${(p) => `padding: ${p.theme.sizes?.normal} calc(${p.theme.sizes?.normal} * 2);`}\r\n color: ${(p) => p.theme.colors?.primary};\r\n text-decoration: underline;\r\n font-size: ${(p) => p.theme.fonts?.normal};\r\n span {\r\n font-weight: 300;\r\n }\r\n &:focus {\r\n ${(p) =>\r\n p.theme.accessibility?.isTabbing &&\r\n css`\r\n ${linkTabStyle}\r\n padding: ${(p) => `calc(${p.theme.sizes?.small} / 2) ${p.theme.sizes?.small}`};\r\n `};\r\n }\r\n`;\r\n\r\nconst Caret = styled.svg`\r\n margin-right: ${(p) => p.theme.sizes?.small};\r\n line {\r\n stroke: ${(p) => p.theme.colors?.primary};\r\n }\r\n`;\r\n"],"names":["StyledContactList","FeedbackUi","ColoredSymbolBadge","StyledDropdownList","Wrapper"],"mappings":"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"}
package/dist/guide.d.ts CHANGED
@@ -1,7 +1,7 @@
1
- import React from 'react';
2
- declare type Props = {
3
- className: string;
4
- accordion?: boolean;
5
- };
6
- declare const Guide: React.ForwardRefExoticComponent<Props & React.RefAttributes<HTMLDivElement>>;
7
- export default Guide;
1
+ import React from 'react';
2
+ declare type Props = {
3
+ className: string;
4
+ accordion?: boolean;
5
+ };
6
+ declare const Guide: React.ForwardRefExoticComponent<Props & React.RefAttributes<HTMLDivElement>>;
7
+ export default Guide;
package/dist/index.d.ts CHANGED
@@ -1,2 +1,2 @@
1
- import GuideComponent from './guide-component';
2
- export default GuideComponent;
1
+ import GuideComponent from './guide-component';
2
+ export default GuideComponent;
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../src/use-feedback.ts","../src/guide-component.ts"],"sourcesContent":["import { updateForm } from '@telia-ace/knowledge-widget-component-utilities';\nimport { ComponentNodeController } from '@telia-ace/knowledge-widget-core';\nimport {\n ContactsResult,\n DataClient,\n DataType,\n FeedbackType,\n} from '@telia-ace/knowledge-widget-types-grid';\nimport { Container } from '@webprovisions/platform';\nimport { GuideComponentProps } from './guide-component';\n\nexport default (container: Container, controller: ComponentNodeController) => {\n controller.actions.create('feedback', (input: 'negative' | 'positive') => {\n const type = input === 'negative' ? FeedbackType.Negative : FeedbackType.Positive;\n const { guide, submitButtonLabel = 'Submit' } =\n controller.properties<GuideComponentProps>();\n if (guide) {\n const { connection, id, hasHandover } = guide;\n controller.writeProperties({\n feedbackGiven: input,\n loading: hasHandover && type === FeedbackType.Negative,\n });\n\n const { events } = container.get('$widget');\n events.dispatch('tracking:feedback-given', {\n guide,\n categories: guide.categories,\n feedbackType: type.toLowerCase(),\n });\n\n return container.getAsync('dataClient').then((dataClient: DataClient) => {\n return dataClient.feedback(id, connection, type).then(() => {\n if (hasHandover && type === FeedbackType.Negative) {\n return dataClient\n .fetch(DataType.ContactMethods, { guideId: id })\n .then(({ contactMethods }: ContactsResult) => {\n return controller.actions.dispatch('handover', {\n handoverContactMethods: contactMethods.map((cm) => ({\n ...cm,\n body: updateForm(cm, {\n submit: submitButtonLabel,\n }),\n })),\n loading: false,\n });\n });\n }\n });\n });\n }\n });\n\n controller.actions.create('handover', (input) => {\n return controller.writeProperties({ ...input, loading: false });\n });\n};\n","import { ContactMethodType } from '@telia-ace/knowledge-widget-adapters';\nimport {\n FavoriteProperties,\n LanguageProperties,\n MetaDataProperties,\n updateForm,\n useExpand,\n useForm,\n} from '@telia-ace/knowledge-widget-component-utilities';\nimport {\n createEventSubscriber,\n DialogItem,\n extendComponent,\n PickerTypes,\n} from '@telia-ace/knowledge-widget-core';\nimport {\n DataClient,\n DataError,\n DataType,\n GuideResult,\n} from '@telia-ace/knowledge-widget-types-grid';\nimport { createReactComponent } from '@telia-ace/knowledge-widget-ui';\nimport { FormComponentInstanceProperties } from '@telia-ace/widget-forms';\nimport { RoutingService } from '@telia-ace/widget-routing';\nimport { Container, EventManager } from '@webprovisions/platform';\nimport * as clipboard from 'clipboard-polyfill';\nimport useFeedback from './use-feedback';\n\nexport type GuideProps = {\n id: string;\n title: string;\n body: string;\n connection: string;\n categories: number[];\n hasHandover: boolean;\n allowFeedback: boolean;\n perspectives: { [key: string]: string };\n translations?: { [key: string]: string };\n modified?: string;\n published?: string;\n publishedBy?: string | null;\n modifiedBy?: string | null;\n perspective: string | null;\n};\n\nexport type AvailablePerspectives = {\n name: string;\n title: string;\n};\n\nexport type GuideComponentProps = {\n showHeader?: boolean;\n showFeedback?: boolean;\n feedbackDirection?: 'horizontal' | 'vertical';\n feedbackGiven?: 'positive' | 'negative'; // internal\n contactMethods?: ContactMethodType[]; // internal\n handoverContactMethods?: ContactMethodType[]; // internal\n showAnswerVersions?: boolean;\n feedbackHeader?: string;\n contactHeader?: string;\n toolbarFunctionsHeader?: string;\n toolbarLanguageHeader?: string;\n positiveFeedbackLabel?: string;\n negativeFeedbackLabel?: string;\n contactFeedbackLabel?: string;\n feedbackRecognitionLabel?: string;\n defaultAnswerVersionLabel?: string;\n backButtonLabel?: string;\n toolbarFunctionsTooltip?: string;\n toolbarFunctionsCloseButtonAriaLabel?: string;\n copyActionLabel?: string;\n printActionLabel?: string;\n toolbarLanguageTooltip?: string;\n toolbar?: ToolbarProps;\n guide?: GuideProps; // internal\n dialog?: DialogItem[]; // internal\n error?: DataError; // internal\n availablePerspectives?: AvailablePerspectives[]; // internal\n} & FormComponentInstanceProperties &\n FavoriteProperties &\n MetaDataProperties &\n LanguageProperties;\n\nexport type ToolbarProps = {\n language?: boolean;\n guideCategories?: boolean;\n allowCopy?: boolean;\n allowPrint?: boolean;\n showFavoriteToggle?: boolean;\n picker?: PickerTypes;\n};\n\nconst buildPlainText = ({ title, body }: GuideProps): string => {\n let processedHtml = '';\n\n if (title && title.length) {\n processedHtml = title.trim();\n }\n\n if (body && body.length) {\n processedHtml = `${processedHtml.trim()}\\n${body.trim()}`;\n }\n\n const div = document.createElement('div');\n div.innerHTML = processedHtml;\n const links: HTMLAnchorElement[] = Array.from(div.getElementsByTagName('a'));\n\n let plainText = div.innerText;\n\n links.forEach((a) => {\n plainText = plainText.replace(a.innerText, `[${a.href}] (${a.innerText})`);\n });\n\n return plainText;\n};\n\nconst buildHtml = ({ title, body }: GuideProps): string => {\n let processedHtml = '';\n\n if (title && title.length) {\n processedHtml = `<h2>${title.trim()}</h2>`;\n }\n\n if (body && body.length) {\n processedHtml = `${processedHtml.trim()}${body.trim()}`;\n }\n\n return processedHtml.trim();\n};\n\nexport const GuideComponent = (container: Container) => {\n const { events }: { events: EventManager } = container.get('$widget');\n const [subscribe, unsubscribe] = createEventSubscriber(events);\n\n return createReactComponent(container, 'guide', import('./guide'), (component) => {\n const fetch = (params: { [key: string]: any }) => {\n component.writeProperties({\n loading: true,\n error: undefined,\n guide: undefined,\n });\n component.actions.dispatch('fetch', { params });\n };\n\n component.actions.create('copy', (guide: GuideProps) => {\n const item = new clipboard.ClipboardItem({\n 'text/html': new Blob([buildHtml(guide)], { type: 'text/html' }),\n 'text/plain': new Blob([buildPlainText(guide)], { type: 'text/plain' }),\n });\n\n return clipboard.write([item]).then(() => {\n events.dispatch('widget:menu-toggled', null);\n });\n });\n\n component.actions.create('print', () => {\n const elem = document.querySelector('.humany-guide .humany-paragraph');\n const a = window.open('', '', 'height=500, width=500');\n\n events.dispatch('widget:menu-toggled', null);\n if (elem && a) {\n a.document.write(`<html><body>${elem.innerHTML}</body></html>`);\n a.document.close();\n a.print();\n }\n });\n\n component.actions.create('back', (data, options) => {\n if (options.preventDefault) {\n return;\n }\n\n return container.getAsync('router').then((router: RoutingService) => {\n router.goBack();\n });\n });\n\n component.actions.create(\n 'fetch',\n ({ contactMethods = [], dialog = [], guide, error }: GuideResult) => {\n if (error) {\n return component.actions.dispatch('fetched', {\n error,\n guide: undefined,\n contactMethods: [],\n feedbackGiven: undefined,\n handoverContactMethods: [],\n showFeedback: false,\n loading: true,\n });\n }\n const { showFeedback = true, submitButtonLabel = 'Submit' } =\n component.properties<GuideComponentProps>();\n\n const properties: GuideComponentProps = {\n showFeedback,\n dialog,\n guide,\n feedbackGiven: undefined,\n handoverContactMethods: [],\n contactMethods: contactMethods.map((cm) => ({\n ...cm,\n body: updateForm(cm, { submit: submitButtonLabel }),\n })),\n };\n\n return component.actions.dispatch('fetched', {\n ...properties,\n loading: true,\n });\n }\n );\n\n component.actions.create('fetched', (input) => {\n return component.writeProperties({ ...input, loading: false });\n });\n\n container.getAsync('router').then((router) => {\n const { params } = router.getRouteData();\n fetch(params);\n });\n\n subscribe('router:changed', (event: any, { current }: any) => {\n fetch(current.routeData.params);\n });\n\n useFeedback(container, component);\n useForm(container, component);\n useExpand(component);\n })\n .then(() => {\n return extendComponent(container, 'guide', (component) => {\n component.actions.watch('guide.fetch', (input, next) => {\n const {\n params: { guide, connection },\n } = input;\n\n if (guide) {\n return container\n .getAsync('dataClient')\n .then((dataClient: DataClient) =>\n dataClient.fetch(DataType.Guide, { connection, guideId: guide })\n )\n .then(next)\n .catch((error) => {\n if (error) {\n return next(error);\n }\n });\n }\n\n return next(input);\n });\n });\n })\n .then(() => {\n unsubscribe();\n });\n};\n\nexport default GuideComponent;\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../src/use-feedback.ts","../src/guide-component.ts"],"sourcesContent":["import { updateForm } from '@telia-ace/knowledge-widget-component-utilities';\r\nimport { ComponentNodeController } from '@telia-ace/knowledge-widget-core';\r\nimport {\r\n ContactsResult,\r\n DataClient,\r\n DataType,\r\n FeedbackType,\r\n} from '@telia-ace/knowledge-widget-types-grid';\r\nimport { Container } from '@webprovisions/platform';\r\nimport { GuideComponentProps } from './guide-component';\r\n\r\nexport default (container: Container, controller: ComponentNodeController) => {\r\n controller.actions.create('feedback', (input: 'negative' | 'positive') => {\r\n const type = input === 'negative' ? FeedbackType.Negative : FeedbackType.Positive;\r\n const { guide, submitButtonLabel = 'Submit' } =\r\n controller.properties<GuideComponentProps>();\r\n if (guide) {\r\n const { connection, id, hasHandover } = guide;\r\n controller.writeProperties({\r\n feedbackGiven: input,\r\n loading: hasHandover && type === FeedbackType.Negative,\r\n });\r\n\r\n const { events } = container.get('$widget');\r\n events.dispatch('tracking:feedback-given', {\r\n guide,\r\n categories: guide.categories,\r\n feedbackType: type.toLowerCase(),\r\n });\r\n\r\n return container.getAsync('dataClient').then((dataClient: DataClient) => {\r\n return dataClient.feedback(id, connection, type).then(() => {\r\n if (hasHandover && type === FeedbackType.Negative) {\r\n return dataClient\r\n .fetch(DataType.ContactMethods, { guideId: id })\r\n .then(({ contactMethods }: ContactsResult) => {\r\n return controller.actions.dispatch('handover', {\r\n handoverContactMethods: contactMethods.map((cm) => ({\r\n ...cm,\r\n body: updateForm(cm, {\r\n submit: submitButtonLabel,\r\n }),\r\n })),\r\n loading: false,\r\n });\r\n });\r\n }\r\n });\r\n });\r\n }\r\n });\r\n\r\n controller.actions.create('handover', (input) => {\r\n return controller.writeProperties({ ...input, loading: false });\r\n });\r\n};\r\n","import { ContactMethodType } from '@telia-ace/knowledge-widget-adapters';\r\nimport {\r\n FavoriteProperties,\r\n LanguageProperties,\r\n MetaDataProperties,\r\n updateForm,\r\n useExpand,\r\n useForm,\r\n} from '@telia-ace/knowledge-widget-component-utilities';\r\nimport {\r\n createEventSubscriber,\r\n DialogItem,\r\n extendComponent,\r\n PickerTypes,\r\n} from '@telia-ace/knowledge-widget-core';\r\nimport {\r\n DataClient,\r\n DataError,\r\n DataType,\r\n GuideResult,\r\n} from '@telia-ace/knowledge-widget-types-grid';\r\nimport { createReactComponent } from '@telia-ace/knowledge-widget-ui';\r\nimport { FormComponentInstanceProperties } from '@telia-ace/widget-forms';\r\nimport { RoutingService } from '@telia-ace/widget-routing';\r\nimport { Container, EventManager } from '@webprovisions/platform';\r\nimport * as clipboard from 'clipboard-polyfill';\r\nimport useFeedback from './use-feedback';\r\n\r\nexport type GuideProps = {\r\n id: string;\r\n title: string;\r\n body: string;\r\n connection: string;\r\n categories: number[];\r\n hasHandover: boolean;\r\n allowFeedback: boolean;\r\n perspectives: { [key: string]: string };\r\n translations?: { [key: string]: string };\r\n modified?: string;\r\n published?: string;\r\n publishedBy?: string | null;\r\n modifiedBy?: string | null;\r\n perspective: string | null;\r\n};\r\n\r\nexport type AvailablePerspectives = {\r\n name: string;\r\n title: string;\r\n};\r\n\r\nexport type GuideComponentProps = {\r\n showHeader?: boolean;\r\n showFeedback?: boolean;\r\n feedbackDirection?: 'horizontal' | 'vertical';\r\n feedbackGiven?: 'positive' | 'negative'; // internal\r\n contactMethods?: ContactMethodType[]; // internal\r\n handoverContactMethods?: ContactMethodType[]; // internal\r\n showAnswerVersions?: boolean;\r\n feedbackHeader?: string;\r\n contactHeader?: string;\r\n toolbarFunctionsHeader?: string;\r\n toolbarLanguageHeader?: string;\r\n positiveFeedbackLabel?: string;\r\n negativeFeedbackLabel?: string;\r\n contactFeedbackLabel?: string;\r\n feedbackRecognitionLabel?: string;\r\n defaultAnswerVersionLabel?: string;\r\n backButtonLabel?: string;\r\n toolbarFunctionsTooltip?: string;\r\n toolbarFunctionsCloseButtonAriaLabel?: string;\r\n copyActionLabel?: string;\r\n printActionLabel?: string;\r\n toolbarLanguageTooltip?: string;\r\n toolbar?: ToolbarProps;\r\n guide?: GuideProps; // internal\r\n dialog?: DialogItem[]; // internal\r\n error?: DataError; // internal\r\n availablePerspectives?: AvailablePerspectives[]; // internal\r\n} & FormComponentInstanceProperties &\r\n FavoriteProperties &\r\n MetaDataProperties &\r\n LanguageProperties;\r\n\r\nexport type ToolbarProps = {\r\n language?: boolean;\r\n guideCategories?: boolean;\r\n allowCopy?: boolean;\r\n allowPrint?: boolean;\r\n showFavoriteToggle?: boolean;\r\n picker?: PickerTypes;\r\n};\r\n\r\nconst buildPlainText = ({ title, body }: GuideProps): string => {\r\n let processedHtml = '';\r\n\r\n if (title && title.length) {\r\n processedHtml = title.trim();\r\n }\r\n\r\n if (body && body.length) {\r\n processedHtml = `${processedHtml.trim()}\\n${body.trim()}`;\r\n }\r\n\r\n const div = document.createElement('div');\r\n div.innerHTML = processedHtml;\r\n const links: HTMLAnchorElement[] = Array.from(div.getElementsByTagName('a'));\r\n\r\n let plainText = div.innerText;\r\n\r\n links.forEach((a) => {\r\n plainText = plainText.replace(a.innerText, `[${a.href}] (${a.innerText})`);\r\n });\r\n\r\n return plainText;\r\n};\r\n\r\nconst buildHtml = ({ title, body }: GuideProps): string => {\r\n let processedHtml = '';\r\n\r\n if (title && title.length) {\r\n processedHtml = `<h2>${title.trim()}</h2>`;\r\n }\r\n\r\n if (body && body.length) {\r\n processedHtml = `${processedHtml.trim()}${body.trim()}`;\r\n }\r\n\r\n return processedHtml.trim();\r\n};\r\n\r\nexport const GuideComponent = (container: Container) => {\r\n const { events }: { events: EventManager } = container.get('$widget');\r\n const [subscribe, unsubscribe] = createEventSubscriber(events);\r\n\r\n return createReactComponent(container, 'guide', import('./guide'), (component) => {\r\n const fetch = (params: { [key: string]: any }) => {\r\n component.writeProperties({\r\n loading: true,\r\n error: undefined,\r\n guide: undefined,\r\n });\r\n component.actions.dispatch('fetch', { params });\r\n };\r\n\r\n component.actions.create('copy', (guide: GuideProps) => {\r\n const item = new clipboard.ClipboardItem({\r\n 'text/html': new Blob([buildHtml(guide)], { type: 'text/html' }),\r\n 'text/plain': new Blob([buildPlainText(guide)], { type: 'text/plain' }),\r\n });\r\n\r\n return clipboard.write([item]).then(() => {\r\n events.dispatch('widget:menu-toggled', null);\r\n });\r\n });\r\n\r\n component.actions.create('print', () => {\r\n const elem = document.querySelector('.humany-guide .humany-paragraph');\r\n const a = window.open('', '', 'height=500, width=500');\r\n\r\n events.dispatch('widget:menu-toggled', null);\r\n if (elem && a) {\r\n a.document.write(`<html><body>${elem.innerHTML}</body></html>`);\r\n a.document.close();\r\n a.print();\r\n }\r\n });\r\n\r\n component.actions.create('back', (data, options) => {\r\n if (options.preventDefault) {\r\n return;\r\n }\r\n\r\n return container.getAsync('router').then((router: RoutingService) => {\r\n router.goBack();\r\n });\r\n });\r\n\r\n component.actions.create(\r\n 'fetch',\r\n ({ contactMethods = [], dialog = [], guide, error }: GuideResult) => {\r\n if (error) {\r\n return component.actions.dispatch('fetched', {\r\n error,\r\n guide: undefined,\r\n contactMethods: [],\r\n feedbackGiven: undefined,\r\n handoverContactMethods: [],\r\n showFeedback: false,\r\n loading: true,\r\n });\r\n }\r\n const { showFeedback = true, submitButtonLabel = 'Submit' } =\r\n component.properties<GuideComponentProps>();\r\n\r\n const properties: GuideComponentProps = {\r\n showFeedback,\r\n dialog,\r\n guide,\r\n feedbackGiven: undefined,\r\n handoverContactMethods: [],\r\n contactMethods: contactMethods.map((cm) => ({\r\n ...cm,\r\n body: updateForm(cm, { submit: submitButtonLabel }),\r\n })),\r\n };\r\n\r\n return component.actions.dispatch('fetched', {\r\n ...properties,\r\n loading: true,\r\n });\r\n }\r\n );\r\n\r\n component.actions.create('fetched', (input) => {\r\n return component.writeProperties({ ...input, loading: false });\r\n });\r\n\r\n container.getAsync('router').then((router) => {\r\n const { params } = router.getRouteData();\r\n fetch(params);\r\n });\r\n\r\n subscribe('router:changed', (event: any, { current }: any) => {\r\n fetch(current.routeData.params);\r\n });\r\n\r\n useFeedback(container, component);\r\n useForm(container, component);\r\n useExpand(component);\r\n })\r\n .then(() => {\r\n return extendComponent(container, 'guide', (component) => {\r\n component.actions.watch('guide.fetch', (input, next) => {\r\n const {\r\n params: { guide, connection },\r\n } = input;\r\n\r\n if (guide) {\r\n return container\r\n .getAsync('dataClient')\r\n .then((dataClient: DataClient) =>\r\n dataClient.fetch(DataType.Guide, { connection, guideId: guide })\r\n )\r\n .then(next)\r\n .catch((error) => {\r\n if (error) {\r\n return next(error);\r\n }\r\n });\r\n }\r\n\r\n return next(input);\r\n });\r\n });\r\n })\r\n .then(() => {\r\n unsubscribe();\r\n });\r\n};\r\n\r\nexport default GuideComponent;\r\n"],"names":[],"mappings":"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"}
@@ -1,17 +1,17 @@
1
- import { LanguageProperties } from '@telia-ace/knowledge-widget-component-utilities';
2
- import { PickerTypes } from '@telia-ace/knowledge-widget-core';
3
- import React from 'react';
4
- import { GuideProps } from './guide-component';
5
- export declare type LanguageListItem = {
6
- id: string;
7
- key: string;
8
- label: string;
9
- };
10
- declare type Props = Merge<{
11
- header?: string;
12
- tooltip?: string;
13
- guide: GuideProps;
14
- picker?: PickerTypes;
15
- }, LanguageProperties>;
16
- declare const Languages: React.FC<Props>;
17
- export default Languages;
1
+ import { LanguageProperties } from '@telia-ace/knowledge-widget-component-utilities';
2
+ import { PickerTypes } from '@telia-ace/knowledge-widget-core';
3
+ import React from 'react';
4
+ import { GuideProps } from './guide-component';
5
+ export declare type LanguageListItem = {
6
+ id: string;
7
+ key: string;
8
+ label: string;
9
+ };
10
+ declare type Props = Merge<{
11
+ header?: string;
12
+ tooltip?: string;
13
+ guide: GuideProps;
14
+ picker?: PickerTypes;
15
+ }, LanguageProperties>;
16
+ declare const Languages: React.FC<Props>;
17
+ export default Languages;
package/dist/toolbar.d.ts CHANGED
@@ -1,8 +1,8 @@
1
- import { DispatchAction } from '@telia-ace/knowledge-widget-ui';
2
- import React from 'react';
3
- declare type Props = {
4
- className?: string;
5
- dispatch: DispatchAction;
6
- };
7
- declare const Toolbar: React.FC<Props>;
8
- export default Toolbar;
1
+ import { DispatchAction } from '@telia-ace/knowledge-widget-ui';
2
+ import React from 'react';
3
+ declare type Props = {
4
+ className?: string;
5
+ dispatch: DispatchAction;
6
+ };
7
+ declare const Toolbar: React.FC<Props>;
8
+ export default Toolbar;
@@ -1,4 +1,4 @@
1
- import { ComponentNodeController } from '@telia-ace/knowledge-widget-core';
2
- import { Container } from '@webprovisions/platform';
3
- declare const _default: (container: Container, controller: ComponentNodeController) => void;
4
- export default _default;
1
+ import { ComponentNodeController } from '@telia-ace/knowledge-widget-core';
2
+ import { Container } from '@webprovisions/platform';
3
+ declare const _default: (container: Container, controller: ComponentNodeController) => void;
4
+ export default _default;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@telia-ace/knowledge-widget-components-guide",
3
- "version": "1.0.21",
3
+ "version": "1.0.22",
4
4
  "description": "Guide component for ACE Knowledge Widgets.",
5
5
  "license": "SEE LICENSE IN LICENSE.txt",
6
6
  "author": "Telia Company AB",
@@ -25,14 +25,14 @@
25
25
  },
26
26
  "sideEffects": false,
27
27
  "dependencies": {
28
- "@telia-ace/knowledge-widget-adapters": "^1.0.27",
29
- "@telia-ace/knowledge-widget-component-utilities": "^1.0.21",
30
- "@telia-ace/knowledge-widget-core": "^1.0.17",
31
- "@telia-ace/knowledge-widget-types-grid": "^1.0.28",
32
- "@telia-ace/knowledge-widget-ui": "^1.0.23",
33
- "@telia-ace/widget-forms": "^1.0.20",
34
- "@telia-ace/widget-routing": "^1.0.14",
35
- "@telia-ace/widget-utilities": "^1.0.2",
28
+ "@telia-ace/knowledge-widget-adapters": "^1.0.28",
29
+ "@telia-ace/knowledge-widget-component-utilities": "^1.0.22",
30
+ "@telia-ace/knowledge-widget-core": "^1.0.18",
31
+ "@telia-ace/knowledge-widget-types-grid": "^1.0.29",
32
+ "@telia-ace/knowledge-widget-ui": "^1.0.24",
33
+ "@telia-ace/widget-forms": "^1.0.21",
34
+ "@telia-ace/widget-routing": "^1.0.15",
35
+ "@telia-ace/widget-utilities": "^1.0.3",
36
36
  "@webprovisions/platform": "^1.1.2",
37
37
  "clipboard-polyfill": "3.0.2"
38
38
  },
@@ -46,5 +46,5 @@
46
46
  "@types/react-dom": "^16.8.0",
47
47
  "@types/styled-components": "^5.1.7"
48
48
  },
49
- "gitHead": "038c3d0914f7298d2bb74a80c7a679c7450633f9"
49
+ "gitHead": "b30b55cc433567b8f9de20d83b840919ffc0d58a"
50
50
  }