@dxos/plugin-masonry 0.8.4-main.406dc2a → 0.8.4-main.72ec0f3

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 (41) hide show
  1. package/dist/lib/browser/{chunk-VRZWIUS7.mjs → chunk-Z4ORTGID.mjs} +12 -6
  2. package/dist/lib/browser/chunk-Z4ORTGID.mjs.map +7 -0
  3. package/dist/lib/browser/index.mjs +5 -4
  4. package/dist/lib/browser/index.mjs.map +3 -3
  5. package/dist/lib/browser/{intent-resolver-YK7KRGIJ.mjs → intent-resolver-TCILFRP3.mjs} +2 -2
  6. package/dist/lib/browser/meta.json +1 -1
  7. package/dist/lib/browser/{react-surface-R2TDTTUL.mjs → react-surface-EUN65F5S.mjs} +5 -5
  8. package/dist/lib/browser/react-surface-EUN65F5S.mjs.map +7 -0
  9. package/dist/lib/node-esm/{chunk-Z4PPM6OA.mjs → chunk-K7UZDCYX.mjs} +12 -6
  10. package/dist/lib/node-esm/chunk-K7UZDCYX.mjs.map +7 -0
  11. package/dist/lib/node-esm/index.mjs +5 -4
  12. package/dist/lib/node-esm/index.mjs.map +3 -3
  13. package/dist/lib/node-esm/{intent-resolver-VVQIEZTT.mjs → intent-resolver-ABCXBMFV.mjs} +2 -2
  14. package/dist/lib/node-esm/meta.json +1 -1
  15. package/dist/lib/node-esm/{react-surface-YTC42VZ3.mjs → react-surface-OUXYIQWW.mjs} +5 -5
  16. package/dist/lib/node-esm/react-surface-OUXYIQWW.mjs.map +7 -0
  17. package/dist/types/src/MasonryPlugin.d.ts.map +1 -1
  18. package/dist/types/src/capabilities/react-surface.d.ts.map +1 -1
  19. package/dist/types/src/components/MasonryContainer.d.ts +2 -2
  20. package/dist/types/src/components/MasonryContainer.d.ts.map +1 -1
  21. package/dist/types/src/components/MasonryContainer.stories.d.ts.map +1 -1
  22. package/dist/types/src/meta.d.ts.map +1 -1
  23. package/dist/types/src/types/Masonry.d.ts +3 -3
  24. package/dist/types/src/types/Masonry.d.ts.map +1 -1
  25. package/dist/types/src/types/MasonryAction.d.ts +2 -2
  26. package/dist/types/src/types/MasonryAction.d.ts.map +1 -1
  27. package/dist/types/tsconfig.tsbuildinfo +1 -1
  28. package/package.json +23 -21
  29. package/src/MasonryPlugin.tsx +1 -0
  30. package/src/capabilities/react-surface.tsx +3 -4
  31. package/src/components/MasonryContainer.stories.tsx +11 -6
  32. package/src/components/MasonryContainer.tsx +3 -3
  33. package/src/meta.ts +6 -1
  34. package/src/types/Masonry.ts +4 -4
  35. package/src/types/MasonryAction.ts +3 -2
  36. package/dist/lib/browser/chunk-VRZWIUS7.mjs.map +0 -7
  37. package/dist/lib/browser/react-surface-R2TDTTUL.mjs.map +0 -7
  38. package/dist/lib/node-esm/chunk-Z4PPM6OA.mjs.map +0 -7
  39. package/dist/lib/node-esm/react-surface-YTC42VZ3.mjs.map +0 -7
  40. /package/dist/lib/browser/{intent-resolver-YK7KRGIJ.mjs.map → intent-resolver-TCILFRP3.mjs.map} +0 -0
  41. /package/dist/lib/node-esm/{intent-resolver-VVQIEZTT.mjs.map → intent-resolver-ABCXBMFV.mjs.map} +0 -0
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dxos/plugin-masonry",
3
- "version": "0.8.4-main.406dc2a",
3
+ "version": "0.8.4-main.72ec0f3",
4
4
  "description": "Masonry DXOS Surface plugin",
5
5
  "homepage": "https://dxos.org",
6
6
  "bugs": "https://github.com/dxos/dxos/issues",
@@ -25,38 +25,40 @@
25
25
  "@preact-signals/safe-react": "^0.9.0",
26
26
  "@preact/signals-core": "^1.12.1",
27
27
  "@preact/signals-react": "^3.3.0",
28
- "@dxos/app-framework": "0.8.4-main.406dc2a",
29
- "@dxos/echo": "0.8.4-main.406dc2a",
30
- "@dxos/effect": "0.8.4-main.406dc2a",
31
- "@dxos/plugin-client": "0.8.4-main.406dc2a",
32
- "@dxos/plugin-search": "0.8.4-main.406dc2a",
33
- "@dxos/react-client": "0.8.4-main.406dc2a",
34
- "@dxos/plugin-space": "0.8.4-main.406dc2a",
35
- "@dxos/react-ui": "0.8.4-main.406dc2a",
36
- "@dxos/react-ui-form": "0.8.4-main.406dc2a",
37
- "@dxos/react-ui-masonry": "0.8.4-main.406dc2a",
38
- "@dxos/react-ui-stack": "0.8.4-main.406dc2a",
39
- "@dxos/schema": "0.8.4-main.406dc2a"
28
+ "@dxos/app-framework": "0.8.4-main.72ec0f3",
29
+ "@dxos/echo": "0.8.4-main.72ec0f3",
30
+ "@dxos/plugin-space": "0.8.4-main.72ec0f3",
31
+ "@dxos/plugin-search": "0.8.4-main.72ec0f3",
32
+ "@dxos/plugin-client": "0.8.4-main.72ec0f3",
33
+ "@dxos/effect": "0.8.4-main.72ec0f3",
34
+ "@dxos/react-client": "0.8.4-main.72ec0f3",
35
+ "@dxos/react-ui": "0.8.4-main.72ec0f3",
36
+ "@dxos/react-ui-form": "0.8.4-main.72ec0f3",
37
+ "@dxos/react-ui-masonry": "0.8.4-main.72ec0f3",
38
+ "@dxos/react-ui-stack": "0.8.4-main.72ec0f3",
39
+ "@dxos/schema": "0.8.4-main.72ec0f3",
40
+ "@dxos/types": "0.8.4-main.72ec0f3",
41
+ "@dxos/util": "0.8.4-main.72ec0f3"
40
42
  },
