@gooddata/sdk-ui-semantic-search 10.8.0-alpha.3 → 10.8.0-alpha.31

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 (78) hide show
  1. package/esm/ResultsItem.d.ts +2 -32
  2. package/esm/ResultsItem.d.ts.map +1 -1
  3. package/esm/ResultsItem.js +13 -44
  4. package/esm/ResultsItem.js.map +1 -1
  5. package/esm/SearchResultsDropdownList.d.ts +2 -1
  6. package/esm/SearchResultsDropdownList.d.ts.map +1 -1
  7. package/esm/SearchResultsDropdownList.js +6 -6
  8. package/esm/SearchResultsDropdownList.js.map +1 -1
  9. package/esm/SemanticSearch.d.ts.map +1 -1
  10. package/esm/SemanticSearch.js +32 -13
  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 +11 -10
  15. package/esm/hooks/useListSelector.js.map +1 -1
  16. package/esm/hooks/useSemanticSearch.d.ts +2 -1
  17. package/esm/hooks/useSemanticSearch.d.ts.map +1 -1
  18. package/esm/hooks/useSemanticSearch.js +4 -2
  19. package/esm/hooks/useSemanticSearch.js.map +1 -1
  20. package/esm/internal/AnnotatedResultsItem.d.ts +5 -0
  21. package/esm/internal/AnnotatedResultsItem.d.ts.map +1 -0
  22. package/esm/internal/AnnotatedResultsItem.js +30 -0
  23. package/esm/internal/AnnotatedResultsItem.js.map +1 -0
  24. package/esm/internal/HeaderSearchButton.d.ts +17 -0
  25. package/esm/internal/HeaderSearchButton.d.ts.map +1 -0
  26. package/esm/internal/HeaderSearchButton.js +39 -0
  27. package/esm/internal/HeaderSearchButton.js.map +1 -0
  28. package/esm/internal/HistoryItem.d.ts +8 -0
  29. package/esm/internal/HistoryItem.d.ts.map +1 -0
  30. package/esm/internal/HistoryItem.js +21 -0
  31. package/esm/internal/HistoryItem.js.map +1 -0
  32. package/esm/internal/SearchList.d.ts +30 -0
  33. package/esm/internal/SearchList.d.ts.map +1 -0
  34. package/esm/internal/SearchList.js +16 -0
  35. package/esm/internal/SearchList.js.map +1 -0
  36. package/esm/internal/{SemanticSearchOverlay.d.ts → SearchOverlay.d.ts} +6 -5
  37. package/esm/internal/SearchOverlay.d.ts.map +1 -0
  38. package/esm/internal/SearchOverlay.js +124 -0
  39. package/esm/internal/SearchOverlay.js.map +1 -0
  40. package/esm/internal/UpdateDate.d.ts +10 -0
  41. package/esm/internal/UpdateDate.d.ts.map +1 -0
  42. package/esm/internal/UpdateDate.js +29 -0
  43. package/esm/internal/UpdateDate.js.map +1 -0
  44. package/esm/internal.d.ts +1 -1
  45. package/esm/internal.d.ts.map +1 -1
  46. package/esm/internal.js +1 -1
  47. package/esm/internal.js.map +1 -1
  48. package/esm/sdk-ui-semantic-search.d.ts +3 -1
  49. package/esm/types.d.ts +33 -0
  50. package/esm/types.d.ts.map +1 -0
  51. package/esm/types.js +3 -0
  52. package/esm/types.js.map +1 -0
  53. package/esm/utils/getUIPath.d.ts +14 -0
  54. package/esm/utils/getUIPath.d.ts.map +1 -0
  55. package/esm/utils/getUIPath.js +37 -0
  56. package/esm/utils/getUIPath.js.map +1 -0
  57. package/esm/utils/renderDetails.d.ts +8 -0
  58. package/esm/utils/renderDetails.d.ts.map +1 -0
  59. package/esm/utils/renderDetails.js +52 -0
  60. package/esm/utils/renderDetails.js.map +1 -0
  61. package/esm/utils/renderItemIcon.d.ts +9 -0
  62. package/esm/utils/renderItemIcon.d.ts.map +1 -0
  63. package/esm/utils/renderItemIcon.js +32 -0
  64. package/esm/utils/renderItemIcon.js.map +1 -0
  65. package/package.json +7 -6
  66. package/styles/css/internal.css +159 -9
  67. package/styles/css/internal.css.map +1 -1
  68. package/styles/css/main.css +84 -7
  69. package/styles/css/main.css.map +1 -1
  70. package/styles/scss/internal.scss +85 -3
  71. package/styles/scss/main.scss +99 -16
  72. package/esm/internal/SearchResultsList.d.ts +0 -26
  73. package/esm/internal/SearchResultsList.d.ts.map +0 -1
  74. package/esm/internal/SearchResultsList.js +0 -18
  75. package/esm/internal/SearchResultsList.js.map +0 -1
  76. package/esm/internal/SemanticSearchOverlay.d.ts.map +0 -1
  77. package/esm/internal/SemanticSearchOverlay.js +0 -60
  78. package/esm/internal/SemanticSearchOverlay.js.map +0 -1
