@dxos/plugin-search 0.8.4-main.74a063c4e0 → 0.8.4-main.765dc60934

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 (124) hide show
  1. package/LICENSE +102 -5
  2. package/dist/lib/neutral/SearchArticle-CQMZ46ZS.mjs +51 -0
  3. package/dist/lib/neutral/SearchArticle-CQMZ46ZS.mjs.map +7 -0
  4. package/dist/lib/neutral/SearchDialog-UM27KP5U.mjs +74 -0
  5. package/dist/lib/neutral/SearchDialog-UM27KP5U.mjs.map +7 -0
  6. package/dist/lib/neutral/SearchPlugin.mjs +10 -0
  7. package/dist/lib/neutral/SearchPlugin.mjs.map +7 -0
  8. package/dist/lib/neutral/app-graph-builder-B3W3UWHV.mjs +71 -0
  9. package/dist/lib/neutral/app-graph-builder-B3W3UWHV.mjs.map +7 -0
  10. package/dist/lib/neutral/capabilities/index.mjs +13 -0
  11. package/dist/lib/neutral/capabilities/index.mjs.map +7 -0
  12. package/dist/lib/neutral/chunk-7VNJDD75.mjs +22 -0
  13. package/dist/lib/neutral/chunk-7VNJDD75.mjs.map +7 -0
  14. package/dist/lib/neutral/chunk-EBXWOGAD.mjs +26 -0
  15. package/dist/lib/neutral/chunk-EBXWOGAD.mjs.map +7 -0
  16. package/dist/lib/neutral/chunk-IXRPYAX5.mjs +8 -0
  17. package/dist/lib/neutral/chunk-IXRPYAX5.mjs.map +7 -0
  18. package/dist/lib/neutral/chunk-J5LGTIGS.mjs +10 -0
  19. package/dist/lib/neutral/chunk-J5LGTIGS.mjs.map +7 -0
  20. package/dist/lib/{browser/index.mjs → neutral/chunk-LUDADYMK.mjs} +11 -92
  21. package/dist/lib/neutral/chunk-LUDADYMK.mjs.map +7 -0
  22. package/dist/lib/neutral/chunk-NAKPT2JM.mjs +8 -0
  23. package/dist/lib/neutral/chunk-NAKPT2JM.mjs.map +7 -0
  24. package/dist/lib/neutral/chunk-NC3YYBHS.mjs +22 -0
  25. package/dist/lib/neutral/chunk-NC3YYBHS.mjs.map +7 -0
  26. package/dist/lib/neutral/components/index.mjs +97 -0
  27. package/dist/lib/neutral/components/index.mjs.map +7 -0
  28. package/dist/lib/neutral/containers/index.mjs +11 -0
  29. package/dist/lib/neutral/containers/index.mjs.map +7 -0
  30. package/dist/lib/neutral/hooks/index.mjs +30 -0
  31. package/dist/lib/neutral/hooks/index.mjs.map +7 -0
  32. package/dist/lib/neutral/index.mjs +40 -0
  33. package/dist/lib/neutral/index.mjs.map +7 -0
  34. package/dist/lib/neutral/meta.json +1 -0
  35. package/dist/lib/neutral/meta.mjs +10 -0
  36. package/dist/lib/neutral/meta.mjs.map +7 -0
  37. package/dist/lib/neutral/open-search-DY6ZGVKR.mjs +23 -0
  38. package/dist/lib/neutral/open-search-DY6ZGVKR.mjs.map +7 -0
  39. package/dist/lib/neutral/operation-handler-DY624P2R.mjs +13 -0
  40. package/dist/lib/neutral/operation-handler-DY624P2R.mjs.map +7 -0
  41. package/dist/lib/neutral/operations/index.mjs +8 -0
  42. package/dist/lib/neutral/operations/index.mjs.map +7 -0
  43. package/dist/lib/neutral/plugin.mjs +16 -0
  44. package/dist/lib/neutral/plugin.mjs.map +7 -0
  45. package/dist/lib/neutral/react-surface-ER7Q4W6Y.mjs +61 -0
  46. package/dist/lib/neutral/react-surface-ER7Q4W6Y.mjs.map +7 -0
  47. package/dist/lib/neutral/testing.mjs +8 -0
  48. package/dist/lib/neutral/testing.mjs.map +7 -0
  49. package/dist/lib/neutral/translations.mjs +25 -0
  50. package/dist/lib/neutral/translations.mjs.map +7 -0
  51. package/dist/lib/neutral/types/index.mjs +8 -0
  52. package/dist/lib/neutral/types/index.mjs.map +7 -0
  53. package/dist/types/src/SearchPlugin.d.ts +1 -0
  54. package/dist/types/src/SearchPlugin.d.ts.map +1 -1
  55. package/dist/types/src/capabilities/app-graph-builder.d.ts.map +1 -1
  56. package/dist/types/src/capabilities/index.d.ts +1 -1
  57. package/dist/types/src/capabilities/index.d.ts.map +1 -1
  58. package/dist/types/src/capabilities/operation-handler.d.ts +1 -1
  59. package/dist/types/src/capabilities/operation-handler.d.ts.map +1 -1
  60. package/dist/types/src/capabilities/react-surface.d.ts.map +1 -1
  61. package/dist/types/src/components/SearchResultStack/SearchResultStack.d.ts +1 -5
  62. package/dist/types/src/components/SearchResultStack/SearchResultStack.d.ts.map +1 -1
  63. package/dist/types/src/containers/SearchArticle/SearchArticle.d.ts +2 -5
  64. package/dist/types/src/containers/SearchArticle/SearchArticle.d.ts.map +1 -1
  65. package/dist/types/src/containers/SearchArticle/SearchArticle.stories.d.ts +0 -1
  66. package/dist/types/src/containers/SearchArticle/SearchArticle.stories.d.ts.map +1 -1
  67. package/dist/types/src/containers/SearchDialog/SearchDialog.d.ts +4 -5
  68. package/dist/types/src/containers/SearchDialog/SearchDialog.d.ts.map +1 -1
  69. package/dist/types/src/containers/SearchDialog/SearchDialog.stories.d.ts +0 -1
  70. package/dist/types/src/containers/SearchDialog/SearchDialog.stories.d.ts.map +1 -1
  71. package/dist/types/src/containers/SearchDialog/index.d.ts +0 -1
  72. package/dist/types/src/containers/SearchDialog/index.d.ts.map +1 -1
  73. package/dist/types/src/containers/index.d.ts +0 -1
  74. package/dist/types/src/containers/index.d.ts.map +1 -1
  75. package/dist/types/src/hooks/sync.d.ts +1 -1
  76. package/dist/types/src/hooks/sync.d.ts.map +1 -1
  77. package/dist/types/src/hooks/useGlobalSearch.d.ts.map +1 -1
  78. package/dist/types/src/hooks/useSearchResults.d.ts.map +1 -1
  79. package/dist/types/src/hooks/useWebSearch.d.ts.map +1 -1
  80. package/dist/types/src/index.d.ts +0 -1
  81. package/dist/types/src/index.d.ts.map +1 -1
  82. package/dist/types/src/operations/index.d.ts +1 -2
  83. package/dist/types/src/operations/index.d.ts.map +1 -1
  84. package/dist/types/src/operations/open-search.d.ts +3 -3
  85. package/dist/types/src/operations/open-search.d.ts.map +1 -1
  86. package/dist/types/src/plugin.d.ts +4 -0
  87. package/dist/types/src/plugin.d.ts.map +1 -0
  88. package/dist/types/src/search/exa.d.ts.map +1 -1
  89. package/dist/types/src/testing.d.ts +2 -0
  90. package/dist/types/src/testing.d.ts.map +1 -0
  91. package/dist/types/src/translations.d.ts +10 -11
  92. package/dist/types/src/translations.d.ts.map +1 -1
  93. package/dist/types/src/types/SearchOperation.d.ts +3 -0
  94. package/dist/types/src/types/SearchOperation.d.ts.map +1 -0
  95. package/dist/types/src/types/index.d.ts +1 -0
  96. package/dist/types/src/types/index.d.ts.map +1 -1
  97. package/dist/types/tsconfig.tsbuildinfo +1 -1
  98. package/package.json +100 -48
  99. package/src/SearchPlugin.tsx +4 -21
  100. package/src/capabilities/app-graph-builder.ts +3 -3
  101. package/src/capabilities/index.ts +1 -1
  102. package/src/capabilities/operation-handler.ts +1 -1
  103. package/src/capabilities/react-surface.tsx +17 -8
  104. package/src/components/SearchResultStack/SearchResultStack.tsx +2 -2
  105. package/src/containers/SearchArticle/SearchArticle.stories.tsx +5 -6
  106. package/src/containers/SearchArticle/SearchArticle.tsx +5 -8
  107. package/src/containers/SearchDialog/SearchDialog.stories.tsx +5 -6
  108. package/src/containers/SearchDialog/SearchDialog.tsx +24 -31
  109. package/src/containers/SearchDialog/index.ts +0 -1
  110. package/src/containers/index.ts +0 -2
  111. package/src/hooks/sync.ts +2 -2
  112. package/src/hooks/useWebSearch.ts +2 -2
  113. package/src/index.ts +2 -2
  114. package/src/operations/index.ts +1 -3
  115. package/src/operations/open-search.ts +3 -3
  116. package/src/plugin.ts +11 -0
  117. package/src/testing.ts +7 -0
  118. package/src/translations.ts +1 -1
  119. package/src/{operations/definitions.ts → types/SearchOperation.ts} +3 -1
  120. package/src/types/index.ts +2 -0
  121. package/dist/lib/browser/index.mjs.map +0 -7
  122. package/dist/lib/browser/meta.json +0 -1
  123. package/dist/types/src/operations/definitions.d.ts +0 -3
  124. package/dist/types/src/operations/definitions.d.ts.map +0 -1
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dxos/plugin-search",
3
- "version": "0.8.4-main.74a063c4e0",
3
+ "version": "0.8.4-main.765dc60934",
4
4
  "description": "Search plugin",
