@dxos/plugin-preview 0.8.2-main.f081794 → 0.8.2-main.f11618f

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 (36) hide show
  1. package/dist/lib/browser/index.mjs +289 -6
  2. package/dist/lib/browser/index.mjs.map +4 -4
  3. package/dist/lib/browser/meta.json +1 -1
  4. package/dist/lib/node/index.cjs +291 -4
  5. package/dist/lib/node/index.cjs.map +4 -4
  6. package/dist/lib/node/meta.json +1 -1
  7. package/dist/lib/node-esm/index.mjs +289 -6
  8. package/dist/lib/node-esm/index.mjs.map +4 -4
  9. package/dist/lib/node-esm/meta.json +1 -1
  10. package/dist/types/src/Preview.stories.d.ts +197 -0
  11. package/dist/types/src/Preview.stories.d.ts.map +1 -0
  12. package/dist/types/src/PreviewPlugin.d.ts.map +1 -1
  13. package/dist/types/src/components/ContactCard.d.ts +7 -0
  14. package/dist/types/src/components/ContactCard.d.ts.map +1 -0
  15. package/dist/types/src/components/OrganizationCard.d.ts +5 -0
  16. package/dist/types/src/components/OrganizationCard.d.ts.map +1 -0
  17. package/dist/types/src/components/ProjectCard.d.ts +5 -0
  18. package/dist/types/src/components/ProjectCard.d.ts.map +1 -0
  19. package/dist/types/src/components/index.d.ts +4 -0
  20. package/dist/types/src/components/index.d.ts.map +1 -0
  21. package/dist/types/src/index.d.ts +1 -0
  22. package/dist/types/src/index.d.ts.map +1 -1
  23. package/dist/types/src/translations.d.ts +9 -0
  24. package/dist/types/src/translations.d.ts.map +1 -0
  25. package/dist/types/src/types.d.ts +25 -0
  26. package/dist/types/src/types.d.ts.map +1 -0
  27. package/package.json +21 -10
  28. package/src/Preview.stories.tsx +139 -0
  29. package/src/PreviewPlugin.tsx +135 -9
  30. package/src/components/ContactCard.tsx +70 -0
  31. package/src/components/OrganizationCard.tsx +42 -0
  32. package/src/components/ProjectCard.tsx +20 -0
  33. package/src/components/index.ts +7 -0
  34. package/src/index.ts +2 -0
  35. package/src/translations.ts +15 -0
  36. package/src/types.ts +40 -0
@@ -7,14 +7,162 @@ var meta = {
7
7
  source: "https://github.com/dxos/dxos/tree/main/packages/plugins/plugin-preview"
8
8
  };
9
9
 
10
+ // packages/plugins/plugin-preview/src/types.ts
11
+ var popoverCard = "popover-consistent-width rounded-lg overflow-hidden";
12
+ var defaultCard = "";
13
+ var kanbanCardWithoutPoster = "pbs-[--rail-action]";
14
+ var previewTitle = "text-lg font-medium line-clamp-2";
15
+ var previewProse = "pli-3 mlb-3";
16
+ var previewChrome = "pli-1.5 mlb-1.5 [&_.dx-button]:pli-1.5 [&_.dx-button]:text-start [&_.dx-button]:is-full";
17
+
10
18
  // packages/plugins/plugin-preview/src/PreviewPlugin.tsx
11
- import { createIntent, Capabilities, contributes, Events, defineModule, definePlugin, LayoutAction } from "@dxos/app-framework";
19
+ import React4, { useCallback } from "react";
20
+ import { Capabilities, Events, LayoutAction, Surface, contributes, createIntent, createSurface, defineModule, definePlugin, useIntentDispatcher } from "@dxos/app-framework";
12
21
  import { addEventListener } from "@dxos/async";
13
22
  import { resolveRef } from "@dxos/client";
14
- import { parseId } from "@dxos/client/echo";
23
+ import { Filter, fullyQualifiedId, getSchema, getSpace, isEchoObject, parseId } from "@dxos/client/echo";
24
+ import { isInstanceOf } from "@dxos/echo-schema";
15
25
  import { DXN } from "@dxos/keys";
16
26
  import { log } from "@dxos/log";
