@gooddata/sdk-ui-semantic-search 10.37.0 → 10.38.0-alpha.2

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 (114) hide show
  1. package/esm/SearchItem.d.ts +20 -0
  2. package/esm/SearchItem.d.ts.map +1 -0
  3. package/esm/SearchItem.js +28 -0
  4. package/esm/SearchItem.js.map +1 -0
  5. package/esm/SemanticSearch.d.ts.map +1 -1
  6. package/esm/SemanticSearch.js +32 -11
  7. package/esm/SemanticSearch.js.map +1 -1
  8. package/esm/SemanticSearchItem.d.ts +11 -0
  9. package/esm/SemanticSearchItem.d.ts.map +1 -0
  10. package/esm/SemanticSearchItem.js +17 -0
  11. package/esm/SemanticSearchItem.js.map +1 -0
  12. package/esm/hooks/useSearchMetrics.d.ts +3 -4
  13. package/esm/hooks/useSearchMetrics.d.ts.map +1 -1
  14. package/esm/hooks/useSearchMetrics.js +12 -9
  15. package/esm/hooks/useSearchMetrics.js.map +1 -1
  16. package/esm/internal/GroupResultCounter.d.ts +8 -0
  17. package/esm/internal/GroupResultCounter.d.ts.map +1 -0
  18. package/esm/internal/GroupResultCounter.js +15 -0
  19. package/esm/internal/GroupResultCounter.js.map +1 -0
  20. package/esm/internal/HistorySearchTreeView.d.ts +12 -0
  21. package/esm/internal/HistorySearchTreeView.d.ts.map +1 -0
  22. package/esm/internal/HistorySearchTreeView.js +30 -0
  23. package/esm/internal/HistorySearchTreeView.js.map +1 -0
  24. package/esm/internal/HistorySearchTreeViewItem.d.ts +7 -0
  25. package/esm/internal/HistorySearchTreeViewItem.d.ts.map +1 -0
  26. package/esm/internal/HistorySearchTreeViewItem.js +19 -0
  27. package/esm/internal/HistorySearchTreeViewItem.js.map +1 -0
  28. package/esm/internal/LeveledSearchTreeView.d.ts +22 -0
  29. package/esm/internal/LeveledSearchTreeView.d.ts.map +1 -0
  30. package/esm/internal/LeveledSearchTreeView.js +84 -0
  31. package/esm/internal/LeveledSearchTreeView.js.map +1 -0
  32. package/esm/internal/LeveledSearchTreeViewItem.d.ts +11 -0
  33. package/esm/internal/LeveledSearchTreeViewItem.d.ts.map +1 -0
  34. package/esm/internal/LeveledSearchTreeViewItem.js +24 -0
  35. package/esm/internal/LeveledSearchTreeViewItem.js.map +1 -0
  36. package/esm/internal/SearchItemDetails.d.ts +12 -0
  37. package/esm/internal/SearchItemDetails.d.ts.map +1 -0
  38. package/esm/{utils/renderDetails.js → internal/SearchItemDetails.js} +33 -27
  39. package/esm/internal/SearchItemDetails.js.map +1 -0
  40. package/esm/internal/SearchItemIcon.d.ts +13 -0
  41. package/esm/internal/SearchItemIcon.d.ts.map +1 -0
  42. package/esm/internal/SearchItemIcon.js +46 -0
  43. package/esm/internal/SearchItemIcon.js.map +1 -0
  44. package/esm/internal/SearchOverlay.d.ts +4 -5
  45. package/esm/internal/SearchOverlay.d.ts.map +1 -1
  46. package/esm/internal/SearchOverlay.js +58 -97
  47. package/esm/internal/SearchOverlay.js.map +1 -1
  48. package/esm/internal/UpdateDate.d.ts +2 -3
  49. package/esm/internal/UpdateDate.d.ts.map +1 -1
  50. package/esm/internal/UpdateDate.js +7 -5
  51. package/esm/internal/UpdateDate.js.map +1 -1
  52. package/esm/localization/bundles/en-US.json +16 -0
  53. package/esm/localization/bundles/en-US.localization-bundle.d.ts +4 -0
  54. package/esm/localization/bundles/en-US.localization-bundle.d.ts.map +1 -1
  55. package/esm/localization/bundles/en-US.localization-bundle.js +4 -0
  56. package/esm/localization/bundles/en-US.localization-bundle.js.map +1 -1
  57. package/esm/utils/getAriaLabel.d.ts +5 -0
  58. package/esm/utils/getAriaLabel.d.ts.map +1 -0
  59. package/esm/utils/getAriaLabel.js +27 -0
  60. package/esm/utils/getAriaLabel.js.map +1 -0
  61. package/esm/utils/searchItem.d.ts +8 -0
  62. package/esm/utils/searchItem.d.ts.map +1 -0
  63. package/esm/utils/searchItem.js +15 -0
  64. package/esm/utils/searchItem.js.map +1 -0
  65. package/package.json +14 -14
  66. package/styles/css/internal.css +62 -43
  67. package/styles/css/internal.css.map +1 -1
  68. package/styles/css/main.css +61 -23
  69. package/styles/css/main.css.map +1 -1
  70. package/styles/scss/internal.scss +1 -17
  71. package/styles/scss/main.scss +64 -16
  72. package/esm/ResultsItem.d.ts +0 -9
  73. package/esm/ResultsItem.d.ts.map +0 -1
  74. package/esm/ResultsItem.js +0 -16
  75. package/esm/ResultsItem.js.map +0 -1
  76. package/esm/SearchListItem.d.ts +0 -15
  77. package/esm/SearchListItem.d.ts.map +0 -1
  78. package/esm/SearchListItem.js +0 -30
  79. package/esm/SearchListItem.js.map +0 -1
  80. package/esm/SearchResultsDropdownList.d.ts +0 -36
  81. package/esm/SearchResultsDropdownList.d.ts.map +0 -1
  82. package/esm/SearchResultsDropdownList.js +0 -20
  83. package/esm/SearchResultsDropdownList.js.map +0 -1
  84. package/esm/internal/AnnotatedResultsItem.d.ts +0 -9
  85. package/esm/internal/AnnotatedResultsItem.d.ts.map +0 -1
  86. package/esm/internal/AnnotatedResultsItem.js +0 -26
  87. package/esm/internal/AnnotatedResultsItem.js.map +0 -1
  88. package/esm/internal/HistoryItem.d.ts +0 -11
  89. package/esm/internal/HistoryItem.d.ts.map +0 -1
  90. package/esm/internal/HistoryItem.js +0 -19
  91. package/esm/internal/HistoryItem.js.map +0 -1
  92. package/esm/internal/SearchList.d.ts +0 -30
  93. package/esm/internal/SearchList.d.ts.map +0 -1
  94. package/esm/internal/SearchList.js +0 -18
  95. package/esm/internal/SearchList.js.map +0 -1
  96. package/esm/types.d.ts +0 -34
  97. package/esm/types.d.ts.map +0 -1
  98. package/esm/types.js +0 -3
  99. package/esm/types.js.map +0 -1
  100. package/esm/utils/getAreaLabel.d.ts +0 -4
  101. package/esm/utils/getAreaLabel.d.ts.map +0 -1
  102. package/esm/utils/getAreaLabel.js +0 -15
  103. package/esm/utils/getAreaLabel.js.map +0 -1
  104. package/esm/utils/renderDetails.d.ts +0 -8
  105. package/esm/utils/renderDetails.d.ts.map +0 -1
  106. package/esm/utils/renderDetails.js.map +0 -1
  107. package/esm/utils/renderItemIcon.d.ts +0 -8
  108. package/esm/utils/renderItemIcon.d.ts.map +0 -1
  109. package/esm/utils/renderItemIcon.js +0 -44
  110. package/esm/utils/renderItemIcon.js.map +0 -1
  111. package/esm/utils/renderLock.d.ts +0 -5
  112. package/esm/utils/renderLock.d.ts.map +0 -1
  113. package/esm/utils/renderLock.js +0 -9
  114. package/esm/utils/renderLock.js.map +0 -1
