@dxos/plugin-preview 0.8.4-main.3c1ae3b → 0.8.4-main.3fbcb4aa9b

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 (119) hide show
  1. package/dist/lib/neutral/PreviewPlugin.mjs +9 -0
  2. package/dist/lib/neutral/PreviewPlugin.mjs.map +7 -0
  3. package/dist/lib/neutral/PreviewPlugin.node.mjs +17 -0
  4. package/dist/lib/neutral/PreviewPlugin.node.mjs.map +7 -0
  5. package/dist/lib/neutral/capabilities/index.mjs +9 -0
  6. package/dist/lib/neutral/capabilities/index.mjs.map +7 -0
  7. package/dist/lib/neutral/chunk-3SWUVHXJ.mjs +28 -0
  8. package/dist/lib/neutral/chunk-3SWUVHXJ.mjs.map +7 -0
  9. package/dist/lib/{browser/chunk-CEWM5LJG.mjs → neutral/chunk-52UEVZSF.mjs} +2 -2
  10. package/dist/lib/neutral/chunk-52UEVZSF.mjs.map +7 -0
  11. package/dist/lib/neutral/index.mjs +7 -0
  12. package/dist/lib/neutral/index.mjs.map +7 -0
  13. package/dist/lib/neutral/meta.json +1 -0
  14. package/dist/lib/neutral/meta.mjs +7 -0
  15. package/dist/lib/neutral/meta.mjs.map +7 -0
  16. package/dist/lib/neutral/plugin.mjs +11 -0
  17. package/dist/lib/neutral/plugin.mjs.map +7 -0
  18. package/dist/lib/neutral/preview-popover-MPPEMUIA.mjs +78 -0
  19. package/dist/lib/neutral/preview-popover-MPPEMUIA.mjs.map +7 -0
  20. package/dist/lib/neutral/react-surface-YFFJXXPQ.mjs +348 -0
  21. package/dist/lib/neutral/react-surface-YFFJXXPQ.mjs.map +7 -0
  22. package/dist/lib/neutral/testing.mjs +7 -0
  23. package/dist/lib/neutral/testing.mjs.map +7 -0
  24. package/dist/lib/neutral/translations.mjs +21 -0
  25. package/dist/lib/neutral/translations.mjs.map +7 -0
  26. package/dist/types/src/PreviewPlugin.d.ts +3 -1
  27. package/dist/types/src/PreviewPlugin.d.ts.map +1 -1
  28. package/dist/types/src/PreviewPlugin.node.d.ts +4 -0
  29. package/dist/types/src/PreviewPlugin.node.d.ts.map +1 -0
  30. package/dist/types/src/PreviewPlugin.test.d.ts +2 -0
  31. package/dist/types/src/PreviewPlugin.test.d.ts.map +1 -0
  32. package/dist/types/src/capabilities/index.d.ts +3 -2
  33. package/dist/types/src/capabilities/index.d.ts.map +1 -1
  34. package/dist/types/src/capabilities/preview-popover.d.ts +3 -2
  35. package/dist/types/src/capabilities/preview-popover.d.ts.map +1 -1
  36. package/dist/types/src/capabilities/react-surface.d.ts +3 -2
  37. package/dist/types/src/capabilities/react-surface.d.ts.map +1 -1
  38. package/dist/types/src/cards/ExpandoCard.d.ts +4 -0
  39. package/dist/types/src/cards/ExpandoCard.d.ts.map +1 -0
  40. package/dist/types/src/cards/FormCard.d.ts +2 -3
  41. package/dist/types/src/cards/FormCard.d.ts.map +1 -1
  42. package/dist/types/src/cards/JsonCard.d.ts +5 -0
  43. package/dist/types/src/cards/JsonCard.d.ts.map +1 -0
  44. package/dist/types/src/cards/OrganizationCard.d.ts +2 -2
  45. package/dist/types/src/cards/OrganizationCard.d.ts.map +1 -1
  46. package/dist/types/src/cards/PersonCard.d.ts +2 -2
  47. package/dist/types/src/cards/PersonCard.d.ts.map +1 -1
  48. package/dist/types/src/cards/ProjectCard.d.ts +3 -3
  49. package/dist/types/src/cards/ProjectCard.d.ts.map +1 -1
  50. package/dist/types/src/cards/TaskCard.d.ts +2 -2
  51. package/dist/types/src/cards/TaskCard.d.ts.map +1 -1
  52. package/dist/types/src/cards/index.d.ts +2 -0
  53. package/dist/types/src/cards/index.d.ts.map +1 -1
  54. package/dist/types/src/index.d.ts +0 -2
  55. package/dist/types/src/index.d.ts.map +1 -1
  56. package/dist/types/src/meta.d.ts +2 -2
  57. package/dist/types/src/meta.d.ts.map +1 -1
  58. package/dist/types/src/plugin.d.ts +3 -0
  59. package/dist/types/src/plugin.d.ts.map +1 -0
  60. package/dist/types/src/stories/Card.stories.d.ts +23 -14
  61. package/dist/types/src/stories/Card.stories.d.ts.map +1 -1
  62. package/dist/types/src/stories/testing.d.ts +15 -12
  63. package/dist/types/src/stories/testing.d.ts.map +1 -1
  64. package/dist/types/src/testing.d.ts +2 -0
  65. package/dist/types/src/testing.d.ts.map +1 -0
  66. package/dist/types/src/translations.d.ts +8 -9
  67. package/dist/types/src/translations.d.ts.map +1 -1
  68. package/dist/types/tsconfig.tsbuildinfo +1 -1
  69. package/package.json +87 -39
  70. package/src/PreviewPlugin.node.ts +16 -0
  71. package/src/PreviewPlugin.test.ts +25 -0
  72. package/src/PreviewPlugin.tsx +16 -25
  73. package/src/capabilities/index.ts +3 -3
  74. package/src/capabilities/preview-popover.ts +68 -41
  75. package/src/capabilities/react-surface.tsx +104 -108
  76. package/src/cards/ExpandoCard.tsx +76 -0
  77. package/src/cards/FormCard.tsx +23 -32
  78. package/src/cards/JsonCard.tsx +19 -0
  79. package/src/cards/OrganizationCard.tsx +11 -16
  80. package/src/cards/PersonCard.tsx +51 -49
  81. package/src/cards/ProjectCard.tsx +9 -11
  82. package/src/cards/TaskCard.tsx +24 -26
  83. package/src/cards/index.ts +2 -0
  84. package/src/index.ts +0 -3
  85. package/src/meta.ts +3 -3
  86. package/src/plugin.ts +9 -0
  87. package/src/stories/Card.stories.tsx +83 -24
  88. package/src/stories/testing.tsx +64 -83
  89. package/src/testing.ts +7 -0
  90. package/src/translations.ts +8 -8
  91. package/dist/lib/browser/chunk-CEWM5LJG.mjs.map +0 -7
  92. package/dist/lib/browser/index.mjs +0 -64
  93. package/dist/lib/browser/index.mjs.map +0 -7
  94. package/dist/lib/browser/meta.json +0 -1
  95. package/dist/lib/browser/preview-popover-4QZ2WDE6.mjs +0 -65
  96. package/dist/lib/browser/preview-popover-4QZ2WDE6.mjs.map +0 -7
  97. package/dist/lib/browser/react-surface-4AKVMPIJ.mjs +0 -513
  98. package/dist/lib/browser/react-surface-4AKVMPIJ.mjs.map +0 -7
  99. package/dist/lib/node-esm/chunk-Q5MUNELK.mjs +0 -19
  100. package/dist/lib/node-esm/chunk-Q5MUNELK.mjs.map +0 -7
  101. package/dist/lib/node-esm/index.mjs +0 -65
  102. package/dist/lib/node-esm/index.mjs.map +0 -7
  103. package/dist/lib/node-esm/meta.json +0 -1
  104. package/dist/lib/node-esm/preview-popover-FJ2ARIGS.mjs +0 -67
  105. package/dist/lib/node-esm/preview-popover-FJ2ARIGS.mjs.map +0 -7
  106. package/dist/lib/node-esm/react-surface-ZJ4C32OR.mjs +0 -514
  107. package/dist/lib/node-esm/react-surface-ZJ4C32OR.mjs.map +0 -7
  108. package/dist/types/src/components/CardComponents.d.ts +0 -16
  109. package/dist/types/src/components/CardComponents.d.ts.map +0 -1
  110. package/dist/types/src/components/CardSubjectMenu.d.ts +0 -8
  111. package/dist/types/src/components/CardSubjectMenu.d.ts.map +0 -1
  112. package/dist/types/src/components/index.d.ts +0 -3
  113. package/dist/types/src/components/index.d.ts.map +0 -1
  114. package/dist/types/src/types.d.ts +0 -12
  115. package/dist/types/src/types.d.ts.map +0 -1
  116. package/src/components/CardComponents.tsx +0 -67
  117. package/src/components/CardSubjectMenu.tsx +0 -103
  118. package/src/components/index.ts +0 -6
  119. package/src/types.ts +0 -25