@@ -1,39 +1,9 @@
1
1
  import * as React from "react";
2
2
  import { ISemanticSearchResultItem } from "@gooddata/sdk-model";
3
- export declare const ITEM_HEIGHT = 45;
4
- /**
5
- * Props for the ResultsItem component.
6
- * @internal
7
- */
8
- export type ResultsItemProps = {
9
- /**
10
- * The item to render.
11
- */
12
- item: ISemanticSearchResultItem;
13
- /**
14
- * The height of the item.
15
- */
16
- height: number;
17
- /**
18
- * The width of the item.
19
- */
20
- width: number;
21
- /**
22
- * Whether the item is selected.
23
- */
24
- selected: boolean;
25
- /**
26
- * Callback to trigger when the item is hovered.
27
- */
28
- onHover: () => void;
29
- /**
30
- * Callback to trigger when the item is clicked.
31
- */
32
- onClick: () => void;
33
- };
3
+ import { ListItemProps } from "./types.js";
34
4
  /**
35
5
  * A single result item in the search results.
36
6
  * @internal
37
7
  */
38
- export declare const ResultsItem: React.FC<ResultsItemProps>;
8
+ export declare const ResultsItem: React.FC<ListItemProps<ISemanticSearchResultItem>>;
39
9
  //# sourceMappingURL=ResultsItem.d.ts.map
@@ -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;AAC/B,OAAO,EAAE,yBAAyB,EAAE,MAAM,qBAAqB,CAAC;AAEhE,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAK3C;;;GAGG;AACH,eAAO,MAAM,WAAW,EAAE,KAAK,CAAC,EAAE,CAAC,aAAa,CAAC,yBAAyB,CAAC,CA2B1E,CAAC"}
@@ -1,54 +1,23 @@
1
1
  // (C) 2024 GoodData Corporation
2
2
  import * as React from "react";
3
+ import { useTheme } from "@gooddata/sdk-ui-theme-provider";
3
4
  import classnames from "classnames";
4
- import { Icon, Typography } from "@gooddata/sdk-ui-kit";
5
- export const ITEM_HEIGHT = 45;
5
+ import { renderItemIcon } from "./utils/renderItemIcon.js";
6
+ import { renderDetails } from "./utils/renderDetails.js";
6
7
  /**
7
8
  * A single result item in the search results.
8
9
  * @internal
9
10
  */
