@dxos/plugin-masonry 0.8.4-main.69d29f4 → 0.8.4-main.6fa680abb7

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 (69) hide show
  1. package/dist/lib/browser/MasonryContainer-G5D7SXNF.mjs +82 -0
  2. package/dist/lib/browser/MasonryContainer-G5D7SXNF.mjs.map +7 -0
  3. package/dist/lib/browser/{chunk-U46AGJ2D.mjs → chunk-7W5GV4MG.mjs} +2 -2
  4. package/dist/lib/browser/{chunk-U46AGJ2D.mjs.map → chunk-7W5GV4MG.mjs.map} +1 -1
  5. package/dist/lib/browser/chunk-J5LGTIGS.mjs +10 -0
  6. package/dist/lib/browser/chunk-J5LGTIGS.mjs.map +7 -0
  7. package/dist/lib/browser/{chunk-S5JKAK4O.mjs → chunk-XTJ24XE2.mjs} +9 -23
  8. package/dist/lib/browser/chunk-XTJ24XE2.mjs.map +7 -0
  9. package/dist/lib/browser/index.mjs +15 -12
  10. package/dist/lib/browser/index.mjs.map +3 -3
  11. package/dist/lib/browser/meta.json +1 -1
  12. package/dist/lib/browser/react-surface-THLOBRJW.mjs +42 -0
  13. package/dist/lib/browser/react-surface-THLOBRJW.mjs.map +7 -0
  14. package/dist/lib/browser/types/index.mjs +2 -1
  15. package/dist/lib/node-esm/MasonryContainer-HB775HET.mjs +83 -0
  16. package/dist/lib/node-esm/MasonryContainer-HB775HET.mjs.map +7 -0
  17. package/dist/lib/node-esm/{chunk-P6EZJITS.mjs → chunk-CCWUD5KF.mjs} +2 -2
  18. package/dist/lib/node-esm/{chunk-P6EZJITS.mjs.map → chunk-CCWUD5KF.mjs.map} +1 -1
  19. package/dist/lib/node-esm/chunk-HSLMI22Q.mjs +11 -0
  20. package/dist/lib/node-esm/chunk-HSLMI22Q.mjs.map +7 -0
  21. package/dist/lib/node-esm/{chunk-YNA44I6R.mjs → chunk-JXCM7LNL.mjs} +9 -23
  22. package/dist/lib/node-esm/chunk-JXCM7LNL.mjs.map +7 -0
  23. package/dist/lib/node-esm/index.mjs +15 -12
  24. package/dist/lib/node-esm/index.mjs.map +3 -3
  25. package/dist/lib/node-esm/meta.json +1 -1
  26. package/dist/lib/node-esm/react-surface-DC6QGTSE.mjs +43 -0
  27. package/dist/lib/node-esm/react-surface-DC6QGTSE.mjs.map +7 -0
  28. package/dist/lib/node-esm/types/index.mjs +2 -1
  29. package/dist/types/src/MasonryPlugin.d.ts.map +1 -1
  30. package/dist/types/src/capabilities/react-surface/index.d.ts +1 -1
  31. package/dist/types/src/capabilities/react-surface/index.d.ts.map +1 -1
  32. package/dist/types/src/capabilities/react-surface/react-surface.d.ts +2 -2
  33. package/dist/types/src/capabilities/react-surface/react-surface.d.ts.map +1 -1
  34. package/dist/types/src/components/index.d.ts +1 -0
  35. package/dist/types/src/components/index.d.ts.map +1 -0
  36. package/dist/types/src/{components → containers/MasonryContainer}/MasonryContainer.d.ts +2 -2
  37. package/dist/types/src/containers/MasonryContainer/MasonryContainer.d.ts.map +1 -0
  38. package/dist/types/src/containers/MasonryContainer/MasonryContainer.stories.d.ts.map +1 -0
  39. package/dist/types/src/containers/MasonryContainer/index.d.ts +3 -0
  40. package/dist/types/src/containers/MasonryContainer/index.d.ts.map +1 -0
  41. package/dist/types/src/containers/index.d.ts +3 -0
  42. package/dist/types/src/containers/index.d.ts.map +1 -0
  43. package/dist/types/src/translations.d.ts +2 -0
  44. package/dist/types/src/translations.d.ts.map +1 -1
  45. package/dist/types/src/types/Masonry.d.ts +1 -7
  46. package/dist/types/src/types/Masonry.d.ts.map +1 -1
  47. package/dist/types/src/types/MasonryAction.d.ts.map +1 -1
  48. package/dist/types/tsconfig.tsbuildinfo +1 -1
  49. package/package.json +30 -28
  50. package/src/MasonryPlugin.tsx +8 -7
  51. package/src/capabilities/react-surface/react-surface.tsx +6 -5
  52. package/src/components/index.ts +3 -0
  53. package/src/{components → containers/MasonryContainer}/MasonryContainer.stories.tsx +8 -6
  54. package/src/{components → containers/MasonryContainer}/MasonryContainer.tsx +27 -15
  55. package/src/containers/MasonryContainer/index.ts +7 -0
  56. package/src/containers/index.ts +7 -0
  57. package/src/meta.ts +1 -1
  58. package/src/translations.ts +1 -0
  59. package/src/types/Masonry.ts +5 -22
  60. package/src/types/MasonryAction.ts +0 -1
  61. package/dist/lib/browser/chunk-S5JKAK4O.mjs.map +0 -7
  62. package/dist/lib/browser/react-surface-UCYEF4QU.mjs +0 -94
  63. package/dist/lib/browser/react-surface-UCYEF4QU.mjs.map +0 -7
  64. package/dist/lib/node-esm/chunk-YNA44I6R.mjs.map +0 -7
  65. package/dist/lib/node-esm/react-surface-LG7FTGYA.mjs +0 -95
  66. package/dist/lib/node-esm/react-surface-LG7FTGYA.mjs.map +0 -7
  67. package/dist/types/src/components/MasonryContainer.d.ts.map +0 -1
  68. package/dist/types/src/components/MasonryContainer.stories.d.ts.map +0 -1
  69. /package/dist/types/src/{components → containers/MasonryContainer}/MasonryContainer.stories.d.ts +0 -0
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dxos/plugin-masonry",
3
- "version": "0.8.4-main.69d29f4",
3
+ "version": "0.8.4-main.6fa680abb7",
4
4
  "description": "Masonry DXOS Surface plugin",
5
5
  "homepage": "https://dxos.org",
6
6
  "bugs": "https://github.com/dxos/dxos/issues",
@@ -39,43 +39,45 @@
39
39
  "src"
40
40
  ],
