@dxos/plugin-search 0.7.5-main.9d26e3a → 0.7.5-main.b19bfc8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (57) hide show
  1. package/dist/lib/browser/app-graph-builder-4C2ZPCED.mjs +41 -0
  2. package/dist/lib/browser/app-graph-builder-4C2ZPCED.mjs.map +7 -0
  3. package/dist/lib/browser/{chunk-4L4PWJYC.mjs → chunk-B532NWHM.mjs} +3 -3
  4. package/dist/lib/browser/chunk-B532NWHM.mjs.map +7 -0
  5. package/dist/lib/browser/chunk-GGOOQO2C.mjs +133 -0
  6. package/dist/lib/browser/chunk-GGOOQO2C.mjs.map +7 -0
  7. package/dist/lib/browser/chunk-Z745WIBH.mjs +21 -0
  8. package/dist/lib/browser/chunk-Z745WIBH.mjs.map +7 -0
  9. package/dist/lib/browser/index.mjs +61 -557
  10. package/dist/lib/browser/index.mjs.map +4 -4
  11. package/dist/lib/browser/intent-resolver-MKBD2LPH.mjs +22 -0
  12. package/dist/lib/browser/intent-resolver-MKBD2LPH.mjs.map +7 -0
  13. package/dist/lib/browser/meta.json +1 -1
  14. package/dist/lib/browser/react-surface-ZFFHKFME.mjs +343 -0
  15. package/dist/lib/browser/react-surface-ZFFHKFME.mjs.map +7 -0
  16. package/dist/types/src/SearchPlugin.d.ts +1 -3
  17. package/dist/types/src/SearchPlugin.d.ts.map +1 -1
  18. package/dist/types/src/capabilities/app-graph-builder.d.ts +181 -0
  19. package/dist/types/src/capabilities/app-graph-builder.d.ts.map +1 -0
  20. package/dist/types/src/capabilities/index.d.ts +180 -0
  21. package/dist/types/src/capabilities/index.d.ts.map +1 -0
  22. package/dist/types/src/capabilities/intent-resolver.d.ts +4 -0
  23. package/dist/types/src/capabilities/intent-resolver.d.ts.map +1 -0
  24. package/dist/types/src/capabilities/react-surface.d.ts +4 -0
  25. package/dist/types/src/capabilities/react-surface.d.ts.map +1 -0
  26. package/dist/types/src/components/SearchDialog.d.ts +2 -4
  27. package/dist/types/src/components/SearchDialog.d.ts.map +1 -1
  28. package/dist/types/src/components/SearchResults/SearchResults.d.ts +4 -3
  29. package/dist/types/src/components/SearchResults/SearchResults.d.ts.map +1 -1
  30. package/dist/types/src/components/SearchResults/SearchResults.stories.d.ts +1 -1
  31. package/dist/types/src/components/Searchbar/Searchbar.d.ts +1 -2
  32. package/dist/types/src/components/Searchbar/Searchbar.d.ts.map +1 -1
  33. package/dist/types/src/context.d.ts +2 -2
  34. package/dist/types/src/context.d.ts.map +1 -1
  35. package/dist/types/src/index.d.ts +1 -2
  36. package/dist/types/src/index.d.ts.map +1 -1
  37. package/dist/types/src/meta.d.ts +1 -2
  38. package/dist/types/src/meta.d.ts.map +1 -1
  39. package/dist/types/src/types.d.ts +0 -2
  40. package/dist/types/src/types.d.ts.map +1 -1
  41. package/dist/types/tsconfig.tsbuildinfo +1 -1
  42. package/package.json +20 -27
  43. package/src/SearchPlugin.tsx +35 -91
  44. package/src/capabilities/app-graph-builder.ts +36 -0
  45. package/src/capabilities/index.ts +9 -0
  46. package/src/capabilities/intent-resolver.ts +18 -0
  47. package/src/capabilities/react-surface.tsx +39 -0
  48. package/src/components/SearchDialog.tsx +20 -35
  49. package/src/components/SearchResults/SearchResults.tsx +30 -43
  50. package/src/index.ts +1 -4
  51. package/src/meta.ts +1 -1
  52. package/src/search-sync.ts +1 -1
  53. package/src/search.ts +1 -1
  54. package/src/types.tsx +0 -13
  55. package/dist/lib/browser/chunk-4L4PWJYC.mjs.map +0 -7
  56. package/dist/lib/browser/meta.mjs +0 -11
  57. package/dist/lib/browser/meta.mjs.map +0 -7
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 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 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"]
3
+ "sources": ["../../../src/SearchPlugin.tsx", "../../../src/capabilities/index.ts", "../../../src/translations.ts"],
4
+ "sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport { contributes, Events, defineModule, definePlugin, Capabilities } from '@dxos/app-framework';\n\nimport { AppGraphBuilder, IntentResolver, ReactSurface } from './capabilities';\nimport { meta, SEARCH_RESULT } from './meta';\nimport type { SearchResult } from './search-sync';\nimport translations from './translations';\n\nexport const SearchPlugin = () =>\n definePlugin(meta, [\n defineModule({\n id: `${meta.id}/module/translations`,\n activatesOn: Events.SetupTranslations,\n activate: () => contributes(Capabilities.Translations, translations),\n }),\n defineModule({\n id: `${meta.id}/module/metadata`,\n activatesOn: Events.SetupMetadata,\n activate: () =>\n contributes(Capabilities.Metadata, {\n id: SEARCH_RESULT,\n metadata: {\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 defineModule({\n id: `${meta.id}/module/react-surface`,\n activatesOn: Events.SetupReactSurface,\n activate: ReactSurface,\n }),\n defineModule({\n id: `${meta.id}/module/intent-resolver`,\n activatesOn: Events.SetupIntentResolver,\n activate: IntentResolver,\n }),\n defineModule({\n id: `${meta.id}/module/app-graph-builder`,\n activatesOn: Events.SetupAppGraph,\n activate: AppGraphBuilder,\n }),\n ]);\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { lazy } from '@dxos/app-framework';\n\nexport const AppGraphBuilder = lazy(() => import('./app-graph-builder'));\nexport const IntentResolver = lazy(() => import('./intent-resolver'));\nexport const ReactSurface = lazy(() => import('./react-surface'));\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"],
5
+ "mappings": ";;;;;;;;;;;;;;;;AAIA,SAASA,aAAaC,QAAQC,cAAcC,cAAcC,oBAAoB;;;ACA9E,SAASC,YAAY;AAEd,IAAMC,kBAAkBC,KAAK,MAAM,OAAO,kCAAA,CAAA;AAC1C,IAAMC,iBAAiBD,KAAK,MAAM,OAAO,gCAAA,CAAA;AACzC,IAAME,eAAeF,KAAK,MAAM,OAAO,8BAAA,CAAA;;;ACF9C,IAAA,uBAAe;EACb;IACE,SAAS;MACP,CAACG,aAAAA,GAAgB;QACf,eAAe;QACf,uBAAuB;QACvB,sBAAsB;QACtB,uBAAuB;QACvB,2BAA2B;QAC3B,2BAA2B;QAC3B,yBAAyB;MAC3B;IACF;EACF;;;;AFRK,IAAMC,eAAe,MAC1BC,aAAaC,MAAM;EACjBC,aAAa;IACXC,IAAI,GAAGF,KAAKE,EAAE;IACdC,aAAaC,OAAOC;IACpBC,UAAU,MAAMC,YAAYC,aAAaC,cAAcC,oBAAAA;EACzD,CAAA;EACAT,aAAa;IACXC,IAAI,GAAGF,KAAKE,EAAE;IACdC,aAAaC,OAAOO;IACpBL,UAAU,MACRC,YAAYC,aAAaI,UAAU;MACjCV,IAAIW;MACJC,UAAU;QACRC,OAAO,CAACC,MAAoBC,SAAAA;AAC1B,kBAAQA,MAAAA;YACN,KAAK;AACH,qBAAO;gBAAEf,IAAIc,KAAKd;gBAAIgB,OAAOF,KAAKE;gBAAOC,MAAMH,KAAKI;cAAO;YAC7D,KAAK;AACH,qBAAOJ,KAAKI;YACd,KAAK;AACH,qBAAOJ;UACX;QACF;MACF;IACF,CAAA;EACJ,CAAA;EACAf,aAAa;IACXC,IAAI,GAAGF,KAAKE,EAAE;IACdC,aAAaC,OAAOiB;IACpBf,UAAUgB;EACZ,CAAA;EACArB,aAAa;IACXC,IAAI,GAAGF,KAAKE,EAAE;IACdC,aAAaC,OAAOmB;IACpBjB,UAAUkB;EACZ,CAAA;EACAvB,aAAa;IACXC,IAAI,GAAGF,KAAKE,EAAE;IACdC,aAAaC,OAAOqB;IACpBnB,UAAUoB;EACZ,CAAA;CACD;",
6
+ "names": ["contributes", "Events", "defineModule", "definePlugin", "Capabilities", "lazy", "AppGraphBuilder", "lazy", "IntentResolver", "ReactSurface", "SEARCH_PLUGIN", "SearchPlugin", "definePlugin", "meta", "defineModule", "id", "activatesOn", "Events", "SetupTranslations", "activate", "contributes", "Capabilities", "Translations", "translations", "SetupMetadata", "Metadata", "SEARCH_RESULT", "metadata", "parse", "item", "type", "label", "data", "object", "SetupReactSurface", "ReactSurface", "SetupIntentResolver", "IntentResolver", "SetupAppGraph", "AppGraphBuilder"]
7
7
  }