5
5
  "homepage": "https://dxos.org",
6
6
  "bugs": "https://github.com/dxos/dxos/issues",
@@ -8,25 +8,77 @@
8
8
  "type": "git",
9
9
  "url": "https://github.com/dxos/dxos"
10
10
  },
11
- "license": "MIT",
11
+ "license": "FSL-1.1-Apache-2.0",
12
12
  "author": "DXOS.org",
13
13
  "sideEffects": true,
14
14
  "type": "module",
15
15
  "imports": {
16
- "#capabilities": "./src/capabilities/index.ts",
17
- "#components": "./src/components/index.ts",
18
- "#containers": "./src/containers/index.ts",
19
- "#hooks": "./src/hooks/index.ts",
20
- "#meta": "./src/meta.ts",
21
- "#operations": "./src/operations/index.ts",
22
- "#types": "./src/types/index.ts"
16
+ "#capabilities": {
17
+ "source": "./src/capabilities/index.ts",
18
+ "types": "./dist/types/src/capabilities/index.d.ts",
19
+ "default": "./dist/lib/neutral/capabilities/index.mjs"
20
+ },
21
+ "#components": {
22
+ "source": "./src/components/index.ts",
23
+ "types": "./dist/types/src/components/index.d.ts",
24
+ "default": "./dist/lib/neutral/components/index.mjs"
25
+ },
26
+ "#containers": {
27
+ "source": "./src/containers/index.ts",
28
+ "types": "./dist/types/src/containers/index.d.ts",
29
+ "default": "./dist/lib/neutral/containers/index.mjs"
30
+ },
31
+ "#hooks": {
32
+ "source": "./src/hooks/index.ts",
33
+ "types": "./dist/types/src/hooks/index.d.ts",
34
+ "default": "./dist/lib/neutral/hooks/index.mjs"
35
+ },
36
+ "#meta": {
37
+ "source": "./src/meta.ts",
38
+ "types": "./dist/types/src/meta.d.ts",
39
+ "default": "./dist/lib/neutral/meta.mjs"
40
+ },
41
+ "#operations": {
42
+ "source": "./src/operations/index.ts",
43
+ "types": "./dist/types/src/operations/index.d.ts",
44
+ "default": "./dist/lib/neutral/operations/index.mjs"
45
+ },
46
+ "#plugin": {
47
+ "source": "./src/SearchPlugin.tsx",
48
+ "types": "./dist/types/src/SearchPlugin.d.ts",
49
+ "default": "./dist/lib/neutral/SearchPlugin.mjs"
50
+ },
51
+ "#translations": {
52
+ "source": "./src/translations.ts",
53
+ "types": "./dist/types/src/translations.d.ts",
54
+ "default": "./dist/lib/neutral/translations.mjs"
55
+ },
56
+ "#types": {
57
+ "source": "./src/types/index.ts",
58
+ "types": "./dist/types/src/types/index.d.ts",
59
+ "default": "./dist/lib/neutral/types/index.mjs"
60
+ }
23
61
  },