41
41
  "dependencies": {
42
- "@dxos/app-framework": "0.8.4-main.69d29f4",
43
- "@dxos/effect": "0.8.4-main.69d29f4",
44
- "@dxos/echo": "0.8.4-main.69d29f4",
45
- "@dxos/plugin-client": "0.8.4-main.69d29f4",
46
- "@dxos/operation": "0.8.4-main.69d29f4",
47
- "@dxos/plugin-search": "0.8.4-main.69d29f4",
48
- "@dxos/react-client": "0.8.4-main.69d29f4",
49
- "@dxos/react-ui-form": "0.8.4-main.69d29f4",
50
- "@dxos/react-ui-masonry": "0.8.4-main.69d29f4",
51
- "@dxos/react-ui": "0.8.4-main.69d29f4",
52
- "@dxos/react-ui-mosaic": "0.8.4-main.69d29f4",
53
- "@dxos/plugin-space": "0.8.4-main.69d29f4",
54
- "@dxos/types": "0.8.4-main.69d29f4",
55
- "@dxos/schema": "0.8.4-main.69d29f4",
56
- "@dxos/util": "0.8.4-main.69d29f4",
57
- "@dxos/react-ui-stack": "0.8.4-main.69d29f4"
42
+ "@dxos/app-framework": "0.8.4-main.6fa680abb7",
43
+ "@dxos/app-toolkit": "0.8.4-main.6fa680abb7",
44
+ "@dxos/echo": "0.8.4-main.6fa680abb7",
45
+ "@dxos/effect": "0.8.4-main.6fa680abb7",
46
+ "@dxos/operation": "0.8.4-main.6fa680abb7",
47
+ "@dxos/plugin-client": "0.8.4-main.6fa680abb7",
48
+ "@dxos/plugin-search": "0.8.4-main.6fa680abb7",
49
+ "@dxos/plugin-space": "0.8.4-main.6fa680abb7",
50
+ "@dxos/react-ui": "0.8.4-main.6fa680abb7",
51
+ "@dxos/react-client": "0.8.4-main.6fa680abb7",
52
+ "@dxos/react-ui-form": "0.8.4-main.6fa680abb7",
53
+ "@dxos/react-ui-menu": "0.8.4-main.6fa680abb7",
54
+ "@dxos/react-ui-masonry": "0.8.4-main.6fa680abb7",
55
+ "@dxos/react-ui-mosaic": "0.8.4-main.6fa680abb7",
56
+ "@dxos/react-ui-stack": "0.8.4-main.6fa680abb7",
57
+ "@dxos/schema": "0.8.4-main.6fa680abb7",
58
+ "@dxos/types": "0.8.4-main.6fa680abb7",
59
+ "@dxos/util": "0.8.4-main.6fa680abb7"
58
60
  },
59
61
  "devDependencies": {
60
62
  "@types/react": "~19.2.7",
61
63
  "@types/react-dom": "~19.2.3",
62
- "effect": "3.19.11",
64
+ "effect": "3.19.16",
63
65
  "react": "~19.2.3",
64
66
  "react-dom": "~19.2.3",
65
- "vite": "7.1.9",
66
- "@dxos/plugin-preview": "0.8.4-main.69d29f4",
67
- "@dxos/plugin-testing": "0.8.4-main.69d29f4",
68
- "@dxos/plugin-theme": "0.8.4-main.69d29f4",
69
- "@dxos/random": "0.8.4-main.69d29f4",
70
- "@dxos/storybook-utils": "0.8.4-main.69d29f4",
71
- "@dxos/ui-theme": "0.8.4-main.69d29f4"
67
+ "vite": "^7.1.11",
68
+ "@dxos/plugin-preview": "0.8.4-main.6fa680abb7",
69
+ "@dxos/plugin-testing": "0.8.4-main.6fa680abb7",
70
+ "@dxos/plugin-theme": "0.8.4-main.6fa680abb7",
71
+ "@dxos/random": "0.8.4-main.6fa680abb7",
72
+ "@dxos/storybook-utils": "0.8.4-main.6fa680abb7",
73
+ "@dxos/ui-theme": "0.8.4-main.6fa680abb7"
72
74
  },
73
75
  "peerDependencies": {
74
- "effect": "3.19.11",
76
+ "effect": "3.19.16",
75
77
  "react": "~19.2.3",
76
78
  "react-dom": "~19.2.3",
77
- "@dxos/react-ui": "0.8.4-main.69d29f4",
78
- "@dxos/ui-theme": "0.8.4-main.69d29f4"
79
+ "@dxos/react-ui": "0.8.4-main.6fa680abb7",
80
+ "@dxos/ui-theme": "0.8.4-main.6fa680abb7"
79
81
  },
