@telia-ace/knowledge-widget-components-guide 1.0.6 → 1.0.8

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.
Files changed (45) hide show
  1. package/{lib-esm → dist}/answer-version-picker.d.ts +0 -0
  2. package/{lib-esm → dist}/categories.d.ts +0 -0
  3. package/{lib-esm → dist}/feedback.d.ts +0 -0
  4. package/{lib-esm → dist}/functions.d.ts +0 -0
  5. package/{lib-esm → dist}/guide-component.d.ts +0 -0
  6. package/{lib-esm → dist}/guide.d.ts +0 -0
  7. package/dist/guide.js +917 -0
  8. package/dist/guide.js.map +1 -0
  9. package/{lib-esm → dist}/index.d.ts +0 -0
  10. package/dist/index.js +191 -0
  11. package/dist/index.js.map +1 -0
  12. package/{lib-esm → dist}/languages.d.ts +0 -0
  13. package/{lib-esm → dist}/toolbar.d.ts +0 -0
  14. package/{lib-esm → dist}/use-feedback.d.ts +0 -0
  15. package/package.json +15 -16
  16. package/lib/answer-version-picker.d.ts +0 -10
  17. package/lib/answer-version-picker.js +0 -75
  18. package/lib/categories.d.ts +0 -8
  19. package/lib/categories.js +0 -80
  20. package/lib/feedback.d.ts +0 -7
  21. package/lib/feedback.js +0 -34
  22. package/lib/functions.d.ts +0 -29
  23. package/lib/functions.js +0 -129
  24. package/lib/guide-component.d.ts +0 -69
  25. package/lib/guide-component.js +0 -196
  26. package/lib/guide.d.ts +0 -7
  27. package/lib/guide.js +0 -117
  28. package/lib/index.d.ts +0 -2
  29. package/lib/index.js +0 -7
  30. package/lib/languages.d.ts +0 -17
  31. package/lib/languages.js +0 -110
  32. package/lib/toolbar.d.ts +0 -8
  33. package/lib/toolbar.js +0 -62
  34. package/lib/use-feedback.d.ts +0 -4
  35. package/lib/use-feedback.js +0 -54
  36. package/lib-esm/answer-version-picker.js +0 -50
  37. package/lib-esm/categories.js +0 -52
  38. package/lib-esm/feedback.js +0 -29
  39. package/lib-esm/functions.js +0 -101
  40. package/lib-esm/guide-component.js +0 -166
  41. package/lib-esm/guide.js +0 -89
  42. package/lib-esm/index.js +0 -2
  43. package/lib-esm/languages.js +0 -85
  44. package/lib-esm/toolbar.js +0 -57
  45. package/lib-esm/use-feedback.js +0 -52
