@dxos/plugin-preview 0.8.4-main.3eb6e50203 → 0.8.4-main.4a85c3132b

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dxos/plugin-preview",
3
- "version": "0.8.4-main.3eb6e50203",
3
+ "version": "0.8.4-main.4a85c3132b",
4
4
  "description": "Preview plugin",
5
5
  "homepage": "https://dxos.org",
6
6
  "bugs": "https://github.com/dxos/dxos/issues",
@@ -29,44 +29,44 @@
29
29
  ],
30
30
  "dependencies": {
31
31
  "@effect-atom/atom-react": "^0.5.0",
32
- "@dxos/app-framework": "0.8.4-main.3eb6e50203",
33
- "@dxos/app-graph": "0.8.4-main.3eb6e50203",
34
- "@dxos/app-toolkit": "0.8.4-main.3eb6e50203",
35
- "@dxos/client": "0.8.4-main.3eb6e50203",
36
- "@dxos/async": "0.8.4-main.3eb6e50203",
37
- "@dxos/echo": "0.8.4-main.3eb6e50203",
38
- "@dxos/keys": "0.8.4-main.3eb6e50203",
39
- "@dxos/effect": "0.8.4-main.3eb6e50203",
40
- "@dxos/log": "0.8.4-main.3eb6e50203",
41
- "@dxos/lit-ui": "0.8.4-main.3eb6e50203",
42
- "@dxos/plugin-attention": "0.8.4-main.3eb6e50203",
43
- "@dxos/operation": "0.8.4-main.3eb6e50203",
44
- "@dxos/plugin-deck": "0.8.4-main.3eb6e50203",
45
- "@dxos/plugin-client": "0.8.4-main.3eb6e50203",
46
- "@dxos/react-ui": "0.8.4-main.3eb6e50203",
47
- "@dxos/react-client": "0.8.4-main.3eb6e50203",
48
- "@dxos/react-ui-form": "0.8.4-main.3eb6e50203",
49
- "@dxos/react-ui-editor": "0.8.4-main.3eb6e50203",
50
- "@dxos/react-ui-menu": "0.8.4-main.3eb6e50203",
51
- "@dxos/react-ui-mosaic": "0.8.4-main.3eb6e50203",
52
- "@dxos/react-ui-table": "0.8.4-main.3eb6e50203",
53
- "@dxos/schema": "0.8.4-main.3eb6e50203",
54
- "@dxos/types": "0.8.4-main.3eb6e50203",
55
- "@dxos/ui-editor": "0.8.4-main.3eb6e50203",
56
- "@dxos/ui-theme": "0.8.4-main.3eb6e50203",
57
- "@dxos/util": "0.8.4-main.3eb6e50203",
58
- "@dxos/plugin-space": "0.8.4-main.3eb6e50203"
32
+ "@dxos/app-framework": "0.8.4-main.4a85c3132b",
33
+ "@dxos/app-toolkit": "0.8.4-main.4a85c3132b",
34
+ "@dxos/app-graph": "0.8.4-main.4a85c3132b",
35
+ "@dxos/client": "0.8.4-main.4a85c3132b",
36
+ "@dxos/echo": "0.8.4-main.4a85c3132b",
37
+ "@dxos/effect": "0.8.4-main.4a85c3132b",
38
+ "@dxos/keys": "0.8.4-main.4a85c3132b",
39
+ "@dxos/lit-ui": "0.8.4-main.4a85c3132b",
40
+ "@dxos/async": "0.8.4-main.4a85c3132b",
41
+ "@dxos/plugin-attention": "0.8.4-main.4a85c3132b",
42
+ "@dxos/operation": "0.8.4-main.4a85c3132b",
43
+ "@dxos/log": "0.8.4-main.4a85c3132b",
44
+ "@dxos/plugin-space": "0.8.4-main.4a85c3132b",
45
+ "@dxos/plugin-deck": "0.8.4-main.4a85c3132b",
46
+ "@dxos/react-client": "0.8.4-main.4a85c3132b",
47
+ "@dxos/react-ui": "0.8.4-main.4a85c3132b",
48
+ "@dxos/react-ui-editor": "0.8.4-main.4a85c3132b",
49
+ "@dxos/react-ui-form": "0.8.4-main.4a85c3132b",
50
+ "@dxos/plugin-client": "0.8.4-main.4a85c3132b",
51
+ "@dxos/react-ui-menu": "0.8.4-main.4a85c3132b",
52
+ "@dxos/schema": "0.8.4-main.4a85c3132b",
53
+ "@dxos/types": "0.8.4-main.4a85c3132b",
54
+ "@dxos/ui-editor": "0.8.4-main.4a85c3132b",
55
+ "@dxos/react-ui-mosaic": "0.8.4-main.4a85c3132b",
56
+ "@dxos/ui-theme": "0.8.4-main.4a85c3132b",
57
+ "@dxos/util": "0.8.4-main.4a85c3132b",
58
+ "@dxos/react-ui-table": "0.8.4-main.4a85c3132b"
59
59
  },
60
60
  "devDependencies": {
61
61
  "effect": "3.19.16",
62
62
  "react": "~19.2.3",
63
63
  "react-dom": "~19.2.3",
64
- "vite": "7.1.9",
65
- "@dxos/plugin-testing": "0.8.4-main.3eb6e50203",
66
- "@dxos/echo-db": "0.8.4-main.3eb6e50203",
67
- "@dxos/random": "0.8.4-main.3eb6e50203",
68
- "@dxos/react-ui-components": "0.8.4-main.3eb6e50203",
69
- "@dxos/storybook-utils": "0.8.4-main.3eb6e50203"
64
+ "vite": "^7.1.11",
65
+ "@dxos/echo-db": "0.8.4-main.4a85c3132b",
66
+ "@dxos/plugin-testing": "0.8.4-main.4a85c3132b",
67
+ "@dxos/random": "0.8.4-main.4a85c3132b",
68
+ "@dxos/react-ui-components": "0.8.4-main.4a85c3132b",
69
+ "@dxos/storybook-utils": "0.8.4-main.4a85c3132b"
70
70
  },