24
62
  "exports": {
25
63
  ".": {
26
64
  "source": "./src/index.ts",
27
65
  "types": "./dist/types/src/index.d.ts",
28
- "browser": "./dist/lib/browser/index.mjs",
29
- "node": "./dist/lib/node-esm/index.mjs"
66
+ "default": "./dist/lib/neutral/index.mjs"
67
+ },
68
+ "./plugin": {
69
+ "source": "./src/plugin.ts",
70
+ "types": "./dist/types/src/plugin.d.ts",
71
+ "default": "./dist/lib/neutral/plugin.mjs"
72
+ },
73
+ "./testing": {
74
+ "source": "./src/testing.ts",
75
+ "types": "./dist/types/src/testing.d.ts",
76
+ "default": "./dist/lib/neutral/testing.mjs"
77
+ },
78
+ "./translations": {
79
+ "source": "./src/translations.ts",
80
+ "types": "./dist/types/src/translations.d.ts",
81
+ "default": "./dist/lib/neutral/translations.mjs"
30
82
  }
31
83
  },
32
84
  "types": "dist/types/src/index.d.ts",
@@ -37,34 +89,34 @@
37
89
  "dependencies": {
38
90
  "exa-js": "^1.5.12",
39
91
  "main-thread-scheduling": "^14.1.1",
40
- "@dxos/ai": "0.8.4-main.74a063c4e0",
41
- "@dxos/app-framework": "0.8.4-main.74a063c4e0",
42
- "@dxos/async": "0.8.4-main.74a063c4e0",
43
- "@dxos/assistant": "0.8.4-main.74a063c4e0",
44
- "@dxos/app-toolkit": "0.8.4-main.74a063c4e0",
45
- "@dxos/blueprints": "0.8.4-main.74a063c4e0",
46
- "@dxos/echo": "0.8.4-main.74a063c4e0",
47
- "@dxos/debug": "0.8.4-main.74a063c4e0",
48
- "@dxos/echo-protocol": "0.8.4-main.74a063c4e0",
49
- "@dxos/echo-query": "0.8.4-main.74a063c4e0",
50
- "@dxos/invariant": "0.8.4-main.74a063c4e0",
51
- "@dxos/log": "0.8.4-main.74a063c4e0",
52
- "@dxos/plugin-client": "0.8.4-main.74a063c4e0",
53
- "@dxos/operation": "0.8.4-main.74a063c4e0",
54
- "@dxos/plugin-space": "0.8.4-main.74a063c4e0",
55
- "@dxos/plugin-deck": "0.8.4-main.74a063c4e0",
56
- "@dxos/plugin-graph": "0.8.4-main.74a063c4e0",
57
- "@dxos/react-client": "0.8.4-main.74a063c4e0",
58
- "@dxos/effect": "0.8.4-main.74a063c4e0",
59
- "@dxos/react-ui-attention": "0.8.4-main.74a063c4e0",
60
- "@dxos/react-ui-components": "0.8.4-main.74a063c4e0",
61
- "@dxos/react-ui-menu": "0.8.4-main.74a063c4e0",
62
- "@dxos/react-ui-search": "0.8.4-main.74a063c4e0",
63
- "@dxos/react-ui-mosaic": "0.8.4-main.74a063c4e0",
64
- "@dxos/react-ui-stack": "0.8.4-main.74a063c4e0",
65
- "@dxos/schema": "0.8.4-main.74a063c4e0",
66
- "@dxos/types": "0.8.4-main.74a063c4e0",
67
- "@dxos/util": "0.8.4-main.74a063c4e0"
92
+ "@dxos/ai": "0.8.4-main.765dc60934",
93
+ "@dxos/app-toolkit": "0.8.4-main.765dc60934",
94
+ "@dxos/async": "0.8.4-main.765dc60934",
95
+ "@dxos/compute": "0.8.4-main.765dc60934",
96
+ "@dxos/app-framework": "0.8.4-main.765dc60934",
97
+ "@dxos/debug": "0.8.4-main.765dc60934",
98
+ "@dxos/echo-query": "0.8.4-main.765dc60934",
99
+ "@dxos/invariant": "0.8.4-main.765dc60934",
100
+ "@dxos/assistant": "0.8.4-main.765dc60934",
101
+ "@dxos/effect": "0.8.4-main.765dc60934",
102
+ "@dxos/echo": "0.8.4-main.765dc60934",
103
+ "@dxos/log": "0.8.4-main.765dc60934",
104
+ "@dxos/plugin-client": "0.8.4-main.765dc60934",
105
+ "@dxos/plugin-deck": "0.8.4-main.765dc60934",
106
+ "@dxos/plugin-graph": "0.8.4-main.765dc60934",
107
+ "@dxos/plugin-space": "0.8.4-main.765dc60934",
108
+ "@dxos/react-ui-attention": "0.8.4-main.765dc60934",
109
+ "@dxos/react-client": "0.8.4-main.765dc60934",
110
+ "@dxos/react-ui-components": "0.8.4-main.765dc60934",
111
+ "@dxos/react-ui-list": "0.8.4-main.765dc60934",
112
+ "@dxos/react-ui-mosaic": "0.8.4-main.765dc60934",
113
+ "@dxos/react-ui-menu": "0.8.4-main.765dc60934",
114
+ "@dxos/react-ui-search": "0.8.4-main.765dc60934",
115
+ "@dxos/echo-protocol": "0.8.4-main.765dc60934",
116
+ "@dxos/react-ui-stack": "0.8.4-main.765dc60934",
117
+ "@dxos/types": "0.8.4-main.765dc60934",
118
+ "@dxos/schema": "0.8.4-main.765dc60934",
119
+ "@dxos/util": "0.8.4-main.765dc60934"
68
120
  },
