@dxos/plugin-preview 0.8.2-main.36232bc → 0.8.2-main.5ca3450
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/dist/lib/browser/index.mjs +53 -31
- package/dist/lib/browser/index.mjs.map +3 -3
- package/dist/lib/browser/meta.json +1 -1
- package/dist/lib/node/index.cjs +55 -31
- package/dist/lib/node/index.cjs.map +3 -3
- package/dist/lib/node/meta.json +1 -1
- package/dist/lib/node-esm/index.mjs +53 -31
- package/dist/lib/node-esm/index.mjs.map +3 -3
- package/dist/lib/node-esm/meta.json +1 -1
- package/dist/types/src/Preview.stories.d.ts +17 -11
- package/dist/types/src/Preview.stories.d.ts.map +1 -1
- package/dist/types/src/PreviewPlugin.d.ts.map +1 -1
- package/dist/types/src/components/ContactCard.d.ts +3 -3
- package/dist/types/src/components/ContactCard.d.ts.map +1 -1
- package/dist/types/src/components/OrganizationCard.d.ts +2 -2
- package/dist/types/src/components/OrganizationCard.d.ts.map +1 -1
- package/dist/types/src/components/ProjectCard.d.ts +2 -2
- package/dist/types/src/components/ProjectCard.d.ts.map +1 -1
- package/dist/types/src/types.d.ts +4 -1
- package/dist/types/src/types.d.ts.map +1 -1
- package/dist/types/tsconfig.tsbuildinfo +1 -1
- package/package.json +21 -20
- package/src/Preview.stories.tsx +10 -4
- package/src/PreviewPlugin.tsx +31 -22
- package/src/components/ContactCard.tsx +5 -4
- package/src/components/OrganizationCard.tsx +6 -5
- package/src/components/ProjectCard.tsx +8 -4
- package/src/types.ts +4 -1
|
@@ -8,7 +8,9 @@ var meta = {
|
|
|
8
8
|
};
|
|
9
9
|
|
|
10
10
|
// packages/plugins/plugin-preview/src/types.ts
|
|
11
|
-
var
|
|
11
|
+
var popoverCard = "popover-consistent-width rounded-lg overflow-hidden";
|
|
12
|
+
var defaultCard = "";
|
|
13
|
+
var kanbanCardWithoutPoster = "pbs-[--rail-action]";
|
|
12
14
|
var previewTitle = "text-lg font-medium line-clamp-2";
|
|
13
15
|
var previewProse = "pli-3 mlb-3";
|
|
14
16
|
var previewChrome = "pli-1.5 mlb-1.5 [&_.dx-button]:pli-1.5 [&_.dx-button]:text-start [&_.dx-button]:is-full";
|
|
@@ -27,17 +29,17 @@ import { useTranslation } from "@dxos/react-ui";
|
|
|
27
29
|
import { Form } from "@dxos/react-ui-form";
|
|
28
30
|
import { TableType } from "@dxos/react-ui-table";
|
|
29
31
|
import { descriptionMessage } from "@dxos/react-ui-theme";
|
|
30
|
-
import {
|
|
32
|
+
import { DataType } from "@dxos/schema";
|
|
31
33
|
|
|
32
34
|
// packages/plugins/plugin-preview/src/components/ContactCard.tsx
|
|
33
35
|
import React, { Fragment } from "react";
|
|
34
36
|
import { Icon, Avatar, Button } from "@dxos/react-ui";
|
|
35
37
|
import { mx } from "@dxos/react-ui-theme";
|
|
36
|
-
var ContactCard = ({ children, classNames, subject: { fullName, image, organization, emails }, onOrgClick }) => {
|
|
38
|
+
var ContactCard = ({ children, classNames, role, subject: { fullName, image, organization, emails }, onOrgClick }) => {
|
|
37
39
|
const organizationName = organization && typeof organization === "object" ? organization.target?.name : organization;
|
|
38
40
|
return /* @__PURE__ */ React.createElement("div", {
|
|
39
41
|
role: "none",
|
|
40
|
-
className: mx(
|
|
42
|
+
className: mx(role === "popover" ? popoverCard : defaultCard, classNames)
|
|
41
43
|
}, /* @__PURE__ */ React.createElement(Avatar.Root, null, /* @__PURE__ */ React.createElement("div", {
|
|
42
44
|
role: "group",
|
|
43
45
|
className: mx(previewProse, "grid gap-3 grid-cols-[min-content_1fr]")
|
|
@@ -94,17 +96,17 @@ var ContactCard = ({ children, classNames, subject: { fullName, image, organizat
|
|
|
94
96
|
import React2 from "react";
|
|
95
97
|
import { Icon as Icon2 } from "@dxos/react-ui";
|
|
96
98
|
import { mx as mx2 } from "@dxos/react-ui-theme";
|
|
97
|
-
var OrganizationCard = ({ children, classNames, subject: { name, image, description, website } }) => {
|
|
99
|
+
var OrganizationCard = ({ children, classNames, subject: { name, image, description, website }, role }) => {
|
|
98
100
|
return /* @__PURE__ */ React2.createElement("div", {
|
|
99
101
|
role: "none",
|
|
100
|
-
className: mx2(
|
|
102
|
+
className: mx2(role === "popover" ? popoverCard : defaultCard, classNames)
|
|
101
103
|
}, image ? /* @__PURE__ */ React2.createElement("img", {
|
|
102
104
|
className: "aspect-video object-cover is-full bs-auto",
|
|
103
105
|
src: image,
|
|
104
106
|
alt: name
|
|
105
107
|
}) : /* @__PURE__ */ React2.createElement("div", {
|
|
106
108
|
role: "image",
|
|
107
|
-
className: "grid aspect-video place-items-center bg-
|
|
109
|
+
className: "grid aspect-video place-items-center bg-input text-subdued"
|
|
108
110
|
}, /* @__PURE__ */ React2.createElement(Icon2, {
|
|
109
111
|
icon: "ph--building-office--regular",
|
|
110
112
|
size: 10
|
|
@@ -134,10 +136,10 @@ var OrganizationCard = ({ children, classNames, subject: { name, image, descript
|
|
|
134
136
|
// packages/plugins/plugin-preview/src/components/ProjectCard.tsx
|
|
135
137
|
import React3 from "react";
|
|
136
138
|
import { mx as mx3 } from "@dxos/react-ui-theme";
|
|
137
|
-
var ProjectCard = ({ classNames, subject: { name, image, description } }) => {
|
|
139
|
+
var ProjectCard = ({ classNames, role, subject: { name, image, description } }) => {
|
|
138
140
|
return /* @__PURE__ */ React3.createElement("div", {
|
|
139
141
|
role: "none",
|
|
140
|
-
className: mx3(
|
|
142
|
+
className: mx3(role === "popover" ? popoverCard : defaultCard, classNames)
|
|
141
143
|
}, image && /* @__PURE__ */ React3.createElement("img", {
|
|
142
144
|
className: "is-full bs-auto",
|
|
143
145
|
src: image,
|
|
@@ -188,8 +190,8 @@ var PreviewPlugin = () => definePlugin(meta, [
|
|
|
188
190
|
activatesOn: ClientEvents.SetupSchema,
|
|
189
191
|
activate: () => [
|
|
190
192
|
contributes(ClientCapabilities.Schema, [
|
|
191
|
-
|
|
192
|
-
Organization
|
|
193
|
+
DataType.Person,
|
|
194
|
+
DataType.Organization
|
|
193
195
|
])
|
|
194
196
|
]
|
|
195
197
|
}),
|
|
@@ -223,7 +225,7 @@ var PreviewPlugin = () => definePlugin(meta, [
|
|
|
223
225
|
if (!document.defaultView) {
|
|
224
226
|
log.warn("No default view found", void 0, {
|
|
225
227
|
F: __dxlog_file,
|
|
226
|
-
L:
|
|
228
|
+
L: 106,
|
|
227
229
|
S: void 0,
|
|
228
230
|
C: (f, a) => f(...a)
|
|
229
231
|
});
|
|
@@ -244,15 +246,18 @@ var PreviewPlugin = () => definePlugin(meta, [
|
|
|
244
246
|
//
|
|
245
247
|
createSurface({
|
|
246
248
|
id: `${PREVIEW_PLUGIN}/schema-popover`,
|
|
247
|
-
role:
|
|
248
|
-
|
|
249
|
-
|
|
249
|
+
role: [
|
|
250
|
+
"popover",
|
|
251
|
+
"card--kanban"
|
|
252
|
+
],
|
|
253
|
+
filter: (data) => isInstanceOf(DataType.Person, data.subject),
|
|
254
|
+
component: ({ data, role }) => {
|
|
250
255
|
const { dispatchPromise: dispatch } = useIntentDispatcher();
|
|
251
256
|
const handleOrgClick = useCallback(async (org) => {
|
|
252
257
|
const space = getSpace(org);
|
|
253
258
|
const tablesQuery = await space?.db.query(Filter.schema(TableType)).run();
|
|
254
259
|
const currentSpaceOrgTable = tablesQuery?.objects.find((table) => {
|
|
255
|
-
return table.view?.target?.query?.typename === Organization.typename;
|
|
260
|
+
return table.view?.target?.query?.typename === DataType.Organization.typename;
|
|
256
261
|
});
|
|
257
262
|
await dispatch(createIntent(LayoutAction.UpdatePopover, {
|
|
258
263
|
part: "popover",
|
|
@@ -277,8 +282,9 @@ var PreviewPlugin = () => definePlugin(meta, [
|
|
|
277
282
|
]);
|
|
278
283
|
return /* @__PURE__ */ React4.createElement(ContactCard, {
|
|
279
284
|
subject: data.subject,
|
|
280
|
-
onOrgClick: handleOrgClick
|
|
281
|
-
|
|
285
|
+
onOrgClick: handleOrgClick,
|
|
286
|
+
role
|
|
287
|
+
}, role === "popover" && /* @__PURE__ */ React4.createElement(Surface, {
|
|
282
288
|
role: "related",
|
|
283
289
|
data
|
|
284
290
|
}));
|
|
@@ -286,21 +292,29 @@ var PreviewPlugin = () => definePlugin(meta, [
|
|
|
286
292
|
}),
|
|
287
293
|
createSurface({
|
|
288
294
|
id: `${PREVIEW_PLUGIN}/schema-popover`,
|
|
289
|
-
role:
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
295
|
+
role: [
|
|
296
|
+
"popover",
|
|
297
|
+
"card--kanban"
|
|
298
|
+
],
|
|
299
|
+
filter: (data) => isInstanceOf(DataType.Organization, data.subject),
|
|
300
|
+
component: ({ data, role }) => /* @__PURE__ */ React4.createElement(OrganizationCard, {
|
|
301
|
+
subject: data.subject,
|
|
302
|
+
role
|
|
303
|
+
}, role === "popover" && /* @__PURE__ */ React4.createElement(Surface, {
|
|
294
304
|
role: "related",
|
|
295
305
|
data
|
|
296
306
|
}))
|
|
297
307
|
}),
|
|
298
308
|
createSurface({
|
|
299
309
|
id: `${PREVIEW_PLUGIN}/schema-popover`,
|
|
300
|
-
role:
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
310
|
+
role: [
|
|
311
|
+
"popover",
|
|
312
|
+
"card--kanban"
|
|
313
|
+
],
|
|
314
|
+
filter: (data) => isInstanceOf(DataType.Project, data.subject),
|
|
315
|
+
component: ({ data, role }) => /* @__PURE__ */ React4.createElement(ProjectCard, {
|
|
316
|
+
subject: data.subject,
|
|
317
|
+
role
|
|
304
318
|
})
|
|
305
319
|
}),
|
|
306
320
|
//
|
|
@@ -308,10 +322,13 @@ var PreviewPlugin = () => definePlugin(meta, [
|
|
|
308
322
|
//
|
|
309
323
|
createSurface({
|
|
310
324
|
id: `${PREVIEW_PLUGIN}/fallback-popover`,
|
|
311
|
-
role:
|
|
325
|
+
role: [
|
|
326
|
+
"popover",
|
|
327
|
+
"card--kanban"
|
|
328
|
+
],
|
|
312
329
|
position: "fallback",
|
|
313
330
|
filter: (data) => isEchoObject(data.subject),
|
|
314
|
-
component: ({ data }) => {
|
|
331
|
+
component: ({ data, role }) => {
|
|
315
332
|
const schema = getSchema(data.subject);
|
|
316
333
|
const { t } = useTranslation(PREVIEW_PLUGIN);
|
|
317
334
|
if (!schema) {
|
|
@@ -322,7 +339,10 @@ var PreviewPlugin = () => definePlugin(meta, [
|
|
|
322
339
|
return /* @__PURE__ */ React4.createElement(Form, {
|
|
323
340
|
schema,
|
|
324
341
|
values: data.subject,
|
|
325
|
-
readonly: true
|
|
342
|
+
readonly: true,
|
|
343
|
+
...role === "card--kanban" && {
|
|
344
|
+
classNames: kanbanCardWithoutPoster
|
|
345
|
+
}
|
|
326
346
|
});
|
|
327
347
|
}
|
|
328
348
|
})
|
|
@@ -333,8 +353,10 @@ var PreviewPlugin = () => definePlugin(meta, [
|
|
|
333
353
|
export {
|
|
334
354
|
PREVIEW_PLUGIN,
|
|
335
355
|
PreviewPlugin,
|
|
356
|
+
defaultCard,
|
|
357
|
+
kanbanCardWithoutPoster,
|
|
336
358
|
meta,
|
|
337
|
-
|
|
359
|
+
popoverCard,
|
|
338
360
|
previewChrome,
|
|
339
361
|
previewProse,
|
|
340
362
|
previewTitle
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
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 }>\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 previewCard = 'popover-max-width rounded-lg overflow-hidden';\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';\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',\n filter: (data): data is { subject: Contact } => isInstanceOf(Contact, data.subject),\n component: ({ data }) => {\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}>\n <Surface role='related' data={data} />\n </ContactCard>\n );\n },\n }),\n createSurface({\n id: `${PREVIEW_PLUGIN}/schema-popover`,\n role: 'popover',\n filter: (data): data is { subject: Organization } => isInstanceOf(Organization, data.subject),\n component: ({ data }) => (\n <OrganizationCard subject={data.subject}>\n <Surface role='related' data={data} />\n </OrganizationCard>\n ),\n }),\n createSurface({\n id: `${PREVIEW_PLUGIN}/schema-popover`,\n role: 'popover',\n filter: (data): data is { subject: Project } => isInstanceOf(Project, data.subject),\n component: ({ data }) => <ProjectCard subject={data.subject} />,\n }),\n\n //\n // Fallback for any object.\n //\n createSurface({\n id: `${PREVIEW_PLUGIN}/fallback-popover`,\n role: 'popover',\n position: 'fallback',\n filter: (data): data is { subject: ReactiveEchoObject<any> } => isEchoObject(data.subject),\n component: ({ data }) => {\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 <Form schema={schema} values={data.subject} readonly />;\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, previewCard, previewTitle, previewProse, previewChrome } from '../types';\n\nexport const ContactCard = ({\n children,\n classNames,\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(previewCard, 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, previewCard, previewTitle, previewProse, previewChrome } from '../types';\n\nexport const OrganizationCard = ({\n children,\n classNames,\n subject: { name, image, description, website },\n}: PreviewProps<Organization>) => {\n return (\n <div role='none' className={mx(previewCard, 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-groupSurface 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, previewCard, previewTitle } from '../types';\n\nexport const ProjectCard = ({ classNames, subject: { name, image, description } }: PreviewProps<Project>) => {\n return (\n <div role='none' className={mx(previewCard, 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": ";AAMO,IAAMA,iBAAiB;AAEvB,IAAMC,OAAmB;EAC9BC,IAAIF;EACJG,MAAM;EACNC,MAAM;EACNC,QAAQ;AACV;;;
|
|
6
|
-
"names": ["PREVIEW_PLUGIN", "meta", "id", "name", "icon", "source", "
|
|
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 AnyLiveObject,\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 { DataType } 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, [DataType.Person, DataType.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: DataType.Person } => isInstanceOf(DataType.Person, data.subject),\n component: ({ data, role }) => {\n const { dispatchPromise: dispatch } = useIntentDispatcher();\n const handleOrgClick = useCallback(\n async (org: DataType.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 === DataType.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: DataType.Organization } =>\n isInstanceOf(DataType.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: DataType.Project } => isInstanceOf(DataType.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: AnyLiveObject<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 DataType } 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<DataType.Person> & { onOrgClick?: (org: DataType.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 DataType } 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<DataType.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 DataType } from '@dxos/schema';\n\nimport { type PreviewProps, popoverCard, previewTitle, defaultCard } from '../types';\n\nexport const ProjectCard = ({\n classNames,\n role,\n subject: { name, image, description },\n}: PreviewProps<DataType.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", "DataType", "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", "DataType", "Person", "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/types.ts":{"bytes":
|
|
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":5727,"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":2969,"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":29109,"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":25357},"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":7176},"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":13562}}}
|
package/dist/lib/node/index.cjs
CHANGED
|
@@ -30,8 +30,10 @@ var node_exports = {};
|
|
|
30
30
|
__export(node_exports, {
|
|
31
31
|
PREVIEW_PLUGIN: () => PREVIEW_PLUGIN,
|
|
32
32
|
PreviewPlugin: () => PreviewPlugin,
|
|
33
|
+
defaultCard: () => defaultCard,
|
|
34
|
+
kanbanCardWithoutPoster: () => kanbanCardWithoutPoster,
|
|
33
35
|
meta: () => meta,
|
|
34
|
-
|
|
36
|
+
popoverCard: () => popoverCard,
|
|
35
37
|
previewChrome: () => previewChrome,
|
|
36
38
|
previewProse: () => previewProse,
|
|
37
39
|
previewTitle: () => previewTitle
|
|
@@ -66,15 +68,17 @@ var meta = {
|
|
|
66
68
|
icon: "ph--eye--regular",
|
|
67
69
|
source: "https://github.com/dxos/dxos/tree/main/packages/plugins/plugin-preview"
|
|
68
70
|
};
|
|
69
|
-
var
|
|
71
|
+
var popoverCard = "popover-consistent-width rounded-lg overflow-hidden";
|
|
72
|
+
var defaultCard = "";
|
|
73
|
+
var kanbanCardWithoutPoster = "pbs-[--rail-action]";
|
|
70
74
|
var previewTitle = "text-lg font-medium line-clamp-2";
|
|
71
75
|
var previewProse = "pli-3 mlb-3";
|
|
72
76
|
var previewChrome = "pli-1.5 mlb-1.5 [&_.dx-button]:pli-1.5 [&_.dx-button]:text-start [&_.dx-button]:is-full";
|
|
73
|
-
var ContactCard = ({ children, classNames, subject: { fullName, image, organization, emails }, onOrgClick }) => {
|
|
77
|
+
var ContactCard = ({ children, classNames, role, subject: { fullName, image, organization, emails }, onOrgClick }) => {
|
|
74
78
|
const organizationName = organization && typeof organization === "object" ? organization.target?.name : organization;
|
|
75
79
|
return /* @__PURE__ */ import_react2.default.createElement("div", {
|
|
76
80
|
role: "none",
|
|
77
|
-
className: (0, import_react_ui_theme2.mx)(
|
|
81
|
+
className: (0, import_react_ui_theme2.mx)(role === "popover" ? popoverCard : defaultCard, classNames)
|
|
78
82
|
}, /* @__PURE__ */ import_react2.default.createElement(import_react_ui2.Avatar.Root, null, /* @__PURE__ */ import_react2.default.createElement("div", {
|
|
79
83
|
role: "group",
|
|
80
84
|
className: (0, import_react_ui_theme2.mx)(previewProse, "grid gap-3 grid-cols-[min-content_1fr]")
|
|
@@ -126,17 +130,17 @@ var ContactCard = ({ children, classNames, subject: { fullName, image, organizat
|
|
|
126
130
|
className: "break-words"
|
|
127
131
|
}, value)))), children);
|
|
128
132
|
};
|
|
129
|
-
var OrganizationCard = ({ children, classNames, subject: { name, image, description, website } }) => {
|
|
133
|
+
var OrganizationCard = ({ children, classNames, subject: { name, image, description, website }, role }) => {
|
|
130
134
|
return /* @__PURE__ */ import_react3.default.createElement("div", {
|
|
131
135
|
role: "none",
|
|
132
|
-
className: (0, import_react_ui_theme3.mx)(
|
|
136
|
+
className: (0, import_react_ui_theme3.mx)(role === "popover" ? popoverCard : defaultCard, classNames)
|
|
133
137
|
}, image ? /* @__PURE__ */ import_react3.default.createElement("img", {
|
|
134
138
|
className: "aspect-video object-cover is-full bs-auto",
|
|
135
139
|
src: image,
|
|
136
140
|
alt: name
|
|
137
141
|
}) : /* @__PURE__ */ import_react3.default.createElement("div", {
|
|
138
142
|
role: "image",
|
|
139
|
-
className: "grid aspect-video place-items-center bg-
|
|
143
|
+
className: "grid aspect-video place-items-center bg-input text-subdued"
|
|
140
144
|
}, /* @__PURE__ */ import_react3.default.createElement(import_react_ui3.Icon, {
|
|
141
145
|
icon: "ph--building-office--regular",
|
|
142
146
|
size: 10
|
|
@@ -162,10 +166,10 @@ var OrganizationCard = ({ children, classNames, subject: { name, image, descript
|
|
|
162
166
|
icon: "ph--arrow-square-out--regular"
|
|
163
167
|
}))), children);
|
|
164
168
|
};
|
|
165
|
-
var ProjectCard = ({ classNames, subject: { name, image, description } }) => {
|
|
169
|
+
var ProjectCard = ({ classNames, role, subject: { name, image, description } }) => {
|
|
166
170
|
return /* @__PURE__ */ import_react4.default.createElement("div", {
|
|
167
171
|
role: "none",
|
|
168
|
-
className: (0, import_react_ui_theme4.mx)(
|
|
172
|
+
className: (0, import_react_ui_theme4.mx)(role === "popover" ? popoverCard : defaultCard, classNames)
|
|
169
173
|
}, image && /* @__PURE__ */ import_react4.default.createElement("img", {
|
|
170
174
|
className: "is-full bs-auto",
|
|
171
175
|
src: image,
|
|
@@ -212,8 +216,8 @@ var PreviewPlugin = () => (0, import_app_framework.definePlugin)(meta, [
|
|
|
212
216
|
activatesOn: import_plugin_client.ClientEvents.SetupSchema,
|
|
213
217
|
activate: () => [
|
|
214
218
|
(0, import_app_framework.contributes)(import_plugin_client.ClientCapabilities.Schema, [
|
|
215
|
-
import_schema.
|
|
216
|
-
import_schema.Organization
|
|
219
|
+
import_schema.DataType.Person,
|
|
220
|
+
import_schema.DataType.Organization
|
|
217
221
|
])
|
|
218
222
|
]
|
|
219
223
|
}),
|
|
@@ -247,7 +251,7 @@ var PreviewPlugin = () => (0, import_app_framework.definePlugin)(meta, [
|
|
|
247
251
|
if (!document.defaultView) {
|
|
248
252
|
import_log.log.warn("No default view found", void 0, {
|
|
249
253
|
F: __dxlog_file,
|
|
250
|
-
L:
|
|
254
|
+
L: 106,
|
|
251
255
|
S: void 0,
|
|
252
256
|
C: (f, a) => f(...a)
|
|
253
257
|
});
|
|
@@ -268,15 +272,18 @@ var PreviewPlugin = () => (0, import_app_framework.definePlugin)(meta, [
|
|
|
268
272
|
//
|
|
269
273
|
(0, import_app_framework.createSurface)({
|
|
270
274
|
id: `${PREVIEW_PLUGIN}/schema-popover`,
|
|
271
|
-
role:
|
|
272
|
-
|
|
273
|
-
|
|
275
|
+
role: [
|
|
276
|
+
"popover",
|
|
277
|
+
"card--kanban"
|
|
278
|
+
],
|
|
279
|
+
filter: (data) => (0, import_echo_schema.isInstanceOf)(import_schema.DataType.Person, data.subject),
|
|
280
|
+
component: ({ data, role }) => {
|
|
274
281
|
const { dispatchPromise: dispatch } = (0, import_app_framework.useIntentDispatcher)();
|
|
275
282
|
const handleOrgClick = (0, import_react.useCallback)(async (org) => {
|
|
276
283
|
const space = (0, import_echo.getSpace)(org);
|
|
277
284
|
const tablesQuery = await space?.db.query(import_echo.Filter.schema(import_react_ui_table.TableType)).run();
|
|
278
285
|
const currentSpaceOrgTable = tablesQuery?.objects.find((table) => {
|
|
279
|
-
return table.view?.target?.query?.typename === import_schema.Organization.typename;
|
|
286
|
+
return table.view?.target?.query?.typename === import_schema.DataType.Organization.typename;
|
|
280
287
|
});
|
|
281
288
|
await dispatch((0, import_app_framework.createIntent)(import_app_framework.LayoutAction.UpdatePopover, {
|
|
282
289
|
part: "popover",
|
|
@@ -301,8 +308,9 @@ var PreviewPlugin = () => (0, import_app_framework.definePlugin)(meta, [
|
|
|
301
308
|
]);
|
|
302
309
|
return /* @__PURE__ */ import_react.default.createElement(ContactCard, {
|
|
303
310
|
subject: data.subject,
|
|
304
|
-
onOrgClick: handleOrgClick
|
|
305
|
-
|
|
311
|
+
onOrgClick: handleOrgClick,
|
|
312
|
+
role
|
|
313
|
+
}, role === "popover" && /* @__PURE__ */ import_react.default.createElement(import_app_framework.Surface, {
|
|
306
314
|
role: "related",
|
|
307
315
|
data
|
|
308
316
|
}));
|
|
@@ -310,21 +318,29 @@ var PreviewPlugin = () => (0, import_app_framework.definePlugin)(meta, [
|
|
|
310
318
|
}),
|
|
311
319
|
(0, import_app_framework.createSurface)({
|
|
312
320
|
id: `${PREVIEW_PLUGIN}/schema-popover`,
|
|
313
|
-
role:
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
321
|
+
role: [
|
|
322
|
+
"popover",
|
|
323
|
+
"card--kanban"
|
|
324
|
+
],
|
|
325
|
+
filter: (data) => (0, import_echo_schema.isInstanceOf)(import_schema.DataType.Organization, data.subject),
|
|
326
|
+
component: ({ data, role }) => /* @__PURE__ */ import_react.default.createElement(OrganizationCard, {
|
|
327
|
+
subject: data.subject,
|
|
328
|
+
role
|
|
329
|
+
}, role === "popover" && /* @__PURE__ */ import_react.default.createElement(import_app_framework.Surface, {
|
|
318
330
|
role: "related",
|
|
319
331
|
data
|
|
320
332
|
}))
|
|
321
333
|
}),
|
|
322
334
|
(0, import_app_framework.createSurface)({
|
|
323
335
|
id: `${PREVIEW_PLUGIN}/schema-popover`,
|
|
324
|
-
role:
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
336
|
+
role: [
|
|
337
|
+
"popover",
|
|
338
|
+
"card--kanban"
|
|
339
|
+
],
|
|
340
|
+
filter: (data) => (0, import_echo_schema.isInstanceOf)(import_schema.DataType.Project, data.subject),
|
|
341
|
+
component: ({ data, role }) => /* @__PURE__ */ import_react.default.createElement(ProjectCard, {
|
|
342
|
+
subject: data.subject,
|
|
343
|
+
role
|
|
328
344
|
})
|
|
329
345
|
}),
|
|
330
346
|
//
|
|
@@ -332,10 +348,13 @@ var PreviewPlugin = () => (0, import_app_framework.definePlugin)(meta, [
|
|
|
332
348
|
//
|
|
333
349
|
(0, import_app_framework.createSurface)({
|
|
334
350
|
id: `${PREVIEW_PLUGIN}/fallback-popover`,
|
|
335
|
-
role:
|
|
351
|
+
role: [
|
|
352
|
+
"popover",
|
|
353
|
+
"card--kanban"
|
|
354
|
+
],
|
|
336
355
|
position: "fallback",
|
|
337
356
|
filter: (data) => (0, import_echo.isEchoObject)(data.subject),
|
|
338
|
-
component: ({ data }) => {
|
|
357
|
+
component: ({ data, role }) => {
|
|
339
358
|
const schema = (0, import_echo.getSchema)(data.subject);
|
|
340
359
|
const { t } = (0, import_react_ui.useTranslation)(PREVIEW_PLUGIN);
|
|
341
360
|
if (!schema) {
|
|
@@ -346,7 +365,10 @@ var PreviewPlugin = () => (0, import_app_framework.definePlugin)(meta, [
|
|
|
346
365
|
return /* @__PURE__ */ import_react.default.createElement(import_react_ui_form.Form, {
|
|
347
366
|
schema,
|
|
348
367
|
values: data.subject,
|
|
349
|
-
readonly: true
|
|
368
|
+
readonly: true,
|
|
369
|
+
...role === "card--kanban" && {
|
|
370
|
+
classNames: kanbanCardWithoutPoster
|
|
371
|
+
}
|
|
350
372
|
});
|
|
351
373
|
}
|
|
352
374
|
})
|
|
@@ -358,8 +380,10 @@ var PreviewPlugin = () => (0, import_app_framework.definePlugin)(meta, [
|
|
|
358
380
|
0 && (module.exports = {
|
|
359
381
|
PREVIEW_PLUGIN,
|
|
360
382
|
PreviewPlugin,
|
|
383
|
+
defaultCard,
|
|
384
|
+
kanbanCardWithoutPoster,
|
|
361
385
|
meta,
|
|
362
|
-
|
|
386
|
+
popoverCard,
|
|
363
387
|
previewChrome,
|
|
364
388
|
previewProse,
|
|
365
389
|
previewTitle
|