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