@@ -0,0 +1,22 @@
1
+ import {
2
+ SearchAction
3
+ } from "./chunk-Z745WIBH.mjs";
4
+ import "./chunk-B532NWHM.mjs";
5
+
6
+ // packages/plugins/experimental/plugin-search/src/capabilities/intent-resolver.ts
7
+ import { contributes, Capabilities, createResolver, LayoutAction, createIntent } from "@dxos/app-framework";
8
+ var intent_resolver_default = () => contributes(Capabilities.IntentResolver, createResolver({
9
+ intent: SearchAction.OpenSearch,
10
+ resolve: () => ({
11
+ intents: [
12
+ createIntent(LayoutAction.UpdateComplementary, {
13
+ part: "complementary",
14
+ subject: "search"
15
+ })
16
+ ]
17
+ })
18
+ }));
19
+ export {
20
+ intent_resolver_default as default
21
+ };
22
+ //# sourceMappingURL=intent-resolver-MKBD2LPH.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/capabilities/intent-resolver.ts"],
4
+ "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport { contributes, Capabilities, createResolver, LayoutAction, createIntent } from '@dxos/app-framework';\n\nimport { SearchAction } from '../types';\n\nexport default () =>\n contributes(\n Capabilities.IntentResolver,\n createResolver({\n intent: SearchAction.OpenSearch,\n resolve: () => ({\n intents: [createIntent(LayoutAction.UpdateComplementary, { part: 'complementary', subject: 'search' })],\n }),\n }),\n );\n"],
5
+ "mappings": ";;;;;;AAIA,SAASA,aAAaC,cAAcC,gBAAgBC,cAAcC,oBAAoB;AAItF,IAAA,0BAAe,MACbC,YACEC,aAAaC,gBACbC,eAAe;EACbC,QAAQC,aAAaC;EACrBC,SAAS,OAAO;IACdC,SAAS;MAACC,aAAaC,aAAaC,qBAAqB;QAAEC,MAAM;QAAiBC,SAAS;MAAS,CAAA;;EACtG;AACF,CAAA,CAAA;",
6
+ "names": ["contributes", "Capabilities", "createResolver", "LayoutAction", "createIntent", "contributes", "Capabilities", "IntentResolver", "createResolver", "intent", "SearchAction", "OpenSearch", "resolve", "intents", "createIntent", "LayoutAction", "UpdateComplementary", "part", "subject"]
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":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
+ {"inputs":{"packages/plugins/experimental/plugin-search/src/search-sync.ts":{"bytes":12159,"imports":[{"path":"@dxos/echo-schema","kind":"import-statement","external":true},{"path":"@dxos/live-object","kind":"import-statement","external":true},{"path":"@dxos/schema","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/meta.ts":{"bytes":1871,"imports":[],"format":"esm"},"packages/plugins/experimental/plugin-search/src/types.tsx":{"bytes":1766,"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/capabilities/app-graph-builder.ts":{"bytes":4567,"imports":[{"path":"@dxos/app-framework","kind":"import-statement","external":true},{"path":"@dxos/plugin-graph","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/types.tsx","kind":"import-statement","original":"../types"}],"format":"esm"},"packages/plugins/experimental/plugin-search/src/capabilities/intent-resolver.ts":{"bytes":2282,"imports":[{"path":"@dxos/app-framework","kind":"import-statement","external":true},{"path":"packages/plugins/experimental/plugin-search/src/types.tsx","kind":"import-statement","original":"../types"}],"format":"esm"},"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/components/SearchResults/SearchResults.tsx":{"bytes":11211,"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-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/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":6756,"imports":[{"path":"main-thread-scheduling","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/schema","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":16610,"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/capabilities/react-surface.tsx":{"bytes":4539,"imports":[{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/app-framework","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"}],"format":"esm"},"packages/plugins/experimental/plugin-search/src/capabilities/index.ts":{"bytes":1362,"imports":[{"path":"@dxos/app-framework","kind":"import-statement","external":true},{"path":"packages/plugins/experimental/plugin-search/src/capabilities/app-graph-builder.ts","kind":"dynamic-import","original":"./app-graph-builder"},{"path":"packages/plugins/experimental/plugin-search/src/capabilities/intent-resolver.ts","kind":"dynamic-import","original":"./intent-resolver"},{"path":"packages/plugins/experimental/plugin-search/src/capabilities/react-surface.tsx","kind":"dynamic-import","original":"./react-surface"}],"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/SearchPlugin.tsx":{"bytes":6716,"imports":[{"path":"@dxos/app-framework","kind":"import-statement","external":true},{"path":"packages/plugins/experimental/plugin-search/src/capabilities/index.ts","kind":"import-statement","original":"./capabilities"},{"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"}],"format":"esm"},"packages/plugins/experimental/plugin-search/src/index.ts":{"bytes":797,"imports":[{"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/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":4429},"packages/plugins/experimental/plugin-search/dist/lib/browser/index.mjs":{"imports":[{"path":"packages/plugins/experimental/plugin-search/dist/lib/browser/chunk-GGOOQO2C.mjs","kind":"import-statement"},{"path":"packages/plugins/experimental/plugin-search/dist/lib/browser/chunk-B532NWHM.mjs","kind":"import-statement"},{"path":"@dxos/app-framework","kind":"import-statement","external":true},{"path":"@dxos/app-framework","kind":"import-statement","external":true},{"path":"packages/plugins/experimental/plugin-search/dist/lib/browser/app-graph-builder-4C2ZPCED.mjs","kind":"dynamic-import"},{"path":"packages/plugins/experimental/plugin-search/dist/lib/browser/intent-resolver-MKBD2LPH.mjs","kind":"dynamic-import"},{"path":"packages/plugins/experimental/plugin-search/dist/lib/browser/react-surface-ZFFHKFME.mjs","kind":"dynamic-import"}],"exports":["SEARCH_PLUGIN","SEARCH_RESULT","SearchContextProvider","SearchPlugin","filterObjectsSync","mapObjectToTextFields","meta","queryStringToMatch","useGlobalFilteredObjects","useGlobalSearch","useGlobalSearchResults"],"entryPoint":"packages/plugins/experimental/plugin-search/src/index.ts","inputs":{"packages/plugins/experimental/plugin-search/src/index.ts":{"bytesInOutput":0},"packages/plugins/experimental/plugin-search/src/SearchPlugin.tsx":{"bytesInOutput":1335},"packages/plugins/experimental/plugin-search/src/capabilities/index.ts":{"bytesInOutput":268},"packages/plugins/experimental/plugin-search/src/translations.ts":{"bytesInOutput":436}},"bytes":2875},"packages/plugins/experimental/plugin-search/dist/lib/browser/app-graph-builder-4C2ZPCED.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":2189},"packages/plugins/experimental/plugin-search/dist/lib/browser/app-graph-builder-4C2ZPCED.mjs":{"imports":[{"path":"packages/plugins/experimental/plugin-search/dist/lib/browser/chunk-Z745WIBH.mjs","kind":"import-statement"},{"path":"packages/plugins/experimental/plugin-search/dist/lib/browser/chunk-B532NWHM.mjs","kind":"import-statement"},{"path":"@dxos/app-framework","kind":"import-statement","external":true},{"path":"@dxos/plugin-graph","kind":"import-statement","external":true}],"exports":["default"],"entryPoint":"packages/plugins/experimental/plugin-search/src/capabilities/app-graph-builder.ts","inputs":{"packages/plugins/experimental/plugin-search/src/capabilities/app-graph-builder.ts":{"bytesInOutput":908}},"bytes":1212},"packages/plugins/experimental/plugin-search/dist/lib/browser/intent-resolver-MKBD2LPH.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":1139},"packages/plugins/experimental/plugin-search/dist/lib/browser/intent-resolver-MKBD2LPH.mjs":{"imports":[{"path":"packages/plugins/experimental/plugin-search/dist/lib/browser/chunk-Z745WIBH.mjs","kind":"import-statement"},{"path":"packages/plugins/experimental/plugin-search/dist/lib/browser/chunk-B532NWHM.mjs","kind":"import-statement"},{"path":"@dxos/app-framework","kind":"import-statement","external":true}],"exports":["default"],"entryPoint":"packages/plugins/experimental/plugin-search/src/capabilities/intent-resolver.ts","inputs":{"packages/plugins/experimental/plugin-search/src/capabilities/intent-resolver.ts":{"bytesInOutput":410}},"bytes":683},"packages/plugins/experimental/plugin-search/dist/lib/browser/chunk-Z745WIBH.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":819},"packages/plugins/experimental/plugin-search/dist/lib/browser/chunk-Z745WIBH.mjs":{"imports":[{"path":"packages/plugins/experimental/plugin-search/dist/lib/browser/chunk-B532NWHM.mjs","kind":"import-statement"},{"path":"@dxos/echo-schema","kind":"import-statement","external":true}],"exports":["SearchAction"],"inputs":{"packages/plugins/experimental/plugin-search/src/types.tsx":{"bytesInOutput":343}},"bytes":533},"packages/plugins/experimental/plugin-search/dist/lib/browser/react-surface-ZFFHKFME.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":26971},"packages/plugins/experimental/plugin-search/dist/lib/browser/react-surface-ZFFHKFME.mjs":{"imports":[{"path":"packages/plugins/experimental/plugin-search/dist/lib/browser/chunk-GGOOQO2C.mjs","kind":"import-statement"},{"path":"packages/plugins/experimental/plugin-search/dist/lib/browser/chunk-B532NWHM.mjs","kind":"import-statement"},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/app-framework","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-theme","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/schema","kind":"import-statement","external":true}],"exports":["default"],"entryPoint":"packages/plugins/experimental/plugin-search/src/capabilities/react-surface.tsx","inputs":{"packages/plugins/experimental/plugin-search/src/capabilities/react-surface.tsx":{"bytesInOutput":1001},"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":2745},"packages/plugins/experimental/plugin-search/src/components/SearchResults/index.ts":{"bytesInOutput":0},"packages/plugins/experimental/plugin-search/src/components/SearchDialog.tsx":{"bytesInOutput":4344},"packages/plugins/experimental/plugin-search/src/search.ts":{"bytesInOutput":1458}},"bytes":13243},"packages/plugins/experimental/plugin-search/dist/lib/browser/chunk-GGOOQO2C.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":8867},"packages/plugins/experimental/plugin-search/dist/lib/browser/chunk-GGOOQO2C.mjs":{"imports":[{"path":"@dxos/echo-schema","kind":"import-statement","external":true},{"path":"@dxos/live-object","kind":"import-statement","external":true},{"path":"@dxos/schema","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/debug","kind":"import-statement","external":true}],"exports":["SearchContextProvider","filterObjectsSync","mapObjectToTextFields","queryStringToMatch","useGlobalFilteredObjects","useGlobalSearch","useGlobalSearchResults"],"inputs":{"packages/plugins/experimental/plugin-search/src/search-sync.ts":{"bytesInOutput":2346},"packages/plugins/experimental/plugin-search/src/context.tsx":{"bytesInOutput":1010}},"bytes":3708},"packages/plugins/experimental/plugin-search/dist/lib/browser/chunk-B532NWHM.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":875},"packages/plugins/experimental/plugin-search/dist/lib/browser/chunk-B532NWHM.mjs":{"imports":[],"exports":["SEARCH_PLUGIN","SEARCH_RESULT","meta"],"inputs":{"packages/plugins/experimental/plugin-search/src/meta.ts":{"bytesInOutput":368}},"bytes":525}}}
@@ -0,0 +1,343 @@
1
+ import {
2
+ SearchContextProvider,
3
+ mapObjectToTextFields,
4
+ queryStringToMatch,
5
+ useGlobalSearch,
6
+ useGlobalSearchResults
7
+ } from "./chunk-GGOOQO2C.mjs";
8
+ import {
9
+ SEARCH_PLUGIN,
10
+ SEARCH_RESULT
11
+ } from "./chunk-B532NWHM.mjs";
12
+
13
+ // packages/plugins/experimental/plugin-search/src/capabilities/react-surface.tsx
14
+ import React5 from "react";
15
+ import { Capabilities, contributes, createSurface, useLayout as useLayout2, useAppGraph as useAppGraph2 } from "@dxos/app-framework";
16
+ import { getActiveSpace } from "@dxos/plugin-space";
17
+
18
+ // packages/plugins/experimental/plugin-search/src/components/Searchbar/Searchbar.tsx
19
+ import { MagnifyingGlass } from "@phosphor-icons/react";
20
+ import React, { useEffect, useRef, useState } from "react";
21
+ import { Input } from "@dxos/react-ui";
22
+ import { getSize, mx } from "@dxos/react-ui-theme";
23
+ var Searchbar = ({ classes, variant, placeholder, value, onChange }) => {
24
+ const inputRef = useRef(null);
25
+ const [text, setText] = useState(value);
26
+ useEffect(() => {
27
+ setText(value);
28
+ }, [
29
+ value
30
+ ]);
31
+ const handleChange = (text2) => {
32
+ setText(text2);
33
+ onChange?.(text2);
34
+ };
35
+ const handleReset = () => {
36
+ handleChange(void 0);
37
+ inputRef.current?.focus();
38
+ };
39
+ return /* @__PURE__ */ React.createElement("div", {
40
+ className: "flex w-full items-center pli-1 pbs-1"
41
+ }, /* @__PURE__ */ React.createElement(Input.Root, null, /* @__PURE__ */ React.createElement(Input.TextInput, {
42
+ ref: inputRef,
43
+ placeholder,
44
+ variant,
45
+ value: text ?? "",
46
+ classNames: mx("pl-3 pr-10", classes?.input),
47
+ onChange: ({ target }) => handleChange(target.value),
48
+ onKeyDown: ({ key }) => key === "Escape" && handleReset()
49
+ }), /* @__PURE__ */ React.createElement("div", {
50
+ role: "button",
51
+ className: "-ml-7 p-0 cursor-pointer",
52
+ onClick: handleReset
53
+ }, /* @__PURE__ */ React.createElement(MagnifyingGlass, {
54
+ className: getSize(5)
55
+ }))));
56
+ };
57
+
58
+ // packages/plugins/experimental/plugin-search/src/components/SearchMain.tsx
59
+ import React3, { useState as useState2 } from "react";
60
+ import { useClient } from "@dxos/react-client";
61
+ import { Filter, useQuery } from "@dxos/react-client/echo";
62
+ import { useTranslation } from "@dxos/react-ui";
63
+ import { groupSurface, mx as mx3 } from "@dxos/react-ui-theme";
64
+
65
+ // packages/plugins/experimental/plugin-search/src/components/SearchResults/SearchResults.tsx
66
+ import { Buildings, Folders, User } from "@phosphor-icons/react";
67
+ import React2, { forwardRef } from "react";
68
+ import { ScrollArea } from "@dxos/react-ui";
69
+ import { Card } from "@dxos/react-ui-card";
70
+ import { ghostHover, mx as mx2 } from "@dxos/react-ui-theme";
71
+ var styles = {
72
+ selected: "!bg-primary-100 !dark:bg-primary-900"
73
+ };
74
+ var getIcon = (type) => {
75
+ const iconMap = {
76
+ user: User,
77
+ organization: Buildings,
78
+ project: Folders
79
+ };
80
+ return iconMap[type];
81
+ };
82
+ var Snippet = ({ text, match }) => {
83
+ let content = /* @__PURE__ */ React2.createElement(React2.Fragment, null, text);
84
+ if (match) {
85
+ const result = text.match(match);
86
+ if (result?.index !== void 0) {
87
+ const maxOffset = 16;
88
+ let before = text.slice(0, result.index);
89
+ if (before.length > maxOffset) {
90
+ const idx = before.indexOf(" ", result.index - maxOffset);
91
+ before = "\u2026 " + before.slice(idx);
92
+ }
93
+ const after = text.slice(result.index + result[0].length);
94
+ content = /* @__PURE__ */ React2.createElement(React2.Fragment, null, before, /* @__PURE__ */ React2.createElement("span", {
95
+ className: "text-blue-500"
96
+ }, result[0]), after);
97
+ }
98
+ }
99
+ return /* @__PURE__ */ React2.createElement("span", {
100
+ className: "text-xs mb-1 line-clamp-3 text-neutral-300"
101
+ }, content);
102
+ };
103
+ var SearchItem = /* @__PURE__ */ forwardRef((item, forwardRef3) => {
104
+ const { id, type, label, snippet, match, selected, onSelect } = item;
105
+ const Icon2 = type ? getIcon(type) : void 0;
106
+ return /* @__PURE__ */ React2.createElement(Card.Root, {
107
+ ref: forwardRef3,
108
+ classNames: mx2("mx-2 mt-2 cursor-pointer", ghostHover, selected && styles.selected),
109
+ onClick: () => onSelect?.(id)
110
+ }, /* @__PURE__ */ React2.createElement(Card.Header, null, /* @__PURE__ */ React2.createElement(Card.Title, {
111
+ title: label ?? "Untitled"
112
+ }), Icon2 && /* @__PURE__ */ React2.createElement(Card.Endcap, {
113
+ Icon: Icon2
114
+ })), snippet && /* @__PURE__ */ React2.createElement(Card.Body, {
115
+ gutter: true
116
+ }, /* @__PURE__ */ React2.createElement(Snippet, {
117
+ text: snippet,
118
+ match
119
+ })));
120
+ });
121
+ var SearchResults = ({ items, selected, onSelect }) => {
122
+ return /* @__PURE__ */ React2.createElement(ScrollArea.Root, {
123
+ classNames: "grow"
124
+ }, /* @__PURE__ */ React2.createElement(ScrollArea.Viewport, null, items.map((item) => /* @__PURE__ */ React2.createElement(SearchItem, {
125
+ key: item.id,
126
+ type: SEARCH_RESULT,
127
+ ...item,
128
+ onSelect,
129
+ selected: selected === item.id
130
+ }))), /* @__PURE__ */ React2.createElement(ScrollArea.Scrollbar, {
131
+ orientation: "vertical"
132
+ }, /* @__PURE__ */ React2.createElement(ScrollArea.Thumb, null)), /* @__PURE__ */ React2.createElement(ScrollArea.Corner, null));
133
+ };
134
+
135
+ // packages/plugins/experimental/plugin-search/src/components/SearchMain.tsx
136
+ var SearchMain = ({ space }) => {
137
+ const { t } = useTranslation(SEARCH_PLUGIN);
138
+ const client = useClient();
139
+ const { setMatch } = useGlobalSearch();
140
+ const allSpaces = false;
141
+ const objects = useQuery(allSpaces ? client.spaces : space, Filter.all());
142
+ const results = useGlobalSearchResults(objects);
143
+ const [selected, setSelected] = useState2();
144
+ const handleSelect = (id) => {
145
+ setSelected((selected2) => selected2 === id ? void 0 : id);
146
+ };
147
+ return /* @__PURE__ */ React3.createElement("div", {
148
+ className: "flex flex-col grow h-full"
149
+ }, /* @__PURE__ */ React3.createElement(Searchbar, {
150
+ placeholder: t("search placeholder"),
151
+ onChange: setMatch
152
+ }), results.length > 0 && /* @__PURE__ */ React3.createElement("div", {
153
+ className: "absolute top-[--topbar-size] bottom-0 z-[1]"
154
+ }, /* @__PURE__ */ React3.createElement("div", {
155
+ className: mx3("flex flex-col h-full overflow-hidden", groupSurface)
156
+ }, /* @__PURE__ */ React3.createElement(SearchResults, {
157
+ items: results,
158
+ selected,
159
+ onSelect: handleSelect
160
+ }))));
161
+ };
162
+
163
+ // packages/plugins/experimental/plugin-search/src/components/SearchDialog.tsx
164
+ import React4, { forwardRef as forwardRef2, useCallback, useState as useState4 } from "react";
165
+ import { LayoutAction, createIntent, useAppGraph, useIntentDispatcher, useLayout } from "@dxos/app-framework";
166
+ import { useClient as useClient2 } from "@dxos/react-client";
167
+ import { Filter as Filter2, fullyQualifiedId, useQuery as useQuery2 } from "@dxos/react-client/echo";
168
+ import { Button, Dialog, Icon, toLocalizedString, useTranslation as useTranslation2 } from "@dxos/react-ui";
169
+ import { SearchList } from "@dxos/react-ui-searchlist";
170
+ import { descriptionText, mx as mx4 } from "@dxos/react-ui-theme";
171
+
172
+ // packages/plugins/experimental/plugin-search/src/search.ts
173
+ import { yieldOrContinue } from "main-thread-scheduling";
174
+ import { useEffect as useEffect2, useState as useState3 } from "react";
175
+ import { TextType } from "@dxos/schema";
176
+ var filterObjects = async (objects, match) => {
177
+ const result = /* @__PURE__ */ new Map();
178
+ if (!match) {
179
+ return result;
180
+ }
181
+ await Promise.all(objects.filter((object) => !(object instanceof TextType)).map(async (object) => {
182
+ await yieldOrContinue("interactive");
183
+ const fields = mapObjectToTextFields(object);
184
+ Object.entries(fields).filter(([_, value]) => value.match(match)).forEach(([key, value]) => {
185
+ if (!result.has(object)) {
186
+ result.set(object, []);
187
+ }
188
+ result.set(object, [
189
+ ...result.get(object),
190
+ [
191
+ key,
192
+ value
193
+ ]
194
+ ]);
195
+ });
196
+ }));
197
+ return result;
198
+ };
199
+ var useSearchResults = (queryString, objects, delay = 400) => {
200
+ const [results, setResults] = useState3(/* @__PURE__ */ new Map());
201
+ const [pending, setPending] = useState3(false);
202
+ useEffect2(() => {
203
+ setPending(!!(objects && queryString));
204
+ const timeoutId = setTimeout(async () => {
205
+ const nextResults = objects && queryString ? await filterObjects(objects, queryStringToMatch(queryString)) : /* @__PURE__ */ new Map();
206
+ setResults(nextResults);
207
+ setPending(false);
208
+ }, delay);
209
+ return () => clearTimeout(timeoutId);
210
+ }, [
211
+ queryString,
212
+ objects
213
+ ]);
214
+ return [
215
+ pending,
216
+ results
217
+ ];
218
+ };
219
+
220
+ // packages/plugins/experimental/plugin-search/src/components/SearchDialog.tsx
221
+ var SEARCH_DIALOG = `${SEARCH_PLUGIN}/SearchDialog`;
222
+ var SearchListResult = /* @__PURE__ */ forwardRef2(({ node, onSelect }, forwardedRef) => {
223
+ const { t } = useTranslation2(SEARCH_PLUGIN);
224
+ const label = toLocalizedString(node?.properties.label ?? "never", t);
225
+ return /* @__PURE__ */ React4.createElement(SearchList.Item, {
226
+ value: label,
227
+ key: node.id,
228
+ classNames: "flex gap-2 items-center pli-2",
229
+ onSelect: () => onSelect?.(node.id),
230
+ ref: forwardedRef
231
+ }, /* @__PURE__ */ React4.createElement(Icon, {
232
+ size: 5,
233
+ icon: node?.properties.icon
234
+ }), /* @__PURE__ */ React4.createElement("span", {
235
+ className: "is-0 grow truncate"
236
+ }, label));
237
+ });
238
+ var SearchDialog = ({ pivotId }) => {
239
+ const { t } = useTranslation2(SEARCH_PLUGIN);
240
+ const { graph } = useAppGraph();
241
+ const layout = useLayout();
242
+ const closed = (Array.isArray(layout.inactive) ? layout.inactive : [
243
+ layout.inactive
244
+ ]).map((id) => graph?.findNode(id)).filter(Boolean);
245
+ const [queryString, setQueryString] = useState4("");
246
+ const client = useClient2();
247
+ const dangerouslyLoadAllObjects = useQuery2(client.spaces, Filter2.all());
248
+ const [pending, results] = useSearchResults(queryString, dangerouslyLoadAllObjects);
249
+ const resultObjects = Array.from(results.keys());
250
+ const { dispatchPromise: dispatch } = useIntentDispatcher();
251
+ const handleSelect = useCallback(async (nodeId) => {
252
+ await dispatch(createIntent(LayoutAction.UpdateDialog, {
253
+ part: "dialog",
254
+ options: {
255
+ state: false
256
+ }
257
+ }));
258
+ const index = layout.active.findIndex((id) => id === nodeId);
259
+ if (index !== -1) {
260
+ await dispatch(createIntent(LayoutAction.ScrollIntoView, {
261
+ part: "current",
262
+ subject: nodeId
263
+ }));
264
+ } else {
265
+ await dispatch(createIntent(LayoutAction.Open, {
266
+ part: "main",
267
+ subject: [
268
+ nodeId
269
+ ],
270
+ options: {
271
+ pivotId,
272
+ positioning: "end"
273
+ }
274
+ }));
275
+ }
276
+ }, [
277
+ pivotId,
278
+ dispatch,
279
+ layout
280
+ ]);
281
+ return /* @__PURE__ */ React4.createElement(Dialog.Content, {
282
+ classNames: [
283
+ "md:max-is-[24rem] overflow-hidden mbs-12"
284
+ ]
285
+ }, /* @__PURE__ */ React4.createElement(Dialog.Title, null, t("search dialog title")), /* @__PURE__ */ React4.createElement(SearchList.Root, {
286
+ label: t("search placeholder"),
287
+ classNames: "flex flex-col grow overflow-hidden my-2"
288
+ }, /* @__PURE__ */ React4.createElement(SearchList.Input, {
289
+ value: queryString,
290
+ onValueChange: (nextValue) => {
291
+ setQueryString(nextValue);
292
+ },
293
+ placeholder: t("search placeholder"),
294
+ classNames: "px-1 my-2"
295
+ }), /* @__PURE__ */ React4.createElement(SearchList.Content, {
296
+ classNames: "max-bs-[24rem] overflow-auto"
297
+ }, queryString.length > 0 ? resultObjects.length > 0 ? resultObjects.map((object) => graph?.findNode(fullyQualifiedId(object))).filter(Boolean).map((node) => /* @__PURE__ */ React4.createElement(SearchListResult, {
298
+ key: node.id,
299
+ node,
300
+ onSelect: handleSelect
301
+ })) : /* @__PURE__ */ React4.createElement("p", {
302
+ className: "pli-1"
303
+ }, t(pending ? "pending results message" : "empty results message")) : /* @__PURE__ */ React4.createElement(React4.Fragment, null, closed.length > 0 && /* @__PURE__ */ React4.createElement("h2", {
304
+ className: mx4("mlb-1", descriptionText)
305
+ }, t("recently closed heading")), closed.map((node) => /* @__PURE__ */ React4.createElement(SearchListResult, {
306
+ key: node.id,
307
+ node,
308
+ onSelect: handleSelect
309
+ }))))), /* @__PURE__ */ React4.createElement(Dialog.Close, {
310
+ asChild: true
311
+ }, /* @__PURE__ */ React4.createElement(Button, {
312
+ variant: "primary",
313
+ classNames: "mbs-2"
314
+ }, t("close label", {
315
+ ns: "os"
316
+ }))));
317
+ };
318
+
319
+ // packages/plugins/experimental/plugin-search/src/capabilities/react-surface.tsx
320
+ var react_surface_default = () => contributes(Capabilities.ReactSurface, [
321
+ createSurface({
322
+ id: SEARCH_DIALOG,
323
+ role: "dialog",
324
+ filter: (data) => data.component === SEARCH_DIALOG,
325
+ component: ({ data }) => /* @__PURE__ */ React5.createElement(SearchContextProvider, null, /* @__PURE__ */ React5.createElement(SearchDialog, data.props))
326
+ }),
327
+ createSurface({
328
+ id: "search-input",
329
+ role: "search-input",
330
+ component: () => {
331
+ const layout = useLayout2();
332
+ const { graph } = useAppGraph2();
333
+ const space = graph ? getActiveSpace(graph, layout.active[0]) : void 0;
334
+ return space ? /* @__PURE__ */ React5.createElement(SearchContextProvider, null, /* @__PURE__ */ React5.createElement(SearchMain, {
335
+ space
336
+ })) : null;
337
+ }
338
+ })
339
+ ]);
340
+ export {
341
+ react_surface_default as default
342
+ };
343
+ //# sourceMappingURL=react-surface-ZFFHKFME.mjs.map