10
- export const ResultsItem = ({ item, onHover, onClick, selected }) => {
11
- const onMouseEnter = (e) => {
12
- // Prevent multiple triggers
13
- if (e.target !== e.currentTarget) {
14
- return;
15
- }
16
- onHover();
17
- };
18
- const className = classnames({
19
- "gd-semantic-search__results-item": true,
20
- "gd-semantic-search__results-item--selected": selected,
21
- });
11
+ export const ResultsItem = ({ listItem, isActive, setActive, onSelect, }) => {
12
+ const theme = useTheme();
22
13
  // 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))));
28
- };
29
- /**
30
- * Pick an icon according to the item type.
31
- */
32
- const renderItemIcon = (item) => {
33
- switch (item.type) {
34
- case "dashboard":
35
- return React.createElement(Icon.Dashboard, null);
36
- case "visualization":
37
- return React.createElement(Icon.Insight, null);
38
- case "dataset":
39
- return React.createElement(Icon.Dataset, null);
40
- case "attribute":
41
- return React.createElement(Icon.Attribute, null);
42
- case "label":
43
- return React.createElement(Icon.Label, null);
44
- case "fact":
45
- return React.createElement(Icon.Fact, null);
46
- case "metric":
47
- return React.createElement(Icon.Metric, null);
48
- case "date":
49
- return React.createElement(Icon.Date, null);
50
- default:
51
- return null;
52
- }
14
+ return (React.createElement("span", { className: classnames({
15
+ "gd-semantic-search__results-item": true,
16
+ "gd-semantic-search__results-item--active": isActive,
17
+ }), onPointerOver: () => setActive(listItem), onClick: (e) => onSelect(listItem, e.nativeEvent) },
18
+ React.createElement("span", { className: "gd-semantic-search__results-item__icon" }, renderItemIcon(listItem, { color: theme?.palette?.complementary?.c5 ?? "#B0BECA" })),
19
+ React.createElement("span", { className: "gd-semantic-search__results-item__text gd-semantic-search__results-item__text--result" },
20
+ React.createElement("span", { className: "gd-semantic-search__results-item__text__1" }, listItem.item.title)),
21
+ isActive ? renderDetails(listItem, theme) : null));
53
22
  };
54
23
  //# sourceMappingURL=ResultsItem.js.map
@@ -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":"AAAA,gCAAgC;AAEhC,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,EAAE,QAAQ,EAAE,MAAM,iCAAiC,CAAC;AAE3D,OAAO,UAAU,MAAM,YAAY,CAAC;AACpC,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAC3D,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAEzD;;;GAGG;AACH,MAAM,CAAC,MAAM,WAAW,GAAuD,CAAC,EAC5E,QAAQ,EACR,QAAQ,EACR,SAAS,EACT,QAAQ,GACX,EAAE,EAAE;IACD,MAAM,KAAK,GAAG,QAAQ,EAAE,CAAC;IAEzB,sFAAsF;IACtF,OAAO,CACH,8BACI,SAAS,EAAE,UAAU,CAAC;YAClB,kCAAkC,EAAE,IAAI;YACxC,0CAA0C,EAAE,QAAQ;SACvD,CAAC,EACF,aAAa,EAAE,GAAG,EAAE,CAAC,SAAS,CAAC,QAAQ,CAAC,EACxC,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC,CAAC,WAAW,CAAC;QAEjD,8BAAM,SAAS,EAAC,wCAAwC,IACnD,cAAc,CAAC,QAAQ,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,aAAa,EAAE,EAAE,IAAI,SAAS,EAAE,CAAC,CACjF;QACP,8BAAM,SAAS,EAAC,uFAAuF;YACnG,8BAAM,SAAS,EAAC,2CAA2C,IAAE,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAQ,CACrF;QACN,QAAQ,CAAC,CAAC,CAAC,aAAa,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAC9C,CACV,CAAC;AACN,CAAC,CAAC"}
@@ -1,5 +1,6 @@
1
1
  import * as React from "react";
2
2
  import { ISemanticSearchResultItem } from "@gooddata/sdk-model";
3
+ import { ListItem } from "./types.js";
3
4
  /**
4
5
  * Search results props.
5
6
  * @internal
@@ -8,7 +9,7 @@ type SearchResultsDropdownListProps = {
8
9
  /**
9
10
  * Search result items.
10
11
  */
11
- searchResults: ISemanticSearchResultItem[];
12
+ searchResults: ListItem<ISemanticSearchResultItem>[];
12
13
  /**
13
14
  * Loading flag.
14
15
  */
@@ -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,yBAAyB,EAAE,MAAM,qBAAqB,CAAC;AAIhE,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAItC;;;GAGG;AACH,KAAK,8BAA8B,GAAG;IAClC;;OAEG;IACH,aAAa,EAAE,QAAQ,CAAC,yBAAyB,CAAC,EAAE,CAAC;IACrD;;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,CA6B9E,CAAC"}
@@ -1,18 +1,18 @@
1
1
  // (C) 2024 GoodData Corporation
2
2
  import * as React from "react";
3
3
  import { DropdownList } from "@gooddata/sdk-ui-kit";
4
- import { ITEM_HEIGHT, ResultsItem } from "./ResultsItem.js";
4
+ import { ResultsItem } from "./ResultsItem.js";
5
5
  import { useListSelector } from "./hooks/index.js";
6
+ const ITEM_HEIGHT = 50;
6
7
  /**
7
8
  * A dropdown list with the search results.
8
9
  * @internal
9
10
  */
10
11
  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 }));
12
+ const onListItemSelect = (item) => onSelect(item.item);
13
+ const [active, setActive] = useListSelector(searchResults, onListItemSelect);
14
+ return (React.createElement(DropdownList, { width: width, isMobile: isMobile, isLoading: searchLoading, itemHeight: ITEM_HEIGHT, renderItem: ({ item }) => {
15
+ return (React.createElement(ResultsItem, { listItem: item, isActive: active === item, setActive: setActive, onSelect: onListItemSelect }));
16
16
  }, items: searchResults }));
17
17
  };
18
18
  //# 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,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAGnD,MAAM,WAAW,GAAG,EAAE,CAAC;AA6BvB;;;GAGG;AACH,MAAM,CAAC,MAAM,yBAAyB,GAA6C,CAAC,EAChF,aAAa,EACb,aAAa,EACb,QAAQ,EACR,KAAK,EACL,QAAQ,GACX,EAAE,EAAE;IACD,MAAM,gBAAgB,GAAG,CAAC,IAAyC,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC5F,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,eAAe,CAAC,aAAa,EAAE,gBAAgB,CAAC,CAAC;IAE7E,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,EAAE,EAAE;YACrB,OAAO,CACH,oBAAC,WAAW,IACR,QAAQ,EAAE,IAAI,EACd,QAAQ,EAAE,MAAM,KAAK,IAAI,EACzB,SAAS,EAAE,SAAS,EACpB,QAAQ,EAAE,gBAAgB,GAC5B,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;AAI/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;AAyHF;;;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"}
@@ -16,7 +16,7 @@ const DEBOUNCE = 300;
16
16
  */
