@telia-ace/knowledge-widget-components-search 1.0.46-next.8 → 1.0.46
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js
CHANGED
|
@@ -41,7 +41,7 @@ const z = (a) => !!a.guideCategoryId || a.tagIds.length > 0, B = (a, t) => {
|
|
|
41
41
|
return t.sort((i, l) => i.title > l.title ? 1 : -1), t.forEach((i) => {
|
|
42
42
|
i.items && (i.items = w(i.items));
|
|
43
43
|
}), t;
|
|
44
|
-
}, J = (a) => M(a, "search", import("./search.
|
|
44
|
+
}, J = (a) => M(a, "search", import("./search.5a86af51.js"), (t) => {
|
|
45
45
|
const { events: i } = a.get("$widget"), [l, y] = G(i), f = (e) => m(void 0, null, function* () {
|
|
46
46
|
const s = e.tag ? e.tag.split(",") : [], r = e.guideCategory, o = e.phrase || "", { activeFilterBadges: c } = t.properties(), n = yield u({}), g = yield p({
|
|
47
47
|
tagId: e.tag,
|
|
@@ -9,7 +9,7 @@ var re = (e, t, n) => t in e ? Se(e, t, { enumerable: !0, configurable: !0, writ
|
|
|
9
9
|
for (var n of Q(t))
|
|
10
10
|
ie.call(t, n) && re(e, n, t[n]);
|
|
11
11
|
return e;
|
|
12
|
-
},
|
|
12
|
+
}, O = (e, t) => ve(e, qe(t));
|
|
13
13
|
var G = (e, t) => {
|
|
14
14
|
var n = {};
|
|
15
15
|
for (var r in e)
|
|
@@ -21,7 +21,7 @@ var G = (e, t) => {
|
|
|
21
21
|
};
|
|
22
22
|
import { css as P } from "@emotion/react";
|
|
23
23
|
import z from "@emotion/styled";
|
|
24
|
-
import { useProperties as W, useDispatch as U, useRouteData as fe, useEventListener as J, useKeyPress as H, Tooltip as ze, borderTabStyle as R, Text as me, Link as ge, SymbolBadge as Y, ItemTree as Le, useScroll as Fe, useContainer as he, Loader as De, contentBox as pe, useDebounce as Be, usePrevious as ae, useChildren as Ne, useWidgetEvent as
|
|
24
|
+
import { useProperties as W, useDispatch as U, useRouteData as fe, useEventListener as J, useKeyPress as H, Tooltip as ze, borderTabStyle as R, Text as me, Link as ge, SymbolBadge as Y, ItemTree as Le, useScroll as Fe, useContainer as he, Loader as De, contentBox as pe, useDebounce as Be, usePrevious as ae, useChildren as Ne, useWidgetEvent as Oe, useTransitionEnd as Te, convertToStringAttributes as Ke, Input as Pe, Button as ye } from "@telia-ace/knowledge-widget-ui";
|
|
25
25
|
import { Component as We } from "@telia-ace/widget-types-grid";
|
|
26
26
|
import { appendClassNames as V, deepClone as je, categoryTrail as Me } from "@telia-ace/widget-utilities";
|
|
27
27
|
import g, { useState as D, useCallback as S, useRef as ee, useEffect as K, useMemo as Qe } from "react";
|
|
@@ -55,7 +55,7 @@ const Xe = (s) => {
|
|
|
55
55
|
e,
|
|
56
56
|
/* @__PURE__ */ g.createElement(
|
|
57
57
|
ge,
|
|
58
|
-
|
|
58
|
+
O(F({}, u), {
|
|
59
59
|
ref: k,
|
|
60
60
|
tabIndex: 0,
|
|
61
61
|
onFocus: () => {
|
|
@@ -163,7 +163,7 @@ const Xe = (s) => {
|
|
|
163
163
|
filterType: "guideCategory",
|
|
164
164
|
handleClick: o,
|
|
165
165
|
deleteAriaLabel: s,
|
|
166
|
-
params:
|
|
166
|
+
params: O(F({}, $), {
|
|
167
167
|
guideCategory: void 0
|
|
168
168
|
})
|
|
169
169
|
}
|
|
@@ -179,7 +179,7 @@ const Xe = (s) => {
|
|
|
179
179
|
filterType: "tag",
|
|
180
180
|
handleClick: (p) => o(p, "tag", i.id),
|
|
181
181
|
deleteAriaLabel: s,
|
|
182
|
-
params:
|
|
182
|
+
params: O(F({}, $), {
|
|
183
183
|
tag: h
|
|
184
184
|
})
|
|
185
185
|
}
|
|
@@ -272,16 +272,16 @@ const Xe = (s) => {
|
|
|
272
272
|
}
|
|
273
273
|
order: 1;
|
|
274
274
|
}
|
|
275
|
-
`,
|
|
275
|
+
`, T = (e, t) => !t || !e ? !0 : e.toLowerCase().indexOf(t.toLowerCase()) > -1, Je = (e = [], t, n) => {
|
|
276
276
|
if (!n)
|
|
277
277
|
return e;
|
|
278
278
|
const r = je(e);
|
|
279
279
|
if (t === "tag")
|
|
280
|
-
return r.filter((s) =>
|
|
280
|
+
return r.filter((s) => T(s.title, n));
|
|
281
281
|
const l = Ye(r, n);
|
|
282
282
|
return be(r, (s) => l.indexOf(s.id) > -1);
|
|
283
283
|
}, be = (e, t) => e.filter((n) => (n.items && n.items.length && (n.items = be(n.items, t)), t(n))), Ye = (e, t) => {
|
|
284
|
-
const r = ke(e).filter((u) =>
|
|
284
|
+
const r = ke(e).filter((u) => T(u.title, t)).map((u) => u.id);
|
|
285
285
|
let l = [];
|
|
286
286
|
return r.forEach((u) => {
|
|
287
287
|
const s = Me(u, e);
|
|
@@ -341,8 +341,8 @@ const Xe = (s) => {
|
|
|
341
341
|
de,
|
|
342
342
|
{
|
|
343
343
|
autoSelect: A && u && o.id === k,
|
|
344
|
-
disabled: !
|
|
345
|
-
tabIndex:
|
|
344
|
+
disabled: !T(o.title, e),
|
|
345
|
+
tabIndex: T(o.title, e) ? 0 : -1,
|
|
346
346
|
onKeyDown: (c) => {
|
|
347
347
|
c.key === "Enter" && y(o, m);
|
|
348
348
|
},
|
|
@@ -357,7 +357,7 @@ const Xe = (s) => {
|
|
|
357
357
|
{
|
|
358
358
|
title: o.title,
|
|
359
359
|
phrase: e,
|
|
360
|
-
matches:
|
|
360
|
+
matches: T(o.title, e)
|
|
361
361
|
}
|
|
362
362
|
)
|
|
363
363
|
)
|
|
@@ -381,7 +381,7 @@ const Xe = (s) => {
|
|
|
381
381
|
symbol: "#",
|
|
382
382
|
title: o.title,
|
|
383
383
|
phrase: e,
|
|
384
|
-
matches:
|
|
384
|
+
matches: T(o.title, e)
|
|
385
385
|
}
|
|
386
386
|
)
|
|
387
387
|
)
|
|
@@ -673,7 +673,7 @@ const Xe = (s) => {
|
|
|
673
673
|
guideCategory: L && !!x,
|
|
674
674
|
tag: Ie && !!I
|
|
675
675
|
});
|
|
676
|
-
}, [o, a]),
|
|
676
|
+
}, [o, a]), Oe(
|
|
677
677
|
"router:changed",
|
|
678
678
|
() => {
|
|
679
679
|
if (v) {
|
|
@@ -723,7 +723,7 @@ const Xe = (s) => {
|
|
|
723
723
|
}
|
|
724
724
|
);
|
|
725
725
|
};
|
|
726
|
-
|
|
726
|
+
Te(we);
|
|
727
727
|
const oe = u && (p.guideCategory || p.tag || i), Ae = m ? Ke({
|
|
728
728
|
role: "combobox",
|
|
729
729
|
"aria-autocomplete": "list",
|
|
@@ -732,7 +732,7 @@ const Xe = (s) => {
|
|
|
732
732
|
}) : {};
|
|
733
733
|
return /* @__PURE__ */ g.createElement(
|
|
734
734
|
st,
|
|
735
|
-
|
|
735
|
+
O(F({}, t), {
|
|
736
736
|
ref: N,
|
|
737
737
|
role: s,
|
|
738
738
|
className: V(e, "humany-search"),
|
|
@@ -766,7 +766,8 @@ const Xe = (s) => {
|
|
|
766
766
|
ne("inside"),
|
|
767
767
|
/* @__PURE__ */ g.createElement(
|
|
768
768
|
Pe,
|
|
769
|
-
|
|
769
|
+
O(F({
|
|
770
|
+
crossOrigin: void 0,
|
|
770
771
|
type: "search",
|
|
771
772
|
"aria-label": f
|
|
772
773
|
}, Ae), {
|
|
@@ -941,4 +942,4 @@ const Xe = (s) => {
|
|
|
941
942
|
export {
|
|
942
943
|
pt as default
|
|
943
944
|
};
|
|
944
|
-
//# sourceMappingURL=search.
|
|
945
|
+
//# sourceMappingURL=search.5a86af51.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"search.cde1b7c0.js","sources":["../src/filter-badges.tsx","../src/utils.ts","../src/quick-filter-item-list.tsx","../src/quick-filter.tsx","../src/use-search.ts","../src/search.tsx"],"sourcesContent":["import { css } from '@emotion/react';\nimport styled from '@emotion/styled';\nimport {\n borderTabStyle,\n Link,\n SymbolBadge,\n Text,\n Tooltip,\n useDispatch,\n useEventListener,\n useKeyPress,\n useProperties,\n useRouteData,\n} from '@telia-ace/knowledge-widget-ui';\nimport { appendClassNames } from '@telia-ace/widget-utilities';\nimport React, { useCallback, useRef, useState } from 'react';\nimport { SearchComponentProps } from './search-component';\n\nconst FilterBadge: React.FC<any> = ({\n text,\n className,\n filterType,\n handleClick,\n deleteAriaLabel = '',\n ...p\n}) => {\n const ref = useRef<HTMLAnchorElement>();\n\n const [isFocused, setIsFocused] = useState(document.activeElement === ref.current);\n\n return (\n <Text\n className={appendClassNames(\n className,\n 'humany-filter-badge',\n isFocused ? 'humany-filter-badge-focused' : ''\n )}\n onKeyDown={(e) => {\n if (e.key === 'Enter') {\n handleClick(e, filterType);\n }\n }}\n >\n {text}\n <Link\n {...p}\n ref={ref}\n tabIndex={0}\n onFocus={() => {\n setIsFocused(true);\n }}\n onBlur={() => {\n setIsFocused(false);\n }}\n role=\"button\"\n aria-label={deleteAriaLabel.replace('{{item}}', text)}\n onClick={(e) => handleClick(e, filterType)}\n >\n <SymbolBadge size={13} symbol={{ type: 'Svg', content: 'close' }} />\n </Link>\n </Text>\n );\n};\n\ntype Props = {\n inputHasFocus: boolean;\n searchContainerRef: HTMLElement | null;\n showGuideCategory: boolean;\n showTag: boolean;\n position: 'inside' | 'below';\n};\nconst FilterBadges: React.FC<Props> = ({\n inputHasFocus,\n searchContainerRef,\n showTag,\n showGuideCategory,\n position,\n}) => {\n const { activeFilterBadges, deleteFilterBadgeAriaLabel = '' } =\n useProperties<SearchComponentProps>();\n\n const dispatch = useDispatch();\n const { name, params } = useRouteData();\n const [isNavigatingWithKeyBoard, setIsNavigatingWithKeyboard] = useState(false);\n\n const onKeyDown = useCallback((event: KeyboardEvent) => {\n const { key } = event;\n\n if (['ArrowLeft', 'ArrowRight'].indexOf(key) === -1) {\n setIsNavigatingWithKeyboard(false);\n }\n }, []);\n\n useEventListener('keydown', onKeyDown, window);\n\n useEventListener('click', onKeyDown, window);\n\n const { guideCategory, tag, tooltip } = activeFilterBadges || {};\n\n const getFocusedFilterBadge = (container: HTMLElement) => {\n const badges = container.querySelectorAll(\n '.humany-filter-badge > a'\n ) as NodeListOf<HTMLElement>;\n return {\n badges,\n index: Array.from(badges).findIndex((e) => document.activeElement === e),\n };\n };\n\n const handleFilterBadgeClick = useCallback(\n (event: React.MouseEvent | React.KeyboardEvent, filterType: string, id?: string) => {\n event.preventDefault();\n dispatch('quick-filter:remove', { types: [filterType], ids: [id] });\n },\n [dispatch]\n );\n\n const keyboardNavigation = (\n direction: 'left' | 'right',\n inputElem: HTMLInputElement | null\n ) => {\n if (!searchContainerRef) {\n return;\n }\n const { badges, index: currentFocusedIndex } = getFocusedFilterBadge(searchContainerRef);\n\n if (badges.length) {\n let toFocus: HTMLElement | null = null;\n\n if (direction === 'left') {\n if (currentFocusedIndex === -1) {\n // if no badge is focused and direction is left\n // focus last badge\n toFocus = badges.item(badges.length - 1);\n } else if (currentFocusedIndex > 0) {\n // if there are more badges to the left, go one step back\n // do nothing if already focusing the most left badge\n toFocus = badges.item(currentFocusedIndex - 1);\n }\n } else if (direction === 'right') {\n if (currentFocusedIndex === badges.length - 1) {\n // if currently focusing the last badge, move focus to search input\n inputElem && inputElem.focus();\n } else if (badges.item(currentFocusedIndex + 1)) {\n toFocus = badges.item(currentFocusedIndex + 1);\n }\n }\n\n if (toFocus) {\n toFocus.focus();\n setIsNavigatingWithKeyboard(true);\n }\n }\n };\n\n useKeyPress(\n 'ArrowLeft',\n useCallback(() => {\n if (!searchContainerRef) {\n return;\n }\n const { index: focusedBadgeIndex } = getFocusedFilterBadge(searchContainerRef);\n\n if (inputHasFocus || focusedBadgeIndex > -1) {\n const inputElem: HTMLInputElement | null =\n searchContainerRef.querySelector('[data-type=\"search\"]');\n const isAtBeginningOfInput =\n inputElem && inputElem.selectionStart !== null && inputElem.selectionStart <= 0;\n const isFocusingAFilterBadge = focusedBadgeIndex > -1;\n\n if (isAtBeginningOfInput || isFocusingAFilterBadge) {\n keyboardNavigation('left', inputElem);\n }\n }\n }, [inputHasFocus, searchContainerRef])\n );\n\n useKeyPress(\n 'ArrowRight',\n useCallback(() => {\n if (!searchContainerRef) {\n return;\n }\n const { index: focusedBadgeIndex } = getFocusedFilterBadge(searchContainerRef);\n\n if (focusedBadgeIndex > -1) {\n const inputElem: HTMLInputElement | null =\n searchContainerRef.querySelector('[data-type=\"search\"]');\n const isFocusingAFilterBadge = focusedBadgeIndex > -1;\n\n if (isFocusingAFilterBadge) {\n keyboardNavigation('right', inputElem);\n }\n }\n }, [searchContainerRef])\n );\n\n useKeyPress(\n 'Backspace',\n useCallback(\n (event: any) => {\n if (!searchContainerRef) {\n return;\n }\n let filtersToRemove: string[] = [];\n const { index: focusedBadgeIndex } = getFocusedFilterBadge(searchContainerRef);\n\n const inputElem: HTMLInputElement | null =\n searchContainerRef.querySelector('[data-type=\"search\"]');\n const isFocusingAFilterBadge = focusedBadgeIndex > -1;\n\n if (isFocusingAFilterBadge) {\n if (focusedBadgeIndex === 0) {\n if (showGuideCategory) {\n filtersToRemove = ['guideCategory'];\n } else if (showTag) {\n filtersToRemove = ['tag'];\n }\n } else if (focusedBadgeIndex === 1) {\n filtersToRemove = ['tag'];\n }\n } else {\n const isFocusingInput = document.activeElement === inputElem;\n const isAtBeginningOfInput =\n inputElem &&\n inputElem.selectionStart !== null &&\n inputElem.selectionStart <= 0;\n\n if (isAtBeginningOfInput && isFocusingInput) {\n if (!!activeFilterBadges?.tag.length) {\n filtersToRemove = ['tag'];\n } else if (activeFilterBadges?.guideCategory) {\n filtersToRemove = ['guideCategory'];\n }\n }\n }\n\n if (filtersToRemove.length > 0) {\n event.preventDefault();\n let id: string | undefined = undefined;\n\n if (filtersToRemove.includes('tag')) {\n const lastTag = activeFilterBadges?.tag.at(-1);\n id = lastTag?.id;\n }\n\n dispatch('quick-filter:remove', { types: filtersToRemove, ids: [id] });\n }\n },\n [searchContainerRef, activeFilterBadges, showTag, showGuideCategory, dispatch]\n )\n );\n\n const renderBadge = useCallback(\n (type: 'guideCategory' | 'tag') => {\n if (type === 'guideCategory' && guideCategory && showGuideCategory) {\n return (\n <StyledFilterBadge\n text={`@${guideCategory.title}`}\n routeName={name}\n filterType=\"guideCategory\"\n handleClick={handleFilterBadgeClick}\n deleteAriaLabel={deleteFilterBadgeAriaLabel}\n params={{\n ...params,\n guideCategory: undefined,\n }}\n />\n );\n }\n if (type === 'tag' && !!tag?.length && showTag) {\n return tag.map((tagItem) => {\n const excludedIds = tag.reduce<string[]>((acc, t) => {\n if (t.id !== tagItem.id) {\n acc.push(t.id);\n }\n return acc;\n }, []);\n\n return (\n <StyledFilterBadge\n key={tagItem.id}\n className=\"humany-filter-badge\"\n text={`#${tagItem.title}`}\n routeName={name}\n filterType=\"tag\"\n handleClick={(event: any) =>\n handleFilterBadgeClick(event, 'tag', tagItem.id)\n }\n deleteAriaLabel={deleteFilterBadgeAriaLabel}\n params={{\n ...params,\n tag: excludedIds,\n }}\n />\n );\n });\n }\n return null;\n },\n [\n guideCategory,\n tag,\n name,\n params,\n showGuideCategory,\n showTag,\n isNavigatingWithKeyBoard,\n handleFilterBadgeClick,\n ]\n );\n\n if (!guideCategory && !tag) {\n return null;\n }\n\n return (\n <Wrapper className=\"humany-filter-badges\" position={position}>\n {guideCategory && tooltip ? (\n <Tooltip content={<>{tooltip}</>} sticky={false}>\n {renderBadge('guideCategory')}\n </Tooltip>\n ) : (\n renderBadge('guideCategory')\n )}\n {tag && renderBadge('tag')}\n </Wrapper>\n );\n};\n\nexport default FilterBadges;\n\nconst Wrapper = styled.div<{ position: 'inside' | 'below' }>`\n display: flex;\n align-items: center;\n flex-wrap: wrap;\n\n ${(p) =>\n p.position === 'inside'\n ? css`\n &:not(:first-child) {\n margin: 0 0 0 ${p.theme.sizes?.normal};\n }\n `\n : css`\n margin: ${p.theme.sizes?.small} 0 0 0;\n span:first-child {\n margin-left: 0;\n }\n `}\n`;\n\nconst StyledFilterBadge = styled(FilterBadge)`\n display: flex;\n align-items: center;\n padding: ${(p) => `${p.theme.sizes?.small} calc(${p.theme.sizes?.normal}/2) `};\n background-color: ${(p) => p.theme.colors?.primary};\n border-radius: ${(p) => p.theme.borderRadius};\n font-weight: 300;\n font-size: ${(p) => p.theme.fonts?.normal};\n font-style: italic;\n color: #ffffff;\n text-decoration: none;\n white-space: nowrap;\n\n margin: calc(${(p) => p.theme.sizes?.small} / 2);\n\n &.humany-filter-badge-focused:focus-within {\n ${borderTabStyle}\n background-color: transparent;\n\n svg {\n path {\n stroke: ${(p) => p.theme.colors?.primary};\n }\n }\n a {\n outline: none;\n }\n }\n\n svg {\n width: 17px;\n height: 11px;\n margin: 1px 0 0 ${(p) => p.theme.sizes?.small};\n path {\n stroke: #ffffff;\n stroke-width: 2px;\n }\n order: 1;\n }\n`;\n","import { Category, Tag } from '@telia-ace/knowledge-widget-core';\nimport { categoryTrail, deepClone } from '@telia-ace/widget-utilities';\n\nexport const match = (title: string, phrase: string) => {\n if (!phrase || !title) {\n return true;\n }\n\n return !!(title.toLowerCase().indexOf(phrase.toLowerCase()) > -1);\n};\n\nexport const filterItems = (\n items: (Tag | Category)[] = [],\n type: 'tag' | 'guideCategory',\n phrase: string\n): any[] => {\n if (!phrase) {\n return items;\n }\n\n const cloned = deepClone(items);\n\n if (type === 'tag') {\n return cloned.filter((i: Tag) => match(i.title, phrase));\n }\n\n const matchTrail = buildMatchTrail(cloned, phrase);\n const filtered = recursiveFilter(cloned, (c: Category) => matchTrail.indexOf(c.id) > -1);\n\n return filtered;\n};\n\nconst recursiveFilter = (items: Category[], fn: (c: Category) => boolean) => {\n return items.filter((i: Category) => {\n if (i.items && i.items.length) {\n i.items = recursiveFilter(i.items, fn);\n }\n\n return fn(i);\n });\n};\n\nconst buildMatchTrail = (categories: Category[], phrase: string) => {\n const flattened = flatten(categories);\n const matching = flattened.filter((c) => match(c.title, phrase)).map((c) => c.id);\n\n let res: string[] = [];\n\n matching.forEach((id) => {\n const trail = categoryTrail(id, categories);\n\n res = res.concat(trail);\n });\n\n return res;\n};\n\nconst flatten = (categories: Category[]): Category[] => {\n let result: Category[] = [];\n\n categories.forEach((category) => {\n result.push(category);\n\n if (Array.isArray(category.items)) {\n result = result.concat(flatten(category.items));\n }\n });\n\n return result;\n};\n","import { css, Theme } from '@emotion/react';\nimport styled from '@emotion/styled';\nimport { Category, Tag } from '@telia-ace/knowledge-widget-core';\nimport {\n ItemTree,\n Link,\n Text,\n useDispatch,\n useEventListener,\n useProperties,\n} from '@telia-ace/knowledge-widget-ui';\nimport React, { useCallback, useEffect, useState } from 'react';\nimport { SearchComponentProps } from './search-component';\nimport { filterItems, match } from './utils';\n\ntype Props = {\n filterPhrase: string;\n items: Category[] | Tag[];\n filterType: 'guideCategory' | 'tag';\n searchContainer: HTMLElement | null;\n filterContainer: HTMLElement | null;\n inputHasFocus: boolean;\n};\n\nexport const getFocusedIndex = (elem: HTMLElement) => {\n const anchors = Array.from(elem?.getElementsByTagName('A') || []).filter(\n (a) => a.getAttribute('disabled') === null\n ) as HTMLAnchorElement[];\n return {\n anchors,\n focusedIndex: anchors.findIndex((e) => document.activeElement === e),\n };\n};\n\nconst getInputElem = (searchContainerRef: HTMLElement | null) => {\n return searchContainerRef\n ? (searchContainerRef.querySelector(\n '[data-type=\"search\"], input[type=\"search\"]'\n ) as HTMLElement | null)\n : null;\n};\n\nexport const focusInput = (searchContainerRef: HTMLElement | null) => {\n if (!searchContainerRef) {\n return;\n }\n const inputElem = getInputElem(searchContainerRef);\n if (inputElem) {\n inputElem.focus();\n }\n};\n\nconst QuickFilterItemList: React.FC<Props> = ({\n filterPhrase,\n items: rawItems,\n filterType,\n filterContainer,\n searchContainer,\n inputHasFocus,\n}) => {\n const [items, setItems] = useState<Category[] | Tag[]>(rawItems || []);\n const [first, setFirst] = useState<string | null>(null);\n const dispatch = useDispatch();\n const { activeFilterBadges, quickFilters } = useProperties<SearchComponentProps>();\n const autoSelect =\n (typeof quickFilters === 'object' && !!quickFilters.autoSelect) ||\n (typeof quickFilters === 'boolean' && !!quickFilters);\n\n useEffect(() => {\n setItems(filterItems(rawItems, filterType, filterPhrase));\n }, [filterPhrase, filterType, rawItems]);\n\n useEffect(() => {\n if (filterContainer) {\n const { anchors } = getFocusedIndex(filterContainer);\n const id = anchors[0]?.getAttribute('data-id');\n\n if (id) {\n setFirst(id);\n }\n }\n }, [items, filterContainer]);\n\n const handleItemClicked = useCallback(\n (item: Partial<{ id: string }>, type: 'guideCategory' | 'tag') => {\n let tagIds = (activeFilterBadges?.tag || []).map((t) => t.id);\n\n if (type === 'tag' && item.id) {\n tagIds = tagIds.includes(item.id)\n ? tagIds.filter((id) => id !== item.id)\n : [...tagIds, item.id];\n }\n\n const data: { category?: string; tagIds: string[] } = {\n category: activeFilterBadges?.guideCategory\n ? activeFilterBadges.guideCategory.id\n : undefined,\n tagIds,\n };\n\n if (type === 'guideCategory') {\n data.category = item.id;\n }\n dispatch('quick-filter:add', data);\n },\n [activeFilterBadges, dispatch]\n );\n\n const buildListProps = (type: 'guideCategory' | 'tag') => {\n if (type === 'guideCategory') {\n return {\n renderItem: (item: Category, level: number) => (\n <StyledLink\n autoSelect={autoSelect && inputHasFocus && item.id === first}\n disabled={!match(item.title, filterPhrase)}\n tabIndex={!match(item.title, filterPhrase) ? -1 : 0}\n onKeyDown={(e) => {\n if (e.key === 'Enter') {\n handleItemClicked(item, type);\n }\n }}\n data-level={level}\n onClick={() => {\n handleItemClicked(item, type);\n }}\n data-id={item.id}\n >\n <Title\n title={item.title}\n phrase={filterPhrase}\n matches={match(item.title, filterPhrase)}\n />\n </StyledLink>\n ),\n };\n }\n return {\n renderLi: true,\n renderItem: (item: Tag) => (\n <StyledLink\n autoSelect={autoSelect && inputHasFocus && item.id === first}\n onKeyDown={(e) => {\n if (e.key === 'Enter') {\n handleItemClicked(item, type);\n }\n }}\n onClick={() => {\n handleItemClicked(item, type);\n }}\n data-id={item.id}\n >\n <Title\n symbol=\"#\"\n title={item.title}\n phrase={filterPhrase}\n matches={match(item.title, filterPhrase)}\n />\n </StyledLink>\n ),\n };\n };\n\n useEventListener(\n 'keydown',\n (e: KeyboardEvent) => {\n const { key } = e;\n if (\n !filterContainer ||\n !(key === 'ArrowDown' || key === 'ArrowUp' || key === 'Enter')\n ) {\n return;\n }\n\n const { anchors, focusedIndex } = getFocusedIndex(filterContainer);\n\n if (key === 'Enter') {\n if (inputHasFocus && autoSelect) {\n const id = anchors[0]?.getAttribute('data-id');\n\n if (id) {\n handleItemClicked({ id }, filterType);\n }\n }\n return;\n }\n\n const focusFirst = () => anchors[0]?.focus();\n const focusLast = () => anchors[anchors.length - 1]?.focus();\n const focusNext = () => anchors[focusedIndex + 1]?.focus();\n const focusPrev = () => anchors[focusedIndex - 1]?.focus();\n\n if (inputHasFocus) {\n // Input is focused\n\n e.preventDefault();\n if (key === 'ArrowDown') {\n focusFirst();\n } else {\n focusLast();\n }\n } else if (focusedIndex > -1) {\n // A quick-filter-item is focused\n\n e.preventDefault();\n if (key === 'ArrowDown') {\n if (anchors.length > focusedIndex + 1) {\n focusNext();\n } else {\n focusInput(searchContainer);\n }\n } else {\n if (focusedIndex - 1 < 0) {\n focusInput(searchContainer);\n } else {\n focusPrev();\n }\n }\n }\n },\n window\n );\n\n return (\n <ItemTree\n tree={items}\n renderEmpty={false}\n ulProps={{ role: 'listbox' }}\n liProps={{ role: 'option' }}\n {...buildListProps(filterType)}\n />\n );\n};\n\nexport default QuickFilterItemList;\n\ntype TitleProps = {\n title: string;\n phrase: string;\n matches: boolean;\n symbol?: string;\n};\n\nconst Title: React.FC<TitleProps> = ({ title, phrase, matches, symbol = '' }) => {\n const createTitle = () => {\n if (!matches || !phrase) {\n return [title];\n }\n\n const index = title.toLowerCase().indexOf(phrase.toLowerCase());\n const start = title.substr(0, index);\n const bold = title.slice(index, index + phrase.length);\n const end = title.substr(index + phrase.length);\n return [start, bold, end];\n };\n\n const [start, bold, end] = createTitle();\n\n return (\n <Text>\n {symbol}\n {start}\n {bold ? <strong>{bold}</strong> : null}\n {end ? end : null}\n </Text>\n );\n};\n\nconst disabledCss = css`\n opacity: 0.5;\n pointer-events: none;\n`;\n\nconst focused = (p: { theme: Theme; 'data-level'?: number; autoSelect: boolean }) => css`\n background-color: ${p.theme.colors?.text};\n color: #ffffff;\n outline: none;\n\n span:first-child {\n border-color: ${p.theme.colors?.text};\n }\n`;\n\nconst StyledLink = styled(Link)<{ 'data-level'?: number; autoSelect: boolean }>`\n display: block;\n text-decoration: none;\n font-size: ${(p) => p.theme.fonts?.normal};\n\n ${(p) => p.disabled && disabledCss}\n color: ${(p) => p.theme.colors?.text};\n background-color: transparent;\n\n span {\n display: block;\n ${(p) =>\n p['data-level']\n ? `padding: calc(${p.theme.sizes?.normal} / 2) ${p.theme.sizes?.normal};`\n : `padding: calc(${p.theme.sizes?.normal} / 2) ${p.theme.sizes?.medium}; `}\n ${(p) => p['data-level'] && 'border-left: 2px solid'}\n }\n\n span:first-child {\n border-color: #e7e7e7;\n }\n\n ${(p) => p['data-level'] && `padding: 0 calc(${p.theme.sizes?.medium} * ${p['data-level']});`}\n\n ${(p) => p.autoSelect && focused}\n\n &:hover,\n &:focus {\n ${focused}\n }\n`;\n","import styled from '@emotion/styled';\nimport { Category, Tag, Widget } from '@telia-ace/knowledge-widget-core';\nimport {\n contentBox,\n Loader,\n useContainer,\n useProperties,\n useScroll,\n} from '@telia-ace/knowledge-widget-ui';\nimport { appendClassNames } from '@telia-ace/widget-utilities';\nimport React, { useCallback, useMemo, useRef } from 'react';\nimport QuickFilterItemList, { focusInput, getFocusedIndex } from './quick-filter-item-list';\nimport { SearchComponentProps } from './search-component';\n\ntype Props = {\n phrase: string;\n inputHasFocus: boolean;\n searchContainerRef: HTMLElement | null;\n};\n\nexport default ({ phrase = '', inputHasFocus, searchContainerRef }: Props) => {\n const {\n quickFilter = {\n open: false,\n loading: false,\n symbol: '',\n type: '',\n items: [],\n },\n activeFilterBadges,\n noMatchesLabel = 'No matching items',\n } = useProperties<SearchComponentProps>();\n const [css, ref] = useScroll(true);\n const container = useContainer();\n const { events } = container.get('$widget') as Widget;\n const wrapperRef = useRef() as React.MutableRefObject<HTMLDivElement | null>;\n\n const setWrapperRef = useCallback(\n (node: HTMLDivElement | null) => {\n if (node) {\n node.addEventListener(\n 'keydown',\n () => {\n const listItemFocused = getFocusedIndex(node).focusedIndex > -1;\n if (listItemFocused) {\n events.subscribeOnce('router:changed', () => {\n focusInput(searchContainerRef);\n });\n }\n },\n true\n );\n }\n\n wrapperRef.current = node;\n return node;\n },\n [searchContainerRef]\n );\n\n const { items = [], symbol, type, open, loading } = quickFilter;\n\n const filteredItems = useMemo(() => {\n const activeTags = (activeFilterBadges?.tag || []).map((tag) => tag.id);\n return (items as any[]).filter((item) => !activeTags.includes(item.id)) as\n | Tag[]\n | Category[];\n }, [items, activeFilterBadges]);\n\n if (!open || !symbol) {\n return null;\n }\n\n const filterPhrase = phrase.slice(phrase.indexOf(symbol) + 1);\n\n return (\n <Wrapper\n ref={setWrapperRef}\n data-loading={loading}\n className={appendClassNames(\n 'humany-quick-filter-dropdown',\n [type === 'guideCategory', 'humany-quick-filter-guide-categories'],\n [type === 'tag', 'humany-quick-filter-tags']\n )}\n >\n <Inner className=\"humany-quick-filter-dropdown-inner\" css={css} ref={ref}>\n {filteredItems.length > 0 ? (\n <QuickFilterItemList\n filterType={type as 'guideCategory' | 'tag'}\n items={filteredItems}\n filterPhrase={filterPhrase}\n filterContainer={ref.current}\n searchContainer={searchContainerRef}\n inputHasFocus={inputHasFocus}\n />\n ) : (\n <NoMatches>{noMatchesLabel}</NoMatches>\n )}\n </Inner>\n <Loader loading={loading} />\n </Wrapper>\n );\n};\n\nconst Wrapper = styled.div`\n ${(p) => contentBox(p)};\n position: absolute;\n top: calc(100% + ${(p) => p.theme.sizes?.normal});\n left: 0;\n right: 0;\n z-index: 1;\n overflow: hidden;\n`;\n\nconst Inner = styled.div<{ css: string }>`\n max-height: 300px;\n overflow: auto;\n padding: ${(p) => p.theme.sizes?.medium} 0;\n ${(p) => p.css}\n ul {\n list-style: none;\n padding: 0;\n margin: 0;\n }\n li div {\n ${(p) => `margin: ${p.theme.sizes?.normal} 0;`}\n }\n`;\n\nconst NoMatches = styled.p`\n margin: 0 ${(p) => p.theme.sizes?.normal};\n color: ${(p) => p.theme.colors?.text};\n`;\n","import {\n useDebounce,\n useDispatch,\n usePrevious,\n useProperties,\n} from '@telia-ace/knowledge-widget-ui';\nimport { useCallback, useEffect, useRef } from 'react';\nimport { SearchComponentProps } from './search-component';\n\ntype ReturnType = [\n (arg: React.KeyboardEvent | React.MouseEvent | boolean) => void,\n (navigateToHome: boolean) => void,\n React.MutableRefObject<HTMLElement | null>\n];\n\nconst filterChanged = <T extends Optional<{ id: string } | { id: string }[]> | null>(\n newValue: T,\n oldValue: T\n) => {\n if (newValue && !oldValue) {\n return true;\n }\n if (!newValue && oldValue) {\n return true;\n }\n if (newValue && oldValue) {\n if (!Array.isArray(newValue) && !Array.isArray(oldValue)) {\n if (newValue.id !== oldValue.id) {\n return true;\n }\n } else {\n const areEqual = (arr1: T[], arr2: T[]) => {\n if (arr1.length === arr2.length) {\n return arr1.every((item, index) => {\n if (item === arr2[index]) {\n return true;\n }\n return false;\n });\n }\n return false;\n };\n\n if (!areEqual(newValue as T[], oldValue as T[])) {\n return true;\n }\n }\n }\n return false;\n};\n\nexport default (\n phrase: string,\n params: { [key: string]: any } = {},\n debounce = true\n): ReturnType => {\n const dispatch = useDispatch();\n\n const {\n quickFilters = false,\n quickFilter = { open: false },\n activeFilterBadges,\n filterBadges = false,\n incremental = 600,\n } = useProperties<SearchComponentProps>();\n\n const debouncedPhrase = useDebounce(\n phrase,\n typeof incremental === 'boolean' ? 600 : incremental\n );\n const previousDebouncedPhrase = usePrevious(debouncedPhrase);\n const previousFilters = usePrevious(activeFilterBadges);\n const ref = useRef<null | HTMLElement>(null);\n\n const dispatchSearch = useCallback(\n (value: string = '') => {\n if (filterBadges) {\n const filtersChanged =\n filterChanged(\n activeFilterBadges?.guideCategory,\n previousFilters?.guideCategory\n ) || filterChanged(activeFilterBadges?.tag, previousFilters?.tag);\n return dispatch('search', {\n value,\n filtersChanged,\n filters: {\n tagIds: (activeFilterBadges?.tag || []).map((t) => t.id),\n guideCategoryId: activeFilterBadges?.guideCategory?.id || null,\n },\n });\n }\n return dispatch('search', { value });\n },\n [dispatch, activeFilterBadges]\n );\n\n const dispatchClear = useCallback(\n (navigateToHome: boolean) => {\n dispatch('clear', { navigateToHome });\n },\n [dispatch]\n );\n\n const removeFilterKeywords = (input: string) => {\n if (quickFilters) {\n return input.replace(/([@#].*)/g, '');\n }\n return input;\n };\n\n const submitSearch = useCallback(\n (arg: React.KeyboardEvent | React.MouseEvent | boolean) => {\n if (quickFilter.open && (arg as React.KeyboardEvent).preventDefault) {\n (arg as React.KeyboardEvent).preventDefault();\n return;\n }\n\n const activeElement = document.activeElement as HTMLElement;\n const isSearching =\n ref.current && typeof ref.current.contains === 'function'\n ? ref.current.contains(activeElement)\n : false;\n const cleanedPhrase = removeFilterKeywords(phrase);\n\n if (\n (typeof arg === 'boolean' && arg) ||\n (cleanedPhrase.length && isSearching) ||\n activeFilterBadges?.guideCategory ||\n (!!activeFilterBadges?.tag.length && isSearching)\n ) {\n dispatchSearch(cleanedPhrase);\n } else {\n dispatchClear(isSearching);\n }\n },\n [ref, phrase, quickFilter, dispatchClear, activeFilterBadges, dispatchSearch]\n );\n\n useEffect(() => {\n const filtersChanged =\n filterChanged(activeFilterBadges?.guideCategory, previousFilters?.guideCategory) ||\n filterChanged(activeFilterBadges?.tag, previousFilters?.tag);\n\n const phrase = debouncedPhrase ? removeFilterKeywords(debouncedPhrase) : debouncedPhrase;\n const previousPhrase = previousDebouncedPhrase\n ? removeFilterKeywords(previousDebouncedPhrase)\n : previousDebouncedPhrase;\n if (\n typeof previousPhrase !== 'undefined' &&\n previousPhrase !== phrase &&\n phrase !== params.phrase &&\n debounce &&\n !quickFilter.open\n ) {\n submitSearch(filtersChanged);\n }\n }, [debouncedPhrase, quickFilter.open, activeFilterBadges, submitSearch]);\n\n useEffect(() => {\n if (phrase && quickFilters) {\n const quickFiltersGuideCategory =\n (typeof quickFilters === 'boolean' && !!quickFilters) ||\n (typeof quickFilters === 'object' && !!quickFilters.guideCategory);\n\n const quickFiltersTag =\n (typeof quickFilters === 'boolean' && !!quickFilters) ||\n (typeof quickFilters === 'object' && !!quickFilters.tag);\n\n if (quickFiltersGuideCategory && phrase.indexOf('@') === phrase.length - 1) {\n dispatch('quick-filter:open', { type: 'guideCategory', symbol: '@' });\n }\n\n if (quickFiltersTag && phrase.indexOf('#') === phrase.length - 1) {\n dispatch('quick-filter:open', { type: 'tag', symbol: '#' });\n }\n }\n\n if (quickFilter.open && phrase.indexOf('@') === -1 && phrase.indexOf('#') === -1) {\n dispatch('quick-filter:close');\n }\n }, [phrase]);\n\n return [submitSearch, dispatchClear, ref];\n};\n","import { css } from '@emotion/react';\nimport styled from '@emotion/styled';\nimport {\n borderTabStyle,\n Button,\n contentBox,\n convertToStringAttributes,\n Input,\n SymbolBadge,\n useChildren,\n useContainer,\n useDispatch,\n useProperties,\n useRouteData,\n useTransitionEnd,\n useWidgetEvent,\n} from '@telia-ace/knowledge-widget-ui';\nimport { RoutingService } from '@telia-ace/widget-routing';\nimport { Component } from '@telia-ace/widget-types-grid';\nimport { appendClassNames } from '@telia-ace/widget-utilities';\nimport React, { useCallback, useEffect, useState } from 'react';\nimport FilterBadges from './filter-badges';\nimport QuickFilter from './quick-filter';\nimport { SearchComponentProps } from './search-component';\nimport useSearch from './use-search';\n\ntype Props = {\n className: string;\n role?: string;\n};\n\nconst Search: React.FC<Props> = ({ className, ...other }) => {\n const {\n showSearchButton,\n showClearButton,\n role = 'search',\n autoFocus,\n placeholder,\n searchButtonLabel,\n clearButtonLabel,\n ariaLabel,\n route: searchRoute = 'search',\n incremental = true,\n showChildren = false,\n quickFilter,\n quickFilters: quickFiltersEnabled,\n filterBadges,\n } = useProperties<SearchComponentProps>();\n const { params } = useRouteData();\n const [hasFocus, setHasFocus] = useState(false);\n const [phrase, setPhrase] = useState(params.phrase || '');\n const [showFilterBadges, setShowFilterBadges] = useState({\n guideCategory: false,\n tag: false,\n });\n const container = useContainer();\n const children = useChildren();\n const dispatch = useDispatch();\n const { position: filterBadgePosition = 'inside' } =\n typeof filterBadges === 'object' ? filterBadges : {};\n\n useEffect(() => {\n const { guideCategory, tag } = params;\n const showGuideCategory =\n typeof filterBadges === 'object' ? !!filterBadges.guideCategory : !!filterBadges;\n const showTag = typeof filterBadges === 'object' ? !!filterBadges.tag : !!filterBadges;\n\n setShowFilterBadges({\n guideCategory: showGuideCategory && !!guideCategory,\n tag: showTag && !!tag,\n });\n }, [filterBadges, params]);\n\n // Remove quick-filter symbol, quick-filter phrase\n // and close quick-filter when route changed\n useWidgetEvent(\n 'router:changed',\n () => {\n if (quickFilter) {\n const { open, symbol } = quickFilter;\n\n if (open) {\n if (symbol) {\n const cleaned = phrase.replace(phrase.slice(phrase.indexOf(symbol)), '');\n setPhrase(cleaned);\n }\n\n dispatch('quick-filter:close');\n }\n }\n },\n [quickFilter, phrase, setPhrase, dispatch]\n );\n\n const [search, clear, elem] = useSearch(phrase, params, !!incremental);\n\n useEffect(() => {\n setPhrase(params.phrase || '');\n }, [params.phrase]);\n\n const onChange = useCallback(\n (value: string) => {\n setPhrase(value);\n },\n [setPhrase]\n );\n\n const onEscape = useCallback(() => {\n dispatch('quick-filter:close').then(() => clear(true));\n }, [dispatch, clear]);\n\n const autoFocusHandler = useCallback(() => {\n if (autoFocus && !hasFocus) {\n elem.current?.getElementsByTagName('input')[0]?.focus();\n }\n }, [autoFocus, hasFocus, elem]);\n\n const onClearButtonClick = useCallback(() => {\n container.getAsync('router').then((router: RoutingService) => {\n const initialRoute = router.getInitialRoute();\n const currentRoute = router.getRouteData();\n // if we already are on the initial route\n // and it's not the search route, clear the search instead of navigate\n if (initialRoute?.name === currentRoute.name && initialRoute?.name !== searchRoute) {\n setPhrase('');\n } else {\n clear(true);\n }\n });\n }, [container, setPhrase, clear]);\n\n const renderFilterBadges = (position: 'inside' | 'below') => {\n if (position !== filterBadgePosition) {\n return null;\n }\n if (!!showFilterBadges.guideCategory || !!showFilterBadges.tag) {\n return (\n <FilterBadges\n position={position}\n inputHasFocus={hasFocus}\n showGuideCategory={showFilterBadges.guideCategory}\n showTag={showFilterBadges.tag}\n searchContainerRef={elem.current}\n />\n );\n }\n };\n\n useTransitionEnd(autoFocusHandler);\n\n const showClear =\n showClearButton && (showFilterBadges.guideCategory || showFilterBadges.tag || phrase);\n const quickFilterAccessibilityProps = quickFiltersEnabled\n ? convertToStringAttributes({\n role: 'combobox',\n 'aria-autocomplete': 'list',\n autoComplete: 'off',\n 'aria-haspopup': 'listbox',\n })\n : {};\n\n return (\n <StyledSearchWrapper\n {...other}\n ref={elem}\n role={role}\n className={appendClassNames(className, 'humany-search')}\n data-has-phrase={!!phrase}\n data-has-focus={hasFocus}\n data-has-search-symbol={showSearchButton ? 'true' : 'false'}\n >\n <Inner\n action=\".\"\n onSubmit={(e: any) => {\n e.preventDefault();\n elem.current?.getElementsByTagName('input')[0]?.blur();\n }}\n data-has-focus={hasFocus}\n >\n {showSearchButton && (\n <SearchButton\n aria-label={searchButtonLabel}\n type=\"submit\"\n title={searchButtonLabel}\n disabled={!phrase}\n onClick={search}\n data-has-phrase={!!phrase}\n data-has-focus={hasFocus}\n >\n <SymbolBadge size={32} symbol={{ type: 'Svg', content: 'search' }} />\n </SearchButton>\n )}\n {renderFilterBadges('inside')}\n <Input\n type=\"search\"\n aria-label={ariaLabel}\n {...quickFilterAccessibilityProps}\n placeholder={\n showFilterBadges.guideCategory || showFilterBadges.tag ? '' : placeholder\n }\n onFocusChange={setHasFocus}\n onEscape={onEscape}\n onEnter={search}\n onChange={onChange}\n value={phrase}\n />\n {showClear && (\n <ClearButton\n aria-label={clearButtonLabel}\n type=\"reset\"\n hasFocus={hasFocus}\n title={clearButtonLabel}\n onClick={onClearButtonClick}\n >\n <SymbolBadge size={27} symbol={{ type: 'Svg', content: 'clear' }} />\n </ClearButton>\n )}\n {showChildren &&\n !showClear &&\n children.map((child) => (\n <Component key={child.id} id={child.id} branch=\"default\" />\n ))}\n <QuickFilter\n inputHasFocus={hasFocus}\n phrase={phrase}\n searchContainerRef={elem.current}\n />\n </Inner>\n {renderFilterBadges('below')}\n </StyledSearchWrapper>\n );\n};\n\nexport default Search;\n\nconst StyledSearchWrapper = styled.div<\n {\n 'data-has-focus': boolean;\n 'data-has-phrase': boolean;\n 'data-has-search-symbol': 'true' | 'false';\n } & any\n>`\n ${contentBox};\n width: 100%;\n padding: ${(p) => p.theme.sizes?.large};\n\n input {\n background-color: transparent;\n border: none;\n outline: none;\n min-width: 25%;\n flex: 1;\n font-size: ${(p) => p.theme.fonts?.normal};\n font-weight: 300;\n font-style: italic;\n padding: 1em 0;\n color: ${(p) => p.theme.colors?.text};\n -webkit-appearance: none;\n\n ${(p) => p['data-has-search-symbol'] === 'true' && `text-indent: ${p.theme.sizes?.normal};`}\n\n ::placeholder {\n color: ${(p) => p.theme.colors?.text};\n }\n /* removes the 'X' from IE */\n &[type='search']::-ms-clear {\n display: none;\n width: 0;\n height: 0;\n }\n &[type='search']::-ms-reveal {\n display: none;\n width: 0;\n height: 0;\n }\n\n /* removes the 'X' from Chrome */\n &[type='search']::-webkit-search-decoration,\n &[type='search']::-webkit-search-cancel-button,\n &[type='search']::-webkit-search-results-button,\n &[type='search']::-webkit-search-results-decoration {\n display: none;\n }\n\n &:focus {\n outline: none;\n }\n }\n\n button {\n background: transparent;\n border: none;\n padding: 0;\n font-size: ${(p) => p.theme.fonts?.large};\n transition: color 200ms ease-out;\n color: ${(p) =>\n p['data-has-focus'] || p['data-has-phrase'] ? p.theme.colors?.primary : '#000000'};\n cursor: pointer;\n > svg {\n height: 100%;\n }\n }\n`;\n\nconst Inner = styled.form<{ 'data-has-focus': boolean } & any>`\n display: flex;\n flex-wrap: nowrap;\n align-items: center;\n border: ${(p) => p.theme.inputBorder};\n border-radius: ${(p) => p.theme.borderRadius};\n background-color: #ffffff;\n position: relative;\n padding: 0 ${(p) => p.theme.sizes?.normal};\n\n ${(p) =>\n p['data-has-focus'] &&\n css`\n ${p.theme.accessibility?.isTabbing\n ? borderTabStyle(p)\n : `\n border-color: ${p.theme.colors?.primary};\n outline: none;\n input {\n outline: none;\n }\n `}\n `};\n`;\n\nconst SearchButton = styled(Button)<{\n 'data-has-focus': boolean;\n 'data-has-phrase': boolean;\n}>`\n padding: 0;\n height: 2em;\n\n svg {\n circle,\n line {\n stroke: ${(p) => (p['data-has-focus'] ? p.theme.colors?.primary : '#000000')};\n }\n }\n`;\n\nconst ClearButton = styled(Button)<{ hasFocus: boolean } & any>`\n &:focus-visible svg {\n ${borderTabStyle}\n }\n\n svg {\n vertical-align: top;\n\n circle,\n line,\n path {\n stroke: ${(p) => (p.hasFocus ? p.theme.colors?.primary : p.theme.colors?.text)};\n }\n }\n`;\n"],"names":["FilterBadge","_a","_b","text","className","filterType","handleClick","deleteAriaLabel","p","__objRest","ref","useRef","isFocused","setIsFocused","useState","React","Text","appendClassNames","e","Link","__spreadProps","__spreadValues","SymbolBadge","FilterBadges","inputHasFocus","searchContainerRef","showTag","showGuideCategory","position","activeFilterBadges","deleteFilterBadgeAriaLabel","useProperties","dispatch","useDispatch","name","params","useRouteData","isNavigatingWithKeyBoard","setIsNavigatingWithKeyboard","onKeyDown","useCallback","event","key","useEventListener","guideCategory","tag","tooltip","getFocusedFilterBadge","container","badges","handleFilterBadgeClick","id","keyboardNavigation","direction","inputElem","currentFocusedIndex","toFocus","useKeyPress","focusedBadgeIndex","isAtBeginningOfInput","isFocusingAFilterBadge","filtersToRemove","isFocusingInput","lastTag","renderBadge","type","StyledFilterBadge","tagItem","excludedIds","acc","t","Wrapper","Tooltip","FilterBadges$1","styled","css","borderTabStyle","match","title","phrase","filterItems","items","cloned","deepClone","i","matchTrail","buildMatchTrail","recursiveFilter","c","fn","categories","matching","flatten","res","trail","categoryTrail","result","category","getFocusedIndex","elem","anchors","a","getInputElem","focusInput","QuickFilterItemList","filterPhrase","rawItems","filterContainer","searchContainer","setItems","first","setFirst","quickFilters","autoSelect","useEffect","handleItemClicked","item","tagIds","data","buildListProps","level","StyledLink","Title","focusedIndex","focusFirst","focusLast","focusNext","focusPrev","ItemTree","QuickFilterItemList$1","matches","symbol","createTitle","index","start","bold","end","disabledCss","focused","_c","_d","QuickFilter","quickFilter","noMatchesLabel","useScroll","useContainer","events","wrapperRef","setWrapperRef","node","open","loading","filteredItems","useMemo","activeTags","Inner","NoMatches","Loader","contentBox","filterChanged","newValue","oldValue","arr1","arr2","useSearch","debounce","filterBadges","incremental","debouncedPhrase","useDebounce","previousDebouncedPhrase","usePrevious","previousFilters","dispatchSearch","value","filtersChanged","dispatchClear","navigateToHome","removeFilterKeywords","input","submitSearch","arg","activeElement","isSearching","cleanedPhrase","previousPhrase","quickFiltersGuideCategory","quickFiltersTag","Search","other","showSearchButton","showClearButton","role","autoFocus","placeholder","searchButtonLabel","clearButtonLabel","ariaLabel","searchRoute","showChildren","quickFiltersEnabled","hasFocus","setHasFocus","setPhrase","showFilterBadges","setShowFilterBadges","children","useChildren","filterBadgePosition","useWidgetEvent","cleaned","search","clear","onChange","onEscape","autoFocusHandler","onClearButtonClick","router","initialRoute","currentRoute","renderFilterBadges","useTransitionEnd","showClear","quickFilterAccessibilityProps","convertToStringAttributes","StyledSearchWrapper","SearchButton","Input","ClearButton","child","Component","Button"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"search.5a86af51.js","sources":["../src/filter-badges.tsx","../src/utils.ts","../src/quick-filter-item-list.tsx","../src/quick-filter.tsx","../src/use-search.ts","../src/search.tsx"],"sourcesContent":["import { css } from '@emotion/react';\nimport styled from '@emotion/styled';\nimport {\n borderTabStyle,\n Link,\n SymbolBadge,\n Text,\n Tooltip,\n useDispatch,\n useEventListener,\n useKeyPress,\n useProperties,\n useRouteData,\n} from '@telia-ace/knowledge-widget-ui';\nimport { appendClassNames } from '@telia-ace/widget-utilities';\nimport React, { useCallback, useRef, useState } from 'react';\nimport { SearchComponentProps } from './search-component';\n\nconst FilterBadge: React.FC<any> = ({\n text,\n className,\n filterType,\n handleClick,\n deleteAriaLabel = '',\n ...p\n}) => {\n const ref = useRef<HTMLAnchorElement>();\n\n const [isFocused, setIsFocused] = useState(document.activeElement === ref.current);\n\n return (\n <Text\n className={appendClassNames(\n className,\n 'humany-filter-badge',\n isFocused ? 'humany-filter-badge-focused' : ''\n )}\n onKeyDown={(e) => {\n if (e.key === 'Enter') {\n handleClick(e, filterType);\n }\n }}\n >\n {text}\n <Link\n {...p}\n ref={ref}\n tabIndex={0}\n onFocus={() => {\n setIsFocused(true);\n }}\n onBlur={() => {\n setIsFocused(false);\n }}\n role=\"button\"\n aria-label={deleteAriaLabel.replace('{{item}}', text)}\n onClick={(e) => handleClick(e, filterType)}\n >\n <SymbolBadge size={13} symbol={{ type: 'Svg', content: 'close' }} />\n </Link>\n </Text>\n );\n};\n\ntype Props = {\n inputHasFocus: boolean;\n searchContainerRef: HTMLElement | null;\n showGuideCategory: boolean;\n showTag: boolean;\n position: 'inside' | 'below';\n};\nconst FilterBadges: React.FC<Props> = ({\n inputHasFocus,\n searchContainerRef,\n showTag,\n showGuideCategory,\n position,\n}) => {\n const { activeFilterBadges, deleteFilterBadgeAriaLabel = '' } =\n useProperties<SearchComponentProps>();\n\n const dispatch = useDispatch();\n const { name, params } = useRouteData();\n const [isNavigatingWithKeyBoard, setIsNavigatingWithKeyboard] = useState(false);\n\n const onKeyDown = useCallback((event: KeyboardEvent) => {\n const { key } = event;\n\n if (['ArrowLeft', 'ArrowRight'].indexOf(key) === -1) {\n setIsNavigatingWithKeyboard(false);\n }\n }, []);\n\n useEventListener('keydown', onKeyDown, window);\n\n useEventListener('click', onKeyDown, window);\n\n const { guideCategory, tag, tooltip } = activeFilterBadges || {};\n\n const getFocusedFilterBadge = (container: HTMLElement) => {\n const badges = container.querySelectorAll(\n '.humany-filter-badge > a'\n ) as NodeListOf<HTMLElement>;\n return {\n badges,\n index: Array.from(badges).findIndex((e) => document.activeElement === e),\n };\n };\n\n const handleFilterBadgeClick = useCallback(\n (event: React.MouseEvent | React.KeyboardEvent, filterType: string, id?: string) => {\n event.preventDefault();\n dispatch('quick-filter:remove', { types: [filterType], ids: [id] });\n },\n [dispatch]\n );\n\n const keyboardNavigation = (\n direction: 'left' | 'right',\n inputElem: HTMLInputElement | null\n ) => {\n if (!searchContainerRef) {\n return;\n }\n const { badges, index: currentFocusedIndex } = getFocusedFilterBadge(searchContainerRef);\n\n if (badges.length) {\n let toFocus: HTMLElement | null = null;\n\n if (direction === 'left') {\n if (currentFocusedIndex === -1) {\n // if no badge is focused and direction is left\n // focus last badge\n toFocus = badges.item(badges.length - 1);\n } else if (currentFocusedIndex > 0) {\n // if there are more badges to the left, go one step back\n // do nothing if already focusing the most left badge\n toFocus = badges.item(currentFocusedIndex - 1);\n }\n } else if (direction === 'right') {\n if (currentFocusedIndex === badges.length - 1) {\n // if currently focusing the last badge, move focus to search input\n inputElem && inputElem.focus();\n } else if (badges.item(currentFocusedIndex + 1)) {\n toFocus = badges.item(currentFocusedIndex + 1);\n }\n }\n\n if (toFocus) {\n toFocus.focus();\n setIsNavigatingWithKeyboard(true);\n }\n }\n };\n\n useKeyPress(\n 'ArrowLeft',\n useCallback(() => {\n if (!searchContainerRef) {\n return;\n }\n const { index: focusedBadgeIndex } = getFocusedFilterBadge(searchContainerRef);\n\n if (inputHasFocus || focusedBadgeIndex > -1) {\n const inputElem: HTMLInputElement | null =\n searchContainerRef.querySelector('[data-type=\"search\"]');\n const isAtBeginningOfInput =\n inputElem && inputElem.selectionStart !== null && inputElem.selectionStart <= 0;\n const isFocusingAFilterBadge = focusedBadgeIndex > -1;\n\n if (isAtBeginningOfInput || isFocusingAFilterBadge) {\n keyboardNavigation('left', inputElem);\n }\n }\n }, [inputHasFocus, searchContainerRef])\n );\n\n useKeyPress(\n 'ArrowRight',\n useCallback(() => {\n if (!searchContainerRef) {\n return;\n }\n const { index: focusedBadgeIndex } = getFocusedFilterBadge(searchContainerRef);\n\n if (focusedBadgeIndex > -1) {\n const inputElem: HTMLInputElement | null =\n searchContainerRef.querySelector('[data-type=\"search\"]');\n const isFocusingAFilterBadge = focusedBadgeIndex > -1;\n\n if (isFocusingAFilterBadge) {\n keyboardNavigation('right', inputElem);\n }\n }\n }, [searchContainerRef])\n );\n\n useKeyPress(\n 'Backspace',\n useCallback(\n (event: any) => {\n if (!searchContainerRef) {\n return;\n }\n let filtersToRemove: string[] = [];\n const { index: focusedBadgeIndex } = getFocusedFilterBadge(searchContainerRef);\n\n const inputElem: HTMLInputElement | null =\n searchContainerRef.querySelector('[data-type=\"search\"]');\n const isFocusingAFilterBadge = focusedBadgeIndex > -1;\n\n if (isFocusingAFilterBadge) {\n if (focusedBadgeIndex === 0) {\n if (showGuideCategory) {\n filtersToRemove = ['guideCategory'];\n } else if (showTag) {\n filtersToRemove = ['tag'];\n }\n } else if (focusedBadgeIndex === 1) {\n filtersToRemove = ['tag'];\n }\n } else {\n const isFocusingInput = document.activeElement === inputElem;\n const isAtBeginningOfInput =\n inputElem &&\n inputElem.selectionStart !== null &&\n inputElem.selectionStart <= 0;\n\n if (isAtBeginningOfInput && isFocusingInput) {\n if (!!activeFilterBadges?.tag.length) {\n filtersToRemove = ['tag'];\n } else if (activeFilterBadges?.guideCategory) {\n filtersToRemove = ['guideCategory'];\n }\n }\n }\n\n if (filtersToRemove.length > 0) {\n event.preventDefault();\n let id: string | undefined = undefined;\n\n if (filtersToRemove.includes('tag')) {\n const lastTag = activeFilterBadges?.tag.at(-1);\n id = lastTag?.id;\n }\n\n dispatch('quick-filter:remove', { types: filtersToRemove, ids: [id] });\n }\n },\n [searchContainerRef, activeFilterBadges, showTag, showGuideCategory, dispatch]\n )\n );\n\n const renderBadge = useCallback(\n (type: 'guideCategory' | 'tag') => {\n if (type === 'guideCategory' && guideCategory && showGuideCategory) {\n return (\n <StyledFilterBadge\n text={`@${guideCategory.title}`}\n routeName={name}\n filterType=\"guideCategory\"\n handleClick={handleFilterBadgeClick}\n deleteAriaLabel={deleteFilterBadgeAriaLabel}\n params={{\n ...params,\n guideCategory: undefined,\n }}\n />\n );\n }\n if (type === 'tag' && !!tag?.length && showTag) {\n return tag.map((tagItem) => {\n const excludedIds = tag.reduce<string[]>((acc, t) => {\n if (t.id !== tagItem.id) {\n acc.push(t.id);\n }\n return acc;\n }, []);\n\n return (\n <StyledFilterBadge\n key={tagItem.id}\n className=\"humany-filter-badge\"\n text={`#${tagItem.title}`}\n routeName={name}\n filterType=\"tag\"\n handleClick={(event: any) =>\n handleFilterBadgeClick(event, 'tag', tagItem.id)\n }\n deleteAriaLabel={deleteFilterBadgeAriaLabel}\n params={{\n ...params,\n tag: excludedIds,\n }}\n />\n );\n });\n }\n return null;\n },\n [\n guideCategory,\n tag,\n name,\n params,\n showGuideCategory,\n showTag,\n isNavigatingWithKeyBoard,\n handleFilterBadgeClick,\n ]\n );\n\n if (!guideCategory && !tag) {\n return null;\n }\n\n return (\n <Wrapper className=\"humany-filter-badges\" position={position}>\n {guideCategory && tooltip ? (\n <Tooltip content={<>{tooltip}</>} sticky={false}>\n {renderBadge('guideCategory')}\n </Tooltip>\n ) : (\n renderBadge('guideCategory')\n )}\n {tag && renderBadge('tag')}\n </Wrapper>\n );\n};\n\nexport default FilterBadges;\n\nconst Wrapper = styled.div<{ position: 'inside' | 'below' }>`\n display: flex;\n align-items: center;\n flex-wrap: wrap;\n\n ${(p) =>\n p.position === 'inside'\n ? css`\n &:not(:first-child) {\n margin: 0 0 0 ${p.theme.sizes?.normal};\n }\n `\n : css`\n margin: ${p.theme.sizes?.small} 0 0 0;\n span:first-child {\n margin-left: 0;\n }\n `}\n`;\n\nconst StyledFilterBadge = styled(FilterBadge)`\n display: flex;\n align-items: center;\n padding: ${(p) => `${p.theme.sizes?.small} calc(${p.theme.sizes?.normal}/2) `};\n background-color: ${(p) => p.theme.colors?.primary};\n border-radius: ${(p) => p.theme.borderRadius};\n font-weight: 300;\n font-size: ${(p) => p.theme.fonts?.normal};\n font-style: italic;\n color: #ffffff;\n text-decoration: none;\n white-space: nowrap;\n\n margin: calc(${(p) => p.theme.sizes?.small} / 2);\n\n &.humany-filter-badge-focused:focus-within {\n ${borderTabStyle}\n background-color: transparent;\n\n svg {\n path {\n stroke: ${(p) => p.theme.colors?.primary};\n }\n }\n a {\n outline: none;\n }\n }\n\n svg {\n width: 17px;\n height: 11px;\n margin: 1px 0 0 ${(p) => p.theme.sizes?.small};\n path {\n stroke: #ffffff;\n stroke-width: 2px;\n }\n order: 1;\n }\n`;\n","import { Category, Tag } from '@telia-ace/knowledge-widget-core';\nimport { categoryTrail, deepClone } from '@telia-ace/widget-utilities';\n\nexport const match = (title: string, phrase: string) => {\n if (!phrase || !title) {\n return true;\n }\n\n return !!(title.toLowerCase().indexOf(phrase.toLowerCase()) > -1);\n};\n\nexport const filterItems = (\n items: (Tag | Category)[] = [],\n type: 'tag' | 'guideCategory',\n phrase: string\n): any[] => {\n if (!phrase) {\n return items;\n }\n\n const cloned = deepClone(items);\n\n if (type === 'tag') {\n return cloned.filter((i: Tag) => match(i.title, phrase));\n }\n\n const matchTrail = buildMatchTrail(cloned, phrase);\n const filtered = recursiveFilter(cloned, (c: Category) => matchTrail.indexOf(c.id) > -1);\n\n return filtered;\n};\n\nconst recursiveFilter = (items: Category[], fn: (c: Category) => boolean) => {\n return items.filter((i: Category) => {\n if (i.items && i.items.length) {\n i.items = recursiveFilter(i.items, fn);\n }\n\n return fn(i);\n });\n};\n\nconst buildMatchTrail = (categories: Category[], phrase: string) => {\n const flattened = flatten(categories);\n const matching = flattened.filter((c) => match(c.title, phrase)).map((c) => c.id);\n\n let res: string[] = [];\n\n matching.forEach((id) => {\n const trail = categoryTrail(id, categories);\n\n res = res.concat(trail);\n });\n\n return res;\n};\n\nconst flatten = (categories: Category[]): Category[] => {\n let result: Category[] = [];\n\n categories.forEach((category) => {\n result.push(category);\n\n if (Array.isArray(category.items)) {\n result = result.concat(flatten(category.items));\n }\n });\n\n return result;\n};\n","import { css, Theme } from '@emotion/react';\nimport styled from '@emotion/styled';\nimport { Category, Tag } from '@telia-ace/knowledge-widget-core';\nimport {\n ItemTree,\n Link,\n Text,\n useDispatch,\n useEventListener,\n useProperties,\n} from '@telia-ace/knowledge-widget-ui';\nimport React, { useCallback, useEffect, useState } from 'react';\nimport { SearchComponentProps } from './search-component';\nimport { filterItems, match } from './utils';\n\ntype Props = {\n filterPhrase: string;\n items: Category[] | Tag[];\n filterType: 'guideCategory' | 'tag';\n searchContainer: HTMLElement | null;\n filterContainer: HTMLElement | null;\n inputHasFocus: boolean;\n};\n\nexport const getFocusedIndex = (elem: HTMLElement) => {\n const anchors = Array.from(elem?.getElementsByTagName('A') || []).filter(\n (a) => a.getAttribute('disabled') === null\n ) as HTMLAnchorElement[];\n return {\n anchors,\n focusedIndex: anchors.findIndex((e) => document.activeElement === e),\n };\n};\n\nconst getInputElem = (searchContainerRef: HTMLElement | null) => {\n return searchContainerRef\n ? (searchContainerRef.querySelector(\n '[data-type=\"search\"], input[type=\"search\"]'\n ) as HTMLElement | null)\n : null;\n};\n\nexport const focusInput = (searchContainerRef: HTMLElement | null) => {\n if (!searchContainerRef) {\n return;\n }\n const inputElem = getInputElem(searchContainerRef);\n if (inputElem) {\n inputElem.focus();\n }\n};\n\nconst QuickFilterItemList: React.FC<Props> = ({\n filterPhrase,\n items: rawItems,\n filterType,\n filterContainer,\n searchContainer,\n inputHasFocus,\n}) => {\n const [items, setItems] = useState<Category[] | Tag[]>(rawItems || []);\n const [first, setFirst] = useState<string | null>(null);\n const dispatch = useDispatch();\n const { activeFilterBadges, quickFilters } = useProperties<SearchComponentProps>();\n const autoSelect =\n (typeof quickFilters === 'object' && !!quickFilters.autoSelect) ||\n (typeof quickFilters === 'boolean' && !!quickFilters);\n\n useEffect(() => {\n setItems(filterItems(rawItems, filterType, filterPhrase));\n }, [filterPhrase, filterType, rawItems]);\n\n useEffect(() => {\n if (filterContainer) {\n const { anchors } = getFocusedIndex(filterContainer);\n const id = anchors[0]?.getAttribute('data-id');\n\n if (id) {\n setFirst(id);\n }\n }\n }, [items, filterContainer]);\n\n const handleItemClicked = useCallback(\n (item: Partial<{ id: string }>, type: 'guideCategory' | 'tag') => {\n let tagIds = (activeFilterBadges?.tag || []).map((t) => t.id);\n\n if (type === 'tag' && item.id) {\n tagIds = tagIds.includes(item.id)\n ? tagIds.filter((id) => id !== item.id)\n : [...tagIds, item.id];\n }\n\n const data: { category?: string; tagIds: string[] } = {\n category: activeFilterBadges?.guideCategory\n ? activeFilterBadges.guideCategory.id\n : undefined,\n tagIds,\n };\n\n if (type === 'guideCategory') {\n data.category = item.id;\n }\n dispatch('quick-filter:add', data);\n },\n [activeFilterBadges, dispatch]\n );\n\n const buildListProps = (type: 'guideCategory' | 'tag') => {\n if (type === 'guideCategory') {\n return {\n renderItem: (item: Category, level: number) => (\n <StyledLink\n autoSelect={autoSelect && inputHasFocus && item.id === first}\n disabled={!match(item.title, filterPhrase)}\n tabIndex={!match(item.title, filterPhrase) ? -1 : 0}\n onKeyDown={(e) => {\n if (e.key === 'Enter') {\n handleItemClicked(item, type);\n }\n }}\n data-level={level}\n onClick={() => {\n handleItemClicked(item, type);\n }}\n data-id={item.id}\n >\n <Title\n title={item.title}\n phrase={filterPhrase}\n matches={match(item.title, filterPhrase)}\n />\n </StyledLink>\n ),\n };\n }\n return {\n renderLi: true,\n renderItem: (item: Tag) => (\n <StyledLink\n autoSelect={autoSelect && inputHasFocus && item.id === first}\n onKeyDown={(e) => {\n if (e.key === 'Enter') {\n handleItemClicked(item, type);\n }\n }}\n onClick={() => {\n handleItemClicked(item, type);\n }}\n data-id={item.id}\n >\n <Title\n symbol=\"#\"\n title={item.title}\n phrase={filterPhrase}\n matches={match(item.title, filterPhrase)}\n />\n </StyledLink>\n ),\n };\n };\n\n useEventListener(\n 'keydown',\n (e: KeyboardEvent) => {\n const { key } = e;\n if (\n !filterContainer ||\n !(key === 'ArrowDown' || key === 'ArrowUp' || key === 'Enter')\n ) {\n return;\n }\n\n const { anchors, focusedIndex } = getFocusedIndex(filterContainer);\n\n if (key === 'Enter') {\n if (inputHasFocus && autoSelect) {\n const id = anchors[0]?.getAttribute('data-id');\n\n if (id) {\n handleItemClicked({ id }, filterType);\n }\n }\n return;\n }\n\n const focusFirst = () => anchors[0]?.focus();\n const focusLast = () => anchors[anchors.length - 1]?.focus();\n const focusNext = () => anchors[focusedIndex + 1]?.focus();\n const focusPrev = () => anchors[focusedIndex - 1]?.focus();\n\n if (inputHasFocus) {\n // Input is focused\n\n e.preventDefault();\n if (key === 'ArrowDown') {\n focusFirst();\n } else {\n focusLast();\n }\n } else if (focusedIndex > -1) {\n // A quick-filter-item is focused\n\n e.preventDefault();\n if (key === 'ArrowDown') {\n if (anchors.length > focusedIndex + 1) {\n focusNext();\n } else {\n focusInput(searchContainer);\n }\n } else {\n if (focusedIndex - 1 < 0) {\n focusInput(searchContainer);\n } else {\n focusPrev();\n }\n }\n }\n },\n window\n );\n\n return (\n <ItemTree\n tree={items}\n renderEmpty={false}\n ulProps={{ role: 'listbox' }}\n liProps={{ role: 'option' }}\n {...buildListProps(filterType)}\n />\n );\n};\n\nexport default QuickFilterItemList;\n\ntype TitleProps = {\n title: string;\n phrase: string;\n matches: boolean;\n symbol?: string;\n};\n\nconst Title: React.FC<TitleProps> = ({ title, phrase, matches, symbol = '' }) => {\n const createTitle = () => {\n if (!matches || !phrase) {\n return [title];\n }\n\n const index = title.toLowerCase().indexOf(phrase.toLowerCase());\n const start = title.substr(0, index);\n const bold = title.slice(index, index + phrase.length);\n const end = title.substr(index + phrase.length);\n return [start, bold, end];\n };\n\n const [start, bold, end] = createTitle();\n\n return (\n <Text>\n {symbol}\n {start}\n {bold ? <strong>{bold}</strong> : null}\n {end ? end : null}\n </Text>\n );\n};\n\nconst disabledCss = css`\n opacity: 0.5;\n pointer-events: none;\n`;\n\nconst focused = (p: { theme: Theme; 'data-level'?: number; autoSelect: boolean }) => css`\n background-color: ${p.theme.colors?.text};\n color: #ffffff;\n outline: none;\n\n span:first-child {\n border-color: ${p.theme.colors?.text};\n }\n`;\n\nconst StyledLink = styled(Link)<{ 'data-level'?: number; autoSelect: boolean }>`\n display: block;\n text-decoration: none;\n font-size: ${(p) => p.theme.fonts?.normal};\n\n ${(p) => p.disabled && disabledCss}\n color: ${(p) => p.theme.colors?.text};\n background-color: transparent;\n\n span {\n display: block;\n ${(p) =>\n p['data-level']\n ? `padding: calc(${p.theme.sizes?.normal} / 2) ${p.theme.sizes?.normal};`\n : `padding: calc(${p.theme.sizes?.normal} / 2) ${p.theme.sizes?.medium}; `}\n ${(p) => p['data-level'] && 'border-left: 2px solid'}\n }\n\n span:first-child {\n border-color: #e7e7e7;\n }\n\n ${(p) => p['data-level'] && `padding: 0 calc(${p.theme.sizes?.medium} * ${p['data-level']});`}\n\n ${(p) => p.autoSelect && focused}\n\n &:hover,\n &:focus {\n ${focused}\n }\n`;\n","import styled from '@emotion/styled';\nimport { Category, Tag, Widget } from '@telia-ace/knowledge-widget-core';\nimport {\n contentBox,\n Loader,\n useContainer,\n useProperties,\n useScroll,\n} from '@telia-ace/knowledge-widget-ui';\nimport { appendClassNames } from '@telia-ace/widget-utilities';\nimport React, { useCallback, useMemo, useRef } from 'react';\nimport QuickFilterItemList, { focusInput, getFocusedIndex } from './quick-filter-item-list';\nimport { SearchComponentProps } from './search-component';\n\ntype Props = {\n phrase: string;\n inputHasFocus: boolean;\n searchContainerRef: HTMLElement | null;\n};\n\nexport default ({ phrase = '', inputHasFocus, searchContainerRef }: Props) => {\n const {\n quickFilter = {\n open: false,\n loading: false,\n symbol: '',\n type: '',\n items: [],\n },\n activeFilterBadges,\n noMatchesLabel = 'No matching items',\n } = useProperties<SearchComponentProps>();\n const [css, ref] = useScroll(true);\n const container = useContainer();\n const { events } = container.get('$widget') as Widget;\n const wrapperRef = useRef() as React.MutableRefObject<HTMLDivElement | null>;\n\n const setWrapperRef = useCallback(\n (node: HTMLDivElement | null) => {\n if (node) {\n node.addEventListener(\n 'keydown',\n () => {\n const listItemFocused = getFocusedIndex(node).focusedIndex > -1;\n if (listItemFocused) {\n events.subscribeOnce('router:changed', () => {\n focusInput(searchContainerRef);\n });\n }\n },\n true\n );\n }\n\n wrapperRef.current = node;\n return node;\n },\n [searchContainerRef]\n );\n\n const { items = [], symbol, type, open, loading } = quickFilter;\n\n const filteredItems = useMemo(() => {\n const activeTags = (activeFilterBadges?.tag || []).map((tag) => tag.id);\n return (items as any[]).filter((item) => !activeTags.includes(item.id)) as\n | Tag[]\n | Category[];\n }, [items, activeFilterBadges]);\n\n if (!open || !symbol) {\n return null;\n }\n\n const filterPhrase = phrase.slice(phrase.indexOf(symbol) + 1);\n\n return (\n <Wrapper\n ref={setWrapperRef}\n data-loading={loading}\n className={appendClassNames(\n 'humany-quick-filter-dropdown',\n [type === 'guideCategory', 'humany-quick-filter-guide-categories'],\n [type === 'tag', 'humany-quick-filter-tags']\n )}\n >\n <Inner className=\"humany-quick-filter-dropdown-inner\" css={css} ref={ref}>\n {filteredItems.length > 0 ? (\n <QuickFilterItemList\n filterType={type as 'guideCategory' | 'tag'}\n items={filteredItems}\n filterPhrase={filterPhrase}\n filterContainer={ref.current}\n searchContainer={searchContainerRef}\n inputHasFocus={inputHasFocus}\n />\n ) : (\n <NoMatches>{noMatchesLabel}</NoMatches>\n )}\n </Inner>\n <Loader loading={loading} />\n </Wrapper>\n );\n};\n\nconst Wrapper = styled.div`\n ${(p) => contentBox(p)};\n position: absolute;\n top: calc(100% + ${(p) => p.theme.sizes?.normal});\n left: 0;\n right: 0;\n z-index: 1;\n overflow: hidden;\n`;\n\nconst Inner = styled.div<{ css: string }>`\n max-height: 300px;\n overflow: auto;\n padding: ${(p) => p.theme.sizes?.medium} 0;\n ${(p) => p.css}\n ul {\n list-style: none;\n padding: 0;\n margin: 0;\n }\n li div {\n ${(p) => `margin: ${p.theme.sizes?.normal} 0;`}\n }\n`;\n\nconst NoMatches = styled.p`\n margin: 0 ${(p) => p.theme.sizes?.normal};\n color: ${(p) => p.theme.colors?.text};\n`;\n","import {\n useDebounce,\n useDispatch,\n usePrevious,\n useProperties,\n} from '@telia-ace/knowledge-widget-ui';\nimport { useCallback, useEffect, useRef } from 'react';\nimport { SearchComponentProps } from './search-component';\n\ntype ReturnType = [\n (arg: React.KeyboardEvent | React.MouseEvent | boolean) => void,\n (navigateToHome: boolean) => void,\n React.MutableRefObject<HTMLElement | null>\n];\n\nconst filterChanged = <T extends Optional<{ id: string } | { id: string }[]> | null>(\n newValue: T,\n oldValue: T\n) => {\n if (newValue && !oldValue) {\n return true;\n }\n if (!newValue && oldValue) {\n return true;\n }\n if (newValue && oldValue) {\n if (!Array.isArray(newValue) && !Array.isArray(oldValue)) {\n if (newValue.id !== oldValue.id) {\n return true;\n }\n } else {\n const areEqual = (arr1: T[], arr2: T[]) => {\n if (arr1.length === arr2.length) {\n return arr1.every((item, index) => {\n if (item === arr2[index]) {\n return true;\n }\n return false;\n });\n }\n return false;\n };\n\n if (!areEqual(newValue as T[], oldValue as T[])) {\n return true;\n }\n }\n }\n return false;\n};\n\nexport default (\n phrase: string,\n params: { [key: string]: any } = {},\n debounce = true\n): ReturnType => {\n const dispatch = useDispatch();\n\n const {\n quickFilters = false,\n quickFilter = { open: false },\n activeFilterBadges,\n filterBadges = false,\n incremental = 600,\n } = useProperties<SearchComponentProps>();\n\n const debouncedPhrase = useDebounce(\n phrase,\n typeof incremental === 'boolean' ? 600 : incremental\n );\n const previousDebouncedPhrase = usePrevious(debouncedPhrase);\n const previousFilters = usePrevious(activeFilterBadges);\n const ref = useRef<null | HTMLElement>(null);\n\n const dispatchSearch = useCallback(\n (value: string = '') => {\n if (filterBadges) {\n const filtersChanged =\n filterChanged(\n activeFilterBadges?.guideCategory,\n previousFilters?.guideCategory\n ) || filterChanged(activeFilterBadges?.tag, previousFilters?.tag);\n return dispatch('search', {\n value,\n filtersChanged,\n filters: {\n tagIds: (activeFilterBadges?.tag || []).map((t) => t.id),\n guideCategoryId: activeFilterBadges?.guideCategory?.id || null,\n },\n });\n }\n return dispatch('search', { value });\n },\n [dispatch, activeFilterBadges]\n );\n\n const dispatchClear = useCallback(\n (navigateToHome: boolean) => {\n dispatch('clear', { navigateToHome });\n },\n [dispatch]\n );\n\n const removeFilterKeywords = (input: string) => {\n if (quickFilters) {\n return input.replace(/([@#].*)/g, '');\n }\n return input;\n };\n\n const submitSearch = useCallback(\n (arg: React.KeyboardEvent | React.MouseEvent | boolean) => {\n if (quickFilter.open && (arg as React.KeyboardEvent).preventDefault) {\n (arg as React.KeyboardEvent).preventDefault();\n return;\n }\n\n const activeElement = document.activeElement as HTMLElement;\n const isSearching =\n ref.current && typeof ref.current.contains === 'function'\n ? ref.current.contains(activeElement)\n : false;\n const cleanedPhrase = removeFilterKeywords(phrase);\n\n if (\n (typeof arg === 'boolean' && arg) ||\n (cleanedPhrase.length && isSearching) ||\n activeFilterBadges?.guideCategory ||\n (!!activeFilterBadges?.tag.length && isSearching)\n ) {\n dispatchSearch(cleanedPhrase);\n } else {\n dispatchClear(isSearching);\n }\n },\n [ref, phrase, quickFilter, dispatchClear, activeFilterBadges, dispatchSearch]\n );\n\n useEffect(() => {\n const filtersChanged =\n filterChanged(activeFilterBadges?.guideCategory, previousFilters?.guideCategory) ||\n filterChanged(activeFilterBadges?.tag, previousFilters?.tag);\n\n const phrase = debouncedPhrase ? removeFilterKeywords(debouncedPhrase) : debouncedPhrase;\n const previousPhrase = previousDebouncedPhrase\n ? removeFilterKeywords(previousDebouncedPhrase)\n : previousDebouncedPhrase;\n if (\n typeof previousPhrase !== 'undefined' &&\n previousPhrase !== phrase &&\n phrase !== params.phrase &&\n debounce &&\n !quickFilter.open\n ) {\n submitSearch(filtersChanged);\n }\n }, [debouncedPhrase, quickFilter.open, activeFilterBadges, submitSearch]);\n\n useEffect(() => {\n if (phrase && quickFilters) {\n const quickFiltersGuideCategory =\n (typeof quickFilters === 'boolean' && !!quickFilters) ||\n (typeof quickFilters === 'object' && !!quickFilters.guideCategory);\n\n const quickFiltersTag =\n (typeof quickFilters === 'boolean' && !!quickFilters) ||\n (typeof quickFilters === 'object' && !!quickFilters.tag);\n\n if (quickFiltersGuideCategory && phrase.indexOf('@') === phrase.length - 1) {\n dispatch('quick-filter:open', { type: 'guideCategory', symbol: '@' });\n }\n\n if (quickFiltersTag && phrase.indexOf('#') === phrase.length - 1) {\n dispatch('quick-filter:open', { type: 'tag', symbol: '#' });\n }\n }\n\n if (quickFilter.open && phrase.indexOf('@') === -1 && phrase.indexOf('#') === -1) {\n dispatch('quick-filter:close');\n }\n }, [phrase]);\n\n return [submitSearch, dispatchClear, ref];\n};\n","import { css } from '@emotion/react';\nimport styled from '@emotion/styled';\nimport {\n borderTabStyle,\n Button,\n contentBox,\n convertToStringAttributes,\n Input,\n SymbolBadge,\n useChildren,\n useContainer,\n useDispatch,\n useProperties,\n useRouteData,\n useTransitionEnd,\n useWidgetEvent,\n} from '@telia-ace/knowledge-widget-ui';\nimport { RoutingService } from '@telia-ace/widget-routing';\nimport { Component } from '@telia-ace/widget-types-grid';\nimport { appendClassNames } from '@telia-ace/widget-utilities';\nimport React, { useCallback, useEffect, useState } from 'react';\nimport FilterBadges from './filter-badges';\nimport QuickFilter from './quick-filter';\nimport { SearchComponentProps } from './search-component';\nimport useSearch from './use-search';\n\ntype Props = {\n className: string;\n role?: string;\n};\n\nconst Search: React.FC<Props> = ({ className, ...other }) => {\n const {\n showSearchButton,\n showClearButton,\n role = 'search',\n autoFocus,\n placeholder,\n searchButtonLabel,\n clearButtonLabel,\n ariaLabel,\n route: searchRoute = 'search',\n incremental = true,\n showChildren = false,\n quickFilter,\n quickFilters: quickFiltersEnabled,\n filterBadges,\n } = useProperties<SearchComponentProps>();\n const { params } = useRouteData();\n const [hasFocus, setHasFocus] = useState(false);\n const [phrase, setPhrase] = useState(params.phrase || '');\n const [showFilterBadges, setShowFilterBadges] = useState({\n guideCategory: false,\n tag: false,\n });\n const container = useContainer();\n const children = useChildren();\n const dispatch = useDispatch();\n const { position: filterBadgePosition = 'inside' } =\n typeof filterBadges === 'object' ? filterBadges : {};\n\n useEffect(() => {\n const { guideCategory, tag } = params;\n const showGuideCategory =\n typeof filterBadges === 'object' ? !!filterBadges.guideCategory : !!filterBadges;\n const showTag = typeof filterBadges === 'object' ? !!filterBadges.tag : !!filterBadges;\n\n setShowFilterBadges({\n guideCategory: showGuideCategory && !!guideCategory,\n tag: showTag && !!tag,\n });\n }, [filterBadges, params]);\n\n // Remove quick-filter symbol, quick-filter phrase\n // and close quick-filter when route changed\n useWidgetEvent(\n 'router:changed',\n () => {\n if (quickFilter) {\n const { open, symbol } = quickFilter;\n\n if (open) {\n if (symbol) {\n const cleaned = phrase.replace(phrase.slice(phrase.indexOf(symbol)), '');\n setPhrase(cleaned);\n }\n\n dispatch('quick-filter:close');\n }\n }\n },\n [quickFilter, phrase, setPhrase, dispatch]\n );\n\n const [search, clear, elem] = useSearch(phrase, params, !!incremental);\n\n useEffect(() => {\n setPhrase(params.phrase || '');\n }, [params.phrase]);\n\n const onChange = useCallback(\n (value: string) => {\n setPhrase(value);\n },\n [setPhrase]\n );\n\n const onEscape = useCallback(() => {\n dispatch('quick-filter:close').then(() => clear(true));\n }, [dispatch, clear]);\n\n const autoFocusHandler = useCallback(() => {\n if (autoFocus && !hasFocus) {\n elem.current?.getElementsByTagName('input')[0]?.focus();\n }\n }, [autoFocus, hasFocus, elem]);\n\n const onClearButtonClick = useCallback(() => {\n container.getAsync('router').then((router: RoutingService) => {\n const initialRoute = router.getInitialRoute();\n const currentRoute = router.getRouteData();\n // if we already are on the initial route\n // and it's not the search route, clear the search instead of navigate\n if (initialRoute?.name === currentRoute.name && initialRoute?.name !== searchRoute) {\n setPhrase('');\n } else {\n clear(true);\n }\n });\n }, [container, setPhrase, clear]);\n\n const renderFilterBadges = (position: 'inside' | 'below') => {\n if (position !== filterBadgePosition) {\n return null;\n }\n if (!!showFilterBadges.guideCategory || !!showFilterBadges.tag) {\n return (\n <FilterBadges\n position={position}\n inputHasFocus={hasFocus}\n showGuideCategory={showFilterBadges.guideCategory}\n showTag={showFilterBadges.tag}\n searchContainerRef={elem.current}\n />\n );\n }\n };\n\n useTransitionEnd(autoFocusHandler);\n\n const showClear =\n showClearButton && (showFilterBadges.guideCategory || showFilterBadges.tag || phrase);\n const quickFilterAccessibilityProps = quickFiltersEnabled\n ? convertToStringAttributes({\n role: 'combobox',\n 'aria-autocomplete': 'list',\n autoComplete: 'off',\n 'aria-haspopup': 'listbox',\n })\n : {};\n\n return (\n <StyledSearchWrapper\n {...other}\n ref={elem}\n role={role}\n className={appendClassNames(className, 'humany-search')}\n data-has-phrase={!!phrase}\n data-has-focus={hasFocus}\n data-has-search-symbol={showSearchButton ? 'true' : 'false'}\n >\n <Inner\n action=\".\"\n onSubmit={(e: any) => {\n e.preventDefault();\n elem.current?.getElementsByTagName('input')[0]?.blur();\n }}\n data-has-focus={hasFocus}\n >\n {showSearchButton && (\n <SearchButton\n aria-label={searchButtonLabel}\n type=\"submit\"\n title={searchButtonLabel}\n disabled={!phrase}\n onClick={search}\n data-has-phrase={!!phrase}\n data-has-focus={hasFocus}\n >\n <SymbolBadge size={32} symbol={{ type: 'Svg', content: 'search' }} />\n </SearchButton>\n )}\n {renderFilterBadges('inside')}\n <Input\n crossOrigin={undefined}\n type=\"search\"\n aria-label={ariaLabel}\n {...quickFilterAccessibilityProps}\n placeholder={\n showFilterBadges.guideCategory || showFilterBadges.tag ? '' : placeholder\n }\n onFocusChange={setHasFocus}\n onEscape={onEscape}\n onEnter={search}\n onChange={onChange}\n value={phrase}\n />\n {showClear && (\n <ClearButton\n aria-label={clearButtonLabel}\n type=\"reset\"\n hasFocus={hasFocus}\n title={clearButtonLabel}\n onClick={onClearButtonClick}\n >\n <SymbolBadge size={27} symbol={{ type: 'Svg', content: 'clear' }} />\n </ClearButton>\n )}\n {showChildren &&\n !showClear &&\n children.map((child) => (\n <Component key={child.id} id={child.id} branch=\"default\" />\n ))}\n <QuickFilter\n inputHasFocus={hasFocus}\n phrase={phrase}\n searchContainerRef={elem.current}\n />\n </Inner>\n {renderFilterBadges('below')}\n </StyledSearchWrapper>\n );\n};\n\nexport default Search;\n\nconst StyledSearchWrapper = styled.div<\n {\n 'data-has-focus': boolean;\n 'data-has-phrase': boolean;\n 'data-has-search-symbol': 'true' | 'false';\n } & any\n>`\n ${contentBox};\n width: 100%;\n padding: ${(p) => p.theme.sizes?.large};\n\n input {\n background-color: transparent;\n border: none;\n outline: none;\n min-width: 25%;\n flex: 1;\n font-size: ${(p) => p.theme.fonts?.normal};\n font-weight: 300;\n font-style: italic;\n padding: 1em 0;\n color: ${(p) => p.theme.colors?.text};\n -webkit-appearance: none;\n\n ${(p) => p['data-has-search-symbol'] === 'true' && `text-indent: ${p.theme.sizes?.normal};`}\n\n ::placeholder {\n color: ${(p) => p.theme.colors?.text};\n }\n /* removes the 'X' from IE */\n &[type='search']::-ms-clear {\n display: none;\n width: 0;\n height: 0;\n }\n &[type='search']::-ms-reveal {\n display: none;\n width: 0;\n height: 0;\n }\n\n /* removes the 'X' from Chrome */\n &[type='search']::-webkit-search-decoration,\n &[type='search']::-webkit-search-cancel-button,\n &[type='search']::-webkit-search-results-button,\n &[type='search']::-webkit-search-results-decoration {\n display: none;\n }\n\n &:focus {\n outline: none;\n }\n }\n\n button {\n background: transparent;\n border: none;\n padding: 0;\n font-size: ${(p) => p.theme.fonts?.large};\n transition: color 200ms ease-out;\n color: ${(p) =>\n p['data-has-focus'] || p['data-has-phrase'] ? p.theme.colors?.primary : '#000000'};\n cursor: pointer;\n > svg {\n height: 100%;\n }\n }\n`;\n\nconst Inner = styled.form<{ 'data-has-focus': boolean } & any>`\n display: flex;\n flex-wrap: nowrap;\n align-items: center;\n border: ${(p) => p.theme.inputBorder};\n border-radius: ${(p) => p.theme.borderRadius};\n background-color: #ffffff;\n position: relative;\n padding: 0 ${(p) => p.theme.sizes?.normal};\n\n ${(p) =>\n p['data-has-focus'] &&\n css`\n ${p.theme.accessibility?.isTabbing\n ? borderTabStyle(p)\n : `\n border-color: ${p.theme.colors?.primary};\n outline: none;\n input {\n outline: none;\n }\n `}\n `};\n`;\n\nconst SearchButton = styled(Button)<{\n 'data-has-focus': boolean;\n 'data-has-phrase': boolean;\n}>`\n padding: 0;\n height: 2em;\n\n svg {\n circle,\n line {\n stroke: ${(p) => (p['data-has-focus'] ? p.theme.colors?.primary : '#000000')};\n }\n }\n`;\n\nconst ClearButton = styled(Button)<{ hasFocus: boolean } & any>`\n &:focus-visible svg {\n ${borderTabStyle}\n }\n\n svg {\n vertical-align: top;\n\n circle,\n line,\n path {\n stroke: ${(p) => (p.hasFocus ? p.theme.colors?.primary : p.theme.colors?.text)};\n }\n }\n`;\n"],"names":["FilterBadge","_a","_b","text","className","filterType","handleClick","deleteAriaLabel","p","__objRest","ref","useRef","isFocused","setIsFocused","useState","React","Text","appendClassNames","e","Link","__spreadProps","__spreadValues","SymbolBadge","FilterBadges","inputHasFocus","searchContainerRef","showTag","showGuideCategory","position","activeFilterBadges","deleteFilterBadgeAriaLabel","useProperties","dispatch","useDispatch","name","params","useRouteData","isNavigatingWithKeyBoard","setIsNavigatingWithKeyboard","onKeyDown","useCallback","event","key","useEventListener","guideCategory","tag","tooltip","getFocusedFilterBadge","container","badges","handleFilterBadgeClick","id","keyboardNavigation","direction","inputElem","currentFocusedIndex","toFocus","useKeyPress","focusedBadgeIndex","isAtBeginningOfInput","isFocusingAFilterBadge","filtersToRemove","isFocusingInput","lastTag","renderBadge","type","StyledFilterBadge","tagItem","excludedIds","acc","t","Wrapper","Tooltip","FilterBadges$1","styled","css","borderTabStyle","match","title","phrase","filterItems","items","cloned","deepClone","i","matchTrail","buildMatchTrail","recursiveFilter","c","fn","categories","matching","flatten","res","trail","categoryTrail","result","category","getFocusedIndex","elem","anchors","a","getInputElem","focusInput","QuickFilterItemList","filterPhrase","rawItems","filterContainer","searchContainer","setItems","first","setFirst","quickFilters","autoSelect","useEffect","handleItemClicked","item","tagIds","data","buildListProps","level","StyledLink","Title","focusedIndex","focusFirst","focusLast","focusNext","focusPrev","ItemTree","QuickFilterItemList$1","matches","symbol","createTitle","index","start","bold","end","disabledCss","focused","_c","_d","QuickFilter","quickFilter","noMatchesLabel","useScroll","useContainer","events","wrapperRef","setWrapperRef","node","open","loading","filteredItems","useMemo","activeTags","Inner","NoMatches","Loader","contentBox","filterChanged","newValue","oldValue","arr1","arr2","useSearch","debounce","filterBadges","incremental","debouncedPhrase","useDebounce","previousDebouncedPhrase","usePrevious","previousFilters","dispatchSearch","value","filtersChanged","dispatchClear","navigateToHome","removeFilterKeywords","input","submitSearch","arg","activeElement","isSearching","cleanedPhrase","previousPhrase","quickFiltersGuideCategory","quickFiltersTag","Search","other","showSearchButton","showClearButton","role","autoFocus","placeholder","searchButtonLabel","clearButtonLabel","ariaLabel","searchRoute","showChildren","quickFiltersEnabled","hasFocus","setHasFocus","setPhrase","showFilterBadges","setShowFilterBadges","children","useChildren","filterBadgePosition","useWidgetEvent","cleaned","search","clear","onChange","onEscape","autoFocusHandler","onClearButtonClick","router","initialRoute","currentRoute","renderFilterBadges","useTransitionEnd","showClear","quickFilterAccessibilityProps","convertToStringAttributes","StyledSearchWrapper","SearchButton","Input","ClearButton","child","Component","Button"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@telia-ace/knowledge-widget-components-search",
|
|
3
|
-
"version": "1.0.46
|
|
3
|
+
"version": "1.0.46",
|
|
4
4
|
"description": "Search component for ACE Knowledge Widgets.",
|
|
5
5
|
"license": "SEE LICENSE IN LICENSE.txt",
|
|
6
6
|
"author": "Telia Company AB",
|
|
@@ -21,13 +21,13 @@
|
|
|
21
21
|
},
|
|
22
22
|
"sideEffects": false,
|
|
23
23
|
"dependencies": {
|
|
24
|
-
"@telia-ace/knowledge-data-client": "1.0.9
|
|
25
|
-
"@telia-ace/knowledge-widget-core": "1.0.42
|
|
26
|
-
"@telia-ace/knowledge-widget-ui": "1.0.48
|
|
27
|
-
"@telia-ace/widget-routing": "^1.0.28
|
|
28
|
-
"@telia-ace/widget-types-grid": "^1.0.36
|
|
29
|
-
"@telia-ace/widget-utilities": "^1.0.16
|
|
30
|
-
"@webprovisions/platform": "^1.1.
|
|
24
|
+
"@telia-ace/knowledge-data-client": "1.0.9",
|
|
25
|
+
"@telia-ace/knowledge-widget-core": "1.0.42",
|
|
26
|
+
"@telia-ace/knowledge-widget-ui": "1.0.48",
|
|
27
|
+
"@telia-ace/widget-routing": "^1.0.28",
|
|
28
|
+
"@telia-ace/widget-types-grid": "^1.0.36",
|
|
29
|
+
"@telia-ace/widget-utilities": "^1.0.16",
|
|
30
|
+
"@webprovisions/platform": "^1.1.4"
|
|
31
31
|
},
|
|
32
32
|
"peerDependencies": {
|
|
33
33
|
"@emotion/react": "^11.10.5",
|
|
@@ -38,7 +38,7 @@
|
|
|
38
38
|
"devDependencies": {
|
|
39
39
|
"@emotion/react": "^11.11.1",
|
|
40
40
|
"@emotion/styled": "^11.11.0",
|
|
41
|
-
"@types/react": "^18.2.
|
|
41
|
+
"@types/react": "^18.2.20",
|
|
42
42
|
"@types/react-dom": "^18.2.7",
|
|
43
43
|
"react": "^18.2.0",
|
|
44
44
|
"react-dom": "^18.2.0"
|