@@ -0,0 +1,20 @@
1
+ import React from "react";
2
+ export type SearchItemProps = {
3
+ className?: string;
4
+ children: React.ReactNode;
5
+ ariaLabel: string;
6
+ level: number;
7
+ icon: React.ReactNode;
8
+ details?: React.ReactNode;
9
+ resultCounter?: React.ReactNode;
10
+ href?: string;
11
+ isFocused?: boolean;
12
+ onClick: (event: React.MouseEvent) => void;
13
+ onHover: (event: React.MouseEvent) => void;
14
+ };
15
+ /**
16
+ * A single result item in the search results.
17
+ * @internal
18
+ */
19
+ export declare const SearchItem: ({ className, children, ariaLabel, level, isFocused, icon, details, resultCounter, href, onClick, onHover, }: SearchItemProps) => React.JSX.Element;
20
+ //# sourceMappingURL=SearchItem.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SearchItem.d.ts","sourceRoot":"","sources":["../src/SearchItem.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,MAAM,MAAM,eAAe,GAAG;IAC1B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,KAAK,CAAC,SAAS,CAAC;IACtB,OAAO,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,aAAa,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAChC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,OAAO,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,UAAU,KAAK,IAAI,CAAC;IAC3C,OAAO,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,UAAU,KAAK,IAAI,CAAC;CAC9C,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,UAAU,GAAI,6GAYxB,eAAe,sBAiCjB,CAAC"}
@@ -0,0 +1,28 @@
1
+ // (C) 2024-2025 GoodData Corporation
2
+ import React from "react";
3
+ import classnames from "classnames";
4
+ /**
5
+ * A single result item in the search results.
6
+ * @internal
7
+ */
8
+ export const SearchItem = ({ className, children, ariaLabel, level, isFocused, icon, details, resultCounter, href, onClick, onHover, }) => {
9
+ const handleClick = (event) => {
10
+ // Only report left and middle clicks
11
+ if (event.button < 2) {
12
+ onClick(event);
13
+ }
14
+ };
15
+ const Tag = href ? "a" : "div";
16
+ const wrapperClassName = classnames(className, {
17
+ "gd-semantic-search__results-item": true,
18
+ "gd-semantic-search__results-item--active": isFocused,
19
+ });
20
+ return (React.createElement("div", { className: wrapperClassName, "data-level": level },
21
+ React.createElement(Tag, { "aria-label": ariaLabel, href: href, className: "gd-semantic-search__results-item__content", onClick: handleClick, onAuxClick: handleClick, onMouseEnter: onHover },
22
+ React.createElement("span", { className: "gd-semantic-search__results-item__icon" }, icon),
23
+ React.createElement("span", { className: "gd-semantic-search__results-item__text" }, children),
24
+ React.createElement("div", { className: "gd-semantic-search__results-item__details-container" },
25
+ !!isFocused && level === 1 && details,
26
+ resultCounter))));
27
+ };
28
+ //# sourceMappingURL=SearchItem.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SearchItem.js","sourceRoot":"","sources":["../src/SearchItem.tsx"],"names":[],"mappings":"AAAA,qCAAqC;AAErC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,UAAU,MAAM,YAAY,CAAC;AAgBpC;;;GAGG;AACH,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,EACvB,SAAS,EACT,QAAQ,EACR,SAAS,EACT,KAAK,EACL,SAAS,EACT,IAAI,EACJ,OAAO,EACP,aAAa,EACb,IAAI,EACJ,OAAO,EACP,OAAO,GACO,EAAE,EAAE;IAClB,MAAM,WAAW,GAAG,CAAC,KAAuB,EAAE,EAAE;QAC5C,qCAAqC;QACrC,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACnB,OAAO,CAAC,KAAK,CAAC,CAAC;QACnB,CAAC;IACL,CAAC,CAAC;IAEF,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC;IAC/B,MAAM,gBAAgB,GAAG,UAAU,CAAC,SAAS,EAAE;QAC3C,kCAAkC,EAAE,IAAI;QACxC,0CAA0C,EAAE,SAAS;KACxD,CAAC,CAAC;IAEH,OAAO,CACH,6BAAK,SAAS,EAAE,gBAAgB,gBAAc,KAAK;QAC/C,oBAAC,GAAG,kBACY,SAAS,EACrB,IAAI,EAAE,IAAI,EACV,SAAS,EAAC,2CAA2C,EACrD,OAAO,EAAE,WAAW,EACpB,UAAU,EAAE,WAAW,EACvB,YAAY,EAAE,OAAO;YAErB,8BAAM,SAAS,EAAC,wCAAwC,IAAE,IAAI,CAAQ;YACtE,8BAAM,SAAS,EAAC,wCAAwC,IAAE,QAAQ,CAAQ;YAC1E,6BAAK,SAAS,EAAC,qDAAqD;gBAC/D,CAAC,CAAC,SAAS,IAAI,KAAK,KAAK,CAAC,IAAI,OAAO;gBACrC,aAAa,CACZ,CACJ,CACJ,CACT,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;AAG/B,OAAO,EAAE,eAAe,EAAE,yBAAyB,EAAE,MAAM,qBAAqB,CAAC;AAGjF,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAK/D;;;GAGG;AACH,MAAM,MAAM,mBAAmB,GAAG;IAC9B;;OAEG;IACH,OAAO,CAAC,EAAE,kBAAkB,CAAC;IAC7B;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;OAEG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;;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,eAAe,EAAE,CAAC;IAChC;;OAEG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB;;OAEG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;OAEG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;OAEG;IACH,YAAY,CAAC,EAAE,CACX,KAAK,EAAE,mBAAmB,GAAG;QAAE,MAAM,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,GAAG,SAAS,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,EAChG,QAAQ,EAAE;QACN,WAAW,EAAE,MAAM,IAAI,CAAC;KAC3B,KACA,KAAK,CAAC,SAAS,CAAC;CACxB,CAAC;AA2IF;;;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;AAY/B,OAAO,EAAE,eAAe,EAAE,yBAAyB,EAAE,MAAM,qBAAqB,CAAC;AAEjF,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAK/D;;;GAGG;AACH,MAAM,MAAM,mBAAmB,GAAG;IAC9B;;OAEG;IACH,OAAO,CAAC,EAAE,kBAAkB,CAAC;IAC7B;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;OAEG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;;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,eAAe,EAAE,CAAC;IAChC;;OAEG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB;;OAEG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;OAEG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;OAEG;IACH,YAAY,CAAC,EAAE,CACX,KAAK,EAAE,mBAAmB,GAAG;QAAE,MAAM,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,GAAG,SAAS,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,EAChG,QAAQ,EAAE;QACN,WAAW,EAAE,MAAM,IAAI,CAAC;KAC3B,KACA,KAAK,CAAC,SAAS,CAAC;CACxB,CAAC;AAiKF;;;GAGG;AACH,eAAO,MAAM,cAAc,EAAE,KAAK,CAAC,EAAE,CAAC,mBAAmB,CAQxD,CAAC"}
@@ -1,21 +1,27 @@
1
1
  // (C) 2024-2025 GoodData Corporation
2
2
  import * as React from "react";
3
- import { Input, Dropdown } from "@gooddata/sdk-ui-kit";
3
+ import { useIntl } from "react-intl";
4
+ import { Input, Dropdown, LoadingMask, UiStaticTreeview, UiTreeViewEventsProvider, useUiTreeViewEventPublisher, } from "@gooddata/sdk-ui-kit";
4
5
  import { useDebouncedState } from "@gooddata/sdk-ui";
5
- import { SearchResultsDropdownList } from "./SearchResultsDropdownList.js";
6
6
  import { useSemanticSearch, useElementWidth } from "./hooks/index.js";
7
7
  import classnames from "classnames";
8
8
  import { IntlWrapper } from "./localization/IntlWrapper.js";
9
+ import { SemanticSearchItem } from "./SemanticSearchItem.js";
9
10
  /**
10
11
  * Search input debounce time.
11
12
  * I.e. how long to wait after the user stops typing before sending the search request.
12
13
  */
13
14
  const DEBOUNCE = 300;
15
+ /**
16
+ * Loading mask height.
17
+ */
18
+ const LOADING_HEIGHT = 100;
14
19
  /**
15
20
  * Semantic search component core.
16
21
  * @beta
17
22
  */
18
23
  const SemanticSearchCore = (props) => {
24
+ const intl = useIntl();
19
25
  const { backend, workspace, onSelect, onError, objectTypes, deepSearch = false, limit = 10, className, placeholder, renderFooter, } = props;
20
26
  // Input value handling
21
27
  const [value, setValue, searchTerm, setImmediate] = useDebouncedState("", DEBOUNCE);
@@ -29,8 +35,14 @@ const SemanticSearchCore = (props) => {
29
35
  deepSearch,
30
36
  limit,
31
37
  });
32
- // Build list items for rendering
33
- const listItems = React.useMemo(() => searchResults.map((item) => ({ item })), [searchResults]);
38
+ // Build items for rendering
39
+ const items = searchResults.map((item) => ({
40
+ item: {
41
+ id: item.id,
42
+ stringTitle: item.title,
43
+ data: item,
44
+ },
45
+ }));
34
46
  // The List component requires explicit width
35
47
  const [ref, width] = useElementWidth();
36
48
  // Report errors
@@ -50,17 +62,25 @@ const SemanticSearchCore = (props) => {
50
62
  }
51
63
  return React.createElement(React.Fragment, null, children);
52
64
  };