69
121
  "devDependencies": {
70
122
  "@effect-atom/atom-react": "^0.5.0",
@@ -74,13 +126,13 @@
74
126
  "effect": "3.20.0",
75
127
  "react": "~19.2.3",
76
128
  "react-dom": "~19.2.3",
77
- "vite": "^7.1.11",
78
- "@dxos/plugin-preview": "0.8.4-main.74a063c4e0",
79
- "@dxos/plugin-testing": "0.8.4-main.74a063c4e0",
80
- "@dxos/random": "0.8.4-main.74a063c4e0",
81
- "@dxos/storybook-utils": "0.8.4-main.74a063c4e0",
82
- "@dxos/react-ui": "0.8.4-main.74a063c4e0",
83
- "@dxos/ui-theme": "0.8.4-main.74a063c4e0"
129
+ "vite": "^8.0.13",
130
+ "@dxos/plugin-preview": "0.8.4-main.765dc60934",
131
+ "@dxos/plugin-testing": "0.8.4-main.765dc60934",
132
+ "@dxos/random": "0.8.4-main.765dc60934",
133
+ "@dxos/react-ui": "0.8.4-main.765dc60934",
134
+ "@dxos/ui-theme": "0.8.4-main.765dc60934",
135
+ "@dxos/storybook-utils": "0.8.4-main.765dc60934"
84
136
  },
85
137
  "peerDependencies": {
86
138
  "@effect-atom/atom-react": "^0.5.0",
@@ -88,8 +140,8 @@
88
140
  "effect": "3.20.0",
89
141
  "react": "~19.2.3",
90
142
  "react-dom": "~19.2.3",
91
- "@dxos/react-ui": "0.8.4-main.74a063c4e0",
92
- "@dxos/ui-theme": "0.8.4-main.74a063c4e0"
143
+ "@dxos/ui-theme": "0.8.4-main.765dc60934",
144
+ "@dxos/react-ui": "0.8.4-main.765dc60934"
93
145
  },