80
82
  "publishConfig": {
81
83
  "access": "public"
@@ -4,10 +4,11 @@
4
4
 
5
5
  import * as Effect from 'effect/Effect';
6
6
 
7
- import { Common, Plugin } from '@dxos/app-framework';
7
+ import { Plugin } from '@dxos/app-framework';
8
+ import { AppPlugin } from '@dxos/app-toolkit';
8
9
  import { Type } from '@dxos/echo';
9
10
  import { type CreateObject } from '@dxos/plugin-space/types';
10
- import { View } from '@dxos/schema';
11
+ import { ViewModel } from '@dxos/schema';
11
12
 
12
13
  import { ReactSurface } from './capabilities';
13
14
  import { meta } from './meta';
@@ -15,9 +16,7 @@ import { translations } from './translations';
15
16
  import { Masonry, MasonryAction } from './types';
16
17
 
17
18
  export const MasonryPlugin = Plugin.define(meta).pipe(
18
- Common.Plugin.addTranslationsModule({ translations }),
19
- Common.Plugin.addSurfaceModule({ activate: ReactSurface }),
20
- Common.Plugin.addMetadataModule({
19
+ AppPlugin.addMetadataModule({
21
20
  metadata: {
22
21
  id: Type.getTypename(Masonry.Masonry),
23
22
  metadata: {
@@ -26,12 +25,14 @@ export const MasonryPlugin = Plugin.define(meta).pipe(
26
25
  inputSchema: MasonryAction.MasonryProps,
27
26
  createObject: ((props, { db }) =>
28
27
  Effect.promise(async () => {
29
- const { view } = await View.makeFromDatabase({ db, typename: props.typename });
28
+ const { view } = await ViewModel.makeFromDatabase({ db, typename: props.typename });
30
29
  return Masonry.make({ name: props.name, view });
31
30
  })) satisfies CreateObject,
32
31
  },
33
32
  },
34
33
  }),
35
- Common.Plugin.addSchemaModule({ schema: [Masonry.Masonry] }),
34
+ AppPlugin.addSchemaModule({ schema: [Masonry.Masonry] }),
35
+ AppPlugin.addSurfaceModule({ activate: ReactSurface }),
36
+ AppPlugin.addTranslationsModule({ translations }),
36
37
  Plugin.make,
37
38
  );
@@ -5,18 +5,19 @@
5
5
  import * as Effect from 'effect/Effect';
6
6
  import React from 'react';
7
7
 
8
- import { Capability, Common } from '@dxos/app-framework';
8
+ import { Capabilities, Capability } from '@dxos/app-framework';
9
+ import { Surface } from '@dxos/app-framework/ui';
9
10
  import { Obj } from '@dxos/echo';
10
- import { View } from '@dxos/schema';
11
+ import { View } from '@dxos/echo';
11
12
 
12
- import { MasonryContainer } from '../../components/MasonryContainer';
13
+ import { MasonryContainer } from '../../containers';
13
14
  import { meta } from '../../meta';
14
15
  import { Masonry } from '../../types';
15
16
 
16
17
  export default Capability.makeModule(() =>
17
18
  Effect.succeed(
18
- Capability.contributes(Common.Capability.ReactSurface, [
19
- Common.createSurface({
19
+ Capability.contributes(Capabilities.ReactSurface, [
20
+ Surface.create({
20
21
  id: meta.id,
21
22
  role: ['article', 'section'],
22
23
  filter: (data): data is { subject: Masonry.Masonry | View.View } =>
@@ -0,0 +1,3 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
@@ -7,17 +7,18 @@ import * as Effect from 'effect/Effect';
7
7
  import React from 'react';
8
8
 
9
9
  import { withPluginManager } from '@dxos/app-framework/testing';
10
+ import { View } from '@dxos/echo';
10
11
  import { ClientPlugin } from '@dxos/plugin-client';
11
12
  import { PreviewPlugin } from '@dxos/plugin-preview';
12
13
  import { StorybookPlugin, corePlugins } from '@dxos/plugin-testing';
13
14
  import { faker } from '@dxos/random';
14
15
  import { Filter, useObject, useQuery, useSpaces } from '@dxos/react-client/echo';
15
- import { withTheme } from '@dxos/react-ui/testing';
16
- import { View } from '@dxos/schema';
16
+ import { withLayout, withTheme } from '@dxos/react-ui/testing';
17
+ import { ViewModel } from '@dxos/schema';
17
18
  import { createObjectFactory } from '@dxos/schema/testing';
18
19
  import { Organization } from '@dxos/types';
19
20
 
20
- import { Masonry } from '../types';
21
+ import { Masonry } from '../../types';
21
22
 
22
23
  import { MasonryContainer } from './MasonryContainer';
23
24
 
@@ -33,11 +34,12 @@ const StorybookMasonry = () => {
33
34
  };
34
35
 
35
36
  const meta = {
36
- title: 'plugins/plugin-masonry/Masonry',
37
+ title: 'plugins/plugin-masonry/containers/Masonry',
37
38
  component: StorybookMasonry,
38
39
  render: () => <StorybookMasonry />,
39
40
  decorators: [
40
- withTheme,
41
+ withTheme(),
42
+ withLayout({ layout: 'fullscreen' }),
41
43
  withPluginManager({
42
44
  plugins: [
43
45
  ...corePlugins(),
@@ -50,7 +52,7 @@ const meta = {
50
52
  const space = yield* Effect.promise(() => client.spaces.create());
51
53
  yield* Effect.promise(() => space.waitUntilReady());
52
54
  const { view } = yield* Effect.promise(() =>
53
- View.makeFromDatabase({
55
+ ViewModel.makeFromDatabase({
54
56
  db: space.db,
55
57
  typename: Organization.Organization.typename,
56
58
  }),
@@ -5,14 +5,17 @@
5
5
  import type * as Schema from 'effect/Schema';
6
6
  import React, { useEffect, useState } from 'react';
7
7
 
8
- import { Common } from '@dxos/app-framework';
9
- import { Surface, useCapabilities } from '@dxos/app-framework/react';
8
+ import { Surface, useCapabilities } from '@dxos/app-framework/ui';
9
+ import { AppCapabilities } from '@dxos/app-toolkit';
10
+ import { useObjectMenuItems, useObjectNavigate } from '@dxos/app-toolkit/ui';
10
11
  import { Filter, Obj, type Ref, Type } from '@dxos/echo';
12
+ import { type View } from '@dxos/echo';
11
13
  import { useGlobalFilteredObjects } from '@dxos/plugin-search';
12
14
  import { useObject, useQuery } from '@dxos/react-client/echo';
15
+ import { Card, Toolbar } from '@dxos/react-ui';
13
16
  import { Masonry as MasonryComponent } from '@dxos/react-ui-masonry';
14
- import { Card } from '@dxos/react-ui-mosaic';
15
- import { type View, getTypenameFromQuery } from '@dxos/schema';
17
+ import { Menu } from '@dxos/react-ui-menu';
18
+ import { getTypenameFromQuery } from '@dxos/schema';
16
19
 
17
20
  export type MasonryContainerProps = {
18
21
  view: View.View;
@@ -21,13 +24,13 @@ export type MasonryContainerProps = {
21
24
 
22
25
  export const MasonryContainer = ({
23
26
  view: viewOrRef,
24
- role,
27
+ role: _role,
25
28
  }: {
26
29
  view: View.View | Ref.Ref<View.View>;
27
30
  role?: string;
28
31
  }) => {
29
32
  const [view] = useObject(viewOrRef);
30
- const schemas = useCapabilities(Common.Capability.Schema);
33
+ const schemas = useCapabilities(AppCapabilities.Schema);
31
34
  const db = view && Obj.getDatabase(view);
32
35
  const typename = view?.query ? getTypenameFromQuery(view.query.ast) : undefined;
33
36
 
@@ -60,20 +63,29 @@ export const MasonryContainer = ({
60
63
  <MasonryComponent.Root
61
64
  items={filteredObjects}
62
65
  render={Item as any}
63
- classNames='is-full max-is-full bs-full max-bs-full overflow-y-auto p-4'
66
+ classNames='w-full max-w-full h-full max-h-full overflow-y-auto p-4'
64
67
  />
65
68
  );
66
69
  };
67
70
 
68
71
  const Item = ({ data }: { data: any }) => {
72
+ const objectMenuItems = useObjectMenuItems(data);
73
+ const handleNavigate = useObjectNavigate(data);
74
+
69
75
  return (
70
- <Card.Root>
71
- <Card.Toolbar>
72
- <span />
73
- <Card.Title>{Obj.getLabel(data)}</Card.Title>
74
- <Card.Menu />
75
- </Card.Toolbar>
76
- <Surface role='card--content' limit={1} data={{ subject: data }} />
77
- </Card.Root>
76
+ <Menu.Root>
77
+ <Card.Root>
78
+ <Card.Toolbar>
79
+ <span />
80
+ <Card.Title onClick={handleNavigate}>{Obj.getLabel(data)}</Card.Title>
81
+ {/* TODO(wittjosiah): Reconcile with Card.Menu. */}
82
+ <Menu.Trigger asChild disabled={!objectMenuItems?.length}>
83
+ <Toolbar.IconButton iconOnly variant='ghost' icon='ph--dots-three-vertical--regular' label='Actions' />
84
+ </Menu.Trigger>
85
+ <Menu.Content items={objectMenuItems} />
86
+ </Card.Toolbar>
87
+ <Surface.Surface role='card--content' limit={1} data={{ subject: data }} />
88
+ </Card.Root>
89
+ </Menu.Root>
78
90
  );
79
91
  };
@@ -0,0 +1,7 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ import { MasonryContainer } from './MasonryContainer';
6
+
7
+ export default MasonryContainer;
@@ -0,0 +1,7 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ import { type ComponentType, lazy } from 'react';
6
+
7
+ export const MasonryContainer: ComponentType<any> = lazy(() => import('./MasonryContainer'));
package/src/meta.ts CHANGED
@@ -6,7 +6,7 @@ import { type Plugin } from '@dxos/app-framework';
6
6
  import { trim } from '@dxos/util';
7
7
 
8
8
  export const meta: Plugin.Meta = {
9
- id: 'dxos.org/plugin/masonry',
9
+ id: 'org.dxos.plugin.masonry',
10
10
  name: 'Masonry',
11
11
  description: trim`
12
12
  Responsive grid layout that displays query results in an adaptive masonry pattern.
@@ -17,6 +17,7 @@ export const translations = [
17
17
  'typename label_one': 'Masonry',
18
18
  'typename label_other': 'Masonries',
19
19
  'object name placeholder': 'New masonry',
20
+ 'add object label': 'Add masonry',
20
21
  'rename object label': 'Rename masonry',
21
22
  'delete object label': 'Delete masonry',
22
23
  'object deleted label': 'Masonry deleted',
@@ -5,13 +5,14 @@
5
5
  import * as Schema from 'effect/Schema';
6
6
 
7
7
  import { Obj, Ref, Type } from '@dxos/echo';
8
+ import { View } from '@dxos/echo';
8
9
  import { FormInputAnnotation, LabelAnnotation } from '@dxos/echo/internal';
9
- import { View, ViewAnnotation } from '@dxos/schema';
10
+ import { ViewAnnotation } from '@dxos/schema';
10
11
 
11
12
  export const Masonry = Schema.Struct({
12
13
  name: Schema.String.pipe(Schema.optional),
13
14
 
14
- view: Type.Ref(View.View).pipe(FormInputAnnotation.set(false)),
15
+ view: Ref.Ref(View.View).pipe(FormInputAnnotation.set(false)),
15
16
 
16
17
  arrangement: Schema.Array(
17
18
  Schema.Struct({
@@ -22,8 +23,8 @@ export const Masonry = Schema.Struct({
22
23
  // TODO(wittjosiah): Consider Masonry supporting not being just a view but referencing arbitrary data directly.
23
24
  }).pipe(
24
25
  Type.object({
25
- typename: 'dxos.org/type/Masonry',
26
- version: '0.2.0',
26
+ typename: 'org.dxos.type.masonry',
27
+ version: '0.1.0',
27
28
  }),
28
29
  LabelAnnotation.set(['name']),
29
30
  ViewAnnotation.set(true),
@@ -41,21 +42,3 @@ type MakeProps = Omit<Partial<Obj.MakeProps<typeof Masonry>>, 'view'> & {
41
42
  export const make = ({ name, arrangement = [], view }: MakeProps): Masonry => {
42
43
  return Obj.make(Masonry, { name, view: Ref.make(view), arrangement });
43
44
  };
44
-
45
- //
46
- // V1
47
- //
48
-
49
- export const MasonryV1 = Schema.Struct({
50
- arrangement: Schema.Array(
51
- Schema.Struct({
52
- ids: Schema.Array(Obj.ID),
53
- hidden: Schema.optional(Schema.Boolean),
54
- }),
55
- ).pipe(Schema.optional),
56
- }).pipe(
57
- Type.object({
58
- typename: 'dxos.org/type/Masonry',
59
- version: '0.1.0',
60
- }),
61
- );
@@ -14,7 +14,6 @@ export const MasonryProps = Schema.Struct({
14
14
  TypeInputOptionsAnnotation.set({
15
15
  location: ['database', 'runtime'],
16
16
  kind: ['user'],
17
- registered: ['registered'],
18
17
  }),
19
18
  Schema.optional,
20
19
  ),
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../src/types/Masonry.ts", "../../../src/types/MasonryAction.ts"],
4
- "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Schema from 'effect/Schema';\n\nimport { Obj, Ref, Type } from '@dxos/echo';\nimport { FormInputAnnotation, LabelAnnotation } from '@dxos/echo/internal';\nimport { View, ViewAnnotation } from '@dxos/schema';\n\nexport const Masonry = Schema.Struct({\n name: Schema.String.pipe(Schema.optional),\n\n view: Type.Ref(View.View).pipe(FormInputAnnotation.set(false)),\n\n arrangement: Schema.Array(\n Schema.Struct({\n ids: Schema.Array(Obj.ID),\n hidden: Schema.optional(Schema.Boolean),\n }),\n ).pipe(FormInputAnnotation.set(false), Schema.optional),\n // TODO(wittjosiah): Consider Masonry supporting not being just a view but referencing arbitrary data directly.\n}).pipe(\n Type.object({\n typename: 'dxos.org/type/Masonry',\n version: '0.2.0',\n }),\n LabelAnnotation.set(['name']),\n ViewAnnotation.set(true),\n);\n\nexport interface Masonry extends Schema.Schema.Type<typeof Masonry> {}\n\ntype MakeProps = Omit<Partial<Obj.MakeProps<typeof Masonry>>, 'view'> & {\n view: View.View;\n};\n\n/**\n * Make a masonry as a view of a data set.\n */\nexport const make = ({ name, arrangement = [], view }: MakeProps): Masonry => {\n return Obj.make(Masonry, { name, view: Ref.make(view), arrangement });\n};\n\n//\n// V1\n//\n\nexport const MasonryV1 = Schema.Struct({\n arrangement: Schema.Array(\n Schema.Struct({\n ids: Schema.Array(Obj.ID),\n hidden: Schema.optional(Schema.Boolean),\n }),\n ).pipe(Schema.optional),\n}).pipe(\n Type.object({\n typename: 'dxos.org/type/Masonry',\n version: '0.1.0',\n }),\n);\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Schema from 'effect/Schema';\n\nimport { TypeInputOptionsAnnotation } from '@dxos/plugin-space/types';\n\nexport const MasonryProps = Schema.Struct({\n name: Schema.optional(Schema.String),\n // TODO(wittjosiah): This should be a query input instead.\n typename: Schema.String.pipe(\n Schema.annotations({ title: 'Select card type' }),\n TypeInputOptionsAnnotation.set({\n location: ['database', 'runtime'],\n kind: ['user'],\n registered: ['registered'],\n }),\n Schema.optional,\n ),\n});\n"],
5
- "mappings": ";;;;;;;AAAA;;;;;;AAIA,YAAYA,YAAY;AAExB,SAASC,KAAKC,KAAKC,YAAY;AAC/B,SAASC,qBAAqBC,uBAAuB;AACrD,SAASC,MAAMC,sBAAsB;AAE9B,IAAMC,UAAiBC,cAAO;EACnCC,MAAaC,cAAOC,KAAYC,eAAQ;EAExCC,MAAMC,KAAKC,IAAIC,KAAKA,IAAI,EAAEL,KAAKM,oBAAoBC,IAAI,KAAA,CAAA;EAEvDC,aAAoBC,aACXZ,cAAO;IACZa,KAAYD,aAAME,IAAIC,EAAE;IACxBC,QAAeZ,gBAAgBa,cAAO;EACxC,CAAA,CAAA,EACAd,KAAKM,oBAAoBC,IAAI,KAAA,GAAeN,eAAQ;AAExD,CAAA,EAAGD,KACDG,KAAKY,OAAO;EACVC,UAAU;EACVC,SAAS;AACX,CAAA,GACAC,gBAAgBX,IAAI;EAAC;CAAO,GAC5BY,eAAeZ,IAAI,IAAA,CAAA;AAYd,IAAMa,OAAO,CAAC,EAAEtB,MAAMU,cAAc,CAAA,GAAIN,KAAI,MAAa;AAC9D,SAAOS,IAAIS,KAAKxB,SAAS;IAAEE;IAAMI,MAAME,IAAIgB,KAAKlB,IAAAA;IAAOM;EAAY,CAAA;AACrE;AAMO,IAAMa,YAAmBxB,cAAO;EACrCW,aAAoBC,aACXZ,cAAO;IACZa,KAAYD,aAAME,IAAIC,EAAE;IACxBC,QAAeZ,gBAAgBa,cAAO;EACxC,CAAA,CAAA,EACAd,KAAYC,eAAQ;AACxB,CAAA,EAAGD,KACDG,KAAKY,OAAO;EACVC,UAAU;EACVC,SAAS;AACX,CAAA,CAAA;;;AC3DF;;;;AAIA,YAAYK,aAAY;AAExB,SAASC,kCAAkC;AAEpC,IAAMC,eAAsBC,eAAO;EACxCC,MAAaC,iBAAgBC,cAAM;;EAEnCC,UAAiBD,eAAOE,KACfC,oBAAY;IAAEC,OAAO;EAAmB,CAAA,GAC/CC,2BAA2BC,IAAI;IAC7BC,UAAU;MAAC;MAAY;;IACvBC,MAAM;MAAC;;IACPC,YAAY;MAAC;;EACf,CAAA,GACOV,gBAAQ;AAEnB,CAAA;",
6
- "names": ["Schema", "Obj", "Ref", "Type", "FormInputAnnotation", "LabelAnnotation", "View", "ViewAnnotation", "Masonry", "Struct", "name", "String", "pipe", "optional", "view", "Type", "Ref", "View", "FormInputAnnotation", "set", "arrangement", "Array", "ids", "Obj", "ID", "hidden", "Boolean", "object", "typename", "version", "LabelAnnotation", "ViewAnnotation", "make", "MasonryV1", "Schema", "TypeInputOptionsAnnotation", "MasonryProps", "Struct", "name", "optional", "String", "typename", "pipe", "annotations", "title", "TypeInputOptionsAnnotation", "set", "location", "kind", "registered"]
7
- }
@@ -1,94 +0,0 @@
1
- import {
2
- meta
3
- } from "./chunk-U46AGJ2D.mjs";
4
- import {
5
- Masonry_exports
6
- } from "./chunk-S5JKAK4O.mjs";
7
-
8
- // src/capabilities/react-surface/react-surface.tsx
9
- import * as Effect from "effect/Effect";
10
- import React2 from "react";
11
- import { Capability, Common as Common2 } from "@dxos/app-framework";
12
- import { Obj as Obj2 } from "@dxos/echo";
13
- import { View } from "@dxos/schema";
14
-
15
- // src/components/MasonryContainer.tsx
16
- import React, { useEffect, useState } from "react";
17
- import { Common } from "@dxos/app-framework";
18
- import { Surface, useCapabilities } from "@dxos/app-framework/react";
19
- import { Filter, Obj, Type } from "@dxos/echo";
20
- import { useGlobalFilteredObjects } from "@dxos/plugin-search";
21
- import { useObject, useQuery } from "@dxos/react-client/echo";
22
- import { Masonry as MasonryComponent } from "@dxos/react-ui-masonry";
23
- import { Card } from "@dxos/react-ui-mosaic";
24
- import { getTypenameFromQuery } from "@dxos/schema";
25
- var MasonryContainer = ({ view: viewOrRef, role }) => {
26
- const [view] = useObject(viewOrRef);
27
- const schemas = useCapabilities(Common.Capability.Schema);
28
- const db = view && Obj.getDatabase(view);
29
- const typename = view?.query ? getTypenameFromQuery(view.query.ast) : void 0;
30
- const [cardSchema, setCardSchema] = useState();
31
- useEffect(() => {
32
- const staticSchema = schemas.flat().find((schema) => Type.getTypename(schema) === typename);
33
- if (staticSchema) {
34
- setCardSchema(() => staticSchema);
35
- }
36
- if (!staticSchema && typename && db) {
37
- const query = db.schemaRegistry.query({
38
- typename
39
- });
40
- const unsubscribe = query.subscribe(() => {
41
- const [schema] = query.results;
42
- if (schema) {
43
- setCardSchema(schema);
44
- }
45
- }, {
46
- fire: true
47
- });
48
- return unsubscribe;
49
- }
50
- }, [
51
- schemas,
52
- typename,
53
- db
54
- ]);
55
- const objects = useQuery(db, cardSchema ? Filter.type(cardSchema) : Filter.nothing());
56
- const filteredObjects = useGlobalFilteredObjects(objects);
57
- return /* @__PURE__ */ React.createElement(MasonryComponent.Root, {
58
- items: filteredObjects,
59
- render: Item,
60
- classNames: "is-full max-is-full bs-full max-bs-full overflow-y-auto p-4"
61
- });
62
- };
63
- var Item = ({ data }) => {
64
- return /* @__PURE__ */ React.createElement(Card.Root, null, /* @__PURE__ */ React.createElement(Card.Toolbar, null, /* @__PURE__ */ React.createElement("span", null), /* @__PURE__ */ React.createElement(Card.Title, null, Obj.getLabel(data)), /* @__PURE__ */ React.createElement(Card.Menu, null)), /* @__PURE__ */ React.createElement(Surface, {
65
- role: "card--content",
66
- limit: 1,
67
- data: {
68
- subject: data
69
- }
70
- }));
71
- };
72
-
73
- // src/capabilities/react-surface/react-surface.tsx
74
- var react_surface_default = Capability.makeModule(() => Effect.succeed(Capability.contributes(Common2.Capability.ReactSurface, [
75
- Common2.createSurface({
76
- id: meta.id,
77
- role: [
78
- "article",
79
- "section"
80
- ],
81
- filter: (data) => Obj2.instanceOf(Masonry_exports.Masonry, data.subject) || Obj2.instanceOf(View.View, data.subject),
82
- component: ({ data, role }) => {
83
- const view = Obj2.instanceOf(View.View, data.subject) ? data.subject : data.subject.view;
84
- return /* @__PURE__ */ React2.createElement(MasonryContainer, {
85
- view,
86
- role
87
- });
88
- }
89
- })
90
- ])));
91
- export {
92
- react_surface_default as default
93
- };
94
- //# sourceMappingURL=react-surface-UCYEF4QU.mjs.map
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../src/capabilities/react-surface/react-surface.tsx", "../../../src/components/MasonryContainer.tsx"],
4
- "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Effect from 'effect/Effect';\nimport React from 'react';\n\nimport { Capability, Common } from '@dxos/app-framework';\nimport { Obj } from '@dxos/echo';\nimport { View } from '@dxos/schema';\n\nimport { MasonryContainer } from '../../components/MasonryContainer';\nimport { meta } from '../../meta';\nimport { Masonry } from '../../types';\n\nexport default Capability.makeModule(() =>\n Effect.succeed(\n Capability.contributes(Common.Capability.ReactSurface, [\n Common.createSurface({\n id: meta.id,\n role: ['article', 'section'],\n filter: (data): data is { subject: Masonry.Masonry | View.View } =>\n Obj.instanceOf(Masonry.Masonry, data.subject) || Obj.instanceOf(View.View, data.subject),\n component: ({ data, role }) => {\n const view = Obj.instanceOf(View.View, data.subject) ? data.subject : data.subject.view;\n return <MasonryContainer view={view} role={role} />;\n },\n }),\n ]),\n ),\n);\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport type * as Schema from 'effect/Schema';\nimport React, { useEffect, useState } from 'react';\n\nimport { Common } from '@dxos/app-framework';\nimport { Surface, useCapabilities } from '@dxos/app-framework/react';\nimport { Filter, Obj, type Ref, Type } from '@dxos/echo';\nimport { useGlobalFilteredObjects } from '@dxos/plugin-search';\nimport { useObject, useQuery } from '@dxos/react-client/echo';\nimport { Masonry as MasonryComponent } from '@dxos/react-ui-masonry';\nimport { Card } from '@dxos/react-ui-mosaic';\nimport { type View, getTypenameFromQuery } from '@dxos/schema';\n\nexport type MasonryContainerProps = {\n view: View.View;\n role?: string;\n};\n\nexport const MasonryContainer = ({\n view: viewOrRef,\n role,\n}: {\n view: View.View | Ref.Ref<View.View>;\n role?: string;\n}) => {\n const [view] = useObject(viewOrRef);\n const schemas = useCapabilities(Common.Capability.Schema);\n const db = view && Obj.getDatabase(view);\n const typename = view?.query ? getTypenameFromQuery(view.query.ast) : undefined;\n\n const [cardSchema, setCardSchema] = useState<Schema.Schema.AnyNoContext>();\n\n useEffect(() => {\n const staticSchema = schemas.flat().find((schema) => Type.getTypename(schema) === typename);\n if (staticSchema) {\n setCardSchema(() => staticSchema);\n }\n if (!staticSchema && typename && db) {\n const query = 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 }, [schemas, typename, db]);\n\n const objects = useQuery(db, cardSchema ? Filter.type(cardSchema) : Filter.nothing());\n const filteredObjects = useGlobalFilteredObjects(objects);\n\n return (\n <MasonryComponent.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\nconst Item = ({ data }: { data: any }) => {\n return (\n <Card.Root>\n <Card.Toolbar>\n <span />\n <Card.Title>{Obj.getLabel(data)}</Card.Title>\n <Card.Menu />\n </Card.Toolbar>\n <Surface role='card--content' limit={1} data={{ subject: data }} />\n </Card.Root>\n );\n};\n"],
5
- "mappings": ";;;;;;;;AAIA,YAAYA,YAAY;AACxB,OAAOC,YAAW;AAElB,SAASC,YAAYC,UAAAA,eAAc;AACnC,SAASC,OAAAA,YAAW;AACpB,SAASC,YAAY;;;ACJrB,OAAOC,SAASC,WAAWC,gBAAgB;AAE3C,SAASC,cAAc;AACvB,SAASC,SAASC,uBAAuB;AACzC,SAASC,QAAQC,KAAeC,YAAY;AAC5C,SAASC,gCAAgC;AACzC,SAASC,WAAWC,gBAAgB;AACpC,SAASC,WAAWC,wBAAwB;AAC5C,SAASC,YAAY;AACrB,SAAoBC,4BAA4B;AAOzC,IAAMC,mBAAmB,CAAC,EAC/BC,MAAMC,WACNC,KAAI,MAIL;AACC,QAAM,CAACF,IAAAA,IAAQG,UAAUF,SAAAA;AACzB,QAAMG,UAAUC,gBAAgBC,OAAOC,WAAWC,MAAM;AACxD,QAAMC,KAAKT,QAAQU,IAAIC,YAAYX,IAAAA;AACnC,QAAMY,WAAWZ,MAAMa,QAAQC,qBAAqBd,KAAKa,MAAME,GAAG,IAAIC;AAEtE,QAAM,CAACC,YAAYC,aAAAA,IAAiBC,SAAAA;AAEpCC,YAAU,MAAA;AACR,UAAMC,eAAejB,QAAQkB,KAAI,EAAGC,KAAK,CAACC,WAAWC,KAAKC,YAAYF,MAAAA,MAAYZ,QAAAA;AAClF,QAAIS,cAAc;AAChBH,oBAAc,MAAMG,YAAAA;IACtB;AACA,QAAI,CAACA,gBAAgBT,YAAYH,IAAI;AACnC,YAAMI,QAAQJ,GAAGkB,eAAed,MAAM;QAAED;MAAS,CAAA;AACjD,YAAMgB,cAAcf,MAAMgB,UACxB,MAAA;AACE,cAAM,CAACL,MAAAA,IAAUX,MAAMiB;AACvB,YAAIN,QAAQ;AACVN,wBAAcM,MAAAA;QAChB;MACF,GACA;QAAEO,MAAM;MAAK,CAAA;AAEf,aAAOH;IACT;EACF,GAAG;IAACxB;IAASQ;IAAUH;GAAG;AAE1B,QAAMuB,UAAUC,SAASxB,IAAIQ,aAAaiB,OAAOC,KAAKlB,UAAAA,IAAciB,OAAOE,QAAO,CAAA;AAClF,QAAMC,kBAAkBC,yBAAyBN,OAAAA;AAEjD,SACE,sBAAA,cAACO,iBAAiBC,MAAI;IACpBC,OAAOJ;IACPK,QAAQC;IACRC,YAAW;;AAGjB;AAEA,IAAMD,OAAO,CAAC,EAAEE,KAAI,MAAiB;AACnC,SACE,sBAAA,cAACC,KAAKN,MAAI,MACR,sBAAA,cAACM,KAAKC,SAAO,MACX,sBAAA,cAACC,QAAAA,IAAAA,GACD,sBAAA,cAACF,KAAKG,OAAK,MAAEvC,IAAIwC,SAASL,IAAAA,CAAAA,GAC1B,sBAAA,cAACC,KAAKK,MAAI,IAAA,CAAA,GAEZ,sBAAA,cAACC,SAAAA;IAAQlD,MAAK;IAAgBmD,OAAO;IAAGR,MAAM;MAAES,SAAST;IAAK;;AAGpE;;;AD/DA,IAAA,wBAAeU,WAAWC,WAAW,MAC5BC,eACLF,WAAWG,YAAYC,QAAOJ,WAAWK,cAAc;EACrDD,QAAOE,cAAc;IACnBC,IAAIC,KAAKD;IACTE,MAAM;MAAC;MAAW;;IAClBC,QAAQ,CAACC,SACPC,KAAIC,WAAWC,gBAAQA,SAASH,KAAKI,OAAO,KAAKH,KAAIC,WAAWG,KAAKA,MAAML,KAAKI,OAAO;IACzFE,WAAW,CAAC,EAAEN,MAAMF,KAAI,MAAE;AACxB,YAAMS,OAAON,KAAIC,WAAWG,KAAKA,MAAML,KAAKI,OAAO,IAAIJ,KAAKI,UAAUJ,KAAKI,QAAQG;AACnF,aAAO,gBAAAC,OAAA,cAACC,kBAAAA;QAAiBF;QAAYT;;IACvC;EACF,CAAA;CACD,CAAA,CAAA;",
6
- "names": ["Effect", "React", "Capability", "Common", "Obj", "View", "React", "useEffect", "useState", "Common", "Surface", "useCapabilities", "Filter", "Obj", "Type", "useGlobalFilteredObjects", "useObject", "useQuery", "Masonry", "MasonryComponent", "Card", "getTypenameFromQuery", "MasonryContainer", "view", "viewOrRef", "role", "useObject", "schemas", "useCapabilities", "Common", "Capability", "Schema", "db", "Obj", "getDatabase", "typename", "query", "getTypenameFromQuery", "ast", "undefined", "cardSchema", "setCardSchema", "useState", "useEffect", "staticSchema", "flat", "find", "schema", "Type", "getTypename", "schemaRegistry", "unsubscribe", "subscribe", "results", "fire", "objects", "useQuery", "Filter", "type", "nothing", "filteredObjects", "useGlobalFilteredObjects", "MasonryComponent", "Root", "items", "render", "Item", "classNames", "data", "Card", "Toolbar", "span", "Title", "getLabel", "Menu", "Surface", "limit", "subject", "Capability", "makeModule", "succeed", "contributes", "Common", "ReactSurface", "createSurface", "id", "meta", "role", "filter", "data", "Obj", "instanceOf", "Masonry", "subject", "View", "component", "view", "React", "MasonryContainer"]
7
- }
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../src/types/Masonry.ts", "../../../src/types/MasonryAction.ts"],
4
- "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Schema from 'effect/Schema';\n\nimport { Obj, Ref, Type } from '@dxos/echo';\nimport { FormInputAnnotation, LabelAnnotation } from '@dxos/echo/internal';\nimport { View, ViewAnnotation } from '@dxos/schema';\n\nexport const Masonry = Schema.Struct({\n name: Schema.String.pipe(Schema.optional),\n\n view: Type.Ref(View.View).pipe(FormInputAnnotation.set(false)),\n\n arrangement: Schema.Array(\n Schema.Struct({\n ids: Schema.Array(Obj.ID),\n hidden: Schema.optional(Schema.Boolean),\n }),\n ).pipe(FormInputAnnotation.set(false), Schema.optional),\n // TODO(wittjosiah): Consider Masonry supporting not being just a view but referencing arbitrary data directly.\n}).pipe(\n Type.object({\n typename: 'dxos.org/type/Masonry',\n version: '0.2.0',\n }),\n LabelAnnotation.set(['name']),\n ViewAnnotation.set(true),\n);\n\nexport interface Masonry extends Schema.Schema.Type<typeof Masonry> {}\n\ntype MakeProps = Omit<Partial<Obj.MakeProps<typeof Masonry>>, 'view'> & {\n view: View.View;\n};\n\n/**\n * Make a masonry as a view of a data set.\n */\nexport const make = ({ name, arrangement = [], view }: MakeProps): Masonry => {\n return Obj.make(Masonry, { name, view: Ref.make(view), arrangement });\n};\n\n//\n// V1\n//\n\nexport const MasonryV1 = Schema.Struct({\n arrangement: Schema.Array(\n Schema.Struct({\n ids: Schema.Array(Obj.ID),\n hidden: Schema.optional(Schema.Boolean),\n }),\n ).pipe(Schema.optional),\n}).pipe(\n Type.object({\n typename: 'dxos.org/type/Masonry',\n version: '0.1.0',\n }),\n);\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Schema from 'effect/Schema';\n\nimport { TypeInputOptionsAnnotation } from '@dxos/plugin-space/types';\n\nexport const MasonryProps = Schema.Struct({\n name: Schema.optional(Schema.String),\n // TODO(wittjosiah): This should be a query input instead.\n typename: Schema.String.pipe(\n Schema.annotations({ title: 'Select card type' }),\n TypeInputOptionsAnnotation.set({\n location: ['database', 'runtime'],\n kind: ['user'],\n registered: ['registered'],\n }),\n Schema.optional,\n ),\n});\n"],
5
- "mappings": ";;;;;;;;AAAA;;;;;;AAIA,YAAYA,YAAY;AAExB,SAASC,KAAKC,KAAKC,YAAY;AAC/B,SAASC,qBAAqBC,uBAAuB;AACrD,SAASC,MAAMC,sBAAsB;AAE9B,IAAMC,UAAiBC,cAAO;EACnCC,MAAaC,cAAOC,KAAYC,eAAQ;EAExCC,MAAMC,KAAKC,IAAIC,KAAKA,IAAI,EAAEL,KAAKM,oBAAoBC,IAAI,KAAA,CAAA;EAEvDC,aAAoBC,aACXZ,cAAO;IACZa,KAAYD,aAAME,IAAIC,EAAE;IACxBC,QAAeZ,gBAAgBa,cAAO;EACxC,CAAA,CAAA,EACAd,KAAKM,oBAAoBC,IAAI,KAAA,GAAeN,eAAQ;AAExD,CAAA,EAAGD,KACDG,KAAKY,OAAO;EACVC,UAAU;EACVC,SAAS;AACX,CAAA,GACAC,gBAAgBX,IAAI;EAAC;CAAO,GAC5BY,eAAeZ,IAAI,IAAA,CAAA;AAYd,IAAMa,OAAO,CAAC,EAAEtB,MAAMU,cAAc,CAAA,GAAIN,KAAI,MAAa;AAC9D,SAAOS,IAAIS,KAAKxB,SAAS;IAAEE;IAAMI,MAAME,IAAIgB,KAAKlB,IAAAA;IAAOM;EAAY,CAAA;AACrE;AAMO,IAAMa,YAAmBxB,cAAO;EACrCW,aAAoBC,aACXZ,cAAO;IACZa,KAAYD,aAAME,IAAIC,EAAE;IACxBC,QAAeZ,gBAAgBa,cAAO;EACxC,CAAA,CAAA,EACAd,KAAYC,eAAQ;AACxB,CAAA,EAAGD,KACDG,KAAKY,OAAO;EACVC,UAAU;EACVC,SAAS;AACX,CAAA,CAAA;;;AC3DF;;;;AAIA,YAAYK,aAAY;AAExB,SAASC,kCAAkC;AAEpC,IAAMC,eAAsBC,eAAO;EACxCC,MAAaC,iBAAgBC,cAAM;;EAEnCC,UAAiBD,eAAOE,KACfC,oBAAY;IAAEC,OAAO;EAAmB,CAAA,GAC/CC,2BAA2BC,IAAI;IAC7BC,UAAU;MAAC;MAAY;;IACvBC,MAAM;MAAC;;IACPC,YAAY;MAAC;;EACf,CAAA,GACOV,gBAAQ;AAEnB,CAAA;",
6
- "names": ["Schema", "Obj", "Ref", "Type", "FormInputAnnotation", "LabelAnnotation", "View", "ViewAnnotation", "Masonry", "Struct", "name", "String", "pipe", "optional", "view", "Type", "Ref", "View", "FormInputAnnotation", "set", "arrangement", "Array", "ids", "Obj", "ID", "hidden", "Boolean", "object", "typename", "version", "LabelAnnotation", "ViewAnnotation", "make", "MasonryV1", "Schema", "TypeInputOptionsAnnotation", "MasonryProps", "Struct", "name", "optional", "String", "typename", "pipe", "annotations", "title", "TypeInputOptionsAnnotation", "set", "location", "kind", "registered"]
7
- }
@@ -1,95 +0,0 @@
1
- import { createRequire } from 'node:module';const require = createRequire(import.meta.url);
2
- import {
3
- meta
4
- } from "./chunk-P6EZJITS.mjs";
5
- import {
6
- Masonry_exports
7
- } from "./chunk-YNA44I6R.mjs";
8
-
9
- // src/capabilities/react-surface/react-surface.tsx
10
- import * as Effect from "effect/Effect";
11
- import React2 from "react";
12
- import { Capability, Common as Common2 } from "@dxos/app-framework";
13
- import { Obj as Obj2 } from "@dxos/echo";
14
- import { View } from "@dxos/schema";
15
-
16
- // src/components/MasonryContainer.tsx
17
- import React, { useEffect, useState } from "react";
18
- import { Common } from "@dxos/app-framework";
19
- import { Surface, useCapabilities } from "@dxos/app-framework/react";
20
- import { Filter, Obj, Type } from "@dxos/echo";
21
- import { useGlobalFilteredObjects } from "@dxos/plugin-search";
22
- import { useObject, useQuery } from "@dxos/react-client/echo";
23
- import { Masonry as MasonryComponent } from "@dxos/react-ui-masonry";
24
- import { Card } from "@dxos/react-ui-mosaic";
25
- import { getTypenameFromQuery } from "@dxos/schema";
26
- var MasonryContainer = ({ view: viewOrRef, role }) => {
27
- const [view] = useObject(viewOrRef);
28
- const schemas = useCapabilities(Common.Capability.Schema);
29
- const db = view && Obj.getDatabase(view);
30
- const typename = view?.query ? getTypenameFromQuery(view.query.ast) : void 0;
31
- const [cardSchema, setCardSchema] = useState();
32
- useEffect(() => {
33
- const staticSchema = schemas.flat().find((schema) => Type.getTypename(schema) === typename);
34
- if (staticSchema) {
35
- setCardSchema(() => staticSchema);
36
- }
37
- if (!staticSchema && typename && db) {
38
- const query = db.schemaRegistry.query({
39
- typename
40
- });
41
- const unsubscribe = query.subscribe(() => {
42
- const [schema] = query.results;
43
- if (schema) {
44
- setCardSchema(schema);
45
- }
46
- }, {
47
- fire: true
48
- });
49
- return unsubscribe;
50
- }
51
- }, [
52
- schemas,
53
- typename,
54
- db
55
- ]);
56
- const objects = useQuery(db, cardSchema ? Filter.type(cardSchema) : Filter.nothing());
57
- const filteredObjects = useGlobalFilteredObjects(objects);
58
- return /* @__PURE__ */ React.createElement(MasonryComponent.Root, {
59
- items: filteredObjects,
60
- render: Item,
61
- classNames: "is-full max-is-full bs-full max-bs-full overflow-y-auto p-4"
62
- });
63
- };
64
- var Item = ({ data }) => {
65
- return /* @__PURE__ */ React.createElement(Card.Root, null, /* @__PURE__ */ React.createElement(Card.Toolbar, null, /* @__PURE__ */ React.createElement("span", null), /* @__PURE__ */ React.createElement(Card.Title, null, Obj.getLabel(data)), /* @__PURE__ */ React.createElement(Card.Menu, null)), /* @__PURE__ */ React.createElement(Surface, {
66
- role: "card--content",
67
- limit: 1,
68
- data: {
69
- subject: data
70
- }
71
- }));
72
- };
73
-
74
- // src/capabilities/react-surface/react-surface.tsx
75
- var react_surface_default = Capability.makeModule(() => Effect.succeed(Capability.contributes(Common2.Capability.ReactSurface, [
76
- Common2.createSurface({
77
- id: meta.id,
78
- role: [
79
- "article",
80
- "section"
81
- ],
82
- filter: (data) => Obj2.instanceOf(Masonry_exports.Masonry, data.subject) || Obj2.instanceOf(View.View, data.subject),
83
- component: ({ data, role }) => {
84
- const view = Obj2.instanceOf(View.View, data.subject) ? data.subject : data.subject.view;
85
- return /* @__PURE__ */ React2.createElement(MasonryContainer, {
86
- view,
87
- role
88
- });
89
- }
90
- })
91
- ])));
92
- export {
93
- react_surface_default as default
94
- };
95
- //# sourceMappingURL=react-surface-LG7FTGYA.mjs.map