@@ -0,0 +1 @@
1
+ {"version":3,"file":"guide.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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"}
File without changes
package/dist/index.js ADDED
@@ -0,0 +1,191 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __defProps = Object.defineProperties;
3
+ var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
4
+ var __getOwnPropSymbols = Object.getOwnPropertySymbols;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __propIsEnum = Object.prototype.propertyIsEnumerable;
7
+ var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
8
+ var __spreadValues = (a, b) => {
9
+ for (var prop in b || (b = {}))
10
+ if (__hasOwnProp.call(b, prop))
11
+ __defNormalProp(a, prop, b[prop]);
12
+ if (__getOwnPropSymbols)
13
+ for (var prop of __getOwnPropSymbols(b)) {
14
+ if (__propIsEnum.call(b, prop))
15
+ __defNormalProp(a, prop, b[prop]);
16
+ }
17
+ return a;
18
+ };
19
+ var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
20
+ import { updateForm, useForm, useExpand } from "@telia-ace/knowledge-widget-component-utilities";
21
+ import { createEventSubscriber, extendComponent } from "@telia-ace/knowledge-widget-core";
22
+ import { FeedbackType, DataType } from "@telia-ace/knowledge-widget-types-grid";
23
+ import { createReactComponent } from "@telia-ace/knowledge-widget-ui";
24
+ import * as clipboard from "clipboard-polyfill";
25
+ var useFeedback = (container, controller) => {
26
+ controller.actions.create("feedback", (input) => {
27
+ const type = input === "negative" ? FeedbackType.Negative : FeedbackType.Positive;
28
+ const { guide, submitButtonLabel = "Submit" } = controller.properties();
29
+ if (guide) {
30
+ const { connection, id, hasHandover } = guide;
31
+ controller.writeProperties({
32
+ feedbackGiven: input,
33
+ loading: hasHandover && type === FeedbackType.Negative
34
+ });
35
+ const { events } = container.get("$widget");
36
+ events.dispatch("tracking:feedback-given", {
37
+ guide,
38
+ categories: guide.categories,
39
+ feedbackType: type.toLowerCase()
40
+ });
41
+ return container.getAsync("dataClient").then((dataClient) => {
42
+ return dataClient.feedback(id, connection, type).then(() => {
43
+ if (hasHandover && type === FeedbackType.Negative) {
44
+ return dataClient.fetch(DataType.ContactMethods, { guideId: id }).then(({ contactMethods }) => {
45
+ return controller.actions.dispatch("handover", {
46
+ handoverContactMethods: contactMethods.map((cm) => __spreadProps(__spreadValues({}, cm), {
47
+ body: updateForm(cm, {
48
+ submit: submitButtonLabel
49
+ })
50
+ })),
51
+ loading: false
52
+ });
53
+ });
54
+ }
55
+ });
56
+ });
57
+ }
58
+ });
59
+ controller.actions.create("handover", (input) => {
60
+ return controller.writeProperties(__spreadProps(__spreadValues({}, input), { loading: false }));
61
+ });
62
+ };
63
+ const buildPlainText = ({ title, body }) => {
64
+ let processedHtml = "";
65
+ if (title && title.length) {
66
+ processedHtml = title.trim();
67
+ }
68
+ if (body && body.length) {
69
+ processedHtml = `${processedHtml.trim()}
70
+ ${body.trim()}`;
71
+ }
72
+ const div = document.createElement("div");
73
+ div.innerHTML = processedHtml;
74
+ const links = Array.from(div.getElementsByTagName("a"));
75
+ let plainText = div.innerText;
76
+ links.forEach((a) => {
77
+ plainText = plainText.replace(a.innerText, `[${a.href}] (${a.innerText})`);
78
+ });
79
+ return plainText;
80
+ };
81
+ const buildHtml = ({ title, body }) => {
82
+ let processedHtml = "";
83
+ if (title && title.length) {
84
+ processedHtml = `<h2>${title.trim()}</h2>`;
85
+ }
86
+ if (body && body.length) {
87
+ processedHtml = `${processedHtml.trim()}${body.trim()}`;
88
+ }
89
+ return processedHtml.trim();
90
+ };
91
+ const GuideComponent = (container) => {
92
+ const { events } = container.get("$widget");
93
+ const [subscribe, unsubscribe] = createEventSubscriber(events);
94
+ return createReactComponent(container, "guide", import("./guide.js"), (component) => {
95
+ const fetch = (params) => {
96
+ component.writeProperties({
97
+ loading: true,
98
+ error: void 0,
99
+ guide: void 0
100
+ });
101
+ component.actions.dispatch("fetch", { params });
102
+ };
103
+ component.actions.create("copy", (guide) => {
104
+ const item = new clipboard.ClipboardItem({
105
+ "text/html": new Blob([buildHtml(guide)], { type: "text/html" }),
106
+ "text/plain": new Blob([buildPlainText(guide)], { type: "text/plain" })
107
+ });
108
+ return clipboard.write([item]).then(() => {
109
+ events.dispatch("widget:menu-toggled", null);
110
+ });
111
+ });
112
+ component.actions.create("print", () => {
113
+ const elem = document.querySelector(".humany-guide .humany-paragraph");
114
+ const a = window.open("", "", "height=500, width=500");
115
+ events.dispatch("widget:menu-toggled", null);
116
+ if (elem && a) {
117
+ a.document.write(`<html><body>${elem.innerHTML}</body></html>`);
118
+ a.document.close();
119
+ a.print();
120
+ }
121
+ });
122
+ component.actions.create("back", (data, options) => {
123
+ if (options.preventDefault) {
124
+ return;
125
+ }
126
+ return container.getAsync("router").then((router) => {
127
+ router.goBack();
128
+ });
129
+ });
130
+ component.actions.create("fetch", ({ contactMethods = [], dialog = [], guide, error }) => {
131
+ if (error) {
132
+ return component.actions.dispatch("fetched", {
133
+ error,
134
+ guide: void 0,
135
+ contactMethods: [],
136
+ feedbackGiven: void 0,
137
+ handoverContactMethods: [],
138
+ showFeedback: false,
139
+ loading: true
140
+ });
141
+ }
142
+ const { showFeedback = true, submitButtonLabel = "Submit" } = component.properties();
143
+ const properties = {
144
+ showFeedback,
145
+ dialog,
146
+ guide,
147
+ feedbackGiven: void 0,
148
+ handoverContactMethods: [],
149
+ contactMethods: contactMethods.map((cm) => __spreadProps(__spreadValues({}, cm), {
150
+ body: updateForm(cm, { submit: submitButtonLabel })
151
+ }))
152
+ };
153
+ return component.actions.dispatch("fetched", __spreadProps(__spreadValues({}, properties), {
154
+ loading: true
155
+ }));
156
+ });
157
+ component.actions.create("fetched", (input) => {
158
+ return component.writeProperties(__spreadProps(__spreadValues({}, input), { loading: false }));
159
+ });
160
+ container.getAsync("router").then((router) => {
161
+ const { params } = router.getRouteData();
162
+ fetch(params);
163
+ });
164
+ subscribe("router:changed", (event, { current }) => {
165
+ fetch(current.routeData.params);
166
+ });
167
+ useFeedback(container, component);
168
+ useForm(container, component);
169
+ useExpand(component);
170
+ }).then(() => {
171
+ return extendComponent(container, "guide", (component) => {
172
+ component.actions.watch("guide.fetch", (input, next) => {
173
+ const {
174
+ params: { guide, connection }
175
+ } = input;
176
+ if (guide) {
177
+ return container.getAsync("dataClient").then((dataClient) => dataClient.fetch(DataType.Guide, { connection, guideId: guide })).then(next).catch((error) => {
178
+ if (error) {
179
+ return next(error);
180
+ }
181
+ });
182
+ }
183
+ return next(input);
184
+ });
185
+ });
186
+ }).then(() => {
187
+ unsubscribe();
188
+ });
189
+ };
190
+ export { GuideComponent as default };
191
+ //# sourceMappingURL=index.js.map
@@ -0,0 +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';\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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"}
File without changes
File without changes
File without changes
package/package.json CHANGED
@@ -1,37 +1,36 @@
1
1
  {
2
2
  "name": "@telia-ace/knowledge-widget-components-guide",
3
- "version": "1.0.6",
3
+ "version": "1.0.8",
4
4
  "description": "Guide component for ACE Knowledge Widgets.",
5
5
  "license": "SEE LICENSE IN LICENSE.txt",
6
6
  "author": "Telia Company AB",
7
7
  "keywords": [
8
8
  "telia"
9
9
  ],
10
- "main": "lib/index.js",
11
- "module": "lib-esm/index.js",
10
+ "module": "dist/index.js",
11
+ "types": "dist/index.d.ts",
12
12
  "files": [
13
13
  "LICENSE.txt",
14
14
  "README.md",
15
- "lib/",
16
- "lib-esm/"
15
+ "dist/"
17
16
  ],
18
17
  "publishConfig": {
19
18
  "access": "public"
20
19
  },
21
20
  "scripts": {
22
- "clean": "cleandir lib && cleandir lib-esm",
23
- "compile": "tsc -p tsconfig.cjs.json && tsc -p tsconfig.esm.json"
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
- "@telia-ace/knowledge-widget-adapters": "^1.0.13",
29
- "@telia-ace/knowledge-widget-component-utilities": "^1.0.6",
30
- "@telia-ace/knowledge-widget-core": "^1.0.6",
31
- "@telia-ace/knowledge-widget-types-grid": "^1.0.13",
32
- "@telia-ace/knowledge-widget-ui": "^1.0.10",
33
- "@telia-ace/widget-forms": "^1.0.8",
34
- "@telia-ace/widget-routing": "^1.0.5",
27
+ "@telia-ace/knowledge-widget-adapters": "^1.0.14",
28
+ "@telia-ace/knowledge-widget-component-utilities": "^1.0.8",
29
+ "@telia-ace/knowledge-widget-core": "^1.0.7",
30
+ "@telia-ace/knowledge-widget-types-grid": "^1.0.14",
31
+ "@telia-ace/knowledge-widget-ui": "^1.0.11",
32
+ "@telia-ace/widget-forms": "^1.0.9",
33
+ "@telia-ace/widget-routing": "^1.0.6",
35
34
  "@telia-ace/widget-utilities": "^1.0.1",
36
35
  "@webprovisions/platform": "^1.1.2",
37
36
  "clipboard-polyfill": "3.0.2"
@@ -46,5 +45,5 @@
46
45
  "@types/react-dom": "^16.8.0",
47
46
  "@types/styled-components": "^5.1.7"
48
47
  },
49
- "gitHead": "141db586e3989e54f2671aa2079c62a250a00557"
48
+ "gitHead": "15dba08c1ba1c3c117353e50a2586be05a966288"
50
49
  }