94
146
  "publishConfig": {
95
147
  "access": "public"
@@ -6,32 +6,15 @@ import { Plugin } from '@dxos/app-framework';
6
6
  import { AppPlugin } from '@dxos/app-toolkit';
7
7
 
8
8
  import { AppGraphBuilder, OperationHandler, ReactSurface } from '#capabilities';
9
- import { SEARCH_RESULT, meta } from '#meta';
10
- import { type SearchResult } from '#types';
11
-
12
- import { translations } from './translations';
9
+ import { meta } from '#meta';
10
+ import { translations } from '#translations';
13
11
 
14
12
  export const SearchPlugin = Plugin.define(meta).pipe(
15
13
  AppPlugin.addAppGraphModule({ activate: AppGraphBuilder }),
16
- AppPlugin.addMetadataModule({
17
- metadata: {
18
- id: SEARCH_RESULT,
19
- metadata: {
20
- parse: (item: SearchResult, type: string) => {
21
- switch (type) {
22
- case 'node':
23
- return { id: item.id, label: item.label, data: item.object };
24
- case 'object':
25
- return item.object;
26
- case 'view-object':
27
- return item;
28
- }
29
- },
30
- },
31
- },
32
- }),
33
14
  AppPlugin.addOperationHandlerModule({ activate: OperationHandler }),
34
15
  AppPlugin.addSurfaceModule({ activate: ReactSurface }),
35
16
  AppPlugin.addTranslationsModule({ translations }),
36
17
  Plugin.make,
37
18
  );
19
+
20
+ export default SearchPlugin;
@@ -6,13 +6,13 @@ import * as Effect from 'effect/Effect';
6
6
 
7
7
  import { Capability } from '@dxos/app-framework';
8
8
  import { AppCapabilities, AppNode, getSpaceIdFromPath } from '@dxos/app-toolkit';
9
- import { Operation } from '@dxos/operation';
10
- import { ClientCapabilities } from '@dxos/plugin-client/types';
9
+ import { Operation } from '@dxos/compute';
10
+ import { ClientCapabilities } from '@dxos/plugin-client';
11
11
  import { GraphBuilder, NodeMatcher } from '@dxos/plugin-graph';
12
12
  import { linkedSegment } from '@dxos/react-ui-attention';
13
13
 
14
14
  import { meta } from '#meta';
15
- import { SearchOperation } from '#operations';
15
+ import { SearchOperation } from '#types';
16
16
 
17
17
  export default Capability.makeModule(
18
18
  Effect.fnUntraced(function* () {
@@ -3,7 +3,7 @@
3
3
  //
4
4
 
5
5
  import { Capability } from '@dxos/app-framework';
6
- import { OperationHandlerSet } from '@dxos/operation';
6
+ import { OperationHandlerSet } from '@dxos/compute';
7
7
 
8
8
  export const AppGraphBuilder = Capability.lazy('AppGraphBuilder', () => import('./app-graph-builder'));
9
9
  export const OperationHandler = Capability.lazy<OperationHandlerSet.OperationHandlerSet>(
@@ -5,7 +5,7 @@
5
5
  import * as Effect from 'effect/Effect';
6
6
 
7
7
  import { Capabilities, Capability } from '@dxos/app-framework';
8
- import type { OperationHandlerSet } from '@dxos/operation';
8
+ import type { OperationHandlerSet } from '@dxos/compute';
9
9
 
10
10
  import { SearchOperationHandlerSet } from '#operations';
11
11
 
@@ -3,7 +3,7 @@
3
3
  //
4
4
 
5
5
  import * as Effect from 'effect/Effect';
6
- import React from 'react';
6
+ import React, { type ComponentProps } from 'react';
7
7
 
8
8
  import { Capabilities, Capability } from '@dxos/app-framework';
9
9
  import { Surface } from '@dxos/app-framework/ui';
@@ -20,19 +20,28 @@ export default Capability.makeModule(() =>
20
20
  Capability.contributes(Capabilities.ReactSurface, [
21
21
  Surface.create({
22
22
  id: SEARCH_DIALOG,
23
- role: 'dialog',
24
- filter: AppSurface.componentDialog(SEARCH_DIALOG),
25
- component: ({ data }) => (
26
- <SearchContextProvider>
27
- <SearchDialog {...data.props} />
28
- </SearchContextProvider>
29
- ),
23
+ filter: AppSurface.component<ComponentProps<typeof SearchDialog>>(AppSurface.Dialog, SEARCH_DIALOG),
24
+ component: ({ data }) => {
25
+ const space = useActiveSpace();
26
+ if (!space) {
27
+ return null;
28
+ }
29
+
30
+ return (
31
+ <SearchContextProvider>
32
+ <SearchDialog {...data.props} space={space} />
33
+ </SearchContextProvider>
34
+ );
35
+ },
30
36
  }),
31
37
  Surface.create({
32
38
  id: `${SEARCH_DIALOG}.search-input`,
33
39
  role: 'search-input',
34
40
  component: () => {
35
41
  const space = useActiveSpace();
42
+ if (!space) {
43
+ return null;
44
+ }
36
45
 
37
46
  return (
38
47
  <SearchContextProvider>
@@ -5,7 +5,7 @@
5
5
  import React, { type KeyboardEvent, forwardRef, useCallback, useMemo, useState } from 'react';
6
6
 
7
7
  import { Surface } from '@dxos/app-framework/ui';
8
- import { useObjectMenuItems } from '@dxos/app-toolkit/ui';
8
+ import { AppSurface, useObjectMenuItems } from '@dxos/app-toolkit/ui';
9
9
  import { Entity } from '@dxos/echo';
10
10
  import { Card, Toolbar } from '@dxos/react-ui';
11
11
  import { ScrollArea } from '@dxos/react-ui';
@@ -106,7 +106,7 @@ const SearchResultTile = forwardRef<HTMLDivElement, SearchResultTileProps>(
106
106
  </Menu.Trigger>
107
107
  <Menu.Content items={menuItems} />
108
108
  </Card.Toolbar>
109
- <Surface.Surface role='card--content' data={{ subject: result.object }} limit={1} />
109
+ <Surface.Surface type={AppSurface.Card} data={{ subject: result.object }} limit={1} />
110
110
  </Card.Root>
111
111
  </Focus.Item>
112
112
  </Mosaic.Tile>
@@ -9,9 +9,9 @@ import React from 'react';
9
9
  import { Capability } from '@dxos/app-framework';
10
10
  import { withPluginManager } from '@dxos/app-framework/testing';
11
11
  import { AppCapabilities } from '@dxos/app-toolkit';
12
- import { ClientPlugin } from '@dxos/plugin-client';
12
+ import { ClientPlugin } from '@dxos/plugin-client/testing';
13
13
  import { initializeIdentity } from '@dxos/plugin-client/testing';
14
- import { corePlugins, StorybookPlugin } from '@dxos/plugin-testing';
14
+ import { StorybookPlugin, corePlugins } from '@dxos/plugin-testing';
15
15
  import { random } from '@dxos/random';
16
16
  import { useSpaces } from '@dxos/react-client/echo';
17
17
  import { Loading, withLayout } from '@dxos/react-ui/testing';
@@ -19,8 +19,8 @@ import { createObjectFactory } from '@dxos/schema/testing';
19
19
  import { Organization, Person } from '@dxos/types';
20
20
 
21
21
  import { SearchContextProvider } from '#hooks';
22
+ import { translations } from '#translations';
22
23
 
23
- import { translations } from '../../translations';
24
24
  import { SearchArticle } from './SearchArticle';
25
25
 
26
26
  random.seed(0);
@@ -34,14 +34,13 @@ const DefaultStory = () => {
34
34
 
35
35
  return (
36
36
  <SearchContextProvider>
37
- <SearchArticle space={space} />
37
+ <SearchArticle role='article' space={space} attendableId={space.id} />
38
38
  </SearchContextProvider>
39
39
  );
40
40
  };
41
41
 
42
42
  const meta = {
43
43
  title: 'plugins/plugin-search/containers/SearchArticle',
44
- component: SearchArticle,
45
44
  render: DefaultStory,
46
45
  decorators: [
47
46
  withLayout({ layout: 'column' }),
@@ -71,7 +70,7 @@ const meta = {
71
70
  parameters: {
72
71
  layout: 'fullscreen',
73
72
  },
74
- } satisfies Meta<typeof SearchArticle>;
73
+ } satisfies Meta<typeof DefaultStory>;
75
74
 
76
75
  export default meta;
77
76
 
@@ -4,8 +4,9 @@
4
4
 
5
5
  import React, { useCallback, useMemo, useState } from 'react';
6
6
 
7
- import { Entity, Query } from '@dxos/echo';
8
- import { Filter, type Space, useQuery } from '@dxos/react-client/echo';
7
+ import { AppSurface } from '@dxos/app-toolkit/ui';
8
+ import { Entity, Filter, Query } from '@dxos/echo';
9
+ import { useQuery } from '@dxos/react-client/echo';
9
10
  import { Panel, Toolbar } from '@dxos/react-ui';
10
11
  import { SearchList } from '@dxos/react-ui-search';
11
12
  import { Text } from '@dxos/schema';
@@ -14,16 +15,12 @@ import { isTauri, getHostPlatform } from '@dxos/util';
14
15
  import { SearchResultStack } from '#components';
15
16
  import { useGlobalSearch, useGlobalSearchResults, useWebSearch } from '#hooks';
16
17
 
17
- export type SearchArticleProps = {
18
- space?: Space;
19
- };
20
-
21
- export const SearchArticle = ({ space }: SearchArticleProps) => {
18
+ export const SearchArticle = ({ space }: AppSurface.SpaceArticleProps) => {
22
19
  // TODO(burdon): Option to query across spaces.
23
20
  const [query, setQuery] = useState<string>();
24
21
  // TODO(burdon): Re-enable full-text search when indexer is available in all environments.
25
22
  const objects = useQuery(
26
- space?.db,
23
+ space.db,
27
24
  query === undefined ? Query.select(Filter.nothing()) : Query.select(Filter.not(Filter.type(Text.Text))),
28
25
  );
29
26
 
@@ -10,9 +10,9 @@ import { expect, userEvent, waitFor, within } from 'storybook/test';
10
10
  import { Capability } from '@dxos/app-framework';
11
11
  import { withPluginManager } from '@dxos/app-framework/testing';
12
12
  import { AppCapabilities } from '@dxos/app-toolkit';
13
- import { ClientPlugin } from '@dxos/plugin-client';
13
+ import { ClientPlugin } from '@dxos/plugin-client/testing';
14
14
  import { initializeIdentity } from '@dxos/plugin-client/testing';
15
- import { corePlugins, StorybookPlugin } from '@dxos/plugin-testing';
15
+ import { StorybookPlugin, corePlugins } from '@dxos/plugin-testing';
16
16
  import { random } from '@dxos/random';
17
17
  import { useSpaces } from '@dxos/react-client/echo';
18
18
  import { Dialog } from '@dxos/react-ui';
@@ -21,8 +21,8 @@ import { createObjectFactory } from '@dxos/schema/testing';
21
21
  import { Organization, Person } from '@dxos/types';
22
22
 
23
23
  import { SearchContextProvider } from '#hooks';
24
+ import { translations } from '#translations';
24
25
 
25
- import { translations } from '../../translations';
26
26
  import { SearchDialog } from './SearchDialog';
27
27
 
28
28
  random.seed(0);
@@ -38,7 +38,7 @@ const DefaultStory = () => {
38
38
  <SearchContextProvider>
39
39
  <Dialog.Root defaultOpen>
40
40
  <Dialog.Overlay>
41
- <SearchDialog pivotId='storybook' space={space} />
41
+ <SearchDialog role='article' space={space} attendableId={space.id} pivotId='storybook' />
42
42
  </Dialog.Overlay>
43
43
  </Dialog.Root>
44
44
  </SearchContextProvider>
@@ -47,7 +47,6 @@ const DefaultStory = () => {
47
47
 
48
48
  const meta = {
49
49
  title: 'plugins/plugin-search/containers/SearchDialog',
50
- component: SearchDialog,
51
50
  render: DefaultStory,
52
51
  decorators: [
53
52
  withLayout({ layout: 'fullscreen' }),
@@ -78,7 +77,7 @@ const meta = {
78
77
  parameters: {
79
78
  layout: 'fullscreen',
80
79
  },
81
- } satisfies Meta<typeof SearchDialog>;
80
+ } satisfies Meta<typeof DefaultStory>;
82
81
 
83
82
  export default meta;
84
83
 
@@ -6,10 +6,10 @@ import React, { useCallback, useMemo, useState } from 'react';
6
6
 
7
7
  import { useOperationInvoker } from '@dxos/app-framework/ui';
8
8
  import { getObjectPathFromObject, LayoutOperation } from '@dxos/app-toolkit';
9
+ import { type AppSurface } from '@dxos/app-toolkit/ui';
9
10
  import { useLayout } from '@dxos/app-toolkit/ui';
10
- import { useActiveSpace } from '@dxos/app-toolkit/ui';
11
- import { Entity, Obj, Query } from '@dxos/echo';
12
- import { Filter, type Space, useQuery } from '@dxos/react-client/echo';
11
+ import { Entity, Filter, Obj, Query } from '@dxos/echo';
12
+ import { useQuery } from '@dxos/react-client/echo';
13
13
  import { Dialog, useTranslation } from '@dxos/react-ui';
14
14
  import { SearchList } from '@dxos/react-ui-search';
15
15
  import { Text } from '@dxos/schema';
@@ -18,21 +18,18 @@ import { useGlobalSearch, useGlobalSearchResults } from '#hooks';
18
18
  import { meta } from '#meta';
19
19
  import { type SearchResult } from '#types';
20
20
 
21
- export type SearchDialogProps = {
21
+ export type SearchDialogProps = AppSurface.SpaceArticleProps<{
22
22
  pivotId?: string;
23
- space?: Space;
24
- };
23
+ }>;
25
24
 
26
- export const SearchDialog = ({ pivotId: pivotIdProp, space: spaceProp }: SearchDialogProps) => {
25
+ export const SearchDialog = ({ space, pivotId: pivotIdProp }: SearchDialogProps) => {
27
26
  const { t } = useTranslation(meta.id);
28
- const layout = useLayout();
29
- const pivotId = pivotIdProp ?? layout.active[layout.active.length - 1];
30
27
  const { invokePromise } = useOperationInvoker();
31
28
  const { setMatch } = useGlobalSearch();
29
+ const layout = useLayout();
30
+ const pivotId = pivotIdProp ?? layout.active[layout.active.length - 1];
32
31
  const [query, setQuery] = useState<string>();
33
32
 
34
- const activeSpace = useActiveSpace();
35
- const space = spaceProp ?? activeSpace;
36
33
  // TODO(burdon): Re-enable full-text search when indexer is available in all environments.
37
34
  const objects = useQuery(
38
35
  space?.db,
@@ -75,26 +72,22 @@ export const SearchDialog = ({ pivotId: pivotIdProp, space: spaceProp }: SearchD
75
72
  <Dialog.CloseIconButton />
76
73
  </Dialog.Close>
77
74
  </Dialog.Header>
78
- <Dialog.Body>
79
- <SearchList.Root onSearch={handleSearch}>
80
- <SearchList.Content classNames='max-h-[24rem]'>
81
- <SearchList.Input classNames='px-0' autoFocus placeholder={t('search.placeholder')} />
82
- <SearchList.Viewport>
83
- {allResults.map((result) => (
84
- <SearchList.Item
85
- key={result.id}
86
- classNames='flex gap-2 items-center'
87
- value={result.id}
88
- label={result.label ?? (result.object ? Entity.getLabel(result.object) : undefined) ?? result.id}
89
- icon={result.icon}
90
- onSelect={() => void handleSelect(result)}
91
- />
92
- ))}
93
- {query && allResults.length === 0 && <SearchList.Empty />}
94
- </SearchList.Viewport>
95
- </SearchList.Content>
96
- </SearchList.Root>
97
- </Dialog.Body>
75
+ <SearchList.Root onSearch={handleSearch}>
76
+ <SearchList.Input classNames='px-0' autoFocus placeholder={t('search.placeholder')} />
77
+ <SearchList.Viewport classNames='max-h-[24rem]'>
78
+ {allResults.map((result) => (
79
+ <SearchList.Item
80
+ key={result.id}
81
+ classNames='flex gap-2 items-center'
82
+ value={result.id}
83
+ label={result.label ?? (result.object ? Entity.getLabel(result.object) : undefined) ?? result.id}
84
+ icon={result.icon}
85
+ onSelect={() => void handleSelect(result)}
86
+ />
87
+ ))}
88
+ {query && allResults.length === 0 && <SearchList.Empty />}
89
+ </SearchList.Viewport>
90
+ </SearchList.Root>
98
91
  </Dialog.Content>
99
92
  );
100
93
  };
@@ -2,5 +2,4 @@
2
2
  // Copyright 2025 DXOS.org
3
3
  //
4
4
 
5
- export { SearchDialog, type SearchDialogProps } from './SearchDialog';
6
5
  export { SearchDialog as default } from './SearchDialog';
@@ -4,7 +4,5 @@
4
4
 
5
5
  import { type ComponentType, lazy } from 'react';
6
6
 
7
- export type { SearchDialogProps } from './SearchDialog';
8
-
9
7
  export const SearchDialog: ComponentType<any> = lazy(() => import('./SearchDialog'));
10
8
  export const SearchArticle: ComponentType<any> = lazy(() => import('./SearchArticle'));
package/src/hooks/sync.ts CHANGED
@@ -5,7 +5,7 @@
5
5
  import type * as Schema from 'effect/Schema';
6
6
  import * as SchemaAST from 'effect/SchemaAST';
7
7
 
8
- import { type Entity, Obj } from '@dxos/echo';
8
+ import { Entity, Obj } from '@dxos/echo';
9
9
  import { Text } from '@dxos/schema';
10
10
 
11
11
  import { type SearchResult } from '#types';
@@ -57,7 +57,7 @@ export const filterObjectsSync = <T extends Entity.Unknown>(objects: T[], match?
57
57
 
58
58
  results.push({
59
59
  id: object.id,
60
- type: getIcon(Obj.getSchema(object)),
60
+ type: getIcon(Entity.getSchema(object)),
61
61
  label,
62
62
  match,
63
63
  // TODO(burdon): Truncate.
@@ -5,7 +5,7 @@
5
5
  import { useCallback, useState } from 'react';
6
6
 
7
7
  import { EXA_API_KEY } from '@dxos/ai/testing';
8
- import { Obj } from '@dxos/echo';
8
+ import { Entity } from '@dxos/echo';
9
9
  import { log } from '@dxos/log';
10
10
  import { getIconAnnotation } from '@dxos/schema';
11
11
  import { TestSchema } from '@dxos/schema/testing';
@@ -44,7 +44,7 @@ export const useWebSearch = ({ query, context }: UseWebSearchProps): UseWebSearc
44
44
  });
45
45
 
46
46
  const mappedResults = results.data.map((result): SearchResult => {
47
- const schema = Obj.getSchema(result);
47
+ const schema = Entity.getSchema(result);
48
48
  return {
49
49
  id: result.id,
50
50
  label: getStringProperty(result, ['name', 'title', 'label']),
package/src/index.ts CHANGED
@@ -2,8 +2,8 @@
2
2
  // Copyright 2023 DXOS.org
3
3
  //
4
4
 
5
+ // TODO(wittjosiah): Hooks should not be exported from the plugin package at all.
6
+ // Either refactor callers to not need them or factor them out to a shared package.
5
7
  export * from './hooks';
6
8
  export * from './meta';
7
9
  export * from './types';
8
-
9
- export * from './SearchPlugin';
@@ -2,8 +2,6 @@
2
2
  // Copyright 2025 DXOS.org
3
3
  //
4
4
 
5
- import { OperationHandlerSet } from '@dxos/operation';
6
-
7
- export * as SearchOperation from './definitions';
5
+ import { OperationHandlerSet } from '@dxos/compute';
8
6
 
9
7
  export const SearchOperationHandlerSet = OperationHandlerSet.lazy(() => import('./open-search'));
@@ -5,12 +5,12 @@
5
5
  import * as Effect from 'effect/Effect';
6
6
 
7
7
  import { LayoutOperation } from '@dxos/app-toolkit';
8
- import { Operation } from '@dxos/operation';
8
+ import { Operation } from '@dxos/compute';
9
9
 
10
10
  import { SEARCH_DIALOG } from '../constants';
11
- import { OpenSearch } from './definitions';
11
+ import { SearchOperation } from '../types';
12
12
 
13
- const handler: Operation.WithHandler<typeof OpenSearch> = OpenSearch.pipe(
13
+ const handler: Operation.WithHandler<typeof SearchOperation.OpenSearch> = SearchOperation.OpenSearch.pipe(
14
14
  Operation.withHandler(
15
15
  Effect.fnUntraced(function* () {
16
16
  yield* Operation.invoke(LayoutOperation.UpdateDialog, {