41
43
  "devDependencies": {
42
44
  "@types/react": "~19.2.2",
43
- "@types/react-dom": "~19.2.1",
45
+ "@types/react-dom": "~19.2.2",
44
46
  "effect": "3.18.3",
45
47
  "react": "~19.2.0",
46
48
  "react-dom": "~19.2.0",
47
49
  "vite": "7.1.9",
48
- "@dxos/plugin-preview": "0.8.4-main.406dc2a",
49
- "@dxos/random": "0.8.4-main.406dc2a",
50
- "@dxos/react-ui-theme": "0.8.4-main.406dc2a",
51
- "@dxos/plugin-theme": "0.8.4-main.406dc2a",
52
- "@dxos/storybook-utils": "0.8.4-main.406dc2a"
50
+ "@dxos/plugin-preview": "0.8.4-main.72ec0f3",
51
+ "@dxos/plugin-theme": "0.8.4-main.72ec0f3",
52
+ "@dxos/random": "0.8.4-main.72ec0f3",
53
+ "@dxos/react-ui-theme": "0.8.4-main.72ec0f3",
54
+ "@dxos/storybook-utils": "0.8.4-main.72ec0f3"
53
55
  },
54
56
  "peerDependencies": {
55
57
  "effect": "^3.13.3",
56
58
  "react": "^19.0.0",
57
59
  "react-dom": "^19.0.0",
58
- "@dxos/react-ui-theme": "0.8.4-main.406dc2a",
59
- "@dxos/react-ui": "0.8.4-main.406dc2a"
60
+ "@dxos/react-ui": "0.8.4-main.72ec0f3",
61
+ "@dxos/react-ui-theme": "0.8.4-main.72ec0f3"
60
62
  },
61
63
  "publishConfig": {
62
64
  "access": "public"
@@ -31,6 +31,7 @@ export const MasonryPlugin = definePlugin(meta, () => [
31
31
  id: Masonry.Masonry.typename,
32
32
  metadata: {
33
33
  icon: 'ph--wall--regular',
34
+ iconHue: 'green',
34
35
  },
35
36
  }),
36
37
  }),
@@ -6,7 +6,7 @@ import React from 'react';
6
6
 
7
7
  import { Capabilities, contributes, createSurface } from '@dxos/app-framework';
8
8
  import { Obj } from '@dxos/echo';
9
- import { DataType } from '@dxos/schema';
9
+ import { View } from '@dxos/schema';
10
10
 
11
11
  import { MasonryContainer } from '../components/MasonryContainer';
12
12
  import { meta } from '../meta';
@@ -17,9 +17,8 @@ export default () =>
17
17
  createSurface({
18
18
  id: meta.id,
19
19
  role: ['article', 'section'],
20
- filter: (data): data is { subject: DataType.View } =>
21
- Obj.instanceOf(DataType.View, data.subject) &&
22
- Obj.instanceOf(Masonry.Masonry, data.subject.presentation?.target),
20
+ filter: (data): data is { subject: View.View } =>
21
+ Obj.instanceOf(View.View, data.subject) && Obj.instanceOf(Masonry.Masonry, data.subject.presentation?.target),
23
22
  component: ({ data, role }) => <MasonryContainer view={data.subject} role={role} />,
24
23
  }),
25
24
  ]);
@@ -16,8 +16,9 @@ import { faker } from '@dxos/random';
16
16
  import { Filter, useQuery, useSpaces } from '@dxos/react-client/echo';
17
17
  import { withTheme } from '@dxos/react-ui/testing';
18
18
  import { defaultTx } from '@dxos/react-ui-theme';
19
- import { DataType } from '@dxos/schema';
19
+ import { View } from '@dxos/schema';
20
20
  import { createObjectFactory } from '@dxos/schema/testing';
21
+ import { Organization } from '@dxos/types';
21
22
 
22
23
  import { Masonry } from '../types';
23
24
 