17
- import { ClientCapabilities } from "@dxos/plugin-client";
27
+ import { ClientCapabilities, ClientEvents } from "@dxos/plugin-client";
28
+ import { useTranslation } from "@dxos/react-ui";
29
+ import { Form } from "@dxos/react-ui-form";
30
+ import { TableType } from "@dxos/react-ui-table";
31
+ import { descriptionMessage } from "@dxos/react-ui-theme";
32
+ import { Contact, Organization, Project } from "@dxos/schema";
33
+
34
+ // packages/plugins/plugin-preview/src/components/ContactCard.tsx
35
+ import React, { Fragment } from "react";
36
+ import { Icon, Avatar, Button } from "@dxos/react-ui";
37
+ import { mx } from "@dxos/react-ui-theme";
38
+ var ContactCard = ({ children, classNames, role, subject: { fullName, image, organization, emails }, onOrgClick }) => {
39
+ const organizationName = organization && typeof organization === "object" ? organization.target?.name : organization;
40
+ return /* @__PURE__ */ React.createElement("div", {
41
+ role: "none",
42
+ className: mx(role === "popover" ? popoverCard : defaultCard, classNames)
43
+ }, /* @__PURE__ */ React.createElement(Avatar.Root, null, /* @__PURE__ */ React.createElement("div", {
44
+ role: "group",
45
+ className: mx(previewProse, "grid gap-3 grid-cols-[min-content_1fr]")
46
+ }, /* @__PURE__ */ React.createElement(Avatar.Content, {
47
+ imgSrc: image,
48
+ icon: "ph--user--regular",
49
+ size: 16,
50
+ hue: "neutral"
51
+ }), /* @__PURE__ */ React.createElement("div", {
52
+ role: "none",
53
+ className: "bs-min self-center"
54
+ }, /* @__PURE__ */ React.createElement(Avatar.Label, {
55
+ asChild: true
56
+ }, /* @__PURE__ */ React.createElement("h2", {
57
+ className: previewTitle
58
+ }, fullName))))), organizationName && /* @__PURE__ */ React.createElement("div", {
59
+ role: "none",
60
+ className: previewChrome
61
+ }, typeof organization === "object" && onOrgClick ? /* @__PURE__ */ React.createElement(Button, {
62
+ variant: "ghost",
63
+ classNames: "gap-2 text-start",
64
+ onClick: () => onOrgClick(organization.target)
65
+ }, /* @__PURE__ */ React.createElement(Icon, {
66
+ icon: "ph--buildings--regular",
67
+ size: 5,
68
+ classNames: "text-subdued"
69
+ }), /* @__PURE__ */ React.createElement("span", {
70
+ className: "min-is-0 flex-1 truncate"
71
+ }, organizationName), /* @__PURE__ */ React.createElement(Icon, {
72
+ icon: "ph--arrow-right--regular"
73
+ })) : /* @__PURE__ */ React.createElement("p", {
74
+ className: "dx-button gap-2",
75
+ "data-variant": "ghost"
76
+ }, /* @__PURE__ */ React.createElement(Icon, {
77
+ icon: "ph--buildings--regular",
78
+ size: 5,
79
+ classNames: "text-subdued"
80
+ }), /* @__PURE__ */ React.createElement("span", {
81
+ className: "min-is-0 flex-1 truncate"
82
+ }, organizationName))), /* @__PURE__ */ React.createElement("dl", {
83
+ className: mx(previewProse, "grid gap-2 grid-cols-[min-content_1fr] [&_dt]:text-subdued [&_dt]:pbs-0.5 [&_dd]:min-is-0")
84
+ }, emails?.length && emails.map(({ label, value }) => /* @__PURE__ */ React.createElement(Fragment, {
85
+ key: value
86
+ }, /* @__PURE__ */ React.createElement("dt", null, /* @__PURE__ */ React.createElement(Icon, {
87
+ icon: "ph--at--regular",
88
+ size: 5
89
+ })), /* @__PURE__ */ React.createElement("dd", {
90
+ key: value,
91
+ className: "break-words"
92
+ }, value)))), children);
93
+ };
94
+
95
+ // packages/plugins/plugin-preview/src/components/OrganizationCard.tsx
96
+ import React2 from "react";
97
+ import { Icon as Icon2 } from "@dxos/react-ui";
98
+ import { mx as mx2 } from "@dxos/react-ui-theme";
99
+ var OrganizationCard = ({ children, classNames, subject: { name, image, description, website }, role }) => {
100
+ return /* @__PURE__ */ React2.createElement("div", {
101
+ role: "none",
102
+ className: mx2(role === "popover" ? popoverCard : defaultCard, classNames)
103
+ }, image ? /* @__PURE__ */ React2.createElement("img", {
104
+ className: "aspect-video object-cover is-full bs-auto",
105
+ src: image,
106
+ alt: name
107
+ }) : /* @__PURE__ */ React2.createElement("div", {
108
+ role: "image",
109
+ className: "grid aspect-video place-items-center bg-input text-subdued"
110
+ }, /* @__PURE__ */ React2.createElement(Icon2, {
111
+ icon: "ph--building-office--regular",
112
+ size: 10
113
+ })), /* @__PURE__ */ React2.createElement("h2", {
114
+ className: mx2(previewTitle, previewProse)
115
+ }, name), description && /* @__PURE__ */ React2.createElement("p", {
116
+ className: mx2(previewProse, "line-clamp-2")
117
+ }, description), website && /* @__PURE__ */ React2.createElement("div", {
118
+ role: "none",
119
+ className: previewChrome
120
+ }, /* @__PURE__ */ React2.createElement("a", {
121
+ className: "dx-button dx-focus-ring gap-2",
122
+ href: website,
123
+ target: "_blank",
124
+ rel: "noreferrer"
125
+ }, /* @__PURE__ */ React2.createElement(Icon2, {
126
+ icon: "ph--link--regular",
127
+ size: 5,
128
+ classNames: "text-subdued"
129
+ }), /* @__PURE__ */ React2.createElement("span", {
130
+ className: "grow"
131
+ }, website), /* @__PURE__ */ React2.createElement(Icon2, {
132
+ icon: "ph--arrow-square-out--regular"
133
+ }))), children);
134
+ };
135
+
136
+ // packages/plugins/plugin-preview/src/components/ProjectCard.tsx
137
+ import React3 from "react";
138
+ import { mx as mx3 } from "@dxos/react-ui-theme";
139
+ var ProjectCard = ({ classNames, role, subject: { name, image, description } }) => {
140
+ return /* @__PURE__ */ React3.createElement("div", {
141
+ role: "none",
142
+ className: mx3(role === "popover" ? popoverCard : defaultCard, classNames)
143
+ }, image && /* @__PURE__ */ React3.createElement("img", {
144
+ className: "is-full bs-auto",
145
+ src: image,
146
+ alt: name
147
+ }), /* @__PURE__ */ React3.createElement("h2", {
148
+ className: mx3(previewTitle, "pli-3 mlb-3")
149
+ }, name), description && /* @__PURE__ */ React3.createElement("p", {
150
+ className: "pli-3 line-clamp-2 mlb-3"
151
+ }, description));
152
+ };
153
+
154
+ // packages/plugins/plugin-preview/src/translations.ts
155
+ var translations_default = [
156
+ {
157
+ "en-US": {
158
+ [PREVIEW_PLUGIN]: {
159
+ "unable to create preview message": "No preview"
160
+ }
161
+ }
162
+ }
163
+ ];
164
+
165
+ // packages/plugins/plugin-preview/src/PreviewPlugin.tsx
18
166
  var __dxlog_file = "/home/runner/work/dxos/dxos/packages/plugins/plugin-preview/src/PreviewPlugin.tsx";