@@ -1,10 +0,0 @@
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,75 +0,0 @@
1
- "use strict";
2
- var __makeTemplateObject = (this && this.__makeTemplateObject) || function (cooked, raw) {
3
- if (Object.defineProperty) { Object.defineProperty(cooked, "raw", { value: raw }); } else { cooked.raw = raw; }
4
- return cooked;
5
- };
6
- var __assign = (this && this.__assign) || function () {
7
- __assign = Object.assign || function(t) {
8
- for (var s, i = 1, n = arguments.length; i < n; i++) {
9
- s = arguments[i];
10
- for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
11
- t[p] = s[p];
12
- }
13
- return t;
14
- };
15
- return __assign.apply(this, arguments);
16
- };
17
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
18
- if (k2 === undefined) k2 = k;
19
- var desc = Object.getOwnPropertyDescriptor(m, k);
20
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
21
- desc = { enumerable: true, get: function() { return m[k]; } };
22
- }
23
- Object.defineProperty(o, k2, desc);
24
- }) : (function(o, m, k, k2) {
25
- if (k2 === undefined) k2 = k;
26
- o[k2] = m[k];
27
- }));
28
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
29
- Object.defineProperty(o, "default", { enumerable: true, value: v });
30
- }) : function(o, v) {
31
- o["default"] = v;
32
- });
33
- var __importStar = (this && this.__importStar) || function (mod) {
34
- if (mod && mod.__esModule) return mod;
35
- var result = {};
36
- if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
37
- __setModuleDefault(result, mod);
38
- return result;
39
- };
40
- Object.defineProperty(exports, "__esModule", { value: true });
41
- var knowledge_widget_ui_1 = require("@telia-ace/knowledge-widget-ui");
42
- var widget_utilities_1 = require("@telia-ace/widget-utilities");
43
- var react_1 = __importStar(require("react"));
44
- var styled_components_1 = __importStar(require("styled-components"));
45
- var AnswerVersionPicker = function (_a) {
46
- var className = _a.className, defaultAnswerVersionLabel = _a.defaultAnswerVersionLabel, _b = _a.guide, selectedPerspective = _b.perspective, guidePerspectives = _b.perspectives, _c = _a.availablePerspectives, availablePerspectives = _c === void 0 ? [] : _c;
47
- var _d = (0, knowledge_widget_ui_1.useRouteData)(), name = _d.name, params = _d.params;
48
- var perspectives = (0, react_1.useMemo)(function () {
49
- if (!guidePerspectives || !availablePerspectives.length) {
50
- return [];
51
- }
52
- return availablePerspectives
53
- .filter(function (_a) {
54
- var name = _a.name;
55
- return !!guidePerspectives[name];
56
- })
57
- .map(function (_a) {
58
- var name = _a.name, title = _a.title;
59
- return { label: title, connection: guidePerspectives[name] };
60
- });
61
- }, [guidePerspectives, availablePerspectives]);
62
- return (react_1.default.createElement(StyledList, { className: (0, widget_utilities_1.appendClassNames)(className, 'humany-guide-answer-version-picker'), items: perspectives, renderItem: function (perspective) {
63
- var label = perspective.label === 'Default' ? defaultAnswerVersionLabel : perspective.label;
64
- var selected = selectedPerspective === perspective.connection;
65
- var isRoot = selected && (!params.connection || selectedPerspective === params.connection);
66
- return (react_1.default.createElement("li", { key: perspective.connection, "data-version": perspective.connection },
67
- react_1.default.createElement(VersionLink, { key: perspective.connection, forwardedAs: isRoot ? 'span' : undefined, text: label, routeName: name, selected: selected, "aria-label": label, title: label, params: __assign(__assign({}, params), { connection: perspective.connection }) })));
68
- } }));
69
- };
70
- exports.default = AnswerVersionPicker;
71
- var StyledList = (0, styled_components_1.default)(knowledge_widget_ui_1.List)(templateObject_1 || (templateObject_1 = __makeTemplateObject(["\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(", " * 2) 0 0;\n }\n\n li > span {\n cursor: default;\n }\n"], ["\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(", " * 2) 0 0;\n }\n\n li > span {\n cursor: default;\n }\n"])), function (p) { var _a; return (_a = p.theme.sizes) === null || _a === void 0 ? void 0 : _a.small; });
72
- var VersionLink = (0, styled_components_1.default)(knowledge_widget_ui_1.TextLink)(templateObject_3 || (templateObject_3 = __makeTemplateObject(["\n font-weight: 300;\n color: ", ";\n text-decoration: none;\n\n ", "\n\n &:focus {\n ", ";\n }\n"], ["\n font-weight: 300;\n color: ", ";\n text-decoration: none;\n\n ", "\n\n &:focus {\n ", ";\n }\n"])), function (p) { var _a; return (_a = p.theme.colors) === null || _a === void 0 ? void 0 : _a.text; }, function (p) {
73
- return p.selected && (0, styled_components_1.css)(templateObject_2 || (templateObject_2 = __makeTemplateObject(["\n font-weight: bold;\n text-decoration: underline;\n "], ["\n font-weight: bold;\n text-decoration: underline;\n "])));
74
- }, function (p) { var _a; return ((_a = p.theme.accessibility) === null || _a === void 0 ? void 0 : _a.isTabbing) && knowledge_widget_ui_1.paddedBorderTabStyle; });
75
- var templateObject_1, templateObject_2, templateObject_3;
@@ -1,8 +0,0 @@
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;
package/lib/categories.js DELETED
@@ -1,80 +0,0 @@
1
- "use strict";
2
- var __makeTemplateObject = (this && this.__makeTemplateObject) || function (cooked, raw) {
3
- if (Object.defineProperty) { Object.defineProperty(cooked, "raw", { value: raw }); } else { cooked.raw = raw; }
4
- return cooked;
5
- };
6
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
7
- if (k2 === undefined) k2 = k;
8
- var desc = Object.getOwnPropertyDescriptor(m, k);
9
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
10
- desc = { enumerable: true, get: function() { return m[k]; } };
11
- }
12
- Object.defineProperty(o, k2, desc);
13
- }) : (function(o, m, k, k2) {
14
- if (k2 === undefined) k2 = k;
15
- o[k2] = m[k];
16
- }));
17
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
18
- Object.defineProperty(o, "default", { enumerable: true, value: v });
19
- }) : function(o, v) {
20
- o["default"] = v;
21
- });
22
- var __importStar = (this && this.__importStar) || function (mod) {
23
- if (mod && mod.__esModule) return mod;
24
- var result = {};
25
- if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
26
- __setModuleDefault(result, mod);
27
- return result;
28
- };
29
- var __read = (this && this.__read) || function (o, n) {
30
- var m = typeof Symbol === "function" && o[Symbol.iterator];
31
- if (!m) return o;
32
- var i = m.call(o), r, ar = [], e;
33
- try {
34
- while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
35
- }
36
- catch (error) { e = { error: error }; }
37
- finally {
38
- try {
39
- if (r && !r.done && (m = i["return"])) m.call(i);
40
- }
41
- finally { if (e) throw e.error; }
42
- }
43
- return ar;
44
- };
45
- var __importDefault = (this && this.__importDefault) || function (mod) {
46
- return (mod && mod.__esModule) ? mod : { "default": mod };
47
- };
48
- Object.defineProperty(exports, "__esModule", { value: true });
49
- var knowledge_widget_core_1 = require("@telia-ace/knowledge-widget-core");
50
- var knowledge_widget_ui_1 = require("@telia-ace/knowledge-widget-ui");
51
- var widget_utilities_1 = require("@telia-ace/widget-utilities");
52
- var react_1 = __importStar(require("react"));
53
- var styled_components_1 = __importDefault(require("styled-components"));
54
- var Categories = function (_a) {
55
- var _b = _a.guide.categories, categories = _b === void 0 ? [] : _b, _c = _a.toolbar.picker, picker = _c === void 0 ? knowledge_widget_core_1.PickerTypes.NONE : _c;
56
- var _d = __read((0, react_1.useState)([]), 2), trail = _d[0], setTrail = _d[1];
57
- var container = (0, knowledge_widget_ui_1.useContainer)();
58
- (0, react_1.useEffect)(function () {
59
- (0, widget_utilities_1.buildCategoryTrail)('index', categories.map(function (id) { return id.toString(); }), container).then(function (result) {
60
- setTrail(result);
61
- });
62
- }, [categories]);
63
- if (!trail.length) {
64
- return null;
65
- }
66
- return (react_1.default.createElement(knowledge_widget_ui_1.Tooltip, { className: "humany-guide-category-tooltip", sticky: picker === knowledge_widget_core_1.PickerTypes.DRAWER, content: react_1.default.createElement(react_1.default.Fragment, null, trail.map(function (segments) {
67
- return (react_1.default.createElement(CategoryTrail, { className: "humany-guide-category-trail", key: segments.map(function (c) { return c.id; }).join('.') }, segments.map(function (category, index) {
68
- return (react_1.default.createElement(knowledge_widget_ui_1.Text, { className: "humany-guide-category-trail-segment", key: category.id },
69
- category.symbol && index === 0 && (react_1.default.createElement(knowledge_widget_ui_1.SymbolBadge, { size: 14, symbol: category.symbol })),
70
- category.title,
71
- index !== segments.length - 1 && (react_1.default.createElement(CategorySeparator, { className: "humany-category-separator" }, "/"))));
72
- })));
73
- })) }, picker === knowledge_widget_core_1.PickerTypes.DRAWER ? (react_1.default.createElement(knowledge_widget_ui_1.StyledListButton, { className: "humany-guide-category-tooltip-button", "data-has-label": "false", "data-has-symbol": "true" },
74
- react_1.default.createElement(CategoriesSymbolBadge, { size: 19, symbol: { type: 'Svg', content: 'information' } }))) : (react_1.default.createElement(CategoriesSymbolBadge, { size: 19, symbol: { type: 'Svg', content: 'information' } }))));
75
- };
76
- exports.default = Categories;
77
- var CategoryTrail = styled_components_1.default.div(templateObject_1 || (templateObject_1 = __makeTemplateObject(["\n i,\n svg {\n margin: 0 ", " 0 0;\n }\n\n &:not(:last-child) {\n margin: 0 0 ", ";\n }\n"], ["\n i,\n svg {\n margin: 0 ", " 0 0;\n }\n\n &:not(:last-child) {\n margin: 0 0 ", ";\n }\n"])), function (p) { var _a; return (_a = p.theme.sizes) === null || _a === void 0 ? void 0 : _a.small; }, function (p) { var _a; return (_a = p.theme.sizes) === null || _a === void 0 ? void 0 : _a.small; });
78
- var CategorySeparator = (0, styled_components_1.default)(knowledge_widget_ui_1.Text)(templateObject_2 || (templateObject_2 = __makeTemplateObject(["\n margin: 0 ", ";\n"], ["\n margin: 0 ", ";\n"])), function (p) { var _a; return (_a = p.theme.sizes) === null || _a === void 0 ? void 0 : _a.small; });
79
- var CategoriesSymbolBadge = (0, styled_components_1.default)(knowledge_widget_ui_1.SymbolBadge)(templateObject_3 || (templateObject_3 = __makeTemplateObject(["\n display: block;\n"], ["\n display: block;\n"])));
80
- var templateObject_1, templateObject_2, templateObject_3;
package/lib/feedback.d.ts DELETED
@@ -1,7 +0,0 @@
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;