71
71
  "peerDependencies": {
72
72
  "effect": "3.19.16",
@@ -8,7 +8,7 @@ import React from 'react';
8
8
  import { Capabilities, Capability } from '@dxos/app-framework';
9
9
  import { Surface } from '@dxos/app-framework/ui';
10
10
  import { Obj } from '@dxos/echo';
11
- import { Card } from '@dxos/react-ui-mosaic';
11
+ import { Card } from '@dxos/react-ui';
12
12
  import { type ProjectionModel } from '@dxos/schema';
13
13
  import { Organization, Person, Pipeline, Task } from '@dxos/types';
14
14
 
@@ -82,8 +82,8 @@ export default Capability.makeModule(() =>
82
82
  filter: (data): data is { subject: Obj.Unknown } => Obj.isObject(data.subject),
83
83
  component: ({ data }) => {
84
84
  return (
85
- <div role='none' className='flex is-full justify-center'>
86
- <div role='none' className='pbs-2 pbe-2 card-min-width card-max-width'>
85
+ <div role='none' className='flex w-full justify-center'>
86
+ <div role='none' className='pt-2 pb-2 dx-card-min-width dx-card-max-width'>
87
87
  <Card.Root>
88
88
  <Surface.Surface role='card--content' data={data} limit={1} />
89
89
  </Card.Root>
@@ -4,12 +4,10 @@
4
4
 
5
5
  import React, { useCallback } from 'react';
6
6
 
7
- import { useOperationInvoker } from '@dxos/app-framework/ui';
8
- import { LayoutOperation } from '@dxos/app-toolkit';
9
7
  import { type SurfaceComponentProps } from '@dxos/app-toolkit/ui';
10
8
  import { Obj } from '@dxos/echo';
11
9
  import { type JsonPath, splitJsonPath } from '@dxos/effect';
12
- import { useTranslation } from '@dxos/react-ui';
10
+ import { Card, useTranslation } from '@dxos/react-ui';
13
11
  import { Form, omitId } from '@dxos/react-ui-form';
14
12
  import { type ProjectionModel } from '@dxos/schema';
15
13
  import { descriptionMessage, mx } from '@dxos/ui-theme';
@@ -18,14 +16,7 @@ import { meta } from '../meta';
18
16
 
19
17
  export const FormCard = ({ subject, projection }: SurfaceComponentProps & { projection?: ProjectionModel }) => {
20
18
  const { t } = useTranslation(meta.id);
21
- const { invokePromise } = useOperationInvoker();
22
19
  const schema = Obj.getSchema(subject);
23
- const label = Obj.getLabel(subject) ?? Obj.getTypename(subject) ?? t('unable to create preview message');
24
-
25
- const handleNavigate = useCallback(async () => {
26
- await invokePromise(LayoutOperation.UpdatePopover, { state: false, anchorId: '' });
27
- await invokePromise(LayoutOperation.Open, { subject: [Obj.getDXN(subject).toString()] });
28
- }, [invokePromise, subject]);
29
20
 
30
21
  const handleSave = useCallback((values: any, { changed }: { changed: Record<string, boolean> }) => {
31
22
  const paths = Object.keys(changed).filter((path) => changed[path]);
@@ -39,18 +30,18 @@ export const FormCard = ({ subject, projection }: SurfaceComponentProps & { proj
39
30
  }, []);
40
31
 
41
32
  if (!schema) {
42
- // TODO(burdon): Use Alert.
43
33
  return <p className={mx(descriptionMessage)}>{t('unable to create preview message')}</p>;
44
34
  }
45
35
 
46
36
  return (
47
- <Form.Root schema={omitId(schema)} projection={projection} values={subject} autoSave onSave={handleSave}>
48
- {/* TODO(burdon): Scrolling issue. Need fixed height. */}
49
- <Form.Viewport>
50
- <Form.Content>
51
- <Form.FieldSet />
52
- </Form.Content>
53
- </Form.Viewport>
54
- </Form.Root>
37
+ <Card.Content>
38
+ <Form.Root schema={omitId(schema)} projection={projection} values={subject} autoSave onSave={handleSave}>
39
+ <Form.Viewport>
40
+ <Form.Content>
41
+ <Form.FieldSet />
42
+ </Form.Content>
43
+ </Form.Viewport>
44
+ </Form.Root>
45
+ </Card.Content>
55
46
  );
56
47
  };
@@ -5,7 +5,7 @@
5
5
  import React from 'react';
6
6
 
7
7
  import { type SurfaceComponentProps } from '@dxos/app-toolkit/ui';
8
- import { Card } from '@dxos/react-ui-mosaic';
8
+ import { Card } from '@dxos/react-ui';
9
9
  import { type Organization } from '@dxos/types';
10
10
 
11
11
  export const OrganizationCard = ({ subject }: SurfaceComponentProps<Organization.Organization>) => {
@@ -6,17 +6,17 @@ import React from 'react';
6
6
 
7
7
  import { type SurfaceComponentProps } from '@dxos/app-toolkit/ui';
8
8
  import { Avatar } from '@dxos/react-ui';
9
- import { Card } from '@dxos/react-ui-mosaic';
9
+ import { Card } from '@dxos/react-ui';
10
10
  import { type Person } from '@dxos/types';
11
11
 
12
12
  export const PersonCard = ({ subject }: SurfaceComponentProps<Person.Person>) => {
13
13
  const { image, organization: { target: organization } = {}, emails = [] } = subject;
14
14
 
15
15
  return (
16
- <Avatar.Root>
17
- <Card.Content>
16
+ <Card.Content>
17
+ <Avatar.Root>
18
18
  {image && (
19
- <Card.Row className='plb-1'>
19
+ <Card.Row className='py-1'>
20
20
  <Avatar.Content
21
21
  imgSrc={image}
22
22
  icon='ph--user--regular'
@@ -36,12 +36,12 @@ export const PersonCard = ({ subject }: SurfaceComponentProps<Person.Person>) =>
36
36
  )}
37
37
  {emails.map(({ value }) => (
38
38
  <Card.Row key={value} icon='ph--at--regular'>
39
- <Card.Text truncate className='text-primaryText'>
39
+ <Card.Text truncate className='text-primary-text'>
40
40
  {value}
41
41
  </Card.Text>
42
42
  </Card.Row>
43
43
  ))}
44
- </Card.Content>
45
- </Avatar.Root>
44
+ </Avatar.Root>
45
+ </Card.Content>
46
46
  );
47
47
  };
@@ -6,11 +6,11 @@ import React from 'react';
6
6
 
7
7
  import { type SurfaceComponentProps } from '@dxos/app-toolkit/ui';
8
8
  import { Obj } from '@dxos/echo';
9
- import { Card } from '@dxos/react-ui-mosaic';
9
+ import { Card } from '@dxos/react-ui';
10
10
  import { type Pipeline } from '@dxos/types';
11
11
 
12
12
  export const ProjectCard = ({ subject }: SurfaceComponentProps<Pipeline.Pipeline>) => {
13
- const { name, image, description } = subject;
13
+ const { image, description } = subject;
14
14
 
15
15
  return (
16
16
  <Card.Content>
@@ -7,7 +7,7 @@ import React from 'react';
7
7
 
8
8
  import { type SurfaceComponentProps } from '@dxos/app-toolkit/ui';
9
9
  import { type PropertyMetaAnnotation, PropertyMetaAnnotationId } from '@dxos/echo/internal';
10
- import { Card } from '@dxos/react-ui-mosaic';
10
+ import { Card } from '@dxos/react-ui';
11
11
  import { Task } from '@dxos/types';
12
12
 
13
13
  export const TaskCard = ({ subject }: SurfaceComponentProps<Task.Task>) => {
@@ -16,7 +16,7 @@ export const TaskCard = ({ subject }: SurfaceComponentProps<Task.Task>) => {
16
16
 
17
17
  return (
18
18
  <Card.Content>
19
- <Card.Heading classNames='min-is-0 flex-1 truncate'>{title}</Card.Heading>
19
+ <Card.Heading classNames='min-w-0 flex-1 truncate'>{title}</Card.Heading>
20
20
  {statusOption && (
21
21
  <span className='dx-tag' data-hue={statusOption.color}>
22
22
  {statusOption.title}
@@ -18,17 +18,17 @@ import { DefaultStory, createOrganization, createPerson, createProject, createTa
18
18
  faker.seed(999);
19
19
 
20
20
  const meta = {
21
- title: 'plugins/plugin-preview/Card',
21
+ title: 'plugins/plugin-preview/cards/Card',
22
22
  render: DefaultStory,
23
23
  decorators: [
24
24
  withTheme(),
25
- withLayout({ layout: 'column', scroll: true }),
25
+ withLayout({ layout: 'fullscreen' }),
26
26
  // TODO(wittjosiah): Try to write story which does not depend on plugin manager.
27
27
  withPluginManager({ plugins: corePlugins() }),
28
28
  ],
29
29
  parameters: {
30
- translations,
31
30
  layout: 'fullscreen',
31
+ translations,
32
32
  },
33
33
  tags: ['cards'],
34
34
  } satisfies Meta<typeof DefaultStory>;
@@ -7,8 +7,8 @@ import React, { type FC, useMemo } from 'react';
7
7
  import { type SurfaceComponentProps } from '@dxos/app-toolkit/ui';
8
8
  import { Obj, Ref } from '@dxos/echo';
9
9
  import { faker } from '@dxos/random';
10
- import { Card } from '@dxos/react-ui-mosaic';
11
- import { CardContainer } from '@dxos/react-ui-mosaic/testing';
10
+ import { Card } from '@dxos/react-ui';
11
+ import { CardContainer, type CardContainerProps } from '@dxos/react-ui-mosaic/testing';
12
12
  import { Organization, Person, Pipeline, Task } from '@dxos/types';
13
13
 
14
14
  export type DefaultStoryProps<T extends Obj.Any> = {
@@ -18,18 +18,22 @@ export type DefaultStoryProps<T extends Obj.Any> = {
18
18
  };
19
19
 
20
20
  export const DefaultStory = <T extends Obj.Any>({ Component, createObject, image }: DefaultStoryProps<T>) => {
21
- // TODO(wittjosiah): ECHO objects don't work when passed via Storybook args.
22
21
  const object = useMemo(() => createObject(), [createObject]);
23
- const roles: SurfaceComponentProps['role'][] = ['card--intrinsic', 'card--popover'];
22
+ const roles: CardContainerProps['role'][] = ['intrinsic', 'popover'];
24
23
 
25
24
  return (
26
- <div className='bs-full grid grid-rows-2 p-16 gap-16'>
25
+ <div className='w-full h-full grid grid-cols-2 py-16 gap-8'>
27
26
  {roles.map((role, i) => (
28
- <div key={i} className='flex bs-full justify-center overflow-hidden'>
29
- <div className='flex flex-col gap-4 is-full items-center'>
30
- <label className='text-sm text-description'>{role}</label>
27
+ <div key={i} className='flex h-full justify-center overflow-hidden'>
28
+ <div className='flex flex-col gap-4 w-full items-center'>
29
+ <span className='text-sm text-description'>{role}</span>
31
30
  <CardContainer role={role}>
32
31
  <Card.Root border={false}>
32
+ <Card.Toolbar>
33
+ <Card.DragHandle />
34
+ <Card.Title>{Obj.getLabel(object)}</Card.Title>
35
+ <Card.Menu />
36
+ </Card.Toolbar>
33
37
  <Component role={role} subject={image ? object : omitImage(object)} />
34
38
  </Card.Root>
35
39
  </CardContainer>
@@ -45,14 +49,15 @@ export const omitImage = ({ image: _, ...rest }: any) => rest;
45
49
  /**
46
50
  * Factory functions for creating test objects at render time.
47
51
  */
48
- export const createOrganization = (): Organization.Organization =>
49
- Obj.make(Organization.Organization, {
52
+ export const createOrganization = (): Organization.Organization => {
53
+ return Obj.make(Organization.Organization, {
50
54
  name: faker.company.name(),
51
55
  image:
52
56
  'https://plus.unsplash.com/premium_photo-1672116452571-896980a801c8?q=80&w=2671&auto=format&fit=crop&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D',
53
57
  website: faker.internet.url(),
54
58
  description: faker.lorem.paragraph(),
55
59
  });
60
+ };
56
61
 
57
62
  export const createPerson = (): Person.Person => {
58
63
  const organization = createOrganization();
@@ -69,16 +74,18 @@ export const createPerson = (): Person.Person => {
69
74
  });
70
75
  };
71
76
 
72
- export const createProject = (): Pipeline.Pipeline =>
73
- Obj.make(Pipeline.Pipeline, {
77
+ export const createProject = (): Pipeline.Pipeline => {
78
+ return Obj.make(Pipeline.Pipeline, {
74
79
  name: faker.person.fullName(),
75
80
  image: 'https://dxos.network/dxos-logotype-blue.png',
76
81
  description: faker.lorem.paragraph(),
77
82
  columns: [],
78
83
  });
84
+ };
79
85
 
80
- export const createTask = (): Task.Task =>
81
- Obj.make(Task.Task, {
86
+ export const createTask = (): Task.Task => {
87
+ return Obj.make(Task.Task, {
82
88
  title: faker.lorem.sentence(),
83
89
  status: faker.helpers.arrayElement(['todo', 'in-progress', 'done'] as const),
84
90
  });
91
+ };
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../src/capabilities/react-surface/react-surface.tsx", "../../../src/cards/FormCard.tsx", "../../../src/cards/OrganizationCard.tsx", "../../../src/cards/PersonCard.tsx", "../../../src/cards/ProjectCard.tsx", "../../../src/cards/TaskCard.tsx"],
4
- "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Effect from 'effect/Effect';\nimport React from 'react';\n\nimport { Capabilities, Capability } from '@dxos/app-framework';\nimport { Surface } from '@dxos/app-framework/ui';\nimport { Obj } from '@dxos/echo';\nimport { Card } from '@dxos/react-ui-mosaic';\nimport { type ProjectionModel } from '@dxos/schema';\nimport { Organization, Person, Pipeline, Task } from '@dxos/types';\n\nimport { FormCard, OrganizationCard, PersonCard, ProjectCard, TaskCard } from '../../cards';\nimport { meta } from '../../meta';\n\nexport default Capability.makeModule(() =>\n Effect.succeed(\n Capability.contributes(Capabilities.ReactSurface, [\n //\n // Specific schema types.\n // TODO(burdon): Create helpers and factor out.\n //\n\n Surface.create<{ subject: Person.Person }>({\n id: `${meta.id}/schema-popover--contact`,\n role: 'card--content',\n position: 'hoist',\n filter: (data): data is { subject: Person.Person } => Obj.instanceOf(Person.Person, data.subject),\n component: ({ data, role }) => {\n return <PersonCard role={role} subject={data.subject} />;\n },\n }),\n Surface.create({\n id: `${meta.id}/schema-popover--organization`,\n role: 'card--content',\n position: 'hoist',\n filter: (data): data is { subject: Organization.Organization } =>\n Obj.instanceOf(Organization.Organization, data.subject),\n component: ({ data, role }) => {\n return <OrganizationCard role={role} subject={data.subject} />;\n },\n }),\n Surface.create({\n id: `${meta.id}/schema-popover--project`,\n role: 'card--content',\n position: 'hoist',\n filter: (data): data is { subject: Pipeline.Pipeline } => Obj.instanceOf(Pipeline.Pipeline, data.subject),\n component: ({ data, role }) => {\n return <ProjectCard role={role} subject={data.subject} />;\n },\n }),\n Surface.create({\n id: `${meta.id}/schema-popover--task`,\n role: 'card--content',\n position: 'hoist',\n filter: (data): data is { subject: Task.Task } => Obj.instanceOf(Task.Task, data.subject),\n component: ({ data, role }) => {\n return <TaskCard role={role} subject={data.subject} />;\n },\n }),\n\n //\n // Fallback for any object.\n //\n\n Surface.create({\n id: `${meta.id}/fallback-popover`,\n role: 'card--content',\n position: 'fallback',\n filter: (data): data is { subject: Obj.Unknown; projection?: ProjectionModel } => Obj.isObject(data.subject),\n component: ({ data, role }) => {\n return <FormCard role={role} subject={data.subject} projection={data.projection} />;\n },\n }),\n\n Surface.create({\n id: `${meta.id}/section`,\n role: ['section'],\n position: 'fallback',\n filter: (data): data is { subject: Obj.Unknown } => Obj.isObject(data.subject),\n component: ({ data }) => {\n return (\n <div role='none' className='flex is-full justify-center'>\n <div role='none' className='pbs-2 pbe-2 card-min-width card-max-width'>\n <Card.Root>\n <Surface.Surface role='card--content' data={data} limit={1} />\n </Card.Root>\n </div>\n </div>\n );\n },\n }),\n ]),\n ),\n);\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport React, { useCallback } from 'react';\n\nimport { useOperationInvoker } from '@dxos/app-framework/ui';\nimport { LayoutOperation } from '@dxos/app-toolkit';\nimport { type SurfaceComponentProps } from '@dxos/app-toolkit/ui';\nimport { Obj } from '@dxos/echo';\nimport { type JsonPath, splitJsonPath } from '@dxos/effect';\nimport { useTranslation } from '@dxos/react-ui';\nimport { Form, omitId } from '@dxos/react-ui-form';\nimport { type ProjectionModel } from '@dxos/schema';\nimport { descriptionMessage, mx } from '@dxos/ui-theme';\n\nimport { meta } from '../meta';\n\nexport const FormCard = ({ subject, projection }: SurfaceComponentProps & { projection?: ProjectionModel }) => {\n const { t } = useTranslation(meta.id);\n const { invokePromise } = useOperationInvoker();\n const schema = Obj.getSchema(subject);\n const label = Obj.getLabel(subject) ?? Obj.getTypename(subject) ?? t('unable to create preview message');\n\n const handleNavigate = useCallback(async () => {\n await invokePromise(LayoutOperation.UpdatePopover, { state: false, anchorId: '' });\n await invokePromise(LayoutOperation.Open, { subject: [Obj.getDXN(subject).toString()] });\n }, [invokePromise, subject]);\n\n const handleSave = useCallback((values: any, { changed }: { changed: Record<string, boolean> }) => {\n const paths = Object.keys(changed).filter((path) => changed[path]);\n Obj.change(subject, () => {\n for (const path of paths) {\n const value = values[path];\n const parts = splitJsonPath(path as JsonPath);\n Obj.setValue(subject, parts, value);\n }\n });\n }, []);\n\n if (!schema) {\n // TODO(burdon): Use Alert.\n return <p className={mx(descriptionMessage)}>{t('unable to create preview message')}</p>;\n }\n\n return (\n <Form.Root schema={omitId(schema)} projection={projection} values={subject} autoSave onSave={handleSave}>\n {/* TODO(burdon): Scrolling issue. Need fixed height. */}\n <Form.Viewport>\n <Form.Content>\n <Form.FieldSet />\n </Form.Content>\n </Form.Viewport>\n </Form.Root>\n );\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport React from 'react';\n\nimport { type SurfaceComponentProps } from '@dxos/app-toolkit/ui';\nimport { Card } from '@dxos/react-ui-mosaic';\nimport { type Organization } from '@dxos/types';\n\nexport const OrganizationCard = ({ subject }: SurfaceComponentProps<Organization.Organization>) => {\n const { image, description, website } = subject;\n\n return (\n <Card.Content>\n <Card.Poster\n alt={name ?? ''}\n {...(image ? { image } : { icon: 'ph--building-office--regular' })}\n classNames={!image && 'opacity-50'}\n />\n {description && (\n <Card.Row>\n <Card.Text variant='description'>{description}</Card.Text>\n </Card.Row>\n )}\n {website && <Card.Link label={website} href={website} />}\n </Card.Content>\n );\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport React from 'react';\n\nimport { type SurfaceComponentProps } from '@dxos/app-toolkit/ui';\nimport { Avatar } from '@dxos/react-ui';\nimport { Card } from '@dxos/react-ui-mosaic';\nimport { type Person } from '@dxos/types';\n\nexport const PersonCard = ({ subject }: SurfaceComponentProps<Person.Person>) => {\n const { image, organization: { target: organization } = {}, emails = [] } = subject;\n\n return (\n <Avatar.Root>\n <Card.Content>\n {image && (\n <Card.Row className='plb-1'>\n <Avatar.Content\n imgSrc={image}\n icon='ph--user--regular'\n size={16}\n classNames={!image && 'opacity-50'}\n hue='neutral'\n variant='square'\n />\n </Card.Row>\n )}\n {organization?.name && (\n <Card.Action\n icon='ph--buildings--regular'\n label={organization.name}\n // onClick={onSelect ? () => onSelect(organization) : undefined}\n />\n )}\n {emails.map(({ value }) => (\n <Card.Row key={value} icon='ph--at--regular'>\n <Card.Text truncate className='text-primaryText'>\n {value}\n </Card.Text>\n </Card.Row>\n ))}\n </Card.Content>\n </Avatar.Root>\n );\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport React from 'react';\n\nimport { type SurfaceComponentProps } from '@dxos/app-toolkit/ui';\nimport { Obj } from '@dxos/echo';\nimport { Card } from '@dxos/react-ui-mosaic';\nimport { type Pipeline } from '@dxos/types';\n\nexport const ProjectCard = ({ subject }: SurfaceComponentProps<Pipeline.Pipeline>) => {\n const { name, image, description } = subject;\n\n return (\n <Card.Content>\n {image && <Card.Poster image={image} alt={Obj.getLabel(subject) ?? ''} aspect='auto' />}\n {/* <CardHeader label={name} subject={subject} db={db} /> */}\n {description && <Card.Text variant='description'>{description}</Card.Text>}\n </Card.Content>\n );\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport * as SchemaAST from 'effect/SchemaAST';\nimport React from 'react';\n\nimport { type SurfaceComponentProps } from '@dxos/app-toolkit/ui';\nimport { type PropertyMetaAnnotation, PropertyMetaAnnotationId } from '@dxos/echo/internal';\nimport { Card } from '@dxos/react-ui-mosaic';\nimport { Task } from '@dxos/types';\n\nexport const TaskCard = ({ subject }: SurfaceComponentProps<Task.Task>) => {\n const { title, status } = subject;\n const statusOption = getActiveStatusOption(status);\n\n return (\n <Card.Content>\n <Card.Heading classNames='min-is-0 flex-1 truncate'>{title}</Card.Heading>\n {statusOption && (\n <span className='dx-tag' data-hue={statusOption.color}>\n {statusOption.title}\n </span>\n )}\n </Card.Content>\n );\n};\n\n// TODO(thure): Should this move upstream as a helper? Is there an easier way to get options?\nconst getActiveStatusOption = (status?: string) => {\n const properties = SchemaAST.getPropertySignatures(Task.Task.ast);\n const statusProperty = properties.find((p) => p.name === 'status');\n const statusMeta = SchemaAST.getAnnotation<PropertyMetaAnnotation>(PropertyMetaAnnotationId)(\n // TODO(thure): Typescript asserts `.type` doesn’t have `.types`, but in runtime it does.\n (statusProperty!.type as any).types[0],\n );\n const options = // TODO(thure): Typescript asserts `statusMeta` doesn’t have `.value`, but in runtime it does.\n (statusMeta as any).value.singleSelect.options as { id: string; title: string; color: string }[];\n return options.find(({ id }) => id === status);\n};\n"],
5
- "mappings": "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",
6
- "names": ["Effect", "React", "Capabilities", "Capability", "Surface", "Obj", "Card", "Organization", "Person", "Pipeline", "Task", "React", "useCallback", "useOperationInvoker", "LayoutOperation", "Obj", "splitJsonPath", "useTranslation", "Form", "omitId", "descriptionMessage", "mx", "FormCard", "subject", "projection", "t", "useTranslation", "meta", "id", "invokePromise", "useOperationInvoker", "schema", "Obj", "getSchema", "label", "getLabel", "getTypename", "handleNavigate", "useCallback", "LayoutOperation", "UpdatePopover", "state", "anchorId", "Open", "getDXN", "toString", "handleSave", "values", "changed", "paths", "Object", "keys", "filter", "path", "change", "value", "parts", "splitJsonPath", "setValue", "p", "className", "mx", "descriptionMessage", "Form", "Root", "omitId", "autoSave", "onSave", "Viewport", "Content", "FieldSet", "React", "Card", "OrganizationCard", "subject", "image", "description", "website", "React", "Card", "Content", "Poster", "alt", "name", "icon", "classNames", "Row", "Text", "variant", "Link", "label", "href", "React", "Avatar", "Card", "PersonCard", "subject", "image", "organization", "target", "emails", "React", "Avatar", "Root", "Card", "Content", "Row", "className", "imgSrc", "icon", "size", "classNames", "hue", "variant", "name", "Action", "label", "map", "value", "key", "Text", "truncate", "React", "Obj", "Card", "ProjectCard", "subject", "name", "image", "description", "React", "Card", "Content", "Poster", "alt", "Obj", "getLabel", "aspect", "Text", "variant", "SchemaAST", "React", "PropertyMetaAnnotationId", "Card", "Task", "TaskCard", "subject", "title", "status", "statusOption", "getActiveStatusOption", "React", "Card", "Content", "Heading", "classNames", "span", "className", "data-hue", "color", "properties", "getPropertySignatures", "Task", "ast", "statusProperty", "find", "p", "name", "statusMeta", "getAnnotation", "PropertyMetaAnnotationId", "type", "types", "options", "value", "singleSelect", "id", "Capability", "makeModule", "succeed", "contributes", "Capabilities", "ReactSurface", "Surface", "create", "id", "meta", "role", "position", "filter", "data", "Obj", "instanceOf", "Person", "subject", "component", "React", "PersonCard", "Organization", "OrganizationCard", "Pipeline", "ProjectCard", "Task", "TaskCard", "isObject", "FormCard", "projection", "div", "className", "Card", "Root", "limit"]
7
- }
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../src/capabilities/react-surface/react-surface.tsx", "../../../src/cards/FormCard.tsx", "../../../src/cards/OrganizationCard.tsx", "../../../src/cards/PersonCard.tsx", "../../../src/cards/ProjectCard.tsx", "../../../src/cards/TaskCard.tsx"],
4
- "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Effect from 'effect/Effect';\nimport React from 'react';\n\nimport { Capabilities, Capability } from '@dxos/app-framework';\nimport { Surface } from '@dxos/app-framework/ui';\nimport { Obj } from '@dxos/echo';\nimport { Card } from '@dxos/react-ui-mosaic';\nimport { type ProjectionModel } from '@dxos/schema';\nimport { Organization, Person, Pipeline, Task } from '@dxos/types';\n\nimport { FormCard, OrganizationCard, PersonCard, ProjectCard, TaskCard } from '../../cards';\nimport { meta } from '../../meta';\n\nexport default Capability.makeModule(() =>\n Effect.succeed(\n Capability.contributes(Capabilities.ReactSurface, [\n //\n // Specific schema types.\n // TODO(burdon): Create helpers and factor out.\n //\n\n Surface.create<{ subject: Person.Person }>({\n id: `${meta.id}/schema-popover--contact`,\n role: 'card--content',\n position: 'hoist',\n filter: (data): data is { subject: Person.Person } => Obj.instanceOf(Person.Person, data.subject),\n component: ({ data, role }) => {\n return <PersonCard role={role} subject={data.subject} />;\n },\n }),\n Surface.create({\n id: `${meta.id}/schema-popover--organization`,\n role: 'card--content',\n position: 'hoist',\n filter: (data): data is { subject: Organization.Organization } =>\n Obj.instanceOf(Organization.Organization, data.subject),\n component: ({ data, role }) => {\n return <OrganizationCard role={role} subject={data.subject} />;\n },\n }),\n Surface.create({\n id: `${meta.id}/schema-popover--project`,\n role: 'card--content',\n position: 'hoist',\n filter: (data): data is { subject: Pipeline.Pipeline } => Obj.instanceOf(Pipeline.Pipeline, data.subject),\n component: ({ data, role }) => {\n return <ProjectCard role={role} subject={data.subject} />;\n },\n }),\n Surface.create({\n id: `${meta.id}/schema-popover--task`,\n role: 'card--content',\n position: 'hoist',\n filter: (data): data is { subject: Task.Task } => Obj.instanceOf(Task.Task, data.subject),\n component: ({ data, role }) => {\n return <TaskCard role={role} subject={data.subject} />;\n },\n }),\n\n //\n // Fallback for any object.\n //\n\n Surface.create({\n id: `${meta.id}/fallback-popover`,\n role: 'card--content',\n position: 'fallback',\n filter: (data): data is { subject: Obj.Unknown; projection?: ProjectionModel } => Obj.isObject(data.subject),\n component: ({ data, role }) => {\n return <FormCard role={role} subject={data.subject} projection={data.projection} />;\n },\n }),\n\n Surface.create({\n id: `${meta.id}/section`,\n role: ['section'],\n position: 'fallback',\n filter: (data): data is { subject: Obj.Unknown } => Obj.isObject(data.subject),\n component: ({ data }) => {\n return (\n <div role='none' className='flex is-full justify-center'>\n <div role='none' className='pbs-2 pbe-2 card-min-width card-max-width'>\n <Card.Root>\n <Surface.Surface role='card--content' data={data} limit={1} />\n </Card.Root>\n </div>\n </div>\n );\n },\n }),\n ]),\n ),\n);\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport React, { useCallback } from 'react';\n\nimport { useOperationInvoker } from '@dxos/app-framework/ui';\nimport { LayoutOperation } from '@dxos/app-toolkit';\nimport { type SurfaceComponentProps } from '@dxos/app-toolkit/ui';\nimport { Obj } from '@dxos/echo';\nimport { type JsonPath, splitJsonPath } from '@dxos/effect';\nimport { useTranslation } from '@dxos/react-ui';\nimport { Form, omitId } from '@dxos/react-ui-form';\nimport { type ProjectionModel } from '@dxos/schema';\nimport { descriptionMessage, mx } from '@dxos/ui-theme';\n\nimport { meta } from '../meta';\n\nexport const FormCard = ({ subject, projection }: SurfaceComponentProps & { projection?: ProjectionModel }) => {\n const { t } = useTranslation(meta.id);\n const { invokePromise } = useOperationInvoker();\n const schema = Obj.getSchema(subject);\n const label = Obj.getLabel(subject) ?? Obj.getTypename(subject) ?? t('unable to create preview message');\n\n const handleNavigate = useCallback(async () => {\n await invokePromise(LayoutOperation.UpdatePopover, { state: false, anchorId: '' });\n await invokePromise(LayoutOperation.Open, { subject: [Obj.getDXN(subject).toString()] });\n }, [invokePromise, subject]);\n\n const handleSave = useCallback((values: any, { changed }: { changed: Record<string, boolean> }) => {\n const paths = Object.keys(changed).filter((path) => changed[path]);\n Obj.change(subject, () => {\n for (const path of paths) {\n const value = values[path];\n const parts = splitJsonPath(path as JsonPath);\n Obj.setValue(subject, parts, value);\n }\n });\n }, []);\n\n if (!schema) {\n // TODO(burdon): Use Alert.\n return <p className={mx(descriptionMessage)}>{t('unable to create preview message')}</p>;\n }\n\n return (\n <Form.Root schema={omitId(schema)} projection={projection} values={subject} autoSave onSave={handleSave}>\n {/* TODO(burdon): Scrolling issue. Need fixed height. */}\n <Form.Viewport>\n <Form.Content>\n <Form.FieldSet />\n </Form.Content>\n </Form.Viewport>\n </Form.Root>\n );\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport React from 'react';\n\nimport { type SurfaceComponentProps } from '@dxos/app-toolkit/ui';\nimport { Card } from '@dxos/react-ui-mosaic';\nimport { type Organization } from '@dxos/types';\n\nexport const OrganizationCard = ({ subject }: SurfaceComponentProps<Organization.Organization>) => {\n const { image, description, website } = subject;\n\n return (\n <Card.Content>\n <Card.Poster\n alt={name ?? ''}\n {...(image ? { image } : { icon: 'ph--building-office--regular' })}\n classNames={!image && 'opacity-50'}\n />\n {description && (\n <Card.Row>\n <Card.Text variant='description'>{description}</Card.Text>\n </Card.Row>\n )}\n {website && <Card.Link label={website} href={website} />}\n </Card.Content>\n );\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport React from 'react';\n\nimport { type SurfaceComponentProps } from '@dxos/app-toolkit/ui';\nimport { Avatar } from '@dxos/react-ui';\nimport { Card } from '@dxos/react-ui-mosaic';\nimport { type Person } from '@dxos/types';\n\nexport const PersonCard = ({ subject }: SurfaceComponentProps<Person.Person>) => {\n const { image, organization: { target: organization } = {}, emails = [] } = subject;\n\n return (\n <Avatar.Root>\n <Card.Content>\n {image && (\n <Card.Row className='plb-1'>\n <Avatar.Content\n imgSrc={image}\n icon='ph--user--regular'\n size={16}\n classNames={!image && 'opacity-50'}\n hue='neutral'\n variant='square'\n />\n </Card.Row>\n )}\n {organization?.name && (\n <Card.Action\n icon='ph--buildings--regular'\n label={organization.name}\n // onClick={onSelect ? () => onSelect(organization) : undefined}\n />\n )}\n {emails.map(({ value }) => (\n <Card.Row key={value} icon='ph--at--regular'>\n <Card.Text truncate className='text-primaryText'>\n {value}\n </Card.Text>\n </Card.Row>\n ))}\n </Card.Content>\n </Avatar.Root>\n );\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport React from 'react';\n\nimport { type SurfaceComponentProps } from '@dxos/app-toolkit/ui';\nimport { Obj } from '@dxos/echo';\nimport { Card } from '@dxos/react-ui-mosaic';\nimport { type Pipeline } from '@dxos/types';\n\nexport const ProjectCard = ({ subject }: SurfaceComponentProps<Pipeline.Pipeline>) => {\n const { name, image, description } = subject;\n\n return (\n <Card.Content>\n {image && <Card.Poster image={image} alt={Obj.getLabel(subject) ?? ''} aspect='auto' />}\n {/* <CardHeader label={name} subject={subject} db={db} /> */}\n {description && <Card.Text variant='description'>{description}</Card.Text>}\n </Card.Content>\n );\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport * as SchemaAST from 'effect/SchemaAST';\nimport React from 'react';\n\nimport { type SurfaceComponentProps } from '@dxos/app-toolkit/ui';\nimport { type PropertyMetaAnnotation, PropertyMetaAnnotationId } from '@dxos/echo/internal';\nimport { Card } from '@dxos/react-ui-mosaic';\nimport { Task } from '@dxos/types';\n\nexport const TaskCard = ({ subject }: SurfaceComponentProps<Task.Task>) => {\n const { title, status } = subject;\n const statusOption = getActiveStatusOption(status);\n\n return (\n <Card.Content>\n <Card.Heading classNames='min-is-0 flex-1 truncate'>{title}</Card.Heading>\n {statusOption && (\n <span className='dx-tag' data-hue={statusOption.color}>\n {statusOption.title}\n </span>\n )}\n </Card.Content>\n );\n};\n\n// TODO(thure): Should this move upstream as a helper? Is there an easier way to get options?\nconst getActiveStatusOption = (status?: string) => {\n const properties = SchemaAST.getPropertySignatures(Task.Task.ast);\n const statusProperty = properties.find((p) => p.name === 'status');\n const statusMeta = SchemaAST.getAnnotation<PropertyMetaAnnotation>(PropertyMetaAnnotationId)(\n // TODO(thure): Typescript asserts `.type` doesn’t have `.types`, but in runtime it does.\n (statusProperty!.type as any).types[0],\n );\n const options = // TODO(thure): Typescript asserts `statusMeta` doesn’t have `.value`, but in runtime it does.\n (statusMeta as any).value.singleSelect.options as { id: string; title: string; color: string }[];\n return options.find(({ id }) => id === status);\n};\n"],
5
- "mappings": "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",
6
- "names": ["Effect", "React", "Capabilities", "Capability", "Surface", "Obj", "Card", "Organization", "Person", "Pipeline", "Task", "React", "useCallback", "useOperationInvoker", "LayoutOperation", "Obj", "splitJsonPath", "useTranslation", "Form", "omitId", "descriptionMessage", "mx", "FormCard", "subject", "projection", "t", "useTranslation", "meta", "id", "invokePromise", "useOperationInvoker", "schema", "Obj", "getSchema", "label", "getLabel", "getTypename", "handleNavigate", "useCallback", "LayoutOperation", "UpdatePopover", "state", "anchorId", "Open", "getDXN", "toString", "handleSave", "values", "changed", "paths", "Object", "keys", "filter", "path", "change", "value", "parts", "splitJsonPath", "setValue", "p", "className", "mx", "descriptionMessage", "Form", "Root", "omitId", "autoSave", "onSave", "Viewport", "Content", "FieldSet", "React", "Card", "OrganizationCard", "subject", "image", "description", "website", "React", "Card", "Content", "Poster", "alt", "name", "icon", "classNames", "Row", "Text", "variant", "Link", "label", "href", "React", "Avatar", "Card", "PersonCard", "subject", "image", "organization", "target", "emails", "React", "Avatar", "Root", "Card", "Content", "Row", "className", "imgSrc", "icon", "size", "classNames", "hue", "variant", "name", "Action", "label", "map", "value", "key", "Text", "truncate", "React", "Obj", "Card", "ProjectCard", "subject", "name", "image", "description", "React", "Card", "Content", "Poster", "alt", "Obj", "getLabel", "aspect", "Text", "variant", "SchemaAST", "React", "PropertyMetaAnnotationId", "Card", "Task", "TaskCard", "subject", "title", "status", "statusOption", "getActiveStatusOption", "React", "Card", "Content", "Heading", "classNames", "span", "className", "data-hue", "color", "properties", "getPropertySignatures", "Task", "ast", "statusProperty", "find", "p", "name", "statusMeta", "getAnnotation", "PropertyMetaAnnotationId", "type", "types", "options", "value", "singleSelect", "id", "Capability", "makeModule", "succeed", "contributes", "Capabilities", "ReactSurface", "Surface", "create", "id", "meta", "role", "position", "filter", "data", "Obj", "instanceOf", "Person", "subject", "component", "React", "PersonCard", "Organization", "OrganizationCard", "Pipeline", "ProjectCard", "Task", "TaskCard", "isObject", "FormCard", "projection", "div", "className", "Card", "Root", "limit"]
7
- }