@dxos/plugin-search 0.8.4-main.5ad4a44 → 0.8.4-main.66e292d

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (56) hide show
  1. package/dist/lib/browser/{app-graph-builder-YME7SN7O.mjs → app-graph-builder-BFLYNCSJ.mjs} +9 -8
  2. package/dist/lib/browser/app-graph-builder-BFLYNCSJ.mjs.map +7 -0
  3. package/dist/lib/browser/{chunk-5N6LDSFF.mjs → chunk-GN2FSWTM.mjs} +6 -2
  4. package/dist/lib/browser/chunk-GN2FSWTM.mjs.map +7 -0
  5. package/dist/lib/browser/{chunk-WN3TVQLV.mjs → chunk-MBISM5WN.mjs} +108 -7
  6. package/dist/lib/browser/chunk-MBISM5WN.mjs.map +7 -0
  7. package/dist/lib/browser/{chunk-YJGHPWUO.mjs → chunk-TCVYYI44.mjs} +2 -2
  8. package/dist/lib/browser/index.mjs +11 -9
  9. package/dist/lib/browser/index.mjs.map +2 -2
  10. package/dist/lib/browser/{intent-resolver-XNVR4XRX.mjs → intent-resolver-UYQA6UUQ.mjs} +3 -3
  11. package/dist/lib/browser/meta.json +1 -1
  12. package/dist/lib/browser/react-surface-D7STUIQS.mjs +306 -0
  13. package/dist/lib/browser/react-surface-D7STUIQS.mjs.map +7 -0
  14. package/dist/types/src/capabilities/app-graph-builder.d.ts.map +1 -1
  15. package/dist/types/src/capabilities/react-surface.d.ts.map +1 -1
  16. package/dist/types/src/components/Search.stories.d.ts +1 -4
  17. package/dist/types/src/components/Search.stories.d.ts.map +1 -1
  18. package/dist/types/src/components/SearchDialog.d.ts.map +1 -1
  19. package/dist/types/src/components/SearchMain.d.ts +4 -5
  20. package/dist/types/src/components/SearchMain.d.ts.map +1 -1
  21. package/dist/types/src/components/SearchResults/SearchResults.d.ts +9 -9
  22. package/dist/types/src/components/SearchResults/SearchResults.d.ts.map +1 -1
  23. package/dist/types/src/components/SearchResults/SearchResults.stories.d.ts +1 -1
  24. package/dist/types/src/components/SearchResults/SearchResults.stories.d.ts.map +1 -1
  25. package/dist/types/src/components/Searchbar/Searchbar.d.ts +5 -9
  26. package/dist/types/src/components/Searchbar/Searchbar.d.ts.map +1 -1
  27. package/dist/types/src/components/Searchbar/Searchbar.stories.d.ts +1 -1
  28. package/dist/types/src/hooks/index.d.ts +1 -0
  29. package/dist/types/src/hooks/index.d.ts.map +1 -1
  30. package/dist/types/src/meta.d.ts.map +1 -1
  31. package/dist/types/src/translations.d.ts +1 -1
  32. package/dist/types/tsconfig.tsbuildinfo +1 -1
  33. package/package.json +31 -30
  34. package/src/capabilities/app-graph-builder.ts +6 -5
  35. package/src/capabilities/react-surface.tsx +0 -3
  36. package/src/components/Search.stories.tsx +3 -6
  37. package/src/components/SearchDialog.tsx +18 -6
  38. package/src/components/SearchMain.tsx +15 -24
  39. package/src/components/SearchResults/SearchResults.stories.tsx +3 -2
  40. package/src/components/SearchResults/SearchResults.tsx +46 -49
  41. package/src/components/Searchbar/Searchbar.tsx +39 -44
  42. package/src/hooks/index.ts +2 -0
  43. package/src/hooks/sync.ts +3 -3
  44. package/src/hooks/useSearchResults.ts +2 -2
  45. package/src/hooks/useWebSearch.ts +2 -2
  46. package/src/meta.ts +5 -1
  47. package/src/search/exa.test.ts +9 -11
  48. package/src/search/exa.ts +2 -2
  49. package/src/translations.ts +1 -1
  50. package/dist/lib/browser/app-graph-builder-YME7SN7O.mjs.map +0 -7
  51. package/dist/lib/browser/chunk-5N6LDSFF.mjs.map +0 -7
  52. package/dist/lib/browser/chunk-WN3TVQLV.mjs.map +0 -7
  53. package/dist/lib/browser/react-surface-YOGLADC4.mjs +0 -470
  54. package/dist/lib/browser/react-surface-YOGLADC4.mjs.map +0 -7
  55. /package/dist/lib/browser/{chunk-YJGHPWUO.mjs.map → chunk-TCVYYI44.mjs.map} +0 -0
  56. /package/dist/lib/browser/{intent-resolver-XNVR4XRX.mjs.map → intent-resolver-UYQA6UUQ.mjs.map} +0 -0
