@dxos/plugin-markdown 0.6.13-main.548ca8d → 0.6.13-staging.1e988a3

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 (120) hide show
  1. package/dist/lib/browser/DocumentCard-2P4EICBA.mjs +11 -0
  2. package/dist/lib/browser/DocumentEditor-GPWV3VN3.mjs +11 -0
  3. package/dist/lib/browser/MarkdownEditor-EKJJQEFL.mjs +10 -0
  4. package/dist/lib/browser/MarkdownEditor-EKJJQEFL.mjs.map +7 -0
  5. package/dist/lib/browser/chunk-354DCID5.mjs +117 -0
  6. package/dist/lib/browser/chunk-354DCID5.mjs.map +7 -0
  7. package/dist/lib/browser/chunk-4GGD6YJO.mjs +19 -0
  8. package/dist/lib/browser/chunk-4GGD6YJO.mjs.map +7 -0
  9. package/dist/lib/browser/chunk-7AF2JLK4.mjs +164 -0
  10. package/dist/lib/browser/chunk-7AF2JLK4.mjs.map +7 -0
  11. package/dist/lib/browser/{chunk-US5O2P3R.mjs → chunk-CQJL4G4X.mjs} +2 -4
  12. package/dist/lib/browser/chunk-CQJL4G4X.mjs.map +7 -0
  13. package/dist/lib/browser/chunk-RL7QY322.mjs +86 -0
  14. package/dist/lib/browser/chunk-RL7QY322.mjs.map +7 -0
  15. package/dist/lib/browser/chunk-VUN4QKTT.mjs +208 -0
  16. package/dist/lib/browser/chunk-VUN4QKTT.mjs.map +7 -0
  17. package/dist/lib/browser/index.mjs +117 -77
  18. package/dist/lib/browser/index.mjs.map +4 -4
  19. package/dist/lib/browser/meta.json +1 -1
  20. package/dist/lib/browser/meta.mjs +1 -1
  21. package/dist/lib/browser/types/index.mjs +4 -6
  22. package/dist/lib/node/{chunk-P7YU53RP.cjs → DocumentCard-EHJDDSRY.cjs} +10 -16
  23. package/dist/lib/node/DocumentCard-EHJDDSRY.cjs.map +7 -0
  24. package/dist/lib/node/DocumentEditor-I5GCRBKU.cjs +29 -0
  25. package/dist/lib/node/DocumentEditor-I5GCRBKU.cjs.map +7 -0
  26. package/dist/lib/node/MarkdownEditor-UE23H75V.cjs +31 -0
  27. package/dist/lib/node/MarkdownEditor-UE23H75V.cjs.map +7 -0
  28. package/dist/lib/node/chunk-7XIBNEI7.cjs +238 -0
  29. package/dist/lib/node/chunk-7XIBNEI7.cjs.map +7 -0
  30. package/dist/lib/node/chunk-KTYIOXL5.cjs +149 -0
  31. package/dist/lib/node/chunk-KTYIOXL5.cjs.map +7 -0
  32. package/dist/lib/node/chunk-Q4ZSCBQE.cjs +114 -0
  33. package/dist/lib/node/chunk-Q4ZSCBQE.cjs.map +7 -0
  34. package/dist/lib/node/chunk-RVGN72IX.cjs +189 -0
  35. package/dist/lib/node/chunk-RVGN72IX.cjs.map +7 -0
  36. package/dist/lib/node/chunk-TGMR2CKU.cjs +52 -0
  37. package/dist/lib/node/chunk-TGMR2CKU.cjs.map +7 -0
  38. package/dist/lib/node/{chunk-UJMOZCIA.cjs → chunk-VWQH4WC2.cjs} +8 -11
  39. package/dist/lib/node/chunk-VWQH4WC2.cjs.map +7 -0
  40. package/dist/lib/node/index.cjs +147 -111
  41. package/dist/lib/node/index.cjs.map +4 -4
  42. package/dist/lib/node/meta.cjs +3 -3
  43. package/dist/lib/node/meta.cjs.map +1 -1
  44. package/dist/lib/node/meta.json +1 -1
  45. package/dist/lib/node/types/index.cjs +6 -8
  46. package/dist/lib/node/types/index.cjs.map +2 -2
  47. package/dist/types/src/MarkdownPlugin.d.ts.map +1 -1
  48. package/dist/types/src/components/DocumentCard.d.ts +16 -0
  49. package/dist/types/src/components/DocumentCard.d.ts.map +1 -0
  50. package/dist/types/src/components/DocumentEditor.d.ts +14 -0
  51. package/dist/types/src/components/DocumentEditor.d.ts.map +1 -0
  52. package/dist/types/src/components/HeadingMenu.d.ts +13 -0
  53. package/dist/types/src/components/HeadingMenu.d.ts.map +1 -0
  54. package/dist/types/src/components/Layout.d.ts +6 -0
  55. package/dist/types/src/components/Layout.d.ts.map +1 -0
  56. package/dist/types/src/components/MarkdownEditor.d.ts +3 -8
  57. package/dist/types/src/components/MarkdownEditor.d.ts.map +1 -1
  58. package/dist/types/src/components/MarkdownEditor.stories.d.ts +3 -3
  59. package/dist/types/src/components/MarkdownEditor.stories.d.ts.map +1 -1
  60. package/dist/types/src/components/index.d.ts +11 -2
  61. package/dist/types/src/components/index.d.ts.map +1 -1
  62. package/dist/types/src/extensions.d.ts +15 -11
  63. package/dist/types/src/extensions.d.ts.map +1 -1
  64. package/dist/types/src/meta.d.ts +9 -4
  65. package/dist/types/src/meta.d.ts.map +1 -1
  66. package/dist/types/src/types/document.d.ts +1 -10
  67. package/dist/types/src/types/document.d.ts.map +1 -1
  68. package/dist/types/src/types/types.d.ts +9 -8
  69. package/dist/types/src/types/types.d.ts.map +1 -1
  70. package/package.json +36 -41
  71. package/src/MarkdownPlugin.tsx +97 -49
  72. package/src/components/DocumentCard.tsx +107 -0
  73. package/src/components/DocumentEditor.tsx +137 -0
  74. package/src/components/HeadingMenu.tsx +46 -0
  75. package/src/components/Layout.tsx +27 -0
  76. package/src/components/MarkdownEditor.stories.tsx +5 -11
  77. package/src/components/MarkdownEditor.tsx +75 -40
  78. package/src/components/index.ts +14 -2
  79. package/src/extensions.tsx +67 -124
  80. package/src/meta.tsx +19 -0
  81. package/src/types/document.ts +0 -12
  82. package/src/types/types.ts +7 -10
  83. package/dist/lib/browser/MarkdownContainer-52FJDCTV.mjs +0 -467
  84. package/dist/lib/browser/MarkdownContainer-52FJDCTV.mjs.map +0 -7
  85. package/dist/lib/browser/chunk-4MPY6KRJ.mjs +0 -50
  86. package/dist/lib/browser/chunk-4MPY6KRJ.mjs.map +0 -7
  87. package/dist/lib/browser/chunk-DRJ3FPYF.mjs +0 -15
  88. package/dist/lib/browser/chunk-DRJ3FPYF.mjs.map +0 -7
  89. package/dist/lib/browser/chunk-US5O2P3R.mjs.map +0 -7
  90. package/dist/lib/node/MarkdownContainer-5XPB5VP5.cjs +0 -482
  91. package/dist/lib/node/MarkdownContainer-5XPB5VP5.cjs.map +0 -7
  92. package/dist/lib/node/chunk-MOF6UCLA.cjs +0 -72
  93. package/dist/lib/node/chunk-MOF6UCLA.cjs.map +0 -7
  94. package/dist/lib/node/chunk-P7YU53RP.cjs.map +0 -7
  95. package/dist/lib/node/chunk-UJMOZCIA.cjs.map +0 -7
  96. package/dist/lib/node-esm/MarkdownContainer-ILCO3PDV.mjs +0 -468
  97. package/dist/lib/node-esm/MarkdownContainer-ILCO3PDV.mjs.map +0 -7
  98. package/dist/lib/node-esm/chunk-CD634NG3.mjs +0 -51
  99. package/dist/lib/node-esm/chunk-CD634NG3.mjs.map +0 -7
  100. package/dist/lib/node-esm/chunk-MIDCCMIX.mjs +0 -42
  101. package/dist/lib/node-esm/chunk-MIDCCMIX.mjs.map +0 -7
  102. package/dist/lib/node-esm/chunk-NEVN5WR6.mjs +0 -17
  103. package/dist/lib/node-esm/chunk-NEVN5WR6.mjs.map +0 -7
  104. package/dist/lib/node-esm/index.mjs +0 -493
  105. package/dist/lib/node-esm/index.mjs.map +0 -7
  106. package/dist/lib/node-esm/meta.json +0 -1
  107. package/dist/lib/node-esm/meta.mjs +0 -10
  108. package/dist/lib/node-esm/types/index.mjs +0 -15
  109. package/dist/types/src/components/MarkdownContainer.d.ts +0 -15
  110. package/dist/types/src/components/MarkdownContainer.d.ts.map +0 -1
  111. package/dist/types/src/hooks/index.d.ts +0 -2
  112. package/dist/types/src/hooks/index.d.ts.map +0 -1
  113. package/dist/types/src/hooks/useSelectCurrentThread.d.ts +0 -6
  114. package/dist/types/src/hooks/useSelectCurrentThread.d.ts.map +0 -1
  115. package/src/components/MarkdownContainer.tsx +0 -108
  116. package/src/hooks/index.ts +0 -5
  117. package/src/hooks/useSelectCurrentThread.tsx +0 -46
  118. package/src/meta.ts +0 -15
  119. /package/dist/lib/{node-esm/meta.mjs.map → browser/DocumentCard-2P4EICBA.mjs.map} +0 -0
  120. /package/dist/lib/{node-esm/types/index.mjs.map → browser/DocumentEditor-GPWV3VN3.mjs.map} +0 -0