@@ -28,8 +29,8 @@ faker.seed(0);
28
29
  const StorybookMasonry = () => {
29
30
  const spaces = useSpaces();
30
31
  const space = spaces[spaces.length - 1];
31
- const views = useQuery(space, Filter.type(DataType.View));
32
- const [view, setView] = useState<DataType.View>();
32
+ const views = useQuery(space, Filter.type(View.View));
33
+ const [view, setView] = useState<View.View>();
33
34
  useEffect(() => {
34
35
  if (views.length && !view) {
35
36
  const view = views[0];
@@ -49,17 +50,21 @@ const meta = {
49
50
  withPluginManager({
50
51
  plugins: [
51
52
  ClientPlugin({
52
- types: [DataType.Organization, DataType.View, Masonry.Masonry],
53
+ types: [Organization.Organization, View.View, Masonry.Masonry],
53
54
  onClientInitialized: async ({ client }) => {
54
55
  await client.halo.createIdentity();
55
56
  const space = await client.spaces.create();
56
57
  await space.waitUntilReady();
57
58
 
58
- const { view } = await Masonry.makeView({ space, client, typename: DataType.Organization.typename });
59
+ const { view } = await Masonry.makeView({
60
+ space,
61
+ client,
62
+ typename: Organization.Organization.typename,
63
+ });
59
64
  space.db.add(view);
60
65
 
61
66
  const factory = createObjectFactory(space.db, faker as any);
62
- await factory([{ type: DataType.Organization, count: 64 }]);
67
+ await factory([{ type: Organization.Organization, count: 64 }]);
63
68
  },
64
69
  }),
65
70
  SpacePlugin({}),
@@ -4,20 +4,20 @@
4
4
 
5
5
  import React, { useEffect, useMemo, useState } from 'react';
6
6
 
7
- import { Surface } from '@dxos/app-framework';
7
+ import { Surface } from '@dxos/app-framework/react';
8
8
  import { Filter, Type } from '@dxos/echo';
9
9
  import { EchoSchema, type TypedObject } from '@dxos/echo/internal';
10
10
  import { useGlobalFilteredObjects } from '@dxos/plugin-search';
11
11
  import { useClient } from '@dxos/react-client';
12
12
  import { getSpace, useQuery } from '@dxos/react-client/echo';
13
13
  import { Masonry } from '@dxos/react-ui-masonry';
14
- import { type DataType, ProjectionModel, getTypenameFromQuery } from '@dxos/schema';
14
+ import { ProjectionModel, type View, getTypenameFromQuery } from '@dxos/schema';
15
15
 
16
16
  const Item = ({ data }: { data: any }) => {
17
17
  return <Surface role='card' limit={1} data={{ subject: data }} />;
18
18
  };
19
19
 
20
- export const MasonryContainer = ({ view, role }: { view: DataType.View; role: string }) => {
20
+ export const MasonryContainer = ({ view, role }: { view: View.View; role: string }) => {
21
21
  const client = useClient();
22
22
  const space = getSpace(view);
23
23
  const typename = view.query ? getTypenameFromQuery(view.query.ast) : undefined;
package/src/meta.ts CHANGED
@@ -3,12 +3,17 @@
3
3
  //
4
4
 
5
5
  import { type PluginMeta } from '@dxos/app-framework';
6
+ import { trim } from '@dxos/util';
6
7
 
7
8
  export const meta: PluginMeta = {
8
9
  id: 'dxos.org/plugin/masonry',
9
10
  name: 'Masonry',
10
- description: 'Masonry displays items from a View query in a responsive grid.',
11
+ description: trim`
12
+ Responsive grid layout that displays query results in an adaptive masonry pattern.
13
+ Visualize collections of cards, images, or mixed content that automatically adjusts to available screen space.
14
+ `,
11
15
  icon: 'ph--wall--regular',
16
+ iconHue: 'green',
12
17
  source: 'https://github.com/dxos/dxos/tree/main/packages/plugins/plugin-masonry',
13
18
  screenshots: [],
14
19
  };
@@ -6,7 +6,7 @@ import * as Schema from 'effect/Schema';
6
6
 
7
7
  import { Obj, Type } from '@dxos/echo';
8
8
  import { type JsonSchemaType, ViewAnnotation, toEffectSchema } from '@dxos/echo/internal';
9
- import { type CreateViewFromSpaceProps, type DataType, createViewFromSpace } from '@dxos/schema';
9
+ import { View } from '@dxos/schema';
10
10
 
11
11
  export const Masonry = Schema.Struct({
12
12
  arrangement: Schema.Array(
@@ -31,17 +31,17 @@ export type Masonry = Schema.Schema.Type<typeof Masonry>;
31
31
  */
32
32
  export const make = (props: Obj.MakeProps<typeof Masonry> = {}) => Obj.make(Masonry, props);
33
33
 
34
- export type MakeViewProps = Omit<CreateViewFromSpaceProps, 'presentation'>;
34
+ export type MakeViewProps = Omit<View.MakeFromSpaceProps, 'presentation'>;
35
35
 
36
36
  export const makeView = async ({
37
37
  ...props
38
38
  }: MakeViewProps): Promise<{
39
39
  jsonSchema: JsonSchemaType;
40
- view: DataType.View;
40
+ view: View.View;
41
41
  schema: ReturnType<typeof toEffectSchema>;
42
42
  }> => {
43
43
  const masonry = Obj.make(Masonry, {});
44
- const { jsonSchema, view } = await createViewFromSpace({ ...props, presentation: masonry });
44
+ const { jsonSchema, view } = await View.makeFromSpace({ ...props, presentation: masonry });
45
45
 
46
46
  // Preset sizes.
47
47
  const schema = toEffectSchema(jsonSchema);
@@ -5,7 +5,7 @@
5
5
  import * as Schema from 'effect/Schema';
6
6
 
7
7
  import { SpaceSchema } from '@dxos/react-client/echo';
8
- import { DataType, TypenameAnnotationId } from '@dxos/schema';
8
+ import { TypenameAnnotationId, View } from '@dxos/schema';
9
9
 
10
10
  import { meta } from '../meta';
11
11
 
@@ -13,6 +13,7 @@ const MASONRY_ACTION = `${meta.id}/action`;
13
13
 
14
14
  export const MasonryProps = Schema.Struct({
15
15
  name: Schema.optional(Schema.String),
16
+ // TODO(wittjosiah): This should be a query input instead.
16
17
  typename: Schema.optional(
17
18
  Schema.String.annotations({
18
19
  [TypenameAnnotationId]: ['used-static', 'dynamic'],
@@ -24,6 +25,6 @@ export const MasonryProps = Schema.Struct({
24
25
  export class CreateMasonry extends Schema.TaggedClass<CreateMasonry>()(`${MASONRY_ACTION}/create`, {
25
26
  input: Schema.extend(Schema.Struct({ space: SpaceSchema }), MasonryProps),
26
27
  output: Schema.Struct({
27
- object: DataType.View,
28
+ object: View.View,
28
29
  }),
29
30
  }) {}
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../src/meta.ts", "../../../src/types/Masonry.ts", "../../../src/types/MasonryAction.ts"],
4
- "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport { type PluginMeta } from '@dxos/app-framework';\n\nexport const meta: PluginMeta = {\n id: 'dxos.org/plugin/masonry',\n name: 'Masonry',\n description: 'Masonry displays items from a View query in a responsive grid.',\n icon: 'ph--wall--regular',\n source: 'https://github.com/dxos/dxos/tree/main/packages/plugins/plugin-masonry',\n screenshots: [],\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Schema from 'effect/Schema';\n\nimport { Obj, Type } from '@dxos/echo';\nimport { type JsonSchemaType, ViewAnnotation, toEffectSchema } from '@dxos/echo/internal';\nimport { type CreateViewFromSpaceProps, type DataType, createViewFromSpace } from '@dxos/schema';\n\nexport const Masonry = Schema.Struct({\n arrangement: Schema.Array(\n Schema.Struct({\n ids: Schema.Array(Type.ObjectId),\n hidden: Schema.optional(Schema.Boolean),\n }).pipe(Schema.mutable),\n ).pipe(Schema.mutable, Schema.optional),\n // TODO(wittjosiah): Consider Masonry supporting not being just a view but referencing arbitrary data directly.\n}).pipe(\n Type.Obj({\n typename: 'dxos.org/type/Masonry',\n version: '0.1.0',\n }),\n ViewAnnotation.set(true),\n);\n\nexport type Masonry = Schema.Schema.Type<typeof Masonry>;\n\n/**\n * Make a masonry object.\n */\nexport const make = (props: Obj.MakeProps<typeof Masonry> = {}) => Obj.make(Masonry, props);\n\nexport type MakeViewProps = Omit<CreateViewFromSpaceProps, 'presentation'>;\n\nexport const makeView = async ({\n ...props\n}: MakeViewProps): Promise<{\n jsonSchema: JsonSchemaType;\n view: DataType.View;\n schema: ReturnType<typeof toEffectSchema>;\n}> => {\n const masonry = Obj.make(Masonry, {});\n const { jsonSchema, view } = await createViewFromSpace({ ...props, presentation: masonry });\n\n // Preset sizes.\n const schema = toEffectSchema(jsonSchema);\n\n return { jsonSchema, schema, view };\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Schema from 'effect/Schema';\n\nimport { SpaceSchema } from '@dxos/react-client/echo';\nimport { DataType, TypenameAnnotationId } from '@dxos/schema';\n\nimport { meta } from '../meta';\n\nconst MASONRY_ACTION = `${meta.id}/action`;\n\nexport const MasonryProps = Schema.Struct({\n name: Schema.optional(Schema.String),\n typename: Schema.optional(\n Schema.String.annotations({\n [TypenameAnnotationId]: ['used-static', 'dynamic'],\n title: 'Select card record type (leave empty to start fresh)',\n }),\n ),\n});\n\nexport class CreateMasonry extends Schema.TaggedClass<CreateMasonry>()(`${MASONRY_ACTION}/create`, {\n input: Schema.extend(Schema.Struct({ space: SpaceSchema }), MasonryProps),\n output: Schema.Struct({\n object: DataType.View,\n }),\n}) {}\n"],
5
- "mappings": ";;;;;;;AAMO,IAAMA,OAAmB;EAC9BC,IAAI;EACJC,MAAM;EACNC,aAAa;EACbC,MAAM;EACNC,QAAQ;EACRC,aAAa,CAAA;AACf;;;ACbA;;;;;;AAIA,YAAYC,YAAY;AAExB,SAASC,KAAKC,YAAY;AAC1B,SAA8BC,gBAAgBC,sBAAsB;AACpE,SAAuDC,2BAA2B;AAE3E,IAAMC,UAAiBC,cAAO;EACnCC,aAAoBC,aACXF,cAAO;IACZG,KAAYD,aAAME,KAAKC,QAAQ;IAC/BC,QAAeC,gBAAgBC,cAAO;EACxC,CAAA,EAAGC,KAAYC,cAAO,CAAA,EACtBD,KAAYC,gBAAgBH,eAAQ;AAExC,CAAA,EAAGE,KACDL,KAAKO,IAAI;EACPC,UAAU;EACVC,SAAS;AACX,CAAA,GACAC,eAAeC,IAAI,IAAA,CAAA;AAQd,IAAMC,OAAO,CAACC,QAAuC,CAAC,MAAMN,IAAIK,KAAKjB,SAASkB,KAAAA;AAI9E,IAAMC,WAAW,OAAO,EAC7B,GAAGD,MAAAA,MACW;AAKd,QAAME,UAAUR,IAAIK,KAAKjB,SAAS,CAAC,CAAA;AACnC,QAAM,EAAEqB,YAAYC,KAAI,IAAK,MAAMC,oBAAoB;IAAE,GAAGL;IAAOM,cAAcJ;EAAQ,CAAA;AAGzF,QAAMK,SAASC,eAAeL,UAAAA;AAE9B,SAAO;IAAEA;IAAYI;IAAQH;EAAK;AACpC;;;ACjDA;;;;;AAIA,YAAYK,aAAY;AAExB,SAASC,mBAAmB;AAC5B,SAASC,UAAUC,4BAA4B;AAI/C,IAAMC,iBAAiB,GAAGC,KAAKC,EAAE;AAE1B,IAAMC,eAAsBC,eAAO;EACxCC,MAAaC,iBAAgBC,cAAM;EACnCC,UAAiBF,iBACRC,eAAOE,YAAY;IACxB,CAACC,oBAAAA,GAAuB;MAAC;MAAe;;IACxCC,OAAO;EACT,CAAA,CAAA;AAEJ,CAAA;AAEO,IAAMC,gBAAN,cAAmCC,oBAAW,EAAkB,GAAGb,cAAAA,WAAyB;EACjGc,OAAcC,eAAcX,eAAO;IAAEY,OAAOC;EAAY,CAAA,GAAId,YAAAA;EAC5De,QAAed,eAAO;IACpBe,QAAQC,SAASC;EACnB,CAAA;AACF,CAAA,EAAA;AAAI;",
6
- "names": ["meta", "id", "name", "description", "icon", "source", "screenshots", "Schema", "Obj", "Type", "ViewAnnotation", "toEffectSchema", "createViewFromSpace", "Masonry", "Struct", "arrangement", "Array", "ids", "Type", "ObjectId", "hidden", "optional", "Boolean", "pipe", "mutable", "Obj", "typename", "version", "ViewAnnotation", "set", "make", "props", "makeView", "masonry", "jsonSchema", "view", "createViewFromSpace", "presentation", "schema", "toEffectSchema", "Schema", "SpaceSchema", "DataType", "TypenameAnnotationId", "MASONRY_ACTION", "meta", "id", "MasonryProps", "Struct", "name", "optional", "String", "typename", "annotations", "TypenameAnnotationId", "title", "CreateMasonry", "TaggedClass", "input", "extend", "space", "SpaceSchema", "output", "object", "DataType", "View"]
7
- }
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../src/capabilities/react-surface.tsx", "../../../src/components/MasonryContainer.tsx"],
4
- "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport React from 'react';\n\nimport { Capabilities, contributes, createSurface } from '@dxos/app-framework';\nimport { Obj } from '@dxos/echo';\nimport { DataType } from '@dxos/schema';\n\nimport { MasonryContainer } from '../components/MasonryContainer';\nimport { meta } from '../meta';\nimport { Masonry } from '../types';\n\nexport default () =>\n contributes(Capabilities.ReactSurface, [\n createSurface({\n id: meta.id,\n role: ['article', 'section'],\n filter: (data): data is { subject: DataType.View } =>\n Obj.instanceOf(DataType.View, data.subject) &&\n Obj.instanceOf(Masonry.Masonry, data.subject.presentation?.target),\n component: ({ data, role }) => <MasonryContainer view={data.subject} role={role} />,\n }),\n ]);\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport React, { useEffect, useMemo, useState } from 'react';\n\nimport { Surface } from '@dxos/app-framework';\nimport { Filter, Type } from '@dxos/echo';\nimport { EchoSchema, type TypedObject } from '@dxos/echo/internal';\nimport { useGlobalFilteredObjects } from '@dxos/plugin-search';\nimport { useClient } from '@dxos/react-client';\nimport { getSpace, useQuery } from '@dxos/react-client/echo';\nimport { Masonry } from '@dxos/react-ui-masonry';\nimport { type DataType, ProjectionModel, getTypenameFromQuery } from '@dxos/schema';\n\nconst Item = ({ data }: { data: any }) => {\n return <Surface role='card' limit={1} data={{ subject: data }} />;\n};\n\nexport const MasonryContainer = ({ view, role }: { view: DataType.View; role: string }) => {\n const client = useClient();\n const space = getSpace(view);\n const typename = view.query ? getTypenameFromQuery(view.query.ast) : undefined;\n\n const [cardSchema, setCardSchema] = useState<TypedObject<any, any>>();\n const [projection, setProjection] = useState<ProjectionModel>();\n\n const jsonSchema = useMemo(() => {\n if (!cardSchema) return undefined;\n return cardSchema instanceof EchoSchema ? cardSchema.jsonSchema : Type.toJsonSchema(cardSchema);\n }, [cardSchema]);\n\n useEffect(() => {\n const staticSchema = client.graph.schemaRegistry.schemas.find((schema) => Type.getTypename(schema) === typename);\n if (staticSchema) {\n setCardSchema(() => staticSchema as TypedObject<any, any>);\n }\n if (!staticSchema && typename && space) {\n const query = space.db.schemaRegistry.query({ typename });\n const unsubscribe = query.subscribe(\n () => {\n const [schema] = query.results;\n if (schema) {\n setCardSchema(schema);\n }\n },\n { fire: true },\n );\n return unsubscribe;\n }\n }, [typename, space]);\n\n useEffect(() => {\n if (jsonSchema) {\n setProjection(new ProjectionModel(jsonSchema, view.projection));\n }\n }, [view.projection, JSON.stringify(jsonSchema)]);\n\n const objects = useQuery(space, cardSchema ? Filter.type(cardSchema) : Filter.nothing());\n const filteredObjects = useGlobalFilteredObjects(objects);\n\n return (\n <Masonry.Root\n items={filteredObjects}\n render={Item as any}\n classNames='is-full max-is-full bs-full max-bs-full overflow-y-auto p-4'\n />\n );\n};\n"],
5
- "mappings": ";;;;;;AAIA,OAAOA,YAAW;AAElB,SAASC,cAAcC,aAAaC,qBAAqB;AACzD,SAASC,WAAW;AACpB,SAASC,gBAAgB;;;;ACJzB,OAAOC,SAASC,WAAWC,SAASC,gBAAgB;AAEpD,SAASC,eAAe;AACxB,SAASC,QAAQC,YAAY;AAC7B,SAASC,kBAAoC;AAC7C,SAASC,gCAAgC;AACzC,SAASC,iBAAiB;AAC1B,SAASC,UAAUC,gBAAgB;AACnC,SAASC,eAAe;AACxB,SAAwBC,iBAAiBC,4BAA4B;AAErE,IAAMC,OAAO,CAAC,EAAEC,KAAI,MAAiB;;;AACnC,WAAO,sBAAA,cAACC,SAAAA;MAAQC,MAAK;MAAOC,OAAO;MAAGH,MAAM;QAAEI,SAASJ;MAAK;;;;;AAC9D;AAEO,IAAMK,mBAAmB,CAAC,EAAEC,MAAMJ,KAAI,MAAyC;;;AACpF,UAAMK,SAASC,UAAAA;AACf,UAAMC,QAAQC,SAASJ,IAAAA;AACvB,UAAMK,WAAWL,KAAKM,QAAQC,qBAAqBP,KAAKM,MAAME,GAAG,IAAIC;AAErE,UAAM,CAACC,YAAYC,aAAAA,IAAiBC,SAAAA;AACpC,UAAM,CAACC,YAAYC,aAAAA,IAAiBF,SAAAA;AAEpC,UAAMG,aAAaC,QAAQ,MAAA;AACzB,UAAI,CAACN,WAAY,QAAOD;AACxB,aAAOC,sBAAsBO,aAAaP,WAAWK,aAAaG,KAAKC,aAAaT,UAAAA;IACtF,GAAG;MAACA;KAAW;AAEfU,cAAU,MAAA;AACR,YAAMC,eAAepB,OAAOqB,MAAMC,eAAeC,QAAQC,KAAK,CAACC,WAAWR,KAAKS,YAAYD,MAAAA,MAAYrB,QAAAA;AACvG,UAAIgB,cAAc;AAChBV,sBAAc,MAAMU,YAAAA;MACtB;AACA,UAAI,CAACA,gBAAgBhB,YAAYF,OAAO;AACtC,cAAMG,QAAQH,MAAMyB,GAAGL,eAAejB,MAAM;UAAED;QAAS,CAAA;AACvD,cAAMwB,cAAcvB,MAAMwB,UACxB,MAAA;AACE,gBAAM,CAACJ,MAAAA,IAAUpB,MAAMyB;AACvB,cAAIL,QAAQ;AACVf,0BAAce,MAAAA;UAChB;QACF,GACA;UAAEM,MAAM;QAAK,CAAA;AAEf,eAAOH;MACT;IACF,GAAG;MAACxB;MAAUF;KAAM;AAEpBiB,cAAU,MAAA;AACR,UAAIL,YAAY;AACdD,sBAAc,IAAImB,gBAAgBlB,YAAYf,KAAKa,UAAU,CAAA;MAC/D;IACF,GAAG;MAACb,KAAKa;MAAYqB,KAAKC,UAAUpB,UAAAA;KAAY;AAEhD,UAAMqB,UAAUC,SAASlC,OAAOO,aAAa4B,OAAOC,KAAK7B,UAAAA,IAAc4B,OAAOE,QAAO,CAAA;AACrF,UAAMC,kBAAkBC,yBAAyBN,OAAAA;AAEjD,WACE,sBAAA,cAACO,QAAQC,MAAI;MACXC,OAAOJ;MACPK,QAAQrD;MACRsD,YAAW;;;;;AAGjB;;;ADtDA,IAAA,yBAAe,MACbC,YAAYC,aAAaC,cAAc;EACrCC,cAAc;IACZC,IAAIC,KAAKD;IACTE,MAAM;MAAC;MAAW;;IAClBC,QAAQ,CAACC,SACPC,IAAIC,WAAWC,SAASC,MAAMJ,KAAKK,OAAO,KAC1CJ,IAAIC,WAAWI,gBAAQA,SAASN,KAAKK,QAAQE,cAAcC,MAAAA;IAC7DC,WAAW,CAAC,EAAET,MAAMF,KAAI,MAAO,gBAAAY,OAAA,cAACC,kBAAAA;MAAiBC,MAAMZ,KAAKK;MAASP;;EACvE,CAAA;CACD;",
6
- "names": ["React", "Capabilities", "contributes", "createSurface", "Obj", "DataType", "React", "useEffect", "useMemo", "useState", "Surface", "Filter", "Type", "EchoSchema", "useGlobalFilteredObjects", "useClient", "getSpace", "useQuery", "Masonry", "ProjectionModel", "getTypenameFromQuery", "Item", "data", "Surface", "role", "limit", "subject", "MasonryContainer", "view", "client", "useClient", "space", "getSpace", "typename", "query", "getTypenameFromQuery", "ast", "undefined", "cardSchema", "setCardSchema", "useState", "projection", "setProjection", "jsonSchema", "useMemo", "EchoSchema", "Type", "toJsonSchema", "useEffect", "staticSchema", "graph", "schemaRegistry", "schemas", "find", "schema", "getTypename", "db", "unsubscribe", "subscribe", "results", "fire", "ProjectionModel", "JSON", "stringify", "objects", "useQuery", "Filter", "type", "nothing", "filteredObjects", "useGlobalFilteredObjects", "Masonry", "Root", "items", "render", "classNames", "contributes", "Capabilities", "ReactSurface", "createSurface", "id", "meta", "role", "filter", "data", "Obj", "instanceOf", "DataType", "View", "subject", "Masonry", "presentation", "target", "component", "React", "MasonryContainer", "view"]
7
- }
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../src/meta.ts", "../../../src/types/Masonry.ts", "../../../src/types/MasonryAction.ts"],
4
- "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport { type PluginMeta } from '@dxos/app-framework';\n\nexport const meta: PluginMeta = {\n id: 'dxos.org/plugin/masonry',\n name: 'Masonry',\n description: 'Masonry displays items from a View query in a responsive grid.',\n icon: 'ph--wall--regular',\n source: 'https://github.com/dxos/dxos/tree/main/packages/plugins/plugin-masonry',\n screenshots: [],\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Schema from 'effect/Schema';\n\nimport { Obj, Type } from '@dxos/echo';\nimport { type JsonSchemaType, ViewAnnotation, toEffectSchema } from '@dxos/echo/internal';\nimport { type CreateViewFromSpaceProps, type DataType, createViewFromSpace } from '@dxos/schema';\n\nexport const Masonry = Schema.Struct({\n arrangement: Schema.Array(\n Schema.Struct({\n ids: Schema.Array(Type.ObjectId),\n hidden: Schema.optional(Schema.Boolean),\n }).pipe(Schema.mutable),\n ).pipe(Schema.mutable, Schema.optional),\n // TODO(wittjosiah): Consider Masonry supporting not being just a view but referencing arbitrary data directly.\n}).pipe(\n Type.Obj({\n typename: 'dxos.org/type/Masonry',\n version: '0.1.0',\n }),\n ViewAnnotation.set(true),\n);\n\nexport type Masonry = Schema.Schema.Type<typeof Masonry>;\n\n/**\n * Make a masonry object.\n */\nexport const make = (props: Obj.MakeProps<typeof Masonry> = {}) => Obj.make(Masonry, props);\n\nexport type MakeViewProps = Omit<CreateViewFromSpaceProps, 'presentation'>;\n\nexport const makeView = async ({\n ...props\n}: MakeViewProps): Promise<{\n jsonSchema: JsonSchemaType;\n view: DataType.View;\n schema: ReturnType<typeof toEffectSchema>;\n}> => {\n const masonry = Obj.make(Masonry, {});\n const { jsonSchema, view } = await createViewFromSpace({ ...props, presentation: masonry });\n\n // Preset sizes.\n const schema = toEffectSchema(jsonSchema);\n\n return { jsonSchema, schema, view };\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Schema from 'effect/Schema';\n\nimport { SpaceSchema } from '@dxos/react-client/echo';\nimport { DataType, TypenameAnnotationId } from '@dxos/schema';\n\nimport { meta } from '../meta';\n\nconst MASONRY_ACTION = `${meta.id}/action`;\n\nexport const MasonryProps = Schema.Struct({\n name: Schema.optional(Schema.String),\n typename: Schema.optional(\n Schema.String.annotations({\n [TypenameAnnotationId]: ['used-static', 'dynamic'],\n title: 'Select card record type (leave empty to start fresh)',\n }),\n ),\n});\n\nexport class CreateMasonry extends Schema.TaggedClass<CreateMasonry>()(`${MASONRY_ACTION}/create`, {\n input: Schema.extend(Schema.Struct({ space: SpaceSchema }), MasonryProps),\n output: Schema.Struct({\n object: DataType.View,\n }),\n}) {}\n"],
5
- "mappings": ";;;;;;;;AAMO,IAAMA,OAAmB;EAC9BC,IAAI;EACJC,MAAM;EACNC,aAAa;EACbC,MAAM;EACNC,QAAQ;EACRC,aAAa,CAAA;AACf;;;ACbA;;;;;;AAIA,YAAYC,YAAY;AAExB,SAASC,KAAKC,YAAY;AAC1B,SAA8BC,gBAAgBC,sBAAsB;AACpE,SAAuDC,2BAA2B;AAE3E,IAAMC,UAAiBC,cAAO;EACnCC,aAAoBC,aACXF,cAAO;IACZG,KAAYD,aAAME,KAAKC,QAAQ;IAC/BC,QAAeC,gBAAgBC,cAAO;EACxC,CAAA,EAAGC,KAAYC,cAAO,CAAA,EACtBD,KAAYC,gBAAgBH,eAAQ;AAExC,CAAA,EAAGE,KACDL,KAAKO,IAAI;EACPC,UAAU;EACVC,SAAS;AACX,CAAA,GACAC,eAAeC,IAAI,IAAA,CAAA;AAQd,IAAMC,OAAO,CAACC,QAAuC,CAAC,MAAMN,IAAIK,KAAKjB,SAASkB,KAAAA;AAI9E,IAAMC,WAAW,OAAO,EAC7B,GAAGD,MAAAA,MACW;AAKd,QAAME,UAAUR,IAAIK,KAAKjB,SAAS,CAAC,CAAA;AACnC,QAAM,EAAEqB,YAAYC,KAAI,IAAK,MAAMC,oBAAoB;IAAE,GAAGL;IAAOM,cAAcJ;EAAQ,CAAA;AAGzF,QAAMK,SAASC,eAAeL,UAAAA;AAE9B,SAAO;IAAEA;IAAYI;IAAQH;EAAK;AACpC;;;ACjDA;;;;;AAIA,YAAYK,aAAY;AAExB,SAASC,mBAAmB;AAC5B,SAASC,UAAUC,4BAA4B;AAI/C,IAAMC,iBAAiB,GAAGC,KAAKC,EAAE;AAE1B,IAAMC,eAAsBC,eAAO;EACxCC,MAAaC,iBAAgBC,cAAM;EACnCC,UAAiBF,iBACRC,eAAOE,YAAY;IACxB,CAACC,oBAAAA,GAAuB;MAAC;MAAe;;IACxCC,OAAO;EACT,CAAA,CAAA;AAEJ,CAAA;AAEO,IAAMC,gBAAN,cAAmCC,oBAAW,EAAkB,GAAGb,cAAAA,WAAyB;EACjGc,OAAcC,eAAcX,eAAO;IAAEY,OAAOC;EAAY,CAAA,GAAId,YAAAA;EAC5De,QAAed,eAAO;IACpBe,QAAQC,SAASC;EACnB,CAAA;AACF,CAAA,EAAA;AAAI;",
6
- "names": ["meta", "id", "name", "description", "icon", "source", "screenshots", "Schema", "Obj", "Type", "ViewAnnotation", "toEffectSchema", "createViewFromSpace", "Masonry", "Struct", "arrangement", "Array", "ids", "Type", "ObjectId", "hidden", "optional", "Boolean", "pipe", "mutable", "Obj", "typename", "version", "ViewAnnotation", "set", "make", "props", "makeView", "masonry", "jsonSchema", "view", "createViewFromSpace", "presentation", "schema", "toEffectSchema", "Schema", "SpaceSchema", "DataType", "TypenameAnnotationId", "MASONRY_ACTION", "meta", "id", "MasonryProps", "Struct", "name", "optional", "String", "typename", "annotations", "TypenameAnnotationId", "title", "CreateMasonry", "TaggedClass", "input", "extend", "space", "SpaceSchema", "output", "object", "DataType", "View"]
7
- }
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../src/capabilities/react-surface.tsx", "../../../src/components/MasonryContainer.tsx"],
4
- "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport React from 'react';\n\nimport { Capabilities, contributes, createSurface } from '@dxos/app-framework';\nimport { Obj } from '@dxos/echo';\nimport { DataType } from '@dxos/schema';\n\nimport { MasonryContainer } from '../components/MasonryContainer';\nimport { meta } from '../meta';\nimport { Masonry } from '../types';\n\nexport default () =>\n contributes(Capabilities.ReactSurface, [\n createSurface({\n id: meta.id,\n role: ['article', 'section'],\n filter: (data): data is { subject: DataType.View } =>\n Obj.instanceOf(DataType.View, data.subject) &&\n Obj.instanceOf(Masonry.Masonry, data.subject.presentation?.target),\n component: ({ data, role }) => <MasonryContainer view={data.subject} role={role} />,\n }),\n ]);\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport React, { useEffect, useMemo, useState } from 'react';\n\nimport { Surface } from '@dxos/app-framework';\nimport { Filter, Type } from '@dxos/echo';\nimport { EchoSchema, type TypedObject } from '@dxos/echo/internal';\nimport { useGlobalFilteredObjects } from '@dxos/plugin-search';\nimport { useClient } from '@dxos/react-client';\nimport { getSpace, useQuery } from '@dxos/react-client/echo';\nimport { Masonry } from '@dxos/react-ui-masonry';\nimport { type DataType, ProjectionModel, getTypenameFromQuery } from '@dxos/schema';\n\nconst Item = ({ data }: { data: any }) => {\n return <Surface role='card' limit={1} data={{ subject: data }} />;\n};\n\nexport const MasonryContainer = ({ view, role }: { view: DataType.View; role: string }) => {\n const client = useClient();\n const space = getSpace(view);\n const typename = view.query ? getTypenameFromQuery(view.query.ast) : undefined;\n\n const [cardSchema, setCardSchema] = useState<TypedObject<any, any>>();\n const [projection, setProjection] = useState<ProjectionModel>();\n\n const jsonSchema = useMemo(() => {\n if (!cardSchema) return undefined;\n return cardSchema instanceof EchoSchema ? cardSchema.jsonSchema : Type.toJsonSchema(cardSchema);\n }, [cardSchema]);\n\n useEffect(() => {\n const staticSchema = client.graph.schemaRegistry.schemas.find((schema) => Type.getTypename(schema) === typename);\n if (staticSchema) {\n setCardSchema(() => staticSchema as TypedObject<any, any>);\n }\n if (!staticSchema && typename && space) {\n const query = space.db.schemaRegistry.query({ typename });\n const unsubscribe = query.subscribe(\n () => {\n const [schema] = query.results;\n if (schema) {\n setCardSchema(schema);\n }\n },\n { fire: true },\n );\n return unsubscribe;\n }\n }, [typename, space]);\n\n useEffect(() => {\n if (jsonSchema) {\n setProjection(new ProjectionModel(jsonSchema, view.projection));\n }\n }, [view.projection, JSON.stringify(jsonSchema)]);\n\n const objects = useQuery(space, cardSchema ? Filter.type(cardSchema) : Filter.nothing());\n const filteredObjects = useGlobalFilteredObjects(objects);\n\n return (\n <Masonry.Root\n items={filteredObjects}\n render={Item as any}\n classNames='is-full max-is-full bs-full max-bs-full overflow-y-auto p-4'\n />\n );\n};\n"],
5
- "mappings": ";;;;;;;AAIA,OAAOA,YAAW;AAElB,SAASC,cAAcC,aAAaC,qBAAqB;AACzD,SAASC,WAAW;AACpB,SAASC,gBAAgB;;;;ACJzB,OAAOC,SAASC,WAAWC,SAASC,gBAAgB;AAEpD,SAASC,eAAe;AACxB,SAASC,QAAQC,YAAY;AAC7B,SAASC,kBAAoC;AAC7C,SAASC,gCAAgC;AACzC,SAASC,iBAAiB;AAC1B,SAASC,UAAUC,gBAAgB;AACnC,SAASC,eAAe;AACxB,SAAwBC,iBAAiBC,4BAA4B;AAErE,IAAMC,OAAO,CAAC,EAAEC,KAAI,MAAiB;;;AACnC,WAAO,sBAAA,cAACC,SAAAA;MAAQC,MAAK;MAAOC,OAAO;MAAGH,MAAM;QAAEI,SAASJ;MAAK;;;;;AAC9D;AAEO,IAAMK,mBAAmB,CAAC,EAAEC,MAAMJ,KAAI,MAAyC;;;AACpF,UAAMK,SAASC,UAAAA;AACf,UAAMC,QAAQC,SAASJ,IAAAA;AACvB,UAAMK,WAAWL,KAAKM,QAAQC,qBAAqBP,KAAKM,MAAME,GAAG,IAAIC;AAErE,UAAM,CAACC,YAAYC,aAAAA,IAAiBC,SAAAA;AACpC,UAAM,CAACC,YAAYC,aAAAA,IAAiBF,SAAAA;AAEpC,UAAMG,aAAaC,QAAQ,MAAA;AACzB,UAAI,CAACN,WAAY,QAAOD;AACxB,aAAOC,sBAAsBO,aAAaP,WAAWK,aAAaG,KAAKC,aAAaT,UAAAA;IACtF,GAAG;MAACA;KAAW;AAEfU,cAAU,MAAA;AACR,YAAMC,eAAepB,OAAOqB,MAAMC,eAAeC,QAAQC,KAAK,CAACC,WAAWR,KAAKS,YAAYD,MAAAA,MAAYrB,QAAAA;AACvG,UAAIgB,cAAc;AAChBV,sBAAc,MAAMU,YAAAA;MACtB;AACA,UAAI,CAACA,gBAAgBhB,YAAYF,OAAO;AACtC,cAAMG,QAAQH,MAAMyB,GAAGL,eAAejB,MAAM;UAAED;QAAS,CAAA;AACvD,cAAMwB,cAAcvB,MAAMwB,UACxB,MAAA;AACE,gBAAM,CAACJ,MAAAA,IAAUpB,MAAMyB;AACvB,cAAIL,QAAQ;AACVf,0BAAce,MAAAA;UAChB;QACF,GACA;UAAEM,MAAM;QAAK,CAAA;AAEf,eAAOH;MACT;IACF,GAAG;MAACxB;MAAUF;KAAM;AAEpBiB,cAAU,MAAA;AACR,UAAIL,YAAY;AACdD,sBAAc,IAAImB,gBAAgBlB,YAAYf,KAAKa,UAAU,CAAA;MAC/D;IACF,GAAG;MAACb,KAAKa;MAAYqB,KAAKC,UAAUpB,UAAAA;KAAY;AAEhD,UAAMqB,UAAUC,SAASlC,OAAOO,aAAa4B,OAAOC,KAAK7B,UAAAA,IAAc4B,OAAOE,QAAO,CAAA;AACrF,UAAMC,kBAAkBC,yBAAyBN,OAAAA;AAEjD,WACE,sBAAA,cAACO,QAAQC,MAAI;MACXC,OAAOJ;MACPK,QAAQrD;MACRsD,YAAW;;;;;AAGjB;;;ADtDA,IAAA,yBAAe,MACbC,YAAYC,aAAaC,cAAc;EACrCC,cAAc;IACZC,IAAIC,KAAKD;IACTE,MAAM;MAAC;MAAW;;IAClBC,QAAQ,CAACC,SACPC,IAAIC,WAAWC,SAASC,MAAMJ,KAAKK,OAAO,KAC1CJ,IAAIC,WAAWI,gBAAQA,SAASN,KAAKK,QAAQE,cAAcC,MAAAA;IAC7DC,WAAW,CAAC,EAAET,MAAMF,KAAI,MAAO,gBAAAY,OAAA,cAACC,kBAAAA;MAAiBC,MAAMZ,KAAKK;MAASP;;EACvE,CAAA;CACD;",
6
- "names": ["React", "Capabilities", "contributes", "createSurface", "Obj", "DataType", "React", "useEffect", "useMemo", "useState", "Surface", "Filter", "Type", "EchoSchema", "useGlobalFilteredObjects", "useClient", "getSpace", "useQuery", "Masonry", "ProjectionModel", "getTypenameFromQuery", "Item", "data", "Surface", "role", "limit", "subject", "MasonryContainer", "view", "client", "useClient", "space", "getSpace", "typename", "query", "getTypenameFromQuery", "ast", "undefined", "cardSchema", "setCardSchema", "useState", "projection", "setProjection", "jsonSchema", "useMemo", "EchoSchema", "Type", "toJsonSchema", "useEffect", "staticSchema", "graph", "schemaRegistry", "schemas", "find", "schema", "getTypename", "db", "unsubscribe", "subscribe", "results", "fire", "ProjectionModel", "JSON", "stringify", "objects", "useQuery", "Filter", "type", "nothing", "filteredObjects", "useGlobalFilteredObjects", "Masonry", "Root", "items", "render", "classNames", "contributes", "Capabilities", "ReactSurface", "createSurface", "id", "meta", "role", "filter", "data", "Obj", "instanceOf", "DataType", "View", "subject", "Masonry", "presentation", "target", "component", "React", "MasonryContainer", "view"]
7
- }