65
+ const onKeyDown = useUiTreeViewEventPublisher("keydown");
53
66
  return (React.createElement(Dropdown, { className: classnames("gd-semantic-search", className), ignoreClicksOnByClass: [
54
67
  ".gd-bubble",
55
68
  ".gd-input-icon-clear",
56
69
  ".gd-semantic-search__results-item",
57
70
  ".gd-semantic-search__input",
58
- ], closeOnEscape: false, renderBody: ({ isMobile, closeDropdown }) => {
59
- if (!searchResults.length && searchStatus !== "loading") {
71
+ ], closeOnEscape: false, renderBody: ({ closeDropdown, isMobile }) => {
72
+ if (searchStatus === "loading") {
73
+ return (React.createElement(Wrapper, { status: searchStatus, closeSearch: closeDropdown },
74
+ React.createElement(LoadingMask, { width: isMobile ? "100%" : width, height: LOADING_HEIGHT })));
75
+ }
76
+ if (items.length === 0 || searchStatus !== "success") {
60
77
  return null;
61
78
  }
62
79
  return (React.createElement(Wrapper, { status: searchStatus, closeSearch: closeDropdown },
63
- React.createElement(SearchResultsDropdownList, { width: width, isMobile: isMobile, searchResults: listItems, searchLoading: searchStatus === "loading", onSelect: (item) => {
80
+ React.createElement(UiStaticTreeview, { items: items, width: width, ItemComponent: SemanticSearchItem, ariaAttributes: {
81
+ id: "semantic-search-tree",
82
+ "aria-label": intl.formatMessage({ id: "semantic-search.tree" }),
83
+ }, onSelect: (item) => {
64
84
  // Blur and clear the state
65
85
  const input = inputRef.current?.inputNodeRef?.inputNodeRef;
66
86
  if (input) {
@@ -69,11 +89,11 @@ const SemanticSearchCore = (props) => {
69
89
  setImmediate("");
70
90
  closeDropdown();
71
91
  // Report the selected item
72
- onSelect(item);
73
- } })));
92
+ onSelect(item.data);
93
+ }, shouldKeyboardActionPreventDefault: false })));
74
94
  }, renderButton: ({ openDropdown }) => {
75
95
  return (React.createElement("div", { ref: ref },
76
- 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 })));
96
+ 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, onKeyDown: onKeyDown })));
77
97
  } }));
78
98
  };
79
99
  /**
@@ -82,6 +102,7 @@ const SemanticSearchCore = (props) => {
82
102
  */
83
103
  export const SemanticSearch = ({ locale, ...coreProps }) => {
84
104
  return (React.createElement(IntlWrapper, { locale: locale },
85
- React.createElement(SemanticSearchCore, { ...coreProps })));
105
+ React.createElement(UiTreeViewEventsProvider, null,
106
+ React.createElement(SemanticSearchCore, { ...coreProps }))));
86
107
  };
87
108
  //# sourceMappingURL=SemanticSearch.js.map