@@ -1,16 +1,20 @@
1
- import { type ReactNode } from 'react';
2
1
  import { type IntentDispatcher } from '@dxos/app-framework';
3
2
  import { type Query } from '@dxos/react-client/echo';
4
- import { type EditorViewMode, type Extension } from '@dxos/react-ui-editor';
5
- import { type DocumentType, type MarkdownPluginState, type MarkdownSettingsProps } from './types';
6
- type ExtensionsOptions = {
7
- document: DocumentType;
8
- dispatch?: IntentDispatcher;
9
- query?: Query<DocumentType>;
10
- settings: MarkdownSettingsProps;
3
+ import { type Extension, type EditorViewMode } from '@dxos/react-ui-editor';
4
+ import { type DocumentType, type MarkdownSettingsProps } from './types';
5
+ export type ExtensionsOptions = {
11
6
  viewMode?: EditorViewMode;
7
+ settings?: MarkdownSettingsProps;
8
+ document?: DocumentType;
9
+ debug?: boolean;
10
+ experimental?: boolean;
11
+ numberedHeadings?: boolean;
12
+ folding?: boolean;
13
+ query?: Query<DocumentType>;
14
+ dispatch?: IntentDispatcher;
12
15
  };
13
- export declare const useExtensions: ({ extensionProviders, document, settings, viewMode, }: Pick<ExtensionsOptions, "document" | "settings" | "viewMode"> & Pick<MarkdownPluginState, "extensionProviders">) => Extension[];
14
- export declare const renderRoot: <T extends Element>(root: T, node: ReactNode) => T;
15
- export {};
16
+ /**
17
+ * Create extension instances for editor.
18
+ */
19
+ export declare const createBaseExtensions: ({ viewMode, settings, document, query, dispatch, }: ExtensionsOptions) => Extension[];
16
20
  //# sourceMappingURL=extensions.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"extensions.d.ts","sourceRoot":"","sources":["../../../src/extensions.tsx"],"names":[],"mappings":"AAIA,OAAc,EAA6B,KAAK,SAAS,EAAW,MAAM,OAAO,CAAC;AAGlF,OAAO,EAAE,KAAK,gBAAgB,EAAyC,MAAM,qBAAqB,CAAC;AAEnG,OAAO,EAAiD,KAAK,KAAK,EAAE,MAAM,yBAAyB,CAAC;AAIpG,OAAO,EAEL,KAAK,cAAc,EACnB,KAAK,SAAS,EAQf,MAAM,uBAAuB,CAAC;AAI/B,OAAO,EAAE,KAAK,YAAY,EAAE,KAAK,mBAAmB,EAAE,KAAK,qBAAqB,EAAE,MAAM,SAAS,CAAC;AAGlG,KAAK,iBAAiB,GAAG;IACvB,QAAQ,EAAE,YAAY,CAAC;IACvB,QAAQ,CAAC,EAAE,gBAAgB,CAAC;IAC5B,KAAK,CAAC,EAAE,KAAK,CAAC,YAAY,CAAC,CAAC;IAC5B,QAAQ,EAAE,qBAAqB,CAAC;IAChC,QAAQ,CAAC,EAAE,cAAc,CAAC;CAC3B,CAAC;AAGF,eAAO,MAAM,aAAa,0DAKvB,IAAI,CAAC,iBAAiB,EAAE,UAAU,GAAG,UAAU,GAAG,UAAU,CAAC,GAC9D,IAAI,CAAC,mBAAmB,EAAE,oBAAoB,CAAC,KAAG,SAAS,EA2D5D,CAAC;AA+HF,eAAO,MAAM,UAAU,GAAI,CAAC,SAAS,OAAO,QAAQ,CAAC,QAAQ,SAAS,KAAG,CAGxE,CAAC"}
1
+ {"version":3,"file":"extensions.d.ts","sourceRoot":"","sources":["../../../src/extensions.tsx"],"names":[],"mappings":"AAQA,OAAO,EAAE,KAAK,gBAAgB,EAAoB,MAAM,qBAAqB,CAAC;AAE9E,OAAO,EAAoB,KAAK,KAAK,EAAE,MAAM,yBAAyB,CAAC;AACvE,OAAO,EAEL,KAAK,SAAS,EACd,KAAK,cAAc,EAQpB,MAAM,uBAAuB,CAAC;AAI/B,OAAO,EAAE,KAAK,YAAY,EAAE,KAAK,qBAAqB,EAAE,MAAM,SAAS,CAAC;AAExE,MAAM,MAAM,iBAAiB,GAAG;IAC9B,QAAQ,CAAC,EAAE,cAAc,CAAC;IAC1B,QAAQ,CAAC,EAAE,qBAAqB,CAAC;IACjC,QAAQ,CAAC,EAAE,YAAY,CAAC;IACxB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,KAAK,CAAC,EAAE,KAAK,CAAC,YAAY,CAAC,CAAC;IAC5B,QAAQ,CAAC,EAAE,gBAAgB,CAAC;CAC7B,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,oBAAoB,uDAM9B,iBAAiB,KAAG,SAAS,EAkF/B,CAAC"}
@@ -1,10 +1,15 @@
1
+ import { type IconProps } from '@phosphor-icons/react';
2
+ import React from 'react';
1
3
  export declare const MARKDOWN_PLUGIN = "dxos.org/plugin/markdown";
2
4
  declare const _default: {
3
5
  id: string;
4
- name: string;
5
- description: string;
6
- homePage: string;
7
- icon: string;
6
+ shortId?: string;
7
+ name?: string;
8
+ description?: string;
9
+ homePage?: string;
10
+ tags?: string[];
11
+ iconComponent?: React.FC<IconProps>;
12
+ iconSymbol?: string;
8
13
  };
9
14
  export default _default;
10
15
  //# sourceMappingURL=meta.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"meta.d.ts","sourceRoot":"","sources":["../../../src/meta.ts"],"names":[],"mappings":"AAMA,eAAO,MAAM,eAAe,6BAA6B,CAAC;;;;;;;;AAE1D,wBAMuB"}
1
+ {"version":3,"file":"meta.d.ts","sourceRoot":"","sources":["../../../src/meta.tsx"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,SAAS,EAAU,MAAM,uBAAuB,CAAC;AAC/D,OAAO,KAAK,MAAM,OAAO,CAAC;AAI1B,eAAO,MAAM,eAAe,6BAA6B,CAAC;;;;;;;;;;;AAE1D,wBAOG"}
@@ -9,12 +9,12 @@ declare const TextType_base: import("@dxos/echo-schema").AbstractTypedObject<{
9
9
  export declare class TextType extends TextType_base {
10
10
  }
11
11
  declare const DocumentType_base: import("@dxos/echo-schema").AbstractTypedObject<{
12
+ name?: string | undefined;
12
13
  content: import("@dxos/echo-schema").Ref<{
13
14
  content: string;
14
15
  } & {
15
16
  id: string;
16
17
  }>;
17
- name?: string | undefined;
18
18
  fallbackName?: string | undefined;
19
19
  threads: import("@dxos/echo-schema").Ref<{
20
20
  name?: string | undefined;
@@ -23,7 +23,6 @@ declare const DocumentType_base: import("@dxos/echo-schema").AbstractTypedObject
23
23
  messages: import("@dxos/echo-schema").Ref<{
24
24
  text: string;
25
25
  timestamp: string;
26
- state?: import("@dxos/plugin-space/types").MessageState | undefined;
27
26
  sender: {
28
27
  name?: string | undefined;
29
28
  contact?: import("@dxos/echo-schema").Ref<{
@@ -66,7 +65,6 @@ declare const DocumentType_base: import("@dxos/echo-schema").AbstractTypedObject
66
65
  messages: import("@dxos/echo-schema").Ref<{
67
66
  text: string;
68
67
  timestamp: string;
69
- state?: import("@dxos/plugin-space/types").MessageState | undefined;
70
68
  sender: {
71
69
  name?: string | undefined;
72
70
  contact?: import("@dxos/echo-schema").Ref<{
@@ -95,12 +93,5 @@ declare const DocumentType_base: import("@dxos/echo-schema").AbstractTypedObject
95
93
  }>>;
96
94
  export declare class DocumentType extends DocumentType_base {
97
95
  }
98
- /**
99
- * Checks if an object conforms to the interface needed to render an editor.
100
- */
101
- export declare const isEditorModel: (data: any) => data is {
102
- id: string;
103
- text: string;
104
- };
105
96
  export {};
106
97
  //# sourceMappingURL=document.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"document.d.ts","sourceRoot":"","sources":["../../../../src/types/document.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,GAAG,EAAE,CAAC,EAAe,MAAM,mBAAmB,CAAC;;;;;;;;AAGxD,qBAAa,QAAS,SAAQ,aAE5B;CAAG;;;;;;;;;;;;;;;;iBAoBqhF,CAAC;;oBAA8D,CAAC;uBAAyC,CAAC;wBAAwD,CAAC;;;;;;;;2BAAsP,CAAC;qBAAuC,CAAC;;iBAA8C,CAAC;sBAA4E,CAAC;;;mBAAwE,CAAC;;;;;;;;;;;;;;;;;;;;;;;;iBAAvoB,CAAC;;oBAA8D,CAAC;uBAAyC,CAAC;wBAAwD,CAAC;;;;;;;;2BAAsP,CAAC;qBAAuC,CAAC;;iBAA8C,CAAC;sBAA4E,CAAC;;;mBAAwE,CAAC;;;;;;;;AAlBjqG,qBAAa,YAAa,SAAQ,iBAKhC;CAAG;AAEL;;GAEG;AAEH,eAAO,MAAM,aAAa,SAAU,GAAG,KAAG,IAAI,IAAI;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAM7C,CAAC"}
1
+ {"version":3,"file":"document.d.ts","sourceRoot":"","sources":["../../../../src/types/document.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,GAAG,EAAE,CAAC,EAAe,MAAM,mBAAmB,CAAC;;;;;;;;AAGxD,qBAAa,QAAS,SAAQ,aAE5B;CAAG;;;;;;;;;;;;;;;;;oBAQ+rF,CAAC;uBAAyC,CAAC;wBAAwD,CAAC;;;;;;;;2BAAsP,CAAC;qBAAuC,CAAC;;iBAA8C,CAAC;sBAA4E,CAAC;;;mBAAwE,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;oBAAxkB,CAAC;uBAAyC,CAAC;wBAAwD,CAAC;;;;;;;;2BAAsP,CAAC;qBAAuC,CAAC;;iBAA8C,CAAC;sBAA4E,CAAC;;;mBAAwE,CAAC;;;;;;;;AAN5wG,qBAAa,YAAa,SAAQ,iBAKhC;CAAG"}
@@ -1,6 +1,5 @@
1
1
  import type { GraphBuilderProvides, GraphSerializerProvides, IntentResolverProvides, MetadataRecordsProvides, SettingsProvides, SurfaceProvides, TranslationsProvides } from '@dxos/app-framework';
2
2
  import { type SchemaProvides } from '@dxos/plugin-client';
3
- import { type SpaceInitProvides } from '@dxos/plugin-space';
4
3
  import { type Extension, type EditorInputMode, type EditorViewMode } from '@dxos/react-ui-editor';
5
4
  import { type DocumentType } from './document';
6
5
  export declare enum MarkdownAction {
@@ -8,13 +7,13 @@ export declare enum MarkdownAction {
8
7
  SET_VIEW_MODE = "dxos.org/plugin/markdown/action/set-view-mode"
9
8
  }
10
9
  export type MarkdownProperties = Record<string, any>;
11
- export type MarkdownExtensionProvider = (props: {
10
+ export type ExtensionsProvider = (props: {
12
11
  document?: DocumentType;
13
- }) => Extension | undefined;
12
+ }) => Extension[];
14
13
  export type OnChange = (text: string) => void;
15
14
  export type MarkdownExtensionProvides = {
16
15
  markdown: {
17
- extensions: MarkdownExtensionProvider;
16
+ extensions: ExtensionsProvider;
18
17
  };
19
18
  };
20
19
  type StackProvides = {
@@ -23,8 +22,10 @@ type StackProvides = {
23
22
  };
24
23
  };
25
24
  export type MarkdownPluginState = {
26
- extensionProviders?: MarkdownExtensionProvider[];
27
- viewMode: Record<string, EditorViewMode>;
25
+ extensionProviders: NonNullable<ExtensionsProvider>[];
26
+ viewMode: {
27
+ [key: string]: EditorViewMode;
28
+ };
28
29
  };
29
30
  export type MarkdownSettingsProps = {
30
31
  defaultViewMode: EditorViewMode;
@@ -39,9 +40,9 @@ export type MarkdownSettingsProps = {
39
40
  type ThreadProvides<T> = {
40
41
  thread: {
41
42
  predicate: (obj: any) => obj is T;
42
- createSort: (obj: T) => (anchorA: string | undefined, anchorB: string | undefined) => number;
43
+ createSort: (obj: T) => (anchorA: string, anchorB: string) => number;
43
44
  };
44
45
  };
45
- export type MarkdownPluginProvides = SurfaceProvides & IntentResolverProvides & GraphBuilderProvides & GraphSerializerProvides & MetadataRecordsProvides & SettingsProvides<MarkdownSettingsProps> & TranslationsProvides & SchemaProvides & SpaceInitProvides & StackProvides & ThreadProvides<DocumentType>;
46
+ export type MarkdownPluginProvides = SurfaceProvides & IntentResolverProvides & GraphBuilderProvides & GraphSerializerProvides & MetadataRecordsProvides & SettingsProvides<MarkdownSettingsProps> & TranslationsProvides & SchemaProvides & StackProvides & ThreadProvides<DocumentType>;
46
47
  export {};
47
48
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/types/types.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EACV,oBAAoB,EACpB,uBAAuB,EACvB,sBAAsB,EACtB,uBAAuB,EACvB,gBAAgB,EAChB,eAAe,EACf,oBAAoB,EACrB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,EAAE,KAAK,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAC5D,OAAO,EAAE,KAAK,SAAS,EAAE,KAAK,eAAe,EAAE,KAAK,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAElG,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,YAAY,CAAC;AAK/C,oBAAY,cAAc;IACxB,MAAM,2CAA8B;IACpC,aAAa,kDAAqC;CACnD;AAED,MAAM,MAAM,kBAAkB,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;AAGrD,MAAM,MAAM,yBAAyB,GAAG,CAAC,KAAK,EAAE;IAAE,QAAQ,CAAC,EAAE,YAAY,CAAA;CAAE,KAAK,SAAS,GAAG,SAAS,CAAC;AAEtG,MAAM,MAAM,QAAQ,GAAG,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;AAE9C,MAAM,MAAM,yBAAyB,GAAG;IAEtC,QAAQ,EAAE;QACR,UAAU,EAAE,yBAAyB,CAAC;KACvC,CAAC;CACH,CAAC;AAGF,KAAK,aAAa,GAAG;IACnB,KAAK,EAAE;QACL,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,CAAC;KAClC,CAAC;CACH,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG;IAEhC,kBAAkB,CAAC,EAAE,yBAAyB,EAAE,CAAC;IAIjD,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;CAC1C,CAAC;AAEF,MAAM,MAAM,qBAAqB,GAAG;IAClC,eAAe,EAAE,cAAc,CAAC;IAChC,eAAe,CAAC,EAAE,eAAe,CAAC;IAClC,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB,CAAC;AAGF,KAAK,cAAc,CAAC,CAAC,IAAI;IACvB,MAAM,EAAE;QACN,SAAS,EAAE,CAAC,GAAG,EAAE,GAAG,KAAK,GAAG,IAAI,CAAC,CAAC;QAClC,UAAU,EAAE,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,EAAE,OAAO,EAAE,MAAM,GAAG,SAAS,KAAK,MAAM,CAAC;KAC9F,CAAC;CACH,CAAC;AAEF,MAAM,MAAM,sBAAsB,GAAG,eAAe,GAClD,sBAAsB,GACtB,oBAAoB,GACpB,uBAAuB,GACvB,uBAAuB,GACvB,gBAAgB,CAAC,qBAAqB,CAAC,GACvC,oBAAoB,GACpB,cAAc,GACd,iBAAiB,GACjB,aAAa,GACb,cAAc,CAAC,YAAY,CAAC,CAAC"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/types/types.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EACV,oBAAoB,EACpB,uBAAuB,EACvB,sBAAsB,EACtB,uBAAuB,EACvB,gBAAgB,EAChB,eAAe,EACf,oBAAoB,EACrB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,EAAE,KAAK,SAAS,EAAE,KAAK,eAAe,EAAE,KAAK,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAElG,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,YAAY,CAAC;AAK/C,oBAAY,cAAc;IACxB,MAAM,2CAA8B;IACpC,aAAa,kDAAqC;CACnD;AAED,MAAM,MAAM,kBAAkB,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;AAErD,MAAM,MAAM,kBAAkB,GAAG,CAAC,KAAK,EAAE;IAAE,QAAQ,CAAC,EAAE,YAAY,CAAA;CAAE,KAAK,SAAS,EAAE,CAAC;AAErF,MAAM,MAAM,QAAQ,GAAG,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;AAE9C,MAAM,MAAM,yBAAyB,GAAG;IACtC,QAAQ,EAAE;QACR,UAAU,EAAE,kBAAkB,CAAC;KAChC,CAAC;CACH,CAAC;AAGF,KAAK,aAAa,GAAG;IACnB,KAAK,EAAE;QACL,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,CAAC;KAClC,CAAC;CACH,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG;IAEhC,kBAAkB,EAAE,WAAW,CAAC,kBAAkB,CAAC,EAAE,CAAC;IAItD,QAAQ,EAAE;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,cAAc,CAAA;KAAE,CAAC;CAC7C,CAAC;AAEF,MAAM,MAAM,qBAAqB,GAAG;IAClC,eAAe,EAAE,cAAc,CAAC;IAChC,eAAe,CAAC,EAAE,eAAe,CAAC;IAClC,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB,CAAC;AAIF,KAAK,cAAc,CAAC,CAAC,IAAI;IACvB,MAAM,EAAE;QACN,SAAS,EAAE,CAAC,GAAG,EAAE,GAAG,KAAK,GAAG,IAAI,CAAC,CAAC;QAClC,UAAU,EAAE,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,KAAK,MAAM,CAAC;KACtE,CAAC;CACH,CAAC;AAEF,MAAM,MAAM,sBAAsB,GAAG,eAAe,GAClD,sBAAsB,GACtB,oBAAoB,GACpB,uBAAuB,GACvB,uBAAuB,GACvB,gBAAgB,CAAC,qBAAqB,CAAC,GACvC,oBAAoB,GACpB,cAAc,GACd,aAAa,GACb,cAAc,CAAC,YAAY,CAAC,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dxos/plugin-markdown",
3
- "version": "0.6.13-main.548ca8d",
3
+ "version": "0.6.13-staging.1e988a3",
4
4
  "description": "DXOS Surface plugin for interacting with Markdown",
5
5
  "homepage": "https://dxos.org",
6
6
  "bugs": "https://github.com/dxos/dxos/issues",
@@ -10,24 +10,21 @@
10
10
  ".": {
11
11
  "browser": "./dist/lib/browser/index.mjs",
12
12
  "node": {
13
- "require": "./dist/lib/node/index.cjs",
14
- "default": "./dist/lib/node-esm/index.mjs"
13
+ "default": "./dist/lib/node/index.cjs"
15
14
  },
16
15
  "types": "./dist/types/src/index.d.ts"
17
16
  },
18
17
  "./meta": {
19
18
  "browser": "./dist/lib/browser/meta.mjs",
20
19
  "node": {
21
- "require": "./dist/lib/node/meta.cjs",
22
- "default": "./dist/lib/node-esm/meta.mjs"
20
+ "default": "./dist/lib/node/meta.cjs"
23
21
  },
24
22
  "types": "./dist/types/src/meta.d.ts"
25
23
  },
26
24
  "./types": {
27
25
  "browser": "./dist/lib/browser/types/index.mjs",
28
26
  "node": {
29
- "require": "./dist/lib/node/types/index.cjs",
30
- "default": "./dist/lib/node-esm/types/index.mjs"
27
+ "default": "./dist/lib/node/types/index.cjs"
31
28
  },
32
29
  "types": "./dist/types/src/types/index.d.ts"
33
30
  }
@@ -49,31 +46,29 @@
49
46
  ],
50
47
  "dependencies": {
51
48
  "@codemirror/search": "^6.5.6",
52
- "@codemirror/view": "^6.34.1",
53
- "@effect/schema": "^0.75.1",
49
+ "@codemirror/view": "^6.29.1",
54
50
  "@preact/signals-core": "^1.6.0",
55
- "@dxos/app-framework": "0.6.13-main.548ca8d",
56
- "@dxos/echo-schema": "0.6.13-main.548ca8d",
57
- "@dxos/async": "0.6.13-main.548ca8d",
58
- "@dxos/invariant": "0.6.13-main.548ca8d",
59
- "@dxos/keys": "0.6.13-main.548ca8d",
60
- "@dxos/local-storage": "0.6.13-main.548ca8d",
61
- "@dxos/log": "0.6.13-main.548ca8d",
62
- "@dxos/plugin-attention": "0.6.13-main.548ca8d",
63
- "@dxos/plugin-graph": "0.6.13-main.548ca8d",
64
- "@dxos/plugin-settings": "0.6.13-main.548ca8d",
65
- "@dxos/plugin-space": "0.6.13-main.548ca8d",
66
- "@dxos/plugin-client": "0.6.13-main.548ca8d",
67
- "@dxos/plugin-theme": "0.6.13-main.548ca8d",
68
- "@dxos/react-hooks": "0.6.13-main.548ca8d",
69
- "@dxos/react-client": "0.6.13-main.548ca8d",
70
- "@dxos/react-ui-attention": "0.6.13-main.548ca8d",
71
- "@dxos/react-ui-deck": "0.6.13-main.548ca8d",
72
- "@dxos/react-ui-card": "0.6.13-main.548ca8d",
73
- "@dxos/react-ui-editor": "0.6.13-main.548ca8d",
74
- "@dxos/react-ui-mosaic": "0.6.13-main.548ca8d",
75
- "@dxos/react-ui-stack": "0.6.13-main.548ca8d",
76
- "@dxos/util": "0.6.13-main.548ca8d"
51
+ "@dxos/app-framework": "0.6.13-staging.1e988a3",
52
+ "@dxos/async": "0.6.13-staging.1e988a3",
53
+ "@dxos/echo-schema": "0.6.13-staging.1e988a3",
54
+ "@dxos/keys": "0.6.13-staging.1e988a3",
55
+ "@dxos/local-storage": "0.6.13-staging.1e988a3",
56
+ "@dxos/invariant": "0.6.13-staging.1e988a3",
57
+ "@dxos/log": "0.6.13-staging.1e988a3",
58
+ "@dxos/plugin-attention": "0.6.13-staging.1e988a3",
59
+ "@dxos/plugin-client": "0.6.13-staging.1e988a3",
60
+ "@dxos/plugin-graph": "0.6.13-staging.1e988a3",
61
+ "@dxos/plugin-space": "0.6.13-staging.1e988a3",
62
+ "@dxos/plugin-theme": "0.6.13-staging.1e988a3",
63
+ "@dxos/plugin-settings": "0.6.13-staging.1e988a3",
64
+ "@dxos/react-client": "0.6.13-staging.1e988a3",
65
+ "@dxos/react-hooks": "0.6.13-staging.1e988a3",
66
+ "@dxos/react-ui-deck": "0.6.13-staging.1e988a3",
67
+ "@dxos/react-ui-card": "0.6.13-staging.1e988a3",
68
+ "@dxos/react-ui-editor": "0.6.13-staging.1e988a3",
69
+ "@dxos/react-ui-mosaic": "0.6.13-staging.1e988a3",
70
+ "@dxos/react-ui-stack": "0.6.13-staging.1e988a3",
71
+ "@dxos/util": "0.6.13-staging.1e988a3"
77
72
  },
78
73
  "devDependencies": {
79
74
  "@phosphor-icons/react": "^2.1.5",
@@ -81,18 +76,18 @@
81
76
  "@types/react-dom": "~18.2.0",
82
77
  "react": "~18.2.0",
83
78
  "react-dom": "~18.2.0",
84
- "vite": "5.4.7",
85
- "@dxos/random": "0.6.13-main.548ca8d",
86
- "@dxos/react-ui": "0.6.13-main.548ca8d",
87
- "@dxos/react-ui-theme": "0.6.13-main.548ca8d",
88
- "@dxos/storybook-utils": "0.6.13-main.548ca8d"
79
+ "vite": "^5.3.4",
80
+ "@dxos/random": "0.6.13-staging.1e988a3",
81
+ "@dxos/storybook-utils": "0.6.13-staging.1e988a3",
82
+ "@dxos/react-ui": "0.6.13-staging.1e988a3",
83
+ "@dxos/react-ui-theme": "0.6.13-staging.1e988a3"
89
84
  },
90
- "peerDependencies": {
85
+ "optionalDependencies": {
91
86
  "@phosphor-icons/react": "^2.1.5",
92
- "react": "~18.2.0",
93
- "react-dom": "~18.2.0",
94
- "@dxos/react-ui": "0.6.13-main.548ca8d",
95
- "@dxos/react-ui-theme": "0.6.13-main.548ca8d"
87
+ "react": "^18.0.0",
88
+ "react-dom": "^18.0.0",
89
+ "@dxos/react-ui": "0.6.13-staging.1e988a3",
90
+ "@dxos/react-ui-theme": "0.6.13-staging.1e988a3"
96
91
  },
97
92
  "publishConfig": {
98
93
  "access": "public"
@@ -2,10 +2,11 @@
2
2
  // Copyright 2023 DXOS.org
3
3
  //
4
4
 
5
- import { TextAa } from '@phosphor-icons/react';
6
- import React from 'react';
5
+ import { type IconProps, TextAa } from '@phosphor-icons/react';
6
+ import React, { type Ref } from 'react';
7
7
 
8
8
  import {
9
+ isObject,
9
10
  parseIntentPlugin,
10
11
  resolvePlugin,
11
12
  LayoutAction,
@@ -15,6 +16,7 @@ import {
15
16
  } from '@dxos/app-framework';
16
17
  import { create } from '@dxos/echo-schema';
17
18
  import { LocalStorageStore } from '@dxos/local-storage';
19
+ import { log } from '@dxos/log';
18
20
  import { parseClientPlugin } from '@dxos/plugin-client';
19
21
  import { type ActionGroup, createExtension, isActionGroup } from '@dxos/plugin-graph';
20
22
  import { SpaceAction } from '@dxos/plugin-space';
@@ -32,11 +34,12 @@ import {
32
34
  EditorViewModes,
33
35
  translations as editorTranslations,
34
36
  } from '@dxos/react-ui-editor';
37
+ import { isTileComponentProps } from '@dxos/react-ui-mosaic';
35
38
 
36
- import { MarkdownContainer, MarkdownSettings } from './components';
39
+ import { type DocumentItemProps, DocumentCard, DocumentEditor, MarkdownEditor, MarkdownSettings } from './components';
37
40
  import meta, { MARKDOWN_PLUGIN } from './meta';
38
41
  import translations from './translations';
39
- import { DocumentType, isEditorModel, TextType } from './types';
42
+ import { DocumentType, TextType } from './types';
40
43
  import {
41
44
  type MarkdownPluginProvides,
42
45
  type MarkdownSettingsProps,
@@ -45,8 +48,19 @@ import {
45
48
  } from './types';
46
49
  import { markdownExtensionPlugins, serializer } from './util';
47
50
 
48
- // TODO(burdon): Normalize active/object.
49
- const getDoc = (object: any) => (object instanceof DocumentType ? object : undefined);
51
+ /**
52
+ * Checks if an object conforms to the interface needed to render an editor.
53
+ */
54
+ const isEditorModel = (data: any): data is { id: string; text: string } => {
55
+ return (
56
+ data &&
57
+ typeof data === 'object' &&
58
+ 'id' in data &&
59
+ typeof data.id === 'string' &&
60
+ 'text' in data &&
61
+ typeof data.text === 'string'
62
+ );
63
+ };
50
64
 
51
65
  export const MarkdownPlugin = (): PluginDefinition<MarkdownPluginProvides> => {
52
66
  const settings = new LocalStorageStore<MarkdownSettingsProps>(MARKDOWN_PLUGIN, {
@@ -58,8 +72,13 @@ export const MarkdownPlugin = (): PluginDefinition<MarkdownPluginProvides> => {
58
72
 
59
73
  const state = new LocalStorageStore<MarkdownPluginState>(MARKDOWN_PLUGIN, { extensionProviders: [], viewMode: {} });
60
74
 
61
- const getViewMode = (id: string) => (id && state.values.viewMode[id]) || settings.values.defaultViewMode;
62
- const setViewMode = (id: string, viewMode: EditorViewMode) => (state.values.viewMode[id] = viewMode);
75
+ const getViewMode = (id?: string) => {
76
+ return (id && state.values.viewMode[id]) || settings.values.defaultViewMode;
77
+ };
78
+
79
+ const setViewMode = (id: string, nextViewMode: EditorViewMode) => {
80
+ state.values.viewMode[id] = nextViewMode;
81
+ };
63
82
 
64
83
  return {
65
84
  meta,
@@ -90,7 +109,7 @@ export const MarkdownPlugin = (): PluginDefinition<MarkdownPluginProvides> => {
90
109
 
91
110
  markdownExtensionPlugins(plugins).forEach((plugin) => {
92
111
  const { extensions } = plugin.provides.markdown;
93
- state.values.extensionProviders?.push(extensions);
112
+ state.values.extensionProviders.push(extensions);
94
113
  });
95
114
  },
96
115
  provides: {
@@ -98,9 +117,10 @@ export const MarkdownPlugin = (): PluginDefinition<MarkdownPluginProvides> => {
98
117
  metadata: {
99
118
  records: {
100
119
  [DocumentType.typename]: {
101
- label: (object: any) => (object instanceof DocumentType ? object.name || object.fallbackName : undefined),
120
+ label: (object: any) => (object instanceof DocumentType ? object.name ?? object.fallbackName : undefined),
102
121
  placeholder: ['document title placeholder', { ns: MARKDOWN_PLUGIN }],
103
- icon: 'ph--text-aa--regular',
122
+ icon: (props: IconProps) => <TextAa {...props} />,
123
+ iconSymbol: 'ph--text-aa--regular',
104
124
  graphProps: {
105
125
  managesAutofocus: true,
106
126
  },
@@ -114,12 +134,6 @@ export const MarkdownPlugin = (): PluginDefinition<MarkdownPluginProvides> => {
114
134
  echo: {
115
135
  schema: [DocumentType, TextType],
116
136
  },
117
- space: {
118
- onSpaceCreate: {
119
- label: ['create document label', { ns: MARKDOWN_PLUGIN }],
120
- action: MarkdownAction.CREATE,
121
- },
122
- },
123
137
  graph: {
124
138
  builder: (plugins) => {
125
139
  const client = resolvePlugin(plugins, parseClientPlugin)?.provides.client;
@@ -153,7 +167,8 @@ export const MarkdownPlugin = (): PluginDefinition<MarkdownPluginProvides> => {
153
167
  },
154
168
  properties: {
155
169
  label: ['create document label', { ns: MARKDOWN_PLUGIN }],
156
- icon: 'ph--text-aa--regular',
170
+ icon: (props: IconProps) => <TextAa {...props} />,
171
+ iconSymbol: 'ph--text-aa--regular',
157
172
  testId: 'markdownPlugin.createObject',
158
173
  },
159
174
  },
@@ -226,10 +241,13 @@ export const MarkdownPlugin = (): PluginDefinition<MarkdownPluginProvides> => {
226
241
  ],
227
242
  },
228
243
  thread: {
244
+ // TODO(Zan): How to better handle the type predicate?
229
245
  predicate: (obj) => obj instanceof DocumentType,
230
246
  createSort: (doc: DocumentType) => {
231
247
  const accessor = doc.content ? createDocAccessor(doc.content, ['content']) : undefined;
248
+
232
249
  if (!accessor) {
250
+ log.warn('No accessor found for document content.');
233
251
  return (_) => 0;
234
252
  }
235
253
 
@@ -238,45 +256,75 @@ export const MarkdownPlugin = (): PluginDefinition<MarkdownPluginProvides> => {
238
256
  return range?.start ?? Number.MAX_SAFE_INTEGER;
239
257
  };
240
258
 
241
- return (anchorA: string | undefined, anchorB: string | undefined): number => {
242
- if (anchorA === undefined || anchorB === undefined) {
243
- return 0;
244
- }
245
- const posA = getStartPosition(anchorA);
246
- const posB = getStartPosition(anchorB);
247
- return posA - posB;
248
- };
259
+ return (anchorA: string, anchorB: string) => getStartPosition(anchorA) - getStartPosition(anchorB);
249
260
  },
250
261
  },
251
262
  surface: {
252
- component: ({ data, role }) => {
263
+ component: ({ data, role, ...props }, forwardedRef) => {
264
+ const doc =
265
+ data.active instanceof DocumentType
266
+ ? data.active
267
+ : data.object instanceof DocumentType
268
+ ? data.object
269
+ : undefined;
270
+
253
271
  switch (role) {
254
272
  case 'section':
255
273
  case 'article': {
256
- // TODO(burdon): Normalize types (from FilesPlugin).
257
- const doc = getDoc(data.active) ?? getDoc(data.object);
258
- const { id, object } = isEditorModel(data.object)
259
- ? { id: data.object.id, object: data.object }
260
- : doc
261
- ? { id: fullyQualifiedId(doc), object: doc }
262
- : {};
263
-
264
- if (!id || !object) {
265
- return null;
274
+ if (doc && doc.content) {
275
+ return (
276
+ <DocumentEditor
277
+ role={role}
278
+ coordinate={data.coordinate as LayoutCoordinate}
279
+ document={doc}
280
+ extensionProviders={state.values.extensionProviders}
281
+ settings={settings.values}
282
+ scrollPastEnd
283
+ viewMode={getViewMode(fullyQualifiedId(doc))}
284
+ onViewModeChange={setViewMode}
285
+ />
286
+ );
287
+ } else if (isEditorModel(data.object)) {
288
+ return (
289
+ <MarkdownEditor
290
+ id={data.object.id}
291
+ role={role}
292
+ coordinate={data.coordinate as LayoutCoordinate}
293
+ initialValue={data.object.text}
294
+ extensionProviders={state.values.extensionProviders}
295
+ inputMode={settings.values.editorInputMode}
296
+ toolbar={settings.values.toolbar}
297
+ scrollPastEnd
298
+ viewMode={getViewMode(data.object.id)}
299
+ onViewModeChange={setViewMode}
300
+ />
301
+ );
266
302
  }
303
+ break;
304
+ }
267
305
 
268
- return (
269
- <MarkdownContainer
270
- id={id}
271
- object={object}
272
- role={role}
273
- coordinate={data.coordinate as LayoutCoordinate}
274
- settings={settings.values}
275
- extensionProviders={state.values.extensionProviders}
276
- viewMode={getViewMode(id)}
277
- onViewModeChange={setViewMode}
278
- />
279
- );
306
+ case 'card': {
307
+ if (
308
+ isObject(data.content) &&
309
+ typeof data.content.id === 'string' &&
310
+ data.content.object instanceof DocumentType
311
+ ) {
312
+ // isTileComponentProps is a type guard for these props.
313
+ // `props` will not pass this guard without transforming `data` into `item`.
314
+ const cardProps = {
315
+ ...props,
316
+ item: {
317
+ id: data.content.id,
318
+ object: data.content.object,
319
+ color: typeof data.content.color === 'string' ? data.content.color : undefined,
320
+ } as DocumentItemProps,
321
+ };
322
+
323
+ return isTileComponentProps(cardProps) ? (
324
+ <DocumentCard {...cardProps} settings={settings.values} ref={forwardedRef as Ref<HTMLDivElement>} />
325
+ ) : null;
326
+ }
327
+ break;
280
328
  }
281
329
 
282
330
  case 'settings': {
@@ -0,0 +1,107 @@
1
+ //
2
+ // Copyright 2023 DXOS.org
3
+ //
4
+
5
+ import React, { forwardRef } from 'react';
6
+
7
+ import { createDocAccessor } from '@dxos/react-client/echo';
8
+ import { DropdownMenu, Input, useThemeContext, useTranslation } from '@dxos/react-ui';
9
+ import { Card } from '@dxos/react-ui-card';
10
+ import {
11
+ createBasicExtensions,
12
+ createDataExtensions,
13
+ createThemeExtensions,
14
+ useTextEditor,
15
+ } from '@dxos/react-ui-editor';
16
+ import type { MosaicTileComponent } from '@dxos/react-ui-mosaic';
17
+ import { focusRing, mx } from '@dxos/react-ui-theme';
18
+
19
+ import { createBaseExtensions } from '../extensions';
20
+ import { MARKDOWN_PLUGIN } from '../meta';
21
+ import { type DocumentType, type MarkdownSettingsProps } from '../types';
22
+
23
+ export type DocumentItemProps = {
24
+ id: string;
25
+ object: DocumentType;
26
+ color?: string;
27
+ };
28
+
29
+ export type DocumentCardProps = {
30
+ settings: MarkdownSettingsProps;
31
+ };
32
+
33
+ /**
34
+ * @deprecated
35
+ */
36
+ // TODO(wittjosiah): Unify with DocumentEditor.
37
+ export const DocumentCard: MosaicTileComponent<DocumentItemProps, HTMLDivElement, DocumentCardProps> = forwardRef(
38
+ (
39
+ {
40
+ classNames,
41
+ isDragging,
42
+ draggableStyle,
43
+ draggableProps,
44
+ item: { id, object, color },
45
+ grow,
46
+ settings,
47
+ onSelect,
48
+ onAction,
49
+ },
50
+ forwardRef,
51
+ ) => {
52
+ const { t } = useTranslation(MARKDOWN_PLUGIN);
53
+ const { themeMode } = useThemeContext();
54
+ const { parentRef, focusAttributes } = useTextEditor(
55
+ () => ({
56
+ initialValue: object.content?.content,
57
+ extensions: [
58
+ createBasicExtensions({ placeholder: t('editor placeholder') }),
59
+ createThemeExtensions({ themeMode }),
60
+ createDataExtensions({
61
+ id: object.id,
62
+ text: object.content && createDocAccessor(object.content, ['content']),
63
+ }),
64
+ createBaseExtensions({
65
+ document: object,
66
+ debug: settings.debug,
67
+ experimental: settings.experimental,
68
+ }),
69
+ ],
70
+ }),
71
+ [object, object.content, themeMode],
72
+ );
73
+
74
+ return (
75
+ <div role='none' ref={forwardRef} className='flex w-full' style={draggableStyle}>
76
+ <Card.Root classNames={mx('w-full snap-center', color, isDragging && 'opacity-20', classNames)} grow={grow}>
77
+ <Card.Header onDoubleClick={() => onSelect?.()}>
78
+ <Card.DragHandle {...draggableProps} />
79
+ <Input.Root>
80
+ <Input.TextInput
81
+ variant='subdued'
82
+ classNames='p-0'
83
+ placeholder={t('document title placeholder')}
84
+ value={object.name}
85
+ onChange={(event) => (object.name = event.target.value)}
86
+ />
87
+ </Input.Root>
88
+ <Card.Menu>
89
+ {/* TODO(burdon): Handle events/intents? */}
90
+ <DropdownMenu.Item onClick={() => onAction?.({ id, action: 'delete' })}>
91
+ <span className='grow'>Delete</span>
92
+ </DropdownMenu.Item>
93
+ <DropdownMenu.Item onClick={() => onAction?.({ id, action: 'set-color' })}>
94
+ <span className='grow'>Change color</span>
95
+ </DropdownMenu.Item>
96
+ </Card.Menu>
97
+ </Card.Header>
98
+ <Card.Body>
99
+ <div {...focusAttributes} ref={parentRef} className={mx(focusRing, 'rounded-sm h-full p-1 text-sm')} />
100
+ </Card.Body>
101
+ </Card.Root>
102
+ </div>
103
+ );
104
+ },
105
+ );
106
+
107
+ export default DocumentCard;