17
17
  const SemanticSearchCore = ({ backend, workspace, onSelect, onError, objectTypes, deepSearch = false, limit = 10, className, placeholder, }) => {
18
18
  // Input value handling
19
- const [value, setValue, searchTerm] = useDebouncedState("", DEBOUNCE);
19
+ const [value, setValue, searchTerm, setImmediate] = useDebouncedState("", DEBOUNCE);
20
20
  // Search results
21
21
  const { searchStatus, searchResults, searchError } = useSemanticSearch({
22
22
  backend,
@@ -26,32 +26,51 @@ const SemanticSearchCore = ({ backend, workspace, onSelect, onError, objectTypes
26
26
  deepSearch,
27
27
  limit,
28
28
  });
29
+ // Build list items for rendering
30
+ const listItems = React.useMemo(() => searchResults.map((item) => ({ item })), [searchResults]);
29
31
  // Match the width of the drop-down to the input field
30
32
  const [width, setWidth] = React.useState(0);
31
33
  const inputRef = React.useRef(null);
32
34
  React.useLayoutEffect(() => {
33
- const input = inputRef.current?.inputNodeRef?.inputNodeRef;
34
- if (input) {
35
- setWidth(input.offsetWidth);
36
- }
35
+ const handleResize = () => {
36
+ const input = inputRef.current?.inputNodeRef?.inputNodeRef;
37
+ if (input) {
38
+ setWidth(input.offsetWidth);
39
+ }
40
+ };
41
+ handleResize();
42
+ window.addEventListener("resize", handleResize);
43
+ return () => {
44
+ window.removeEventListener("resize", handleResize);
45
+ };
37
46
  }, []);
38
- const onItemSelect = React.useCallback((item) => {
39
- onSelect(item);
40
- inputRef.current?.inputNodeRef?.inputNodeRef?.blur();
41
- }, [onSelect]);
42
47
  // Report errors
43
48
  React.useEffect(() => {
44
49
  if (onError && searchStatus === "error") {
45
50
  onError(searchError);
46
51
  }
47
52
  }, [onError, searchError, searchStatus]);
48
- return (React.createElement(Dropdown, { className: classnames("gd-semantic-search", className), closeOnMouseDrag: false, closeOnOutsideClick: false, closeOnParentScroll: false, renderBody: ({ isMobile }) => {
53
+ return (React.createElement(Dropdown, { className: classnames("gd-semantic-search", className), ignoreClicksOnByClass: [
54
+ ".gd-bubble",
55
+ ".gd-semantic-search__results-item",
56
+ ".gd-semantic-search__input",
57
+ ], renderBody: ({ isMobile, closeDropdown }) => {
49
58
  if (!searchResults.length && searchStatus !== "loading") {
50
59
  return null;
51
60
  }
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 }));
61
+ return (React.createElement(SearchResultsDropdownList, { width: width, isMobile: isMobile, searchResults: listItems, searchLoading: searchStatus === "loading", onSelect: (item) => {
62
+ // Blur and clear the state
63
+ const input = inputRef.current?.inputNodeRef?.inputNodeRef;
64
+ if (input) {
65
+ input.blur();
66
+ }
67
+ setImmediate("");
68
+ closeDropdown();
69
+ // Report the selected item
70
+ onSelect(item);
71
+ } }));
72
+ }, renderButton: ({ openDropdown }) => {
73
+ 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
74
  } }));
56
75
  };
57
76
  /**
@@ -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, e: MouseEvent | KeyboardEvent) => 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,yCAED,UAAU,GAAG,aAAa,KAAK,IAAI,sBA0CI,IAAI,CACrE,CAAC"}
@@ -10,32 +10,33 @@ 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
- event.preventDefault();
21
- event.stopImmediatePropagation();
20
+ const setIndex = (index) => setSelected(Math.max(Math.min(index, items.length - 1), 0));
22
21
  switch (event.key) {
23
22
  case "ArrowDown":
24
- doSetSelected(selected + 1);
23
+ setIndex(selected + 1);
25
24
  break;
26
25
  case "ArrowUp":
27
- doSetSelected(selected - 1);
26
+ setIndex(selected - 1);
28
27
  break;
29
28
  case "Enter":
30
- onSelect(items[selected]);
29
+ onSelect(items[selected], event);
31
30
  }
31
+ event.stopImmediatePropagation();
32
+ event.preventDefault();
32
33
  };
33
34
  // Listen to keyboard events while the component is mounted
34
35
  document.addEventListener("keydown", listener);
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,CAC3B,KAAe,EACf,QAA0D,EAC5D,EAAE;IACA,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,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,EAAE,KAAK,CAAC,CAAC;YACzC,CAAC;YAED,KAAK,CAAC,wBAAwB,EAAE,CAAC;YACjC,KAAK,CAAC,cAAc,EAAE,CAAC;QAC3B,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 { ISemanticSearchResultItem, GenAISemanticSearchType, ISemanticSearchRelationship } from "@gooddata/sdk-model";
2
2
  import { IAnalyticalBackend } from "@gooddata/sdk-backend-spi";
3
3
  /**
4
4
  * The result of the semantic search hook.
@@ -21,6 +21,7 @@ export type SemanticSearchInputResult = {
21
21
  * The search results.
22
22
  */
23
23
  searchResults: ISemanticSearchResultItem[];
24
+ relationships: ISemanticSearchRelationship[];
24
25
  };
25
26
  /**
26
27
  * 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,EACH,yBAAyB,EACzB,uBAAuB,EACvB,2BAA2B,EAC9B,MAAM,qBAAqB,CAAC;AAE7B,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;IAC3C,aAAa,EAAE,2BAA2B,EAAE,CAAC;CAChD,CAAC;AAYF;;;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,yBAiE5B,CAAC"}
@@ -8,6 +8,7 @@ const DEFAULT_STATE = {
8
8
  searchStatus: "idle",
9
9
  searchError: "",
10
10
  searchResults: [],
11
+ relationships: [],
11
12
  };
12
13
  const DEFAULT_OBJECT_TYPES = [];
13
14
  /**
@@ -54,8 +55,8 @@ 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,
59
+ relationships: res.relationships,
59
60
  });
60
61
  })
61
62
  .catch((e) => {
@@ -66,6 +67,7 @@ export const useSemanticSearch = ({ searchTerm, objectTypes = DEFAULT_OBJECT_TYP
66
67
  searchStatus: "error",
67
68
  searchError: errorMessage(e),
68
69
  searchResults: [],
70
+ relationships: [],
69
71
  });
70
72
  });
71
73
  return () => {
@@ -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":"AAAA,gCAAgC;AAEhC,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAM5C,OAAO,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AA2BxE;;GAEG;AACH,MAAM,aAAa,GAA8B;IAC7C,YAAY,EAAE,MAAM;IACpB,WAAW,EAAE,EAAE;IACf,aAAa,EAAE,EAAE;IACjB,aAAa,EAAE,EAAE;CACpB,CAAC;AAoCF,MAAM,oBAAoB,GAA8B,EAAE,CAAC;AAE3D;;;;;GAKG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,EAC9B,UAAU,EACV,WAAW,GAAG,oBAAoB,EAClC,UAAU,EACV,KAAK,EACL,OAAO,EACP,SAAS,GACa,EAA6B,EAAE;IACrD,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAA4B,aAAa,CAAC,CAAC;IAC7E,MAAM,gBAAgB,GAAG,gBAAgB,CAAC,OAAO,CAAC,CAAC;IACnD,MAAM,kBAAkB,GAAG,kBAAkB,CAAC,SAAS,CAAC,CAAC;IAEzD,SAAS,CAAC,GAAG,EAAE;QACX,IAAI,UAAU,KAAK,EAAE,EAAE,CAAC;YACpB,QAAQ,CAAC,aAAa,CAAC,CAAC;YACxB,OAAO;QACX,CAAC;QAED,QAAQ,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;YACpB,yEAAyE;YACzE,GAAG,QAAQ;YACX,YAAY,EAAE,SAAS;SAC1B,CAAC,CAAC,CAAC;QAEJ,sBAAsB;QACtB,IAAI,EAAE,GAAG,gBAAgB;aACpB,SAAS,CAAC,kBAAkB,CAAC;aAC7B,KAAK,EAAE;aACP,sBAAsB,EAAE;aACxB,YAAY,CAAC,UAAU,CAAC,CAAC;QAC9B,IAAI,WAAW,CAAC,MAAM,EAAE,CAAC;YACrB,EAAE,GAAG,EAAE,CAAC,eAAe,CAAC,WAAW,CAAC,CAAC;QACzC,CAAC;QACD,IAAI,UAAU,EAAE,CAAC;YACb,EAAE,GAAG,EAAE,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC;QACvC,CAAC;QACD,IAAI,KAAK,EAAE,CAAC;YACR,EAAE,GAAG,EAAE,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;QAC7B,CAAC;QAED,oBAAoB;QACpB,MAAM,gBAAgB,GAAG,IAAI,eAAe,EAAE,CAAC;QAC/C,EAAE,CAAC,KAAK,CAAC;YACL,MAAM,EAAE,gBAAgB,CAAC,MAAM;SAClC,CAAC;aACG,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE;YACV,QAAQ,CAAC;gBACL,YAAY,EAAE,SAAS;gBACvB,WAAW,EAAE,EAAE;gBACf,aAAa,EAAE,GAAG,CAAC,OAAO;gBAC1B,aAAa,EAAE,GAAG,CAAC,aAAa;aACnC,CAAC,CAAC;QACP,CAAC,CAAC;aACD,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE;YACT,IAAI,gBAAgB,CAAC,MAAM,CAAC,OAAO;gBAC/B,uBAAuB;gBACvB,OAAO;YAEX,QAAQ,CAAC;gBACL,YAAY,EAAE,OAAO;gBACrB,WAAW,EAAE,YAAY,CAAC,CAAC,CAAC;gBAC5B,aAAa,EAAE,EAAE;gBACjB,aAAa,EAAE,EAAE;aACpB,CAAC,CAAC;QACP,CAAC,CAAC,CAAC;QAEP,OAAO,GAAG,EAAE;YACR,gBAAgB,CAAC,KAAK,EAAE,CAAC;QAC7B,CAAC,CAAC;IACN,CAAC,EAAE,CAAC,gBAAgB,EAAE,kBAAkB,EAAE,UAAU,EAAE,WAAW,EAAE,UAAU,EAAE,KAAK,CAAC,CAAC,CAAC;IAEvF,OAAO,KAAK,CAAC;AACjB,CAAC,CAAC;AAEF;;GAEG;AACH,MAAM,YAAY,GAAG,CAAC,CAAU,EAAE,EAAE;IAChC,IAAI,CAAC,YAAY,KAAK,EAAE,CAAC;QACrB,OAAO,CAAC,CAAC,OAAO,CAAC;IACrB,CAAC;IACD,OAAO,MAAM,CAAC,CAAC,CAAC,CAAC;AACrB,CAAC,CAAC"}
@@ -0,0 +1,5 @@
1
+ import * as React from "react";
2
+ import { ISemanticSearchResultItem } from "@gooddata/sdk-model";
3
+ import { ListItemProps } from "../types.js";
4
+ export declare const AnnotatedResultsItem: React.NamedExoticComponent<ListItemProps<ISemanticSearchResultItem>>;
5
+ //# sourceMappingURL=AnnotatedResultsItem.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AnnotatedResultsItem.d.ts","sourceRoot":"","sources":["../../src/internal/AnnotatedResultsItem.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,yBAAyB,EAAE,MAAM,qBAAqB,CAAC;AAEhE,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAmD5C,eAAO,MAAM,oBAAoB,sEAAuC,CAAC"}
@@ -0,0 +1,30 @@
1
+ // (C) 2024 GoodData Corporation
2
+ import * as React from "react";
3
+ import { useTheme } from "@gooddata/sdk-ui-theme-provider";
4
+ import classnames from "classnames";
5
+ import { renderDetails } from "../utils/renderDetails.js";
6
+ import { renderItemIcon } from "../utils/renderItemIcon.js";
7
+ import { UpdatedDate } from "./UpdateDate.js";
8
+ /**
9
+ * A single result item in the search results.
10
+ * @internal
11
+ */
12
+ const CoreAnnotatedResultsItem = ({ listItem, isActive, setActive, onSelect, }) => {
13
+ const theme = useTheme();
14
+ const Tag = listItem.url ? "a" : "span";
15
+ // Use mouse enter with the target check instead of hover to prevent multiple triggers
16
+ return (React.createElement(Tag, { href: listItem.url, className: classnames({
17
+ "gd-semantic-search__results-item": true,
18
+ "gd-semantic-search__results-item--active": isActive,
19
+ }), onPointerOver: () => setActive(listItem), onClick: (e) => onSelect(listItem, e.nativeEvent) },
20
+ React.createElement("span", { className: "gd-semantic-search__results-item__icon" }, renderItemIcon(listItem, { color: theme?.palette?.complementary?.c5 ?? "#B0BECA" })),
21
+ React.createElement("span", { className: "gd-semantic-search__results-item__text gd-semantic-search__results-item__text--result" },
22
+ React.createElement("span", { className: "gd-semantic-search__results-item__text__1" }, listItem.item.title),
23
+ React.createElement("span", { className: "gd-semantic-search__results-item__text__2" },
24
+ listItem.parentRef ? (React.createElement("span", { className: "gd-semantic-search__results-item__annotation" }, listItem.parentRef.sourceObjectTitle)) : null,
25
+ React.createElement("span", { className: "gd-semantic-search__results-item__annotation" },
26
+ React.createElement(UpdatedDate, { listItem: listItem })))),
27
+ isActive ? renderDetails(listItem, theme) : null));
28
+ };
29
+ export const AnnotatedResultsItem = React.memo(CoreAnnotatedResultsItem);
30
+ //# sourceMappingURL=AnnotatedResultsItem.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AnnotatedResultsItem.js","sourceRoot":"","sources":["../../src/internal/AnnotatedResultsItem.tsx"],"names":[],"mappings":"AAAA,gCAAgC;AAEhC,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,EAAE,QAAQ,EAAE,MAAM,iCAAiC,CAAC;AAE3D,OAAO,UAAU,MAAM,YAAY,CAAC;AACpC,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAC1D,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAC5D,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAE9C;;;GAGG;AACH,MAAM,wBAAwB,GAAuD,CAAC,EAClF,QAAQ,EACR,QAAQ,EACR,SAAS,EACT,QAAQ,GACX,EAAE,EAAE;IACD,MAAM,KAAK,GAAG,QAAQ,EAAE,CAAC;IACzB,MAAM,GAAG,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC;IAExC,sFAAsF;IACtF,OAAO,CACH,oBAAC,GAAG,IACA,IAAI,EAAE,QAAQ,CAAC,GAAG,EAClB,SAAS,EAAE,UAAU,CAAC;YAClB,kCAAkC,EAAE,IAAI;YACxC,0CAA0C,EAAE,QAAQ;SACvD,CAAC,EACF,aAAa,EAAE,GAAG,EAAE,CAAC,SAAS,CAAC,QAAQ,CAAC,EACxC,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC,CAAC,WAAW,CAAC;QAEjD,8BAAM,SAAS,EAAC,wCAAwC,IACnD,cAAc,CAAC,QAAQ,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,aAAa,EAAE,EAAE,IAAI,SAAS,EAAE,CAAC,CACjF;QACP,8BAAM,SAAS,EAAC,uFAAuF;YACnG,8BAAM,SAAS,EAAC,2CAA2C,IAAE,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAQ;YACxF,8BAAM,SAAS,EAAC,2CAA2C;gBACtD,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,CAClB,8BAAM,SAAS,EAAC,8CAA8C,IACzD,QAAQ,CAAC,SAAS,CAAC,iBAAiB,CAClC,CACV,CAAC,CAAC,CAAC,IAAI;gBACR,8BAAM,SAAS,EAAC,8CAA8C;oBAC1D,oBAAC,WAAW,IAAC,QAAQ,EAAE,QAAQ,GAAI,CAChC,CACJ,CACJ;QACN,QAAQ,CAAC,CAAC,CAAC,aAAa,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAC/C,CACT,CAAC;AACN,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,oBAAoB,GAAG,KAAK,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC"}
@@ -0,0 +1,17 @@
1
+ import React from "react";
2
+ import { SearchOverlayProps } from "./SearchOverlay.js";
3
+ import { ISemanticSearchResultItem } from "@gooddata/sdk-model";
4
+ export type HeaderSearchButtonProps = SearchOverlayProps & {
5
+ /**
6
+ * Callback to be called when an item is selected.
7
+ * @param item - the selected item
8
+ * @param e - the event that triggered the selection
9
+ * @param itemUrl - the URL of the selected item, if available
10
+ */
11
+ onSelect: (item: ISemanticSearchResultItem, e: MouseEvent | KeyboardEvent, itemUrl?: string) => void;
12
+ };
13
+ export declare const HeaderSearchButtonCore: React.FC<HeaderSearchButtonProps>;
14
+ export declare const HeaderSearchButton: React.FC<import("react-intl").WithIntlProps<HeaderSearchButtonProps>> & {
15
+ WrappedComponent: React.ComponentType<HeaderSearchButtonProps>;
16
+ };
17
+ //# 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;AACvE,OAAO,EAAE,yBAAyB,EAAE,MAAM,qBAAqB,CAAC;AAIhE,MAAM,MAAM,uBAAuB,GAAG,kBAAkB,GAAG;IACvD;;;;;OAKG;IACH,QAAQ,EAAE,CAAC,IAAI,EAAE,yBAAyB,EAAE,CAAC,EAAE,UAAU,GAAG,aAAa,EAAE,OAAO,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;CACxG,CAAC;AAEF,eAAO,MAAM,sBAAsB,EAAE,KAAK,CAAC,EAAE,CAAC,uBAAuB,CA2DpE,CAAC;AAEF,eAAO,MAAM,kBAAkB;;CAAqC,CAAC"}
@@ -0,0 +1,39 @@
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
+ // Handle Cmd+K and Ctrl+K shortcuts
12
+ React.useEffect(() => {
13
+ const shortcutHandler = (event) => {
14
+ if (event.key === "k" && (event.ctrlKey || event.metaKey)) {
15
+ setIsOpen(true);
16
+ }
17
+ };
18
+ if (!isOpen) {
19
+ document.addEventListener("keydown", shortcutHandler);
20
+ }
21
+ return () => {
22
+ document.removeEventListener("keydown", shortcutHandler);
23
+ };
24
+ }, [isOpen]);
25
+ // Inject dialog closing into a callback
26
+ const handleSelect = React.useCallback((item, e, url) => {
27
+ setIsOpen(false);
28
+ return onSelect(item, e, url);
29
+ }, [onSelect, setIsOpen]);
30
+ return (React.createElement(Button, { title: overlayProps.intl.formatMessage({ id: "gs.header.search" }), className: classNames, onClick: () => setIsOpen(true) },
31
+ React.createElement("span", { className: "gd-icon-header-search" }),
32
+ React.createElement("span", { className: "gd-header-search-label" },
33
+ React.createElement(FormattedMessage, { id: "gs.header.search" })),
34
+ 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"] },
35
+ React.createElement("div", { className: "gd-dialog gd-dropdown overlay gd-header-search-dropdown" },
36
+ React.createElement(SearchOverlay, { onSelect: handleSelect, ...overlayProps })))) : null));
37
+ };
38
+ export const HeaderSearchButton = injectIntl(HeaderSearchButtonCore);
39
+ //# 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;AAY1C,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,oCAAoC;IACpC,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,wCAAwC;IACxC,MAAM,YAAY,GAAG,KAAK,CAAC,WAAW,CAClC,CAAC,IAA+B,EAAE,CAA6B,EAAE,GAAY,EAAE,EAAE;QAC7E,SAAS,CAAC,KAAK,CAAC,CAAC;QACjB,OAAO,QAAQ,CAAC,IAAI,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC;IAClC,CAAC,EACD,CAAC,QAAQ,EAAE,SAAS,CAAC,CACxB,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"}
@@ -0,0 +1,8 @@
1
+ import * as React from "react";
2
+ import { ListItemProps } from "../types.js";
3
+ /**
4
+ * A single result item in the search results.
5
+ * @internal
6
+ */
7
+ export declare const HistoryItem: React.FC<ListItemProps<string>>;
8
+ //# sourceMappingURL=HistoryItem.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"HistoryItem.d.ts","sourceRoot":"","sources":["../../src/internal/HistoryItem.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAG/B,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAG5C;;;GAGG;AACH,eAAO,MAAM,WAAW,EAAE,KAAK,CAAC,EAAE,CAAC,aAAa,CAAC,MAAM,CAAC,CAqBvD,CAAC"}
@@ -0,0 +1,21 @@
1
+ // (C) 2024 GoodData Corporation
2
+ import * as React from "react";
3
+ import { Icon } from "@gooddata/sdk-ui-kit";
4
+ import { useTheme } from "@gooddata/sdk-ui-theme-provider";
5
+ import classnames from "classnames";
6
+ /**
7
+ * A single result item in the search results.
8
+ * @internal
9
+ */
10
+ export const HistoryItem = ({ listItem, onSelect, isActive, setActive }) => {
11
+ const theme = useTheme();
12
+ // Use mouse enter with the target check instead of hover to prevent multiple triggers
13
+ return (React.createElement("span", { className: classnames({
14
+ "gd-semantic-search__results-item": true,
15
+ "gd-semantic-search__results-item--active": isActive,
16
+ }), onPointerOver: () => setActive(listItem), onClick: (e) => onSelect(listItem, e.nativeEvent) },
17
+ React.createElement("span", { className: "gd-semantic-search__results-item__icon gd-semantic-search__results-item__icon--history" },
18
+ React.createElement(Icon.HistoryBack, { color: theme?.palette?.complementary?.c5 ?? "#B0BECA" })),
19
+ React.createElement("span", { className: "gd-semantic-search__results-item__text gd-semantic-search__results-item__text--history" }, listItem.item)));
20
+ };
21
+ //# sourceMappingURL=HistoryItem.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"HistoryItem.js","sourceRoot":"","sources":["../../src/internal/HistoryItem.tsx"],"names":[],"mappings":"AAAA,gCAAgC;AAEhC,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAC;AAC5C,OAAO,EAAE,QAAQ,EAAE,MAAM,iCAAiC,CAAC;AAE3D,OAAO,UAAU,MAAM,YAAY,CAAC;AAEpC;;;GAGG;AACH,MAAM,CAAC,MAAM,WAAW,GAAoC,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,EAAE,EAAE;IACxG,MAAM,KAAK,GAAG,QAAQ,EAAE,CAAC;IAEzB,sFAAsF;IACtF,OAAO,CACH,8BACI,SAAS,EAAE,UAAU,CAAC;YAClB,kCAAkC,EAAE,IAAI;YACxC,0CAA0C,EAAE,QAAQ;SACvD,CAAC,EACF,aAAa,EAAE,GAAG,EAAE,CAAC,SAAS,CAAC,QAAQ,CAAC,EACxC,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC,CAAC,WAAW,CAAC;QAEjD,8BAAM,SAAS,EAAC,wFAAwF;YACpG,oBAAC,IAAI,CAAC,WAAW,IAAC,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,aAAa,EAAE,EAAE,IAAI,SAAS,GAAI,CACxE;QACP,8BAAM,SAAS,EAAC,wFAAwF,IACnG,QAAQ,CAAC,IAAI,CACX,CACJ,CACV,CAAC;AACN,CAAC,CAAC"}
@@ -0,0 +1,30 @@
1
+ import * as React from "react";
2
+ import { ListItem, ListItemProps } from "../types.js";
3
+ /**
4
+ * Search results props.
5
+ * @internal
6
+ */
7
+ export type SearchListProps<T> = {
8
+ /**
9
+ * Search result items.
10
+ */
11
+ items: ListItem<T>[];
12
+ /**
13
+ * Width of the list.
14
+ */
15
+ width: number;
16
+ /**
17
+ * Callback for item selection.
18
+ */
19
+ onSelect: (item: ListItem<T>, e: MouseEvent | KeyboardEvent) => void;
20
+ /**
21
+ * Component to render the item.
22
+ */
23
+ ItemComponent: React.ComponentType<ListItemProps<T>>;
24
+ };
25
+ /**
26
+ * A dropdown list with the search results.
27
+ * @internal
28
+ */
29
+ export declare const SearchList: <T>({ items, width, onSelect, ItemComponent }: SearchListProps<T>) => React.JSX.Element;
30
+ //# sourceMappingURL=SearchList.d.ts.map