19
167
  var customEventOptions = {
20
168
  capture: true,
@@ -33,7 +181,22 @@ var handlePreviewLookup = async (client, defaultSpace, { ref, label }) => {
33
181
  };
34
182
  var PreviewPlugin = () => definePlugin(meta, [
35
183
  defineModule({
36
- id: `${meta.id}/module/preview-popoevr`,
184
+ id: `${meta.id}/module/translations`,
185
+ activatesOn: Events.SetupTranslations,
186
+ activate: () => contributes(Capabilities.Translations, translations_default)
187
+ }),
188
+ defineModule({
189
+ id: `${meta.id}/module/schema`,
190
+ activatesOn: ClientEvents.SetupSchema,
191
+ activate: () => [
192
+ contributes(ClientCapabilities.Schema, [
193
+ Contact,
194
+ Organization
195
+ ])
196
+ ]
197
+ }),
198
+ defineModule({
199
+ id: `${meta.id}/module/preview-popover`,
37
200
  activatesOn: Events.Startup,
38
201
  activate: (context) => {
39
202
  const handleDxRefTagActivate = async ({ ref, label, trigger }) => {
@@ -62,7 +225,7 @@ var PreviewPlugin = () => definePlugin(meta, [
62
225
  if (!document.defaultView) {
63
226
  log.warn("No default view found", void 0, {
64
227
  F: __dxlog_file,
65
- L: 74,
228
+ L: 106,
66
229
  S: void 0,
67
230
  C: (f, a) => f(...a)
68
231
  });
@@ -71,11 +234,131 @@ var PreviewPlugin = () => definePlugin(meta, [
71
234
  const cleanup = addEventListener(document.defaultView, "dx-ref-tag-activate", handleDxRefTagActivate, customEventOptions);
72
235
  return contributes(Capabilities.Null, null, () => cleanup());
73
236
  }
237
+ }),
238
+ defineModule({
239
+ id: `${meta.id}/module/react-surface`,
240
+ activatesOn: Events.SetupReactSurface,
241
+ activate: () => (
242
+ // TODO(wittjosiah): Factor out to lazy capabilities like other plugins.
243
+ contributes(Capabilities.ReactSurface, [
244
+ //
245
+ // Specific schema types.
246
+ //
247
+ createSurface({
248
+ id: `${PREVIEW_PLUGIN}/schema-popover`,
249
+ role: [
250
+ "popover",
251
+ "card--kanban"
252
+ ],
253
+ filter: (data) => isInstanceOf(Contact, data.subject),
254
+ component: ({ data, role }) => {
255
+ const { dispatchPromise: dispatch } = useIntentDispatcher();
256
+ const handleOrgClick = useCallback(async (org) => {
257
+ const space = getSpace(org);
258
+ const tablesQuery = await space?.db.query(Filter.schema(TableType)).run();
259
+ const currentSpaceOrgTable = tablesQuery?.objects.find((table) => {
260
+ return table.view?.target?.query?.typename === Organization.typename;
261
+ });
262
+ await dispatch(createIntent(LayoutAction.UpdatePopover, {
263
+ part: "popover",
264
+ options: {
265
+ state: false,
266
+ anchorId: ""
267
+ }
268
+ }));
269
+ if (currentSpaceOrgTable) {
270
+ return dispatch(createIntent(LayoutAction.Open, {
271
+ part: "main",
272
+ subject: [
273
+ fullyQualifiedId(currentSpaceOrgTable)
274
+ ],
275
+ options: {
276
+ workspace: space?.id
277
+ }
278
+ }));
279
+ }
280
+ }, [
281
+ dispatch
282
+ ]);
283
+ return /* @__PURE__ */ React4.createElement(ContactCard, {
284
+ subject: data.subject,
285
+ onOrgClick: handleOrgClick,
286
+ role
287
+ }, role === "popover" && /* @__PURE__ */ React4.createElement(Surface, {
288
+ role: "related",
289
+ data
290
+ }));
291
+ }
292
+ }),
293
+ createSurface({
294
+ id: `${PREVIEW_PLUGIN}/schema-popover`,
295
+ role: [
296
+ "popover",
297
+ "card--kanban"
298
+ ],
299
+ filter: (data) => isInstanceOf(Organization, data.subject),
300
+ component: ({ data, role }) => /* @__PURE__ */ React4.createElement(OrganizationCard, {
301
+ subject: data.subject,
302
+ role
303
+ }, role === "popover" && /* @__PURE__ */ React4.createElement(Surface, {
304
+ role: "related",
305
+ data
306
+ }))
307
+ }),
308
+ createSurface({
309
+ id: `${PREVIEW_PLUGIN}/schema-popover`,
310
+ role: [
311
+ "popover",
312
+ "card--kanban"
313
+ ],
314
+ filter: (data) => isInstanceOf(Project, data.subject),
315
+ component: ({ data, role }) => /* @__PURE__ */ React4.createElement(ProjectCard, {
316
+ subject: data.subject,
317
+ role
318
+ })
319
+ }),
320
+ //
321
+ // Fallback for any object.
322
+ //
323
+ createSurface({
324
+ id: `${PREVIEW_PLUGIN}/fallback-popover`,
325
+ role: [
326
+ "popover",
327
+ "card--kanban"
328
+ ],
329
+ position: "fallback",
330
+ filter: (data) => isEchoObject(data.subject),
331
+ component: ({ data, role }) => {
332
+ const schema = getSchema(data.subject);
333
+ const { t } = useTranslation(PREVIEW_PLUGIN);
334
+ if (!schema) {
335
+ return /* @__PURE__ */ React4.createElement("p", {
336
+ className: descriptionMessage
337
+ }, t("unable to create preview message"));
338
+ }
339
+ return /* @__PURE__ */ React4.createElement(Form, {
340
+ schema,
341
+ values: data.subject,
342
+ readonly: true,
343
+ ...role === "card--kanban" && {
344
+ classNames: kanbanCardWithoutPoster
345
+ }
346
+ });
347
+ }
348
+ })
349
+ ])
350
+ )
74
351
  })
75
352
  ]);
76
353
  export {
77
354
  PREVIEW_PLUGIN,
78
355
  PreviewPlugin,
79
- meta
356
+ defaultCard,
357
+ kanbanCardWithoutPoster,
358
+ meta,
359
+ popoverCard,
360
+ previewChrome,
361
+ previewProse,
362
+ previewTitle
80
363
  };
81
364
  //# sourceMappingURL=index.mjs.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
- "sources": ["../../../src/meta.ts", "../../../src/PreviewPlugin.tsx"],
4
- "sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport { type PluginMeta } from '@dxos/app-framework';\n\nexport const PREVIEW_PLUGIN = 'dxos.org/plugin/preview';\n\nexport const meta: PluginMeta = {\n id: PREVIEW_PLUGIN,\n name: 'Preview',\n icon: 'ph--eye--regular',\n source: 'https://github.com/dxos/dxos/tree/main/packages/plugins/plugin-preview',\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport {\n createIntent,\n Capabilities,\n contributes,\n Events,\n defineModule,\n definePlugin,\n LayoutAction,\n} from '@dxos/app-framework';\nimport { addEventListener } from '@dxos/async';\nimport { type Client } from '@dxos/client';\nimport { resolveRef } from '@dxos/client';\nimport { parseId, type Space } from '@dxos/client/echo';\nimport { DXN } from '@dxos/keys';\nimport { type DxRefTagActivate } from '@dxos/lit-ui';\nimport { log } from '@dxos/log';\nimport { ClientCapabilities } from '@dxos/plugin-client';\nimport { type PreviewLinkRef, type PreviewLinkTarget } from '@dxos/react-ui-editor';\n\nimport { meta } from './meta';\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 const dxn = DXN.parse(ref);\n if (!dxn) {\n return null;\n }\n\n const object = await resolveRef(client, dxn, defaultSpace);\n return { label, object };\n};\n\nexport const PreviewPlugin = () =>\n definePlugin(meta, [\n defineModule({\n id: `${meta.id}/module/preview-popoevr`,\n activatesOn: Events.Startup,\n activate: (context) => {\n // TODO(wittjosiah): Factor out lookup handlers to other plugins to make not ECHO-specific.\n const handleDxRefTagActivate = async ({ ref, label, trigger }: DxRefTagActivate) => {\n const { dispatchPromise: dispatch } = context.requestCapability(Capabilities.IntentDispatcher);\n const client = context.requestCapability(ClientCapabilities.Client);\n const [layout] = context.requestCapabilities(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, 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 if (!document.defaultView) {\n log.warn('No default view found');\n return [];\n }\n\n const cleanup = addEventListener(\n document.defaultView,\n 'dx-ref-tag-activate',\n handleDxRefTagActivate,\n customEventOptions,\n );\n return contributes(Capabilities.Null, null, () => cleanup());\n },\n }),\n ]);\n"],
5
- "mappings": ";AAMO,IAAMA,iBAAiB;AAEvB,IAAMC,OAAmB;EAC9BC,IAAIF;EACJG,MAAM;EACNC,MAAM;EACNC,QAAQ;AACV;;;ACTA,SACEC,cACAC,cACAC,aACAC,QACAC,cACAC,cACAC,oBACK;AACP,SAASC,wBAAwB;AAEjC,SAASC,kBAAkB;AAC3B,SAASC,eAA2B;AACpC,SAASC,WAAW;AAEpB,SAASC,WAAW;AACpB,SAASC,0BAA0B;;AAKnC,IAAMC,qBAAqB;EAAEC,SAAS;EAAMC,SAAS;AAAM;AAE3D,IAAMC,sBAAsB,OAC1BC,QACAC,cACA,EAAEC,KAAKC,MAAK,MAAkB;AAE9B,QAAMC,MAAMC,IAAIC,MAAMJ,GAAAA;AACtB,MAAI,CAACE,KAAK;AACR,WAAO;EACT;AAEA,QAAMG,SAAS,MAAMC,WAAWR,QAAQI,KAAKH,YAAAA;AAC7C,SAAO;IAAEE;IAAOI;EAAO;AACzB;AAEO,IAAME,gBAAgB,MAC3BC,aAAaC,MAAM;EACjBC,aAAa;IACXC,IAAI,GAAGF,KAAKE,EAAE;IACdC,aAAaC,OAAOC;IACpBC,UAAU,CAACC,YAAAA;AAET,YAAMC,yBAAyB,OAAO,EAAEjB,KAAKC,OAAOiB,QAAO,MAAoB;AAC7E,cAAM,EAAEC,iBAAiBC,SAAQ,IAAKJ,QAAQK,kBAAkBC,aAAaC,gBAAgB;AAC7F,cAAMzB,SAASkB,QAAQK,kBAAkBG,mBAAmBC,MAAM;AAClE,cAAM,CAACC,MAAAA,IAAUV,QAAQW,oBAAoBL,aAAaM,MAAM;AAChE,cAAM,EAAEC,QAAO,IAAKC,QAAQJ,OAAOK,SAAS;AAC5C,cAAMC,SAASH,WAAW/B,OAAOmC,OAAOC,IAAIL,OAAAA,MAAa/B,OAAOmC,OAAOE;AACvE,cAAMC,SAAS,MAAMvC,oBAAoBC,QAAQkC,OAAO;UAAEhC;UAAKC;QAAM,CAAA;AACrE,YAAI,CAACmC,QAAQ;AACX;QACF;AAEA,cAAMhB,SACJiB,aAAaC,aAAaC,eAAe;UACvCC,MAAM;UACNC,SAASL,OAAO/B;UAChBqC,SAAS;YACPC,OAAO;YACPC,SAAS;YACTC,QAAQ3B;UACV;QACF,CAAA,CAAA;MAEJ;AAEA,UAAI,CAAC4B,SAASC,aAAa;AACzBC,YAAIC,KAAK,yBAAA,QAAA;;;;;;AACT,eAAO,CAAA;MACT;AAEA,YAAMC,UAAUC,iBACdL,SAASC,aACT,uBACA9B,wBACAvB,kBAAAA;AAEF,aAAO0D,YAAY9B,aAAa+B,MAAM,MAAM,MAAMH,QAAAA,CAAAA;IACpD;EACF,CAAA;CACD;",
6
- "names": ["PREVIEW_PLUGIN", "meta", "id", "name", "icon", "source", "createIntent", "Capabilities", "contributes", "Events", "defineModule", "definePlugin", "LayoutAction", "addEventListener", "resolveRef", "parseId", "DXN", "log", "ClientCapabilities", "customEventOptions", "capture", "passive", "handlePreviewLookup", "client", "defaultSpace", "ref", "label", "dxn", "DXN", "parse", "object", "resolveRef", "PreviewPlugin", "definePlugin", "meta", "defineModule", "id", "activatesOn", "Events", "Startup", "activate", "context", "handleDxRefTagActivate", "trigger", "dispatchPromise", "dispatch", "requestCapability", "Capabilities", "IntentDispatcher", "ClientCapabilities", "Client", "layout", "requestCapabilities", "Layout", "spaceId", "parseId", "workspace", "space", "spaces", "get", "default", "result", "createIntent", "LayoutAction", "UpdatePopover", "part", "subject", "options", "state", "variant", "anchor", "document", "defaultView", "log", "warn", "cleanup", "addEventListener", "contributes", "Null"]
3
+ "sources": ["../../../src/meta.ts", "../../../src/types.ts", "../../../src/PreviewPlugin.tsx", "../../../src/components/ContactCard.tsx", "../../../src/components/OrganizationCard.tsx", "../../../src/components/ProjectCard.tsx", "../../../src/translations.ts"],
4
+ "sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport { type PluginMeta } from '@dxos/app-framework';\n\nexport const PREVIEW_PLUGIN = 'dxos.org/plugin/preview';\n\nexport const meta: PluginMeta = {\n id: PREVIEW_PLUGIN,\n name: 'Preview',\n icon: 'ph--eye--regular',\n source: 'https://github.com/dxos/dxos/tree/main/packages/plugins/plugin-preview',\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { type PropsWithChildren } from 'react';\n\nimport { type ThemedClassName } from '@dxos/react-ui';\n\n// TODO(burdon): Better place for these defs?\nexport type PreviewProps<T extends object> = PropsWithChildren<\n ThemedClassName<{\n subject: T;\n role: string;\n }>\n>;\n\n// TODO(burdon): Update react-ui-card (to use grid) and re-use here.\n// - See https://dxos-storybook.pages.dev/?path=/story/ui-react-ui-card-card--draggable\n// - Standardize Header, actions, image, body, etc.\n// - Support different grid layouts (e.g., image to the side, on top, etc.)\n// - Should co-exist naturally with react-ui-form (e.g., as main content).\n// - Considerations for drag-and-drop.\n/**\n * <Card.Root>\n * <Card.Header>\n * <Card.Title>\n * <Card.Action>\n * </Card.Header>\n * <Card.Body>\n * <Card.Image>\n * <Form />\n * </Card.Body>\n * </Card.Root>\n */\nexport const popoverCard = 'popover-consistent-width rounded-lg overflow-hidden';\nexport const defaultCard = '';\nexport const kanbanCardWithoutPoster = 'pbs-[--rail-action]';\nexport const previewTitle = 'text-lg font-medium line-clamp-2';\nexport const previewProse = 'pli-3 mlb-3';\nexport const previewChrome = 'pli-1.5 mlb-1.5 [&_.dx-button]:pli-1.5 [&_.dx-button]:text-start [&_.dx-button]:is-full';\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport React, { useCallback } from 'react';\n\nimport {\n Capabilities,\n Events,\n LayoutAction,\n Surface,\n contributes,\n createIntent,\n createSurface,\n defineModule,\n definePlugin,\n useIntentDispatcher,\n} from '@dxos/app-framework';\nimport { addEventListener } from '@dxos/async';\nimport { type Client, resolveRef } from '@dxos/client';\nimport {\n Filter,\n fullyQualifiedId,\n getSchema,\n getSpace,\n isEchoObject,\n parseId,\n type ReactiveEchoObject,\n type Space,\n} from '@dxos/client/echo';\nimport { isInstanceOf } from '@dxos/echo-schema';\nimport { DXN } from '@dxos/keys';\nimport { type DxRefTagActivate } from '@dxos/lit-ui';\nimport { log } from '@dxos/log';\nimport { ClientCapabilities, ClientEvents } from '@dxos/plugin-client';\nimport { useTranslation } from '@dxos/react-ui';\nimport { type PreviewLinkRef, type PreviewLinkTarget } from '@dxos/react-ui-editor';\nimport { Form } from '@dxos/react-ui-form';\nimport { TableType } from '@dxos/react-ui-table';\nimport { descriptionMessage } from '@dxos/react-ui-theme';\nimport { Contact, Organization, Project } from '@dxos/schema';\n\nimport { ContactCard, OrganizationCard, ProjectCard } from './components';\nimport { meta, PREVIEW_PLUGIN } from './meta';\nimport translations from './translations';\nimport { kanbanCardWithoutPoster } from './types';\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 const dxn = DXN.parse(ref);\n if (!dxn) {\n return null;\n }\n\n const object = await resolveRef(client, dxn, defaultSpace);\n return { label, object };\n};\n\nexport const PreviewPlugin = () =>\n 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, [Contact, Organization])],\n }),\n defineModule({\n id: `${meta.id}/module/preview-popover`,\n activatesOn: Events.Startup,\n activate: (context) => {\n // TODO(wittjosiah): Factor out lookup handlers to other plugins to make not ECHO-specific.\n const handleDxRefTagActivate = async ({ ref, label, trigger }: DxRefTagActivate) => {\n const { dispatchPromise: dispatch } = context.requestCapability(Capabilities.IntentDispatcher);\n const client = context.requestCapability(ClientCapabilities.Client);\n const [layout] = context.requestCapabilities(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, 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 if (!document.defaultView) {\n log.warn('No default view found');\n return [];\n }\n\n const cleanup = addEventListener(\n document.defaultView,\n 'dx-ref-tag-activate',\n handleDxRefTagActivate,\n customEventOptions,\n );\n return contributes(Capabilities.Null, null, () => cleanup());\n },\n }),\n defineModule({\n id: `${meta.id}/module/react-surface`,\n activatesOn: Events.SetupReactSurface,\n activate: () =>\n // TODO(wittjosiah): Factor out to lazy capabilities like other plugins.\n contributes(Capabilities.ReactSurface, [\n //\n // Specific schema types.\n //\n createSurface({\n id: `${PREVIEW_PLUGIN}/schema-popover`,\n role: ['popover', 'card--kanban'],\n filter: (data): data is { subject: Contact } => isInstanceOf(Contact, data.subject),\n component: ({ data, role }) => {\n const { dispatchPromise: dispatch } = useIntentDispatcher();\n const handleOrgClick = useCallback(\n async (org: Organization) => {\n const space = getSpace(org);\n const tablesQuery = await space?.db.query(Filter.schema(TableType)).run();\n const currentSpaceOrgTable = tablesQuery?.objects.find((table) => {\n return table.view?.target?.query?.typename === Organization.typename;\n });\n await dispatch(\n createIntent(LayoutAction.UpdatePopover, {\n part: 'popover',\n options: {\n state: false,\n anchorId: '',\n },\n }),\n );\n if (currentSpaceOrgTable) {\n return dispatch(\n createIntent(LayoutAction.Open, {\n part: 'main',\n subject: [fullyQualifiedId(currentSpaceOrgTable)],\n options: { workspace: space?.id },\n }),\n );\n }\n },\n [dispatch],\n );\n return (\n <ContactCard subject={data.subject} onOrgClick={handleOrgClick} role={role}>\n {role === 'popover' && <Surface role='related' data={data} />}\n </ContactCard>\n );\n },\n }),\n createSurface({\n id: `${PREVIEW_PLUGIN}/schema-popover`,\n role: ['popover', 'card--kanban'],\n filter: (data): data is { subject: Organization } => isInstanceOf(Organization, data.subject),\n component: ({ data, role }) => (\n <OrganizationCard subject={data.subject} role={role}>\n {role === 'popover' && <Surface role='related' data={data} />}\n </OrganizationCard>\n ),\n }),\n createSurface({\n id: `${PREVIEW_PLUGIN}/schema-popover`,\n role: ['popover', 'card--kanban'],\n filter: (data): data is { subject: Project } => isInstanceOf(Project, data.subject),\n component: ({ data, role }) => <ProjectCard subject={data.subject} role={role} />,\n }),\n\n //\n // Fallback for any object.\n //\n createSurface({\n id: `${PREVIEW_PLUGIN}/fallback-popover`,\n role: ['popover', 'card--kanban'],\n position: 'fallback',\n filter: (data): data is { subject: ReactiveEchoObject<any> } => isEchoObject(data.subject),\n component: ({ data, role }) => {\n const schema = getSchema(data.subject);\n const { t } = useTranslation(PREVIEW_PLUGIN);\n if (!schema) {\n return <p className={descriptionMessage}>{t('unable to create preview message')}</p>;\n }\n\n return (\n <Form\n schema={schema}\n values={data.subject}\n readonly\n {...(role === 'card--kanban' && { classNames: kanbanCardWithoutPoster })}\n />\n );\n },\n }),\n ]),\n }),\n ]);\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport React, { Fragment } from 'react';\n\nimport { Icon, Avatar, Button } from '@dxos/react-ui';\nimport { mx } from '@dxos/react-ui-theme';\nimport { type Contact, type Organization } from '@dxos/schema';\n\nimport { type PreviewProps, popoverCard, previewTitle, previewProse, previewChrome, defaultCard } from '../types';\n\nexport const ContactCard = ({\n children,\n classNames,\n role,\n subject: { fullName, image, organization, emails },\n onOrgClick,\n}: PreviewProps<Contact> & { onOrgClick?: (org: Organization) => void }) => {\n const organizationName = organization && typeof organization === 'object' ? organization.target?.name : organization;\n return (\n <div role='none' className={mx(role === 'popover' ? popoverCard : defaultCard, classNames)}>\n <Avatar.Root>\n <div role='group' className={mx(previewProse, 'grid gap-3 grid-cols-[min-content_1fr]')}>\n <Avatar.Content imgSrc={image} icon='ph--user--regular' size={16} hue='neutral' />\n <div role='none' className='bs-min self-center'>\n <Avatar.Label asChild>\n <h2 className={previewTitle}>{fullName}</h2>\n </Avatar.Label>\n </div>\n </div>\n </Avatar.Root>\n {organizationName && (\n <div role='none' className={previewChrome}>\n {typeof organization === 'object' && onOrgClick ? (\n <Button variant='ghost' classNames='gap-2 text-start' onClick={() => onOrgClick(organization.target!)}>\n <Icon icon='ph--buildings--regular' size={5} classNames='text-subdued' />\n <span className='min-is-0 flex-1 truncate'>{organizationName}</span>\n <Icon icon='ph--arrow-right--regular' />\n </Button>\n ) : (\n <p className='dx-button gap-2' data-variant='ghost'>\n <Icon icon='ph--buildings--regular' size={5} classNames='text-subdued' />\n <span className='min-is-0 flex-1 truncate'>{organizationName}</span>\n </p>\n )}\n </div>\n )}\n <dl\n className={mx(\n previewProse,\n 'grid gap-2 grid-cols-[min-content_1fr] [&_dt]:text-subdued [&_dt]:pbs-0.5 [&_dd]:min-is-0',\n )}\n >\n {emails?.length &&\n emails.map(({ label, value }) => (\n <Fragment key={value}>\n <dt>\n <Icon icon='ph--at--regular' size={5} />\n </dt>\n <dd key={value} className='break-words'>\n {value}\n </dd>\n </Fragment>\n ))}\n </dl>\n {children}\n </div>\n );\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport React from 'react';\n\nimport { Icon } from '@dxos/react-ui';\nimport { mx } from '@dxos/react-ui-theme';\nimport { type Organization } from '@dxos/schema';\n\nimport { type PreviewProps, popoverCard, previewTitle, previewProse, previewChrome, defaultCard } from '../types';\n\nexport const OrganizationCard = ({\n children,\n classNames,\n subject: { name, image, description, website },\n role,\n}: PreviewProps<Organization>) => {\n return (\n <div role='none' className={mx(role === 'popover' ? popoverCard : defaultCard, classNames)}>\n {image ? (\n <img className='aspect-video object-cover is-full bs-auto' src={image} alt={name} />\n ) : (\n <div role='image' className='grid aspect-video place-items-center bg-input text-subdued'>\n <Icon icon='ph--building-office--regular' size={10} />\n </div>\n )}\n <h2 className={mx(previewTitle, previewProse)}>{name}</h2>\n {description && <p className={mx(previewProse, 'line-clamp-2')}>{description}</p>}\n {website && (\n <div role='none' className={previewChrome}>\n <a className='dx-button dx-focus-ring gap-2' href={website} target='_blank' rel='noreferrer'>\n <Icon icon='ph--link--regular' size={5} classNames='text-subdued' />\n <span className='grow'>{website}</span>\n <Icon icon='ph--arrow-square-out--regular' />\n </a>\n </div>\n )}\n {children}\n </div>\n );\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport React from 'react';\n\nimport { mx } from '@dxos/react-ui-theme';\nimport { type Project } from '@dxos/schema';\n\nimport { type PreviewProps, popoverCard, previewTitle, defaultCard } from '../types';\n\nexport const ProjectCard = ({ classNames, role, subject: { name, image, description } }: PreviewProps<Project>) => {\n return (\n <div role='none' className={mx(role === 'popover' ? popoverCard : defaultCard, classNames)}>\n {image && <img className='is-full bs-auto' src={image} alt={name} />}\n <h2 className={mx(previewTitle, 'pli-3 mlb-3')}>{name}</h2>\n {description && <p className='pli-3 line-clamp-2 mlb-3'>{description}</p>}\n </div>\n );\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { PREVIEW_PLUGIN } from './meta';\n\nexport default [\n {\n 'en-US': {\n [PREVIEW_PLUGIN]: {\n 'unable to create preview message': 'No preview',\n },\n },\n },\n];\n"],
5
+ "mappings": "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",
6
+ "names": ["PREVIEW_PLUGIN", "meta", "id", "name", "icon", "source", "popoverCard", "defaultCard", "kanbanCardWithoutPoster", "previewTitle", "previewProse", "previewChrome", "React", "useCallback", "Capabilities", "Events", "LayoutAction", "Surface", "contributes", "createIntent", "createSurface", "defineModule", "definePlugin", "useIntentDispatcher", "addEventListener", "resolveRef", "Filter", "fullyQualifiedId", "getSchema", "getSpace", "isEchoObject", "parseId", "isInstanceOf", "DXN", "log", "ClientCapabilities", "ClientEvents", "useTranslation", "Form", "TableType", "descriptionMessage", "Contact", "Organization", "Project", "React", "Fragment", "Icon", "Avatar", "Button", "mx", "ContactCard", "children", "classNames", "role", "subject", "fullName", "image", "organization", "emails", "onOrgClick", "organizationName", "target", "name", "div", "className", "mx", "popoverCard", "defaultCard", "Avatar", "Root", "previewProse", "Content", "imgSrc", "icon", "size", "hue", "Label", "asChild", "h2", "previewTitle", "previewChrome", "Button", "variant", "onClick", "Icon", "span", "p", "data-variant", "dl", "length", "map", "label", "value", "Fragment", "key", "dt", "dd", "React", "Icon", "mx", "OrganizationCard", "children", "classNames", "subject", "name", "image", "description", "website", "role", "React", "div", "className", "mx", "popoverCard", "defaultCard", "img", "src", "alt", "Icon", "icon", "size", "h2", "previewTitle", "previewProse", "p", "previewChrome", "a", "href", "target", "rel", "span", "React", "mx", "ProjectCard", "classNames", "role", "subject", "name", "image", "description", "React", "div", "className", "mx", "popoverCard", "defaultCard", "img", "src", "alt", "h2", "previewTitle", "p", "PREVIEW_PLUGIN", "customEventOptions", "capture", "passive", "handlePreviewLookup", "client", "defaultSpace", "ref", "label", "dxn", "DXN", "parse", "object", "resolveRef", "PreviewPlugin", "definePlugin", "meta", "defineModule", "id", "activatesOn", "Events", "SetupTranslations", "activate", "contributes", "Capabilities", "Translations", "translations", "ClientEvents", "SetupSchema", "ClientCapabilities", "Schema", "Contact", "Organization", "Startup", "context", "handleDxRefTagActivate", "trigger", "dispatchPromise", "dispatch", "requestCapability", "IntentDispatcher", "Client", "layout", "requestCapabilities", "Layout", "spaceId", "parseId", "workspace", "space", "spaces", "get", "default", "result", "createIntent", "LayoutAction", "UpdatePopover", "part", "subject", "options", "state", "variant", "anchor", "document", "defaultView", "log", "warn", "cleanup", "addEventListener", "Null", "SetupReactSurface", "ReactSurface", "createSurface", "PREVIEW_PLUGIN", "role", "filter", "data", "isInstanceOf", "component", "useIntentDispatcher", "handleOrgClick", "useCallback", "org", "getSpace", "tablesQuery", "db", "query", "Filter", "schema", "TableType", "run", "currentSpaceOrgTable", "objects", "find", "table", "view", "target", "typename", "anchorId", "Open", "fullyQualifiedId", "React", "ContactCard", "onOrgClick", "Surface", "OrganizationCard", "Project", "ProjectCard", "position", "isEchoObject", "getSchema", "t", "useTranslation", "p", "className", "descriptionMessage", "Form", "values", "readonly", "classNames", "kanbanCardWithoutPoster"]
7
7
  }
@@ -1 +1 @@
1
- {"inputs":{"packages/plugins/plugin-preview/src/meta.ts":{"bytes":1296,"imports":[],"format":"esm"},"packages/plugins/plugin-preview/src/PreviewPlugin.tsx":{"bytes":10087,"imports":[{"path":"@dxos/app-framework","kind":"import-statement","external":true},{"path":"@dxos/async","kind":"import-statement","external":true},{"path":"@dxos/client","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":"packages/plugins/plugin-preview/src/meta.ts","kind":"import-statement","original":"./meta"}],"format":"esm"},"packages/plugins/plugin-preview/src/index.ts":{"bytes":596,"imports":[{"path":"packages/plugins/plugin-preview/src/meta.ts","kind":"import-statement","original":"./meta"},{"path":"packages/plugins/plugin-preview/src/PreviewPlugin.tsx","kind":"import-statement","original":"./PreviewPlugin"}],"format":"esm"}},"outputs":{"packages/plugins/plugin-preview/dist/lib/browser/index.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":5715},"packages/plugins/plugin-preview/dist/lib/browser/index.mjs":{"imports":[{"path":"@dxos/app-framework","kind":"import-statement","external":true},{"path":"@dxos/async","kind":"import-statement","external":true},{"path":"@dxos/client","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}],"exports":["PREVIEW_PLUGIN","PreviewPlugin","meta"],"entryPoint":"packages/plugins/plugin-preview/src/index.ts","inputs":{"packages/plugins/plugin-preview/src/meta.ts":{"bytesInOutput":216},"packages/plugins/plugin-preview/src/index.ts":{"bytesInOutput":0},"packages/plugins/plugin-preview/src/PreviewPlugin.tsx":{"bytesInOutput":2307}},"bytes":2717}}}
1
+ {"inputs":{"packages/plugins/plugin-preview/src/meta.ts":{"bytes":1296,"imports":[],"format":"esm"},"packages/plugins/plugin-preview/src/types.ts":{"bytes":3670,"imports":[],"format":"esm"},"packages/plugins/plugin-preview/src/components/ContactCard.tsx":{"bytes":9429,"imports":[{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/react-ui","kind":"import-statement","external":true},{"path":"@dxos/react-ui-theme","kind":"import-statement","external":true},{"path":"packages/plugins/plugin-preview/src/types.ts","kind":"import-statement","original":"../types"}],"format":"esm"},"packages/plugins/plugin-preview/src/components/OrganizationCard.tsx":{"bytes":5719,"imports":[{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/react-ui","kind":"import-statement","external":true},{"path":"@dxos/react-ui-theme","kind":"import-statement","external":true},{"path":"packages/plugins/plugin-preview/src/types.ts","kind":"import-statement","original":"../types"}],"format":"esm"},"packages/plugins/plugin-preview/src/components/ProjectCard.tsx":{"bytes":2941,"imports":[{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/react-ui-theme","kind":"import-statement","external":true},{"path":"packages/plugins/plugin-preview/src/types.ts","kind":"import-statement","original":"../types"}],"format":"esm"},"packages/plugins/plugin-preview/src/components/index.ts":{"bytes":732,"imports":[{"path":"packages/plugins/plugin-preview/src/components/ContactCard.tsx","kind":"import-statement","original":"./ContactCard"},{"path":"packages/plugins/plugin-preview/src/components/OrganizationCard.tsx","kind":"import-statement","original":"./OrganizationCard"},{"path":"packages/plugins/plugin-preview/src/components/ProjectCard.tsx","kind":"import-statement","original":"./ProjectCard"}],"format":"esm"},"packages/plugins/plugin-preview/src/translations.ts":{"bytes":1091,"imports":[{"path":"packages/plugins/plugin-preview/src/meta.ts","kind":"import-statement","original":"./meta"}],"format":"esm"},"packages/plugins/plugin-preview/src/PreviewPlugin.tsx":{"bytes":28903,"imports":[{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/app-framework","kind":"import-statement","external":true},{"path":"@dxos/async","kind":"import-statement","external":true},{"path":"@dxos/client","kind":"import-statement","external":true},{"path":"@dxos/client/echo","kind":"import-statement","external":true},{"path":"@dxos/echo-schema","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},{"path":"@dxos/react-ui-form","kind":"import-statement","external":true},{"path":"@dxos/react-ui-table","kind":"import-statement","external":true},{"path":"@dxos/react-ui-theme","kind":"import-statement","external":true},{"path":"@dxos/schema","kind":"import-statement","external":true},{"path":"packages/plugins/plugin-preview/src/components/index.ts","kind":"import-statement","original":"./components"},{"path":"packages/plugins/plugin-preview/src/meta.ts","kind":"import-statement","original":"./meta"},{"path":"packages/plugins/plugin-preview/src/translations.ts","kind":"import-statement","original":"./translations"},{"path":"packages/plugins/plugin-preview/src/types.ts","kind":"import-statement","original":"./types"}],"format":"esm"},"packages/plugins/plugin-preview/src/index.ts":{"bytes":681,"imports":[{"path":"packages/plugins/plugin-preview/src/meta.ts","kind":"import-statement","original":"./meta"},{"path":"packages/plugins/plugin-preview/src/types.ts","kind":"import-statement","original":"./types"},{"path":"packages/plugins/plugin-preview/src/PreviewPlugin.tsx","kind":"import-statement","original":"./PreviewPlugin"}],"format":"esm"}},"outputs":{"packages/plugins/plugin-preview/dist/lib/browser/index.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":25248},"packages/plugins/plugin-preview/dist/lib/browser/index.mjs":{"imports":[{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/app-framework","kind":"import-statement","external":true},{"path":"@dxos/async","kind":"import-statement","external":true},{"path":"@dxos/client","kind":"import-statement","external":true},{"path":"@dxos/client/echo","kind":"import-statement","external":true},{"path":"@dxos/echo-schema","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},{"path":"@dxos/react-ui-form","kind":"import-statement","external":true},{"path":"@dxos/react-ui-table","kind":"import-statement","external":true},{"path":"@dxos/react-ui-theme","kind":"import-statement","external":true},{"path":"@dxos/schema","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-theme","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-theme","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/react-ui-theme","kind":"import-statement","external":true}],"exports":["PREVIEW_PLUGIN","PreviewPlugin","defaultCard","kanbanCardWithoutPoster","meta","popoverCard","previewChrome","previewProse","previewTitle"],"entryPoint":"packages/plugins/plugin-preview/src/index.ts","inputs":{"packages/plugins/plugin-preview/src/meta.ts":{"bytesInOutput":216},"packages/plugins/plugin-preview/src/index.ts":{"bytesInOutput":0},"packages/plugins/plugin-preview/src/types.ts":{"bytesInOutput":348},"packages/plugins/plugin-preview/src/PreviewPlugin.tsx":{"bytesInOutput":7146},"packages/plugins/plugin-preview/src/components/ContactCard.tsx":{"bytesInOutput":2709},"packages/plugins/plugin-preview/src/components/index.ts":{"bytesInOutput":0},"packages/plugins/plugin-preview/src/components/OrganizationCard.tsx":{"bytesInOutput":1618},"packages/plugins/plugin-preview/src/components/ProjectCard.tsx":{"bytesInOutput":674},"packages/plugins/plugin-preview/src/translations.ts":{"bytesInOutput":152}},"bytes":13532}}}