@gooddata/sdk-ui-semantic-search 10.8.0-alpha.2 → 10.8.0-alpha.21

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 (49) hide show
  1. package/esm/ResultsItem.d.ts +5 -5
  2. package/esm/ResultsItem.d.ts.map +1 -1
  3. package/esm/ResultsItem.js +33 -9
  4. package/esm/ResultsItem.js.map +1 -1
  5. package/esm/SearchResultsDropdownList.d.ts +3 -3
  6. package/esm/SearchResultsDropdownList.d.ts.map +1 -1
  7. package/esm/SearchResultsDropdownList.js +3 -5
  8. package/esm/SearchResultsDropdownList.js.map +1 -1
  9. package/esm/SemanticSearch.d.ts.map +1 -1
  10. package/esm/SemanticSearch.js +11 -8
  11. package/esm/SemanticSearch.js.map +1 -1
  12. package/esm/hooks/useListSelector.d.ts +1 -1
  13. package/esm/hooks/useListSelector.d.ts.map +1 -1
  14. package/esm/hooks/useListSelector.js +8 -7
  15. package/esm/hooks/useListSelector.js.map +1 -1
  16. package/esm/hooks/useSemanticSearch.d.ts +2 -2
  17. package/esm/hooks/useSemanticSearch.d.ts.map +1 -1
  18. package/esm/hooks/useSemanticSearch.js +11 -2
  19. package/esm/hooks/useSemanticSearch.js.map +1 -1
  20. package/esm/internal/HeaderSearchButton.d.ts +8 -0
  21. package/esm/internal/HeaderSearchButton.d.ts.map +1 -0
  22. package/esm/internal/HeaderSearchButton.js +37 -0
  23. package/esm/internal/HeaderSearchButton.js.map +1 -0
  24. package/esm/internal/{SemanticSearchOverlay.d.ts → SearchOverlay.d.ts} +6 -5
  25. package/esm/internal/SearchOverlay.d.ts.map +1 -0
  26. package/esm/internal/{SemanticSearchOverlay.js → SearchOverlay.js} +9 -5
  27. package/esm/internal/SearchOverlay.js.map +1 -0
  28. package/esm/internal/SearchResultsList.d.ts +3 -3
  29. package/esm/internal/SearchResultsList.d.ts.map +1 -1
  30. package/esm/internal/SearchResultsList.js +2 -4
  31. package/esm/internal/SearchResultsList.js.map +1 -1
  32. package/esm/internal.d.ts +1 -1
  33. package/esm/internal.d.ts.map +1 -1
  34. package/esm/internal.js +1 -1
  35. package/esm/internal.js.map +1 -1
  36. package/esm/sdk-ui-semantic-search.d.ts +3 -2
  37. package/esm/utils/getUIPath.d.ts +14 -0
  38. package/esm/utils/getUIPath.d.ts.map +1 -0
  39. package/esm/utils/getUIPath.js +37 -0
  40. package/esm/utils/getUIPath.js.map +1 -0
  41. package/package.json +7 -6
  42. package/styles/css/internal.css +112 -4
  43. package/styles/css/internal.css.map +1 -1
  44. package/styles/css/main.css +43 -3
  45. package/styles/css/main.css.map +1 -1
  46. package/styles/scss/internal.scss +77 -2
  47. package/styles/scss/main.scss +50 -4
  48. package/esm/internal/SemanticSearchOverlay.d.ts.map +0 -1
  49. package/esm/internal/SemanticSearchOverlay.js.map +0 -1
@@ -1,5 +1,5 @@
1
1
  import * as React from "react";
2
- import { ISemanticSearchResultItem } from "@gooddata/sdk-model";
2
+ import { ISemanticSearchResultItemWithUrl } from "@gooddata/sdk-model";
3
3
  export declare const ITEM_HEIGHT = 45;
4
4
  /**
5
5
  * Props for the ResultsItem component.
@@ -9,7 +9,7 @@ export type ResultsItemProps = {
9
9
  /**
10
10
  * The item to render.
11
11
  */
12
- item: ISemanticSearchResultItem;
12
+ item: ISemanticSearchResultItemWithUrl;
13
13
  /**
14
14
  * The height of the item.
15
15
  */
@@ -21,15 +21,15 @@ export type ResultsItemProps = {
21
21
  /**
22
22
  * Whether the item is selected.
23
23
  */
24
- selected: boolean;
24
+ active: boolean;
25
25
  /**
26
26
  * Callback to trigger when the item is hovered.
27
27
  */
28
- onHover: () => void;
28
+ onHover: (item: ISemanticSearchResultItemWithUrl) => void;
29
29
  /**
30
30
  * Callback to trigger when the item is clicked.
31
31
  */
32
- onClick: () => void;
32
+ onSelect: (item: ISemanticSearchResultItemWithUrl) => void;
33
33
  };
34
34
  /**
35
35
  * A single result item in the search results.
@@ -1 +1 @@
1
- {"version":3,"file":"ResultsItem.d.ts","sourceRoot":"","sources":["../src/ResultsItem.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,EAAE,yBAAyB,EAAE,MAAM,qBAAqB,CAAC;AAGhE,eAAO,MAAM,WAAW,KAAK,CAAC;AAE9B;;;GAGG;AACH,MAAM,MAAM,gBAAgB,GAAG;IAC3B;;OAEG;IACH,IAAI,EAAE,yBAAyB,CAAC;IAChC;;OAEG;IACH,MAAM,EAAE,MAAM,CAAC;IACf;;OAEG;IACH,KAAK,EAAE,MAAM,CAAC;IACd;;OAEG;IACH,QAAQ,EAAE,OAAO,CAAC;IAClB;;OAEG;IACH,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB;;OAEG;IACH,OAAO,EAAE,MAAM,IAAI,CAAC;CACvB,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,WAAW,EAAE,KAAK,CAAC,EAAE,CAAC,gBAAgB,CAyBlD,CAAC"}
1
+ {"version":3,"file":"ResultsItem.d.ts","sourceRoot":"","sources":["../src/ResultsItem.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,EAAE,gCAAgC,EAAE,MAAM,qBAAqB,CAAC;AAKvE,eAAO,MAAM,WAAW,KAAK,CAAC;AAG9B;;;GAGG;AACH,MAAM,MAAM,gBAAgB,GAAG;IAC3B;;OAEG;IACH,IAAI,EAAE,gCAAgC,CAAC;IACvC;;OAEG;IACH,MAAM,EAAE,MAAM,CAAC;IACf;;OAEG;IACH,KAAK,EAAE,MAAM,CAAC;IACd;;OAEG;IACH,MAAM,EAAE,OAAO,CAAC;IAChB;;OAEG;IACH,OAAO,EAAE,CAAC,IAAI,EAAE,gCAAgC,KAAK,IAAI,CAAC;IAC1D;;OAEG;IACH,QAAQ,EAAE,CAAC,IAAI,EAAE,gCAAgC,KAAK,IAAI,CAAC;CAC9D,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,WAAW,EAAE,KAAK,CAAC,EAAE,CAAC,gBAAgB,CA8ClD,CAAC"}
@@ -1,30 +1,54 @@
1
1
  // (C) 2024 GoodData Corporation
2
2
  import * as React from "react";
3
3
  import classnames from "classnames";
4
- import { Icon, Typography } from "@gooddata/sdk-ui-kit";
4
+ import { Bubble, BubbleHoverTrigger, EllipsisText, Icon, Typography } from "@gooddata/sdk-ui-kit";
5
+ import { useTheme } from "@gooddata/sdk-ui-theme-provider";
6
+ import { FormattedMessage } from "react-intl";
5
7
  export const ITEM_HEIGHT = 45;
8
+ const BUBBLE_ALIGN_POINTS = [{ align: "bc tr", offset: { x: 2, y: -4 } }];
6
9
  /**
7
10
  * A single result item in the search results.
8
11
  * @internal
9
12
  */
