@dxos/plugin-search 0.8.4-main.c1de068 → 0.8.4-main.c351d160a8
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/README.md +0 -1
- package/dist/lib/browser/SearchDialog-KJL6C2OF.mjs +108 -0
- package/dist/lib/browser/SearchDialog-KJL6C2OF.mjs.map +7 -0
- package/dist/lib/browser/SearchMain-VOEEHUCW.mjs +97 -0
- package/dist/lib/browser/SearchMain-VOEEHUCW.mjs.map +7 -0
- package/dist/lib/browser/app-graph-builder-FHVM5QV7.mjs +78 -0
- package/dist/lib/browser/app-graph-builder-FHVM5QV7.mjs.map +7 -0
- package/dist/lib/browser/chunk-I3633KKK.mjs +26 -0
- package/dist/lib/browser/chunk-I3633KKK.mjs.map +7 -0
- package/dist/lib/browser/chunk-NB4JZIOE.mjs +282 -0
- package/dist/lib/browser/chunk-NB4JZIOE.mjs.map +7 -0
- package/dist/lib/browser/chunk-PZ67KFRU.mjs +22 -0
- package/dist/lib/browser/chunk-PZ67KFRU.mjs.map +7 -0
- package/dist/lib/browser/index.mjs +52 -59
- package/dist/lib/browser/index.mjs.map +4 -4
- package/dist/lib/browser/meta.json +1 -1
- package/dist/lib/browser/operation-resolver-H4X6BNWR.mjs +26 -0
- package/dist/lib/browser/operation-resolver-H4X6BNWR.mjs.map +7 -0
- package/dist/lib/browser/react-surface-EZX43GMG.mjs +60 -0
- package/dist/lib/browser/react-surface-EZX43GMG.mjs.map +7 -0
- package/dist/types/src/SearchPlugin.d.ts +2 -1
- package/dist/types/src/SearchPlugin.d.ts.map +1 -1
- package/dist/types/src/capabilities/app-graph-builder/app-graph-builder.d.ts +6 -0
- package/dist/types/src/capabilities/app-graph-builder/app-graph-builder.d.ts.map +1 -0
- package/dist/types/src/capabilities/app-graph-builder/index.d.ts +3 -0
- package/dist/types/src/capabilities/app-graph-builder/index.d.ts.map +1 -0
- package/dist/types/src/capabilities/index.d.ts +3 -3
- package/dist/types/src/capabilities/index.d.ts.map +1 -1
- package/dist/types/src/capabilities/operation-resolver/index.d.ts +3 -0
- package/dist/types/src/capabilities/operation-resolver/index.d.ts.map +1 -0
- package/dist/types/src/capabilities/operation-resolver/operation-resolver.d.ts +5 -0
- package/dist/types/src/capabilities/operation-resolver/operation-resolver.d.ts.map +1 -0
- package/dist/types/src/capabilities/react-surface/index.d.ts +3 -0
- package/dist/types/src/capabilities/react-surface/index.d.ts.map +1 -0
- package/dist/types/src/capabilities/react-surface/react-surface.d.ts +5 -0
- package/dist/types/src/capabilities/react-surface/react-surface.d.ts.map +1 -0
- package/dist/types/src/components/index.d.ts +0 -3
- package/dist/types/src/components/index.d.ts.map +1 -1
- package/dist/types/src/constants.d.ts +2 -0
- package/dist/types/src/constants.d.ts.map +1 -0
- package/dist/types/src/{components → containers/SearchDialog}/SearchDialog.d.ts +0 -1
- package/dist/types/src/containers/SearchDialog/SearchDialog.d.ts.map +1 -0
- package/dist/types/src/containers/SearchDialog/index.d.ts +3 -0
- package/dist/types/src/containers/SearchDialog/index.d.ts.map +1 -0
- package/dist/types/src/containers/SearchMain/SearchMain.d.ts +6 -0
- package/dist/types/src/containers/SearchMain/SearchMain.d.ts.map +1 -0
- package/dist/types/src/containers/SearchMain/index.d.ts +3 -0
- package/dist/types/src/containers/SearchMain/index.d.ts.map +1 -0
- package/dist/types/src/containers/index.d.ts +5 -0
- package/dist/types/src/containers/index.d.ts.map +1 -0
- package/dist/types/src/hooks/index.d.ts +1 -0
- package/dist/types/src/hooks/index.d.ts.map +1 -1
- package/dist/types/src/hooks/sync.d.ts +3 -2
- package/dist/types/src/hooks/sync.d.ts.map +1 -1
- package/dist/types/src/hooks/useGlobalSearch.d.ts +7 -3
- package/dist/types/src/hooks/useGlobalSearch.d.ts.map +1 -1
- package/dist/types/src/hooks/useSearchResults.d.ts +3 -2
- package/dist/types/src/hooks/useSearchResults.d.ts.map +1 -1
- package/dist/types/src/hooks/useWebSearch.d.ts +6 -3
- package/dist/types/src/hooks/useWebSearch.d.ts.map +1 -1
- package/dist/types/src/meta.d.ts +3 -4
- package/dist/types/src/meta.d.ts.map +1 -1
- package/dist/types/src/search/exa.d.ts +4 -4
- package/dist/types/src/search/exa.d.ts.map +1 -1
- package/dist/types/src/translations.d.ts +1 -1
- package/dist/types/src/types/action.d.ts +14 -11
- package/dist/types/src/types/action.d.ts.map +1 -1
- package/dist/types/src/types/search.d.ts +3 -7
- package/dist/types/src/types/search.d.ts.map +1 -1
- package/dist/types/tsconfig.tsbuildinfo +1 -1
- package/package.json +57 -47
- package/src/SearchPlugin.tsx +28 -46
- package/src/capabilities/app-graph-builder/app-graph-builder.ts +70 -0
- package/src/capabilities/app-graph-builder/index.ts +7 -0
- package/src/capabilities/index.ts +3 -5
- package/src/capabilities/operation-resolver/index.ts +7 -0
- package/src/capabilities/operation-resolver/operation-resolver.ts +24 -0
- package/src/capabilities/react-surface/index.ts +7 -0
- package/src/capabilities/react-surface/react-surface.tsx +62 -0
- package/src/components/index.ts +0 -4
- package/src/constants.ts +7 -0
- package/src/containers/SearchDialog/SearchDialog.tsx +120 -0
- package/src/containers/SearchDialog/index.ts +6 -0
- package/src/containers/SearchMain/SearchMain.tsx +100 -0
- package/src/containers/SearchMain/index.ts +7 -0
- package/src/containers/index.ts +10 -0
- package/src/hooks/index.ts +2 -0
- package/src/hooks/sync.test.ts +6 -4
- package/src/hooks/sync.ts +27 -31
- package/src/hooks/useGlobalSearch.tsx +33 -13
- package/src/hooks/useSearchResults.ts +9 -6
- package/src/hooks/useWebSearch.ts +21 -11
- package/src/meta.ts +10 -7
- package/src/search/exa.test.ts +8 -19
- package/src/search/exa.ts +135 -154
- package/src/translations.ts +1 -1
- package/src/types/action.tsx +10 -8
- package/src/types/command-score.d.ts +16 -0
- package/src/types/search.ts +3 -9
- package/dist/lib/browser/app-graph-builder-FLW7KDC5.mjs +0 -77
- package/dist/lib/browser/app-graph-builder-FLW7KDC5.mjs.map +0 -7
- package/dist/lib/browser/chunk-BXSF7IAU.mjs +0 -190
- package/dist/lib/browser/chunk-BXSF7IAU.mjs.map +0 -7
- package/dist/lib/browser/chunk-JVMYGOKS.mjs +0 -21
- package/dist/lib/browser/chunk-JVMYGOKS.mjs.map +0 -7
- package/dist/lib/browser/chunk-KNS62YL2.mjs +0 -20
- package/dist/lib/browser/chunk-KNS62YL2.mjs.map +0 -7
- package/dist/lib/browser/intent-resolver-JPBGEKFT.mjs +0 -22
- package/dist/lib/browser/intent-resolver-JPBGEKFT.mjs.map +0 -7
- package/dist/lib/browser/react-surface-ETKK5YS3.mjs +0 -648
- package/dist/lib/browser/react-surface-ETKK5YS3.mjs.map +0 -7
- package/dist/types/src/capabilities/app-graph-builder.d.ts +0 -4
- package/dist/types/src/capabilities/app-graph-builder.d.ts.map +0 -1
- package/dist/types/src/capabilities/intent-resolver.d.ts +0 -4
- package/dist/types/src/capabilities/intent-resolver.d.ts.map +0 -1
- package/dist/types/src/capabilities/react-surface.d.ts +0 -4
- package/dist/types/src/capabilities/react-surface.d.ts.map +0 -1
- package/dist/types/src/components/Search.stories.d.ts +0 -15
- package/dist/types/src/components/Search.stories.d.ts.map +0 -1
- package/dist/types/src/components/SearchDialog.d.ts.map +0 -1
- package/dist/types/src/components/SearchMain.d.ts +0 -7
- package/dist/types/src/components/SearchMain.d.ts.map +0 -1
- package/dist/types/src/components/SearchResults/SearchResults.d.ts +0 -20
- package/dist/types/src/components/SearchResults/SearchResults.d.ts.map +0 -1
- package/dist/types/src/components/SearchResults/SearchResults.stories.d.ts +0 -12
- package/dist/types/src/components/SearchResults/SearchResults.stories.d.ts.map +0 -1
- package/dist/types/src/components/SearchResults/index.d.ts +0 -2
- package/dist/types/src/components/SearchResults/index.d.ts.map +0 -1
- package/dist/types/src/components/Searchbar/Searchbar.d.ts +0 -14
- package/dist/types/src/components/Searchbar/Searchbar.d.ts.map +0 -1
- package/dist/types/src/components/Searchbar/Searchbar.stories.d.ts +0 -11
- package/dist/types/src/components/Searchbar/Searchbar.stories.d.ts.map +0 -1
- package/dist/types/src/components/Searchbar/index.d.ts +0 -2
- package/dist/types/src/components/Searchbar/index.d.ts.map +0 -1
- package/src/capabilities/app-graph-builder.ts +0 -79
- package/src/capabilities/intent-resolver.ts +0 -18
- package/src/capabilities/react-surface.tsx +0 -59
- package/src/components/Search.stories.tsx +0 -66
- package/src/components/SearchDialog.tsx +0 -124
- package/src/components/SearchMain.tsx +0 -67
- package/src/components/SearchResults/SearchResults.stories.tsx +0 -57
- package/src/components/SearchResults/SearchResults.tsx +0 -86
- package/src/components/SearchResults/index.ts +0 -5
- package/src/components/Searchbar/Searchbar.stories.tsx +0 -28
- package/src/components/Searchbar/Searchbar.tsx +0 -67
- package/src/components/Searchbar/index.ts +0 -5
package/README.md
CHANGED
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
import {
|
|
2
|
+
useSearchResults
|
|
3
|
+
} from "./chunk-NB4JZIOE.mjs";
|
|
4
|
+
import {
|
|
5
|
+
meta
|
|
6
|
+
} from "./chunk-PZ67KFRU.mjs";
|
|
7
|
+
|
|
8
|
+
// src/containers/SearchDialog/SearchDialog.tsx
|
|
9
|
+
import * as Option from "effect/Option";
|
|
10
|
+
import React, { forwardRef, useCallback, useState } from "react";
|
|
11
|
+
import { useOperationInvoker } from "@dxos/app-framework/ui";
|
|
12
|
+
import { LayoutOperation } from "@dxos/app-toolkit";
|
|
13
|
+
import { useAppGraph, useLayout } from "@dxos/app-toolkit/ui";
|
|
14
|
+
import { Obj } from "@dxos/echo";
|
|
15
|
+
import { Graph } from "@dxos/plugin-graph";
|
|
16
|
+
import { useClient } from "@dxos/react-client";
|
|
17
|
+
import { Filter, useQuery } from "@dxos/react-client/echo";
|
|
18
|
+
import { Button, Dialog, toLocalizedString, useTranslation } from "@dxos/react-ui";
|
|
19
|
+
import { SearchList } from "@dxos/react-ui-searchlist";
|
|
20
|
+
import { mx, osTranslations } from "@dxos/ui-theme";
|
|
21
|
+
var SearchListResult = /* @__PURE__ */ forwardRef(({ node, onSelect }, forwardedRef) => {
|
|
22
|
+
const { t } = useTranslation(meta.id);
|
|
23
|
+
const label = toLocalizedString(node?.properties.label ?? "never", t);
|
|
24
|
+
const handleSelect = useCallback(() => {
|
|
25
|
+
onSelect?.(node.id);
|
|
26
|
+
}, [
|
|
27
|
+
node,
|
|
28
|
+
onSelect
|
|
29
|
+
]);
|
|
30
|
+
return /* @__PURE__ */ React.createElement(SearchList.Item, {
|
|
31
|
+
value: node.id,
|
|
32
|
+
label,
|
|
33
|
+
icon: node?.properties.icon,
|
|
34
|
+
classNames: "flex gap-2 items-center px-2",
|
|
35
|
+
onSelect: handleSelect,
|
|
36
|
+
ref: forwardedRef
|
|
37
|
+
});
|
|
38
|
+
});
|
|
39
|
+
var SearchDialog = ({ pivotId }) => {
|
|
40
|
+
const { t } = useTranslation(meta.id);
|
|
41
|
+
const { graph } = useAppGraph();
|
|
42
|
+
const layout = useLayout();
|
|
43
|
+
const closed = (Array.isArray(layout.inactive) ? layout.inactive : [
|
|
44
|
+
layout.inactive
|
|
45
|
+
]).map((id) => graph ? Graph.getNode(graph, id) : Option.none()).filter(Boolean);
|
|
46
|
+
const [queryString, setQueryString] = useState("");
|
|
47
|
+
const client = useClient();
|
|
48
|
+
const dangerouslyLoadAllObjects = useQuery(client.spaces, Filter.everything());
|
|
49
|
+
const [pending, results] = useSearchResults(queryString, dangerouslyLoadAllObjects);
|
|
50
|
+
const resultObjects = Array.from(results.keys());
|
|
51
|
+
const { invokePromise } = useOperationInvoker();
|
|
52
|
+
const handleSelect = useCallback(async (nodeId) => {
|
|
53
|
+
await invokePromise(LayoutOperation.UpdateDialog, {
|
|
54
|
+
state: false
|
|
55
|
+
});
|
|
56
|
+
const index = layout.active.findIndex((id) => id === nodeId);
|
|
57
|
+
if (index !== -1) {
|
|
58
|
+
await invokePromise(LayoutOperation.ScrollIntoView, {
|
|
59
|
+
subject: nodeId
|
|
60
|
+
});
|
|
61
|
+
} else {
|
|
62
|
+
await invokePromise(LayoutOperation.Open, {
|
|
63
|
+
subject: [
|
|
64
|
+
nodeId
|
|
65
|
+
],
|
|
66
|
+
pivotId,
|
|
67
|
+
positioning: "end"
|
|
68
|
+
});
|
|
69
|
+
}
|
|
70
|
+
}, [
|
|
71
|
+
pivotId,
|
|
72
|
+
invokePromise,
|
|
73
|
+
layout
|
|
74
|
+
]);
|
|
75
|
+
const handleSearch = useCallback((query) => {
|
|
76
|
+
setQueryString(query);
|
|
77
|
+
}, []);
|
|
78
|
+
return /* @__PURE__ */ React.createElement(Dialog.Content, null, /* @__PURE__ */ React.createElement(Dialog.Title, null, t("search dialog title")), /* @__PURE__ */ React.createElement(SearchList.Root, {
|
|
79
|
+
onSearch: handleSearch
|
|
80
|
+
}, /* @__PURE__ */ React.createElement(SearchList.Content, {
|
|
81
|
+
classNames: "max-h-[24rem] overflow-auto"
|
|
82
|
+
}, /* @__PURE__ */ React.createElement(SearchList.Input, {
|
|
83
|
+
placeholder: t("search placeholder")
|
|
84
|
+
}), /* @__PURE__ */ React.createElement(SearchList.Viewport, null, queryString.length > 0 ? resultObjects.length > 0 ? resultObjects.map((object) => Graph.getNode(graph, Obj.getDXN(object).toString())).filter(Option.isSome).map((node) => /* @__PURE__ */ React.createElement(SearchListResult, {
|
|
85
|
+
key: node.value.id,
|
|
86
|
+
node: node.value,
|
|
87
|
+
onSelect: handleSelect
|
|
88
|
+
})) : /* @__PURE__ */ React.createElement("p", {
|
|
89
|
+
className: "px-1"
|
|
90
|
+
}, t(pending ? "pending results message" : "empty results message")) : /* @__PURE__ */ React.createElement(React.Fragment, null, closed.length > 0 && /* @__PURE__ */ React.createElement("h2", {
|
|
91
|
+
className: mx("my-1", "text-description")
|
|
92
|
+
}, t("recently closed heading")), closed.filter(Option.isSome).map((node) => /* @__PURE__ */ React.createElement(SearchListResult, {
|
|
93
|
+
key: node.value.id,
|
|
94
|
+
node: node.value,
|
|
95
|
+
onSelect: handleSelect
|
|
96
|
+
})))))), /* @__PURE__ */ React.createElement(Dialog.Close, {
|
|
97
|
+
asChild: true
|
|
98
|
+
}, /* @__PURE__ */ React.createElement(Button, {
|
|
99
|
+
variant: "primary"
|
|
100
|
+
}, t("close label", {
|
|
101
|
+
ns: osTranslations
|
|
102
|
+
}))));
|
|
103
|
+
};
|
|
104
|
+
export {
|
|
105
|
+
SearchDialog,
|
|
106
|
+
SearchDialog as default
|
|
107
|
+
};
|
|
108
|
+
//# sourceMappingURL=SearchDialog-KJL6C2OF.mjs.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/containers/SearchDialog/SearchDialog.tsx"],
|
|
4
|
+
"sourcesContent": ["//\n// Copyright 2024 DXOS.org\n//\n\nimport * as Option from 'effect/Option';\nimport React, { forwardRef, useCallback, useState } from 'react';\n\nimport { useOperationInvoker } from '@dxos/app-framework/ui';\nimport { LayoutOperation } from '@dxos/app-toolkit';\nimport { useAppGraph, useLayout } from '@dxos/app-toolkit/ui';\nimport { Obj } from '@dxos/echo';\nimport { Graph, type Node } from '@dxos/plugin-graph';\nimport { useClient } from '@dxos/react-client';\nimport { Filter, useQuery } from '@dxos/react-client/echo';\nimport { Button, Dialog, toLocalizedString, useTranslation } from '@dxos/react-ui';\nimport { SearchList } from '@dxos/react-ui-searchlist';\nimport { mx, osTranslations } from '@dxos/ui-theme';\n\nimport { useSearchResults } from '../../hooks';\nimport { meta } from '../../meta';\n\ntype SearchListResultProps = {\n node: Node.Node;\n onSelect?: (nodeId: string) => void;\n};\n\nconst SearchListResult = forwardRef<HTMLDivElement, SearchListResultProps>(({ node, onSelect }, forwardedRef) => {\n const { t } = useTranslation(meta.id);\n const label = toLocalizedString(node?.properties.label ?? 'never', t);\n const handleSelect = useCallback(() => {\n onSelect?.(node!.id);\n }, [node, onSelect]);\n return (\n <SearchList.Item\n value={node!.id}\n label={label}\n icon={node?.properties.icon}\n classNames='flex gap-2 items-center px-2'\n onSelect={handleSelect}\n ref={forwardedRef}\n />\n );\n});\n\nexport type SearchDialogProps = {\n pivotId: string;\n};\n\nexport const SearchDialog = ({ pivotId }: SearchDialogProps) => {\n const { t } = useTranslation(meta.id);\n const { graph } = useAppGraph();\n const layout = useLayout();\n const closed = (Array.isArray(layout.inactive) ? layout.inactive : [layout.inactive])\n .map((id) => (graph ? Graph.getNode(graph, id) : Option.none()))\n .filter(Boolean);\n const [queryString, setQueryString] = useState('');\n const client = useClient();\n const dangerouslyLoadAllObjects = useQuery(client.spaces, Filter.everything());\n const [pending, results] = useSearchResults(queryString, dangerouslyLoadAllObjects);\n const resultObjects = Array.from(results.keys());\n const { invokePromise } = useOperationInvoker();\n\n const handleSelect = useCallback(\n async (nodeId: string) => {\n await invokePromise(LayoutOperation.UpdateDialog, { state: false });\n\n // If node is already present in the active parts, scroll to it and close the dialog.\n const index = layout.active.findIndex((id) => id === nodeId);\n if (index !== -1) {\n await invokePromise(LayoutOperation.ScrollIntoView, { subject: nodeId });\n } else {\n await invokePromise(LayoutOperation.Open, {\n subject: [nodeId],\n pivotId,\n positioning: 'end',\n });\n }\n },\n [pivotId, invokePromise, layout],\n );\n\n const handleSearch = useCallback((query: string) => {\n setQueryString(query);\n }, []);\n\n return (\n <Dialog.Content>\n <Dialog.Title>{t('search dialog title')}</Dialog.Title>\n <SearchList.Root onSearch={handleSearch}>\n <SearchList.Content classNames='max-h-[24rem] overflow-auto'>\n <SearchList.Input placeholder={t('search placeholder')} />\n <SearchList.Viewport>\n {queryString.length > 0 ? (\n resultObjects.length > 0 ? (\n resultObjects\n .map((object) => Graph.getNode(graph, Obj.getDXN(object).toString()))\n .filter(Option.isSome)\n .map((node) => <SearchListResult key={node.value.id} node={node.value} onSelect={handleSelect} />)\n ) : (\n <p className='px-1'>{t(pending ? 'pending results message' : 'empty results message')}</p>\n )\n ) : (\n <>\n {closed.length > 0 && (\n <h2 className={mx('my-1', 'text-description')}>{t('recently closed heading')}</h2>\n )}\n {closed.filter(Option.isSome).map((node) => (\n <SearchListResult key={node.value.id} node={node.value} onSelect={handleSelect} />\n ))}\n </>\n )}\n </SearchList.Viewport>\n </SearchList.Content>\n </SearchList.Root>\n <Dialog.Close asChild>\n <Button variant='primary'>{t('close label', { ns: osTranslations })}</Button>\n </Dialog.Close>\n </Dialog.Content>\n );\n};\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["Option", "React", "forwardRef", "useCallback", "useState", "useOperationInvoker", "LayoutOperation", "useAppGraph", "useLayout", "Obj", "Graph", "useClient", "Filter", "useQuery", "Button", "Dialog", "toLocalizedString", "useTranslation", "SearchList", "mx", "osTranslations", "SearchListResult", "forwardRef", "node", "onSelect", "forwardedRef", "t", "useTranslation", "meta", "id", "label", "toLocalizedString", "properties", "handleSelect", "useCallback", "SearchList", "Item", "value", "icon", "classNames", "ref", "SearchDialog", "pivotId", "graph", "useAppGraph", "layout", "useLayout", "closed", "Array", "isArray", "inactive", "map", "Graph", "getNode", "none", "filter", "Boolean", "queryString", "setQueryString", "useState", "client", "useClient", "dangerouslyLoadAllObjects", "useQuery", "spaces", "Filter", "everything", "pending", "results", "useSearchResults", "resultObjects", "from", "keys", "invokePromise", "useOperationInvoker", "nodeId", "LayoutOperation", "UpdateDialog", "state", "index", "active", "findIndex", "ScrollIntoView", "subject", "Open", "positioning", "handleSearch", "query", "Dialog", "Content", "Title", "Root", "onSearch", "Input", "placeholder", "Viewport", "length", "object", "Obj", "getDXN", "toString", "isSome", "key", "p", "className", "h2", "mx", "Close", "asChild", "Button", "variant", "ns", "osTranslations"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
import {
|
|
2
|
+
useGlobalSearch,
|
|
3
|
+
useGlobalSearchResults,
|
|
4
|
+
useWebSearch
|
|
5
|
+
} from "./chunk-NB4JZIOE.mjs";
|
|
6
|
+
import {
|
|
7
|
+
meta
|
|
8
|
+
} from "./chunk-PZ67KFRU.mjs";
|
|
9
|
+
|
|
10
|
+
// src/containers/SearchMain/SearchMain.tsx
|
|
11
|
+
import React, { useCallback, useMemo, useState } from "react";
|
|
12
|
+
import { Surface } from "@dxos/app-framework/ui";
|
|
13
|
+
import { useObjectMenuItems } from "@dxos/app-toolkit/ui";
|
|
14
|
+
import { Entity, Query } from "@dxos/echo";
|
|
15
|
+
import { Filter, useQuery } from "@dxos/react-client/echo";
|
|
16
|
+
import { Card, Panel, ScrollArea, Toolbar, useTranslation } from "@dxos/react-ui";
|
|
17
|
+
import { Menu } from "@dxos/react-ui-menu";
|
|
18
|
+
import { Mosaic } from "@dxos/react-ui-mosaic";
|
|
19
|
+
import { SearchList } from "@dxos/react-ui-searchlist";
|
|
20
|
+
import { Text } from "@dxos/schema";
|
|
21
|
+
var SearchMain = ({ space }) => {
|
|
22
|
+
const { t } = useTranslation(meta.id);
|
|
23
|
+
const { setMatch } = useGlobalSearch();
|
|
24
|
+
const [query, setQuery] = useState();
|
|
25
|
+
const objects = useQuery(space?.db, query === void 0 ? Query.select(Filter.nothing()) : Query.all(Query.select(Filter.text(query, {
|
|
26
|
+
type: "full-text"
|
|
27
|
+
})).select(Filter.not(Filter.type(Text.Text))), Query.select(Filter.text(query, {
|
|
28
|
+
type: "full-text"
|
|
29
|
+
})).select(Filter.type(Text.Text)).referencedBy("org.dxos.type.document", "content")));
|
|
30
|
+
const results = useGlobalSearchResults(objects);
|
|
31
|
+
const { results: webResults } = useWebSearch({
|
|
32
|
+
query
|
|
33
|
+
});
|
|
34
|
+
const allResults = useMemo(() => [
|
|
35
|
+
...results,
|
|
36
|
+
...webResults
|
|
37
|
+
].filter(({ object }) => object && Entity.getLabel(object)), [
|
|
38
|
+
results,
|
|
39
|
+
webResults
|
|
40
|
+
]);
|
|
41
|
+
const handleSearch = useCallback((text) => {
|
|
42
|
+
setQuery(text);
|
|
43
|
+
setMatch?.(text);
|
|
44
|
+
}, [
|
|
45
|
+
setMatch
|
|
46
|
+
]);
|
|
47
|
+
return /* @__PURE__ */ React.createElement(SearchList.Root, {
|
|
48
|
+
onSearch: handleSearch
|
|
49
|
+
}, /* @__PURE__ */ React.createElement(Panel.Root, {
|
|
50
|
+
className: "dx-document"
|
|
51
|
+
}, /* @__PURE__ */ React.createElement(Panel.Toolbar, {
|
|
52
|
+
asChild: true
|
|
53
|
+
}, /* @__PURE__ */ React.createElement(Toolbar.Root, null, /* @__PURE__ */ React.createElement(SearchList.Input, {
|
|
54
|
+
placeholder: t("search placeholder")
|
|
55
|
+
}))), /* @__PURE__ */ React.createElement(Panel.Content, {
|
|
56
|
+
asChild: true
|
|
57
|
+
}, /* @__PURE__ */ React.createElement(SearchList.Content, null, /* @__PURE__ */ React.createElement(Mosaic.Container, {
|
|
58
|
+
asChild: true
|
|
59
|
+
}, /* @__PURE__ */ React.createElement(ScrollArea.Root, {
|
|
60
|
+
orientation: "vertical"
|
|
61
|
+
}, /* @__PURE__ */ React.createElement(ScrollArea.Viewport, null, /* @__PURE__ */ React.createElement(Mosaic.Stack, {
|
|
62
|
+
items: allResults,
|
|
63
|
+
getId: (result) => result.object.id,
|
|
64
|
+
Tile: SearchResultTile
|
|
65
|
+
})))), allResults.length === 0 && /* @__PURE__ */ React.createElement(SearchList.Empty, null, t("empty results message"))))));
|
|
66
|
+
};
|
|
67
|
+
var SearchResultTile = (props) => {
|
|
68
|
+
const data = props.data;
|
|
69
|
+
const object = data.object;
|
|
70
|
+
const objectMenuItems = useObjectMenuItems(object);
|
|
71
|
+
return /* @__PURE__ */ React.createElement(Menu.Root, null, /* @__PURE__ */ React.createElement(Card.Root, {
|
|
72
|
+
key: data.id
|
|
73
|
+
}, /* @__PURE__ */ React.createElement(Card.Toolbar, null, /* @__PURE__ */ React.createElement(Card.DragHandle, null), /* @__PURE__ */ React.createElement(Card.Title, null, data.label ?? (data.object && Entity.getLabel(data.object))), /* @__PURE__ */ React.createElement(Menu.Trigger, {
|
|
74
|
+
asChild: true,
|
|
75
|
+
disabled: !objectMenuItems?.length
|
|
76
|
+
}, /* @__PURE__ */ React.createElement(Toolbar.IconButton, {
|
|
77
|
+
iconOnly: true,
|
|
78
|
+
variant: "ghost",
|
|
79
|
+
icon: "ph--dots-three-vertical--regular",
|
|
80
|
+
label: "Actions"
|
|
81
|
+
})), /* @__PURE__ */ React.createElement(Menu.Content, {
|
|
82
|
+
items: objectMenuItems
|
|
83
|
+
})), /* @__PURE__ */ React.createElement(Surface.Surface, {
|
|
84
|
+
role: "card--content",
|
|
85
|
+
data: {
|
|
86
|
+
subject: data.object
|
|
87
|
+
},
|
|
88
|
+
limit: 1
|
|
89
|
+
})));
|
|
90
|
+
};
|
|
91
|
+
|
|
92
|
+
// src/containers/SearchMain/index.ts
|
|
93
|
+
var SearchMain_default = SearchMain;
|
|
94
|
+
export {
|
|
95
|
+
SearchMain_default as default
|
|
96
|
+
};
|
|
97
|
+
//# sourceMappingURL=SearchMain-VOEEHUCW.mjs.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/containers/SearchMain/SearchMain.tsx", "../../../src/containers/SearchMain/index.ts"],
|
|
4
|
+
"sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport React, { useCallback, useMemo, useState } from 'react';\n\nimport { Surface } from '@dxos/app-framework/ui';\nimport { useObjectMenuItems } from '@dxos/app-toolkit/ui';\nimport { Entity, Query } from '@dxos/echo';\nimport { Filter, type Space, useQuery } from '@dxos/react-client/echo';\nimport { Card, Panel, ScrollArea, Toolbar, useTranslation } from '@dxos/react-ui';\nimport { Menu } from '@dxos/react-ui-menu';\nimport { Mosaic, type MosaicStackTileComponent } from '@dxos/react-ui-mosaic';\nimport { SearchList } from '@dxos/react-ui-searchlist';\nimport { Text } from '@dxos/schema';\n\nimport { useGlobalSearch, useGlobalSearchResults, useWebSearch } from '../../hooks';\nimport { meta } from '../../meta';\nimport { type SearchResult } from '../../types';\n\nexport const SearchMain = ({ space }: { space?: Space }) => {\n const { t } = useTranslation(meta.id);\n const { setMatch } = useGlobalSearch();\n const [query, setQuery] = useState<string>();\n // TODO(burdon): Option to search across spaces.\n const objects = useQuery(\n space?.db,\n query === undefined\n ? Query.select(Filter.nothing())\n : // TODO(dmaretskyi): Final version would walk the ancestry of the object until we find a non-system type.\n Query.all(\n Query.select(Filter.text(query, { type: 'full-text' })).select(Filter.not(Filter.type(Text.Text))),\n Query.select(Filter.text(query, { type: 'full-text' }))\n .select(Filter.type(Text.Text))\n .referencedBy('org.dxos.type.document', 'content'),\n ),\n );\n\n const results = useGlobalSearchResults(objects);\n const { results: webResults } = useWebSearch({ query });\n const allResults = useMemo(\n () => [...results, ...webResults].filter(({ object }) => object && Entity.getLabel(object)),\n [results, webResults],\n );\n\n const handleSearch = useCallback(\n (text: string) => {\n setQuery(text);\n setMatch?.(text);\n },\n [setMatch],\n );\n\n return (\n <SearchList.Root onSearch={handleSearch}>\n <Panel.Root className='dx-document'>\n <Panel.Toolbar asChild>\n <Toolbar.Root>\n <SearchList.Input placeholder={t('search placeholder')} />\n </Toolbar.Root>\n </Panel.Toolbar>\n <Panel.Content asChild>\n <SearchList.Content>\n <Mosaic.Container asChild>\n <ScrollArea.Root orientation='vertical'>\n <ScrollArea.Viewport>\n <Mosaic.Stack items={allResults} getId={(result) => result.object!.id} Tile={SearchResultTile} />\n </ScrollArea.Viewport>\n </ScrollArea.Root>\n </Mosaic.Container>\n {allResults.length === 0 && <SearchList.Empty>{t('empty results message')}</SearchList.Empty>}\n </SearchList.Content>\n </Panel.Content>\n </Panel.Root>\n </SearchList.Root>\n );\n};\n\nconst SearchResultTile: MosaicStackTileComponent<SearchResult> = (props) => {\n const data = props.data;\n const object = data.object!;\n const objectMenuItems = useObjectMenuItems(object);\n\n return (\n <Menu.Root>\n <Card.Root key={data.id}>\n <Card.Toolbar>\n <Card.DragHandle />\n <Card.Title>{data.label ?? (data.object && Entity.getLabel(data.object))}</Card.Title>\n {/* TODO(wittjosiah): Reconcile with Card.Menu. */}\n <Menu.Trigger asChild disabled={!objectMenuItems?.length}>\n <Toolbar.IconButton iconOnly variant='ghost' icon='ph--dots-three-vertical--regular' label='Actions' />\n </Menu.Trigger>\n <Menu.Content items={objectMenuItems} />\n </Card.Toolbar>\n <Surface.Surface role='card--content' data={{ subject: data.object }} limit={1} />\n </Card.Root>\n </Menu.Root>\n );\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { SearchMain } from './SearchMain';\n\nexport default SearchMain;\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["React", "useCallback", "useMemo", "useState", "Surface", "useObjectMenuItems", "Entity", "Query", "Filter", "useQuery", "Card", "Panel", "ScrollArea", "Toolbar", "useTranslation", "Menu", "Mosaic", "SearchList", "Text", "SearchMain", "space", "t", "useTranslation", "meta", "id", "setMatch", "useGlobalSearch", "query", "setQuery", "useState", "objects", "useQuery", "db", "undefined", "Query", "select", "Filter", "nothing", "all", "text", "type", "not", "Text", "referencedBy", "results", "useGlobalSearchResults", "webResults", "useWebSearch", "allResults", "useMemo", "filter", "object", "Entity", "getLabel", "handleSearch", "useCallback", "SearchList", "Root", "onSearch", "Panel", "className", "Toolbar", "asChild", "Input", "placeholder", "Content", "Mosaic", "Container", "ScrollArea", "orientation", "Viewport", "Stack", "items", "getId", "result", "Tile", "SearchResultTile", "length", "Empty", "props", "data", "objectMenuItems", "useObjectMenuItems", "Menu", "Card", "key", "DragHandle", "Title", "label", "Trigger", "disabled", "IconButton", "iconOnly", "variant", "icon", "Surface", "role", "subject", "limit", "SearchMain"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
import {
|
|
2
|
+
SearchOperation
|
|
3
|
+
} from "./chunk-I3633KKK.mjs";
|
|
4
|
+
import {
|
|
5
|
+
meta
|
|
6
|
+
} from "./chunk-PZ67KFRU.mjs";
|
|
7
|
+
|
|
8
|
+
// src/capabilities/app-graph-builder/app-graph-builder.ts
|
|
9
|
+
import * as Effect from "effect/Effect";
|
|
10
|
+
import { Capability } from "@dxos/app-framework";
|
|
11
|
+
import { AppCapabilities, COMPANION_PREFIX, getSpaceIdFromPath } from "@dxos/app-toolkit";
|
|
12
|
+
import { Operation } from "@dxos/operation";
|
|
13
|
+
import { ClientCapabilities } from "@dxos/plugin-client";
|
|
14
|
+
import { DECK_COMPANION_TYPE } from "@dxos/plugin-deck/types";
|
|
15
|
+
import { GraphBuilder, NodeMatcher } from "@dxos/plugin-graph";
|
|
16
|
+
var app_graph_builder_default = Capability.makeModule(Effect.fnUntraced(function* () {
|
|
17
|
+
const extensions = yield* Effect.all([
|
|
18
|
+
GraphBuilder.createExtension({
|
|
19
|
+
id: `${meta.id}.space-search`,
|
|
20
|
+
match: NodeMatcher.whenRoot,
|
|
21
|
+
connector: Effect.fnUntraced(function* (node, get) {
|
|
22
|
+
const client = yield* Capability.get(ClientCapabilities.Client);
|
|
23
|
+
const layoutAtom = get(yield* Capability.atom(AppCapabilities.Layout))[0];
|
|
24
|
+
const layout = layoutAtom ? get(layoutAtom) : void 0;
|
|
25
|
+
const spaceId = layout?.workspace ? getSpaceIdFromPath(layout.workspace) : void 0;
|
|
26
|
+
const space = spaceId ? client.spaces.get(spaceId) : null;
|
|
27
|
+
return [
|
|
28
|
+
{
|
|
29
|
+
id: `${COMPANION_PREFIX}search`,
|
|
30
|
+
type: DECK_COMPANION_TYPE,
|
|
31
|
+
data: space,
|
|
32
|
+
properties: {
|
|
33
|
+
label: [
|
|
34
|
+
"search label",
|
|
35
|
+
{
|
|
36
|
+
ns: meta.id
|
|
37
|
+
}
|
|
38
|
+
],
|
|
39
|
+
icon: "ph--magnifying-glass--regular",
|
|
40
|
+
disposition: "hidden"
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
];
|
|
44
|
+
})
|
|
45
|
+
}),
|
|
46
|
+
GraphBuilder.createExtension({
|
|
47
|
+
id: meta.id,
|
|
48
|
+
match: NodeMatcher.whenRoot,
|
|
49
|
+
actions: () => Effect.succeed([
|
|
50
|
+
{
|
|
51
|
+
id: SearchOperation.OpenSearch.meta.key,
|
|
52
|
+
data: Effect.fnUntraced(function* () {
|
|
53
|
+
yield* Operation.invoke(SearchOperation.OpenSearch);
|
|
54
|
+
return false;
|
|
55
|
+
}),
|
|
56
|
+
properties: {
|
|
57
|
+
label: [
|
|
58
|
+
"search action label",
|
|
59
|
+
{
|
|
60
|
+
ns: meta.id
|
|
61
|
+
}
|
|
62
|
+
],
|
|
63
|
+
icon: "ph--magnifying-glass--regular",
|
|
64
|
+
keyBinding: {
|
|
65
|
+
macos: "shift+meta+f",
|
|
66
|
+
windows: "shift+alt+f"
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
])
|
|
71
|
+
})
|
|
72
|
+
]);
|
|
73
|
+
return Capability.contributes(AppCapabilities.AppGraphBuilder, extensions);
|
|
74
|
+
}));
|
|
75
|
+
export {
|
|
76
|
+
app_graph_builder_default as default
|
|
77
|
+
};
|
|
78
|
+
//# sourceMappingURL=app-graph-builder-FHVM5QV7.mjs.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/capabilities/app-graph-builder/app-graph-builder.ts"],
|
|
4
|
+
"sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Effect from 'effect/Effect';\n\nimport { Capability } from '@dxos/app-framework';\nimport { AppCapabilities, COMPANION_PREFIX, getSpaceIdFromPath } from '@dxos/app-toolkit';\nimport { Operation } from '@dxos/operation';\nimport { ClientCapabilities } from '@dxos/plugin-client';\nimport { DECK_COMPANION_TYPE } from '@dxos/plugin-deck/types';\nimport { GraphBuilder, NodeMatcher } from '@dxos/plugin-graph';\n\nimport { meta } from '../../meta';\nimport { SearchOperation } from '../../types';\n\nexport default Capability.makeModule(\n Effect.fnUntraced(function* () {\n const extensions = yield* Effect.all([\n GraphBuilder.createExtension({\n id: `${meta.id}.space-search`,\n match: NodeMatcher.whenRoot,\n connector: Effect.fnUntraced(function* (node, get) {\n const client = yield* Capability.get(ClientCapabilities.Client);\n const layoutAtom = get(yield* Capability.atom(AppCapabilities.Layout))[0];\n const layout = layoutAtom ? get(layoutAtom) : undefined;\n const spaceId = layout?.workspace ? getSpaceIdFromPath(layout.workspace) : undefined;\n const space = spaceId ? client.spaces.get(spaceId) : null;\n\n return [\n {\n id: `${COMPANION_PREFIX}search`,\n type: DECK_COMPANION_TYPE,\n data: space,\n properties: {\n label: ['search label', { ns: meta.id }],\n icon: 'ph--magnifying-glass--regular',\n disposition: 'hidden',\n },\n },\n ];\n }),\n }),\n GraphBuilder.createExtension({\n id: meta.id,\n match: NodeMatcher.whenRoot,\n actions: () =>\n Effect.succeed([\n {\n id: SearchOperation.OpenSearch.meta.key,\n data: Effect.fnUntraced(function* () {\n yield* Operation.invoke(SearchOperation.OpenSearch);\n return false;\n }),\n properties: {\n label: ['search action label', { ns: meta.id }],\n icon: 'ph--magnifying-glass--regular',\n keyBinding: {\n macos: 'shift+meta+f',\n windows: 'shift+alt+f',\n },\n },\n },\n ]),\n }),\n ]);\n\n return Capability.contributes(AppCapabilities.AppGraphBuilder, extensions);\n }),\n);\n"],
|
|
5
|
+
"mappings": ";;;;;;;;AAIA,YAAYA,YAAY;AAExB,SAASC,kBAAkB;AAC3B,SAASC,iBAAiBC,kBAAkBC,0BAA0B;AACtE,SAASC,iBAAiB;AAC1B,SAASC,0BAA0B;AACnC,SAASC,2BAA2B;AACpC,SAASC,cAAcC,mBAAmB;AAK1C,IAAA,4BAAeC,WAAWC,WACjBC,kBAAW,aAAA;AAChB,QAAMC,aAAa,OAAcC,WAAI;IACnCC,aAAaC,gBAAgB;MAC3BC,IAAI,GAAGC,KAAKD,EAAE;MACdE,OAAOC,YAAYC;MACnBC,WAAkBV,kBAAW,WAAWW,MAAMC,KAAG;AAC/C,cAAMC,SAAS,OAAOf,WAAWc,IAAIE,mBAAmBC,MAAM;AAC9D,cAAMC,aAAaJ,IAAI,OAAOd,WAAWmB,KAAKC,gBAAgBC,MAAM,CAAA,EAAG,CAAA;AACvE,cAAMC,SAASJ,aAAaJ,IAAII,UAAAA,IAAcK;AAC9C,cAAMC,UAAUF,QAAQG,YAAYC,mBAAmBJ,OAAOG,SAAS,IAAIF;AAC3E,cAAMI,QAAQH,UAAUT,OAAOa,OAAOd,IAAIU,OAAAA,IAAW;AAErD,eAAO;UACL;YACEjB,IAAI,GAAGsB,gBAAAA;YACPC,MAAMC;YACNC,MAAML;YACNM,YAAY;cACVC,OAAO;gBAAC;gBAAgB;kBAAEC,IAAI3B,KAAKD;gBAAG;;cACtC6B,MAAM;cACNC,aAAa;YACf;UACF;;MAEJ,CAAA;IACF,CAAA;IACAhC,aAAaC,gBAAgB;MAC3BC,IAAIC,KAAKD;MACTE,OAAOC,YAAYC;MACnB2B,SAAS,MACAC,eAAQ;QACb;UACEhC,IAAIiC,gBAAgBC,WAAWjC,KAAKkC;UACpCV,MAAa9B,kBAAW,aAAA;AACtB,mBAAOyC,UAAUC,OAAOJ,gBAAgBC,UAAU;AAClD,mBAAO;UACT,CAAA;UACAR,YAAY;YACVC,OAAO;cAAC;cAAuB;gBAAEC,IAAI3B,KAAKD;cAAG;;YAC7C6B,MAAM;YACNS,YAAY;cACVC,OAAO;cACPC,SAAS;YACX;UACF;QACF;OACD;IACL,CAAA;GACD;AAED,SAAO/C,WAAWgD,YAAY5B,gBAAgB6B,iBAAiB9C,UAAAA;AACjE,CAAA,CAAA;",
|
|
6
|
+
"names": ["Effect", "Capability", "AppCapabilities", "COMPANION_PREFIX", "getSpaceIdFromPath", "Operation", "ClientCapabilities", "DECK_COMPANION_TYPE", "GraphBuilder", "NodeMatcher", "Capability", "makeModule", "fnUntraced", "extensions", "all", "GraphBuilder", "createExtension", "id", "meta", "match", "NodeMatcher", "whenRoot", "connector", "node", "get", "client", "ClientCapabilities", "Client", "layoutAtom", "atom", "AppCapabilities", "Layout", "layout", "undefined", "spaceId", "workspace", "getSpaceIdFromPath", "space", "spaces", "COMPANION_PREFIX", "type", "DECK_COMPANION_TYPE", "data", "properties", "label", "ns", "icon", "disposition", "actions", "succeed", "SearchOperation", "OpenSearch", "key", "Operation", "invoke", "keyBinding", "macos", "windows", "contributes", "AppGraphBuilder"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import {
|
|
2
|
+
meta
|
|
3
|
+
} from "./chunk-PZ67KFRU.mjs";
|
|
4
|
+
|
|
5
|
+
// src/types/action.tsx
|
|
6
|
+
import * as Schema from "effect/Schema";
|
|
7
|
+
import { Operation } from "@dxos/operation";
|
|
8
|
+
var SEARCH_OPERATION = `${meta.id}.operation`;
|
|
9
|
+
(function(SearchOperation2) {
|
|
10
|
+
SearchOperation2.OpenSearch = Operation.make({
|
|
11
|
+
meta: {
|
|
12
|
+
key: `${SEARCH_OPERATION}.open-search`,
|
|
13
|
+
name: "Open Search"
|
|
14
|
+
},
|
|
15
|
+
schema: {
|
|
16
|
+
input: Schema.Void,
|
|
17
|
+
output: Schema.Void
|
|
18
|
+
}
|
|
19
|
+
});
|
|
20
|
+
})(SearchOperation || (SearchOperation = {}));
|
|
21
|
+
var SearchOperation;
|
|
22
|
+
|
|
23
|
+
export {
|
|
24
|
+
SearchOperation
|
|
25
|
+
};
|
|
26
|
+
//# sourceMappingURL=chunk-I3633KKK.mjs.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/types/action.tsx"],
|
|
4
|
+
"sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport * as Schema from 'effect/Schema';\n\nimport { Operation } from '@dxos/operation';\n\nimport { meta } from '../meta';\n\nconst SEARCH_OPERATION = `${meta.id}.operation`;\n\nexport namespace SearchOperation {\n export const OpenSearch = Operation.make({\n meta: { key: `${SEARCH_OPERATION}.open-search`, name: 'Open Search' },\n schema: { input: Schema.Void, output: Schema.Void },\n });\n}\n"],
|
|
5
|
+
"mappings": ";;;;;AAIA,YAAYA,YAAY;AAExB,SAASC,iBAAiB;AAI1B,IAAMC,mBAAmB,GAAGC,KAAKC,EAAE;UAElBC,kBAAAA;mBACFC,aAAaC,UAAUC,KAAK;IACvCL,MAAM;MAAEM,KAAK,GAAGP,gBAAAA;MAAgCQ,MAAM;IAAc;IACpEC,QAAQ;MAAEC,OAAcC;MAAMC,QAAeD;IAAK;EACpD,CAAA;AACF,GALiBR,oBAAAA,kBAAAA,CAAAA,EAAAA;;",
|
|
6
|
+
"names": ["Schema", "Operation", "SEARCH_OPERATION", "meta", "id", "SearchOperation", "OpenSearch", "Operation", "make", "key", "name", "schema", "input", "Void", "output"]
|
|
7
|
+
}
|