@dxos/plugin-search 0.7.4 → 0.7.5-main.9cb18ac
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/dist/lib/browser/index.mjs +68 -88
- package/dist/lib/browser/index.mjs.map +3 -3
- package/dist/lib/browser/meta.json +1 -1
- package/dist/types/src/SearchPlugin.d.ts.map +1 -1
- package/dist/types/src/components/SearchDialog.d.ts +6 -8
- package/dist/types/src/components/SearchDialog.d.ts.map +1 -1
- package/dist/types/src/types.d.ts +11 -2
- package/dist/types/src/types.d.ts.map +1 -1
- package/dist/types/tsconfig.tsbuildinfo +1 -0
- package/package.json +18 -18
- package/src/SearchPlugin.tsx +32 -42
- package/src/components/SearchDialog.tsx +24 -25
- package/src/types.tsx +7 -3
|
@@ -6,7 +6,7 @@ import {
|
|
|
6
6
|
|
|
7
7
|
// packages/plugins/experimental/plugin-search/src/SearchPlugin.tsx
|
|
8
8
|
import React6 from "react";
|
|
9
|
-
import { resolvePlugin, parseIntentPlugin, parseGraphPlugin as parseGraphPlugin2, parseNavigationPlugin as parseNavigationPlugin2, LayoutAction as LayoutAction2, firstIdInPart } from "@dxos/app-framework";
|
|
9
|
+
import { resolvePlugin, parseIntentPlugin, parseGraphPlugin as parseGraphPlugin2, parseNavigationPlugin as parseNavigationPlugin2, LayoutAction as LayoutAction2, firstIdInPart, createSurface, createResolver, createIntent as createIntent2 } from "@dxos/app-framework";
|
|
10
10
|
import { createExtension } from "@dxos/plugin-graph";
|
|
11
11
|
import { getActiveSpace } from "@dxos/plugin-space";
|
|
12
12
|
|
|
@@ -296,7 +296,7 @@ var SearchMain = ({ space }) => {
|
|
|
296
296
|
|
|
297
297
|
// packages/plugins/experimental/plugin-search/src/components/SearchDialog.tsx
|
|
298
298
|
import React5, { forwardRef as forwardRef2, useCallback, useState as useState5 } from "react";
|
|
299
|
-
import { useResolvePlugin, parseNavigationPlugin, parseGraphPlugin, NavigationAction, LayoutAction, isLayoutParts, useIntentDispatcher } from "@dxos/app-framework";
|
|
299
|
+
import { useResolvePlugin, parseNavigationPlugin, parseGraphPlugin, NavigationAction, LayoutAction, isLayoutParts, useIntentDispatcher, createIntent } from "@dxos/app-framework";
|
|
300
300
|
import { useClient as useClient2 } from "@dxos/react-client";
|
|
301
301
|
import { Filter as Filter2, fullyQualifiedId, useQuery as useQuery2 } from "@dxos/react-client/echo";
|
|
302
302
|
import { Button, Dialog, Icon, toLocalizedString, useTranslation as useTranslation2 } from "@dxos/react-ui";
|
|
@@ -352,6 +352,7 @@ var useSearchResults = (queryString, objects, delay = 400) => {
|
|
|
352
352
|
};
|
|
353
353
|
|
|
354
354
|
// packages/plugins/experimental/plugin-search/src/components/SearchDialog.tsx
|
|
355
|
+
var SEARCH_DIALOG = `${SEARCH_PLUGIN}/SearchDialog`;
|
|
355
356
|
var SearchListResult = /* @__PURE__ */ forwardRef2(({ node, onSelect }, forwardedRef) => {
|
|
356
357
|
const { t } = useTranslation2(SEARCH_PLUGIN);
|
|
357
358
|
const label = toLocalizedString(node?.properties.label ?? "never", t);
|
|
@@ -368,7 +369,7 @@ var SearchListResult = /* @__PURE__ */ forwardRef2(({ node, onSelect }, forwarde
|
|
|
368
369
|
className: "is-0 grow truncate"
|
|
369
370
|
}, label));
|
|
370
371
|
});
|
|
371
|
-
var SearchDialog = ({
|
|
372
|
+
var SearchDialog = ({ layoutCoordinate }) => {
|
|
372
373
|
const { t } = useTranslation2(SEARCH_PLUGIN);
|
|
373
374
|
const graphPlugin = useResolvePlugin(parseGraphPlugin);
|
|
374
375
|
const graph = graphPlugin?.provides.graph;
|
|
@@ -383,54 +384,36 @@ var SearchDialog = ({ subject }) => {
|
|
|
383
384
|
const dangerouslyLoadAllObjects = useQuery2(client.spaces, Filter2.all());
|
|
384
385
|
const [pending, results] = useSearchResults(queryString, dangerouslyLoadAllObjects);
|
|
385
386
|
const resultObjects = Array.from(results.keys());
|
|
386
|
-
const dispatch = useIntentDispatcher();
|
|
387
|
-
const handleSelect = useCallback((nodeId) => {
|
|
387
|
+
const { dispatchPromise: dispatch } = useIntentDispatcher();
|
|
388
|
+
const handleSelect = useCallback(async (nodeId) => {
|
|
388
389
|
if (active && isLayoutParts(active)) {
|
|
389
390
|
const index = active?.main?.findIndex((entry) => entry.id === nodeId);
|
|
390
391
|
if (index !== -1) {
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
{
|
|
400
|
-
action: LayoutAction.SCROLL_INTO_VIEW,
|
|
401
|
-
data: {
|
|
402
|
-
id: nodeId
|
|
403
|
-
}
|
|
404
|
-
}
|
|
405
|
-
]);
|
|
392
|
+
await dispatch(createIntent(LayoutAction.SetLayout, {
|
|
393
|
+
element: "dialog",
|
|
394
|
+
state: false
|
|
395
|
+
}));
|
|
396
|
+
await dispatch(createIntent(LayoutAction.ScrollIntoView, {
|
|
397
|
+
id: nodeId
|
|
398
|
+
}));
|
|
399
|
+
return;
|
|
406
400
|
}
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
element: "dialog",
|
|
421
|
-
state: false
|
|
422
|
-
}
|
|
423
|
-
},
|
|
424
|
-
{
|
|
425
|
-
action: LayoutAction.SCROLL_INTO_VIEW,
|
|
426
|
-
data: {
|
|
427
|
-
id: nodeId
|
|
428
|
-
}
|
|
429
|
-
}
|
|
430
|
-
]);
|
|
401
|
+
await dispatch(createIntent(NavigationAction.AddToActive, {
|
|
402
|
+
part: layoutCoordinate.part,
|
|
403
|
+
id: nodeId,
|
|
404
|
+
pivotId: layoutCoordinate.entryId,
|
|
405
|
+
positioning: "end"
|
|
406
|
+
}));
|
|
407
|
+
await dispatch(createIntent(LayoutAction.SetLayout, {
|
|
408
|
+
element: "dialog",
|
|
409
|
+
state: false
|
|
410
|
+
}));
|
|
411
|
+
await dispatch(createIntent(LayoutAction.ScrollIntoView, {
|
|
412
|
+
id: nodeId
|
|
413
|
+
}));
|
|
431
414
|
}
|
|
432
415
|
}, [
|
|
433
|
-
|
|
416
|
+
layoutCoordinate,
|
|
434
417
|
dispatch,
|
|
435
418
|
active
|
|
436
419
|
]);
|
|
@@ -490,22 +473,22 @@ var translations_default = [
|
|
|
490
473
|
];
|
|
491
474
|
|
|
492
475
|
// packages/plugins/experimental/plugin-search/src/types.tsx
|
|
493
|
-
|
|
476
|
+
import { S } from "@dxos/echo-schema";
|
|
494
477
|
var SearchAction;
|
|
495
478
|
(function(SearchAction2) {
|
|
496
|
-
|
|
479
|
+
const SEARCH_ACTION = `${SEARCH_PLUGIN}/action`;
|
|
480
|
+
class OpenSearch extends S.TaggedClass()(`${SEARCH_ACTION}/open-search`, {
|
|
481
|
+
input: S.Void,
|
|
482
|
+
output: S.Void
|
|
483
|
+
}) {
|
|
484
|
+
}
|
|
485
|
+
SearchAction2.OpenSearch = OpenSearch;
|
|
497
486
|
})(SearchAction || (SearchAction = {}));
|
|
498
487
|
|
|
499
488
|
// packages/plugins/experimental/plugin-search/src/SearchPlugin.tsx
|
|
500
489
|
var SearchPlugin = () => {
|
|
501
|
-
let navigationPlugin;
|
|
502
|
-
let graphPlugin;
|
|
503
490
|
return {
|
|
504
491
|
meta: meta_default,
|
|
505
|
-
ready: async (plugins) => {
|
|
506
|
-
navigationPlugin = resolvePlugin(plugins, parseNavigationPlugin2);
|
|
507
|
-
graphPlugin = resolvePlugin(plugins, parseGraphPlugin2);
|
|
508
|
-
},
|
|
509
492
|
provides: {
|
|
510
493
|
translations: translations_default,
|
|
511
494
|
metadata: {
|
|
@@ -530,18 +513,15 @@ var SearchPlugin = () => {
|
|
|
530
513
|
},
|
|
531
514
|
graph: {
|
|
532
515
|
builder: (plugins) => {
|
|
533
|
-
const
|
|
516
|
+
const dispatch = resolvePlugin(plugins, parseIntentPlugin)?.provides.intent.dispatchPromise;
|
|
534
517
|
return createExtension({
|
|
535
518
|
id: SEARCH_PLUGIN,
|
|
536
519
|
filter: (node) => node.id === "root",
|
|
537
520
|
actions: () => [
|
|
538
521
|
{
|
|
539
|
-
id: SearchAction.
|
|
522
|
+
id: SearchAction.OpenSearch._tag,
|
|
540
523
|
data: async () => {
|
|
541
|
-
await
|
|
542
|
-
plugin: SEARCH_PLUGIN,
|
|
543
|
-
action: SearchAction.SEARCH
|
|
544
|
-
});
|
|
524
|
+
await dispatch?.(createIntent2(SearchAction.OpenSearch));
|
|
545
525
|
},
|
|
546
526
|
properties: {
|
|
547
527
|
label: [
|
|
@@ -564,38 +544,38 @@ var SearchPlugin = () => {
|
|
|
564
544
|
},
|
|
565
545
|
context: ({ children }) => /* @__PURE__ */ React6.createElement(SearchContextProvider, null, children),
|
|
566
546
|
surface: {
|
|
567
|
-
|
|
568
|
-
const location =
|
|
569
|
-
const graph =
|
|
570
|
-
|
|
571
|
-
|
|
572
|
-
|
|
573
|
-
|
|
574
|
-
|
|
575
|
-
})
|
|
576
|
-
|
|
577
|
-
|
|
578
|
-
|
|
579
|
-
|
|
580
|
-
|
|
581
|
-
|
|
547
|
+
definitions: ({ plugins }) => {
|
|
548
|
+
const location = resolvePlugin(plugins, parseNavigationPlugin2)?.provides.location;
|
|
549
|
+
const graph = resolvePlugin(plugins, parseGraphPlugin2)?.provides.graph;
|
|
550
|
+
return [
|
|
551
|
+
createSurface({
|
|
552
|
+
id: SEARCH_DIALOG,
|
|
553
|
+
role: "dialog",
|
|
554
|
+
filter: (data) => data.component === SEARCH_DIALOG,
|
|
555
|
+
component: ({ data }) => /* @__PURE__ */ React6.createElement(SearchDialog, data.subject)
|
|
556
|
+
}),
|
|
557
|
+
createSurface({
|
|
558
|
+
id: "search-input",
|
|
559
|
+
role: "search-input",
|
|
560
|
+
component: () => {
|
|
561
|
+
const space = graph && location ? getActiveSpace(graph, firstIdInPart(location.active, "main")) : void 0;
|
|
562
|
+
return space ? /* @__PURE__ */ React6.createElement(SearchMain, {
|
|
563
|
+
space
|
|
564
|
+
}) : null;
|
|
565
|
+
}
|
|
566
|
+
})
|
|
567
|
+
];
|
|
582
568
|
}
|
|
583
569
|
},
|
|
584
570
|
intent: {
|
|
585
|
-
|
|
586
|
-
|
|
587
|
-
|
|
588
|
-
|
|
589
|
-
|
|
590
|
-
|
|
591
|
-
|
|
592
|
-
|
|
593
|
-
state: true
|
|
594
|
-
}
|
|
595
|
-
});
|
|
596
|
-
}
|
|
597
|
-
}
|
|
598
|
-
}
|
|
571
|
+
resolvers: () => createResolver(SearchAction.OpenSearch, () => ({
|
|
572
|
+
intents: [
|
|
573
|
+
createIntent2(LayoutAction2.SetLayout, {
|
|
574
|
+
element: "complementary",
|
|
575
|
+
state: true
|
|
576
|
+
})
|
|
577
|
+
]
|
|
578
|
+
}))
|
|
599
579
|
}
|
|
600
580
|
}
|
|
601
581
|
};
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/SearchPlugin.tsx", "../../../src/components/Searchbar/Searchbar.tsx", "../../../src/components/SearchMain.tsx", "../../../src/components/SearchResults/SearchResults.tsx", "../../../src/context.tsx", "../../../src/search-sync.ts", "../../../src/components/SearchDialog.tsx", "../../../src/search.ts", "../../../src/translations.ts", "../../../src/types.tsx", "../../../src/index.ts"],
|
|
4
|
-
"sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport React from 'react';\n\nimport {\n type PluginDefinition,\n type LocationProvides,\n type GraphProvides,\n type Plugin,\n resolvePlugin,\n parseIntentPlugin,\n parseGraphPlugin,\n parseNavigationPlugin,\n LayoutAction,\n firstIdInPart,\n} from '@dxos/app-framework';\nimport { createExtension, type Node } from '@dxos/plugin-graph';\nimport { getActiveSpace } from '@dxos/plugin-space';\n\nimport { SearchDialog, SearchMain } from './components';\nimport { SearchContextProvider } from './context';\nimport meta, { SEARCH_PLUGIN, SEARCH_RESULT } from './meta';\nimport type { SearchResult } from './search-sync';\nimport translations from './translations';\nimport { SearchAction, type SearchPluginProvides } from './types';\n\nexport const SearchPlugin = (): PluginDefinition<SearchPluginProvides> => {\n let navigationPlugin: Plugin<LocationProvides> | undefined;\n let graphPlugin: Plugin<GraphProvides> | undefined;\n\n return {\n meta,\n ready: async (plugins) => {\n navigationPlugin = resolvePlugin(plugins, parseNavigationPlugin);\n graphPlugin = resolvePlugin(plugins, parseGraphPlugin);\n },\n provides: {\n translations,\n metadata: {\n records: {\n [SEARCH_RESULT]: {\n parse: (item: SearchResult, type: string) => {\n switch (type) {\n case 'node':\n return { id: item.id, label: item.label, data: item.object };\n case 'object':\n return item.object;\n case 'view-object':\n return item;\n }\n },\n },\n },\n },\n graph: {\n builder: (plugins) => {\n const intentPlugin = resolvePlugin(plugins, parseIntentPlugin);\n return createExtension({\n id: SEARCH_PLUGIN,\n filter: (node): node is Node<null> => node.id === 'root',\n actions: () => [\n {\n id: SearchAction.SEARCH,\n data: async () => {\n await intentPlugin?.provides.intent.dispatch({\n plugin: SEARCH_PLUGIN,\n action: SearchAction.SEARCH,\n });\n },\n properties: {\n label: ['search action label', { ns: SEARCH_PLUGIN }],\n icon: 'ph--magnifying-glass--regular',\n keyBinding: {\n macos: 'shift+meta+f',\n windows: 'shift+alt+f',\n },\n testId: 'searchPlugin.search',\n },\n },\n ],\n });\n },\n },\n context: ({ children }) => <SearchContextProvider>{children}</SearchContextProvider>,\n surface: {\n component: ({ data, role }) => {\n const location = navigationPlugin?.provides.location;\n const graph = graphPlugin?.provides.graph;\n const space = graph && location ? getActiveSpace(graph, firstIdInPart(location.active, 'main')) : undefined;\n\n switch (role) {\n case 'dialog':\n return data.component === `${SEARCH_PLUGIN}/Dialog` ? (\n <SearchDialog subject={data.subject as any} />\n ) : null;\n case 'search-input':\n return space ? <SearchMain space={space} /> : null;\n }\n\n return null;\n },\n },\n intent: {\n resolver: (intent, plugins) => {\n switch (intent.action) {\n case SearchAction.SEARCH: {\n const intentPlugin = resolvePlugin(plugins, parseIntentPlugin);\n return intentPlugin?.provides.intent.dispatch({\n action: LayoutAction.SET_LAYOUT,\n data: { element: 'complementary', state: true },\n });\n }\n }\n },\n },\n },\n };\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { MagnifyingGlass } from '@phosphor-icons/react';\nimport React, { useEffect, useRef, useState } from 'react';\n\nimport { Input, type TextInputProps } from '@dxos/react-ui';\nimport { getSize, mx } from '@dxos/react-ui-theme';\n\nexport type SearchbarProps = Pick<TextInputProps, 'variant' | 'placeholder'> & {\n classes?: {\n root?: string;\n input?: string;\n };\n value?: string;\n onChange?: (text?: string) => void;\n delay?: number;\n};\n\nexport const Searchbar = ({ classes, variant, placeholder, value, onChange }: SearchbarProps) => {\n const inputRef = useRef<HTMLInputElement>(null);\n const [text, setText] = useState(value);\n useEffect(() => {\n setText(value);\n }, [value]);\n const handleChange = (text?: string) => {\n setText(text);\n onChange?.(text);\n };\n\n const handleReset = () => {\n handleChange(undefined);\n inputRef.current?.focus();\n };\n\n return (\n <div className='flex w-full items-center pli-1 pbs-1'>\n <Input.Root>\n <Input.TextInput\n ref={inputRef}\n placeholder={placeholder}\n variant={variant}\n value={text ?? ''}\n classNames={mx('pl-3 pr-10', classes?.input)}\n onChange={({ target }) => handleChange(target.value)}\n onKeyDown={({ key }) => key === 'Escape' && handleReset()}\n />\n\n {/* TODO(burdon): Margin should be density specific. */}\n <div role='button' className='-ml-7 p-0 cursor-pointer' onClick={handleReset}>\n <MagnifyingGlass className={getSize(5)} />\n </div>\n </Input.Root>\n </div>\n );\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport React, { type FC, useState } from 'react';\n\nimport { useClient } from '@dxos/react-client';\nimport { Filter, useQuery, type Space } from '@dxos/react-client/echo';\nimport { useTranslation } from '@dxos/react-ui';\nimport { groupSurface, mx } from '@dxos/react-ui-theme';\n\nimport { SearchResults } from './SearchResults';\nimport { Searchbar } from './Searchbar';\nimport { useGlobalSearch, useGlobalSearchResults } from '../context';\nimport { SEARCH_PLUGIN } from '../meta';\n\nexport const SearchMain: FC<{ space: Space }> = ({ space }) => {\n const { t } = useTranslation(SEARCH_PLUGIN);\n const client = useClient();\n const { setMatch } = useGlobalSearch();\n // TODO(burdon): UX to select all spaces.\n const allSpaces = false;\n\n // TODO(burdon): Returns ALL objects (e.g., incl. Text objects that are fields of parent objects).\n const objects = useQuery(allSpaces ? client.spaces : space, Filter.all());\n const results = useGlobalSearchResults(objects);\n\n const [selected, setSelected] = useState<string>();\n\n // TODO(burdon): Activate and/or filter current main (set context).\n const handleSelect = (id: string) => {\n setSelected((selected) => (selected === id ? undefined : id));\n };\n\n return (\n <div className='flex flex-col grow h-full'>\n <Searchbar placeholder={t('search placeholder')} onChange={setMatch} />\n {results.length > 0 && (\n <div className='absolute top-[--topbar-size] bottom-0 z-[1]'>\n {/* TODO(burdon): Change to Portal? */}\n <div className={mx('flex flex-col h-full overflow-hidden', groupSurface)}>\n <SearchResults items={results} selected={selected} onSelect={handleSelect} />\n </div>\n </div>\n )}\n </div>\n );\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { type Icon, Buildings, Folders, User } from '@phosphor-icons/react';\nimport React, { type FC, forwardRef } from 'react';\n\nimport { ScrollArea } from '@dxos/react-ui';\nimport { Card } from '@dxos/react-ui-card';\nimport { type MosaicTileComponent, Mosaic } from '@dxos/react-ui-mosaic';\nimport { ghostHover, mx } from '@dxos/react-ui-theme';\n\nimport { SEARCH_RESULT } from '../../meta';\nimport type { SearchResult } from '../../search-sync';\n\n// TODO(burdon): Factor out.\nconst styles = {\n selected: '!bg-primary-100 !dark:bg-primary-900',\n};\n\n// TODO(burdon): Registry defined by plugins?\nconst getIcon = (type: string): Icon | undefined => {\n const iconMap: Record<string, Icon> = {\n user: User,\n organization: Buildings,\n project: Folders,\n };\n\n return iconMap[type];\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\nexport type SearchItemProps = SearchResult & { selected: boolean } & Pick<SearchResultsProps, 'onSelect'>;\n\nexport const SearchItem: MosaicTileComponent<SearchItemProps> = forwardRef(\n ({ draggableStyle, draggableProps, item, debug = false }, forwardRef) => {\n const { id, type, label, snippet, match, selected, onSelect } = item;\n const Icon = type ? getIcon(type) : undefined;\n\n return (\n <Card.Root\n ref={forwardRef}\n style={draggableStyle}\n classNames={mx('mx-2 mt-2 cursor-pointer', ghostHover, selected && styles.selected)}\n onClick={() => onSelect?.(id)}\n >\n <Card.Header>\n <Card.DragHandle {...draggableProps} />\n <Card.Title title={label ?? 'Untitled'} />\n {Icon && <Card.Endcap Icon={Icon} />}\n </Card.Header>\n {snippet && (\n <Card.Body gutter>\n <Snippet text={snippet} match={match} />\n </Card.Body>\n )}\n {debug && (\n <Card.Body gutter>\n <pre className='text-xs whitespace-pre-line'>{JSON.stringify(item)}</pre>\n </Card.Body>\n )}\n </Card.Root>\n );\n },\n);\n\nexport type SearchResultsProps = {\n match?: RegExp;\n items: SearchResult[];\n selected?: string;\n onSelect?: (id: string) => void;\n};\n\n// TODO(burdon): Key cursor up/down.\nexport const SearchResults = ({ items, selected, onSelect }: SearchResultsProps) => {\n const path = 'search';\n return (\n <ScrollArea.Root classNames='grow'>\n <ScrollArea.Viewport>\n <Mosaic.Container id={path} Component={SearchItem}>\n {items.map((item) => (\n <Mosaic.DraggableTile\n key={item.id}\n path={path}\n type={SEARCH_RESULT}\n item={{ ...item, selected: selected === item.id, onSelect }}\n Component={SearchItem}\n />\n ))}\n </Mosaic.Container>\n </ScrollArea.Viewport>\n <ScrollArea.Scrollbar orientation='vertical'>\n <ScrollArea.Thumb />\n </ScrollArea.Scrollbar>\n <ScrollArea.Corner />\n </ScrollArea.Root>\n );\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport React, { createContext, type PropsWithChildren, useContext, useMemo, useState } from 'react';\n\nimport { raise } from '@dxos/debug';\n\nimport { filterObjectsSync, queryStringToMatch, type SearchResult } from './search-sync';\n\ntype SearchContextType = {\n match?: RegExp;\n setMatch?: (text?: string) => void;\n};\n\nconst SearchContext = createContext<SearchContextType>({});\n\nexport const SearchContextProvider = ({ children }: PropsWithChildren) => {\n const [match, setMatch] = useState<RegExp>();\n const handleMatch = (text?: string) => setMatch(queryStringToMatch(text));\n return <SearchContext.Provider value={{ match, setMatch: handleMatch }}>{children}</SearchContext.Provider>;\n};\n\nexport const useGlobalSearch = () => {\n return useContext(SearchContext) ?? raise(new Error('Missing SearchContext.'));\n};\n\nexport const useGlobalSearchResults = <T extends Record<string, any>>(objects?: T[]): SearchResult[] => {\n const { match } = useGlobalSearch();\n return objects && match ? filterObjectsSync(objects, match) : [];\n};\n\nexport const useGlobalFilteredObjects = <T extends Record<string, any>>(objects?: T[]): T[] => {\n const { match } = useGlobalSearch();\n if (!match || !objects) {\n return objects ?? [];\n }\n\n return useMemo(() => filterObjectsSync(objects, match).map((result) => result.object), [objects, match]);\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { AST, type S } from '@dxos/echo-schema';\nimport { getSchema } from '@dxos/live-object';\nimport { TextType } from '@dxos/plugin-markdown/types';\n\nexport const queryStringToMatch = (queryString?: string): RegExp | undefined => {\n const trimmed = queryString?.trim();\n return trimmed ? new RegExp(trimmed, 'i') : undefined;\n};\n\n// TODO(burdon): Type name registry linked to schema?\nconst getIcon = (schema: S.Schema<any> | undefined): string | undefined => {\n if (!(schema && AST.isTypeLiteral(schema.ast))) {\n return undefined;\n }\n const keys = schema.ast.propertySignatures.map((p) => p.name);\n if (keys.indexOf('email') !== -1) {\n return 'user';\n }\n if (keys.indexOf('website') !== -1) {\n return 'organization';\n }\n if (keys.indexOf('repo') !== -1) {\n return 'project';\n }\n\n return undefined;\n};\n\n// Plain text fields.\n// TODO(burdon): Reconcile with agent index.\nexport type TextFields = Record<string, string>;\n\nexport type SearchResult = {\n id: string;\n type?: string;\n label?: string;\n match?: RegExp;\n snippet?: string;\n object?: any;\n};\n\n// TODO(thure): This returns `SearchResult[]` which is not just a narrower set of objects as the name implies.\nexport const filterObjectsSync = <T extends Record<string, any>>(objects: T[], match?: RegExp): SearchResult[] => {\n if (!match) {\n return [];\n }\n\n return objects.reduce<SearchResult[]>((results, object) => {\n // TODO(burdon): Hack to ignore Text objects.\n if (object instanceof TextType) {\n return results;\n }\n\n const fields = mapObjectToTextFields(object);\n Object.entries(fields).some(([, value]) => {\n const result = value.match(match);\n if (result) {\n // TODO(burdon): Use schema.\n const label = getStringProperty(object, ['label', 'name', 'title']);\n\n results.push({\n id: object.id,\n type: getIcon(getSchema(object)),\n label,\n match,\n // TODO(burdon): Truncate.\n // TODO(burdon): Issue with sketch documents.\n snippet: value !== label ? value : fields.content ?? fields.description ?? undefined,\n object,\n });\n\n return true;\n }\n\n return false;\n });\n\n return results;\n }, []);\n};\n\n// TODO(burdon): Use schema?\nconst getStringProperty = (object: Record<string, unknown>, keys: string[]): string | undefined => {\n let label;\n keys.some((key) => {\n const value = object[key];\n if (typeof value === 'string') {\n label = value;\n return true;\n }\n\n return false;\n });\n\n return label;\n};\n\n// TODO(burdon): Filter system fields.\nconst getKeys = (object: Record<string, unknown>): string[] => {\n try {\n const obj = JSON.parse(JSON.stringify(object));\n return Object.keys(obj).filter(\n (key) => key !== 'id' && key !== 'identityKey' && key[0] !== '_' && key[0] !== '@',\n ) as string[];\n } catch (err) {\n // TODO(burdon): Error with TLDraw sketch.\n // Uncaught Error: Type with the name content has already been defined with a different constructor\n return [];\n }\n};\n\n// TODO(burdon): Use ECHO schema.\nexport const mapObjectToTextFields = <T extends Record<string, unknown>>(object: T): TextFields => {\n return getKeys(object).reduce<TextFields>((fields, key) => {\n const value = object[key] as any;\n if (typeof value === 'string' || value instanceof TextType) {\n try {\n fields[key] = String(value);\n } catch (err) {\n // TODO(burdon): Exception when parsing sketch document.\n }\n }\n\n return fields;\n }, {});\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport React, { forwardRef, useCallback, useState } from 'react';\n\nimport {\n useResolvePlugin,\n parseNavigationPlugin,\n parseGraphPlugin,\n NavigationAction,\n LayoutAction,\n type LayoutCoordinate,\n isLayoutParts,\n useIntentDispatcher,\n} from '@dxos/app-framework';\nimport { type Node } from '@dxos/plugin-graph';\nimport { useClient } from '@dxos/react-client';\nimport { Filter, fullyQualifiedId, 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 { SEARCH_PLUGIN } from '../meta';\nimport { useSearchResults } from '../search';\n\ntype SearchListResultProps = {\n node: Node;\n} & Pick<SearchListItemProps, 'onSelect'>;\n\nconst SearchListResult = forwardRef<HTMLDivElement, SearchListResultProps>(({ node, onSelect }, forwardedRef) => {\n const { t } = useTranslation(SEARCH_PLUGIN);\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 const SearchDialog = ({\n subject,\n}: {\n subject: { action: NavigationAction; layoutCoordinate: LayoutCoordinate; position: 'add-after' | 'add-before' };\n}) => {\n const { t } = useTranslation(SEARCH_PLUGIN);\n const graphPlugin = useResolvePlugin(parseGraphPlugin);\n const graph = graphPlugin?.provides.graph;\n const navigationPlugin = useResolvePlugin(parseNavigationPlugin);\n const providedClosed = navigationPlugin?.provides.location.closed ?? [];\n const closed = (Array.isArray(providedClosed) ? providedClosed : [providedClosed])\n .map((id) => graph?.findNode(id))\n .filter(Boolean);\n const active = navigationPlugin?.provides.location.active;\n const [queryString, setQueryString] = useState('');\n const client = useClient();\n const dangerouslyLoadAllObjects = useQuery(client.spaces, Filter.all());\n const [pending, results] = useSearchResults(queryString, dangerouslyLoadAllObjects);\n const resultObjects = Array.from(results.keys());\n const dispatch = useIntentDispatcher();\n\n const handleSelect = useCallback(\n (nodeId: string) => {\n if (active && isLayoutParts(active)) {\n // If node is already present in the active parts, scroll to it and close the dialog.\n const index = active?.main?.findIndex((entry) => entry.id === nodeId);\n if (index !== -1) {\n return dispatch([\n { action: LayoutAction.SET_LAYOUT, data: { element: 'dialog', state: false } },\n { action: LayoutAction.SCROLL_INTO_VIEW, data: { id: nodeId } },\n ]);\n }\n\n return dispatch([\n {\n action: NavigationAction.ADD_TO_ACTIVE,\n data: {\n part: subject.layoutCoordinate.part,\n id: nodeId,\n pivotId: subject.layoutCoordinate.entryId,\n positioning: 'end',\n },\n },\n { action: LayoutAction.SET_LAYOUT, data: { element: 'dialog', state: false } },\n { action: LayoutAction.SCROLL_INTO_VIEW, data: { id: nodeId } },\n ]);\n }\n },\n [subject, dispatch, active],\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='px-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?.findNode(fullyQualifiedId(object)))\n .filter(Boolean)\n .map((node) => <SearchListResult key={node!.id} node={node!} 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.map((node) => (\n <SearchListResult key={node!.id} node={node!} 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", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { yieldOrContinue } from 'main-thread-scheduling';\nimport { useEffect, useState } from 'react';\n\nimport { TextType } from '@dxos/plugin-markdown/types';\n\n// TODO(thure): Deprecate search-sync, move still-relevant utilities elsewhere (here, probably).\nimport { mapObjectToTextFields, queryStringToMatch } from './search-sync';\n\nexport const filterObjects = async <T extends Record<string, any>>(\n objects: T[],\n match?: RegExp,\n): Promise<Map<T, string[][]>> => {\n const result = new Map<T, string[][]>();\n if (!match) {\n return result;\n }\n await Promise.all(\n objects\n .filter((object) => !(object instanceof TextType))\n .map(async (object) => {\n await yieldOrContinue('interactive');\n const fields = mapObjectToTextFields<T>(object);\n Object.entries(fields)\n .filter(([_, value]) => value.match(match))\n .forEach(([key, value]) => {\n if (!result.has(object)) {\n result.set(object, []);\n }\n result.set(object, [...result.get(object)!, [key, value]]);\n });\n }),\n );\n return result;\n};\n\nexport const useSearchResults = <T extends Record<string, any>>(\n queryString?: string,\n objects?: T[],\n delay: number = 400,\n): [boolean, Map<T, string[][]>] => {\n const [results, setResults] = useState<Map<T, string[][]>>(new Map());\n const [pending, setPending] = useState(false);\n\n useEffect(() => {\n setPending(!!(objects && queryString));\n const timeoutId = setTimeout(async () => {\n const nextResults =\n objects && queryString ? await filterObjects(objects, queryStringToMatch(queryString)) : new Map();\n setResults(nextResults);\n setPending(false);\n }, delay);\n\n return () => clearTimeout(timeoutId);\n }, [queryString, objects]);\n\n return [pending, results];\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { SEARCH_PLUGIN } from './meta';\n\nexport default [\n {\n 'en-US': {\n [SEARCH_PLUGIN]: {\n 'plugin name': 'Search',\n 'search action label': 'Search spaces',\n 'search placeholder': 'Search…',\n 'search dialog title': 'Open',\n 'recently closed heading': 'Recently closed',\n 'pending results message': 'Searching…',\n 'empty results message': 'No matching items in your spaces',\n },\n },\n },\n];\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport type {\n GraphBuilderProvides,\n IntentResolverProvides,\n MetadataRecordsProvides,\n SurfaceProvides,\n TranslationsProvides,\n} from '@dxos/app-framework';\n\nimport { SEARCH_PLUGIN } from './meta';\n\nconst SEARCH_ACTION = `${SEARCH_PLUGIN}/action`;\n\nexport enum SearchAction {\n SEARCH = `${SEARCH_ACTION}/search`,\n}\n\nexport type SearchPluginProvides = SurfaceProvides &\n IntentResolverProvides &\n GraphBuilderProvides &\n MetadataRecordsProvides &\n TranslationsProvides;\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { SearchPlugin } from './SearchPlugin';\n\nexport default SearchPlugin;\n\nexport * from './context';\nexport * from './search-sync';\n\nexport * from './SearchPlugin';\n"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": ["React", "resolvePlugin", "parseIntentPlugin", "parseGraphPlugin", "parseNavigationPlugin", "LayoutAction", "firstIdInPart", "createExtension", "getActiveSpace", "MagnifyingGlass", "React", "useEffect", "useRef", "useState", "Input", "getSize", "mx", "Searchbar", "classes", "variant", "placeholder", "value", "onChange", "inputRef", "useRef", "text", "setText", "useState", "useEffect", "handleChange", "handleReset", "undefined", "current", "focus", "div", "className", "Input", "Root", "TextInput", "ref", "classNames", "mx", "input", "target", "onKeyDown", "key", "role", "onClick", "MagnifyingGlass", "getSize", "React", "useState", "useClient", "Filter", "useQuery", "useTranslation", "groupSurface", "mx", "Buildings", "Folders", "User", "React", "forwardRef", "ScrollArea", "Card", "Mosaic", "ghostHover", "mx", "styles", "selected", "getIcon", "type", "iconMap", "user", "User", "organization", "Buildings", "project", "Folders", "Snippet", "text", "match", "content", "React", "result", "index", "undefined", "maxOffset", "before", "slice", "length", "idx", "indexOf", "after", "span", "className", "SearchItem", "forwardRef", "draggableStyle", "draggableProps", "item", "debug", "id", "label", "snippet", "onSelect", "Icon", "Card", "Root", "ref", "style", "classNames", "mx", "ghostHover", "onClick", "Header", "DragHandle", "Title", "title", "Endcap", "Body", "gutter", "pre", "JSON", "stringify", "SearchResults", "items", "path", "ScrollArea", "Viewport", "Mosaic", "Container", "Component", "map", "DraggableTile", "key", "SEARCH_RESULT", "Scrollbar", "orientation", "Thumb", "Corner", "React", "createContext", "useContext", "useMemo", "useState", "raise", "AST", "getSchema", "TextType", "queryStringToMatch", "queryString", "trimmed", "trim", "RegExp", "undefined", "getIcon", "schema", "AST", "isTypeLiteral", "ast", "keys", "propertySignatures", "map", "p", "name", "indexOf", "filterObjectsSync", "objects", "match", "reduce", "results", "object", "TextType", "fields", "mapObjectToTextFields", "Object", "entries", "some", "value", "result", "label", "getStringProperty", "push", "id", "type", "getSchema", "snippet", "content", "description", "key", "getKeys", "obj", "JSON", "parse", "stringify", "filter", "err", "String", "SearchContext", "createContext", "SearchContextProvider", "children", "match", "setMatch", "useState", "handleMatch", "text", "queryStringToMatch", "React", "Provider", "value", "useGlobalSearch", "useContext", "raise", "Error", "useGlobalSearchResults", "objects", "filterObjectsSync", "useGlobalFilteredObjects", "useMemo", "map", "result", "object", "SearchMain", "space", "t", "useTranslation", "SEARCH_PLUGIN", "client", "useClient", "setMatch", "useGlobalSearch", "allSpaces", "objects", "useQuery", "spaces", "Filter", "all", "results", "useGlobalSearchResults", "selected", "setSelected", "useState", "handleSelect", "id", "undefined", "React", "div", "className", "Searchbar", "placeholder", "onChange", "length", "mx", "groupSurface", "SearchResults", "items", "onSelect", "React", "forwardRef", "useCallback", "useState", "useResolvePlugin", "parseNavigationPlugin", "parseGraphPlugin", "NavigationAction", "LayoutAction", "isLayoutParts", "useIntentDispatcher", "useClient", "Filter", "fullyQualifiedId", "useQuery", "Button", "Dialog", "Icon", "toLocalizedString", "useTranslation", "SearchList", "descriptionText", "mx", "yieldOrContinue", "useEffect", "useState", "TextType", "filterObjects", "objects", "match", "result", "Map", "Promise", "all", "filter", "object", "TextType", "map", "yieldOrContinue", "fields", "mapObjectToTextFields", "Object", "entries", "_", "value", "forEach", "key", "has", "set", "get", "useSearchResults", "queryString", "delay", "results", "setResults", "useState", "pending", "setPending", "useEffect", "timeoutId", "setTimeout", "nextResults", "queryStringToMatch", "clearTimeout", "SearchListResult", "forwardRef", "node", "onSelect", "forwardedRef", "t", "useTranslation", "
|
|
4
|
+
"sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport React from 'react';\n\nimport {\n type PluginDefinition,\n resolvePlugin,\n parseIntentPlugin,\n parseGraphPlugin,\n parseNavigationPlugin,\n LayoutAction,\n firstIdInPart,\n createSurface,\n createResolver,\n createIntent,\n} from '@dxos/app-framework';\nimport { createExtension, type Node } from '@dxos/plugin-graph';\nimport { getActiveSpace } from '@dxos/plugin-space';\n\nimport { SEARCH_DIALOG, SearchDialog, type SearchDialogProps, SearchMain } from './components';\nimport { SearchContextProvider } from './context';\nimport meta, { SEARCH_PLUGIN, SEARCH_RESULT } from './meta';\nimport type { SearchResult } from './search-sync';\nimport translations from './translations';\nimport { SearchAction, type SearchPluginProvides } from './types';\n\nexport const SearchPlugin = (): PluginDefinition<SearchPluginProvides> => {\n return {\n meta,\n provides: {\n translations,\n metadata: {\n records: {\n [SEARCH_RESULT]: {\n parse: (item: SearchResult, type: string) => {\n switch (type) {\n case 'node':\n return { id: item.id, label: item.label, data: item.object };\n case 'object':\n return item.object;\n case 'view-object':\n return item;\n }\n },\n },\n },\n },\n graph: {\n builder: (plugins) => {\n const dispatch = resolvePlugin(plugins, parseIntentPlugin)?.provides.intent.dispatchPromise;\n\n return createExtension({\n id: SEARCH_PLUGIN,\n filter: (node): node is Node<null> => node.id === 'root',\n actions: () => [\n {\n id: SearchAction.OpenSearch._tag,\n data: async () => {\n await dispatch?.(createIntent(SearchAction.OpenSearch));\n },\n properties: {\n label: ['search action label', { ns: SEARCH_PLUGIN }],\n icon: 'ph--magnifying-glass--regular',\n keyBinding: {\n macos: 'shift+meta+f',\n windows: 'shift+alt+f',\n },\n testId: 'searchPlugin.search',\n },\n },\n ],\n });\n },\n },\n context: ({ children }) => <SearchContextProvider>{children}</SearchContextProvider>,\n surface: {\n definitions: ({ plugins }) => {\n const location = resolvePlugin(plugins, parseNavigationPlugin)?.provides.location;\n const graph = resolvePlugin(plugins, parseGraphPlugin)?.provides.graph;\n\n return [\n createSurface({\n id: SEARCH_DIALOG,\n role: 'dialog',\n filter: (data): data is { subject: SearchDialogProps } => data.component === SEARCH_DIALOG,\n component: ({ data }) => <SearchDialog {...data.subject} />,\n }),\n createSurface({\n id: 'search-input',\n role: 'search-input',\n component: () => {\n const space =\n graph && location ? getActiveSpace(graph, firstIdInPart(location.active, 'main')) : undefined;\n return space ? <SearchMain space={space} /> : null;\n },\n }),\n ];\n },\n },\n intent: {\n resolvers: () =>\n createResolver(SearchAction.OpenSearch, () => ({\n intents: [createIntent(LayoutAction.SetLayout, { element: 'complementary', state: true })],\n })),\n },\n },\n };\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { MagnifyingGlass } from '@phosphor-icons/react';\nimport React, { useEffect, useRef, useState } from 'react';\n\nimport { Input, type TextInputProps } from '@dxos/react-ui';\nimport { getSize, mx } from '@dxos/react-ui-theme';\n\nexport type SearchbarProps = Pick<TextInputProps, 'variant' | 'placeholder'> & {\n classes?: {\n root?: string;\n input?: string;\n };\n value?: string;\n onChange?: (text?: string) => void;\n delay?: number;\n};\n\nexport const Searchbar = ({ classes, variant, placeholder, value, onChange }: SearchbarProps) => {\n const inputRef = useRef<HTMLInputElement>(null);\n const [text, setText] = useState(value);\n useEffect(() => {\n setText(value);\n }, [value]);\n const handleChange = (text?: string) => {\n setText(text);\n onChange?.(text);\n };\n\n const handleReset = () => {\n handleChange(undefined);\n inputRef.current?.focus();\n };\n\n return (\n <div className='flex w-full items-center pli-1 pbs-1'>\n <Input.Root>\n <Input.TextInput\n ref={inputRef}\n placeholder={placeholder}\n variant={variant}\n value={text ?? ''}\n classNames={mx('pl-3 pr-10', classes?.input)}\n onChange={({ target }) => handleChange(target.value)}\n onKeyDown={({ key }) => key === 'Escape' && handleReset()}\n />\n\n {/* TODO(burdon): Margin should be density specific. */}\n <div role='button' className='-ml-7 p-0 cursor-pointer' onClick={handleReset}>\n <MagnifyingGlass className={getSize(5)} />\n </div>\n </Input.Root>\n </div>\n );\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport React, { type FC, useState } from 'react';\n\nimport { useClient } from '@dxos/react-client';\nimport { Filter, useQuery, type Space } from '@dxos/react-client/echo';\nimport { useTranslation } from '@dxos/react-ui';\nimport { groupSurface, mx } from '@dxos/react-ui-theme';\n\nimport { SearchResults } from './SearchResults';\nimport { Searchbar } from './Searchbar';\nimport { useGlobalSearch, useGlobalSearchResults } from '../context';\nimport { SEARCH_PLUGIN } from '../meta';\n\nexport const SearchMain: FC<{ space: Space }> = ({ space }) => {\n const { t } = useTranslation(SEARCH_PLUGIN);\n const client = useClient();\n const { setMatch } = useGlobalSearch();\n // TODO(burdon): UX to select all spaces.\n const allSpaces = false;\n\n // TODO(burdon): Returns ALL objects (e.g., incl. Text objects that are fields of parent objects).\n const objects = useQuery(allSpaces ? client.spaces : space, Filter.all());\n const results = useGlobalSearchResults(objects);\n\n const [selected, setSelected] = useState<string>();\n\n // TODO(burdon): Activate and/or filter current main (set context).\n const handleSelect = (id: string) => {\n setSelected((selected) => (selected === id ? undefined : id));\n };\n\n return (\n <div className='flex flex-col grow h-full'>\n <Searchbar placeholder={t('search placeholder')} onChange={setMatch} />\n {results.length > 0 && (\n <div className='absolute top-[--topbar-size] bottom-0 z-[1]'>\n {/* TODO(burdon): Change to Portal? */}\n <div className={mx('flex flex-col h-full overflow-hidden', groupSurface)}>\n <SearchResults items={results} selected={selected} onSelect={handleSelect} />\n </div>\n </div>\n )}\n </div>\n );\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { type Icon, Buildings, Folders, User } from '@phosphor-icons/react';\nimport React, { type FC, forwardRef } from 'react';\n\nimport { ScrollArea } from '@dxos/react-ui';\nimport { Card } from '@dxos/react-ui-card';\nimport { type MosaicTileComponent, Mosaic } from '@dxos/react-ui-mosaic';\nimport { ghostHover, mx } from '@dxos/react-ui-theme';\n\nimport { SEARCH_RESULT } from '../../meta';\nimport type { SearchResult } from '../../search-sync';\n\n// TODO(burdon): Factor out.\nconst styles = {\n selected: '!bg-primary-100 !dark:bg-primary-900',\n};\n\n// TODO(burdon): Registry defined by plugins?\nconst getIcon = (type: string): Icon | undefined => {\n const iconMap: Record<string, Icon> = {\n user: User,\n organization: Buildings,\n project: Folders,\n };\n\n return iconMap[type];\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\nexport type SearchItemProps = SearchResult & { selected: boolean } & Pick<SearchResultsProps, 'onSelect'>;\n\nexport const SearchItem: MosaicTileComponent<SearchItemProps> = forwardRef(\n ({ draggableStyle, draggableProps, item, debug = false }, forwardRef) => {\n const { id, type, label, snippet, match, selected, onSelect } = item;\n const Icon = type ? getIcon(type) : undefined;\n\n return (\n <Card.Root\n ref={forwardRef}\n style={draggableStyle}\n classNames={mx('mx-2 mt-2 cursor-pointer', ghostHover, selected && styles.selected)}\n onClick={() => onSelect?.(id)}\n >\n <Card.Header>\n <Card.DragHandle {...draggableProps} />\n <Card.Title title={label ?? 'Untitled'} />\n {Icon && <Card.Endcap Icon={Icon} />}\n </Card.Header>\n {snippet && (\n <Card.Body gutter>\n <Snippet text={snippet} match={match} />\n </Card.Body>\n )}\n {debug && (\n <Card.Body gutter>\n <pre className='text-xs whitespace-pre-line'>{JSON.stringify(item)}</pre>\n </Card.Body>\n )}\n </Card.Root>\n );\n },\n);\n\nexport type SearchResultsProps = {\n match?: RegExp;\n items: SearchResult[];\n selected?: string;\n onSelect?: (id: string) => void;\n};\n\n// TODO(burdon): Key cursor up/down.\nexport const SearchResults = ({ items, selected, onSelect }: SearchResultsProps) => {\n const path = 'search';\n return (\n <ScrollArea.Root classNames='grow'>\n <ScrollArea.Viewport>\n <Mosaic.Container id={path} Component={SearchItem}>\n {items.map((item) => (\n <Mosaic.DraggableTile\n key={item.id}\n path={path}\n type={SEARCH_RESULT}\n item={{ ...item, selected: selected === item.id, onSelect }}\n Component={SearchItem}\n />\n ))}\n </Mosaic.Container>\n </ScrollArea.Viewport>\n <ScrollArea.Scrollbar orientation='vertical'>\n <ScrollArea.Thumb />\n </ScrollArea.Scrollbar>\n <ScrollArea.Corner />\n </ScrollArea.Root>\n );\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport React, { createContext, type PropsWithChildren, useContext, useMemo, useState } from 'react';\n\nimport { raise } from '@dxos/debug';\n\nimport { filterObjectsSync, queryStringToMatch, type SearchResult } from './search-sync';\n\ntype SearchContextType = {\n match?: RegExp;\n setMatch?: (text?: string) => void;\n};\n\nconst SearchContext = createContext<SearchContextType>({});\n\nexport const SearchContextProvider = ({ children }: PropsWithChildren) => {\n const [match, setMatch] = useState<RegExp>();\n const handleMatch = (text?: string) => setMatch(queryStringToMatch(text));\n return <SearchContext.Provider value={{ match, setMatch: handleMatch }}>{children}</SearchContext.Provider>;\n};\n\nexport const useGlobalSearch = () => {\n return useContext(SearchContext) ?? raise(new Error('Missing SearchContext.'));\n};\n\nexport const useGlobalSearchResults = <T extends Record<string, any>>(objects?: T[]): SearchResult[] => {\n const { match } = useGlobalSearch();\n return objects && match ? filterObjectsSync(objects, match) : [];\n};\n\nexport const useGlobalFilteredObjects = <T extends Record<string, any>>(objects?: T[]): T[] => {\n const { match } = useGlobalSearch();\n if (!match || !objects) {\n return objects ?? [];\n }\n\n return useMemo(() => filterObjectsSync(objects, match).map((result) => result.object), [objects, match]);\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { AST, type S } from '@dxos/echo-schema';\nimport { getSchema } from '@dxos/live-object';\nimport { TextType } from '@dxos/plugin-markdown/types';\n\nexport const queryStringToMatch = (queryString?: string): RegExp | undefined => {\n const trimmed = queryString?.trim();\n return trimmed ? new RegExp(trimmed, 'i') : undefined;\n};\n\n// TODO(burdon): Type name registry linked to schema?\nconst getIcon = (schema: S.Schema<any> | undefined): string | undefined => {\n if (!(schema && AST.isTypeLiteral(schema.ast))) {\n return undefined;\n }\n const keys = schema.ast.propertySignatures.map((p) => p.name);\n if (keys.indexOf('email') !== -1) {\n return 'user';\n }\n if (keys.indexOf('website') !== -1) {\n return 'organization';\n }\n if (keys.indexOf('repo') !== -1) {\n return 'project';\n }\n\n return undefined;\n};\n\n// Plain text fields.\n// TODO(burdon): Reconcile with agent index.\nexport type TextFields = Record<string, string>;\n\nexport type SearchResult = {\n id: string;\n type?: string;\n label?: string;\n match?: RegExp;\n snippet?: string;\n object?: any;\n};\n\n// TODO(thure): This returns `SearchResult[]` which is not just a narrower set of objects as the name implies.\nexport const filterObjectsSync = <T extends Record<string, any>>(objects: T[], match?: RegExp): SearchResult[] => {\n if (!match) {\n return [];\n }\n\n return objects.reduce<SearchResult[]>((results, object) => {\n // TODO(burdon): Hack to ignore Text objects.\n if (object instanceof TextType) {\n return results;\n }\n\n const fields = mapObjectToTextFields(object);\n Object.entries(fields).some(([, value]) => {\n const result = value.match(match);\n if (result) {\n // TODO(burdon): Use schema.\n const label = getStringProperty(object, ['label', 'name', 'title']);\n\n results.push({\n id: object.id,\n type: getIcon(getSchema(object)),\n label,\n match,\n // TODO(burdon): Truncate.\n // TODO(burdon): Issue with sketch documents.\n snippet: value !== label ? value : fields.content ?? fields.description ?? undefined,\n object,\n });\n\n return true;\n }\n\n return false;\n });\n\n return results;\n }, []);\n};\n\n// TODO(burdon): Use schema?\nconst getStringProperty = (object: Record<string, unknown>, keys: string[]): string | undefined => {\n let label;\n keys.some((key) => {\n const value = object[key];\n if (typeof value === 'string') {\n label = value;\n return true;\n }\n\n return false;\n });\n\n return label;\n};\n\n// TODO(burdon): Filter system fields.\nconst getKeys = (object: Record<string, unknown>): string[] => {\n try {\n const obj = JSON.parse(JSON.stringify(object));\n return Object.keys(obj).filter(\n (key) => key !== 'id' && key !== 'identityKey' && key[0] !== '_' && key[0] !== '@',\n ) as string[];\n } catch (err) {\n // TODO(burdon): Error with TLDraw sketch.\n // Uncaught Error: Type with the name content has already been defined with a different constructor\n return [];\n }\n};\n\n// TODO(burdon): Use ECHO schema.\nexport const mapObjectToTextFields = <T extends Record<string, unknown>>(object: T): TextFields => {\n return getKeys(object).reduce<TextFields>((fields, key) => {\n const value = object[key] as any;\n if (typeof value === 'string' || value instanceof TextType) {\n try {\n fields[key] = String(value);\n } catch (err) {\n // TODO(burdon): Exception when parsing sketch document.\n }\n }\n\n return fields;\n }, {});\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport React, { forwardRef, useCallback, useState } from 'react';\n\nimport {\n useResolvePlugin,\n parseNavigationPlugin,\n parseGraphPlugin,\n NavigationAction,\n LayoutAction,\n type LayoutCoordinate,\n isLayoutParts,\n useIntentDispatcher,\n createIntent,\n} from '@dxos/app-framework';\nimport { type Node } from '@dxos/plugin-graph';\nimport { useClient } from '@dxos/react-client';\nimport { Filter, fullyQualifiedId, 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 { SEARCH_PLUGIN } from '../meta';\nimport { useSearchResults } from '../search';\n\nexport const SEARCH_DIALOG = `${SEARCH_PLUGIN}/SearchDialog`;\n\ntype SearchListResultProps = {\n node: Node;\n} & Pick<SearchListItemProps, 'onSelect'>;\n\nconst SearchListResult = forwardRef<HTMLDivElement, SearchListResultProps>(({ node, onSelect }, forwardedRef) => {\n const { t } = useTranslation(SEARCH_PLUGIN);\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 layoutCoordinate: LayoutCoordinate;\n};\n\nexport const SearchDialog = ({ layoutCoordinate }: SearchDialogProps) => {\n const { t } = useTranslation(SEARCH_PLUGIN);\n const graphPlugin = useResolvePlugin(parseGraphPlugin);\n const graph = graphPlugin?.provides.graph;\n const navigationPlugin = useResolvePlugin(parseNavigationPlugin);\n const providedClosed = navigationPlugin?.provides.location.closed ?? [];\n const closed = (Array.isArray(providedClosed) ? providedClosed : [providedClosed])\n .map((id) => graph?.findNode(id))\n .filter(Boolean);\n const active = navigationPlugin?.provides.location.active;\n const [queryString, setQueryString] = useState('');\n const client = useClient();\n const dangerouslyLoadAllObjects = useQuery(client.spaces, Filter.all());\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 if (active && isLayoutParts(active)) {\n // If node is already present in the active parts, scroll to it and close the dialog.\n const index = active?.main?.findIndex((entry) => entry.id === nodeId);\n if (index !== -1) {\n await dispatch(createIntent(LayoutAction.SetLayout, { element: 'dialog', state: false }));\n await dispatch(createIntent(LayoutAction.ScrollIntoView, { id: nodeId }));\n return;\n }\n\n await dispatch(\n createIntent(NavigationAction.AddToActive, {\n part: layoutCoordinate.part,\n id: nodeId,\n pivotId: layoutCoordinate.entryId,\n positioning: 'end',\n }),\n );\n await dispatch(createIntent(LayoutAction.SetLayout, { element: 'dialog', state: false }));\n await dispatch(createIntent(LayoutAction.ScrollIntoView, { id: nodeId }));\n }\n },\n [layoutCoordinate, dispatch, active],\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='px-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?.findNode(fullyQualifiedId(object)))\n .filter(Boolean)\n .map((node) => <SearchListResult key={node!.id} node={node!} 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.map((node) => (\n <SearchListResult key={node!.id} node={node!} 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", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { yieldOrContinue } from 'main-thread-scheduling';\nimport { useEffect, useState } from 'react';\n\nimport { TextType } from '@dxos/plugin-markdown/types';\n\n// TODO(thure): Deprecate search-sync, move still-relevant utilities elsewhere (here, probably).\nimport { mapObjectToTextFields, queryStringToMatch } from './search-sync';\n\nexport const filterObjects = async <T extends Record<string, any>>(\n objects: T[],\n match?: RegExp,\n): Promise<Map<T, string[][]>> => {\n const result = new Map<T, string[][]>();\n if (!match) {\n return result;\n }\n await Promise.all(\n objects\n .filter((object) => !(object instanceof TextType))\n .map(async (object) => {\n await yieldOrContinue('interactive');\n const fields = mapObjectToTextFields<T>(object);\n Object.entries(fields)\n .filter(([_, value]) => value.match(match))\n .forEach(([key, value]) => {\n if (!result.has(object)) {\n result.set(object, []);\n }\n result.set(object, [...result.get(object)!, [key, value]]);\n });\n }),\n );\n return result;\n};\n\nexport const useSearchResults = <T extends Record<string, any>>(\n queryString?: string,\n objects?: T[],\n delay: number = 400,\n): [boolean, Map<T, string[][]>] => {\n const [results, setResults] = useState<Map<T, string[][]>>(new Map());\n const [pending, setPending] = useState(false);\n\n useEffect(() => {\n setPending(!!(objects && queryString));\n const timeoutId = setTimeout(async () => {\n const nextResults =\n objects && queryString ? await filterObjects(objects, queryStringToMatch(queryString)) : new Map();\n setResults(nextResults);\n setPending(false);\n }, delay);\n\n return () => clearTimeout(timeoutId);\n }, [queryString, objects]);\n\n return [pending, results];\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { SEARCH_PLUGIN } from './meta';\n\nexport default [\n {\n 'en-US': {\n [SEARCH_PLUGIN]: {\n 'plugin name': 'Search',\n 'search action label': 'Search spaces',\n 'search placeholder': 'Search…',\n 'search dialog title': 'Open',\n 'recently closed heading': 'Recently closed',\n 'pending results message': 'Searching…',\n 'empty results message': 'No matching items in your spaces',\n },\n },\n },\n];\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport type {\n GraphBuilderProvides,\n IntentResolverProvides,\n MetadataRecordsProvides,\n SurfaceProvides,\n TranslationsProvides,\n} from '@dxos/app-framework';\nimport { S } from '@dxos/echo-schema';\n\nimport { SEARCH_PLUGIN } from './meta';\n\nexport namespace SearchAction {\n const SEARCH_ACTION = `${SEARCH_PLUGIN}/action`;\n\n export class OpenSearch extends S.TaggedClass<OpenSearch>()(`${SEARCH_ACTION}/open-search`, {\n input: S.Void,\n output: S.Void,\n }) {}\n}\n\nexport type SearchPluginProvides = SurfaceProvides &\n IntentResolverProvides &\n GraphBuilderProvides &\n MetadataRecordsProvides &\n TranslationsProvides;\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { SearchPlugin } from './SearchPlugin';\n\nexport default SearchPlugin;\n\nexport * from './context';\nexport * from './search-sync';\n\nexport * from './SearchPlugin';\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["React", "resolvePlugin", "parseIntentPlugin", "parseGraphPlugin", "parseNavigationPlugin", "LayoutAction", "firstIdInPart", "createSurface", "createResolver", "createIntent", "createExtension", "getActiveSpace", "MagnifyingGlass", "React", "useEffect", "useRef", "useState", "Input", "getSize", "mx", "Searchbar", "classes", "variant", "placeholder", "value", "onChange", "inputRef", "useRef", "text", "setText", "useState", "useEffect", "handleChange", "handleReset", "undefined", "current", "focus", "div", "className", "Input", "Root", "TextInput", "ref", "classNames", "mx", "input", "target", "onKeyDown", "key", "role", "onClick", "MagnifyingGlass", "getSize", "React", "useState", "useClient", "Filter", "useQuery", "useTranslation", "groupSurface", "mx", "Buildings", "Folders", "User", "React", "forwardRef", "ScrollArea", "Card", "Mosaic", "ghostHover", "mx", "styles", "selected", "getIcon", "type", "iconMap", "user", "User", "organization", "Buildings", "project", "Folders", "Snippet", "text", "match", "content", "React", "result", "index", "undefined", "maxOffset", "before", "slice", "length", "idx", "indexOf", "after", "span", "className", "SearchItem", "forwardRef", "draggableStyle", "draggableProps", "item", "debug", "id", "label", "snippet", "onSelect", "Icon", "Card", "Root", "ref", "style", "classNames", "mx", "ghostHover", "onClick", "Header", "DragHandle", "Title", "title", "Endcap", "Body", "gutter", "pre", "JSON", "stringify", "SearchResults", "items", "path", "ScrollArea", "Viewport", "Mosaic", "Container", "Component", "map", "DraggableTile", "key", "SEARCH_RESULT", "Scrollbar", "orientation", "Thumb", "Corner", "React", "createContext", "useContext", "useMemo", "useState", "raise", "AST", "getSchema", "TextType", "queryStringToMatch", "queryString", "trimmed", "trim", "RegExp", "undefined", "getIcon", "schema", "AST", "isTypeLiteral", "ast", "keys", "propertySignatures", "map", "p", "name", "indexOf", "filterObjectsSync", "objects", "match", "reduce", "results", "object", "TextType", "fields", "mapObjectToTextFields", "Object", "entries", "some", "value", "result", "label", "getStringProperty", "push", "id", "type", "getSchema", "snippet", "content", "description", "key", "getKeys", "obj", "JSON", "parse", "stringify", "filter", "err", "String", "SearchContext", "createContext", "SearchContextProvider", "children", "match", "setMatch", "useState", "handleMatch", "text", "queryStringToMatch", "React", "Provider", "value", "useGlobalSearch", "useContext", "raise", "Error", "useGlobalSearchResults", "objects", "filterObjectsSync", "useGlobalFilteredObjects", "useMemo", "map", "result", "object", "SearchMain", "space", "t", "useTranslation", "SEARCH_PLUGIN", "client", "useClient", "setMatch", "useGlobalSearch", "allSpaces", "objects", "useQuery", "spaces", "Filter", "all", "results", "useGlobalSearchResults", "selected", "setSelected", "useState", "handleSelect", "id", "undefined", "React", "div", "className", "Searchbar", "placeholder", "onChange", "length", "mx", "groupSurface", "SearchResults", "items", "onSelect", "React", "forwardRef", "useCallback", "useState", "useResolvePlugin", "parseNavigationPlugin", "parseGraphPlugin", "NavigationAction", "LayoutAction", "isLayoutParts", "useIntentDispatcher", "createIntent", "useClient", "Filter", "fullyQualifiedId", "useQuery", "Button", "Dialog", "Icon", "toLocalizedString", "useTranslation", "SearchList", "descriptionText", "mx", "yieldOrContinue", "useEffect", "useState", "TextType", "filterObjects", "objects", "match", "result", "Map", "Promise", "all", "filter", "object", "TextType", "map", "yieldOrContinue", "fields", "mapObjectToTextFields", "Object", "entries", "_", "value", "forEach", "key", "has", "set", "get", "useSearchResults", "queryString", "delay", "results", "setResults", "useState", "pending", "setPending", "useEffect", "timeoutId", "setTimeout", "nextResults", "queryStringToMatch", "clearTimeout", "SEARCH_DIALOG", "SEARCH_PLUGIN", "SearchListResult", "forwardRef", "node", "onSelect", "forwardedRef", "t", "useTranslation", "label", "toLocalizedString", "properties", "React", "SearchList", "Item", "value", "key", "id", "classNames", "ref", "Icon", "size", "icon", "span", "className", "SearchDialog", "layoutCoordinate", "graphPlugin", "useResolvePlugin", "parseGraphPlugin", "graph", "provides", "navigationPlugin", "parseNavigationPlugin", "providedClosed", "location", "closed", "Array", "isArray", "map", "findNode", "filter", "Boolean", "active", "queryString", "setQueryString", "useState", "client", "useClient", "dangerouslyLoadAllObjects", "useQuery", "spaces", "Filter", "all", "pending", "results", "useSearchResults", "resultObjects", "from", "keys", "dispatchPromise", "dispatch", "useIntentDispatcher", "handleSelect", "useCallback", "nodeId", "isLayoutParts", "index", "main", "findIndex", "entry", "createIntent", "LayoutAction", "SetLayout", "element", "state", "ScrollIntoView", "NavigationAction", "AddToActive", "part", "pivotId", "entryId", "positioning", "Dialog", "Content", "Title", "Root", "Input", "onValueChange", "nextValue", "placeholder", "length", "object", "fullyQualifiedId", "p", "h2", "mx", "descriptionText", "Close", "asChild", "Button", "variant", "ns", "SEARCH_PLUGIN", "S", "SearchAction", "SEARCH_ACTION", "SEARCH_PLUGIN", "OpenSearch", "S", "TaggedClass", "input", "Void", "output", "SearchPlugin", "meta", "provides", "translations", "metadata", "records", "SEARCH_RESULT", "parse", "item", "type", "id", "label", "data", "object", "graph", "builder", "plugins", "dispatch", "resolvePlugin", "parseIntentPlugin", "intent", "dispatchPromise", "createExtension", "SEARCH_PLUGIN", "filter", "node", "actions", "SearchAction", "OpenSearch", "_tag", "createIntent", "properties", "ns", "icon", "keyBinding", "macos", "windows", "testId", "context", "children", "React", "SearchContextProvider", "surface", "definitions", "location", "parseNavigationPlugin", "parseGraphPlugin", "createSurface", "SEARCH_DIALOG", "role", "component", "SearchDialog", "subject", "space", "getActiveSpace", "firstIdInPart", "active", "undefined", "SearchMain", "resolvers", "createResolver", "intents", "LayoutAction", "SetLayout", "element", "state", "SearchPlugin"]
|
|
7
7
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"inputs":{"packages/plugins/experimental/plugin-search/src/components/Searchbar/Searchbar.tsx":{"bytes":5649,"imports":[{"path":"@phosphor-icons/react","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/react-ui","kind":"import-statement","external":true},{"path":"@dxos/react-ui-theme","kind":"import-statement","external":true}],"format":"esm"},"packages/plugins/experimental/plugin-search/src/components/Searchbar/index.ts":{"bytes":537,"imports":[{"path":"packages/plugins/experimental/plugin-search/src/components/Searchbar/Searchbar.tsx","kind":"import-statement","original":"./Searchbar"}],"format":"esm"},"packages/plugins/experimental/plugin-search/src/meta.ts":{"bytes":1834,"imports":[],"format":"esm"},"packages/plugins/experimental/plugin-search/src/components/SearchResults/SearchResults.tsx":{"bytes":13354,"imports":[{"path":"@phosphor-icons/react","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/react-ui","kind":"import-statement","external":true},{"path":"@dxos/react-ui-card","kind":"import-statement","external":true},{"path":"@dxos/react-ui-mosaic","kind":"import-statement","external":true},{"path":"@dxos/react-ui-theme","kind":"import-statement","external":true},{"path":"packages/plugins/experimental/plugin-search/src/meta.ts","kind":"import-statement","original":"../../meta"}],"format":"esm"},"packages/plugins/experimental/plugin-search/src/components/SearchResults/index.ts":{"bytes":553,"imports":[{"path":"packages/plugins/experimental/plugin-search/src/components/SearchResults/SearchResults.tsx","kind":"import-statement","original":"./SearchResults"}],"format":"esm"},"packages/plugins/experimental/plugin-search/src/search-sync.ts":{"bytes":12194,"imports":[{"path":"@dxos/echo-schema","kind":"import-statement","external":true},{"path":"@dxos/live-object","kind":"import-statement","external":true},{"path":"@dxos/plugin-markdown/types","kind":"import-statement","external":true}],"format":"esm"},"packages/plugins/experimental/plugin-search/src/context.tsx":{"bytes":4983,"imports":[{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/debug","kind":"import-statement","external":true},{"path":"packages/plugins/experimental/plugin-search/src/search-sync.ts","kind":"import-statement","original":"./search-sync"}],"format":"esm"},"packages/plugins/experimental/plugin-search/src/components/SearchMain.tsx":{"bytes":6406,"imports":[{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/react-client","kind":"import-statement","external":true},{"path":"@dxos/react-client/echo","kind":"import-statement","external":true},{"path":"@dxos/react-ui","kind":"import-statement","external":true},{"path":"@dxos/react-ui-theme","kind":"import-statement","external":true},{"path":"packages/plugins/experimental/plugin-search/src/components/SearchResults/index.ts","kind":"import-statement","original":"./SearchResults"},{"path":"packages/plugins/experimental/plugin-search/src/components/Searchbar/index.ts","kind":"import-statement","original":"./Searchbar"},{"path":"packages/plugins/experimental/plugin-search/src/context.tsx","kind":"import-statement","original":"../context"},{"path":"packages/plugins/experimental/plugin-search/src/meta.ts","kind":"import-statement","original":"../meta"}],"format":"esm"},"packages/plugins/experimental/plugin-search/src/search.ts":{"bytes":6795,"imports":[{"path":"main-thread-scheduling","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/plugin-markdown/types","kind":"import-statement","external":true},{"path":"packages/plugins/experimental/plugin-search/src/search-sync.ts","kind":"import-statement","original":"./search-sync"}],"format":"esm"},"packages/plugins/experimental/plugin-search/src/components/SearchDialog.tsx":{"bytes":19000,"imports":[{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/app-framework","kind":"import-statement","external":true},{"path":"@dxos/react-client","kind":"import-statement","external":true},{"path":"@dxos/react-client/echo","kind":"import-statement","external":true},{"path":"@dxos/react-ui","kind":"import-statement","external":true},{"path":"@dxos/react-ui-searchlist","kind":"import-statement","external":true},{"path":"@dxos/react-ui-theme","kind":"import-statement","external":true},{"path":"packages/plugins/experimental/plugin-search/src/meta.ts","kind":"import-statement","original":"../meta"},{"path":"packages/plugins/experimental/plugin-search/src/search.ts","kind":"import-statement","original":"../search"}],"format":"esm"},"packages/plugins/experimental/plugin-search/src/components/index.ts":{"bytes":725,"imports":[{"path":"packages/plugins/experimental/plugin-search/src/components/Searchbar/index.ts","kind":"import-statement","original":"./Searchbar"},{"path":"packages/plugins/experimental/plugin-search/src/components/SearchMain.tsx","kind":"import-statement","original":"./SearchMain"},{"path":"packages/plugins/experimental/plugin-search/src/components/SearchDialog.tsx","kind":"import-statement","original":"./SearchDialog"}],"format":"esm"},"packages/plugins/experimental/plugin-search/src/translations.ts":{"bytes":1920,"imports":[{"path":"packages/plugins/experimental/plugin-search/src/meta.ts","kind":"import-statement","original":"./meta"}],"format":"esm"},"packages/plugins/experimental/plugin-search/src/types.tsx":{"bytes":1598,"imports":[{"path":"packages/plugins/experimental/plugin-search/src/meta.ts","kind":"import-statement","original":"./meta"}],"format":"esm"},"packages/plugins/experimental/plugin-search/src/SearchPlugin.tsx":{"bytes":14689,"imports":[{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/app-framework","kind":"import-statement","external":true},{"path":"@dxos/plugin-graph","kind":"import-statement","external":true},{"path":"@dxos/plugin-space","kind":"import-statement","external":true},{"path":"packages/plugins/experimental/plugin-search/src/components/index.ts","kind":"import-statement","original":"./components"},{"path":"packages/plugins/experimental/plugin-search/src/context.tsx","kind":"import-statement","original":"./context"},{"path":"packages/plugins/experimental/plugin-search/src/meta.ts","kind":"import-statement","original":"./meta"},{"path":"packages/plugins/experimental/plugin-search/src/translations.ts","kind":"import-statement","original":"./translations"},{"path":"packages/plugins/experimental/plugin-search/src/types.tsx","kind":"import-statement","original":"./types"}],"format":"esm"},"packages/plugins/experimental/plugin-search/src/index.ts":{"bytes":985,"imports":[{"path":"packages/plugins/experimental/plugin-search/src/SearchPlugin.tsx","kind":"import-statement","original":"./SearchPlugin"},{"path":"packages/plugins/experimental/plugin-search/src/context.tsx","kind":"import-statement","original":"./context"},{"path":"packages/plugins/experimental/plugin-search/src/search-sync.ts","kind":"import-statement","original":"./search-sync"},{"path":"packages/plugins/experimental/plugin-search/src/SearchPlugin.tsx","kind":"import-statement","original":"./SearchPlugin"}],"format":"esm"}},"outputs":{"packages/plugins/experimental/plugin-search/dist/lib/browser/index.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":44275},"packages/plugins/experimental/plugin-search/dist/lib/browser/index.mjs":{"imports":[{"path":"packages/plugins/experimental/plugin-search/dist/lib/browser/chunk-4L4PWJYC.mjs","kind":"import-statement"},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/app-framework","kind":"import-statement","external":true},{"path":"@dxos/plugin-graph","kind":"import-statement","external":true},{"path":"@dxos/plugin-space","kind":"import-statement","external":true},{"path":"@phosphor-icons/react","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/react-ui","kind":"import-statement","external":true},{"path":"@dxos/react-ui-theme","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/react-client","kind":"import-statement","external":true},{"path":"@dxos/react-client/echo","kind":"import-statement","external":true},{"path":"@dxos/react-ui","kind":"import-statement","external":true},{"path":"@dxos/react-ui-theme","kind":"import-statement","external":true},{"path":"@phosphor-icons/react","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/react-ui","kind":"import-statement","external":true},{"path":"@dxos/react-ui-card","kind":"import-statement","external":true},{"path":"@dxos/react-ui-mosaic","kind":"import-statement","external":true},{"path":"@dxos/react-ui-theme","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/debug","kind":"import-statement","external":true},{"path":"@dxos/echo-schema","kind":"import-statement","external":true},{"path":"@dxos/live-object","kind":"import-statement","external":true},{"path":"@dxos/plugin-markdown/types","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/app-framework","kind":"import-statement","external":true},{"path":"@dxos/react-client","kind":"import-statement","external":true},{"path":"@dxos/react-client/echo","kind":"import-statement","external":true},{"path":"@dxos/react-ui","kind":"import-statement","external":true},{"path":"@dxos/react-ui-searchlist","kind":"import-statement","external":true},{"path":"@dxos/react-ui-theme","kind":"import-statement","external":true},{"path":"main-thread-scheduling","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/plugin-markdown/types","kind":"import-statement","external":true}],"exports":["SearchContextProvider","SearchPlugin","default","filterObjectsSync","mapObjectToTextFields","queryStringToMatch","useGlobalFilteredObjects","useGlobalSearch","useGlobalSearchResults"],"entryPoint":"packages/plugins/experimental/plugin-search/src/index.ts","inputs":{"packages/plugins/experimental/plugin-search/src/SearchPlugin.tsx":{"bytesInOutput":3648},"packages/plugins/experimental/plugin-search/src/components/Searchbar/Searchbar.tsx":{"bytesInOutput":1299},"packages/plugins/experimental/plugin-search/src/components/Searchbar/index.ts":{"bytesInOutput":0},"packages/plugins/experimental/plugin-search/src/components/index.ts":{"bytesInOutput":0},"packages/plugins/experimental/plugin-search/src/components/SearchMain.tsx":{"bytesInOutput":1342},"packages/plugins/experimental/plugin-search/src/components/SearchResults/SearchResults.tsx":{"bytesInOutput":3342},"packages/plugins/experimental/plugin-search/src/components/SearchResults/index.ts":{"bytesInOutput":0},"packages/plugins/experimental/plugin-search/src/context.tsx":{"bytesInOutput":1026},"packages/plugins/experimental/plugin-search/src/search-sync.ts":{"bytesInOutput":2363},"packages/plugins/experimental/plugin-search/src/components/SearchDialog.tsx":{"bytesInOutput":5035},"packages/plugins/experimental/plugin-search/src/search.ts":{"bytesInOutput":1487},"packages/plugins/experimental/plugin-search/src/translations.ts":{"bytesInOutput":436},"packages/plugins/experimental/plugin-search/src/types.tsx":{"bytesInOutput":214},"packages/plugins/experimental/plugin-search/src/index.ts":{"bytesInOutput":32}},"bytes":21651},"packages/plugins/experimental/plugin-search/dist/lib/browser/meta.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":93},"packages/plugins/experimental/plugin-search/dist/lib/browser/meta.mjs":{"imports":[{"path":"packages/plugins/experimental/plugin-search/dist/lib/browser/chunk-4L4PWJYC.mjs","kind":"import-statement"}],"exports":["SEARCH_PLUGIN","SEARCH_RESULT","default"],"entryPoint":"packages/plugins/experimental/plugin-search/src/meta.ts","inputs":{},"bytes":195},"packages/plugins/experimental/plugin-search/dist/lib/browser/chunk-4L4PWJYC.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":860},"packages/plugins/experimental/plugin-search/dist/lib/browser/chunk-4L4PWJYC.mjs":{"imports":[],"exports":["SEARCH_PLUGIN","SEARCH_RESULT","meta_default"],"inputs":{"packages/plugins/experimental/plugin-search/src/meta.ts":{"bytesInOutput":376}},"bytes":541}}}
|
|
1
|
+
{"inputs":{"packages/plugins/experimental/plugin-search/src/components/Searchbar/Searchbar.tsx":{"bytes":5649,"imports":[{"path":"@phosphor-icons/react","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/react-ui","kind":"import-statement","external":true},{"path":"@dxos/react-ui-theme","kind":"import-statement","external":true}],"format":"esm"},"packages/plugins/experimental/plugin-search/src/components/Searchbar/index.ts":{"bytes":537,"imports":[{"path":"packages/plugins/experimental/plugin-search/src/components/Searchbar/Searchbar.tsx","kind":"import-statement","original":"./Searchbar"}],"format":"esm"},"packages/plugins/experimental/plugin-search/src/meta.ts":{"bytes":1834,"imports":[],"format":"esm"},"packages/plugins/experimental/plugin-search/src/components/SearchResults/SearchResults.tsx":{"bytes":13354,"imports":[{"path":"@phosphor-icons/react","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/react-ui","kind":"import-statement","external":true},{"path":"@dxos/react-ui-card","kind":"import-statement","external":true},{"path":"@dxos/react-ui-mosaic","kind":"import-statement","external":true},{"path":"@dxos/react-ui-theme","kind":"import-statement","external":true},{"path":"packages/plugins/experimental/plugin-search/src/meta.ts","kind":"import-statement","original":"../../meta"}],"format":"esm"},"packages/plugins/experimental/plugin-search/src/components/SearchResults/index.ts":{"bytes":553,"imports":[{"path":"packages/plugins/experimental/plugin-search/src/components/SearchResults/SearchResults.tsx","kind":"import-statement","original":"./SearchResults"}],"format":"esm"},"packages/plugins/experimental/plugin-search/src/search-sync.ts":{"bytes":12194,"imports":[{"path":"@dxos/echo-schema","kind":"import-statement","external":true},{"path":"@dxos/live-object","kind":"import-statement","external":true},{"path":"@dxos/plugin-markdown/types","kind":"import-statement","external":true}],"format":"esm"},"packages/plugins/experimental/plugin-search/src/context.tsx":{"bytes":4983,"imports":[{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/debug","kind":"import-statement","external":true},{"path":"packages/plugins/experimental/plugin-search/src/search-sync.ts","kind":"import-statement","original":"./search-sync"}],"format":"esm"},"packages/plugins/experimental/plugin-search/src/components/SearchMain.tsx":{"bytes":6406,"imports":[{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/react-client","kind":"import-statement","external":true},{"path":"@dxos/react-client/echo","kind":"import-statement","external":true},{"path":"@dxos/react-ui","kind":"import-statement","external":true},{"path":"@dxos/react-ui-theme","kind":"import-statement","external":true},{"path":"packages/plugins/experimental/plugin-search/src/components/SearchResults/index.ts","kind":"import-statement","original":"./SearchResults"},{"path":"packages/plugins/experimental/plugin-search/src/components/Searchbar/index.ts","kind":"import-statement","original":"./Searchbar"},{"path":"packages/plugins/experimental/plugin-search/src/context.tsx","kind":"import-statement","original":"../context"},{"path":"packages/plugins/experimental/plugin-search/src/meta.ts","kind":"import-statement","original":"../meta"}],"format":"esm"},"packages/plugins/experimental/plugin-search/src/search.ts":{"bytes":6795,"imports":[{"path":"main-thread-scheduling","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/plugin-markdown/types","kind":"import-statement","external":true},{"path":"packages/plugins/experimental/plugin-search/src/search-sync.ts","kind":"import-statement","original":"./search-sync"}],"format":"esm"},"packages/plugins/experimental/plugin-search/src/components/SearchDialog.tsx":{"bytes":18671,"imports":[{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/app-framework","kind":"import-statement","external":true},{"path":"@dxos/react-client","kind":"import-statement","external":true},{"path":"@dxos/react-client/echo","kind":"import-statement","external":true},{"path":"@dxos/react-ui","kind":"import-statement","external":true},{"path":"@dxos/react-ui-searchlist","kind":"import-statement","external":true},{"path":"@dxos/react-ui-theme","kind":"import-statement","external":true},{"path":"packages/plugins/experimental/plugin-search/src/meta.ts","kind":"import-statement","original":"../meta"},{"path":"packages/plugins/experimental/plugin-search/src/search.ts","kind":"import-statement","original":"../search"}],"format":"esm"},"packages/plugins/experimental/plugin-search/src/components/index.ts":{"bytes":725,"imports":[{"path":"packages/plugins/experimental/plugin-search/src/components/Searchbar/index.ts","kind":"import-statement","original":"./Searchbar"},{"path":"packages/plugins/experimental/plugin-search/src/components/SearchMain.tsx","kind":"import-statement","original":"./SearchMain"},{"path":"packages/plugins/experimental/plugin-search/src/components/SearchDialog.tsx","kind":"import-statement","original":"./SearchDialog"}],"format":"esm"},"packages/plugins/experimental/plugin-search/src/translations.ts":{"bytes":1920,"imports":[{"path":"packages/plugins/experimental/plugin-search/src/meta.ts","kind":"import-statement","original":"./meta"}],"format":"esm"},"packages/plugins/experimental/plugin-search/src/types.tsx":{"bytes":2214,"imports":[{"path":"@dxos/echo-schema","kind":"import-statement","external":true},{"path":"packages/plugins/experimental/plugin-search/src/meta.ts","kind":"import-statement","original":"./meta"}],"format":"esm"},"packages/plugins/experimental/plugin-search/src/SearchPlugin.tsx":{"bytes":13959,"imports":[{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/app-framework","kind":"import-statement","external":true},{"path":"@dxos/plugin-graph","kind":"import-statement","external":true},{"path":"@dxos/plugin-space","kind":"import-statement","external":true},{"path":"packages/plugins/experimental/plugin-search/src/components/index.ts","kind":"import-statement","original":"./components"},{"path":"packages/plugins/experimental/plugin-search/src/context.tsx","kind":"import-statement","original":"./context"},{"path":"packages/plugins/experimental/plugin-search/src/meta.ts","kind":"import-statement","original":"./meta"},{"path":"packages/plugins/experimental/plugin-search/src/translations.ts","kind":"import-statement","original":"./translations"},{"path":"packages/plugins/experimental/plugin-search/src/types.tsx","kind":"import-statement","original":"./types"}],"format":"esm"},"packages/plugins/experimental/plugin-search/src/index.ts":{"bytes":985,"imports":[{"path":"packages/plugins/experimental/plugin-search/src/SearchPlugin.tsx","kind":"import-statement","original":"./SearchPlugin"},{"path":"packages/plugins/experimental/plugin-search/src/context.tsx","kind":"import-statement","original":"./context"},{"path":"packages/plugins/experimental/plugin-search/src/search-sync.ts","kind":"import-statement","original":"./search-sync"},{"path":"packages/plugins/experimental/plugin-search/src/SearchPlugin.tsx","kind":"import-statement","original":"./SearchPlugin"}],"format":"esm"}},"outputs":{"packages/plugins/experimental/plugin-search/dist/lib/browser/index.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":44436},"packages/plugins/experimental/plugin-search/dist/lib/browser/index.mjs":{"imports":[{"path":"packages/plugins/experimental/plugin-search/dist/lib/browser/chunk-4L4PWJYC.mjs","kind":"import-statement"},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/app-framework","kind":"import-statement","external":true},{"path":"@dxos/plugin-graph","kind":"import-statement","external":true},{"path":"@dxos/plugin-space","kind":"import-statement","external":true},{"path":"@phosphor-icons/react","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/react-ui","kind":"import-statement","external":true},{"path":"@dxos/react-ui-theme","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/react-client","kind":"import-statement","external":true},{"path":"@dxos/react-client/echo","kind":"import-statement","external":true},{"path":"@dxos/react-ui","kind":"import-statement","external":true},{"path":"@dxos/react-ui-theme","kind":"import-statement","external":true},{"path":"@phosphor-icons/react","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/react-ui","kind":"import-statement","external":true},{"path":"@dxos/react-ui-card","kind":"import-statement","external":true},{"path":"@dxos/react-ui-mosaic","kind":"import-statement","external":true},{"path":"@dxos/react-ui-theme","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/debug","kind":"import-statement","external":true},{"path":"@dxos/echo-schema","kind":"import-statement","external":true},{"path":"@dxos/live-object","kind":"import-statement","external":true},{"path":"@dxos/plugin-markdown/types","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/app-framework","kind":"import-statement","external":true},{"path":"@dxos/react-client","kind":"import-statement","external":true},{"path":"@dxos/react-client/echo","kind":"import-statement","external":true},{"path":"@dxos/react-ui","kind":"import-statement","external":true},{"path":"@dxos/react-ui-searchlist","kind":"import-statement","external":true},{"path":"@dxos/react-ui-theme","kind":"import-statement","external":true},{"path":"main-thread-scheduling","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/plugin-markdown/types","kind":"import-statement","external":true},{"path":"@dxos/echo-schema","kind":"import-statement","external":true}],"exports":["SearchContextProvider","SearchPlugin","default","filterObjectsSync","mapObjectToTextFields","queryStringToMatch","useGlobalFilteredObjects","useGlobalSearch","useGlobalSearchResults"],"entryPoint":"packages/plugins/experimental/plugin-search/src/index.ts","inputs":{"packages/plugins/experimental/plugin-search/src/SearchPlugin.tsx":{"bytesInOutput":3442},"packages/plugins/experimental/plugin-search/src/components/Searchbar/Searchbar.tsx":{"bytesInOutput":1299},"packages/plugins/experimental/plugin-search/src/components/Searchbar/index.ts":{"bytesInOutput":0},"packages/plugins/experimental/plugin-search/src/components/index.ts":{"bytesInOutput":0},"packages/plugins/experimental/plugin-search/src/components/SearchMain.tsx":{"bytesInOutput":1342},"packages/plugins/experimental/plugin-search/src/components/SearchResults/SearchResults.tsx":{"bytesInOutput":3342},"packages/plugins/experimental/plugin-search/src/components/SearchResults/index.ts":{"bytesInOutput":0},"packages/plugins/experimental/plugin-search/src/context.tsx":{"bytesInOutput":1026},"packages/plugins/experimental/plugin-search/src/search-sync.ts":{"bytesInOutput":2363},"packages/plugins/experimental/plugin-search/src/components/SearchDialog.tsx":{"bytesInOutput":4907},"packages/plugins/experimental/plugin-search/src/search.ts":{"bytesInOutput":1487},"packages/plugins/experimental/plugin-search/src/translations.ts":{"bytesInOutput":436},"packages/plugins/experimental/plugin-search/src/types.tsx":{"bytesInOutput":343},"packages/plugins/experimental/plugin-search/src/index.ts":{"bytesInOutput":32}},"bytes":21446},"packages/plugins/experimental/plugin-search/dist/lib/browser/meta.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":93},"packages/plugins/experimental/plugin-search/dist/lib/browser/meta.mjs":{"imports":[{"path":"packages/plugins/experimental/plugin-search/dist/lib/browser/chunk-4L4PWJYC.mjs","kind":"import-statement"}],"exports":["SEARCH_PLUGIN","SEARCH_RESULT","default"],"entryPoint":"packages/plugins/experimental/plugin-search/src/meta.ts","inputs":{},"bytes":195},"packages/plugins/experimental/plugin-search/dist/lib/browser/chunk-4L4PWJYC.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":860},"packages/plugins/experimental/plugin-search/dist/lib/browser/chunk-4L4PWJYC.mjs":{"imports":[],"exports":["SEARCH_PLUGIN","SEARCH_RESULT","meta_default"],"inputs":{"packages/plugins/experimental/plugin-search/src/meta.ts":{"bytesInOutput":376}},"bytes":541}}}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SearchPlugin.d.ts","sourceRoot":"","sources":["../../../src/SearchPlugin.tsx"],"names":[],"mappings":"AAMA,OAAO,EACL,KAAK,gBAAgB,EAUtB,MAAM,qBAAqB,CAAC;AAS7B,OAAO,EAAgB,KAAK,oBAAoB,EAAE,MAAM,SAAS,CAAC;AAElE,eAAO,MAAM,YAAY,QAAO,gBAAgB,CAAC,oBAAoB,
|
|
1
|
+
{"version":3,"file":"SearchPlugin.d.ts","sourceRoot":"","sources":["../../../src/SearchPlugin.tsx"],"names":[],"mappings":"AAMA,OAAO,EACL,KAAK,gBAAgB,EAUtB,MAAM,qBAAqB,CAAC;AAS7B,OAAO,EAAgB,KAAK,oBAAoB,EAAE,MAAM,SAAS,CAAC;AAElE,eAAO,MAAM,YAAY,QAAO,gBAAgB,CAAC,oBAAoB,CAiFpE,CAAC"}
|
|
@@ -1,10 +1,8 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
|
-
import {
|
|
3
|
-
export declare const
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
};
|
|
9
|
-
}) => React.JSX.Element;
|
|
2
|
+
import { type LayoutCoordinate } from '@dxos/app-framework';
|
|
3
|
+
export declare const SEARCH_DIALOG = "dxos.org/plugin/search/SearchDialog";
|
|
4
|
+
export type SearchDialogProps = {
|
|
5
|
+
layoutCoordinate: LayoutCoordinate;
|
|
6
|
+
};
|
|
7
|
+
export declare const SearchDialog: ({ layoutCoordinate }: SearchDialogProps) => React.JSX.Element;
|
|
10
8
|
//# sourceMappingURL=SearchDialog.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SearchDialog.d.ts","sourceRoot":"","sources":["../../../../src/components/SearchDialog.tsx"],"names":[],"mappings":"AAIA,OAAO,KAA4C,MAAM,OAAO,CAAC;AAEjE,OAAO,
|
|
1
|
+
{"version":3,"file":"SearchDialog.d.ts","sourceRoot":"","sources":["../../../../src/components/SearchDialog.tsx"],"names":[],"mappings":"AAIA,OAAO,KAA4C,MAAM,OAAO,CAAC;AAEjE,OAAO,EAML,KAAK,gBAAgB,EAItB,MAAM,qBAAqB,CAAC;AAW7B,eAAO,MAAM,aAAa,wCAAkC,CAAC;AAuB7D,MAAM,MAAM,iBAAiB,GAAG;IAC9B,gBAAgB,EAAE,gBAAgB,CAAC;CACpC,CAAC;AAEF,eAAO,MAAM,YAAY,yBAA0B,iBAAiB,sBAmFnE,CAAC"}
|
|
@@ -1,6 +1,15 @@
|
|
|
1
1
|
import type { GraphBuilderProvides, IntentResolverProvides, MetadataRecordsProvides, SurfaceProvides, TranslationsProvides } from '@dxos/app-framework';
|
|
2
|
-
|
|
3
|
-
|
|
2
|
+
import { S } from '@dxos/echo-schema';
|
|
3
|
+
export declare namespace SearchAction {
|
|
4
|
+
const OpenSearch_base: S.TaggedClass<OpenSearch, "dxos.org/plugin/search/action/open-search", {
|
|
5
|
+
readonly _tag: S.tag<"dxos.org/plugin/search/action/open-search">;
|
|
6
|
+
} & {
|
|
7
|
+
input: typeof S.Void;
|
|
8
|
+
output: typeof S.Void;
|
|
9
|
+
}>;
|
|
10
|
+
export class OpenSearch extends OpenSearch_base {
|
|
11
|
+
}
|
|
12
|
+
export {};
|
|
4
13
|
}
|
|
5
14
|
export type SearchPluginProvides = SurfaceProvides & IntentResolverProvides & GraphBuilderProvides & MetadataRecordsProvides & TranslationsProvides;
|
|
6
15
|
//# sourceMappingURL=types.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/types.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,EACV,oBAAoB,EACpB,sBAAsB,EACtB,uBAAuB,EACvB,eAAe,EACf,oBAAoB,EACrB,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/types.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,EACV,oBAAoB,EACpB,sBAAsB,EACtB,uBAAuB,EACvB,eAAe,EACf,oBAAoB,EACrB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,CAAC,EAAE,MAAM,mBAAmB,CAAC;AAItC,yBAAiB,YAAY,CAAC;;;;;;;IAG5B,MAAM,OAAO,UAAW,SAAQ,eAG9B;KAAG;;CACN;AAED,MAAM,MAAM,oBAAoB,GAAG,eAAe,GAChD,sBAAsB,GACtB,oBAAoB,GACpB,uBAAuB,GACvB,oBAAoB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":"5.7.2"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@dxos/plugin-search",
|
|
3
|
-
"version": "0.7.
|
|
3
|
+
"version": "0.7.5-main.9cb18ac",
|
|
4
4
|
"description": "Braneframe sketch plugin",
|
|
5
5
|
"homepage": "https://dxos.org",
|
|
6
6
|
"bugs": "https://github.com/dxos/dxos/issues",
|
|
@@ -32,17 +32,17 @@
|
|
|
32
32
|
"dependencies": {
|
|
33
33
|
"@effect/schema": "^0.75.5",
|
|
34
34
|
"main-thread-scheduling": "^14.1.1",
|
|
35
|
-
"@dxos/app-framework": "0.7.
|
|
36
|
-
"@dxos/
|
|
37
|
-
"@dxos/live-object": "0.7.
|
|
38
|
-
"@dxos/
|
|
39
|
-
"@dxos/plugin-graph": "0.7.
|
|
40
|
-
"@dxos/plugin-
|
|
41
|
-
"@dxos/react-client": "0.7.
|
|
42
|
-
"@dxos/
|
|
43
|
-
"@dxos/react-ui-
|
|
44
|
-
"@dxos/
|
|
45
|
-
"@dxos/react-ui-searchlist": "0.7.
|
|
35
|
+
"@dxos/app-framework": "0.7.5-main.9cb18ac",
|
|
36
|
+
"@dxos/echo-schema": "0.7.5-main.9cb18ac",
|
|
37
|
+
"@dxos/live-object": "0.7.5-main.9cb18ac",
|
|
38
|
+
"@dxos/debug": "0.7.5-main.9cb18ac",
|
|
39
|
+
"@dxos/plugin-graph": "0.7.5-main.9cb18ac",
|
|
40
|
+
"@dxos/plugin-markdown": "0.7.5-main.9cb18ac",
|
|
41
|
+
"@dxos/react-client": "0.7.5-main.9cb18ac",
|
|
42
|
+
"@dxos/react-ui-card": "0.7.5-main.9cb18ac",
|
|
43
|
+
"@dxos/react-ui-mosaic": "0.7.5-main.9cb18ac",
|
|
44
|
+
"@dxos/plugin-space": "0.7.5-main.9cb18ac",
|
|
45
|
+
"@dxos/react-ui-searchlist": "0.7.5-main.9cb18ac"
|
|
46
46
|
},
|
|
47
47
|
"devDependencies": {
|
|
48
48
|
"@phosphor-icons/react": "^2.1.5",
|
|
@@ -51,17 +51,17 @@
|
|
|
51
51
|
"react": "~18.2.0",
|
|
52
52
|
"react-dom": "~18.2.0",
|
|
53
53
|
"vite": "5.4.7",
|
|
54
|
-
"@dxos/random": "0.7.
|
|
55
|
-
"@dxos/react-ui": "0.7.
|
|
56
|
-
"@dxos/react-ui-theme": "0.7.
|
|
57
|
-
"@dxos/storybook-utils": "0.7.
|
|
54
|
+
"@dxos/random": "0.7.5-main.9cb18ac",
|
|
55
|
+
"@dxos/react-ui": "0.7.5-main.9cb18ac",
|
|
56
|
+
"@dxos/react-ui-theme": "0.7.5-main.9cb18ac",
|
|
57
|
+
"@dxos/storybook-utils": "0.7.5-main.9cb18ac"
|
|
58
58
|
},
|
|
59
59
|
"peerDependencies": {
|
|
60
60
|
"@phosphor-icons/react": "^2.1.5",
|
|
61
61
|
"react": "~18.2.0",
|
|
62
62
|
"react-dom": "~18.2.0",
|
|
63
|
-
"@dxos/react-ui": "0.7.
|
|
64
|
-
"@dxos/react-ui-theme": "0.7.
|
|
63
|
+
"@dxos/react-ui": "0.7.5-main.9cb18ac",
|
|
64
|
+
"@dxos/react-ui-theme": "0.7.5-main.9cb18ac"
|
|
65
65
|
},
|
|
66
66
|
"publishConfig": {
|
|
67
67
|
"access": "public"
|
package/src/SearchPlugin.tsx
CHANGED
|
@@ -6,20 +6,20 @@ import React from 'react';
|
|
|
6
6
|
|
|
7
7
|
import {
|
|
8
8
|
type PluginDefinition,
|
|
9
|
-
type LocationProvides,
|
|
10
|
-
type GraphProvides,
|
|
11
|
-
type Plugin,
|
|
12
9
|
resolvePlugin,
|
|
13
10
|
parseIntentPlugin,
|
|
14
11
|
parseGraphPlugin,
|
|
15
12
|
parseNavigationPlugin,
|
|
16
13
|
LayoutAction,
|
|
17
14
|
firstIdInPart,
|
|
15
|
+
createSurface,
|
|
16
|
+
createResolver,
|
|
17
|
+
createIntent,
|
|
18
18
|
} from '@dxos/app-framework';
|
|
19
19
|
import { createExtension, type Node } from '@dxos/plugin-graph';
|
|
20
20
|
import { getActiveSpace } from '@dxos/plugin-space';
|
|
21
21
|
|
|
22
|
-
import { SearchDialog, SearchMain } from './components';
|
|
22
|
+
import { SEARCH_DIALOG, SearchDialog, type SearchDialogProps, SearchMain } from './components';
|
|
23
23
|
import { SearchContextProvider } from './context';
|
|
24
24
|
import meta, { SEARCH_PLUGIN, SEARCH_RESULT } from './meta';
|
|
25
25
|
import type { SearchResult } from './search-sync';
|
|
@@ -27,15 +27,8 @@ import translations from './translations';
|
|
|
27
27
|
import { SearchAction, type SearchPluginProvides } from './types';
|
|
28
28
|
|
|
29
29
|
export const SearchPlugin = (): PluginDefinition<SearchPluginProvides> => {
|
|
30
|
-
let navigationPlugin: Plugin<LocationProvides> | undefined;
|
|
31
|
-
let graphPlugin: Plugin<GraphProvides> | undefined;
|
|
32
|
-
|
|
33
30
|
return {
|
|
34
31
|
meta,
|
|
35
|
-
ready: async (plugins) => {
|
|
36
|
-
navigationPlugin = resolvePlugin(plugins, parseNavigationPlugin);
|
|
37
|
-
graphPlugin = resolvePlugin(plugins, parseGraphPlugin);
|
|
38
|
-
},
|
|
39
32
|
provides: {
|
|
40
33
|
translations,
|
|
41
34
|
metadata: {
|
|
@@ -56,18 +49,16 @@ export const SearchPlugin = (): PluginDefinition<SearchPluginProvides> => {
|
|
|
56
49
|
},
|
|
57
50
|
graph: {
|
|
58
51
|
builder: (plugins) => {
|
|
59
|
-
const
|
|
52
|
+
const dispatch = resolvePlugin(plugins, parseIntentPlugin)?.provides.intent.dispatchPromise;
|
|
53
|
+
|
|
60
54
|
return createExtension({
|
|
61
55
|
id: SEARCH_PLUGIN,
|
|
62
56
|
filter: (node): node is Node<null> => node.id === 'root',
|
|
63
57
|
actions: () => [
|
|
64
58
|
{
|
|
65
|
-
id: SearchAction.
|
|
59
|
+
id: SearchAction.OpenSearch._tag,
|
|
66
60
|
data: async () => {
|
|
67
|
-
await
|
|
68
|
-
plugin: SEARCH_PLUGIN,
|
|
69
|
-
action: SearchAction.SEARCH,
|
|
70
|
-
});
|
|
61
|
+
await dispatch?.(createIntent(SearchAction.OpenSearch));
|
|
71
62
|
},
|
|
72
63
|
properties: {
|
|
73
64
|
label: ['search action label', { ns: SEARCH_PLUGIN }],
|
|
@@ -85,35 +76,34 @@ export const SearchPlugin = (): PluginDefinition<SearchPluginProvides> => {
|
|
|
85
76
|
},
|
|
86
77
|
context: ({ children }) => <SearchContextProvider>{children}</SearchContextProvider>,
|
|
87
78
|
surface: {
|
|
88
|
-
|
|
89
|
-
const location =
|
|
90
|
-
const graph =
|
|
91
|
-
const space = graph && location ? getActiveSpace(graph, firstIdInPart(location.active, 'main')) : undefined;
|
|
79
|
+
definitions: ({ plugins }) => {
|
|
80
|
+
const location = resolvePlugin(plugins, parseNavigationPlugin)?.provides.location;
|
|
81
|
+
const graph = resolvePlugin(plugins, parseGraphPlugin)?.provides.graph;
|
|
92
82
|
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
) :
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
83
|
+
return [
|
|
84
|
+
createSurface({
|
|
85
|
+
id: SEARCH_DIALOG,
|
|
86
|
+
role: 'dialog',
|
|
87
|
+
filter: (data): data is { subject: SearchDialogProps } => data.component === SEARCH_DIALOG,
|
|
88
|
+
component: ({ data }) => <SearchDialog {...data.subject} />,
|
|
89
|
+
}),
|
|
90
|
+
createSurface({
|
|
91
|
+
id: 'search-input',
|
|
92
|
+
role: 'search-input',
|
|
93
|
+
component: () => {
|
|
94
|
+
const space =
|
|
95
|
+
graph && location ? getActiveSpace(graph, firstIdInPart(location.active, 'main')) : undefined;
|
|
96
|
+
return space ? <SearchMain space={space} /> : null;
|
|
97
|
+
},
|
|
98
|
+
}),
|
|
99
|
+
];
|
|
103
100
|
},
|
|
104
101
|
},
|
|
105
102
|
intent: {
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
return intentPlugin?.provides.intent.dispatch({
|
|
111
|
-
action: LayoutAction.SET_LAYOUT,
|
|
112
|
-
data: { element: 'complementary', state: true },
|
|
113
|
-
});
|
|
114
|
-
}
|
|
115
|
-
}
|
|
116
|
-
},
|
|
103
|
+
resolvers: () =>
|
|
104
|
+
createResolver(SearchAction.OpenSearch, () => ({
|
|
105
|
+
intents: [createIntent(LayoutAction.SetLayout, { element: 'complementary', state: true })],
|
|
106
|
+
})),
|
|
117
107
|
},
|
|
118
108
|
},
|
|
119
109
|
};
|
|
@@ -13,6 +13,7 @@ import {
|
|
|
13
13
|
type LayoutCoordinate,
|
|
14
14
|
isLayoutParts,
|
|
15
15
|
useIntentDispatcher,
|
|
16
|
+
createIntent,
|
|
16
17
|
} from '@dxos/app-framework';
|
|
17
18
|
import { type Node } from '@dxos/plugin-graph';
|
|
18
19
|
import { useClient } from '@dxos/react-client';
|
|
@@ -24,6 +25,8 @@ import { descriptionText, mx } from '@dxos/react-ui-theme';
|
|
|
24
25
|
import { SEARCH_PLUGIN } from '../meta';
|
|
25
26
|
import { useSearchResults } from '../search';
|
|
26
27
|
|
|
28
|
+
export const SEARCH_DIALOG = `${SEARCH_PLUGIN}/SearchDialog`;
|
|
29
|
+
|
|
27
30
|
type SearchListResultProps = {
|
|
28
31
|
node: Node;
|
|
29
32
|
} & Pick<SearchListItemProps, 'onSelect'>;
|
|
@@ -45,11 +48,11 @@ const SearchListResult = forwardRef<HTMLDivElement, SearchListResultProps>(({ no
|
|
|
45
48
|
);
|
|
46
49
|
});
|
|
47
50
|
|
|
48
|
-
export
|
|
49
|
-
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
}) => {
|
|
51
|
+
export type SearchDialogProps = {
|
|
52
|
+
layoutCoordinate: LayoutCoordinate;
|
|
53
|
+
};
|
|
54
|
+
|
|
55
|
+
export const SearchDialog = ({ layoutCoordinate }: SearchDialogProps) => {
|
|
53
56
|
const { t } = useTranslation(SEARCH_PLUGIN);
|
|
54
57
|
const graphPlugin = useResolvePlugin(parseGraphPlugin);
|
|
55
58
|
const graph = graphPlugin?.provides.graph;
|
|
@@ -64,36 +67,32 @@ export const SearchDialog = ({
|
|
|
64
67
|
const dangerouslyLoadAllObjects = useQuery(client.spaces, Filter.all());
|
|
65
68
|
const [pending, results] = useSearchResults(queryString, dangerouslyLoadAllObjects);
|
|
66
69
|
const resultObjects = Array.from(results.keys());
|
|
67
|
-
const dispatch = useIntentDispatcher();
|
|
70
|
+
const { dispatchPromise: dispatch } = useIntentDispatcher();
|
|
68
71
|
|
|
69
72
|
const handleSelect = useCallback(
|
|
70
|
-
(nodeId: string) => {
|
|
73
|
+
async (nodeId: string) => {
|
|
71
74
|
if (active && isLayoutParts(active)) {
|
|
72
75
|
// If node is already present in the active parts, scroll to it and close the dialog.
|
|
73
76
|
const index = active?.main?.findIndex((entry) => entry.id === nodeId);
|
|
74
77
|
if (index !== -1) {
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
]);
|
|
78
|
+
await dispatch(createIntent(LayoutAction.SetLayout, { element: 'dialog', state: false }));
|
|
79
|
+
await dispatch(createIntent(LayoutAction.ScrollIntoView, { id: nodeId }));
|
|
80
|
+
return;
|
|
79
81
|
}
|
|
80
82
|
|
|
81
|
-
|
|
82
|
-
{
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
{ action: LayoutAction.SET_LAYOUT, data: { element: 'dialog', state: false } },
|
|
92
|
-
{ action: LayoutAction.SCROLL_INTO_VIEW, data: { id: nodeId } },
|
|
93
|
-
]);
|
|
83
|
+
await dispatch(
|
|
84
|
+
createIntent(NavigationAction.AddToActive, {
|
|
85
|
+
part: layoutCoordinate.part,
|
|
86
|
+
id: nodeId,
|
|
87
|
+
pivotId: layoutCoordinate.entryId,
|
|
88
|
+
positioning: 'end',
|
|
89
|
+
}),
|
|
90
|
+
);
|
|
91
|
+
await dispatch(createIntent(LayoutAction.SetLayout, { element: 'dialog', state: false }));
|
|
92
|
+
await dispatch(createIntent(LayoutAction.ScrollIntoView, { id: nodeId }));
|
|
94
93
|
}
|
|
95
94
|
},
|
|
96
|
-
[
|
|
95
|
+
[layoutCoordinate, dispatch, active],
|
|
97
96
|
);
|
|
98
97
|
|
|
99
98
|
return (
|
package/src/types.tsx
CHANGED
|
@@ -9,13 +9,17 @@ import type {
|
|
|
9
9
|
SurfaceProvides,
|
|
10
10
|
TranslationsProvides,
|
|
11
11
|
} from '@dxos/app-framework';
|
|
12
|
+
import { S } from '@dxos/echo-schema';
|
|
12
13
|
|
|
13
14
|
import { SEARCH_PLUGIN } from './meta';
|
|
14
15
|
|
|
15
|
-
|
|
16
|
+
export namespace SearchAction {
|
|
17
|
+
const SEARCH_ACTION = `${SEARCH_PLUGIN}/action`;
|
|
16
18
|
|
|
17
|
-
export
|
|
18
|
-
|
|
19
|
+
export class OpenSearch extends S.TaggedClass<OpenSearch>()(`${SEARCH_ACTION}/open-search`, {
|
|
20
|
+
input: S.Void,
|
|
21
|
+
output: S.Void,
|
|
22
|
+
}) {}
|
|
19
23
|
}
|
|
20
24
|
|
|
21
25
|
export type SearchPluginProvides = SurfaceProvides &
|