10
- export const ResultsItem = ({ item, onHover, onClick, selected }) => {
13
+ export const ResultsItem = ({ item, onHover, onSelect, active }) => {
14
+ const theme = useTheme();
11
15
  const onMouseEnter = (e) => {
12
16
  // Prevent multiple triggers
13
17
  if (e.target !== e.currentTarget) {
14
18
  return;
15
19
  }
16
- onHover();
20
+ onHover(item);
21
+ };
22
+ const onClick = (e) => {
23
+ e.preventDefault();
24
+ onSelect(item);
17
25
  };
18
26
  const className = classnames({
19
27
  "gd-semantic-search__results-item": true,
20
- "gd-semantic-search__results-item--selected": selected,
28
+ "gd-semantic-search__results-item--active": active,
21
29
  });
22
30
  // Use mouse enter with the target check instead of hover to prevent multiple triggers
23
- // Use mouse down instead of click to prevent the dialog from disappearing before the click event is caught
24
- return (React.createElement("div", { className: className, onMouseEnter: onMouseEnter, onMouseDown: onClick },
25
- React.createElement("div", { className: "gd-semantic-search__results-item__icon" }, renderItemIcon(item)),
26
- React.createElement("div", { className: "gd-semantic-search__results-item__text" },
27
- React.createElement(Typography, { tagName: "p" }, item.title))));
31
+ return (React.createElement("a", { className: className, onMouseEnter: onMouseEnter, onClick: onClick, href: item.url },
32
+ React.createElement("span", { className: "gd-semantic-search__results-item__icon" }, renderItemIcon(item)),
33
+ React.createElement("span", { className: "gd-semantic-search__results-item__text" }, item.title),
34
+ React.createElement("span", { className: "gd-semantic-search__results-item__details" },
35
+ React.createElement(BubbleHoverTrigger, { eventsOnBubble: true },
36
+ React.createElement(Icon.QuestionMark, { color: theme?.palette?.complementary?.c7 ?? "#6D7680" }),
37
+ React.createElement(Bubble, { className: "bubble-light gd-semantic-search__bubble", alignPoints: BUBBLE_ALIGN_POINTS, arrowStyle: { display: "none" } },
38
+ React.createElement("div", { className: "gd-semantic-search__results-item__details__contents" },
39
+ React.createElement(Typography, { tagName: "h3" }, item.title),
40
+ renderIfHasDescription(item),
41
+ React.createElement(FormattedMessage, { tagName: "h4", id: "semantic-search.id" }),
42
+ React.createElement(Typography, { tagName: "p" }, item.id)))))));
43
+ };
44
+ /**
45
+ * Render the description if it is different from the title.
46
+ */
47
+ const renderIfHasDescription = (item) => {
48
+ if (item.description && item.description !== item.title) {
49
+ return React.createElement(EllipsisText, { maxLines: 7, text: item.description });
50
+ }
51
+ return null;
28
52
  };
29
53
  /**
30
54
  * Pick an icon according to the item type.
@@ -1 +1 @@
1
- {"version":3,"file":"ResultsItem.js","sourceRoot":"","sources":["../src/ResultsItem.tsx"],"names":[],"mappings":"AAAA,gCAAgC;AAEhC,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,UAAU,MAAM,YAAY,CAAC;AAEpC,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAExD,MAAM,CAAC,MAAM,WAAW,GAAG,EAAE,CAAC;AAiC9B;;;GAGG;AACH,MAAM,CAAC,MAAM,WAAW,GAA+B,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE;IAC5F,MAAM,YAAY,GAAG,CAAC,CAAmC,EAAE,EAAE;QACzD,4BAA4B;QAC5B,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,aAAa,EAAE,CAAC;YAC/B,OAAO;QACX,CAAC;QAED,OAAO,EAAE,CAAC;IACd,CAAC,CAAC;IAEF,MAAM,SAAS,GAAG,UAAU,CAAC;QACzB,kCAAkC,EAAE,IAAI;QACxC,4CAA4C,EAAE,QAAQ;KACzD,CAAC,CAAC;IAEH,sFAAsF;IACtF,2GAA2G;IAC3G,OAAO,CACH,6BAAK,SAAS,EAAE,SAAS,EAAE,YAAY,EAAE,YAAY,EAAE,WAAW,EAAE,OAAO;QACvE,6BAAK,SAAS,EAAC,wCAAwC,IAAE,cAAc,CAAC,IAAI,CAAC,CAAO;QACpF,6BAAK,SAAS,EAAC,wCAAwC;YACnD,oBAAC,UAAU,IAAC,OAAO,EAAC,GAAG,IAAE,IAAI,CAAC,KAAK,CAAc,CAC/C,CACJ,CACT,CAAC;AACN,CAAC,CAAC;AAEF;;GAEG;AACH,MAAM,cAAc,GAAG,CAAC,IAA+B,EAAE,EAAE;IACvD,QAAQ,IAAI,CAAC,IAAI,EAAE,CAAC;QAChB,KAAK,WAAW;YACZ,OAAO,oBAAC,IAAI,CAAC,SAAS,OAAG,CAAC;QAC9B,KAAK,eAAe;YAChB,OAAO,oBAAC,IAAI,CAAC,OAAO,OAAG,CAAC;QAC5B,KAAK,SAAS;YACV,OAAO,oBAAC,IAAI,CAAC,OAAO,OAAG,CAAC;QAC5B,KAAK,WAAW;YACZ,OAAO,oBAAC,IAAI,CAAC,SAAS,OAAG,CAAC;QAC9B,KAAK,OAAO;YACR,OAAO,oBAAC,IAAI,CAAC,KAAK,OAAG,CAAC;QAC1B,KAAK,MAAM;YACP,OAAO,oBAAC,IAAI,CAAC,IAAI,OAAG,CAAC;QACzB,KAAK,QAAQ;YACT,OAAO,oBAAC,IAAI,CAAC,MAAM,OAAG,CAAC;QAC3B,KAAK,MAAM;YACP,OAAO,oBAAC,IAAI,CAAC,IAAI,OAAG,CAAC;QACzB;YACI,OAAO,IAAI,CAAC;IACpB,CAAC;AACL,CAAC,CAAC"}
1
+ {"version":3,"file":"ResultsItem.js","sourceRoot":"","sources":["../src/ResultsItem.tsx"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  import * as React from "react";
2
- import { ISemanticSearchResultItem } from "@gooddata/sdk-model";
2
+ import { ISemanticSearchResultItemWithUrl } from "@gooddata/sdk-model";
3
3
  /**
4
4
  * Search results props.
5
5
  * @internal
@@ -8,7 +8,7 @@ type SearchResultsDropdownListProps = {
8
8
  /**
9
9
  * Search result items.
10
10
  */
11
- searchResults: ISemanticSearchResultItem[];
11
+ searchResults: ISemanticSearchResultItemWithUrl[];
12
12
  /**
13
13
  * Loading flag.
14
14
  */
@@ -24,7 +24,7 @@ type SearchResultsDropdownListProps = {
24
24
  /**
25
25
  * Callback for item selection.
26
26
  */
27
- onSelect: (item: ISemanticSearchResultItem) => void;
27
+ onSelect: (item: ISemanticSearchResultItemWithUrl) => void;
28
28
  };
29
29
  /**
30
30
  * A dropdown list with the search results.
@@ -1 +1 @@
1
- {"version":3,"file":"SearchResultsDropdownList.d.ts","sourceRoot":"","sources":["../src/SearchResultsDropdownList.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,yBAAyB,EAAE,MAAM,qBAAqB,CAAC;AAKhE;;;GAGG;AACH,KAAK,8BAA8B,GAAG;IAClC;;OAEG;IACH,aAAa,EAAE,yBAAyB,EAAE,CAAC;IAC3C;;OAEG;IACH,aAAa,EAAE,OAAO,CAAC;IACvB;;OAEG;IACH,QAAQ,EAAE,OAAO,CAAC;IAClB;;OAEG;IACH,KAAK,EAAE,MAAM,CAAC;IACd;;OAEG;IACH,QAAQ,EAAE,CAAC,IAAI,EAAE,yBAAyB,KAAK,IAAI,CAAC;CACvD,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,yBAAyB,EAAE,KAAK,CAAC,EAAE,CAAC,8BAA8B,CA+B9E,CAAC"}
1
+ {"version":3,"file":"SearchResultsDropdownList.d.ts","sourceRoot":"","sources":["../src/SearchResultsDropdownList.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,gCAAgC,EAAE,MAAM,qBAAqB,CAAC;AAKvE;;;GAGG;AACH,KAAK,8BAA8B,GAAG;IAClC;;OAEG;IACH,aAAa,EAAE,gCAAgC,EAAE,CAAC;IAClD;;OAEG;IACH,aAAa,EAAE,OAAO,CAAC;IACvB;;OAEG;IACH,QAAQ,EAAE,OAAO,CAAC;IAClB;;OAEG;IACH,KAAK,EAAE,MAAM,CAAC;IACd;;OAEG;IACH,QAAQ,EAAE,CAAC,IAAI,EAAE,gCAAgC,KAAK,IAAI,CAAC;CAC9D,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,yBAAyB,EAAE,KAAK,CAAC,EAAE,CAAC,8BAA8B,CA8B9E,CAAC"}
@@ -8,11 +8,9 @@ import { useListSelector } from "./hooks/index.js";
8
8
  * @internal
9
9
  */
10
10
  export const SearchResultsDropdownList = ({ searchResults, searchLoading, isMobile, width, onSelect, }) => {
11
- const [selected, setSelected] = useListSelector(searchResults, onSelect);
12
- return (React.createElement(DropdownList, { width: width, isMobile: isMobile, isLoading: searchLoading, itemHeight: ITEM_HEIGHT, renderItem: ({ rowIndex, item, ...props }) => {
13
- return (React.createElement(ResultsItem, { onHover: () => setSelected(rowIndex), onClick: () => {
14
- onSelect(item);
15
- }, selected: rowIndex === selected, item: item, ...props }));
11
+ const [active, setActive] = useListSelector(searchResults, onSelect);
12
+ return (React.createElement(DropdownList, { width: width, isMobile: isMobile, isLoading: searchLoading, itemHeight: ITEM_HEIGHT, renderItem: ({ item, width, height }) => {
13
+ return (React.createElement(ResultsItem, { onHover: setActive, onSelect: onSelect, active: item === active, item: item, width: width, height: height }));
16
14
  }, items: searchResults }));
17
15
  };
18
16
  //# sourceMappingURL=SearchResultsDropdownList.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"SearchResultsDropdownList.js","sourceRoot":"","sources":["../src/SearchResultsDropdownList.tsx"],"names":[],"mappings":"AAAA,gCAAgC;AAEhC,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC5D,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AA6BnD;;;GAGG;AACH,MAAM,CAAC,MAAM,yBAAyB,GAA6C,CAAC,EAChF,aAAa,EACb,aAAa,EACb,QAAQ,EACR,KAAK,EACL,QAAQ,GACX,EAAE,EAAE;IACD,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,eAAe,CAAC,aAAa,EAAE,QAAQ,CAAC,CAAC;IAEzE,OAAO,CACH,oBAAC,YAAY,IACT,KAAK,EAAE,KAAK,EACZ,QAAQ,EAAE,QAAQ,EAClB,SAAS,EAAE,aAAa,EACxB,UAAU,EAAE,WAAW,EACvB,UAAU,EAAE,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,GAAG,KAAK,EAAE,EAAE,EAAE;YACzC,OAAO,CACH,oBAAC,WAAW,IACR,OAAO,EAAE,GAAG,EAAE,CAAC,WAAW,CAAC,QAAQ,CAAC,EACpC,OAAO,EAAE,GAAG,EAAE;oBACV,QAAQ,CAAC,IAAI,CAAC,CAAC;gBACnB,CAAC,EACD,QAAQ,EAAE,QAAQ,KAAK,QAAQ,EAC/B,IAAI,EAAE,IAAI,KACN,KAAK,GACX,CACL,CAAC;QACN,CAAC,EACD,KAAK,EAAE,aAAa,GACtB,CACL,CAAC;AACN,CAAC,CAAC"}
1
+ {"version":3,"file":"SearchResultsDropdownList.js","sourceRoot":"","sources":["../src/SearchResultsDropdownList.tsx"],"names":[],"mappings":"AAAA,gCAAgC;AAEhC,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC5D,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AA6BnD;;;GAGG;AACH,MAAM,CAAC,MAAM,yBAAyB,GAA6C,CAAC,EAChF,aAAa,EACb,aAAa,EACb,QAAQ,EACR,KAAK,EACL,QAAQ,GACX,EAAE,EAAE;IACD,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,eAAe,CAAC,aAAa,EAAE,QAAQ,CAAC,CAAC;IAErE,OAAO,CACH,oBAAC,YAAY,IACT,KAAK,EAAE,KAAK,EACZ,QAAQ,EAAE,QAAQ,EAClB,SAAS,EAAE,aAAa,EACxB,UAAU,EAAE,WAAW,EACvB,UAAU,EAAE,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE;YACpC,OAAO,CACH,oBAAC,WAAW,IACR,OAAO,EAAE,SAAS,EAClB,QAAQ,EAAE,QAAQ,EAClB,MAAM,EAAE,IAAI,KAAK,MAAM,EACvB,IAAI,EAAE,IAAI,EACV,KAAK,EAAE,KAAK,EACZ,MAAM,EAAE,MAAM,GAChB,CACL,CAAC;QACN,CAAC,EACD,KAAK,EAAE,aAAa,GACtB,CACL,CAAC;AACN,CAAC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"SemanticSearch.d.ts","sourceRoot":"","sources":["../src/SemanticSearch.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,EAAE,uBAAuB,EAAE,yBAAyB,EAAE,MAAM,qBAAqB,CAAC;AAIzF,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAG/D;;;GAGG;AACH,MAAM,MAAM,uBAAuB,GAAG;IAClC;;OAEG;IACH,OAAO,CAAC,EAAE,kBAAkB,CAAC;IAC7B;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;OAEG;IACH,QAAQ,EAAE,CAAC,IAAI,EAAE,yBAAyB,KAAK,IAAI,CAAC;IACpD;;OAEG;IACH,OAAO,CAAC,EAAE,CAAC,YAAY,EAAE,MAAM,KAAK,IAAI,CAAC;IACzC;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;OAEG;IACH,WAAW,CAAC,EAAE,uBAAuB,EAAE,CAAC;IACxC;;OAEG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB;;OAEG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;OAEG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;CACxB,CAAC;AAmGF;;;GAGG;AACH,MAAM,MAAM,mBAAmB,GAAG,uBAAuB,GAAG;IACxD,MAAM,CAAC,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,cAAc,EAAE,KAAK,CAAC,EAAE,CAAC,mBAAmB,CAMxD,CAAC"}
1
+ {"version":3,"file":"SemanticSearch.d.ts","sourceRoot":"","sources":["../src/SemanticSearch.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,EAAE,uBAAuB,EAAE,yBAAyB,EAAE,MAAM,qBAAqB,CAAC;AAIzF,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAG/D;;;GAGG;AACH,MAAM,MAAM,uBAAuB,GAAG;IAClC;;OAEG;IACH,OAAO,CAAC,EAAE,kBAAkB,CAAC;IAC7B;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;OAEG;IACH,QAAQ,EAAE,CAAC,IAAI,EAAE,yBAAyB,KAAK,IAAI,CAAC;IACpD;;OAEG;IACH,OAAO,CAAC,EAAE,CAAC,YAAY,EAAE,MAAM,KAAK,IAAI,CAAC;IACzC;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;OAEG;IACH,WAAW,CAAC,EAAE,uBAAuB,EAAE,CAAC;IACxC;;OAEG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB;;OAEG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;OAEG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;CACxB,CAAC;AAiGF;;;GAGG;AACH,MAAM,MAAM,mBAAmB,GAAG,uBAAuB,GAAG;IACxD,MAAM,CAAC,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,cAAc,EAAE,KAAK,CAAC,EAAE,CAAC,mBAAmB,CAMxD,CAAC"}
@@ -35,23 +35,26 @@ const SemanticSearchCore = ({ backend, workspace, onSelect, onError, objectTypes
35
35
  setWidth(input.offsetWidth);
36
36
  }
37
37
  }, []);
38
- const onItemSelect = React.useCallback((item) => {
39
- onSelect(item);
40
- inputRef.current?.inputNodeRef?.inputNodeRef?.blur();
41
- }, [onSelect]);
42
38
  // Report errors
43
39
  React.useEffect(() => {
44
40
  if (onError && searchStatus === "error") {
45
41
  onError(searchError);
46
42
  }
47
43
  }, [onError, searchError, searchStatus]);
48
- return (React.createElement(Dropdown, { className: classnames("gd-semantic-search", className), closeOnMouseDrag: false, closeOnOutsideClick: false, closeOnParentScroll: false, renderBody: ({ isMobile }) => {
44
+ return (React.createElement(Dropdown, { className: classnames("gd-semantic-search", className), ignoreClicksOnByClass: [
45
+ ".gd-bubble",
46
+ ".gd-semantic-search__results-item",
47
+ ".gd-semantic-search__input",
48
+ ], renderBody: ({ isMobile, closeDropdown }) => {
49
49
  if (!searchResults.length && searchStatus !== "loading") {
50
50
  return null;
51
51
  }
52
- return (React.createElement(SearchResultsDropdownList, { width: width, isMobile: isMobile, searchResults: searchResults, searchLoading: searchStatus === "loading", onSelect: onItemSelect }));
53
- }, renderButton: ({ openDropdown, closeDropdown }) => {
54
- return (React.createElement(Input, { ref: inputRef, placeholder: placeholder, isSearch: true, clearOnEsc: true, value: value, onChange: (e) => setValue(String(e)), onFocus: openDropdown, onBlur: closeDropdown }));
52
+ return (React.createElement(SearchResultsDropdownList, { width: width, isMobile: isMobile, searchResults: searchResults, searchLoading: searchStatus === "loading", onSelect: (item) => {
53
+ onSelect(item);
54
+ closeDropdown();
55
+ } }));
56
+ }, renderButton: ({ openDropdown }) => {
57
+ return (React.createElement(Input, { className: "gd-semantic-search__input", ref: inputRef, placeholder: placeholder, isSearch: true, clearOnEsc: true, value: value, onChange: (e) => setValue(String(e)), onFocus: openDropdown }));
55
58
  } }));
56
59
  };
57
60
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"SemanticSearch.js","sourceRoot":"","sources":["../src/SemanticSearch.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"SemanticSearch.js","sourceRoot":"","sources":["../src/SemanticSearch.tsx"],"names":[],"mappings":"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"}
@@ -3,5 +3,5 @@
3
3
  * calls the onSelect callback when Enter is pressed.
4
4
  * @internal
5
5
  */
6
- export declare const useListSelector: <T>(items: T[], onSelect: (item: T) => void) => [number, (index: number) => void];
6
+ export declare const useListSelector: <T>(items: T[], onSelect: (item: T) => void) => [T, (item: T) => void];
7
7
  //# sourceMappingURL=useListSelector.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"useListSelector.d.ts","sourceRoot":"","sources":["../../src/hooks/useListSelector.ts"],"names":[],"mappings":"AAIA;;;;GAIG;AACH,eAAO,MAAM,eAAe,yCAA+C,IAAI,sBAuCtB,MAAM,KAAK,IAAI,CACvE,CAAC"}
1
+ {"version":3,"file":"useListSelector.d.ts","sourceRoot":"","sources":["../../src/hooks/useListSelector.ts"],"names":[],"mappings":"AAIA;;;;GAIG;AACH,eAAO,MAAM,eAAe,yCAA+C,IAAI,sBAyCb,IAAI,CACrE,CAAC"}
@@ -10,21 +10,22 @@ export const useListSelector = (items, onSelect) => {
10
10
  React.useEffect(() => {
11
11
  setSelected(0);
12
12
  }, [items]);
13
- const doSetSelected = React.useCallback((newValue) => {
14
- setSelected(Math.max(Math.min(newValue, items.length - 1), 0));
15
- }, [items.length]);
13
+ const setSelectedItem = React.useCallback((item) => {
14
+ setSelected(Math.max(Math.min(items.indexOf(item), items.length - 1), 0));
15
+ }, [items]);
16
16
  React.useEffect(() => {
17
17
  const listener = (event) => {
18
18
  if (["ArrowDown", "ArrowUp", "Enter"].indexOf(event.key) === -1)
19
19
  return;
20
+ const setIndex = (index) => setSelected(Math.max(Math.min(index, items.length - 1), 0));
20
21
  event.preventDefault();
21
22
  event.stopImmediatePropagation();
22
23
  switch (event.key) {
23
24
  case "ArrowDown":
24
- doSetSelected(selected + 1);
25
+ setIndex(selected + 1);
25
26
  break;
26
27
  case "ArrowUp":
27
- doSetSelected(selected - 1);
28
+ setIndex(selected - 1);
28
29
  break;
29
30
  case "Enter":
30
31
  onSelect(items[selected]);
@@ -35,7 +36,7 @@ export const useListSelector = (items, onSelect) => {
35
36
  return () => {
36
37
  document.removeEventListener("keydown", listener);
37
38
  };
38
- }, [items, onSelect, selected, doSetSelected]);
39
- return [selected, doSetSelected];
39
+ }, [items, onSelect, selected]);
40
+ return [items[selected], setSelectedItem];
40
41
  };
41
42
  //# sourceMappingURL=useListSelector.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"useListSelector.js","sourceRoot":"","sources":["../../src/hooks/useListSelector.ts"],"names":[],"mappings":"AAAA,gCAAgC;AAEhC,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B;;;;GAIG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,CAAI,KAAe,EAAE,QAA2B,EAAE,EAAE;IAC/E,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAS,CAAC,CAAC,CAAC;IAC1D,KAAK,CAAC,SAAS,CAAC,GAAG,EAAE;QACjB,WAAW,CAAC,CAAC,CAAC,CAAC;IACnB,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;IACZ,MAAM,aAAa,GAAG,KAAK,CAAC,WAAW,CACnC,CAAC,QAAgB,EAAE,EAAE;QACjB,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IACnE,CAAC,EACD,CAAC,KAAK,CAAC,MAAM,CAAC,CACjB,CAAC;IAEF,KAAK,CAAC,SAAS,CAAC,GAAG,EAAE;QACjB,MAAM,QAAQ,GAAG,CAAC,KAAoB,EAAE,EAAE;YACtC,IAAI,CAAC,WAAW,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;gBAAE,OAAO;YAExE,KAAK,CAAC,cAAc,EAAE,CAAC;YACvB,KAAK,CAAC,wBAAwB,EAAE,CAAC;YAEjC,QAAQ,KAAK,CAAC,GAAG,EAAE,CAAC;gBAChB,KAAK,WAAW;oBACZ,aAAa,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC;oBAC5B,MAAM;gBACV,KAAK,SAAS;oBACV,aAAa,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC;oBAC5B,MAAM;gBACV,KAAK,OAAO;oBACR,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC;YAClC,CAAC;QACL,CAAC,CAAC;QAEF,2DAA2D;QAC3D,QAAQ,CAAC,gBAAgB,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;QAE/C,OAAO,GAAG,EAAE;YACR,QAAQ,CAAC,mBAAmB,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;QACtD,CAAC,CAAC;IACN,CAAC,EAAE,CAAC,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,aAAa,CAAC,CAAC,CAAC;IAE/C,OAAO,CAAC,QAAQ,EAAE,aAAa,CAAsC,CAAC;AAC1E,CAAC,CAAC"}
1
+ {"version":3,"file":"useListSelector.js","sourceRoot":"","sources":["../../src/hooks/useListSelector.ts"],"names":[],"mappings":"AAAA,gCAAgC;AAEhC,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B;;;;GAIG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,CAAI,KAAe,EAAE,QAA2B,EAAE,EAAE;IAC/E,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAS,CAAC,CAAC,CAAC;IAC1D,KAAK,CAAC,SAAS,CAAC,GAAG,EAAE;QACjB,WAAW,CAAC,CAAC,CAAC,CAAC;IACnB,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;IACZ,MAAM,eAAe,GAAG,KAAK,CAAC,WAAW,CACrC,CAAC,IAAO,EAAE,EAAE;QACR,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAC9E,CAAC,EACD,CAAC,KAAK,CAAC,CACV,CAAC;IAEF,KAAK,CAAC,SAAS,CAAC,GAAG,EAAE;QACjB,MAAM,QAAQ,GAAG,CAAC,KAAoB,EAAE,EAAE;YACtC,IAAI,CAAC,WAAW,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;gBAAE,OAAO;YAExE,MAAM,QAAQ,GAAG,CAAC,KAAa,EAAE,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;YAEhG,KAAK,CAAC,cAAc,EAAE,CAAC;YACvB,KAAK,CAAC,wBAAwB,EAAE,CAAC;YAEjC,QAAQ,KAAK,CAAC,GAAG,EAAE,CAAC;gBAChB,KAAK,WAAW;oBACZ,QAAQ,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC;oBACvB,MAAM;gBACV,KAAK,SAAS;oBACV,QAAQ,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC;oBACvB,MAAM;gBACV,KAAK,OAAO;oBACR,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC;YAClC,CAAC;QACL,CAAC,CAAC;QAEF,2DAA2D;QAC3D,QAAQ,CAAC,gBAAgB,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;QAE/C,OAAO,GAAG,EAAE;YACR,QAAQ,CAAC,mBAAmB,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;QACtD,CAAC,CAAC;IACN,CAAC,EAAE,CAAC,KAAK,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC;IAEhC,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,eAAe,CAA2B,CAAC;AACxE,CAAC,CAAC"}
@@ -1,4 +1,4 @@
1
- import { ISemanticSearchResultItem, GenAISemanticSearchType } from "@gooddata/sdk-model";
1
+ import { ISemanticSearchResultItemWithUrl, GenAISemanticSearchType } from "@gooddata/sdk-model";
2
2
  import { IAnalyticalBackend } from "@gooddata/sdk-backend-spi";
3
3
  /**
4
4
  * The result of the semantic search hook.
@@ -20,7 +20,7 @@ export type SemanticSearchInputResult = {
20
20
  /**
21
21
  * The search results.
22
22
  */
23
- searchResults: ISemanticSearchResultItem[];
23
+ searchResults: ISemanticSearchResultItemWithUrl[];
24
24
  };
25
25
  /**
26
26
  * Input parameters for the semantic search hook.
@@ -1 +1 @@
1
- {"version":3,"file":"useSemanticSearch.d.ts","sourceRoot":"","sources":["../../src/hooks/useSemanticSearch.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,yBAAyB,EAAE,uBAAuB,EAAE,MAAM,qBAAqB,CAAC;AAEzF,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAE/D;;;GAGG;AACH,MAAM,MAAM,yBAAyB,GAAG;IACpC;;;;;;OAMG;IACH,YAAY,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,GAAG,SAAS,CAAC;IACvD;;OAEG;IACH,WAAW,EAAE,MAAM,CAAC;IACpB;;OAEG;IACH,aAAa,EAAE,yBAAyB,EAAE,CAAC;CAC9C,CAAC;AAWF;;;GAGG;AACH,MAAM,MAAM,uBAAuB,GAAG;IAClC;;OAEG;IACH,UAAU,EAAE,MAAM,CAAC;IACnB;;OAEG;IACH,WAAW,CAAC,EAAE,uBAAuB,EAAE,CAAC;IACxC;;;OAGG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB;;OAEG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;;OAGG;IACH,OAAO,CAAC,EAAE,kBAAkB,CAAC;IAC7B;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;CACtB,CAAC;AAIF;;;;;GAKG;AACH,eAAO,MAAM,iBAAiB,wEAO3B,uBAAuB,KAAG,yBAgE5B,CAAC"}
1
+ {"version":3,"file":"useSemanticSearch.d.ts","sourceRoot":"","sources":["../../src/hooks/useSemanticSearch.ts"],"names":[],"mappings":"AAGA,OAAO,EAEH,gCAAgC,EAChC,uBAAuB,EAC1B,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAG/D;;;GAGG;AACH,MAAM,MAAM,yBAAyB,GAAG;IACpC;;;;;;OAMG;IACH,YAAY,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,GAAG,SAAS,CAAC;IACvD;;OAEG;IACH,WAAW,EAAE,MAAM,CAAC;IACpB;;OAEG;IACH,aAAa,EAAE,gCAAgC,EAAE,CAAC;CACrD,CAAC;AAWF;;;GAGG;AACH,MAAM,MAAM,uBAAuB,GAAG;IAClC;;OAEG;IACH,UAAU,EAAE,MAAM,CAAC;IACnB;;OAEG;IACH,WAAW,CAAC,EAAE,uBAAuB,EAAE,CAAC;IACxC;;;OAGG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB;;OAEG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;;OAGG;IACH,OAAO,CAAC,EAAE,kBAAkB,CAAC;IAC7B;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;CACtB,CAAC;AAIF;;;;;GAKG;AACH,eAAO,MAAM,iBAAiB,wEAO3B,uBAAuB,KAAG,yBA+D5B,CAAC"}
@@ -1,6 +1,7 @@
1
1
  // (C) 2024 GoodData Corporation
2
2
  import { useState, useEffect } from "react";
3
3
  import { useBackendStrict, useWorkspaceStrict } from "@gooddata/sdk-ui";
4
+ import { getUIPath } from "../utils/getUIPath.js";
4
5
  /**
5
6
  * Default state of the semantic search hook.
6
7
  */
@@ -54,8 +55,7 @@ export const useSemanticSearch = ({ searchTerm, objectTypes = DEFAULT_OBJECT_TYP
54
55
  setState({
55
56
  searchStatus: "success",
56
57
  searchError: "",
57
- // TODO - limit does not work on backend
58
- searchResults: res.results.slice(0, limit),
58
+ searchResults: res.results.map(withUrl(effectiveWorkspace)),
59
59
  });
60
60
  })
61
61
  .catch((e) => {
@@ -83,4 +83,13 @@ const errorMessage = (e) => {
83
83
  }
84
84
  return String(e);
85
85
  };
86
+ /**
87
+ * Enrich the result item with UI URL.
88
+ */
89
+ const withUrl = (workspaceId) => (item) => {
90
+ return {
91
+ ...item,
92
+ url: getUIPath(item.type, item.id, workspaceId),
93
+ };
94
+ };
86
95
  //# sourceMappingURL=useSemanticSearch.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"useSemanticSearch.js","sourceRoot":"","sources":["../../src/hooks/useSemanticSearch.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"useSemanticSearch.js","sourceRoot":"","sources":["../../src/hooks/useSemanticSearch.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import React from "react";
2
+ import { SearchOverlayProps } from "./SearchOverlay.js";
3
+ export type HeaderSearchButtonProps = SearchOverlayProps;
4
+ export declare const HeaderSearchButtonCore: React.FC<HeaderSearchButtonProps>;
5
+ export declare const HeaderSearchButton: React.FC<import("react-intl").WithIntlProps<SearchOverlayProps>> & {
6
+ WrappedComponent: React.ComponentType<SearchOverlayProps>;
7
+ };
8
+ //# sourceMappingURL=HeaderSearchButton.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"HeaderSearchButton.d.ts","sourceRoot":"","sources":["../../src/internal/HeaderSearchButton.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,OAAO,CAAC;AAI1B,OAAO,EAAiB,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAKvE,MAAM,MAAM,uBAAuB,GAAG,kBAAkB,CAAC;AAEzD,eAAO,MAAM,sBAAsB,EAAE,KAAK,CAAC,EAAE,CAAC,uBAAuB,CAsDpE,CAAC;AAEF,eAAO,MAAM,kBAAkB;;CAAqC,CAAC"}
@@ -0,0 +1,37 @@
1
+ // (C) 2007-2024 GoodData Corporation
2
+ import React from "react";
3
+ import cx from "classnames";
4
+ import { FormattedMessage, injectIntl } from "react-intl";
5
+ import { Button, Overlay } from "@gooddata/sdk-ui-kit";
6
+ import { SearchOverlay } from "./SearchOverlay.js";
7
+ const ALIGN_POINTS = [{ align: "br tr" }];
8
+ export const HeaderSearchButtonCore = ({ onSelect, ...overlayProps }) => {
9
+ const [isOpen, setIsOpen] = React.useState(false);
10
+ const classNames = cx("gd-header-measure", "gd-header-button", "gd-header-search", { "is-open": isOpen });
11
+ React.useEffect(() => {
12
+ const shortcutHandler = (event) => {
13
+ if (event.key === "k" && (event.ctrlKey || event.metaKey)) {
14
+ setIsOpen(true);
15
+ }
16
+ };
17
+ if (!isOpen) {
18
+ document.addEventListener("keydown", shortcutHandler);
19
+ }
20
+ return () => {
21
+ document.removeEventListener("keydown", shortcutHandler);
22
+ };
23
+ }, [isOpen]);
24
+ const handleSelect = (item) => {
25
+ onSelect(item);
26
+ setIsOpen(false);
27
+ };
28
+ return (React.createElement(Button, { title: overlayProps.intl.formatMessage({ id: "gs.header.search" }), className: classNames, onClick: () => setIsOpen(true) },
29
+ React.createElement("span", { className: "gd-icon-header-search" }),
30
+ React.createElement("span", { className: "gd-header-search-label" },
31
+ React.createElement(FormattedMessage, { id: "gs.header.search" })),
32
+ isOpen ? (React.createElement(Overlay, { isModal: false, alignTo: ".gd-header-search", alignPoints: ALIGN_POINTS, closeOnEscape: true, closeOnOutsideClick: true, closeOnParentScroll: false, closeOnMouseDrag: false, onClose: () => setIsOpen(false), ignoreClicksOnByClass: [".gd-bubble", ".gd-semantic-search__results-item"] },
33
+ React.createElement("div", { className: "gd-dialog gd-dropdown overlay gd-header-search-dropdown" },
34
+ React.createElement(SearchOverlay, { onSelect: handleSelect, ...overlayProps })))) : null));
35
+ };
36
+ export const HeaderSearchButton = injectIntl(HeaderSearchButtonCore);
37
+ //# sourceMappingURL=HeaderSearchButton.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"HeaderSearchButton.js","sourceRoot":"","sources":["../../src/internal/HeaderSearchButton.tsx"],"names":[],"mappings":"AAAA,qCAAqC;AACrC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,MAAM,YAAY,CAAC;AAC5B,OAAO,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAC1D,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,aAAa,EAAsB,MAAM,oBAAoB,CAAC;AAGvE,MAAM,YAAY,GAAG,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC;AAI1C,MAAM,CAAC,MAAM,sBAAsB,GAAsC,CAAC,EAAE,QAAQ,EAAE,GAAG,YAAY,EAAE,EAAE,EAAE;IACvG,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IAClD,MAAM,UAAU,GAAG,EAAE,CAAC,mBAAmB,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC,CAAC;IAE1G,KAAK,CAAC,SAAS,CAAC,GAAG,EAAE;QACjB,MAAM,eAAe,GAAG,CAAC,KAAoB,EAAE,EAAE;YAC7C,IAAI,KAAK,CAAC,GAAG,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC;gBACxD,SAAS,CAAC,IAAI,CAAC,CAAC;YACpB,CAAC;QACL,CAAC,CAAC;QAEF,IAAI,CAAC,MAAM,EAAE,CAAC;YACV,QAAQ,CAAC,gBAAgB,CAAC,SAAS,EAAE,eAAe,CAAC,CAAC;QAC1D,CAAC;QAED,OAAO,GAAG,EAAE;YACR,QAAQ,CAAC,mBAAmB,CAAC,SAAS,EAAE,eAAe,CAAC,CAAC;QAC7D,CAAC,CAAC;IACN,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;IAEb,MAAM,YAAY,GAAG,CAAC,IAAsC,EAAE,EAAE;QAC5D,QAAQ,CAAC,IAAI,CAAC,CAAC;QACf,SAAS,CAAC,KAAK,CAAC,CAAC;IACrB,CAAC,CAAC;IAEF,OAAO,CACH,oBAAC,MAAM,IACH,KAAK,EAAE,YAAY,CAAC,IAAI,CAAC,aAAa,CAAC,EAAE,EAAE,EAAE,kBAAkB,EAAE,CAAC,EAClE,SAAS,EAAE,UAAU,EACrB,OAAO,EAAE,GAAG,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC;QAE9B,8BAAM,SAAS,EAAC,uBAAuB,GAAQ;QAC/C,8BAAM,SAAS,EAAC,wBAAwB;YACpC,oBAAC,gBAAgB,IAAC,EAAE,EAAC,kBAAkB,GAAG,CACvC;QACN,MAAM,CAAC,CAAC,CAAC,CACN,oBAAC,OAAO,IACJ,OAAO,EAAE,KAAK,EACd,OAAO,EAAC,mBAAmB,EAC3B,WAAW,EAAE,YAAY,EACzB,aAAa,QACb,mBAAmB,QACnB,mBAAmB,EAAE,KAAK,EAC1B,gBAAgB,EAAE,KAAK,EACvB,OAAO,EAAE,GAAG,EAAE,CAAC,SAAS,CAAC,KAAK,CAAC,EAC/B,qBAAqB,EAAE,CAAC,YAAY,EAAE,mCAAmC,CAAC;YAE1E,6BAAK,SAAS,EAAC,yDAAyD;gBACpE,oBAAC,aAAa,IAAC,QAAQ,EAAE,YAAY,KAAM,YAAY,GAAI,CACzD,CACA,CACb,CAAC,CAAC,CAAC,IAAI,CACH,CACZ,CAAC;AACN,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,kBAAkB,GAAG,UAAU,CAAC,sBAAsB,CAAC,CAAC"}
@@ -1,15 +1,16 @@
1
1
  import * as React from "react";
2
2
  import { IAnalyticalBackend } from "@gooddata/sdk-backend-spi";
3
- import { GenAISemanticSearchType, ISemanticSearchResultItem } from "@gooddata/sdk-model";
3
+ import { GenAISemanticSearchType, ISemanticSearchResultItemWithUrl } from "@gooddata/sdk-model";
4
+ import { WrappedComponentProps } from "react-intl";
4
5
  /**
5
6
  * Props for the SemanticSearchOverlay component.
6
7
  * @internal
7
8
  */
8
- export type SemanticSearchOverlayProps = {
9
+ export type SearchOverlayProps = WrappedComponentProps & {
9
10
  /**
10
11
  * A function called when the user selects an item from the search results.
11
12
  */
12
- onSelect: (item: ISemanticSearchResultItem) => void;
13
+ onSelect: (item: ISemanticSearchResultItemWithUrl) => void;
13
14
  /**
14
15
  * An analytical backend to use for the search. Can be omitted and taken from context.
15
16
  */
@@ -36,5 +37,5 @@ export type SemanticSearchOverlayProps = {
36
37
  * The internal version is meant to be used in an overlay inside the Header.
37
38
  * @internal
38
39
  */
39
- export declare const SemanticSearchOverlay: React.FC<SemanticSearchOverlayProps>;
40
- //# sourceMappingURL=SemanticSearchOverlay.d.ts.map
40
+ export declare const SearchOverlay: React.FC<SearchOverlayProps>;
41
+ //# sourceMappingURL=SearchOverlay.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SearchOverlay.d.ts","sourceRoot":"","sources":["../../src/internal/SearchOverlay.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAG/B,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAC/D,OAAO,EAAE,uBAAuB,EAAE,gCAAgC,EAAE,MAAM,qBAAqB,CAAC;AAEhG,OAAO,EAAoB,qBAAqB,EAAE,MAAM,YAAY,CAAC;AAerE;;;GAGG;AACH,MAAM,MAAM,kBAAkB,GAAG,qBAAqB,GAAG;IACrD;;OAEG;IACH,QAAQ,EAAE,CAAC,IAAI,EAAE,gCAAgC,KAAK,IAAI,CAAC;IAC3D;;OAEG;IACH,OAAO,CAAC,EAAE,kBAAkB,CAAC;IAC7B;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;OAEG;IACH,WAAW,CAAC,EAAE,uBAAuB,EAAE,CAAC;IACxC;;OAEG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB;;OAEG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,aAAa,EAAE,KAAK,CAAC,EAAE,CAAC,kBAAkB,CA6EtD,CAAC"}
@@ -12,12 +12,16 @@ const DEBOUNCE = 300;
12
12
  * A height of the loading mask.
13
13
  */
14
14
  const LOADING_HEIGHT = 100;
15
+ /**
16
+ * A width of the search drop-down.
17
+ */
18
+ const SEARCH_OVERLAY_WIDTH = 440;
15
19
  /**
16
20
  * A component that allows users to search for insights, metrics, attributes, and other objects using semantic search.
17
21
  * The internal version is meant to be used in an overlay inside the Header.
18
22
  * @internal
19
23
  */
20
- export const SemanticSearchOverlay = ({ onSelect, backend, workspace, objectTypes, deepSearch, limit = 6, }) => {
24
+ export const SearchOverlay = ({ onSelect, backend, workspace, objectTypes, deepSearch, limit = 6, intl, }) => {
21
25
  // Input value handling
22
26
  const [value, setValue, searchTerm] = useDebouncedState("", DEBOUNCE);
23
27
  // Search results
@@ -37,11 +41,11 @@ export const SemanticSearchOverlay = ({ onSelect, backend, workspace, objectType
37
41
  }
38
42
  }, [searchStatus, searchError]);
39
43
  return (React.createElement("div", { className: "gd-semantic-search__overlay" },
40
- React.createElement(Input, { className: "gd-semantic-search__overlay-input", autofocus: true, placeholder: "Search...", isSearch: true, clearOnEsc: true, value: value, onChange: (e) => setValue(String(e)) }),
44
+ React.createElement(Input, { className: "gd-semantic-search__overlay-input", autofocus: true, placeholder: intl.formatMessage({ id: "semantic-search.placeholder" }), isSearch: true, clearOnEsc: true, value: value, onChange: (e) => setValue(String(e)) }),
41
45
  (() => {
42
46
  switch (searchStatus) {
43
47
  case "loading":
44
- return React.createElement(LoadingMask, { width: 440, height: LOADING_HEIGHT });
48
+ return React.createElement(LoadingMask, { width: SEARCH_OVERLAY_WIDTH, height: LOADING_HEIGHT });
45
49
  case "error":
46
50
  return (React.createElement("div", { className: "gd-semantic-search__overlay-error" },
47
51
  React.createElement(FormattedMessage, { id: "semantic-search.error" })));
@@ -50,11 +54,11 @@ export const SemanticSearchOverlay = ({ onSelect, backend, workspace, objectType
50
54
  return (React.createElement("div", { className: "gd-semantic-search__overlay-no-results" },
51
55
  React.createElement(FormattedMessage, { id: "semantic-search.no-results", values: { query: searchTerm } })));
52
56
  }
53
- return (React.createElement(SearchResultsList, { searchResults: searchResults, width: 440, onSelect: onSelect }));
57
+ return (React.createElement(SearchResultsList, { searchResults: searchResults, width: SEARCH_OVERLAY_WIDTH, onSelect: onSelect }));
54
58
  case "idle":
55
59
  default:
56
60
  return null;
57
61
  }
58
62
  })()));
59
63
  };
60
- //# sourceMappingURL=SemanticSearchOverlay.js.map
64
+ //# sourceMappingURL=SearchOverlay.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SearchOverlay.js","sourceRoot":"","sources":["../../src/internal/SearchOverlay.tsx"],"names":[],"mappings":"AAAA,gCAAgC;AAChC,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAC7E,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAGtD,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAAE,gBAAgB,EAAyB,MAAM,YAAY,CAAC;AAErE;;GAEG;AACH,MAAM,QAAQ,GAAG,GAAG,CAAC;AACrB;;GAEG;AACH,MAAM,cAAc,GAAG,GAAG,CAAC;AAC3B;;GAEG;AACH,MAAM,oBAAoB,GAAG,GAAG,CAAC;AAiCjC;;;;GAIG;AACH,MAAM,CAAC,MAAM,aAAa,GAAiC,CAAC,EACxD,QAAQ,EACR,OAAO,EACP,SAAS,EACT,WAAW,EACX,UAAU,EACV,KAAK,GAAG,CAAC,EACT,IAAI,GACP,EAAE,EAAE;IACD,uBAAuB;IACvB,MAAM,CAAC,KAAK,EAAE,QAAQ,EAAE,UAAU,CAAC,GAAG,iBAAiB,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC;IAEtE,iBAAiB;IACjB,MAAM,EAAE,YAAY,EAAE,aAAa,EAAE,WAAW,EAAE,GAAG,iBAAiB,CAAC;QACnE,OAAO;QACP,SAAS;QACT,UAAU;QACV,WAAW;QACX,UAAU;QACV,KAAK;KACR,CAAC,CAAC;IAEH,KAAK,CAAC,SAAS,CAAC,GAAG,EAAE;QACjB,IAAI,YAAY,KAAK,OAAO,EAAE,CAAC;YAC3B,8BAA8B;YAC9B,0CAA0C;YAC1C,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;QAC/B,CAAC;IACL,CAAC,EAAE,CAAC,YAAY,EAAE,WAAW,CAAC,CAAC,CAAC;IAEhC,OAAO,CACH,6BAAK,SAAS,EAAC,6BAA6B;QACxC,oBAAC,KAAK,IACF,SAAS,EAAC,mCAAmC,EAC7C,SAAS,QACT,WAAW,EAAE,IAAI,CAAC,aAAa,CAAC,EAAE,EAAE,EAAE,6BAA6B,EAAE,CAAC,EACtE,QAAQ,QACR,UAAU,QACV,KAAK,EAAE,KAAK,EACZ,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,GACtC;QACD,CAAC,GAAG,EAAE;YACH,QAAQ,YAAY,EAAE,CAAC;gBACnB,KAAK,SAAS;oBACV,OAAO,oBAAC,WAAW,IAAC,KAAK,EAAE,oBAAoB,EAAE,MAAM,EAAE,cAAc,GAAI,CAAC;gBAChF,KAAK,OAAO;oBACR,OAAO,CACH,6BAAK,SAAS,EAAC,mCAAmC;wBAC9C,oBAAC,gBAAgB,IAAC,EAAE,EAAC,uBAAuB,GAAG,CAC7C,CACT,CAAC;gBACN,KAAK,SAAS;oBACV,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,CAAC;wBACxB,OAAO,CACH,6BAAK,SAAS,EAAC,wCAAwC;4BACnD,oBAAC,gBAAgB,IACb,EAAE,EAAC,4BAA4B,EAC/B,MAAM,EAAE,EAAE,KAAK,EAAE,UAAU,EAAE,GAC/B,CACA,CACT,CAAC;oBACN,CAAC;oBAED,OAAO,CACH,oBAAC,iBAAiB,IACd,aAAa,EAAE,aAAa,EAC5B,KAAK,EAAE,oBAAoB,EAC3B,QAAQ,EAAE,QAAQ,GACpB,CACL,CAAC;gBACN,KAAK,MAAM,CAAC;gBACZ;oBACI,OAAO,IAAI,CAAC;YACpB,CAAC;QACL,CAAC,CAAC,EAAE,CACF,CACT,CAAC;AACN,CAAC,CAAC"}
@@ -1,5 +1,5 @@
1
1
  import * as React from "react";
2
- import { ISemanticSearchResultItem } from "@gooddata/sdk-model";
2
+ import { ISemanticSearchResultItemWithUrl } from "@gooddata/sdk-model";
3
3
  /**
4
4
  * Search results props.
5
5
  * @internal
@@ -8,7 +8,7 @@ export type SearchResultsListProps = {
8
8
  /**
9
9
  * Search result items.
10
10
  */
11
- searchResults: ISemanticSearchResultItem[];
11
+ searchResults: ISemanticSearchResultItemWithUrl[];
12
12
  /**
13
13
  * Width of the list.
14
14
  */
@@ -16,7 +16,7 @@ export type SearchResultsListProps = {
16
16
  /**
17
17
  * Callback for item selection.
18
18
  */
19
- onSelect: (item: ISemanticSearchResultItem) => void;
19
+ onSelect: (item: ISemanticSearchResultItemWithUrl) => void;
20
20
  };
21
21
  /**
22
22
  * A dropdown list with the search results.
@@ -1 +1 @@
1
- {"version":3,"file":"SearchResultsList.d.ts","sourceRoot":"","sources":["../../src/internal/SearchResultsList.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,yBAAyB,EAAE,MAAM,qBAAqB,CAAC;AAKhE;;;GAGG;AACH,MAAM,MAAM,sBAAsB,GAAG;IACjC;;OAEG;IACH,aAAa,EAAE,yBAAyB,EAAE,CAAC;IAC3C;;OAEG;IACH,KAAK,EAAE,MAAM,CAAC;IACd;;OAEG;IACH,QAAQ,EAAE,CAAC,IAAI,EAAE,yBAAyB,KAAK,IAAI,CAAC;CACvD,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,iBAAiB,EAAE,KAAK,CAAC,EAAE,CAAC,sBAAsB,CAwB9D,CAAC"}
1
+ {"version":3,"file":"SearchResultsList.d.ts","sourceRoot":"","sources":["../../src/internal/SearchResultsList.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,gCAAgC,EAAE,MAAM,qBAAqB,CAAC;AAKvE;;;GAGG;AACH,MAAM,MAAM,sBAAsB,GAAG;IACjC;;OAEG;IACH,aAAa,EAAE,gCAAgC,EAAE,CAAC;IAClD;;OAEG;IACH,KAAK,EAAE,MAAM,CAAC;IACd;;OAEG;IACH,QAAQ,EAAE,CAAC,IAAI,EAAE,gCAAgC,KAAK,IAAI,CAAC;CAC9D,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,iBAAiB,EAAE,KAAK,CAAC,EAAE,CAAC,sBAAsB,CAuB9D,CAAC"}
@@ -9,10 +9,8 @@ import { useListSelector } from "../hooks/index.js";
9
9
  */
10
10
  export const SearchResultsList = ({ searchResults, width, onSelect }) => {
11
11
  const [selected, setSelected] = useListSelector(searchResults, onSelect);
12
- return (React.createElement(List, { width: width, height: ITEM_HEIGHT * searchResults.length, itemHeight: ITEM_HEIGHT, renderItem: ({ rowIndex, item, ...props }) => {
13
- return (React.createElement(ResultsItem, { onHover: () => setSelected(rowIndex), onClick: () => {
14
- onSelect(item);
15
- }, selected: rowIndex === selected, item: item, ...props }));
12
+ return (React.createElement(List, { width: width, height: ITEM_HEIGHT * searchResults.length, itemHeight: ITEM_HEIGHT, renderItem: ({ item, width, height }) => {
13
+ return (React.createElement(ResultsItem, { onHover: setSelected, onSelect: onSelect, active: item === selected, item: item, width: width, height: height }));
16
14
  }, items: searchResults }));
17
15
  };
18
16
  //# sourceMappingURL=SearchResultsList.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"SearchResultsList.js","sourceRoot":"","sources":["../../src/internal/SearchResultsList.tsx"],"names":[],"mappings":"AAAA,gCAAgC;AAEhC,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAC;AAC5C,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAC7D,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAqBpD;;;GAGG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAqC,CAAC,EAAE,aAAa,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,EAAE;IACtG,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,eAAe,CAAC,aAAa,EAAE,QAAQ,CAAC,CAAC;IAEzE,OAAO,CACH,oBAAC,IAAI,IACD,KAAK,EAAE,KAAK,EACZ,MAAM,EAAE,WAAW,GAAG,aAAa,CAAC,MAAM,EAC1C,UAAU,EAAE,WAAW,EACvB,UAAU,EAAE,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,GAAG,KAAK,EAAE,EAAE,EAAE;YACzC,OAAO,CACH,oBAAC,WAAW,IACR,OAAO,EAAE,GAAG,EAAE,CAAC,WAAW,CAAC,QAAQ,CAAC,EACpC,OAAO,EAAE,GAAG,EAAE;oBACV,QAAQ,CAAC,IAAI,CAAC,CAAC;gBACnB,CAAC,EACD,QAAQ,EAAE,QAAQ,KAAK,QAAQ,EAC/B,IAAI,EAAE,IAAI,KACN,KAAK,GACX,CACL,CAAC;QACN,CAAC,EACD,KAAK,EAAE,aAAa,GACtB,CACL,CAAC;AACN,CAAC,CAAC"}
1
+ {"version":3,"file":"SearchResultsList.js","sourceRoot":"","sources":["../../src/internal/SearchResultsList.tsx"],"names":[],"mappings":"AAAA,gCAAgC;AAEhC,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAC;AAC5C,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAC7D,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAqBpD;;;GAGG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAqC,CAAC,EAAE,aAAa,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,EAAE;IACtG,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,eAAe,CAAC,aAAa,EAAE,QAAQ,CAAC,CAAC;IAEzE,OAAO,CACH,oBAAC,IAAI,IACD,KAAK,EAAE,KAAK,EACZ,MAAM,EAAE,WAAW,GAAG,aAAa,CAAC,MAAM,EAC1C,UAAU,EAAE,WAAW,EACvB,UAAU,EAAE,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE;YACpC,OAAO,CACH,oBAAC,WAAW,IACR,OAAO,EAAE,WAAW,EACpB,QAAQ,EAAE,QAAQ,EAClB,MAAM,EAAE,IAAI,KAAK,QAAQ,EACzB,IAAI,EAAE,IAAI,EACV,KAAK,EAAE,KAAK,EACZ,MAAM,EAAE,MAAM,GAChB,CACL,CAAC;QACN,CAAC,EACD,KAAK,EAAE,aAAa,GACtB,CACL,CAAC;AACN,CAAC,CAAC"}
package/esm/internal.d.ts CHANGED
@@ -4,5 +4,5 @@
4
4
  * @packageDocumentation
5
5
  * @internal
6
6
  */
7
- export * from "./internal/SemanticSearchOverlay.js";
7
+ export * from "./internal/HeaderSearchButton.js";
8
8
  //# sourceMappingURL=internal.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"internal.d.ts","sourceRoot":"","sources":["../src/internal.ts"],"names":[],"mappings":"AAEA;;;;;GAKG;AAEH,cAAc,qCAAqC,CAAC"}
1
+ {"version":3,"file":"internal.d.ts","sourceRoot":"","sources":["../src/internal.ts"],"names":[],"mappings":"AAEA;;;;;GAKG;AAEH,cAAc,kCAAkC,CAAC"}
package/esm/internal.js CHANGED
@@ -5,5 +5,5 @@
5
5
  * @packageDocumentation
6
6
  * @internal
7
7
  */
8
- export * from "./internal/SemanticSearchOverlay.js";
8
+ export * from "./internal/HeaderSearchButton.js";
9
9
  //# sourceMappingURL=internal.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"internal.js","sourceRoot":"","sources":["../src/internal.ts"],"names":[],"mappings":"AAAA,gCAAgC;AAEhC;;;;;GAKG;AAEH,cAAc,qCAAqC,CAAC"}
1
+ {"version":3,"file":"internal.js","sourceRoot":"","sources":["../src/internal.ts"],"names":[],"mappings":"AAAA,gCAAgC;AAEhC;;;;;GAKG;AAEH,cAAc,kCAAkC,CAAC"}
@@ -7,6 +7,7 @@
7
7
  import { GenAISemanticSearchType } from '@gooddata/sdk-model';
8
8
  import { IAnalyticalBackend } from '@gooddata/sdk-backend-spi';
9
9
  import { ISemanticSearchResultItem } from '@gooddata/sdk-model';
10
+ import { ISemanticSearchResultItemWithUrl } from '@gooddata/sdk-model';
10
11
  import * as React_2 from 'react';
11
12
 
12
13
  /**
@@ -112,7 +113,7 @@ export declare type SemanticSearchInputResult = {
112
113
  /**
113
114
  * The search results.
114
115
  */
115
- searchResults: ISemanticSearchResultItem[];
116
+ searchResults: ISemanticSearchResultItemWithUrl[];
116
117
  };
117
118
 
118
119
  /**
@@ -128,7 +129,7 @@ export declare type SemanticSearchProps = SemanticSearchCoreProps & {
128
129
  * calls the onSelect callback when Enter is pressed.
129
130
  * @internal
130
131
  */
131
- export declare const useListSelector: <T>(items: T[], onSelect: (item: T) => void) => [number, (index: number) => void];
132
+ export declare const useListSelector: <T>(items: T[], onSelect: (item: T) => void) => [T, (item: T) => void];
132
133
 
133
134
  /**
134
135
  * Hook to perform semantic search.
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Types of objects that we can navigate to in UI.
3
+ * @internal
4
+ */
5
+ export type UIPathObjectTypes = "dashboard" | "visualization" | "metric" | "dataset" | "date" | "fact" | "attribute" | "label";
6
+ /**
7
+ * Get the UI path for the given object type, object ID, and workspace ID.
8
+ * TODO - this logic should live in gdc-ui repo, would require refactoring of the sdk-ui-semantic-search
9
+ * - ui components need URL right away to be able to render native anchor tags
10
+ * - gdc-ui would need to inject the URL between the data is loaded and the render
11
+ * @internal
12
+ */
13
+ export declare const getUIPath: (objectType: UIPathObjectTypes, objectId: string, workspaceId: string) => string;
14
+ //# sourceMappingURL=getUIPath.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getUIPath.d.ts","sourceRoot":"","sources":["../../src/utils/getUIPath.ts"],"names":[],"mappings":"AAEA;;;GAGG;AACH,MAAM,MAAM,iBAAiB,GACvB,WAAW,GACX,eAAe,GACf,QAAQ,GACR,SAAS,GACT,MAAM,GACN,MAAM,GACN,WAAW,GACX,OAAO,CAAC;AAEd;;;;;;GAMG;AACH,eAAO,MAAM,SAAS,eAAgB,iBAAiB,YAAY,MAAM,eAAe,MAAM,KAAG,MAqBhG,CAAC"}
@@ -0,0 +1,37 @@
1
+ // (C) 2024 GoodData Corporation
2
+ /**
3
+ * Get the UI path for the given object type, object ID, and workspace ID.
4
+ * TODO - this logic should live in gdc-ui repo, would require refactoring of the sdk-ui-semantic-search
5
+ * - ui components need URL right away to be able to render native anchor tags
6
+ * - gdc-ui would need to inject the URL between the data is loaded and the render
7
+ * @internal
8
+ */
9
+ export const getUIPath = (objectType, objectId, workspaceId) => {
10
+ switch (objectType) {
11
+ case "dashboard":
12
+ return `/dashboards/#/workspace/${workspaceId}/dashboard/${objectId}`;
13
+ case "visualization":
14
+ return `/analyze/#/${workspaceId}/${objectId}/edit`;
15
+ case "metric":
16
+ return `/metrics/#/${workspaceId}/metric/${objectId}`;
17
+ case "dataset":
18
+ return `/modeler/#/${workspaceId}`; // TODO - deep links
19
+ case "attribute":
20
+ return `/modeler/#/${workspaceId}`; // TODO - deep links
21
+ case "label":
22
+ return `/modeler/#/${workspaceId}`; // TODO - deep links
23
+ case "fact":
24
+ return `/modeler/#/${workspaceId}`; // TODO - deep links
25
+ case "date":
26
+ return `/modeler/#/${workspaceId}`; // TODO - deep links
27
+ default:
28
+ return exhaustiveCheck(objectType);
29
+ }
30
+ };
31
+ /**
32
+ * Ensure exhaustive switch to prevent missing cases.
33
+ */
34
+ const exhaustiveCheck = (x) => {
35
+ throw new Error(`Unknown item type ${x}`);
36
+ };
37
+ //# sourceMappingURL=getUIPath.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getUIPath.js","sourceRoot":"","sources":["../../src/utils/getUIPath.ts"],"names":[],"mappings":"AAAA,gCAAgC;AAgBhC;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,UAA6B,EAAE,QAAgB,EAAE,WAAmB,EAAU,EAAE;IACtG,QAAQ,UAAU,EAAE,CAAC;QACjB,KAAK,WAAW;YACZ,OAAO,2BAA2B,WAAW,cAAc,QAAQ,EAAE,CAAC;QAC1E,KAAK,eAAe;YAChB,OAAO,cAAc,WAAW,IAAI,QAAQ,OAAO,CAAC;QACxD,KAAK,QAAQ;YACT,OAAO,cAAc,WAAW,WAAW,QAAQ,EAAE,CAAC;QAC1D,KAAK,SAAS;YACV,OAAO,cAAc,WAAW,EAAE,CAAC,CAAC,oBAAoB;QAC5D,KAAK,WAAW;YACZ,OAAO,cAAc,WAAW,EAAE,CAAC,CAAC,oBAAoB;QAC5D,KAAK,OAAO;YACR,OAAO,cAAc,WAAW,EAAE,CAAC,CAAC,oBAAoB;QAC5D,KAAK,MAAM;YACP,OAAO,cAAc,WAAW,EAAE,CAAC,CAAC,oBAAoB;QAC5D,KAAK,MAAM;YACP,OAAO,cAAc,WAAW,EAAE,CAAC,CAAC,oBAAoB;QAC5D;YACI,OAAO,eAAe,CAAC,UAAU,CAAC,CAAC;IAC3C,CAAC;AACL,CAAC,CAAC;AAEF;;GAEG;AACH,MAAM,eAAe,GAAG,CAAC,CAAQ,EAAS,EAAE;IACxC,MAAM,IAAI,KAAK,CAAC,qBAAqB,CAAC,EAAE,CAAC,CAAC;AAC9C,CAAC,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@gooddata/sdk-ui-semantic-search",
3
- "version": "10.8.0-alpha.2",
3
+ "version": "10.8.0-alpha.21",
4
4
  "description": "GoodData SDK TypeScript & React skeleton",
5
5
  "repository": {
6
6
  "type": "git",
@@ -37,10 +37,11 @@
37
37
  "react-intl": "^6.4.1",
38
38
  "tslib": "^2.5.0",
39
39
  "classnames": "^2.3.1",
40
- "@gooddata/sdk-model": "10.8.0-alpha.2",
41
- "@gooddata/sdk-ui": "10.8.0-alpha.2",
42
- "@gooddata/sdk-ui-kit": "10.8.0-alpha.2",
43
- "@gooddata/sdk-backend-spi": "10.8.0-alpha.2"
40
+ "@gooddata/sdk-model": "10.8.0-alpha.21",
41
+ "@gooddata/sdk-ui": "10.8.0-alpha.21",
42
+ "@gooddata/sdk-backend-spi": "10.8.0-alpha.21",
43
+ "@gooddata/sdk-ui-kit": "10.8.0-alpha.21",
44
+ "@gooddata/sdk-ui-theme-provider": "10.8.0-alpha.21"
44
45
  },
45
46
  "peerDependencies": {
46
47
  "react": "^16.10.0 || ^17.0.0 || ^18.0.0",
@@ -82,7 +83,7 @@
82
83
  "stylelint": "^13.8.0",
83
84
  "stylelint-checkstyle-formatter": "^0.1.2",
84
85
  "stylelint-config-prettier": "^8.0.2",
85
- "@gooddata/sdk-backend-mockingbird": "10.8.0-alpha.2"
86
+ "@gooddata/sdk-backend-mockingbird": "10.8.0-alpha.21"
86
87
  },
87
88
  "scripts": {
88
89
  "clean": "rm -rf ci dist esm coverage *.log styles/css tsconfig.tsbuildinfo",
@@ -1,3 +1,5 @@
1
+ /* allow vendor prefixes and disable max length */
2
+ /* allow vendor prefixes and disable max length */
1
3
  .gd-semantic-search__results-item {
2
4
  display: flex;
3
5
  flex-direction: row;
@@ -6,8 +8,9 @@
6
8
  gap: 1em;
7
9
  padding: 0 1em;
8
10
  height: 45px;
11
+ text-decoration: none;
9
12
  }
10
- .gd-semantic-search__results-item--selected {
13
+ .gd-semantic-search__results-item--active {
11
14
  color: var(--gd-palette-complementary-9, #000);
12
15
  background: var(--gd-palette-complementary-2, #ebeff4);
13
16
  }
@@ -24,16 +27,55 @@
24
27
  .gd-semantic-search__results-item__text {
25
28
  flex-grow: 1;
26
29
  min-width: 0;
27
- }
28
- .gd-semantic-search__results-item__text > p {
30
+ font-weight: 400;
31
+ line-height: 1.4rem;
32
+ color: var(--gd-palette-complementary-8, #464e56);
33
+ font-size: 14px;
29
34
  overflow: hidden;
30
35
  text-overflow: ellipsis;
31
36
  white-space: nowrap;
32
37
  }
38
+ .gd-semantic-search__results-item__details {
39
+ display: none;
40
+ width: 16px;
41
+ height: 16px;
42
+ align-items: center;
43
+ }
44
+ .gd-semantic-search__results-item__details__contents {
45
+ width: 190px;
46
+ padding: 5px;
47
+ box-sizing: border-box;
48
+ display: flex;
49
+ flex-direction: column;
50
+ }
51
+ .gd-semantic-search__results-item__details__contents > * {
52
+ margin-bottom: 15px;
53
+ }
54
+ .gd-semantic-search__results-item__details__contents h3 {
55
+ font-size: 14px;
56
+ margin: 0 0 10px;
57
+ }
58
+ .gd-semantic-search__results-item__details__contents .gd-ellipsis-text-content {
59
+ font-size: 12px;
60
+ }
61
+ .gd-semantic-search__results-item__details__contents h4 {
62
+ margin: 0;
63
+ text-transform: uppercase;
64
+ font-size: 10px;
65
+ font-weight: 400;
66
+ color: var(--gd-palette-complementary-6, #94a1ad);
67
+ }
68
+ .gd-semantic-search__results-item--active .gd-semantic-search__results-item__details {
69
+ display: unset;
70
+ }
71
+
72
+ .gd-semantic-search__bubble.bubble.bubble-light {
73
+ background: var(--gd-palette-complementary-0, #fff);
74
+ }
33
75
 
34
76
  .gd-semantic-search__overlay {
35
77
  width: 440px;
36
- background: white;
78
+ background: var(--gd-palette-complementary-0, #fff);
37
79
  margin: 10px 0;
38
80
  }
39
81
  .gd-semantic-search__overlay-input {
@@ -47,4 +89,70 @@
47
89
  color: var(--gd-palette-complementary-6, #94a1ad);
48
90
  }
49
91
 
92
+ .gd-header-search {
93
+ height: 100%;
94
+ margin: 0;
95
+ line-height: 42px;
96
+ opacity: 0.8;
97
+ cursor: pointer;
98
+ transition: all 0.2s;
99
+ font-size: 14px;
100
+ font-weight: 400;
101
+ padding: 0 13px 2px;
102
+ overflow: hidden;
103
+ white-space: nowrap;
104
+ text-overflow: ellipsis;
105
+ }
106
+ .gd-header-search:hover, .gd-header-search.is-open {
107
+ opacity: 1;
108
+ }
109
+ .gd-header-search.is-open {
110
+ background-color: rgba(255, 255, 255, 0.3);
111
+ }
112
+
113
+ .gd-header-search {
114
+ position: relative;
115
+ box-sizing: border-box;
116
+ padding-right: 34px;
117
+ }
118
+ .gd-header-search:hover {
119
+ background: rgba(255, 255, 255, 0.3);
120
+ }
121
+ .gd-header-search::after {
122
+ content: "\e612";
123
+ position: absolute;
124
+ top: 0;
125
+ right: 11px;
126
+ margin-left: 11px;
127
+ width: 12px;
128
+ opacity: 0.5;
129
+ text-align: center;
130
+ font-family: "Indigo", sans-serif;
131
+ font-size: 18px;
132
+ font-weight: 700;
133
+ }
134
+ .gd-header-search.is-open::after {
135
+ content: "\e613";
136
+ }
137
+
138
+ .gd-icon-header-search {
139
+ vertical-align: middle;
140
+ opacity: 0.8;
141
+ margin-right: 6px;
142
+ }
143
+ .gd-icon-header-search::before {
144
+ content: "\e62b";
145
+ }
146
+
147
+ .gd-header-search-dropdown {
148
+ overflow: hidden;
149
+ }
150
+ .gd-header-search-dropdown .gd-list {
151
+ min-width: 210px;
152
+ }
153
+ .gd-header-search-dropdown .gd-list .gd-list-item {
154
+ font-family: gdcustomfont, avenir, "Helvetica Neue", arial, sans-serif;
155
+ font-weight: 400;
156
+ }
157
+
50
158
  /*# sourceMappingURL=internal.css.map */
@@ -1 +1 @@
1
- {"version":3,"sourceRoot":"","sources":["../scss/main.scss","../../node_modules/@gooddata/sdk-ui-kit/styles/scss/variables.scss","../scss/internal.scss"],"names":[],"mappings":"AAOI;EAGI;EACA;EACA;EACA;EACA;EACA;EACA,QARc;;AAUd;EACI,OCiBI;EDhBJ,YCyFY;;ADtFhB;EAEI,OADY;EAEZ,QAFY;EAGZ;EACA;;AAEA;EAEI,OARQ;EASR,QATQ;;AAahB;EACI;EACA;;AAGJ;EACI;EACA;EACA;;;AErCR;EACI;EACA;EACA;;AAGJ;EACI;;AAGJ;EAEI;EACA;EACA;EACA;EACA","file":"internal.css"}
1
+ {"version":3,"sourceRoot":"","sources":["../../node_modules/@gooddata/sdk-ui-kit/styles/scss/mixins.scss","../scss/main.scss","../../node_modules/@gooddata/sdk-ui-kit/styles/scss/variables.scss","../scss/internal.scss"],"names":[],"mappings":"AA0HA;AA4DA;AC/KI;EAGI;EACA;EACA;EACA;EACA;EACA;EACA,QARc;EASd;;AAEA;EACI,OCgBI;EDfJ,YCwFY;;ADrFhB;EAEI,OADY;EAEZ,QAFY;EAGZ;EACA;;AAEA;EAEI,OARQ;EASR,QATQ;;AAahB;EACI;EACA;EACA;EACA;EACA,OCbI;EDcJ;EACA;EACA;EACA;;AAGJ;EACI;EACA;EACA;EACA;;AAEA;EACI;EACA;EACA;EACA;EACA;;AAEA;EACI;;AAGJ;EACI;EACA;;AAGJ;EACI;;AAGJ;EACI;EACA;EACA;EACA;EACA,OC1DG;;AD+Df;EACI;;;AAKZ;EACI,YC5Ea;;;ACRb;EACI;EACA,YDMS;ECLT;;AAGJ;EACI;;AAGJ;EAEI;EACA;EACA;EACA;EACA,ODFe;;;ACMvB;EACI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EH+EA;EACA;EACA,eAHwB;;AG1ExB;EAEI;;AAGJ;EACI;;;AAIR;EACI;EACA;EACA;;AAEA;EACI;;AAGJ;EACI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,aDyBS;ECxBT;EACA;;AAGJ;EACI;;;AAIR;EACI;EACA;EACA;;AAEA;EACI;;;AAIR;EACI;;AAEA;EACI;;AAEA;EACI,aDHM;ECIN","file":"internal.css"}
@@ -6,8 +6,9 @@
6
6
  gap: 1em;
7
7
  padding: 0 1em;
8
8
  height: 45px;
9
+ text-decoration: none;
9
10
  }
10
- .gd-semantic-search__results-item--selected {
11
+ .gd-semantic-search__results-item--active {
11
12
  color: var(--gd-palette-complementary-9, #000);
12
13
  background: var(--gd-palette-complementary-2, #ebeff4);
13
14
  }
@@ -24,11 +25,50 @@
24
25
  .gd-semantic-search__results-item__text {
25
26
  flex-grow: 1;
26
27
  min-width: 0;
27
- }
28
- .gd-semantic-search__results-item__text > p {
28
+ font-weight: 400;
29
+ line-height: 1.4rem;
30
+ color: var(--gd-palette-complementary-8, #464e56);
31
+ font-size: 14px;
29
32
  overflow: hidden;
30
33
  text-overflow: ellipsis;
31
34
  white-space: nowrap;
32
35
  }
36
+ .gd-semantic-search__results-item__details {
37
+ display: none;
38
+ width: 16px;
39
+ height: 16px;
40
+ align-items: center;
41
+ }
42
+ .gd-semantic-search__results-item__details__contents {
43
+ width: 190px;
44
+ padding: 5px;
45
+ box-sizing: border-box;
46
+ display: flex;
47
+ flex-direction: column;
48
+ }
49
+ .gd-semantic-search__results-item__details__contents > * {
50
+ margin-bottom: 15px;
51
+ }
52
+ .gd-semantic-search__results-item__details__contents h3 {
53
+ font-size: 14px;
54
+ margin: 0 0 10px;
55
+ }
56
+ .gd-semantic-search__results-item__details__contents .gd-ellipsis-text-content {
57
+ font-size: 12px;
58
+ }
59
+ .gd-semantic-search__results-item__details__contents h4 {
60
+ margin: 0;
61
+ text-transform: uppercase;
62
+ font-size: 10px;
63
+ font-weight: 400;
64
+ color: var(--gd-palette-complementary-6, #94a1ad);
65
+ }
66
+ .gd-semantic-search__results-item--active .gd-semantic-search__results-item__details {
67
+ display: unset;
68
+ }
69
+
70
+ .gd-semantic-search__bubble.bubble.bubble-light {
71
+ background: var(--gd-palette-complementary-0, #fff);
72
+ }
33
73
 
34
74
  /*# sourceMappingURL=main.css.map */
@@ -1 +1 @@
1
- {"version":3,"sourceRoot":"","sources":["../scss/main.scss","../../node_modules/@gooddata/sdk-ui-kit/styles/scss/variables.scss"],"names":[],"mappings":"AAOI;EAGI;EACA;EACA;EACA;EACA;EACA;EACA,QARc;;AAUd;EACI,OCiBI;EDhBJ,YCyFY;;ADtFhB;EAEI,OADY;EAEZ,QAFY;EAGZ;EACA;;AAEA;EAEI,OARQ;EASR,QATQ;;AAahB;EACI;EACA;;AAGJ;EACI;EACA;EACA","file":"main.css"}
1
+ {"version":3,"sourceRoot":"","sources":["../scss/main.scss","../../node_modules/@gooddata/sdk-ui-kit/styles/scss/variables.scss"],"names":[],"mappings":"AAOI;EAGI;EACA;EACA;EACA;EACA;EACA;EACA,QARc;EASd;;AAEA;EACI,OCgBI;EDfJ,YCwFY;;ADrFhB;EAEI,OADY;EAEZ,QAFY;EAGZ;EACA;;AAEA;EAEI,OARQ;EASR,QATQ;;AAahB;EACI;EACA;EACA;EACA;EACA,OCbI;EDcJ;EACA;EACA;EACA;;AAGJ;EACI;EACA;EACA;EACA;;AAEA;EACI;EACA;EACA;EACA;EACA;;AAEA;EACI;;AAGJ;EACI;EACA;;AAGJ;EACI;;AAGJ;EACI;EACA;EACA;EACA;EACA,OC1DG;;AD+Df;EACI;;;AAKZ;EACI,YC5Ea","file":"main.css"}
@@ -3,12 +3,13 @@
3
3
  @use "sass:color";
4
4
  @use "sass:meta";
5
5
  @use "@gooddata/sdk-ui-kit/styles/scss/variables" as kit-variables;
6
+ @use "@gooddata/sdk-ui-kit/styles/scss/mixins" as kit-mixins;
6
7
  @use "./main.scss";
7
8
 
8
9
  .gd-semantic-search {
9
10
  &__overlay {
10
11
  width: 440px;
11
- background: white;
12
+ background: kit-variables.$gd-color-white;
12
13
  margin: 10px 0;
13
14
  }
14
15
 
@@ -22,6 +23,80 @@
22
23
  display: flex;
23
24
  justify-content: center;
24
25
  align-items: center;
25
- color: var(--gd-palette-complementary-6, #94a1ad);
26
+ color: kit-variables.$gd-color-state-blank;
27
+ }
28
+ }
29
+
30
+ .gd-header-search {
31
+ height: 100%;
32
+ margin: 0;
33
+ line-height: 42px;
34
+ opacity: 0.8;
35
+ cursor: pointer;
36
+ transition: all 0.2s;
37
+ font-size: 14px;
38
+ font-weight: 400;
39
+ padding: 0 13px 2px;
40
+
41
+ @include kit-mixins.text-overflow;
42
+
43
+ &:hover,
44
+ &.is-open {
45
+ opacity: 1;
46
+ }
47
+
48
+ &.is-open {
49
+ background-color: rgba(255, 255, 255, 0.3);
50
+ }
51
+ }
52
+
53
+ .gd-header-search {
54
+ position: relative;
55
+ box-sizing: border-box;
56
+ padding-right: 34px;
57
+
58
+ &:hover {
59
+ background: rgba(255, 255, 255, 0.3);
60
+ }
61
+
62
+ &::after {
63
+ content: "\e612";
64
+ position: absolute;
65
+ top: 0;
66
+ right: 11px;
67
+ margin-left: 11px;
68
+ width: 12px;
69
+ opacity: 0.5;
70
+ text-align: center;
71
+ font-family: kit-variables.$gd-font-indigo;
72
+ font-size: 18px;
73
+ font-weight: 700;
74
+ }
75
+
76
+ &.is-open::after {
77
+ content: "\e613";
78
+ }
79
+ }
80
+
81
+ .gd-icon-header-search {
82
+ vertical-align: middle;
83
+ opacity: 0.8;
84
+ margin-right: 6px;
85
+
86
+ &::before {
87
+ content: "\e62b";
88
+ }
89
+ }
90
+
91
+ .gd-header-search-dropdown {
92
+ overflow: hidden;
93
+
94
+ .gd-list {
95
+ min-width: 210px;
96
+
97
+ .gd-list-item {
98
+ font-family: kit-variables.$gd-font-primary;
99
+ font-weight: 400;
100
+ }
26
101
  }
27
102
  }
@@ -15,8 +15,9 @@
15
15
  gap: 1em;
16
16
  padding: 0 1em;
17
17
  height: $line-height;
18
+ text-decoration: none;
18
19
 
19
- &--selected {
20
+ &--active {
20
21
  color: kit-variables.$is-focused-color;
21
22
  background: kit-variables.$is-focused-background;
22
23
  }
@@ -38,12 +39,57 @@
38
39
  &__text {
39
40
  flex-grow: 1;
40
41
  min-width: 0; // A hack to make ellipsis work in flexbox
41
- }
42
-
43
- &__text > p {
42
+ font-weight: 400;
43
+ line-height: 1.4rem;
44
+ color: kit-variables.$gd-color-text;
45
+ font-size: 14px;
44
46
  overflow: hidden;
45
47
  text-overflow: ellipsis;
46
48
  white-space: nowrap;
47
49
  }
50
+
51
+ &__details {
52
+ display: none;
53
+ width: 16px;
54
+ height: 16px;
55
+ align-items: center;
56
+
57
+ &__contents {
58
+ width: 190px;
59
+ padding: 5px;
60
+ box-sizing: border-box;
61
+ display: flex;
62
+ flex-direction: column;
63
+
64
+ & > * {
65
+ margin-bottom: 15px;
66
+ }
67
+
68
+ h3 {
69
+ font-size: 14px;
70
+ margin: 0 0 10px;
71
+ }
72
+
73
+ .gd-ellipsis-text-content {
74
+ font-size: 12px;
75
+ }
76
+
77
+ h4 {
78
+ margin: 0;
79
+ text-transform: uppercase;
80
+ font-size: 10px;
81
+ font-weight: 400;
82
+ color: kit-variables.$gd-color-state-blank;
83
+ }
84
+ }
85
+ }
86
+
87
+ &--active &__details {
88
+ display: unset;
89
+ }
48
90
  }
49
91
  }
92
+
93
+ .gd-semantic-search__bubble.bubble.bubble-light {
94
+ background: kit-variables.$gd-color-white;
95
+ }
@@ -1 +0,0 @@
1
- {"version":3,"file":"SemanticSearchOverlay.d.ts","sourceRoot":"","sources":["../../src/internal/SemanticSearchOverlay.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAG/B,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAC/D,OAAO,EAAE,uBAAuB,EAAE,yBAAyB,EAAE,MAAM,qBAAqB,CAAC;AAazF;;;GAGG;AACH,MAAM,MAAM,0BAA0B,GAAG;IACrC;;OAEG;IACH,QAAQ,EAAE,CAAC,IAAI,EAAE,yBAAyB,KAAK,IAAI,CAAC;IACpD;;OAEG;IACH,OAAO,CAAC,EAAE,kBAAkB,CAAC;IAC7B;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;OAEG;IACH,WAAW,CAAC,EAAE,uBAAuB,EAAE,CAAC;IACxC;;OAEG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB;;OAEG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,qBAAqB,EAAE,KAAK,CAAC,EAAE,CAAC,0BAA0B,CA4EtE,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"SemanticSearchOverlay.js","sourceRoot":"","sources":["../../src/internal/SemanticSearchOverlay.tsx"],"names":[],"mappings":"AAAA,gCAAgC;AAChC,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAC7E,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAGtD,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAE9C;;GAEG;AACH,MAAM,QAAQ,GAAG,GAAG,CAAC;AACrB;;GAEG;AACH,MAAM,cAAc,GAAG,GAAG,CAAC;AAiC3B;;;;GAIG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAyC,CAAC,EACxE,QAAQ,EACR,OAAO,EACP,SAAS,EACT,WAAW,EACX,UAAU,EACV,KAAK,GAAG,CAAC,GACZ,EAAE,EAAE;IACD,uBAAuB;IACvB,MAAM,CAAC,KAAK,EAAE,QAAQ,EAAE,UAAU,CAAC,GAAG,iBAAiB,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC;IAEtE,iBAAiB;IACjB,MAAM,EAAE,YAAY,EAAE,aAAa,EAAE,WAAW,EAAE,GAAG,iBAAiB,CAAC;QACnE,OAAO;QACP,SAAS;QACT,UAAU;QACV,WAAW;QACX,UAAU;QACV,KAAK;KACR,CAAC,CAAC;IAEH,KAAK,CAAC,SAAS,CAAC,GAAG,EAAE;QACjB,IAAI,YAAY,KAAK,OAAO,EAAE,CAAC;YAC3B,8BAA8B;YAC9B,0CAA0C;YAC1C,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;QAC/B,CAAC;IACL,CAAC,EAAE,CAAC,YAAY,EAAE,WAAW,CAAC,CAAC,CAAC;IAEhC,OAAO,CACH,6BAAK,SAAS,EAAC,6BAA6B;QACxC,oBAAC,KAAK,IACF,SAAS,EAAC,mCAAmC,EAC7C,SAAS,QACT,WAAW,EAAC,WAAW,EACvB,QAAQ,QACR,UAAU,QACV,KAAK,EAAE,KAAK,EACZ,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,GACtC;QACD,CAAC,GAAG,EAAE;YACH,QAAQ,YAAY,EAAE,CAAC;gBACnB,KAAK,SAAS;oBACV,OAAO,oBAAC,WAAW,IAAC,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,cAAc,GAAI,CAAC;gBAC/D,KAAK,OAAO;oBACR,OAAO,CACH,6BAAK,SAAS,EAAC,mCAAmC;wBAC9C,oBAAC,gBAAgB,IAAC,EAAE,EAAC,uBAAuB,GAAG,CAC7C,CACT,CAAC;gBACN,KAAK,SAAS;oBACV,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,CAAC;wBACxB,OAAO,CACH,6BAAK,SAAS,EAAC,wCAAwC;4BACnD,oBAAC,gBAAgB,IACb,EAAE,EAAC,4BAA4B,EAC/B,MAAM,EAAE,EAAE,KAAK,EAAE,UAAU,EAAE,GAC/B,CACA,CACT,CAAC;oBACN,CAAC;oBAED,OAAO,CACH,oBAAC,iBAAiB,IACd,aAAa,EAAE,aAAa,EAC5B,KAAK,EAAE,GAAG,EACV,QAAQ,EAAE,QAAQ,GACpB,CACL,CAAC;gBACN,KAAK,MAAM,CAAC;gBACZ;oBACI,OAAO,IAAI,CAAC;YACpB,CAAC;QACL,CAAC,CAAC,EAAE,CACF,CACT,CAAC;AACN,CAAC,CAAC"}