@@ -2,119 +2,100 @@
2
2
  // Copyright 2025 DXOS.org
3
3
  //
4
4
 
5
- import React, { type FC } from 'react';
5
+ import React, { type FC, useMemo } from 'react';
6
6
 
7
+ import { type AppSurface } from '@dxos/app-toolkit/ui';
7
8
  import { Obj, Ref } from '@dxos/echo';
8
- import { faker } from '@dxos/random';
9
- import { CardContainer } from '@dxos/react-ui-stack/testing';
10
- import { Organization, Person, Task } from '@dxos/types';
11
- import { Project } from '@dxos/types';
9
+ import { random } from '@dxos/random';
10
+ import { Card } from '@dxos/react-ui';
11
+ import { CardContainer, type CardContainerProps } from '@dxos/react-ui-mosaic/testing';
12
+ import { Expando } from '@dxos/schema';
13
+ import { Organization, Person, Pipeline, Task } from '@dxos/types';
12
14
 
13
- import { FormCard, OrganizationCard, PersonCard, ProjectCard, TaskCard } from '../cards';
14
- import { type CardPreviewProps } from '../types';
15
-
16
- type CardProps<T extends Obj.Any> = {
17
- Component: FC<CardPreviewProps<T>>;
18
- subject: T;
19
- icon?: string;
15
+ export type DefaultStoryProps<T extends Obj.Any> = {
16
+ Component: FC<AppSurface.ObjectCardProps<T>>;
17
+ createObject: () => T;
20
18
  image?: boolean;
21
19
  };
22
20
 
23
- export type DefaultstoryProps = {
24
- role: 'card--popover' | 'card--intrinsic' | 'card--extrinsic' | 'card--transclusion';
25
- cards: CardProps<any>[];
26
- };
21
+ export const DefaultStory = <T extends Obj.Any>({ Component, createObject, image }: DefaultStoryProps<T>) => {
22
+ const object = useMemo(() => createObject(), [createObject]);
23
+ const roles: CardContainerProps['role'][] = ['intrinsic', 'popover'];
27
24
 
28
- export const Defaultstory = ({ role, cards }: DefaultstoryProps) => {
29
25
  return (
30
- <div className='flex bs-full'>
31
- <div className='flex shrink-0 gap-8 overflow-x-auto pbe-4'>
32
- {cards.map(({ Component, icon, image, subject }, i) => (
33
- <div key={i} className='flex is-[24rem] justify-center'>
34
- <CardContainer icon={icon} role={role}>
35
- <Component role={role} subject={image ? subject : omitImage(subject)} />
26
+ <div className='h-full w-full grid grid-cols-2 py-16 gap-8'>
27
+ {roles.map((role, i) => (
28
+ <div key={i} className='flex h-full justify-center overflow-hidden'>
29
+ <div className='flex flex-col gap-4 w-full items-center'>
30
+ <span className='text-sm text-description'>{role}</span>
31
+ <CardContainer role={role}>
32
+ <Card.Root border={false}>
33
+ <Card.Toolbar>
34
+ <Card.DragHandle />
35
+ <Card.Title>{Obj.getLabel(object)}</Card.Title>
36
+ <Card.Menu />
37
+ </Card.Toolbar>
38
+ <Component role={role ?? 'card--content'} subject={image ? object : omitImage(object)} />
39
+ </Card.Root>
36
40
  </CardContainer>
37
41
  </div>
38
- ))}
39
- </div>
42
+ </div>
43
+ ))}
40
44
  </div>
41
45
  );
42
46
  };
43
47
 
44
48
  export const omitImage = ({ image: _, ...rest }: any) => rest;
45
49
 
46
- // TODO(burdon): Test data should exercise the standard data generators.
47
- export const createCards = (image = true): CardProps<any>[] => {
48
- const organization = Obj.make(Organization.Organization, {
49
- name: faker.company.name(),
50
+ /**
51
+ * Factory functions for creating test objects at render time.
52
+ */
53
+ export const createOrganization = (): Organization.Organization => {
54
+ return Obj.make(Organization.Organization, {
55
+ name: random.company.name(),
50
56
  image:
51
57
  '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',
52
- website: faker.internet.url(),
53
- description: faker.lorem.paragraph(),
58
+ website: random.internet.url(),
59
+ description: random.lorem.paragraph(),
54
60
  });
61
+ };
55
62
 
56
- const contact = Obj.make(Person.Person, {
57
- fullName: faker.person.fullName(),
63
+ export const createPerson = (): Person.Person => {
64
+ const organization = createOrganization();
65
+ return Obj.make(Person.Person, {
66
+ fullName: random.person.fullName(),
58
67
  image:
59
68
  'https://plus.unsplash.com/premium_photo-1664536392779-049ba8fde933?q=80&w=2574&auto=format&fit=crop&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D',
60
69
  organization: Ref.make(organization),
61
70
  emails: [
62
- {
63
- label: 'Work',
64
- value: faker.internet.email(),
65
- },
66
- {
67
- label: 'Work',
68
- value: faker.internet.email(),
69
- },
70
- {
71
- label: 'Work',
72
- value: faker.internet.email(),
73
- },
71
+ { label: 'Work', value: random.internet.email() },
72
+ { label: 'Work', value: random.internet.email() },
73
+ { label: 'Work', value: random.internet.email() },
74
74
  ],
75
75
  });
76
+ };
76
77
 
77
- const project = Project.make({
78
- name: faker.person.fullName(),
78
+ export const createProject = (): Pipeline.Pipeline => {
79
+ return Obj.make(Pipeline.Pipeline, {
80
+ name: random.person.fullName(),
79
81
  image: 'https://dxos.network/dxos-logotype-blue.png',
80
- description: faker.lorem.paragraph(),
82
+ description: random.lorem.paragraph(),
83
+ columns: [],
81
84
  });
85
+ };
82
86
 
83
- const task = Obj.make(Task.Task, {
84
- title: faker.lorem.sentence(),
85
- status: faker.helpers.arrayElement(['todo', 'in-progress', 'done']),
87
+ export const createTask = (): Task.Task => {
88
+ return Obj.make(Task.Task, {
89
+ title: random.lorem.sentence(),
90
+ status: random.helpers.arrayElement(['todo', 'in-progress', 'done'] as const),
86
91
  });
92
+ };
87
93
 
88
- return [
89
- {
90
- Component: OrganizationCard,
91
- subject: organization,
92
- icon: 'ph--building-office--regular',
93
- image,
94
- },
95
- {
96
- Component: PersonCard,
97
- subject: contact,
98
- icon: 'ph--user--regular',
99
- image,
100
- },
101
- {
102
- Component: ProjectCard,
103
- subject: project,
104
- icon: 'ph--building--regular',
105
- image,
106
- },
107
- {
108
- Component: TaskCard,
109
- subject: task,
110
- icon: 'ph--list-checks--regular',
111
- image,
112
- },
113
- {
114
- Component: FormCard,
115
- subject: contact,
116
- icon: 'ph--user--regular',
117
- image,
118
- },
119
- ];
94
+ export const createExpando = (): Expando.Expando => {
95
+ return Expando.make({
96
+ name: random.person.fullName(),
97
+ email: random.internet.email(),
98
+ age: random.number.int({ min: 18, max: 80 }),
99
+ active: random.datatype.boolean(),
100
+ });
120
101
  };
package/src/testing.ts ADDED
@@ -0,0 +1,7 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ // Eager re-export of `PreviewPlugin`. See `@dxos/plugin-testing/src/core.ts`
6
+ // for the rationale.
7
+ export * from './PreviewPlugin';
@@ -4,19 +4,19 @@
4
4
 
5
5
  import { type Resource } from '@dxos/react-ui';
6
6
 
7
- import { meta } from './meta';
7
+ import { meta } from '#meta';
8
8
 
9
9
  export const translations = [
10
10
  {
11
11
  'en-US': {
12
12
  [meta.id]: {
13
- 'unable to create preview message': 'No preview',
14
- 'todo label': 'To do',
15
- 'in-progress label': 'In progress',
16
- 'done label': 'Done',
17
- 'open object label': 'Open',
18
- 'add object to space label': 'Add to space',
19
- 'more options label': 'More options',
13
+ 'unable-to-create-preview.message': 'No preview',
14
+ 'todo.label': 'To do',
15
+ 'in-progress.label': 'In progress',
16
+ 'done.label': 'Done',
17
+ 'open-object.label': 'Open',
18
+ 'add-object-to-space.label': 'Add to space',
19
+ 'more-options.label': 'More options',
20
20
  },
21
21
  },
22
22
  },
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../src/meta.ts"],
4
- "sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport { type PluginMeta } from '@dxos/app-framework';\nimport { trim } from '@dxos/util';\n\nexport const meta: PluginMeta = {\n id: 'dxos.org/plugin/preview',\n name: 'Preview',\n description: trim`\n Rich preview panel for viewing object content without opening full editors.\n Quick peek at documents, images, and data with inline rendering.\n `,\n icon: 'ph--eye--regular',\n source: 'https://github.com/dxos/dxos/tree/main/packages/plugins/plugin-preview',\n};\n"],
5
- "mappings": ";AAKA,SAASA,YAAY;AAEd,IAAMC,OAAmB;EAC9BC,IAAI;EACJC,MAAM;EACNC,aAAaC;;;;EAIbC,MAAM;EACNC,QAAQ;AACV;",
6
- "names": ["trim", "meta", "id", "name", "description", "trim", "icon", "source"]
7
- }
@@ -1,64 +0,0 @@
1
- import {
2
- meta
3
- } from "./chunk-CEWM5LJG.mjs";
4
-
5
- // src/PreviewPlugin.tsx
6
- import { Capabilities, Events, contributes, defineModule, definePlugin } from "@dxos/app-framework";
7
- import { ClientCapabilities, ClientEvents } from "@dxos/plugin-client";
8
- import { Organization, Person } from "@dxos/types";
9
-
10
- // src/capabilities/index.ts
11
- import { lazy } from "@dxos/app-framework";
12
- var PreviewPopover = lazy(() => import("./preview-popover-4QZ2WDE6.mjs"));
13
- var ReactSurface = lazy(() => import("./react-surface-4AKVMPIJ.mjs"));
14
-
15
- // src/translations.ts
16
- var translations = [
17
- {
18
- "en-US": {
19
- [meta.id]: {
20
- "unable to create preview message": "No preview",
21
- "todo label": "To do",
22
- "in-progress label": "In progress",
23
- "done label": "Done",
24
- "open object label": "Open",
25
- "add object to space label": "Add to space",
26
- "more options label": "More options"
27
- }
28
- }
29
- }
30
- ];
31
-
32
- // src/PreviewPlugin.tsx
33
- var PreviewPlugin = definePlugin(meta, () => [
34
- defineModule({
35
- id: `${meta.id}/module/translations`,
36
- activatesOn: Events.SetupTranslations,
37
- activate: () => contributes(Capabilities.Translations, translations)
38
- }),
39
- defineModule({
40
- id: `${meta.id}/module/schema`,
41
- activatesOn: ClientEvents.SetupSchema,
42
- activate: () => [
43
- contributes(ClientCapabilities.Schema, [
44
- Person.Person,
45
- Organization.Organization
46
- ])
47
- ]
48
- }),
49
- defineModule({
50
- id: `${meta.id}/module/preview-popover`,
51
- activatesOn: Events.Startup,
52
- activate: PreviewPopover
53
- }),
54
- defineModule({
55
- id: `${meta.id}/module/react-surface`,
56
- activatesOn: Events.SetupReactSurface,
57
- activate: ReactSurface
58
- })
59
- ]);
60
- export {
61
- PreviewPlugin,
62
- meta
63
- };
64
- //# sourceMappingURL=index.mjs.map
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../src/PreviewPlugin.tsx", "../../../src/capabilities/index.ts", "../../../src/translations.ts"],
4
- "sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport { Capabilities, Events, contributes, defineModule, definePlugin } from '@dxos/app-framework';\nimport { ClientCapabilities, ClientEvents } from '@dxos/plugin-client';\nimport { Organization, Person } from '@dxos/types';\n\nimport { PreviewPopover, ReactSurface } from './capabilities';\nimport { meta } from './meta';\nimport { translations } from './translations';\n\nexport const PreviewPlugin = definePlugin(meta, () => [\n defineModule({\n id: `${meta.id}/module/translations`,\n activatesOn: Events.SetupTranslations,\n activate: () => contributes(Capabilities.Translations, translations),\n }),\n defineModule({\n id: `${meta.id}/module/schema`,\n activatesOn: ClientEvents.SetupSchema,\n activate: () => [contributes(ClientCapabilities.Schema, [Person.Person, Organization.Organization])],\n }),\n defineModule({\n id: `${meta.id}/module/preview-popover`,\n activatesOn: Events.Startup,\n activate: PreviewPopover,\n }),\n defineModule({\n id: `${meta.id}/module/react-surface`,\n activatesOn: Events.SetupReactSurface,\n activate: ReactSurface,\n }),\n]);\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { lazy } from '@dxos/app-framework';\n\nexport const PreviewPopover = lazy(() => import('./preview-popover'));\nexport const ReactSurface = lazy(() => import('./react-surface'));\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { type Resource } from '@dxos/react-ui';\n\nimport { meta } from './meta';\n\nexport const translations = [\n {\n 'en-US': {\n [meta.id]: {\n 'unable to create preview message': 'No preview',\n 'todo label': 'To do',\n 'in-progress label': 'In progress',\n 'done label': 'Done',\n 'open object label': 'Open',\n 'add object to space label': 'Add to space',\n 'more options label': 'More options',\n },\n },\n },\n] as const satisfies Resource[];\n"],
5
- "mappings": ";;;;;AAIA,SAASA,cAAcC,QAAQC,aAAaC,cAAcC,oBAAoB;AAC9E,SAASC,oBAAoBC,oBAAoB;AACjD,SAASC,cAAcC,cAAc;;;ACFrC,SAASC,YAAY;AAEd,IAAMC,iBAAiBC,KAAK,MAAM,OAAO,gCAAA,CAAA;AACzC,IAAMC,eAAeD,KAAK,MAAM,OAAO,8BAAA,CAAA;;;ACCvC,IAAME,eAAe;EAC1B;IACE,SAAS;MACP,CAACC,KAAKC,EAAE,GAAG;QACT,oCAAoC;QACpC,cAAc;QACd,qBAAqB;QACrB,cAAc;QACd,qBAAqB;QACrB,6BAA6B;QAC7B,sBAAsB;MACxB;IACF;EACF;;;;AFTK,IAAMC,gBAAgBC,aAAaC,MAAM,MAAM;EACpDC,aAAa;IACXC,IAAI,GAAGF,KAAKE,EAAE;IACdC,aAAaC,OAAOC;IACpBC,UAAU,MAAMC,YAAYC,aAAaC,cAAcC,YAAAA;EACzD,CAAA;EACAT,aAAa;IACXC,IAAI,GAAGF,KAAKE,EAAE;IACdC,aAAaQ,aAAaC;IAC1BN,UAAU,MAAM;MAACC,YAAYM,mBAAmBC,QAAQ;QAACC,OAAOA;QAAQC,aAAaA;OAAa;;EACpG,CAAA;EACAf,aAAa;IACXC,IAAI,GAAGF,KAAKE,EAAE;IACdC,aAAaC,OAAOa;IACpBX,UAAUY;EACZ,CAAA;EACAjB,aAAa;IACXC,IAAI,GAAGF,KAAKE,EAAE;IACdC,aAAaC,OAAOe;IACpBb,UAAUc;EACZ,CAAA;CACD;",
6
- "names": ["Capabilities", "Events", "contributes", "defineModule", "definePlugin", "ClientCapabilities", "ClientEvents", "Organization", "Person", "lazy", "PreviewPopover", "lazy", "ReactSurface", "translations", "meta", "id", "PreviewPlugin", "definePlugin", "meta", "defineModule", "id", "activatesOn", "Events", "SetupTranslations", "activate", "contributes", "Capabilities", "Translations", "translations", "ClientEvents", "SetupSchema", "ClientCapabilities", "Schema", "Person", "Organization", "Startup", "PreviewPopover", "SetupReactSurface", "ReactSurface"]
7
- }
@@ -1 +0,0 @@
1
- {"inputs":{"src/meta.ts":{"bytes":1677,"imports":[{"path":"@dxos/util","kind":"import-statement","external":true}],"format":"esm"},"src/capabilities/preview-popover.ts":{"bytes":8293,"imports":[{"path":"@dxos/app-framework","kind":"import-statement","external":true},{"path":"@dxos/async","kind":"import-statement","external":true},{"path":"@dxos/client/echo","kind":"import-statement","external":true},{"path":"@dxos/keys","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"@dxos/plugin-client","kind":"import-statement","external":true},{"path":"@dxos/react-ui","kind":"import-statement","external":true}],"format":"esm"},"src/cards/FormCard.tsx":{"bytes":6377,"imports":[{"path":"@preact-signals/safe-react/tracking","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/echo","kind":"import-statement","external":true},{"path":"@dxos/echo/internal","kind":"import-statement","external":true},{"path":"@dxos/react-ui","kind":"import-statement","external":true},{"path":"@dxos/react-ui-form","kind":"import-statement","external":true},{"path":"@dxos/react-ui-stack","kind":"import-statement","external":true},{"path":"@dxos/react-ui-theme","kind":"import-statement","external":true},{"path":"src/meta.ts","kind":"import-statement","original":"../meta"}],"format":"esm"},"src/components/CardSubjectMenu.tsx":{"bytes":10479,"imports":[{"path":"@preact-signals/safe-react/tracking","kind":"import-statement","external":true},{"path":"@effect-atom/atom-react","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/app-framework","kind":"import-statement","external":true},{"path":"@dxos/app-framework/react","kind":"import-statement","external":true},{"path":"@dxos/app-graph","kind":"import-statement","external":true},{"path":"@dxos/echo","kind":"import-statement","external":true},{"path":"@dxos/plugin-space/types","kind":"import-statement","external":true},{"path":"@dxos/react-ui","kind":"import-statement","external":true},{"path":"@dxos/react-ui-menu","kind":"import-statement","external":true},{"path":"src/meta.ts","kind":"import-statement","original":"../meta"}],"format":"esm"},"src/components/CardComponents.tsx":{"bytes":8374,"imports":[{"path":"@preact-signals/safe-react/tracking","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/react-ui","kind":"import-statement","external":true},{"path":"@dxos/react-ui-stack","kind":"import-statement","external":true},{"path":"@dxos/react-ui-theme","kind":"import-statement","external":true},{"path":"src/components/CardSubjectMenu.tsx","kind":"import-statement","original":"./CardSubjectMenu"}],"format":"esm"},"src/components/index.ts":{"bytes":594,"imports":[{"path":"src/components/CardComponents.tsx","kind":"import-statement","original":"./CardComponents"},{"path":"src/components/CardSubjectMenu.tsx","kind":"import-statement","original":"./CardSubjectMenu"}],"format":"esm"},"src/cards/OrganizationCard.tsx":{"bytes":4009,"imports":[{"path":"@preact-signals/safe-react/tracking","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/react-ui-stack","kind":"import-statement","external":true},{"path":"src/components/index.ts","kind":"import-statement","original":"../components"}],"format":"esm"},"src/cards/PersonCard.tsx":{"bytes":8439,"imports":[{"path":"@preact-signals/safe-react/tracking","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/react-ui","kind":"import-statement","external":true},{"path":"@dxos/react-ui-stack","kind":"import-statement","external":true},{"path":"@dxos/react-ui-theme","kind":"import-statement","external":true},{"path":"src/components/index.ts","kind":"import-statement","original":"../components"}],"format":"esm"},"src/cards/ProjectCard.tsx":{"bytes":3350,"imports":[{"path":"@preact-signals/safe-react/tracking","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/echo","kind":"import-statement","external":true},{"path":"@dxos/react-ui-stack","kind":"import-statement","external":true},{"path":"src/components/index.ts","kind":"import-statement","original":"../components"}],"format":"esm"},"src/cards/TaskCard.tsx":{"bytes":7022,"imports":[{"path":"@preact-signals/safe-react/tracking","kind":"import-statement","external":true},{"path":"effect/SchemaAST","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/echo/internal","kind":"import-statement","external":true},{"path":"@dxos/react-ui-stack","kind":"import-statement","external":true},{"path":"@dxos/react-ui-theme","kind":"import-statement","external":true},{"path":"@dxos/types","kind":"import-statement","external":true},{"path":"src/components/index.ts","kind":"import-statement","original":"../components"}],"format":"esm"},"src/cards/index.ts":{"bytes":853,"imports":[{"path":"src/cards/FormCard.tsx","kind":"import-statement","original":"./FormCard"},{"path":"src/cards/OrganizationCard.tsx","kind":"import-statement","original":"./OrganizationCard"},{"path":"src/cards/PersonCard.tsx","kind":"import-statement","original":"./PersonCard"},{"path":"src/cards/ProjectCard.tsx","kind":"import-statement","original":"./ProjectCard"},{"path":"src/cards/TaskCard.tsx","kind":"import-statement","original":"./TaskCard"}],"format":"esm"},"src/capabilities/react-surface.tsx":{"bytes":16183,"imports":[{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/app-framework","kind":"import-statement","external":true},{"path":"@dxos/app-framework/react","kind":"import-statement","external":true},{"path":"@dxos/client/echo","kind":"import-statement","external":true},{"path":"@dxos/echo","kind":"import-statement","external":true},{"path":"@dxos/plugin-space","kind":"import-statement","external":true},{"path":"@dxos/types","kind":"import-statement","external":true},{"path":"src/cards/index.ts","kind":"import-statement","original":"../cards"},{"path":"src/meta.ts","kind":"import-statement","original":"../meta"}],"format":"esm"},"src/capabilities/index.ts":{"bytes":1037,"imports":[{"path":"@dxos/app-framework","kind":"import-statement","external":true},{"path":"src/capabilities/preview-popover.ts","kind":"dynamic-import","original":"./preview-popover"},{"path":"src/capabilities/react-surface.tsx","kind":"dynamic-import","original":"./react-surface"}],"format":"esm"},"src/translations.ts":{"bytes":1903,"imports":[{"path":"src/meta.ts","kind":"import-statement","original":"./meta"}],"format":"esm"},"src/PreviewPlugin.tsx":{"bytes":4712,"imports":[{"path":"@dxos/app-framework","kind":"import-statement","external":true},{"path":"@dxos/plugin-client","kind":"import-statement","external":true},{"path":"@dxos/types","kind":"import-statement","external":true},{"path":"src/capabilities/index.ts","kind":"import-statement","original":"./capabilities"},{"path":"src/meta.ts","kind":"import-statement","original":"./meta"},{"path":"src/translations.ts","kind":"import-statement","original":"./translations"}],"format":"esm"},"src/index.ts":{"bytes":595,"imports":[{"path":"src/meta.ts","kind":"import-statement","original":"./meta"},{"path":"src/PreviewPlugin.tsx","kind":"import-statement","original":"./PreviewPlugin"}],"format":"esm"}},"outputs":{"dist/lib/browser/index.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":3519},"dist/lib/browser/index.mjs":{"imports":[{"path":"dist/lib/browser/chunk-CEWM5LJG.mjs","kind":"import-statement"},{"path":"@dxos/app-framework","kind":"import-statement","external":true},{"path":"@dxos/plugin-client","kind":"import-statement","external":true},{"path":"@dxos/types","kind":"import-statement","external":true},{"path":"@dxos/app-framework","kind":"import-statement","external":true},{"path":"dist/lib/browser/preview-popover-4QZ2WDE6.mjs","kind":"dynamic-import"},{"path":"dist/lib/browser/react-surface-4AKVMPIJ.mjs","kind":"dynamic-import"}],"exports":["PreviewPlugin","meta"],"entryPoint":"src/index.ts","inputs":{"src/index.ts":{"bytesInOutput":0},"src/PreviewPlugin.tsx":{"bytesInOutput":965},"src/capabilities/index.ts":{"bytesInOutput":190},"src/translations.ts":{"bytesInOutput":378}},"bytes":1757},"dist/lib/browser/preview-popover-4QZ2WDE6.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":4349},"dist/lib/browser/preview-popover-4QZ2WDE6.mjs":{"imports":[{"path":"@dxos/app-framework","kind":"import-statement","external":true},{"path":"@dxos/async","kind":"import-statement","external":true},{"path":"@dxos/client/echo","kind":"import-statement","external":true},{"path":"@dxos/keys","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"@dxos/plugin-client","kind":"import-statement","external":true},{"path":"@dxos/react-ui","kind":"import-statement","external":true}],"exports":["default"],"entryPoint":"src/capabilities/preview-popover.ts","inputs":{"src/capabilities/preview-popover.ts":{"bytesInOutput":2001}},"bytes":2143},"dist/lib/browser/react-surface-4AKVMPIJ.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":31696},"dist/lib/browser/react-surface-4AKVMPIJ.mjs":{"imports":[{"path":"dist/lib/browser/chunk-CEWM5LJG.mjs","kind":"import-statement"},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/app-framework","kind":"import-statement","external":true},{"path":"@dxos/app-framework/react","kind":"import-statement","external":true},{"path":"@dxos/client/echo","kind":"import-statement","external":true},{"path":"@dxos/echo","kind":"import-statement","external":true},{"path":"@dxos/plugin-space","kind":"import-statement","external":true},{"path":"@dxos/types","kind":"import-statement","external":true},{"path":"@preact-signals/safe-react/tracking","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/echo","kind":"import-statement","external":true},{"path":"@dxos/echo/internal","kind":"import-statement","external":true},{"path":"@dxos/react-ui","kind":"import-statement","external":true},{"path":"@dxos/react-ui-form","kind":"import-statement","external":true},{"path":"@dxos/react-ui-stack","kind":"import-statement","external":true},{"path":"@dxos/react-ui-theme","kind":"import-statement","external":true},{"path":"@preact-signals/safe-react/tracking","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/react-ui-stack","kind":"import-statement","external":true},{"path":"@preact-signals/safe-react/tracking","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/react-ui","kind":"import-statement","external":true},{"path":"@dxos/react-ui-stack","kind":"import-statement","external":true},{"path":"@dxos/react-ui-theme","kind":"import-statement","external":true},{"path":"@preact-signals/safe-react/tracking","kind":"import-statement","external":true},{"path":"@effect-atom/atom-react","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/app-framework","kind":"import-statement","external":true},{"path":"@dxos/app-framework/react","kind":"import-statement","external":true},{"path":"@dxos/app-graph","kind":"import-statement","external":true},{"path":"@dxos/echo","kind":"import-statement","external":true},{"path":"@dxos/plugin-space/types","kind":"import-statement","external":true},{"path":"@dxos/react-ui","kind":"import-statement","external":true},{"path":"@dxos/react-ui-menu","kind":"import-statement","external":true},{"path":"@preact-signals/safe-react/tracking","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/react-ui","kind":"import-statement","external":true},{"path":"@dxos/react-ui-stack","kind":"import-statement","external":true},{"path":"@dxos/react-ui-theme","kind":"import-statement","external":true},{"path":"@preact-signals/safe-react/tracking","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/echo","kind":"import-statement","external":true},{"path":"@dxos/react-ui-stack","kind":"import-statement","external":true},{"path":"@preact-signals/safe-react/tracking","kind":"import-statement","external":true},{"path":"effect/SchemaAST","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/echo/internal","kind":"import-statement","external":true},{"path":"@dxos/react-ui-stack","kind":"import-statement","external":true},{"path":"@dxos/react-ui-theme","kind":"import-statement","external":true},{"path":"@dxos/types","kind":"import-statement","external":true}],"exports":["default"],"entryPoint":"src/capabilities/react-surface.tsx","inputs":{"src/capabilities/react-surface.tsx":{"bytesInOutput":3981},"src/cards/FormCard.tsx":{"bytesInOutput":1605},"src/cards/index.ts":{"bytesInOutput":0},"src/cards/OrganizationCard.tsx":{"bytesInOutput":1057},"src/components/CardComponents.tsx":{"bytesInOutput":2688},"src/components/CardSubjectMenu.tsx":{"bytesInOutput":2657},"src/components/index.ts":{"bytesInOutput":0},"src/cards/PersonCard.tsx":{"bytesInOutput":2466},"src/cards/ProjectCard.tsx":{"bytesInOutput":876},"src/cards/TaskCard.tsx":{"bytesInOutput":1800}},"bytes":17652},"dist/lib/browser/chunk-CEWM5LJG.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":803},"dist/lib/browser/chunk-CEWM5LJG.mjs":{"imports":[{"path":"@dxos/util","kind":"import-statement","external":true}],"exports":["meta"],"inputs":{"src/meta.ts":{"bytesInOutput":389}},"bytes":468}}}
@@ -1,65 +0,0 @@
1
- // src/capabilities/preview-popover.ts
2
- import { Capabilities, LayoutAction, contributes, createIntent } from "@dxos/app-framework";
3
- import { addEventListener } from "@dxos/async";
4
- import { parseId } from "@dxos/client/echo";
5
- import { DXN } from "@dxos/keys";
6
- import { log } from "@dxos/log";
7
- import { ClientCapabilities } from "@dxos/plugin-client";
8
- import { DX_ANCHOR_ACTIVATE } from "@dxos/react-ui";
9
- var __dxlog_file = "/__w/dxos/dxos/packages/plugins/plugin-preview/src/capabilities/preview-popover.ts";
10
- var customEventOptions = {
11
- capture: true,
12
- passive: false
13
- };
14
- var handlePreviewLookup = async (client, defaultSpace, { ref, label }) => {
15
- try {
16
- const object = await defaultSpace.db.makeRef(DXN.parse(ref)).load();
17
- return {
18
- label,
19
- object
20
- };
21
- } catch {
22
- return null;
23
- }
24
- };
25
- var preview_popover_default = ((context) => {
26
- const handleAnchorActivate = async ({ refId, label, trigger }) => {
27
- const { dispatchPromise: dispatch } = context.getCapability(Capabilities.IntentDispatcher);
28
- const client = context.getCapability(ClientCapabilities.Client);
29
- const [layout] = context.getCapabilities(Capabilities.Layout);
30
- const { spaceId } = parseId(layout.workspace);
31
- const space = (spaceId && client.spaces.get(spaceId)) ?? client.spaces.default;
32
- const result = await handlePreviewLookup(client, space, {
33
- ref: refId,
34
- label
35
- });
36
- if (!result) {
37
- return;
38
- }
39
- await dispatch(createIntent(LayoutAction.UpdatePopover, {
40
- part: "popover",
41
- subject: result.object,
42
- options: {
43
- state: true,
44
- variant: "virtual",
45
- anchor: trigger
46
- }
47
- }));
48
- };
49
- let cleanup;
50
- if (document.defaultView) {
51
- cleanup = addEventListener(document.defaultView, DX_ANCHOR_ACTIVATE, handleAnchorActivate, customEventOptions);
52
- } else {
53
- log.warn("No default view found", void 0, {
54
- F: __dxlog_file,
55
- L: 65,
56
- S: void 0,
57
- C: (f, a) => f(...a)
58
- });
59
- }
60
- return contributes(Capabilities.Null, null, () => cleanup());
61
- });
62
- export {
63
- preview_popover_default as default
64
- };
65
- //# sourceMappingURL=preview-popover-4QZ2WDE6.mjs.map
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../src/capabilities/preview-popover.ts"],
4
- "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport { Capabilities, LayoutAction, type PluginContext, contributes, createIntent } from '@dxos/app-framework';\nimport { addEventListener } from '@dxos/async';\nimport { type Client } from '@dxos/client';\nimport { type Space, parseId } from '@dxos/client/echo';\nimport { DXN } from '@dxos/keys';\nimport { log } from '@dxos/log';\nimport { ClientCapabilities } from '@dxos/plugin-client';\nimport { DX_ANCHOR_ACTIVATE, type DxAnchorActivate } from '@dxos/react-ui';\nimport { type PreviewLinkRef, type PreviewLinkTarget } from '@dxos/react-ui-editor';\n\nconst customEventOptions = { capture: true, passive: false };\n\nconst handlePreviewLookup = async (\n client: Client,\n defaultSpace: Space,\n { ref, label }: PreviewLinkRef,\n): Promise<PreviewLinkTarget | null> => {\n try {\n const object = await defaultSpace.db.makeRef(DXN.parse(ref)).load();\n return { label, object };\n } catch {\n return null;\n }\n};\n\nexport default (context: PluginContext) => {\n // TODO(wittjosiah): Factor out lookup handlers to other plugins to make not ECHO-specific.\n const handleAnchorActivate = async ({ refId, label, trigger }: DxAnchorActivate) => {\n const { dispatchPromise: dispatch } = context.getCapability(Capabilities.IntentDispatcher);\n const client = context.getCapability(ClientCapabilities.Client);\n const [layout] = context.getCapabilities(Capabilities.Layout);\n const { spaceId } = parseId(layout.workspace);\n const space = (spaceId && client.spaces.get(spaceId)) ?? client.spaces.default;\n const result = await handlePreviewLookup(client, space, { ref: refId, label });\n if (!result) {\n return;\n }\n\n await dispatch(\n createIntent(LayoutAction.UpdatePopover, {\n part: 'popover',\n subject: result.object,\n options: {\n state: true,\n variant: 'virtual',\n anchor: trigger,\n },\n }),\n );\n };\n\n let cleanup: () => void;\n if (document.defaultView) {\n cleanup = addEventListener(\n document.defaultView,\n DX_ANCHOR_ACTIVATE as any,\n handleAnchorActivate,\n customEventOptions,\n );\n } else {\n log.warn('No default view found');\n }\n\n return contributes(Capabilities.Null, null, () => cleanup());\n};\n"],
5
- "mappings": ";AAIA,SAASA,cAAcC,cAAkCC,aAAaC,oBAAoB;AAC1F,SAASC,wBAAwB;AAEjC,SAAqBC,eAAe;AACpC,SAASC,WAAW;AACpB,SAASC,WAAW;AACpB,SAASC,0BAA0B;AACnC,SAASC,0BAAiD;;AAG1D,IAAMC,qBAAqB;EAAEC,SAAS;EAAMC,SAAS;AAAM;AAE3D,IAAMC,sBAAsB,OAC1BC,QACAC,cACA,EAAEC,KAAKC,MAAK,MAAkB;AAE9B,MAAI;AACF,UAAMC,SAAS,MAAMH,aAAaI,GAAGC,QAAQd,IAAIe,MAAML,GAAAA,CAAAA,EAAMM,KAAI;AACjE,WAAO;MAAEL;MAAOC;IAAO;EACzB,QAAQ;AACN,WAAO;EACT;AACF;AAEA,IAAA,2BAAe,CAACK,YAAAA;AAEd,QAAMC,uBAAuB,OAAO,EAAEC,OAAOR,OAAOS,QAAO,MAAoB;AAC7E,UAAM,EAAEC,iBAAiBC,SAAQ,IAAKL,QAAQM,cAAc7B,aAAa8B,gBAAgB;AACzF,UAAMhB,SAASS,QAAQM,cAAcrB,mBAAmBuB,MAAM;AAC9D,UAAM,CAACC,MAAAA,IAAUT,QAAQU,gBAAgBjC,aAAakC,MAAM;AAC5D,UAAM,EAAEC,QAAO,IAAK9B,QAAQ2B,OAAOI,SAAS;AAC5C,UAAMC,SAASF,WAAWrB,OAAOwB,OAAOC,IAAIJ,OAAAA,MAAarB,OAAOwB,OAAOE;AACvE,UAAMC,SAAS,MAAM5B,oBAAoBC,QAAQuB,OAAO;MAAErB,KAAKS;MAAOR;IAAM,CAAA;AAC5E,QAAI,CAACwB,QAAQ;AACX;IACF;AAEA,UAAMb,SACJzB,aAAaF,aAAayC,eAAe;MACvCC,MAAM;MACNC,SAASH,OAAOvB;MAChB2B,SAAS;QACPC,OAAO;QACPC,SAAS;QACTC,QAAQtB;MACV;IACF,CAAA,CAAA;EAEJ;AAEA,MAAIuB;AACJ,MAAIC,SAASC,aAAa;AACxBF,cAAU7C,iBACR8C,SAASC,aACT1C,oBACAe,sBACAd,kBAAAA;EAEJ,OAAO;AACLH,QAAI6C,KAAK,yBAAA,QAAA;;;;;;EACX;AAEA,SAAOlD,YAAYF,aAAaqD,MAAM,MAAM,MAAMJ,QAAAA,CAAAA;AACpD;",
6
- "names": ["Capabilities", "LayoutAction", "contributes", "createIntent", "addEventListener", "parseId", "DXN", "log", "ClientCapabilities", "DX_ANCHOR_ACTIVATE", "customEventOptions", "capture", "passive", "handlePreviewLookup", "client", "defaultSpace", "ref", "label", "object", "db", "makeRef", "parse", "load", "context", "handleAnchorActivate", "refId", "trigger", "dispatchPromise", "dispatch", "getCapability", "IntentDispatcher", "Client", "layout", "getCapabilities", "Layout", "spaceId", "workspace", "space", "spaces", "get", "default", "result", "UpdatePopover", "part", "subject", "options", "state", "variant", "anchor", "cleanup", "document", "defaultView", "warn", "Null"]
7
- }