@@ -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":"AAAA,qCAAqC;AAErC,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AACrC,OAAO,EACH,KAAK,EACL,QAAQ,EACR,WAAW,EACX,gBAAgB,EAChB,wBAAwB,EACxB,2BAA2B,GAE9B,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAErD,OAAO,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAEtE,OAAO,UAAU,MAAM,YAAY,CAAC;AACpC,OAAO,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAC;AAC5D,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AA0D7D;;;GAGG;AACH,MAAM,QAAQ,GAAG,GAAG,CAAC;AAErB;;GAEG;AACH,MAAM,cAAc,GAAG,GAAG,CAAC;AAE3B;;;GAGG;AACH,MAAM,kBAAkB,GAAkD,CAAC,KAAK,EAAE,EAAE;IAChF,MAAM,IAAI,GAAG,OAAO,EAAE,CAAC;IACvB,MAAM,EACF,OAAO,EACP,SAAS,EACT,QAAQ,EACR,OAAO,EACP,WAAW,EACX,UAAU,GAAG,KAAK,EAClB,KAAK,GAAG,EAAE,EACV,SAAS,EACT,WAAW,EACX,YAAY,GACf,GAAG,KAAK,CAAC;IACV,uBAAuB;IACvB,MAAM,CAAC,KAAK,EAAE,QAAQ,EAAE,UAAU,EAAE,YAAY,CAAC,GAAG,iBAAiB,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC;IACpF,MAAM,QAAQ,GAAG,KAAK,CAAC,MAAM,CAAQ,IAAI,CAAC,CAAC;IAE3C,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,4BAA4B;IAC5B,MAAM,KAAK,GAAkD,aAAa,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QACtF,IAAI,EAAE;YACF,EAAE,EAAE,IAAI,CAAC,EAAE;YACX,WAAW,EAAE,IAAI,CAAC,KAAK;YACvB,IAAI,EAAE,IAAI;SACb;KACJ,CAAC,CAAC,CAAC;IAEJ,6CAA6C;IAC7C,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,GAAG,eAAe,EAAE,CAAC;IAEvC,gBAAgB;IAChB,KAAK,CAAC,SAAS,CAAC,GAAG,EAAE;QACjB,IAAI,OAAO,IAAI,YAAY,KAAK,OAAO,EAAE,CAAC;YACtC,OAAO,CAAC,WAAW,CAAC,CAAC;QACzB,CAAC;IACL,CAAC,EAAE,CAAC,OAAO,EAAE,WAAW,EAAE,YAAY,CAAC,CAAC,CAAC;IAEzC,MAAM,OAAO,GAAG,CAAC,EACb,QAAQ,EACR,MAAM,EACN,WAAW,GAKd,EAAE,EAAE;QACD,MAAM,IAAI,GAAG,YAAY,EAAE,CACvB,EAAE,GAAG,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,EAC3B;YACI,WAAW;SACd,CACJ,CAAC;QACF,IAAI,IAAI,EAAE,CAAC;YACP,OAAO,CACH;gBACK,QAAQ;gBACR,IAAI,CACH,CACT,CAAC;QACN,CAAC;QACD,OAAO,0CAAG,QAAQ,CAAI,CAAC;IAC3B,CAAC,CAAC;IAEF,MAAM,SAAS,GAAG,2BAA2B,CAAC,SAAS,CAAC,CAAC;IAEzD,OAAO,CACH,oBAAC,QAAQ,IACL,SAAS,EAAE,UAAU,CAAC,oBAAoB,EAAE,SAAS,CAAC,EACtD,qBAAqB,EAAE;YACnB,YAAY;YACZ,sBAAsB;YACtB,mCAAmC;YACnC,4BAA4B;SAC/B,EACD,aAAa,EAAE,KAAK,EACpB,UAAU,EAAE,CAAC,EAAE,aAAa,EAAE,QAAQ,EAAE,EAAE,EAAE;YACxC,IAAI,YAAY,KAAK,SAAS,EAAE,CAAC;gBAC7B,OAAO,CACH,oBAAC,OAAO,IAAC,MAAM,EAAE,YAAY,EAAE,WAAW,EAAE,aAAa;oBACrD,oBAAC,WAAW,IAAC,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,cAAc,GAAI,CACnE,CACb,CAAC;YACN,CAAC;YACD,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,YAAY,KAAK,SAAS,EAAE,CAAC;gBACnD,OAAO,IAAI,CAAC;YAChB,CAAC;YACD,OAAO,CACH,oBAAC,OAAO,IAAC,MAAM,EAAE,YAAY,EAAE,WAAW,EAAE,aAAa;gBACrD,oBAAC,gBAAgB,IACb,KAAK,EAAE,KAAK,EACZ,KAAK,EAAE,KAAK,EACZ,aAAa,EAAE,kBAAkB,EACjC,cAAc,EAAE;wBACZ,EAAE,EAAE,sBAAsB;wBAC1B,YAAY,EAAE,IAAI,CAAC,aAAa,CAAC,EAAE,EAAE,EAAE,sBAAsB,EAAE,CAAC;qBACnE,EACD,QAAQ,EAAE,CAAC,IAAI,EAAE,EAAE;wBACf,2BAA2B;wBAC3B,MAAM,KAAK,GAAG,QAAQ,CAAC,OAAO,EAAE,YAAY,EAAE,YAAY,CAAC;wBAC3D,IAAI,KAAK,EAAE,CAAC;4BACR,KAAK,CAAC,IAAI,EAAE,CAAC;wBACjB,CAAC;wBACD,YAAY,CAAC,EAAE,CAAC,CAAC;wBACjB,aAAa,EAAE,CAAC;wBAEhB,2BAA2B;wBAC3B,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;oBACxB,CAAC,EACD,kCAAkC,EAAE,KAAK,GAC3C,CACI,CACb,CAAC;QACN,CAAC,EACD,YAAY,EAAE,CAAC,EAAE,YAAY,EAAE,EAAE,EAAE;YAC/B,OAAO,CACH,6BAAK,GAAG,EAAE,GAAG;gBACT,oBAAC,KAAK,IACF,SAAS,EAAC,2BAA2B,EACrC,GAAG,EAAE,QAAQ,EACb,WAAW,EAAE,WAAW,EACxB,QAAQ,QACR,UAAU,QACV,KAAK,EAAE,KAAK,EACZ,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EACpC,OAAO,EAAE,YAAY,EACrB,SAAS,EAAE,SAAS,GACtB,CACA,CACT,CAAC;QACN,CAAC,GACH,CACL,CAAC;AACN,CAAC,CAAC;AAEF;;;GAGG;AACH,MAAM,CAAC,MAAM,cAAc,GAAkC,CAAC,EAAE,MAAM,EAAE,GAAG,SAAS,EAAE,EAAE,EAAE;IACtF,OAAO,CACH,oBAAC,WAAW,IAAC,MAAM,EAAE,MAAM;QACvB,oBAAC,wBAAwB;YACrB,oBAAC,kBAAkB,OAAK,SAAS,GAAI,CACd,CACjB,CACjB,CAAC;AACN,CAAC,CAAC"}
@@ -0,0 +1,11 @@
1
+ import * as React from "react";
2
+ import { ISemanticSearchResultItem } from "@gooddata/sdk-model";
3
+ import type { IUiTreeviewItemProps } from "@gooddata/sdk-ui-kit";
4
+ type Props = IUiTreeviewItemProps<ISemanticSearchResultItem>;
5
+ /**
6
+ * A single result item in the search results.
7
+ * @internal
8
+ */
9
+ export declare function SemanticSearchItem(props: Props): React.JSX.Element;
10
+ export {};
11
+ //# sourceMappingURL=SemanticSearchItem.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SemanticSearchItem.d.ts","sourceRoot":"","sources":["../src/SemanticSearchItem.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,yBAAyB,EAAE,MAAM,qBAAqB,CAAC;AAChE,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAMjE,KAAK,KAAK,GAAG,oBAAoB,CAAC,yBAAyB,CAAC,CAAC;AAE7D;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,KAAK,qBAiB9C"}
@@ -0,0 +1,17 @@
1
+ // (C) 2024-2025 GoodData Corporation
2
+ import * as React from "react";
3
+ import { SearchItemIcon } from "./internal/SearchItemIcon.js";
4
+ import { SearchItemDetails } from "./internal/SearchItemDetails.js";
5
+ import { SearchItem } from "./SearchItem.js";
6
+ import { getAriaLabel } from "./utils/getAriaLabel.js";
7
+ /**
8
+ * A single result item in the search results.
9
+ * @internal
10
+ */
11
+ export function SemanticSearchItem(props) {
12
+ const { item, level, isFocused, onSelect, onHover } = props;
13
+ return (React.createElement(SearchItem, { ariaLabel: getAriaLabel(item.data), level: level, onClick: onSelect, onHover: onHover, isFocused: isFocused, icon: React.createElement(SearchItemIcon, { item: item.data }), details: React.createElement(SearchItemDetails, { item: item.data }) },
14
+ React.createElement("span", { className: "gd-semantic-search__results-item__text__row" },
15
+ React.createElement("span", { className: "gd-semantic-search__results-item__text__ellipsis" }, item.stringTitle))));
16
+ }
17
+ //# sourceMappingURL=SemanticSearchItem.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SemanticSearchItem.js","sourceRoot":"","sources":["../src/SemanticSearchItem.tsx"],"names":[],"mappings":"AAAA,qCAAqC;AAErC,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAG/B,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAC9D,OAAO,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAC;AACpE,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAIvD;;;GAGG;AACH,MAAM,UAAU,kBAAkB,CAAC,KAAY;IAC3C,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,KAAK,CAAC;IAC5D,OAAO,CACH,oBAAC,UAAU,IACP,SAAS,EAAE,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,EAClC,KAAK,EAAE,KAAK,EACZ,OAAO,EAAE,QAAQ,EACjB,OAAO,EAAE,OAAO,EAChB,SAAS,EAAE,SAAS,EACpB,IAAI,EAAE,oBAAC,cAAc,IAAC,IAAI,EAAE,IAAI,CAAC,IAAI,GAAI,EACzC,OAAO,EAAE,oBAAC,iBAAiB,IAAC,IAAI,EAAE,IAAI,CAAC,IAAI,GAAI;QAE/C,8BAAM,SAAS,EAAC,6CAA6C;YACzD,8BAAM,SAAS,EAAC,kDAAkD,IAAE,IAAI,CAAC,WAAW,CAAQ,CACzF,CACE,CAChB,CAAC;AACN,CAAC"}
@@ -1,5 +1,4 @@
1
- import { GenAIObjectType, ISemanticSearchResultItem } from "@gooddata/sdk-model";
2
- import { ListItem } from "../types.js";
1
+ import { type GenAIObjectType, type ISemanticSearchRelationship, type ISemanticSearchResultItem } from "@gooddata/sdk-model";
3
2
  /**
4
3
  * A conclusion of a single search action by the user.
5
4
  * Used to collect usage metrics.
@@ -40,8 +39,8 @@ export type ISearchMetrics = {
40
39
  export type UseSearchMetricsCallback = (metricsData: ISearchMetrics) => void;
41
40
  export type UseSearchMetricsReturn = {
42
41
  onCloseMetrics: () => void;
43
- onSelectMetrics: (item: ISemanticSearchResultItem, index?: number) => void;
44
- onSearchMetrics: (searchTerm: string, searchResults?: ListItem<ISemanticSearchResultItem>[]) => void;
42
+ onSelectMetrics: (item: ISemanticSearchResultItem | ISemanticSearchRelationship, index?: number) => void;
43
+ onSearchMetrics: (searchTerm: string, searchResults?: ISemanticSearchResultItem[]) => void;
45
44
  };
46
45
  /**
47
46
  * A hook that helps to collect usage metrics for the search overlay.
@@ -1 +1 @@
1
- {"version":3,"file":"useSearchMetrics.d.ts","sourceRoot":"","sources":["../../src/hooks/useSearchMetrics.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,eAAe,EAAE,yBAAyB,EAAE,MAAM,qBAAqB,CAAC;AACjF,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAEvC;;;;GAIG;AACH,MAAM,MAAM,cAAc,GAAG;IACzB;;OAEG;IACH,cAAc,EAAE,MAAM,CAAC;IACvB;;OAEG;IACH,gBAAgB,EAAE,MAAM,EAAE,CAAC;IAC3B;;OAEG;IACH,WAAW,EAAE,MAAM,CAAC;IACpB;;;OAGG;IACH,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC;;;OAGG;IACH,gBAAgB,EAAE,eAAe,GAAG,IAAI,CAAC;IACzC;;OAEG;IACH,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC;;OAEG;IACH,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAC;CACpC,CAAC;AAEF,MAAM,MAAM,wBAAwB,GAAG,CAAC,WAAW,EAAE,cAAc,KAAK,IAAI,CAAC;AAE7E,MAAM,MAAM,sBAAsB,GAAG;IACjC,cAAc,EAAE,MAAM,IAAI,CAAC;IAC3B,eAAe,EAAE,CAAC,IAAI,EAAE,yBAAyB,EAAE,KAAK,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IAC3E,eAAe,EAAE,CAAC,UAAU,EAAE,MAAM,EAAE,aAAa,CAAC,EAAE,QAAQ,CAAC,yBAAyB,CAAC,EAAE,KAAK,IAAI,CAAC;CACxG,CAAC;AAoBF;;;;;;;;GAQG;AACH,eAAO,MAAM,gBAAgB,GAAI,WAAW,wBAAwB,KAAG,sBAuEtE,CAAC"}
1
+ {"version":3,"file":"useSearchMetrics.d.ts","sourceRoot":"","sources":["../../src/hooks/useSearchMetrics.ts"],"names":[],"mappings":"AAGA,OAAO,EAEH,KAAK,eAAe,EACpB,KAAK,2BAA2B,EAChC,KAAK,yBAAyB,EACjC,MAAM,qBAAqB,CAAC;AAE7B;;;;GAIG;AACH,MAAM,MAAM,cAAc,GAAG;IACzB;;OAEG;IACH,cAAc,EAAE,MAAM,CAAC;IACvB;;OAEG;IACH,gBAAgB,EAAE,MAAM,EAAE,CAAC;IAC3B;;OAEG;IACH,WAAW,EAAE,MAAM,CAAC;IACpB;;;OAGG;IACH,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC;;;OAGG;IACH,gBAAgB,EAAE,eAAe,GAAG,IAAI,CAAC;IACzC;;OAEG;IACH,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC;;OAEG;IACH,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAC;CACpC,CAAC;AAEF,MAAM,MAAM,wBAAwB,GAAG,CAAC,WAAW,EAAE,cAAc,KAAK,IAAI,CAAC;AAE7E,MAAM,MAAM,sBAAsB,GAAG;IACjC,cAAc,EAAE,MAAM,IAAI,CAAC;IAC3B,eAAe,EAAE,CAAC,IAAI,EAAE,yBAAyB,GAAG,2BAA2B,EAAE,KAAK,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IACzG,eAAe,EAAE,CAAC,UAAU,EAAE,MAAM,EAAE,aAAa,CAAC,EAAE,yBAAyB,EAAE,KAAK,IAAI,CAAC;CAC9F,CAAC;AAoBF;;;;;;;;GAQG;AACH,eAAO,MAAM,gBAAgB,GAAI,WAAW,wBAAwB,KAAG,sBAyEtE,CAAC"}
@@ -1,5 +1,6 @@
1
- // (C) 2024 GoodData Corporation
1
+ // (C) 2024-2025 GoodData Corporation
2
2
  import * as React from "react";
3
+ import { isSemanticSearchResultItem, } from "@gooddata/sdk-model";
3
4
  const defaultOnSearchMetrics = {
4
5
  state: {
5
6
  lastSearchTerm: "",
@@ -44,13 +45,15 @@ export const useSearchMetrics = (callback) => {
44
45
  // Callback will be called when the user selects an item
45
46
  const onSelectMetrics = React.useCallback((item, index) => {
46
47
  // Report the metrics
47
- callback?.({
48
- ...searchMetricsRef.current.state,
49
- selectedItemTitle: item.title,
50
- selectedItemType: item.type,
51
- selectedItemScore: item.score ?? 0,
52
- selectedItemIndex: index ?? null,
53
- });
48
+ if (isSemanticSearchResultItem(item)) {
49
+ callback?.({
50
+ ...searchMetricsRef.current.state,
51
+ selectedItemTitle: item.title,
52
+ selectedItemType: item.type,
53
+ selectedItemScore: item.score ?? 0,
54
+ selectedItemIndex: index ?? null,
55
+ });
56
+ }
54
57
  // Mark the metrics as reported
55
58
  // Do not flush the metric data, because user might select several items in sequence
56
59
  // e.g. when cmd+click and open it in a new tab
@@ -68,7 +71,7 @@ export const useSearchMetrics = (callback) => {
68
71
  state: {
69
72
  ...searchMetricsRef.current.state,
70
73
  lastSearchTerm: searchTerm,
71
- lastSearchScores: searchResults?.map((result) => result.item.score ?? 0) ?? [],
74
+ lastSearchScores: searchResults?.map((result) => result.score ?? 0) ?? [],
72
75
  searchCount: shouldIncrement ? searchCount + 1 : searchCount,
73
76
  },
74
77
  reported: false,
@@ -1 +1 @@
1
- {"version":3,"file":"useSearchMetrics.js","sourceRoot":"","sources":["../../src/hooks/useSearchMetrics.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"useSearchMetrics.js","sourceRoot":"","sources":["../../src/hooks/useSearchMetrics.ts"],"names":[],"mappings":"AAAA,qCAAqC;AAErC,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EACH,0BAA0B,GAI7B,MAAM,qBAAqB,CAAC;AAqD7B,MAAM,sBAAsB,GAAsB;IAC9C,KAAK,EAAE;QACH,cAAc,EAAE,EAAE;QAClB,gBAAgB,EAAE,EAAE;QACpB,WAAW,EAAE,CAAC;QACd,iBAAiB,EAAE,IAAI;QACvB,gBAAgB,EAAE,IAAI;QACtB,iBAAiB,EAAE,IAAI;QACvB,iBAAiB,EAAE,IAAI;KAC1B;IACD,QAAQ,EAAE,KAAK;CAClB,CAAC;AAEF;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,QAAmC,EAA0B,EAAE;IAC5F,0EAA0E;IAC1E,MAAM,gBAAgB,GAAG,KAAK,CAAC,MAAM,CAAoB,sBAAsB,CAAC,CAAC;IAEjF,oDAAoD;IACpD,MAAM,cAAc,GAAG,KAAK,CAAC,WAAW,CAAC,GAAG,EAAE;QAC1C,uDAAuD;QACvD,4BAA4B;QAC5B,IAAI,gBAAgB,CAAC,OAAO,CAAC,QAAQ;YAAE,OAAO;QAE9C,oCAAoC;QACpC,QAAQ,EAAE,CAAC;YACP,GAAG,gBAAgB,CAAC,OAAO,CAAC,KAAK;YACjC,iBAAiB,EAAE,IAAI;YACvB,gBAAgB,EAAE,IAAI;YACtB,iBAAiB,EAAE,IAAI;YACvB,iBAAiB,EAAE,IAAI;SAC1B,CAAC,CAAC;QAEH,yBAAyB;QACzB,gBAAgB,CAAC,OAAO,GAAG,sBAAsB,CAAC;IACtD,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC;IAEf,wDAAwD;IACxD,MAAM,eAAe,GAAG,KAAK,CAAC,WAAW,CACrC,CAAC,IAA6D,EAAE,KAAc,EAAE,EAAE;QAC9E,qBAAqB;QACrB,IAAI,0BAA0B,CAAC,IAAI,CAAC,EAAE,CAAC;YACnC,QAAQ,EAAE,CAAC;gBACP,GAAG,gBAAgB,CAAC,OAAO,CAAC,KAAK;gBACjC,iBAAiB,EAAE,IAAI,CAAC,KAAK;gBAC7B,gBAAgB,EAAE,IAAI,CAAC,IAAI;gBAC3B,iBAAiB,EAAE,IAAI,CAAC,KAAK,IAAI,CAAC;gBAClC,iBAAiB,EAAE,KAAK,IAAI,IAAI;aACnC,CAAC,CAAC;QACP,CAAC;QACD,+BAA+B;QAC/B,oFAAoF;QACpF,+CAA+C;QAC/C,gBAAgB,CAAC,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC;IAC7C,CAAC,EACD,CAAC,QAAQ,CAAC,CACb,CAAC;IAEF,kEAAkE;IAClE,MAAM,eAAe,GAAG,KAAK,CAAC,WAAW,CACrC,CAAC,UAAkB,EAAE,aAA2C,EAAE,EAAE;QAChE,MAAM,EAAE,WAAW,EAAE,cAAc,EAAE,GAAG,gBAAgB,CAAC,OAAO,CAAC,KAAK,CAAC;QAEvE,wFAAwF;QACxF,MAAM,eAAe,GAAG,CAAC,CAAC,cAAc,KAAK,EAAE;YAC3C,CAAC,CAAC,UAAU,KAAK,EAAE;YACnB,CAAC,CAAC,UAAU,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC,CAAC;QAE7C,6EAA6E;QAC7E,gBAAgB,CAAC,OAAO,GAAG;YACvB,KAAK,EAAE;gBACH,GAAG,gBAAgB,CAAC,OAAO,CAAC,KAAK;gBACjC,cAAc,EAAE,UAAU;gBAC1B,gBAAgB,EAAE,aAAa,EAAE,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,IAAI,CAAC,CAAC,IAAI,EAAE;gBACzE,WAAW,EAAE,eAAe,CAAC,CAAC,CAAC,WAAW,GAAG,CAAC,CAAC,CAAC,CAAC,WAAW;aAC/D;YACD,QAAQ,EAAE,KAAK;SAClB,CAAC;IACN,CAAC,EACD,EAAE,CACL,CAAC;IAEF,OAAO;QACH,cAAc;QACd,eAAe;QACf,eAAe;KAClB,CAAC;AACN,CAAC,CAAC"}
@@ -0,0 +1,8 @@
1
+ import React from "react";
2
+ type Props = {
3
+ count: number;
4
+ isExpanded: boolean;
5
+ };
6
+ export declare function GroupResultCounter({ count, isExpanded }: Props): React.JSX.Element | null;
7
+ export {};
8
+ //# sourceMappingURL=GroupResultCounter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GroupResultCounter.d.ts","sourceRoot":"","sources":["../../src/internal/GroupResultCounter.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,KAAK,KAAK,GAAG;IACT,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,OAAO,CAAC;CACvB,CAAC;AAEF,wBAAgB,kBAAkB,CAAC,EAAE,KAAK,EAAE,UAAU,EAAE,EAAE,KAAK,4BAiB9D"}
@@ -0,0 +1,15 @@
1
+ // (C) 2025 GoodData Corporation
2
+ import { UiIcon } from "@gooddata/sdk-ui-kit";
3
+ import cx from "classnames";
4
+ import React from "react";
5
+ import { FormattedMessage } from "react-intl";
6
+ export function GroupResultCounter({ count, isExpanded }) {
7
+ if (!count) {
8
+ return null;
9
+ }
10
+ return (React.createElement("div", { className: "gd-semantic-search__results-item__counter" },
11
+ React.createElement(FormattedMessage, { tagName: "span", id: "semantic-search.results.count", values: { count } }),
12
+ React.createElement("div", { className: cx("gd-semantic-search__results-item__counter__icon", isExpanded && "gd-semantic-search__results-item__counter__icon--expanded") },
13
+ React.createElement(UiIcon, { type: "navigateRight", size: 16, color: "complementary-6" }))));
14
+ }
15
+ //# sourceMappingURL=GroupResultCounter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GroupResultCounter.js","sourceRoot":"","sources":["../../src/internal/GroupResultCounter.tsx"],"names":[],"mappings":"AAAA,gCAAgC;AAChC,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAC9C,OAAO,EAAE,MAAM,YAAY,CAAC;AAC5B,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAO9C,MAAM,UAAU,kBAAkB,CAAC,EAAE,KAAK,EAAE,UAAU,EAAS;IAC3D,IAAI,CAAC,KAAK,EAAE,CAAC;QACT,OAAO,IAAI,CAAC;IAChB,CAAC;IACD,OAAO,CACH,6BAAK,SAAS,EAAC,2CAA2C;QACtD,oBAAC,gBAAgB,IAAC,OAAO,EAAC,MAAM,EAAC,EAAE,EAAC,+BAA+B,EAAC,MAAM,EAAE,EAAE,KAAK,EAAE,GAAI;QACzF,6BACI,SAAS,EAAE,EAAE,CACT,iDAAiD,EACjD,UAAU,IAAI,2DAA2D,CAC5E;YAED,oBAAC,MAAM,IAAC,IAAI,EAAC,eAAe,EAAC,IAAI,EAAE,EAAE,EAAE,KAAK,EAAC,iBAAiB,GAAG,CAC/D,CACJ,CACT,CAAC;AACN,CAAC"}
@@ -0,0 +1,12 @@
1
+ import React from "react";
2
+ type Props = {
3
+ searchHistory: string[];
4
+ onSelect: (value: string) => void;
5
+ };
6
+ /**
7
+ * A tree view component for history search results.
8
+ * @internal
9
+ */
10
+ export declare function HistorySearchTreeView({ searchHistory, onSelect }: Props): React.JSX.Element;
11
+ export {};
12
+ //# sourceMappingURL=HistorySearchTreeView.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"HistorySearchTreeView.d.ts","sourceRoot":"","sources":["../../src/internal/HistorySearchTreeView.tsx"],"names":[],"mappings":"AACA,OAAO,KAAsB,MAAM,OAAO,CAAC;AAK3C,KAAK,KAAK,GAAG;IACT,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;CACrC,CAAC;AAEF;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,EAAE,aAAa,EAAE,QAAQ,EAAE,EAAE,KAAK,qBAuBvE"}
@@ -0,0 +1,30 @@
1
+ // (C) 2025 GoodData Corporation
2
+ import React, { useCallback } from "react";
3
+ import { UiStaticTreeview } from "@gooddata/sdk-ui-kit";
4
+ import { useIntl } from "react-intl";
5
+ import { HistorySearchTreeViewItem } from "./HistorySearchTreeViewItem.js";
6
+ /**
7
+ * A tree view component for history search results.
8
+ * @internal
9
+ */
10
+ export function HistorySearchTreeView({ searchHistory, onSelect }) {
11
+ const intl = useIntl();
12
+ const items = buildItems(searchHistory);
13
+ const handleSelect = useCallback((item) => {
14
+ onSelect(item.data);
15
+ }, [onSelect]);
16
+ return (React.createElement(UiStaticTreeview, { items: items, ariaAttributes: {
17
+ id: "semantic-search-tree-history",
18
+ "aria-label": intl.formatMessage({ id: "semantic-search.tree.history" }),
19
+ }, onSelect: handleSelect, ItemComponent: HistorySearchTreeViewItem, shouldKeyboardActionPreventDefault: false }));
20
+ }
21
+ function buildItems(searchHistory) {
22
+ return searchHistory.map((value) => ({
23
+ item: {
24
+ id: value,
25
+ stringTitle: value,
26
+ data: value,
27
+ },
28
+ }));
29
+ }
30
+ //# sourceMappingURL=HistorySearchTreeView.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"HistorySearchTreeView.js","sourceRoot":"","sources":["../../src/internal/HistorySearchTreeView.tsx"],"names":[],"mappings":"AAAA,gCAAgC;AAChC,OAAO,KAAK,EAAE,EAAE,WAAW,EAAE,MAAM,OAAO,CAAC;AAC3C,OAAO,EAAE,gBAAgB,EAA+C,MAAM,sBAAsB,CAAC;AACrG,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AACrC,OAAO,EAAE,yBAAyB,EAAE,MAAM,gCAAgC,CAAC;AAO3E;;;GAGG;AACH,MAAM,UAAU,qBAAqB,CAAC,EAAE,aAAa,EAAE,QAAQ,EAAS;IACpE,MAAM,IAAI,GAAG,OAAO,EAAE,CAAC;IACvB,MAAM,KAAK,GAAG,UAAU,CAAC,aAAa,CAAC,CAAC;IAExC,MAAM,YAAY,GAAG,WAAW,CAC5B,CAAC,IAA6B,EAAE,EAAE;QAC9B,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACxB,CAAC,EACD,CAAC,QAAQ,CAAC,CACb,CAAC;IAEF,OAAO,CACH,oBAAC,gBAAgB,IACb,KAAK,EAAE,KAAK,EACZ,cAAc,EAAE;YACZ,EAAE,EAAE,8BAA8B;YAClC,YAAY,EAAE,IAAI,CAAC,aAAa,CAAC,EAAE,EAAE,EAAE,8BAA8B,EAAE,CAAC;SAC3E,EACD,QAAQ,EAAE,YAAY,EACtB,aAAa,EAAE,yBAAyB,EACxC,kCAAkC,EAAE,KAAK,GAC3C,CACL,CAAC;AACN,CAAC;AAED,SAAS,UAAU,CAAC,aAAuB;IACvC,OAAO,aAAa,CAAC,GAAG,CACpB,CAAC,KAAK,EAA4B,EAAE,CAAC,CAAC;QAClC,IAAI,EAAE;YACF,EAAE,EAAE,KAAK;YACT,WAAW,EAAE,KAAK;YAClB,IAAI,EAAE,KAAK;SACd;KACJ,CAAC,CACL,CAAC;AACN,CAAC"}
@@ -0,0 +1,7 @@
1
+ import React from "react";
2
+ import { type IUiTreeviewItemProps } from "@gooddata/sdk-ui-kit";
3
+ /**
4
+ * @internal
5
+ */
6
+ export declare function HistorySearchTreeViewItem(props: IUiTreeviewItemProps<string>): React.JSX.Element;
7
+ //# sourceMappingURL=HistorySearchTreeViewItem.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"HistorySearchTreeViewItem.d.ts","sourceRoot":"","sources":["../../src/internal/HistorySearchTreeViewItem.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAQ,KAAK,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAKvE;;GAEG;AACH,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,oBAAoB,CAAC,MAAM,CAAC,qBAoB5E"}
@@ -0,0 +1,19 @@
1
+ // (C) 2025 GoodData Corporation
2
+ import React from "react";
3
+ import { Icon } from "@gooddata/sdk-ui-kit";
4
+ import { SearchItem } from "../SearchItem.js";
5
+ import { useTheme } from "@gooddata/sdk-ui-theme-provider";
6
+ import { useIntl } from "react-intl";
7
+ /**
8
+ * @internal
9
+ */
10
+ export function HistorySearchTreeViewItem(props) {
11
+ const { item, isFocused, level, onSelect, onHover } = props;
12
+ const theme = useTheme();
13
+ const intl = useIntl();
14
+ const ariaLabel = intl.formatMessage({ id: "semantic-search.previous-search" });
15
+ return (React.createElement(SearchItem, { ariaLabel: ariaLabel, level: level, onClick: onSelect, onHover: onHover, isFocused: isFocused, icon: React.createElement(Icon.HistoryBack, { color: theme?.palette?.complementary?.c5 ?? "#B0BECA" }) },
16
+ React.createElement("span", { className: "gd-semantic-search__results-item__text__row" },
17
+ React.createElement("span", { className: "gd-semantic-search__results-item__text__ellipsis" }, item.stringTitle))));
18
+ }
19
+ //# sourceMappingURL=HistorySearchTreeViewItem.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"HistorySearchTreeViewItem.js","sourceRoot":"","sources":["../../src/internal/HistorySearchTreeViewItem.tsx"],"names":[],"mappings":"AAAA,gCAAgC;AAChC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,IAAI,EAA6B,MAAM,sBAAsB,CAAC;AACvE,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,QAAQ,EAAE,MAAM,iCAAiC,CAAC;AAC3D,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAErC;;GAEG;AACH,MAAM,UAAU,yBAAyB,CAAC,KAAmC;IACzE,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,KAAK,CAAC;IAC5D,MAAM,KAAK,GAAG,QAAQ,EAAE,CAAC;IACzB,MAAM,IAAI,GAAG,OAAO,EAAE,CAAC;IACvB,MAAM,SAAS,GAAG,IAAI,CAAC,aAAa,CAAC,EAAE,EAAE,EAAE,iCAAiC,EAAE,CAAC,CAAC;IAEhF,OAAO,CACH,oBAAC,UAAU,IACP,SAAS,EAAE,SAAS,EACpB,KAAK,EAAE,KAAK,EACZ,OAAO,EAAE,QAAQ,EACjB,OAAO,EAAE,OAAO,EAChB,SAAS,EAAE,SAAS,EACpB,IAAI,EAAE,oBAAC,IAAI,CAAC,WAAW,IAAC,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,aAAa,EAAE,EAAE,IAAI,SAAS,GAAI;QAEjF,8BAAM,SAAS,EAAC,6CAA6C;YACzD,8BAAM,SAAS,EAAC,kDAAkD,IAAE,IAAI,CAAC,WAAW,CAAQ,CACzF,CACE,CAChB,CAAC;AACN,CAAC"}
@@ -0,0 +1,22 @@
1
+ import React from "react";
2
+ import type { ISemanticSearchResultItem, ISemanticSearchRelationship } from "@gooddata/sdk-model";
3
+ import { type UiLeveledTreeView, type OnLeveledSelectFn } from "@gooddata/sdk-ui-kit";
4
+ export type SearchTreeViewLevels = [
5
+ ISemanticSearchResultItem,
6
+ ISemanticSearchResultItem | ISemanticSearchRelationship
7
+ ];
8
+ export type SearchTreeViewItem = UiLeveledTreeView<SearchTreeViewLevels>;
9
+ type Props = {
10
+ workspace: string;
11
+ searchResults: ISemanticSearchResultItem[];
12
+ searchRelationships: ISemanticSearchRelationship[];
13
+ threshold?: number;
14
+ onSelect: OnLeveledSelectFn<SearchTreeViewLevels>;
15
+ };
16
+ /**
17
+ * A tree view component for semantic search results.
18
+ * @internal
19
+ */
20
+ export declare function LeveledSearchTreeView(props: Props): React.JSX.Element;
21
+ export {};
22
+ //# sourceMappingURL=LeveledSearchTreeView.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LeveledSearchTreeView.d.ts","sourceRoot":"","sources":["../../src/internal/LeveledSearchTreeView.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,KAAK,EAAE,yBAAyB,EAAE,2BAA2B,EAAE,MAAM,qBAAqB,CAAC;AAClG,OAAO,EAAqB,KAAK,iBAAiB,EAAE,KAAK,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAKzG,MAAM,MAAM,oBAAoB,GAAG;IAC/B,yBAAyB;IACzB,yBAAyB,GAAG,2BAA2B;CAC1D,CAAC;AACF,MAAM,MAAM,kBAAkB,GAAG,iBAAiB,CAAC,oBAAoB,CAAC,CAAC;AAEzE,KAAK,KAAK,GAAG;IACT,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,yBAAyB,EAAE,CAAC;IAC3C,mBAAmB,EAAE,2BAA2B,EAAE,CAAC;IACnD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,iBAAiB,CAAC,oBAAoB,CAAC,CAAC;CACrD,CAAC;AAEF;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,KAAK,qBAmBjD"}
@@ -0,0 +1,84 @@
1
+ // (C) 2025 GoodData Corporation
2
+ import React from "react";
3
+ import { useIntl } from "react-intl";
4
+ import { UiLeveledTreeview } from "@gooddata/sdk-ui-kit";
5
+ import { LeveledSearchTreeViewItemMemo } from "./LeveledSearchTreeViewItem.js";
6
+ import { getItemRelationships, isItemLocked, isRelationshipLocked } from "../utils/searchItem.js";
7
+ import { getUIPath } from "../utils/getUIPath.js";
8
+ /**
9
+ * A tree view component for semantic search results.
10
+ * @internal
11
+ */
12
+ export function LeveledSearchTreeView(props) {
13
+ const intl = useIntl();
14
+ const items = buildItems(props, intl);
15
+ return (React.createElement(UiLeveledTreeview, { items: items, maxHeight: 500, ariaAttributes: {
16
+ id: "leveled-semantic-search-tree",
17
+ "aria-label": intl.formatMessage({ id: "semantic-search.tree" }),
18
+ }, expandedMode: "default-collapsed", selectionMode: "leafs-only", onSelect: props.onSelect, ItemComponent: LeveledSearchTreeViewItemMemo, shouldKeyboardActionPreventDefault: false, isDisabledFocusable // For displaying locked items
19
+ : true }));
20
+ }
21
+ function buildItems({ workspace, searchResults, searchRelationships, threshold = 0.8 }, intl) {
22
+ return searchResults
23
+ .filter((item) => {
24
+ // Filter out items with similarity score below the threshold
25
+ return (item.score ?? 0) >= threshold;
26
+ })
27
+ .map((item) => {
28
+ // Items are not actually disabled, but we need to display the lock icon for locked items,
29
+ // so this API is used for that purpose as a convenience.
30
+ const isDisabled = isItemLocked(item, workspace);
31
+ const url = getUIPath(item.type, item.id, workspace);
32
+ // Do not show relationships for dashboard items
33
+ if (item.type === "dashboard") {
34
+ return {
35
+ item: {
36
+ id: item.id,
37
+ stringTitle: item.title,
38
+ data: item,
39
+ isDisabled,
40
+ url,
41
+ },
42
+ };
43
+ }
44
+ const relationships = getItemRelationships(item, searchRelationships);
45
+ const children = relationships.map((relationship) => {
46
+ const isDisabled = isRelationshipLocked(relationship, workspace);
47
+ const url = getUIPath("dashboardVisualization", relationship.sourceObjectId, workspace, item.id);
48
+ return {
49
+ item: {
50
+ id: relationship.sourceObjectId,
51
+ stringTitle: relationship.sourceObjectTitle,
52
+ data: relationship,
53
+ isDisabled,
54
+ url,
55
+ icon: undefined, // Icon is rendered via ItemIcon component
56
+ },
57
+ };
58
+ });
59
+ // Add artificial "Edit" action item when there are relationships to display
60
+ if (children.length > 0) {
61
+ children.push({
62
+ item: {
63
+ id: item.id,
64
+ stringTitle: intl.formatMessage({ id: "semantic-search.edit" }),
65
+ icon: "pencil",
66
+ data: item,
67
+ isDisabled,
68
+ url,
69
+ },
70
+ });
71
+ }
72
+ return {
73
+ item: {
74
+ id: item.id,
75
+ stringTitle: item.title,
76
+ data: item,
77
+ isDisabled,
78
+ url,
79
+ },
80
+ children,
81
+ };
82
+ });
83
+ }
84
+ //# sourceMappingURL=LeveledSearchTreeView.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LeveledSearchTreeView.js","sourceRoot":"","sources":["../../src/internal/LeveledSearchTreeView.tsx"],"names":[],"mappings":"AAAA,gCAAgC;AAChC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,OAAO,EAAkB,MAAM,YAAY,CAAC;AAErD,OAAO,EAAE,iBAAiB,EAAkD,MAAM,sBAAsB,CAAC;AACzG,OAAO,EAAE,6BAA6B,EAAE,MAAM,gCAAgC,CAAC;AAC/E,OAAO,EAAE,oBAAoB,EAAE,YAAY,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAClG,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAgBlD;;;GAGG;AACH,MAAM,UAAU,qBAAqB,CAAC,KAAY;IAC9C,MAAM,IAAI,GAAG,OAAO,EAAE,CAAC;IACvB,MAAM,KAAK,GAAG,UAAU,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;IACtC,OAAO,CACH,oBAAC,iBAAiB,IACd,KAAK,EAAE,KAAK,EACZ,SAAS,EAAE,GAAG,EACd,cAAc,EAAE;YACZ,EAAE,EAAE,8BAA8B;YAClC,YAAY,EAAE,IAAI,CAAC,aAAa,CAAC,EAAE,EAAE,EAAE,sBAAsB,EAAE,CAAC;SACnE,EACD,YAAY,EAAC,mBAAmB,EAChC,aAAa,EAAC,YAAY,EAC1B,QAAQ,EAAE,KAAK,CAAC,QAAQ,EACxB,aAAa,EAAE,6BAA6B,EAC5C,kCAAkC,EAAE,KAAK,EACzC,mBAAmB,CAAC,8BAA8B;iBACpD,CACL,CAAC;AACN,CAAC;AASD,SAAS,UAAU,CACf,EAAE,SAAS,EAAE,aAAa,EAAE,mBAAmB,EAAE,SAAS,GAAG,GAAG,EAAmB,EACnF,IAAe;IAEf,OAAO,aAAa;SACf,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE;QACb,6DAA6D;QAC7D,OAAO,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,CAAC,IAAI,SAAS,CAAC;IAC1C,CAAC,CAAC;SACD,GAAG,CAAC,CAAC,IAAI,EAAsB,EAAE;QAC9B,0FAA0F;QAC1F,yDAAyD;QACzD,MAAM,UAAU,GAAG,YAAY,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;QACjD,MAAM,GAAG,GAAG,SAAS,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,SAAS,CAAC,CAAC;QAErD,gDAAgD;QAChD,IAAI,IAAI,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;YAC5B,OAAO;gBACH,IAAI,EAAE;oBACF,EAAE,EAAE,IAAI,CAAC,EAAE;oBACX,WAAW,EAAE,IAAI,CAAC,KAAK;oBACvB,IAAI,EAAE,IAAI;oBACV,UAAU;oBACV,GAAG;iBACN;aACJ,CAAC;QACN,CAAC;QAED,MAAM,aAAa,GAAG,oBAAoB,CAAC,IAAI,EAAE,mBAAmB,CAAC,CAAC;QACtE,MAAM,QAAQ,GAAmC,aAAa,CAAC,GAAG,CAAC,CAAC,YAAY,EAAE,EAAE;YAChF,MAAM,UAAU,GAAG,oBAAoB,CAAC,YAAY,EAAE,SAAS,CAAC,CAAC;YACjE,MAAM,GAAG,GAAG,SAAS,CACjB,wBAAwB,EACxB,YAAY,CAAC,cAAc,EAC3B,SAAS,EACT,IAAI,CAAC,EAAE,CACV,CAAC;YACF,OAAO;gBACH,IAAI,EAAE;oBACF,EAAE,EAAE,YAAY,CAAC,cAAc;oBAC/B,WAAW,EAAE,YAAY,CAAC,iBAAiB;oBAC3C,IAAI,EAAE,YAAY;oBAClB,UAAU;oBACV,GAAG;oBACH,IAAI,EAAE,SAAS,EAAE,0CAA0C;iBAC9D;aACJ,CAAC;QACN,CAAC,CAAC,CAAC;QAEH,4EAA4E;QAC5E,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACtB,QAAQ,CAAC,IAAI,CAAC;gBACV,IAAI,EAAE;oBACF,EAAE,EAAE,IAAI,CAAC,EAAE;oBACX,WAAW,EAAE,IAAI,CAAC,aAAa,CAAC,EAAE,EAAE,EAAE,sBAAsB,EAAE,CAAC;oBAC/D,IAAI,EAAE,QAAQ;oBACd,IAAI,EAAE,IAAI;oBACV,UAAU;oBACV,GAAG;iBACN;aACJ,CAAC,CAAC;QACP,CAAC;QAED,OAAO;YACH,IAAI,EAAE;gBACF,EAAE,EAAE,IAAI,CAAC,EAAE;gBACX,WAAW,EAAE,IAAI,CAAC,KAAK;gBACvB,IAAI,EAAE,IAAI;gBACV,UAAU;gBACV,GAAG;aACN;YACD,QAAQ;SACX,CAAC;IACN,CAAC,CAAC,CAAC;AACX,CAAC"}
@@ -0,0 +1,11 @@
1
+ import * as React from "react";
2
+ import { type ISemanticSearchRelationship, type ISemanticSearchResultItem } from "@gooddata/sdk-model";
3
+ import { type IUiTreeviewItemProps } from "@gooddata/sdk-ui-kit";
4
+ type Props = IUiTreeviewItemProps<ISemanticSearchResultItem | ISemanticSearchRelationship>;
5
+ /**
6
+ * A single result item in the search results.
7
+ * @internal
8
+ */
9
+ export declare const LeveledSearchTreeViewItemMemo: React.NamedExoticComponent<Props>;
10
+ export {};
11
+ //# sourceMappingURL=LeveledSearchTreeViewItem.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LeveledSearchTreeViewItem.d.ts","sourceRoot":"","sources":["../../src/internal/LeveledSearchTreeViewItem.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAEH,KAAK,2BAA2B,EAChC,KAAK,yBAAyB,EACjC,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAQ,KAAK,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AASvE,KAAK,KAAK,GAAG,oBAAoB,CAAC,yBAAyB,GAAG,2BAA2B,CAAC,CAAC;AAE3F;;;GAGG;AACH,eAAO,MAAM,6BAA6B,mCA6BxC,CAAC"}
@@ -0,0 +1,24 @@
1
+ // (C) 2024-2025 GoodData Corporation
2
+ import * as React from "react";
3
+ import { isSemanticSearchResultItem, } from "@gooddata/sdk-model";
4
+ import { Icon } from "@gooddata/sdk-ui-kit";
5
+ import { SearchItemDetails } from "./SearchItemDetails.js";
6
+ import { SearchItemIcon } from "./SearchItemIcon.js";
7
+ import { UpdatedDate } from "./UpdateDate.js";
8
+ import { SearchItem } from "../SearchItem.js";
9
+ import { getAriaLabel } from "../utils/getAriaLabel.js";
10
+ import { GroupResultCounter } from "./GroupResultCounter.js";
11
+ /**
12
+ * A single result item in the search results.
13
+ * @internal
14
+ */
15
+ export const LeveledSearchTreeViewItemMemo = React.memo(function LeveledSearchTreeViewItem(props) {
16
+ const { item, type, level, isFocused, isExpanded, childCount, onSelect, onHover } = props;
17
+ const href = type === "leaf" ? item.url : undefined;
18
+ return (React.createElement(SearchItem, { ariaLabel: getAriaLabel(item.data), level: level, href: href, onClick: onSelect, onHover: onHover, isFocused: isFocused, icon: React.createElement(SearchItemIcon, { item: item.data, icon: item.icon }), details: React.createElement(SearchItemDetails, { item: item.data }), resultCounter: React.createElement(GroupResultCounter, { count: childCount, isExpanded: isExpanded }) },
19
+ React.createElement("span", { className: "gd-semantic-search__results-item__text__row" },
20
+ item.isDisabled ? (React.createElement(Icon.Lock, { className: "gd-semantic-search__results-item__text__lock-icon" })) : null,
21
+ React.createElement("span", { className: "gd-semantic-search__results-item__text__ellipsis" }, item.stringTitle)),
22
+ React.createElement("span", { className: "gd-semantic-search__results-item__text__row" }, isSemanticSearchResultItem(item.data) && level === 1 && (React.createElement(UpdatedDate, { createdAt: item.data.createdAt, modifiedAt: item.data.modifiedAt })))));
23
+ });
24
+ //# sourceMappingURL=LeveledSearchTreeViewItem.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LeveledSearchTreeViewItem.js","sourceRoot":"","sources":["../../src/internal/LeveledSearchTreeViewItem.tsx"],"names":[],"mappings":"AAAA,qCAAqC;AACrC,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EACH,0BAA0B,GAG7B,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,IAAI,EAA6B,MAAM,sBAAsB,CAAC;AAEvE,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAC9C,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AACxD,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAI7D;;;GAGG;AACH,MAAM,CAAC,MAAM,6BAA6B,GAAG,KAAK,CAAC,IAAI,CAAC,SAAS,yBAAyB,CAAC,KAAY;IACnG,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,KAAK,CAAC;IAC1F,MAAM,IAAI,GAAG,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC;IAEpD,OAAO,CACH,oBAAC,UAAU,IACP,SAAS,EAAE,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,EAClC,KAAK,EAAE,KAAK,EACZ,IAAI,EAAE,IAAI,EACV,OAAO,EAAE,QAAQ,EACjB,OAAO,EAAE,OAAO,EAChB,SAAS,EAAE,SAAS,EACpB,IAAI,EAAE,oBAAC,cAAc,IAAC,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,GAAI,EAC1D,OAAO,EAAE,oBAAC,iBAAiB,IAAC,IAAI,EAAE,IAAI,CAAC,IAAI,GAAI,EAC/C,aAAa,EAAE,oBAAC,kBAAkB,IAAC,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,GAAI;QAEhF,8BAAM,SAAS,EAAC,6CAA6C;YACxD,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CACf,oBAAC,IAAI,CAAC,IAAI,IAAC,SAAS,EAAC,mDAAmD,GAAG,CAC9E,CAAC,CAAC,CAAC,IAAI;YACR,8BAAM,SAAS,EAAC,kDAAkD,IAAE,IAAI,CAAC,WAAW,CAAQ,CACzF;QACP,8BAAM,SAAS,EAAC,6CAA6C,IACxD,0BAA0B,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,KAAK,KAAK,CAAC,IAAI,CACrD,oBAAC,WAAW,IAAC,SAAS,EAAE,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC,UAAU,GAAI,CACpF,CACE,CACE,CAChB,CAAC;AACN,CAAC,CAAC,CAAC"}