@@ -0,0 +1,306 @@
1
+ import {
2
+ SearchContextProvider,
3
+ useGlobalSearch,
4
+ useGlobalSearchResults,
5
+ useSearchResults,
6
+ useWebSearch
7
+ } from "./chunk-MBISM5WN.mjs";
8
+ import {
9
+ meta
10
+ } from "./chunk-GN2FSWTM.mjs";
11
+
12
+ // src/capabilities/react-surface.tsx
13
+ import React5 from "react";
14
+ import { Capabilities, contributes, createSurface } from "@dxos/app-framework";
15
+ import { useActiveSpace } from "@dxos/plugin-space";
16
+ import { isSpace } from "@dxos/react-client/echo";
17
+
18
+ // src/components/Searchbar/Searchbar.tsx
19
+ import { useSignals as _useSignals } from "@preact-signals/safe-react/tracking";
20
+ import React, { useCallback, useEffect, useRef } from "react";
21
+ import { Input, Toolbar, useControlledState } from "@dxos/react-ui";
22
+ var Searchbar = ({ classNames, variant, placeholder, value, onChange, onSubmit }) => {
23
+ var _effect = _useSignals();
24
+ try {
25
+ const [text, setText] = useControlledState(value, onChange);
26
+ const inputRef = useRef(null);
27
+ const handleWindowKeyDown = useCallback((event) => {
28
+ if (event.key === "f" && event.metaKey && event.shiftKey) {
29
+ inputRef.current?.focus();
30
+ }
31
+ }, [
32
+ inputRef
33
+ ]);
34
+ useEffect(() => {
35
+ window.addEventListener("keydown", handleWindowKeyDown);
36
+ return () => window.removeEventListener("keydown", handleWindowKeyDown);
37
+ }, [
38
+ handleWindowKeyDown
39
+ ]);
40
+ const handleKeyDown = useCallback((event) => {
41
+ switch (event.key) {
42
+ case "Enter":
43
+ onSubmit?.(text);
44
+ break;
45
+ }
46
+ }, [
47
+ text,
48
+ onSubmit
49
+ ]);
50
+ return /* @__PURE__ */ React.createElement(Toolbar.Root, {
51
+ classNames
52
+ }, /* @__PURE__ */ React.createElement(Input.Root, null, /* @__PURE__ */ React.createElement(Input.TextInput, {
53
+ ref: inputRef,
54
+ placeholder,
55
+ autoFocus: true,
56
+ variant,
57
+ value: text ?? "",
58
+ onChange: ({ target }) => setText(target.value),
59
+ onKeyDown: handleKeyDown
60
+ })));
61
+ } finally {
62
+ _effect.f();
63
+ }
64
+ };
65
+
66
+ // src/components/SearchMain.tsx
67
+ import { useSignals as _useSignals3 } from "@preact-signals/safe-react/tracking";
68
+ import React3, { useState } from "react";
69
+ import { useClient } from "@dxos/react-client";
70
+ import { Filter, useQuery } from "@dxos/react-client/echo";
71
+ import { useTranslation } from "@dxos/react-ui";
72
+ import { StackItem } from "@dxos/react-ui-stack";
73
+ import { mx } from "@dxos/react-ui-theme";
74
+
75
+ // src/components/SearchResults/SearchResults.tsx
76
+ import { useSignals as _useSignals2 } from "@preact-signals/safe-react/tracking";
77
+ import React2, { forwardRef } from "react";
78
+ import { Surface } from "@dxos/app-framework/react";
79
+ import { Obj } from "@dxos/echo";
80
+ import { Card } from "@dxos/react-ui-stack";
81
+ import { ghostHover } from "@dxos/react-ui-theme";
82
+ var SearchResults = ({ items }) => {
83
+ var _effect = _useSignals2();
84
+ try {
85
+ return /* @__PURE__ */ React2.createElement("div", {
86
+ className: "overflow-y-auto"
87
+ }, /* @__PURE__ */ React2.createElement("div", {
88
+ className: "flex flex-col"
89
+ }, items.filter((item) => Obj.getLabel(item.object)).map((item) => /* @__PURE__ */ React2.createElement("div", {
90
+ key: item.id,
91
+ role: "none",
92
+ className: "pli-2 first:pbs-2 pbe-2"
93
+ }, /* @__PURE__ */ React2.createElement(Surface, {
94
+ role: "card",
95
+ data: {
96
+ subject: item.object
97
+ },
98
+ limit: 1
99
+ })))));
100
+ } finally {
101
+ _effect.f();
102
+ }
103
+ };
104
+
105
+ // src/components/SearchMain.tsx
106
+ var SearchMain = ({ space }) => {
107
+ var _effect = _useSignals3();
108
+ try {
109
+ const { t } = useTranslation(meta.id);
110
+ const client = useClient();
111
+ const { setMatch } = useGlobalSearch();
112
+ const [query, setQuery] = useState();
113
+ const allSpaces = false;
114
+ const objects = useQuery(allSpaces ? client.spaces : space, Filter.everything());
115
+ const results = useGlobalSearchResults(objects);
116
+ const { runSearch, results: webResults } = useWebSearch({
117
+ query
118
+ });
119
+ const [selected, setSelected] = useState();
120
+ const handleSelect = (id) => {
121
+ setSelected((selected2) => selected2 === id ? void 0 : id);
122
+ };
123
+ const allResults = [
124
+ ...results,
125
+ ...webResults
126
+ ];
127
+ return /* @__PURE__ */ React3.createElement(StackItem.Content, {
128
+ toolbar: true
129
+ }, /* @__PURE__ */ React3.createElement(Searchbar, {
130
+ classNames: "pli-2",
131
+ placeholder: t("search placeholder"),
132
+ delay: 300,
133
+ onChange: (text) => {
134
+ setQuery(text);
135
+ setMatch?.(text);
136
+ },
137
+ onSubmit: runSearch
138
+ }), allResults.length > 0 && /* @__PURE__ */ React3.createElement("div", {
139
+ className: mx("flex flex-col bs-full overflow-hidden")
140
+ }, /* @__PURE__ */ React3.createElement(SearchResults, {
141
+ items: allResults,
142
+ selected,
143
+ onSelect: handleSelect
144
+ })));
145
+ } finally {
146
+ _effect.f();
147
+ }
148
+ };
149
+
150
+ // src/components/SearchDialog.tsx
151
+ import { useSignals as _useSignals4 } from "@preact-signals/safe-react/tracking";
152
+ import * as Option from "effect/Option";
153
+ import React4, { forwardRef as forwardRef2, useCallback as useCallback2, useState as useState2 } from "react";
154
+ import { LayoutAction, createIntent } from "@dxos/app-framework";
155
+ import { useAppGraph, useIntentDispatcher, useLayout } from "@dxos/app-framework/react";
156
+ import { Obj as Obj2 } from "@dxos/echo";
157
+ import { useClient as useClient2 } from "@dxos/react-client";
158
+ import { Filter as Filter2, useQuery as useQuery2 } from "@dxos/react-client/echo";
159
+ import { Button, Dialog, Icon, toLocalizedString, useTranslation as useTranslation2 } from "@dxos/react-ui";
160
+ import { SearchList } from "@dxos/react-ui-searchlist";
161
+ import { descriptionText, mx as mx2 } from "@dxos/react-ui-theme";
162
+ var SEARCH_DIALOG = `${meta.id}/SearchDialog`;
163
+ var SearchListResult = /* @__PURE__ */ forwardRef2(({ node, onSelect }, forwardedRef) => {
164
+ var _effect = _useSignals4();
165
+ try {
166
+ const { t } = useTranslation2(meta.id);
167
+ const label = toLocalizedString(node?.properties.label ?? "never", t);
168
+ return /* @__PURE__ */ React4.createElement(SearchList.Item, {
169
+ value: label,
170
+ key: node.id,
171
+ classNames: "flex gap-2 items-center pli-2",
172
+ onSelect: () => onSelect?.(node.id),
173
+ ref: forwardedRef
174
+ }, /* @__PURE__ */ React4.createElement(Icon, {
175
+ size: 5,
176
+ icon: node?.properties.icon
177
+ }), /* @__PURE__ */ React4.createElement("span", {
178
+ className: "is-0 grow truncate"
179
+ }, label));
180
+ } finally {
181
+ _effect.f();
182
+ }
183
+ });
184
+ var SearchDialog = ({ pivotId }) => {
185
+ var _effect = _useSignals4();
186
+ try {
187
+ const { t } = useTranslation2(meta.id);
188
+ const { graph } = useAppGraph();
189
+ const layout = useLayout();
190
+ const closed = (Array.isArray(layout.inactive) ? layout.inactive : [
191
+ layout.inactive
192
+ ]).map((id) => graph?.getNode(id)).filter(Boolean);
193
+ const [queryString, setQueryString] = useState2("");
194
+ const client = useClient2();
195
+ const dangerouslyLoadAllObjects = useQuery2(client.spaces, Filter2.everything());
196
+ const [pending, results] = useSearchResults(queryString, dangerouslyLoadAllObjects);
197
+ const resultObjects = Array.from(results.keys());
198
+ const { dispatchPromise: dispatch } = useIntentDispatcher();
199
+ const handleSelect = useCallback2(async (nodeId) => {
200
+ await dispatch(createIntent(LayoutAction.UpdateDialog, {
201
+ part: "dialog",
202
+ options: {
203
+ state: false
204
+ }
205
+ }));
206
+ const index = layout.active.findIndex((id) => id === nodeId);
207
+ if (index !== -1) {
208
+ await dispatch(createIntent(LayoutAction.ScrollIntoView, {
209
+ part: "current",
210
+ subject: nodeId
211
+ }));
212
+ } else {
213
+ await dispatch(createIntent(LayoutAction.Open, {
214
+ part: "main",
215
+ subject: [
216
+ nodeId
217
+ ],
218
+ options: {
219
+ pivotId,
220
+ positioning: "end"
221
+ }
222
+ }));
223
+ }
224
+ }, [
225
+ pivotId,
226
+ dispatch,
227
+ layout
228
+ ]);
229
+ return /* @__PURE__ */ React4.createElement(Dialog.Content, {
230
+ classNames: [
231
+ "md:max-is-[24rem] overflow-hidden mbs-12"
232
+ ]
233
+ }, /* @__PURE__ */ React4.createElement(Dialog.Title, null, t("search dialog title")), /* @__PURE__ */ React4.createElement(SearchList.Root, {
234
+ label: t("search placeholder"),
235
+ classNames: "flex flex-col grow overflow-hidden my-2"
236
+ }, /* @__PURE__ */ React4.createElement(SearchList.Input, {
237
+ value: queryString,
238
+ onValueChange: (nextValue) => {
239
+ setQueryString(nextValue);
240
+ },
241
+ placeholder: t("search placeholder"),
242
+ classNames: "pli-1 my-2"
243
+ }), /* @__PURE__ */ React4.createElement(SearchList.Content, {
244
+ classNames: "max-bs-[24rem] overflow-auto"
245
+ }, queryString.length > 0 ? resultObjects.length > 0 ? resultObjects.map((object) => graph.getNode(Obj2.getDXN(object).toString())).filter(Option.isSome).map((node) => /* @__PURE__ */ React4.createElement(SearchListResult, {
246
+ key: node.value.id,
247
+ node: node.value,
248
+ onSelect: handleSelect
249
+ })) : /* @__PURE__ */ React4.createElement("p", {
250
+ className: "pli-1"
251
+ }, t(pending ? "pending results message" : "empty results message")) : /* @__PURE__ */ React4.createElement(React4.Fragment, null, closed.length > 0 && /* @__PURE__ */ React4.createElement("h2", {
252
+ className: mx2("mlb-1", descriptionText)
253
+ }, t("recently closed heading")), closed.filter(Option.isSome).map((node) => /* @__PURE__ */ React4.createElement(SearchListResult, {
254
+ key: node.value.id,
255
+ node: node.value,
256
+ onSelect: handleSelect
257
+ }))))), /* @__PURE__ */ React4.createElement(Dialog.Close, {
258
+ asChild: true
259
+ }, /* @__PURE__ */ React4.createElement(Button, {
260
+ variant: "primary",
261
+ classNames: "mbs-2"
262
+ }, t("close label", {
263
+ ns: "os"
264
+ }))));
265
+ } finally {
266
+ _effect.f();
267
+ }
268
+ };
269
+
270
+ // src/capabilities/react-surface.tsx
271
+ var react_surface_default = (() => contributes(Capabilities.ReactSurface, [
272
+ createSurface({
273
+ id: SEARCH_DIALOG,
274
+ role: "dialog",
275
+ filter: (data) => data.component === SEARCH_DIALOG,
276
+ component: ({ data }) => /* @__PURE__ */ React5.createElement(SearchContextProvider, null, /* @__PURE__ */ React5.createElement(SearchDialog, data.props))
277
+ }),
278
+ createSurface({
279
+ id: `${SEARCH_DIALOG}/search-input`,
280
+ role: "search-input",
281
+ component: () => {
282
+ const space = useActiveSpace();
283
+ return /* @__PURE__ */ React5.createElement(SearchContextProvider, null, /* @__PURE__ */ React5.createElement(SearchMain, {
284
+ space
285
+ }));
286
+ }
287
+ }),
288
+ createSurface({
289
+ id: `${SEARCH_DIALOG}/search`,
290
+ role: "deck-companion--search",
291
+ filter: (data) => isSpace(data.subject),
292
+ component: ({ data }) => {
293
+ const space = data.subject;
294
+ if (!space) {
295
+ return null;
296
+ }
297
+ return /* @__PURE__ */ React5.createElement(SearchContextProvider, null, /* @__PURE__ */ React5.createElement(SearchMain, {
298
+ space
299
+ }));
300
+ }
301
+ })
302
+ ]));
303
+ export {
304
+ react_surface_default as default
305
+ };
306
+ //# sourceMappingURL=react-surface-D7STUIQS.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/capabilities/react-surface.tsx", "../../../src/components/Searchbar/Searchbar.tsx", "../../../src/components/SearchMain.tsx", "../../../src/components/SearchResults/SearchResults.tsx", "../../../src/components/SearchDialog.tsx"],
4
+ "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport React from 'react';\n\nimport { Capabilities, contributes, createSurface } from '@dxos/app-framework';\nimport { useActiveSpace } from '@dxos/plugin-space';\nimport { type Space, isSpace } from '@dxos/react-client/echo';\n\nimport { SEARCH_DIALOG, SearchDialog, type SearchDialogProps, SearchMain } from '../components';\nimport { SearchContextProvider } from '../hooks';\n\nexport default () =>\n contributes(Capabilities.ReactSurface, [\n createSurface({\n id: SEARCH_DIALOG,\n role: 'dialog',\n filter: (data): data is { props: SearchDialogProps } => data.component === SEARCH_DIALOG,\n component: ({ data }) => (\n <SearchContextProvider>\n <SearchDialog {...data.props} />\n </SearchContextProvider>\n ),\n }),\n createSurface({\n id: `${SEARCH_DIALOG}/search-input`,\n role: 'search-input',\n component: () => {\n const space = useActiveSpace();\n\n return (\n <SearchContextProvider>\n <SearchMain space={space} />\n </SearchContextProvider>\n );\n },\n }),\n createSurface({\n id: `${SEARCH_DIALOG}/search`,\n role: 'deck-companion--search',\n filter: (data): data is { subject: Space } => isSpace(data.subject),\n component: ({ data }) => {\n const space = data.subject;\n if (!space) {\n return null;\n }\n\n return (\n <SearchContextProvider>\n <SearchMain space={space} />\n </SearchContextProvider>\n );\n },\n }),\n ]);\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport React, { useCallback, useEffect, useRef } from 'react';\n\nimport { Input, type TextInputProps, type ThemedClassName, Toolbar, useControlledState } from '@dxos/react-ui';\n\nexport type SearchbarProps = ThemedClassName<\n Pick<TextInputProps, 'variant' | 'placeholder'> & {\n delay?: number;\n value?: string;\n onChange?: (text?: string) => void;\n onSubmit?: (text?: string) => void;\n }\n>;\n\nexport const Searchbar = ({ classNames, variant, placeholder, value, onChange, onSubmit }: SearchbarProps) => {\n const [text, setText] = useControlledState(value, onChange);\n const inputRef = useRef<HTMLInputElement>(null);\n\n const handleWindowKeyDown = useCallback(\n (event: KeyboardEvent) => {\n if (event.key === 'f' && event.metaKey && event.shiftKey) {\n inputRef.current?.focus();\n }\n },\n [inputRef],\n );\n\n useEffect(() => {\n window.addEventListener('keydown', handleWindowKeyDown);\n return () => window.removeEventListener('keydown', handleWindowKeyDown);\n }, [handleWindowKeyDown]);\n\n const handleKeyDown = useCallback(\n (event: React.KeyboardEvent<HTMLInputElement>) => {\n switch (event.key) {\n case 'Enter':\n onSubmit?.(text);\n break;\n }\n },\n [text, onSubmit],\n );\n\n return (\n <Toolbar.Root classNames={classNames}>\n <Input.Root>\n <Input.TextInput\n ref={inputRef}\n placeholder={placeholder}\n autoFocus\n variant={variant}\n value={text ?? ''}\n onChange={({ target }) => setText(target.value)}\n onKeyDown={handleKeyDown}\n />\n </Input.Root>\n </Toolbar.Root>\n );\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport React, { useState } from 'react';\n\nimport { useClient } from '@dxos/react-client';\nimport { Filter, type Space, useQuery } from '@dxos/react-client/echo';\nimport { useTranslation } from '@dxos/react-ui';\nimport { StackItem } from '@dxos/react-ui-stack';\nimport { mx } from '@dxos/react-ui-theme';\n\nimport { useGlobalSearch, useGlobalSearchResults, useWebSearch } from '../hooks';\nimport { meta } from '../meta';\n\nimport { Searchbar } from './Searchbar';\nimport { SearchResults } from './SearchResults';\n\nexport const SearchMain = ({ space }: { space?: Space }) => {\n const { t } = useTranslation(meta.id);\n const client = useClient();\n const { setMatch } = useGlobalSearch();\n const [query, setQuery] = useState<string>();\n // TODO(burdon): Option to search across spaces.\n const allSpaces = false;\n const objects = useQuery(allSpaces ? client.spaces : space, Filter.everything());\n const results = useGlobalSearchResults(objects);\n\n const { runSearch, results: webResults } = useWebSearch({ query });\n\n // TODO(burdon): Activate and/or filter current main (set context).\n const [selected, setSelected] = useState<string>();\n const handleSelect = (id: string) => {\n setSelected((selected) => (selected === id ? undefined : id));\n };\n\n const allResults = [...results, ...webResults];\n\n return (\n <StackItem.Content toolbar>\n <Searchbar\n classNames='pli-2'\n placeholder={t('search placeholder')}\n delay={300}\n onChange={(text) => {\n setQuery(text);\n setMatch?.(text);\n }}\n onSubmit={runSearch}\n />\n\n {allResults.length > 0 && (\n <div className={mx('flex flex-col bs-full overflow-hidden')}>\n <SearchResults items={allResults} selected={selected} onSelect={handleSelect} />\n </div>\n )}\n </StackItem.Content>\n );\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport React, { type FC, forwardRef } from 'react';\n\nimport { Surface } from '@dxos/app-framework/react';\nimport { Obj } from '@dxos/echo';\nimport { Card } from '@dxos/react-ui-stack';\nimport { ghostHover } from '@dxos/react-ui-theme';\n\nimport { type SearchResult } from '../../types';\n\nexport type SearchResultsProps = {\n items: SearchResult[];\n match?: RegExp;\n selected?: string;\n onSelect?: (id: string) => void;\n};\n\n// TODO(burdon): Key cursor up/down.\n// TODO(burdon): Use stack (should be virtualized).\nexport const SearchResults = ({ items }: SearchResultsProps) => {\n return (\n <div className='overflow-y-auto'>\n <div className='flex flex-col'>\n {items\n // TODO(burdon): Hack to reduce noise from system objects.\n .filter((item) => Obj.getLabel(item.object))\n .map((item) => (\n <div key={item.id} role='none' className='pli-2 first:pbs-2 pbe-2'>\n <Surface role='card' data={{ subject: item.object }} limit={1} />\n </div>\n ))}\n </div>\n </div>\n );\n};\n\nexport type SearchItemProps = SearchResult & { selected: boolean } & Pick<SearchResultsProps, 'onSelect'>;\n\nexport const SearchItem = forwardRef<HTMLDivElement, SearchItemProps>((item, forwardRef) => {\n const { id, objectType, label, snippet, match, selected, onSelect } = item;\n\n return (\n <Card.StaticRoot\n ref={forwardRef}\n classNames={['mx-2 mt-2 cursor-pointer', selected && '!bg-activeSurface', ghostHover]}\n onClick={() => onSelect?.(id)}\n >\n {objectType && <div className='text-xs text-neutral-400 ml-4'>{objectType}</div>}\n <Card.Heading>{label ?? 'Untitled'}</Card.Heading>\n {snippet && <Snippet text={snippet} match={match} />}\n </Card.StaticRoot>\n );\n});\n\nexport const Snippet: FC<{ text: string; match?: RegExp }> = ({ text, match }) => {\n let content = <>{text}</>;\n if (match) {\n const result = text.match(match);\n if (result?.index !== undefined) {\n // Break near to match.\n const maxOffset = 16;\n let before = text.slice(0, result.index);\n if (before.length > maxOffset) {\n const idx = before.indexOf(' ', result.index - maxOffset);\n before = '… ' + before.slice(idx);\n }\n\n const after = text.slice(result.index + result[0].length);\n content = (\n <>\n {before}\n <span className='text-blue-500'>{result[0]}</span>\n {after}\n </>\n );\n }\n }\n\n return <span className='text-xs mb-1 line-clamp-3 text-neutral-300'>{content}</span>;\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport * as Option from 'effect/Option';\nimport React, { forwardRef, useCallback, useState } from 'react';\n\nimport { LayoutAction, createIntent } from '@dxos/app-framework';\nimport { useAppGraph, useIntentDispatcher, useLayout } from '@dxos/app-framework/react';\nimport { Obj } from '@dxos/echo';\nimport { type Node } from '@dxos/plugin-graph';\nimport { useClient } from '@dxos/react-client';\nimport { Filter, useQuery } from '@dxos/react-client/echo';\nimport { Button, Dialog, Icon, toLocalizedString, useTranslation } from '@dxos/react-ui';\nimport { SearchList, type SearchListItemProps } from '@dxos/react-ui-searchlist';\nimport { descriptionText, mx } from '@dxos/react-ui-theme';\n\nimport { useSearchResults } from '../hooks';\nimport { meta } from '../meta';\n\nexport const SEARCH_DIALOG = `${meta.id}/SearchDialog`;\n\ntype SearchListResultProps = {\n node: Node;\n} & Pick<SearchListItemProps, 'onSelect'>;\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 return (\n <SearchList.Item\n value={label}\n key={node!.id}\n classNames='flex gap-2 items-center pli-2'\n onSelect={() => onSelect?.(node!.id)}\n ref={forwardedRef}\n >\n <Icon size={5} icon={node?.properties.icon} />\n <span className='is-0 grow truncate'>{label}</span>\n </SearchList.Item>\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?.getNode(id))\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 { dispatchPromise: dispatch } = useIntentDispatcher();\n\n const handleSelect = useCallback(\n async (nodeId: string) => {\n await dispatch(\n createIntent(LayoutAction.UpdateDialog, {\n part: 'dialog',\n options: { state: false },\n }),\n );\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 dispatch(\n createIntent(LayoutAction.ScrollIntoView, {\n part: 'current',\n subject: nodeId,\n }),\n );\n } else {\n await dispatch(\n createIntent(LayoutAction.Open, {\n part: 'main',\n subject: [nodeId],\n options: {\n pivotId,\n positioning: 'end',\n },\n }),\n );\n }\n },\n [pivotId, dispatch, layout],\n );\n\n return (\n <Dialog.Content classNames={['md:max-is-[24rem] overflow-hidden mbs-12']}>\n <Dialog.Title>{t('search dialog title')}</Dialog.Title>\n <SearchList.Root label={t('search placeholder')} classNames='flex flex-col grow overflow-hidden my-2'>\n <SearchList.Input\n value={queryString}\n onValueChange={(nextValue) => {\n setQueryString(nextValue);\n }}\n placeholder={t('search placeholder')}\n classNames='pli-1 my-2'\n />\n <SearchList.Content classNames='max-bs-[24rem] overflow-auto'>\n {queryString.length > 0 ? (\n resultObjects.length > 0 ? (\n resultObjects\n .map((object) => graph.getNode(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='pli-1'>{t(pending ? 'pending results message' : 'empty results message')}</p>\n )\n ) : (\n <>\n {closed.length > 0 && <h2 className={mx('mlb-1', descriptionText)}>{t('recently closed heading')}</h2>}\n {closed.filter(Option.isSome).map((node) => (\n <SearchListResult key={node.value.id} node={node.value} onSelect={handleSelect} />\n ))}\n </>\n )}\n </SearchList.Content>\n </SearchList.Root>\n\n <Dialog.Close asChild>\n <Button variant='primary' classNames='mbs-2'>\n {t('close label', { ns: 'os' })}\n </Button>\n </Dialog.Close>\n </Dialog.Content>\n );\n};\n"],
5
+ "mappings": ";;;;;;;;;;;;AAIA,OAAOA,YAAW;AAElB,SAASC,cAAcC,aAAaC,qBAAqB;AACzD,SAASC,sBAAsB;AAC/B,SAAqBC,eAAe;;;;ACJpC,OAAOC,SAASC,aAAaC,WAAWC,cAAc;AAEtD,SAASC,OAAkDC,SAASC,0BAA0B;AAWvF,IAAMC,YAAY,CAAC,EAAEC,YAAYC,SAASC,aAAaC,OAAOC,UAAUC,SAAQ,MAAkB;;;AACvG,UAAM,CAACC,MAAMC,OAAAA,IAAWC,mBAAmBL,OAAOC,QAAAA;AAClD,UAAMK,WAAWC,OAAyB,IAAA;AAE1C,UAAMC,sBAAsBC,YAC1B,CAACC,UAAAA;AACC,UAAIA,MAAMC,QAAQ,OAAOD,MAAME,WAAWF,MAAMG,UAAU;AACxDP,iBAASQ,SAASC,MAAAA;MACpB;IACF,GACA;MAACT;KAAS;AAGZU,cAAU,MAAA;AACRC,aAAOC,iBAAiB,WAAWV,mBAAAA;AACnC,aAAO,MAAMS,OAAOE,oBAAoB,WAAWX,mBAAAA;IACrD,GAAG;MAACA;KAAoB;AAExB,UAAMY,gBAAgBX,YACpB,CAACC,UAAAA;AACC,cAAQA,MAAMC,KAAG;QACf,KAAK;AACHT,qBAAWC,IAAAA;AACX;MACJ;IACF,GACA;MAACA;MAAMD;KAAS;AAGlB,WACE,sBAAA,cAACmB,QAAQC,MAAI;MAACzB;OACZ,sBAAA,cAAC0B,MAAMD,MAAI,MACT,sBAAA,cAACC,MAAMC,WAAS;MACdC,KAAKnB;MACLP;MACA2B,WAAAA;MACA5B;MACAE,OAAOG,QAAQ;MACfF,UAAU,CAAC,EAAE0B,OAAM,MAAOvB,QAAQuB,OAAO3B,KAAK;MAC9C4B,WAAWR;;;;;AAKrB;;;;ACzDA,OAAOS,UAASC,gBAAgB;AAEhC,SAASC,iBAAiB;AAC1B,SAASC,QAAoBC,gBAAgB;AAC7C,SAASC,sBAAsB;AAC/B,SAASC,iBAAiB;AAC1B,SAASC,UAAU;;;;ACNnB,OAAOC,UAAkBC,kBAAkB;AAE3C,SAASC,eAAe;AACxB,SAASC,WAAW;AACpB,SAASC,YAAY;AACrB,SAASC,kBAAkB;AAapB,IAAMC,gBAAgB,CAAC,EAAEC,MAAK,MAAsB;;;AACzD,WACE,gBAAAC,OAAA,cAACC,OAAAA;MAAIC,WAAU;OACb,gBAAAF,OAAA,cAACC,OAAAA;MAAIC,WAAU;OACZH,MAEEI,OAAO,CAACC,SAASC,IAAIC,SAASF,KAAKG,MAAM,CAAA,EACzCC,IAAI,CAACJ,SACJ,gBAAAJ,OAAA,cAACC,OAAAA;MAAIQ,KAAKL,KAAKM;MAAIC,MAAK;MAAOT,WAAU;OACvC,gBAAAF,OAAA,cAACY,SAAAA;MAAQD,MAAK;MAAOE,MAAM;QAAEC,SAASV,KAAKG;MAAO;MAAGQ,OAAO;;;;;AAM1E;;;ADnBO,IAAMC,aAAa,CAAC,EAAEC,MAAK,MAAqB;;;AACrD,UAAM,EAAEC,EAAC,IAAKC,eAAeC,KAAKC,EAAE;AACpC,UAAMC,SAASC,UAAAA;AACf,UAAM,EAAEC,SAAQ,IAAKC,gBAAAA;AACrB,UAAM,CAACC,OAAOC,QAAAA,IAAYC,SAAAA;AAE1B,UAAMC,YAAY;AAClB,UAAMC,UAAUC,SAASF,YAAYP,OAAOU,SAASf,OAAOgB,OAAOC,WAAU,CAAA;AAC7E,UAAMC,UAAUC,uBAAuBN,OAAAA;AAEvC,UAAM,EAAEO,WAAWF,SAASG,WAAU,IAAKC,aAAa;MAAEb;IAAM,CAAA;AAGhE,UAAM,CAACc,UAAUC,WAAAA,IAAeb,SAAAA;AAChC,UAAMc,eAAe,CAACrB,OAAAA;AACpBoB,kBAAY,CAACD,cAAcA,cAAanB,KAAKsB,SAAYtB,EAAAA;IAC3D;AAEA,UAAMuB,aAAa;SAAIT;SAAYG;;AAEnC,WACE,gBAAAO,OAAA,cAACC,UAAUC,SAAO;MAACC,SAAAA;OACjB,gBAAAH,OAAA,cAACI,WAAAA;MACCC,YAAW;MACXC,aAAajC,EAAE,oBAAA;MACfkC,OAAO;MACPC,UAAU,CAACC,SAAAA;AACT3B,iBAAS2B,IAAAA;AACT9B,mBAAW8B,IAAAA;MACb;MACAC,UAAUlB;QAGXO,WAAWY,SAAS,KACnB,gBAAAX,OAAA,cAACY,OAAAA;MAAIC,WAAWC,GAAG,uCAAA;OACjB,gBAAAd,OAAA,cAACe,eAAAA;MAAcC,OAAOjB;MAAYJ;MAAoBsB,UAAUpB;;;;;AAK1E;;;;AEtDA,YAAYqB,YAAY;AACxB,OAAOC,UAASC,cAAAA,aAAYC,eAAAA,cAAaC,YAAAA,iBAAgB;AAEzD,SAASC,cAAcC,oBAAoB;AAC3C,SAASC,aAAaC,qBAAqBC,iBAAiB;AAC5D,SAASC,OAAAA,YAAW;AAEpB,SAASC,aAAAA,kBAAiB;AAC1B,SAASC,UAAAA,SAAQC,YAAAA,iBAAgB;AACjC,SAASC,QAAQC,QAAQC,MAAMC,mBAAmBC,kBAAAA,uBAAsB;AACxE,SAASC,kBAA4C;AACrD,SAASC,iBAAiBC,MAAAA,WAAU;AAK7B,IAAMC,gBAAgB,GAAGC,KAAKC,EAAE;AAMvC,IAAMC,mBAAmBC,gBAAAA,YAAkD,CAAC,EAAEC,MAAMC,SAAQ,GAAIC,iBAAAA;;;AAC9F,UAAM,EAAEC,EAAC,IAAKC,gBAAeR,KAAKC,EAAE;AACpC,UAAMQ,QAAQC,kBAAkBN,MAAMO,WAAWF,SAAS,SAASF,CAAAA;AACnE,WACE,gBAAAK,OAAA,cAACC,WAAWC,MAAI;MACdC,OAAON;MACPO,KAAKZ,KAAMH;MACXgB,YAAW;MACXZ,UAAU,MAAMA,WAAWD,KAAMH,EAAE;MACnCiB,KAAKZ;OAEL,gBAAAM,OAAA,cAACO,MAAAA;MAAKC,MAAM;MAAGC,MAAMjB,MAAMO,WAAWU;QACtC,gBAAAT,OAAA,cAACU,QAAAA;MAAKC,WAAU;OAAsBd,KAAAA,CAAAA;;;;AAG5C,CAAA;AAMO,IAAMe,eAAe,CAAC,EAAEC,QAAO,MAAqB;;;AACzD,UAAM,EAAElB,EAAC,IAAKC,gBAAeR,KAAKC,EAAE;AACpC,UAAM,EAAEyB,MAAK,IAAKC,YAAAA;AAClB,UAAMC,SAASC,UAAAA;AACf,UAAMC,UAAUC,MAAMC,QAAQJ,OAAOK,QAAQ,IAAIL,OAAOK,WAAW;MAACL,OAAOK;OACxEC,IAAI,CAACjC,OAAOyB,OAAOS,QAAQlC,EAAAA,CAAAA,EAC3BmC,OAAOC,OAAAA;AACV,UAAM,CAACC,aAAaC,cAAAA,IAAkBC,UAAS,EAAA;AAC/C,UAAMC,SAASC,WAAAA;AACf,UAAMC,4BAA4BC,UAASH,OAAOI,QAAQC,QAAOC,WAAU,CAAA;AAC3E,UAAM,CAACC,SAASC,OAAAA,IAAWC,iBAAiBZ,aAAaK,yBAAAA;AACzD,UAAMQ,gBAAgBpB,MAAMqB,KAAKH,QAAQI,KAAI,CAAA;AAC7C,UAAM,EAAEC,iBAAiBC,SAAQ,IAAKC,oBAAAA;AAEtC,UAAMC,eAAeC,aACnB,OAAOC,WAAAA;AACL,YAAMJ,SACJK,aAAaC,aAAaC,cAAc;QACtCC,MAAM;QACNC,SAAS;UAAEC,OAAO;QAAM;MAC1B,CAAA,CAAA;AAIF,YAAMC,QAAQtC,OAAOuC,OAAOC,UAAU,CAACnE,OAAOA,OAAO0D,MAAAA;AACrD,UAAIO,UAAU,IAAI;AAChB,cAAMX,SACJK,aAAaC,aAAaQ,gBAAgB;UACxCN,MAAM;UACNO,SAASX;QACX,CAAA,CAAA;MAEJ,OAAO;AACL,cAAMJ,SACJK,aAAaC,aAAaU,MAAM;UAC9BR,MAAM;UACNO,SAAS;YAACX;;UACVK,SAAS;YACPvC;YACA+C,aAAa;UACf;QACF,CAAA,CAAA;MAEJ;IACF,GACA;MAAC/C;MAAS8B;MAAU3B;KAAO;AAG7B,WACE,gBAAAhB,OAAA,cAAC6D,OAAOC,SAAO;MAACzD,YAAY;QAAC;;OAC3B,gBAAAL,OAAA,cAAC6D,OAAOE,OAAK,MAAEpE,EAAE,qBAAA,CAAA,GACjB,gBAAAK,OAAA,cAACC,WAAW+D,MAAI;MAACnE,OAAOF,EAAE,oBAAA;MAAuBU,YAAW;OAC1D,gBAAAL,OAAA,cAACC,WAAWgE,OAAK;MACf9D,OAAOuB;MACPwC,eAAe,CAACC,cAAAA;AACdxC,uBAAewC,SAAAA;MACjB;MACAC,aAAazE,EAAE,oBAAA;MACfU,YAAW;QAEb,gBAAAL,OAAA,cAACC,WAAW6D,SAAO;MAACzD,YAAW;OAC5BqB,YAAY2C,SAAS,IACpB9B,cAAc8B,SAAS,IACrB9B,cACGjB,IAAI,CAACgD,WAAWxD,MAAMS,QAAQgD,KAAIC,OAAOF,MAAAA,EAAQG,SAAQ,CAAA,CAAA,EACzDjD,OAAckD,aAAM,EACpBpD,IAAI,CAAC9B,SAAS,gBAAAQ,OAAA,cAACV,kBAAAA;MAAiBc,KAAKZ,KAAKW,MAAMd;MAAIG,MAAMA,KAAKW;MAAOV,UAAUoD;UAEnF,gBAAA7C,OAAA,cAAC2E,KAAAA;MAAEhE,WAAU;OAAShB,EAAEyC,UAAU,4BAA4B,uBAAA,CAAA,IAGhE,gBAAApC,OAAA,cAAAA,OAAA,UAAA,MACGkB,OAAOmD,SAAS,KAAK,gBAAArE,OAAA,cAAC4E,MAAAA;MAAGjE,WAAWkE,IAAG,SAASC,eAAAA;OAAmBnF,EAAE,yBAAA,CAAA,GACrEuB,OAAOM,OAAckD,aAAM,EAAEpD,IAAI,CAAC9B,SACjC,gBAAAQ,OAAA,cAACV,kBAAAA;MAAiBc,KAAKZ,KAAKW,MAAMd;MAAIG,MAAMA,KAAKW;MAAOV,UAAUoD;YAO5E,gBAAA7C,OAAA,cAAC6D,OAAOkB,OAAK;MAACC,SAAAA;OACZ,gBAAAhF,OAAA,cAACiF,QAAAA;MAAOC,SAAQ;MAAU7E,YAAW;OAClCV,EAAE,eAAe;MAAEwF,IAAI;IAAK,CAAA,CAAA,CAAA,CAAA;;;;AAKvC;;;AJ1HA,IAAA,yBAAe,MACbC,YAAYC,aAAaC,cAAc;EACrCC,cAAc;IACZC,IAAIC;IACJC,MAAM;IACNC,QAAQ,CAACC,SAA+CA,KAAKC,cAAcJ;IAC3EI,WAAW,CAAC,EAAED,KAAI,MAChB,gBAAAE,OAAA,cAACC,uBAAAA,MACC,gBAAAD,OAAA,cAACE,cAAiBJ,KAAKK,KAAK,CAAA;EAGlC,CAAA;EACAV,cAAc;IACZC,IAAI,GAAGC,aAAAA;IACPC,MAAM;IACNG,WAAW,MAAA;AACT,YAAMK,QAAQC,eAAAA;AAEd,aACE,gBAAAL,OAAA,cAACC,uBAAAA,MACC,gBAAAD,OAAA,cAACM,YAAAA;QAAWF;;IAGlB;EACF,CAAA;EACAX,cAAc;IACZC,IAAI,GAAGC,aAAAA;IACPC,MAAM;IACNC,QAAQ,CAACC,SAAqCS,QAAQT,KAAKU,OAAO;IAClET,WAAW,CAAC,EAAED,KAAI,MAAE;AAClB,YAAMM,QAAQN,KAAKU;AACnB,UAAI,CAACJ,OAAO;AACV,eAAO;MACT;AAEA,aACE,gBAAAJ,OAAA,cAACC,uBAAAA,MACC,gBAAAD,OAAA,cAACM,YAAAA;QAAWF;;IAGlB;EACF,CAAA;CACD;",
6
+ "names": ["React", "Capabilities", "contributes", "createSurface", "useActiveSpace", "isSpace", "React", "useCallback", "useEffect", "useRef", "Input", "Toolbar", "useControlledState", "Searchbar", "classNames", "variant", "placeholder", "value", "onChange", "onSubmit", "text", "setText", "useControlledState", "inputRef", "useRef", "handleWindowKeyDown", "useCallback", "event", "key", "metaKey", "shiftKey", "current", "focus", "useEffect", "window", "addEventListener", "removeEventListener", "handleKeyDown", "Toolbar", "Root", "Input", "TextInput", "ref", "autoFocus", "target", "onKeyDown", "React", "useState", "useClient", "Filter", "useQuery", "useTranslation", "StackItem", "mx", "React", "forwardRef", "Surface", "Obj", "Card", "ghostHover", "SearchResults", "items", "React", "div", "className", "filter", "item", "Obj", "getLabel", "object", "map", "key", "id", "role", "Surface", "data", "subject", "limit", "SearchMain", "space", "t", "useTranslation", "meta", "id", "client", "useClient", "setMatch", "useGlobalSearch", "query", "setQuery", "useState", "allSpaces", "objects", "useQuery", "spaces", "Filter", "everything", "results", "useGlobalSearchResults", "runSearch", "webResults", "useWebSearch", "selected", "setSelected", "handleSelect", "undefined", "allResults", "React", "StackItem", "Content", "toolbar", "Searchbar", "classNames", "placeholder", "delay", "onChange", "text", "onSubmit", "length", "div", "className", "mx", "SearchResults", "items", "onSelect", "Option", "React", "forwardRef", "useCallback", "useState", "LayoutAction", "createIntent", "useAppGraph", "useIntentDispatcher", "useLayout", "Obj", "useClient", "Filter", "useQuery", "Button", "Dialog", "Icon", "toLocalizedString", "useTranslation", "SearchList", "descriptionText", "mx", "SEARCH_DIALOG", "meta", "id", "SearchListResult", "forwardRef", "node", "onSelect", "forwardedRef", "t", "useTranslation", "label", "toLocalizedString", "properties", "React", "SearchList", "Item", "value", "key", "classNames", "ref", "Icon", "size", "icon", "span", "className", "SearchDialog", "pivotId", "graph", "useAppGraph", "layout", "useLayout", "closed", "Array", "isArray", "inactive", "map", "getNode", "filter", "Boolean", "queryString", "setQueryString", "useState", "client", "useClient", "dangerouslyLoadAllObjects", "useQuery", "spaces", "Filter", "everything", "pending", "results", "useSearchResults", "resultObjects", "from", "keys", "dispatchPromise", "dispatch", "useIntentDispatcher", "handleSelect", "useCallback", "nodeId", "createIntent", "LayoutAction", "UpdateDialog", "part", "options", "state", "index", "active", "findIndex", "ScrollIntoView", "subject", "Open", "positioning", "Dialog", "Content", "Title", "Root", "Input", "onValueChange", "nextValue", "placeholder", "length", "object", "Obj", "getDXN", "toString", "isSome", "p", "h2", "mx", "descriptionText", "Close", "asChild", "Button", "variant", "ns", "contributes", "Capabilities", "ReactSurface", "createSurface", "id", "SEARCH_DIALOG", "role", "filter", "data", "component", "React", "SearchContextProvider", "SearchDialog", "props", "space", "useActiveSpace", "SearchMain", "isSpace", "subject"]
7
+ }
@@ -1 +1 @@
1
- {"version":3,"file":"app-graph-builder.d.ts","sourceRoot":"","sources":["../../../../src/capabilities/app-graph-builder.ts"],"names":[],"mappings":"AAQA,OAAO,EAAgB,KAAK,aAAa,EAA6B,MAAM,qBAAqB,CAAC;yBASlF,SAAS,aAAa;AAAtC,wBA8DK"}
1
+ {"version":3,"file":"app-graph-builder.d.ts","sourceRoot":"","sources":["../../../../src/capabilities/app-graph-builder.ts"],"names":[],"mappings":"AAQA,OAAO,EAAgB,KAAK,aAAa,EAA6B,MAAM,qBAAqB,CAAC;yBASlF,SAAS,aAAa;AAAtC,wBA+DK"}
@@ -1 +1 @@
1
- {"version":3,"file":"react-surface.d.ts","sourceRoot":"","sources":["../../../../src/capabilities/react-surface.tsx"],"names":[],"mappings":"AAMA,OAAO,EAAE,YAAY,EAA8B,MAAM,qBAAqB,CAAC;;AAO/E,wBA6CK"}
1
+ {"version":3,"file":"react-surface.d.ts","sourceRoot":"","sources":["../../../../src/capabilities/react-surface.tsx"],"names":[],"mappings":"AAMA,OAAO,EAAE,YAAY,EAA8B,MAAM,qBAAqB,CAAC;;AAO/E,wBA0CK"}
@@ -7,12 +7,9 @@ type StoryProps = SearchbarProps & {
7
7
  export declare const Default: Story;
8
8
  declare const meta: {
9
9
  title: string;
10
- component: ({ classes, variant, placeholder, value, onChange, onSubmit }: SearchbarProps) => React.JSX.Element;
10
+ component: ({ classNames, variant, placeholder, value, onChange, onSubmit }: SearchbarProps) => React.JSX.Element;
11
11
  render: ({ objects, ...props }: StoryProps) => React.JSX.Element;
12
12
  decorators: Decorator[];
13
- parameters: {
14
- layout: string;
15
- };
16
13
  };
17
14
  export default meta;
18
15
  type Story = StoryObj<typeof meta>;
@@ -1 +1 @@
1
- {"version":3,"file":"Search.stories.d.ts","sourceRoot":"","sources":["../../../../src/components/Search.stories.tsx"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,SAAS,EAAa,KAAK,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACjF,OAAO,KAAmB,MAAM,OAAO,CAAC;AAOxC,OAAO,EAAa,KAAK,cAAc,EAAE,MAAM,aAAa,CAAC;AAK7D,KAAK,UAAU,GAAG,cAAc,GAAG;IACjC,OAAO,CAAC,EAAE,GAAG,EAAE,CAAC;CACjB,CAAC;AAyBF,eAAO,MAAM,OAAO,EAAE,KAQrB,CAAC;AAEF,QAAA,MAAM,IAAI;;;oCAjCmC,UAAU;;;;;CAyCrB,CAAC;AAEnC,eAAe,IAAI,CAAC;AAEpB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,IAAI,CAAC,CAAC"}
1
+ {"version":3,"file":"Search.stories.d.ts","sourceRoot":"","sources":["../../../../src/components/Search.stories.tsx"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,SAAS,EAAa,KAAK,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACjF,OAAO,KAAmB,MAAM,OAAO,CAAC;AAOxC,OAAO,EAAa,KAAK,cAAc,EAAE,MAAM,aAAa,CAAC;AAK7D,KAAK,UAAU,GAAG,cAAc,GAAG;IACjC,OAAO,CAAC,EAAE,GAAG,EAAE,CAAC;CACjB,CAAC;AAyBF,eAAO,MAAM,OAAO,EAAE,KAQrB,CAAC;AAEF,QAAA,MAAM,IAAI;;;oCAjCmC,UAAU;;CAsCrB,CAAC;AAEnC,eAAe,IAAI,CAAC;AAEpB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,IAAI,CAAC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"SearchDialog.d.ts","sourceRoot":"","sources":["../../../../src/components/SearchDialog.tsx"],"names":[],"mappings":"AAKA,OAAO,KAA4C,MAAM,OAAO,CAAC;AAajE,eAAO,MAAM,aAAa,QAA4B,CAAC;AAuBvD,MAAM,MAAM,iBAAiB,GAAG;IAC9B,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,eAAO,MAAM,YAAY,GAAI,aAAa,iBAAiB,sBA8E1D,CAAC"}
1
+ {"version":3,"file":"SearchDialog.d.ts","sourceRoot":"","sources":["../../../../src/components/SearchDialog.tsx"],"names":[],"mappings":"AAKA,OAAO,KAA4C,MAAM,OAAO,CAAC;AAejE,eAAO,MAAM,aAAa,QAA4B,CAAC;AAuBvD,MAAM,MAAM,iBAAiB,GAAG;IAC9B,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,eAAO,MAAM,YAAY,GAAI,aAAa,iBAAiB,sBAwF1D,CAAC"}
@@ -1,7 +1,6 @@
1
- import { type FC } from 'react';
1
+ import React from 'react';
2
2
  import { type Space } from '@dxos/react-client/echo';
3
- import { type ThemedClassName } from '@dxos/react-ui';
4
- export declare const SearchMain: FC<ThemedClassName<{
5
- space: Space;
6
- }>>;
3
+ export declare const SearchMain: ({ space }: {
4
+ space?: Space;
5
+ }) => React.JSX.Element;
7
6
  //# sourceMappingURL=SearchMain.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"SearchMain.d.ts","sourceRoot":"","sources":["../../../../src/components/SearchMain.tsx"],"names":[],"mappings":"AAIA,OAAc,EAAE,KAAK,EAAE,EAAY,MAAM,OAAO,CAAC;AAIjD,OAAO,EAAU,KAAK,KAAK,EAAY,MAAM,yBAAyB,CAAC;AACvE,OAAO,EAAE,KAAK,eAAe,EAAkB,MAAM,gBAAgB,CAAC;AAUtE,eAAO,MAAM,UAAU,EAAE,EAAE,CAAC,eAAe,CAAC;IAAE,KAAK,EAAE,KAAK,CAAA;CAAE,CAAC,CAgD5D,CAAC"}
1
+ {"version":3,"file":"SearchMain.d.ts","sourceRoot":"","sources":["../../../../src/components/SearchMain.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAmB,MAAM,OAAO,CAAC;AAGxC,OAAO,EAAU,KAAK,KAAK,EAAY,MAAM,yBAAyB,CAAC;AAWvE,eAAO,MAAM,UAAU,GAAI,WAAW;IAAE,KAAK,CAAC,EAAE,KAAK,CAAA;CAAE,sBAwCtD,CAAC"}
@@ -1,20 +1,20 @@
1
1
  import React, { type FC } from 'react';
2
2
  import { type SearchResult } from '../../types';
3
- export declare const Snippet: FC<{
4
- text: string;
3
+ export type SearchResultsProps = {
4
+ items: SearchResult[];
5
5
  match?: RegExp;
6
- }>;
6
+ selected?: string;
7
+ onSelect?: (id: string) => void;
8
+ };
9
+ export declare const SearchResults: ({ items }: SearchResultsProps) => React.JSX.Element;
7
10
  export type SearchItemProps = SearchResult & {
8
11
  selected: boolean;
9
12
  } & Pick<SearchResultsProps, 'onSelect'>;
10
13
  export declare const SearchItem: React.ForwardRefExoticComponent<SearchResult & {
11
14
  selected: boolean;
12
15
  } & Pick<SearchResultsProps, "onSelect"> & React.RefAttributes<HTMLDivElement>>;
13
- export type SearchResultsProps = {
16
+ export declare const Snippet: FC<{
17
+ text: string;
14
18
  match?: RegExp;
15
- items: SearchResult[];
16
- selected?: string;
17
- onSelect?: (id: string) => void;
18
- };
19
- export declare const SearchResults: ({ items, selected, onSelect }: SearchResultsProps) => React.JSX.Element;
19
+ }>;
20
20
  //# sourceMappingURL=SearchResults.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"SearchResults.d.ts","sourceRoot":"","sources":["../../../../../src/components/SearchResults/SearchResults.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,EAAE,KAAK,EAAE,EAAc,MAAM,OAAO,CAAC;AAMnD,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,aAAa,CAAC;AAEhD,eAAO,MAAM,OAAO,EAAE,EAAE,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAyBxD,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG,YAAY,GAAG;IAAE,QAAQ,EAAE,OAAO,CAAA;CAAE,GAAG,IAAI,CAAC,kBAAkB,EAAE,UAAU,CAAC,CAAC;AAE1G,eAAO,MAAM,UAAU;cAFkC,OAAO;+EAoB9D,CAAC;AAEH,MAAM,MAAM,kBAAkB,GAAG;IAC/B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,YAAY,EAAE,CAAC;IACtB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;CACjC,CAAC;AAGF,eAAO,MAAM,aAAa,GAAI,+BAA+B,kBAAkB,sBAgB9E,CAAC"}
1
+ {"version":3,"file":"SearchResults.d.ts","sourceRoot":"","sources":["../../../../../src/components/SearchResults/SearchResults.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,EAAE,KAAK,EAAE,EAAc,MAAM,OAAO,CAAC;AAOnD,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,aAAa,CAAC;AAEhD,MAAM,MAAM,kBAAkB,GAAG;IAC/B,KAAK,EAAE,YAAY,EAAE,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;CACjC,CAAC;AAIF,eAAO,MAAM,aAAa,GAAI,WAAW,kBAAkB,sBAe1D,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG,YAAY,GAAG;IAAE,QAAQ,EAAE,OAAO,CAAA;CAAE,GAAG,IAAI,CAAC,kBAAkB,EAAE,UAAU,CAAC,CAAC;AAE1G,eAAO,MAAM,UAAU;cAFkC,OAAO;+EAgB9D,CAAC;AAEH,eAAO,MAAM,OAAO,EAAE,EAAE,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAyBxD,CAAC"}
@@ -3,7 +3,7 @@ import React from 'react';
3
3
  import { type SearchResultsProps } from './SearchResults';
4
4
  declare const meta: {
5
5
  title: string;
6
- component: ({ items, selected, onSelect }: SearchResultsProps) => React.JSX.Element;
6
+ component: ({ items }: SearchResultsProps) => React.JSX.Element;
7
7
  render: (props: SearchResultsProps) => React.JSX.Element;
8
8
  decorators: import("@storybook/react").Decorator[];
9
9
  parameters: {
@@ -1 +1 @@
1
- {"version":3,"file":"SearchResults.stories.d.ts","sourceRoot":"","sources":["../../../../../src/components/SearchResults/SearchResults.stories.tsx"],"names":[],"mappings":"AAIA,OAAO,EAAa,KAAK,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACjE,OAAO,KAAmB,MAAM,OAAO,CAAC;AAOxC,OAAO,EAAiB,KAAK,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AA0BzE,QAAA,MAAM,IAAI;;;oBAtBmB,kBAAkB;;;;;CA8BT,CAAC;AAEvC,eAAe,IAAI,CAAC;AAEpB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,IAAI,CAAC,CAAC;AAEnC,eAAO,MAAM,OAAO,EAAE,KAKrB,CAAC"}
1
+ {"version":3,"file":"SearchResults.stories.d.ts","sourceRoot":"","sources":["../../../../../src/components/SearchResults/SearchResults.stories.tsx"],"names":[],"mappings":"AAIA,OAAO,EAAa,KAAK,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACjE,OAAO,KAAmB,MAAM,OAAO,CAAC;AAQxC,OAAO,EAAiB,KAAK,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AA0BzE,QAAA,MAAM,IAAI;;;oBAtBmB,kBAAkB;;;;;CA8BT,CAAC;AAEvC,eAAe,IAAI,CAAC;AAEpB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,IAAI,CAAC,CAAC;AAEnC,eAAO,MAAM,OAAO,EAAE,KAKrB,CAAC"}
@@ -1,14 +1,10 @@
1
1
  import React from 'react';
2
- import { type TextInputProps } from '@dxos/react-ui';
3
- export type SearchbarProps = Pick<TextInputProps, 'variant' | 'placeholder'> & {
4
- classes?: {
5
- root?: string;
6
- input?: string;
7
- };
2
+ import { type TextInputProps, type ThemedClassName } from '@dxos/react-ui';
3
+ export type SearchbarProps = ThemedClassName<Pick<TextInputProps, 'variant' | 'placeholder'> & {
4
+ delay?: number;
8
5
  value?: string;
9
6
  onChange?: (text?: string) => void;
10
7
  onSubmit?: (text?: string) => void;
11
- delay?: number;
12
- };
13
- export declare const Searchbar: ({ classes, variant, placeholder, value, onChange, onSubmit }: SearchbarProps) => React.JSX.Element;
8
+ }>;
9
+ export declare const Searchbar: ({ classNames, variant, placeholder, value, onChange, onSubmit }: SearchbarProps) => React.JSX.Element;
14
10
  //# sourceMappingURL=Searchbar.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Searchbar.d.ts","sourceRoot":"","sources":["../../../../../src/components/Searchbar/Searchbar.tsx"],"names":[],"mappings":"AAIA,OAAO,KAA0D,MAAM,OAAO,CAAC;AAE/E,OAAO,EAAe,KAAK,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAElE,MAAM,MAAM,cAAc,GAAG,IAAI,CAAC,cAAc,EAAE,SAAS,GAAG,aAAa,CAAC,GAAG;IAC7E,OAAO,CAAC,EAAE;QACR,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,KAAK,CAAC,EAAE,MAAM,CAAC;KAChB,CAAC;IACF,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IACnC,QAAQ,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IACnC,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,eAAO,MAAM,SAAS,GAAI,8DAA8D,cAAc,sBA+CrG,CAAC"}
1
+ {"version":3,"file":"Searchbar.d.ts","sourceRoot":"","sources":["../../../../../src/components/Searchbar/Searchbar.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAyC,MAAM,OAAO,CAAC;AAE9D,OAAO,EAAS,KAAK,cAAc,EAAE,KAAK,eAAe,EAA+B,MAAM,gBAAgB,CAAC;AAE/G,MAAM,MAAM,cAAc,GAAG,eAAe,CAC1C,IAAI,CAAC,cAAc,EAAE,SAAS,GAAG,aAAa,CAAC,GAAG;IAChD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IACnC,QAAQ,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;CACpC,CACF,CAAC;AAEF,eAAO,MAAM,SAAS,GAAI,iEAAiE,cAAc,sBA4CxG,CAAC"}
@@ -1,7 +1,7 @@
1
1
  import { type StoryObj } from '@storybook/react-vite';
2
2
  declare const meta: {
3
3
  title: string;
4
- component: ({ classes, variant, placeholder, value, onChange, onSubmit }: import("./Searchbar").SearchbarProps) => import("react").JSX.Element;
4
+ component: ({ classNames, variant, placeholder, value, onChange, onSubmit }: import("./Searchbar").SearchbarProps) => import("react").JSX.Element;
5
5
  decorators: import("@storybook/react").Decorator[];
6
6
  parameters: {
7
7
  layout: string;
@@ -1,4 +1,5 @@
1
1
  export * from './sync';
2
2
  export * from './useGlobalSearch';
3
3
  export * from './useSearchResults';
4
+ export * from './useWebSearch';
4
5
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/hooks/index.ts"],"names":[],"mappings":"AAIA,cAAc,QAAQ,CAAC;AACvB,cAAc,mBAAmB,CAAC;AAClC,cAAc,oBAAoB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/hooks/index.ts"],"names":[],"mappings":"AAIA,cAAc,QAAQ,CAAC;AAEvB,cAAc,mBAAmB,CAAC;AAClC,cAAc,oBAAoB,CAAC;AACnC,cAAc,gBAAgB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"meta.d.ts","sourceRoot":"","sources":["../../../src/meta.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAEtD,eAAO,MAAM,IAAI,EAAE,UAOlB,CAAC;AAEF,eAAO,MAAM,aAAa,QAAsB,CAAC"}
1
+ {"version":3,"file":"meta.d.ts","sourceRoot":"","sources":["../../../src/meta.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAGtD,eAAO,MAAM,IAAI,EAAE,UAUlB,CAAC;AAEF,eAAO,MAAM,aAAa,QAAsB,CAAC"}
@@ -8,7 +8,7 @@ export declare const translations: [{
8
8
  readonly 'search dialog title': "Open";
9
9
  readonly 'recently closed heading': "Recently closed";
10
10
  readonly 'pending results message': "Searching…";
11
- readonly 'empty results message': "No matching items in your spaces";
11
+ readonly 'empty results message': "No matching objects in your spaces";
12
12
  readonly 'search label': "Search";
13
13
  };
14
14
  };