@dxos/plugin-thread 0.8.1-main.ba2dec9 → 0.8.1-staging.5be625a

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 (169) hide show
  1. package/dist/lib/browser/ChannelContainer-ITIG7L7P.mjs +75 -0
  2. package/dist/lib/browser/ChannelContainer-ITIG7L7P.mjs.map +7 -0
  3. package/dist/lib/browser/{chunk-NAO3LZMZ.mjs → chunk-NOOMCX5E.mjs} +3 -2
  4. package/dist/lib/browser/chunk-NOOMCX5E.mjs.map +7 -0
  5. package/dist/lib/browser/{chunk-UPKU23DA.mjs → chunk-NRMJGYMA.mjs} +50 -43
  6. package/dist/lib/browser/chunk-NRMJGYMA.mjs.map +7 -0
  7. package/dist/lib/browser/{chunk-YK3ICB7G.mjs → chunk-SJPT347G.mjs} +19 -6
  8. package/dist/lib/browser/chunk-SJPT347G.mjs.map +7 -0
  9. package/dist/lib/browser/{chunk-BNEWNQBO.mjs → chunk-SMQYULO6.mjs} +16 -4
  10. package/dist/lib/browser/{chunk-BNEWNQBO.mjs.map → chunk-SMQYULO6.mjs.map} +4 -4
  11. package/dist/lib/browser/{chunk-636QDHE3.mjs → chunk-WBJLUUOK.mjs} +1 -1
  12. package/dist/lib/browser/{chunk-636QDHE3.mjs.map → chunk-WBJLUUOK.mjs.map} +2 -2
  13. package/dist/lib/browser/index.mjs +42 -31
  14. package/dist/lib/browser/index.mjs.map +4 -4
  15. package/dist/lib/browser/{intent-resolver-FAFQ54NP.mjs → intent-resolver-FSG3ZOIM.mjs} +65 -62
  16. package/dist/lib/browser/intent-resolver-FSG3ZOIM.mjs.map +7 -0
  17. package/dist/lib/browser/{markdown-RPYOUBVR.mjs → markdown-MYZQDQFY.mjs} +6 -6
  18. package/dist/lib/browser/markdown-MYZQDQFY.mjs.map +7 -0
  19. package/dist/lib/browser/meta.json +1 -1
  20. package/dist/lib/browser/{react-surface-Y4MUSICN.mjs → react-surface-KOYRIK3E.mjs} +25 -32
  21. package/dist/lib/browser/react-surface-KOYRIK3E.mjs.map +7 -0
  22. package/dist/lib/browser/{settings-WQTE5AEZ.mjs → settings-5CREE7BH.mjs} +3 -3
  23. package/dist/lib/browser/{state-GNFUURIC.mjs → state-HPUFZBB7.mjs} +4 -3
  24. package/dist/lib/browser/state-HPUFZBB7.mjs.map +7 -0
  25. package/dist/lib/browser/types.mjs +2 -2
  26. package/dist/lib/node/ChannelContainer-F7345XW2.cjs +99 -0
  27. package/dist/lib/node/ChannelContainer-F7345XW2.cjs.map +7 -0
  28. package/dist/lib/node/{chunk-CMEMMYDL.cjs → chunk-AXTPNGRI.cjs} +23 -10
  29. package/dist/lib/node/chunk-AXTPNGRI.cjs.map +7 -0
  30. package/dist/lib/node/{chunk-RQR5Z23G.cjs → chunk-DGV5ABT6.cjs} +52 -45
  31. package/dist/lib/node/chunk-DGV5ABT6.cjs.map +7 -0
  32. package/dist/lib/node/{chunk-AWSTZ2KN.cjs → chunk-JBOC6MIE.cjs} +30 -6
  33. package/dist/lib/node/chunk-JBOC6MIE.cjs.map +7 -0
  34. package/dist/lib/node/{chunk-F735VMTN.cjs → chunk-ONLWOUYZ.cjs} +4 -4
  35. package/dist/lib/node/{chunk-F735VMTN.cjs.map → chunk-ONLWOUYZ.cjs.map} +2 -2
  36. package/dist/lib/node/{chunk-FPWNZ6TB.cjs → chunk-VEVJBOWK.cjs} +8 -7
  37. package/dist/lib/node/chunk-VEVJBOWK.cjs.map +7 -0
  38. package/dist/lib/node/index.cjs +77 -67
  39. package/dist/lib/node/index.cjs.map +4 -4
  40. package/dist/lib/node/{intent-resolver-DVBEXJ33.cjs → intent-resolver-NBME5QSW.cjs} +79 -76
  41. package/dist/lib/node/intent-resolver-NBME5QSW.cjs.map +7 -0
  42. package/dist/lib/node/{markdown-ELRGISXE.cjs → markdown-QBQTARMD.cjs} +12 -12
  43. package/dist/lib/node/markdown-QBQTARMD.cjs.map +7 -0
  44. package/dist/lib/node/meta.json +1 -1
  45. package/dist/lib/node/{react-surface-7HLTN5XS.cjs → react-surface-ICWYXRJU.cjs} +46 -53
  46. package/dist/lib/node/react-surface-ICWYXRJU.cjs.map +7 -0
  47. package/dist/lib/node/{settings-7VQYARM5.cjs → settings-XOLYNUHH.cjs} +8 -8
  48. package/dist/lib/node/{state-TQWEZ6B3.cjs → state-JMI5ZXZI.cjs} +8 -7
  49. package/dist/lib/node/state-JMI5ZXZI.cjs.map +7 -0
  50. package/dist/lib/node/types.cjs +4 -4
  51. package/dist/lib/node/types.cjs.map +1 -1
  52. package/dist/lib/node-esm/ChannelContainer-GP6Y6JSN.mjs +76 -0
  53. package/dist/lib/node-esm/ChannelContainer-GP6Y6JSN.mjs.map +7 -0
  54. package/dist/lib/node-esm/{chunk-FXUATCLW.mjs → chunk-42F2DTMM.mjs} +1 -1
  55. package/dist/lib/node-esm/{chunk-FXUATCLW.mjs.map → chunk-42F2DTMM.mjs.map} +2 -2
  56. package/dist/lib/node-esm/{chunk-33NDMQQQ.mjs → chunk-FZXTP57V.mjs} +19 -6
  57. package/dist/lib/node-esm/chunk-FZXTP57V.mjs.map +7 -0
  58. package/dist/lib/node-esm/{chunk-CISLDOH7.mjs → chunk-TW2NME6Z.mjs} +50 -43
  59. package/dist/lib/node-esm/chunk-TW2NME6Z.mjs.map +7 -0
  60. package/dist/lib/node-esm/{chunk-ZJITX3TO.mjs → chunk-TXW5SIBN.mjs} +3 -2
  61. package/dist/lib/node-esm/chunk-TXW5SIBN.mjs.map +7 -0
  62. package/dist/lib/node-esm/{chunk-HLWJTUWZ.mjs → chunk-XQO5DGHF.mjs} +16 -4
  63. package/dist/lib/node-esm/{chunk-HLWJTUWZ.mjs.map → chunk-XQO5DGHF.mjs.map} +4 -4
  64. package/dist/lib/node-esm/index.mjs +42 -31
  65. package/dist/lib/node-esm/index.mjs.map +4 -4
  66. package/dist/lib/node-esm/{intent-resolver-DHVLBNCC.mjs → intent-resolver-QQCCKVEW.mjs} +65 -62
  67. package/dist/lib/node-esm/intent-resolver-QQCCKVEW.mjs.map +7 -0
  68. package/dist/lib/node-esm/{markdown-23OB7EZG.mjs → markdown-QO5HK24O.mjs} +6 -6
  69. package/dist/lib/node-esm/markdown-QO5HK24O.mjs.map +7 -0
  70. package/dist/lib/node-esm/meta.json +1 -1
  71. package/dist/lib/node-esm/{react-surface-AZHTTR6J.mjs → react-surface-Z4CLCKTN.mjs} +25 -32
  72. package/dist/lib/node-esm/react-surface-Z4CLCKTN.mjs.map +7 -0
  73. package/dist/lib/node-esm/{settings-SGMM7UDT.mjs → settings-32PBKVBB.mjs} +3 -3
  74. package/dist/lib/node-esm/{state-7MLR27YG.mjs → state-PSZO57LP.mjs} +4 -3
  75. package/dist/lib/node-esm/state-PSZO57LP.mjs.map +7 -0
  76. package/dist/lib/node-esm/types.mjs +2 -2
  77. package/dist/types/src/ThreadPlugin.d.ts.map +1 -1
  78. package/dist/types/src/capabilities/capabilities.d.ts +5 -0
  79. package/dist/types/src/capabilities/capabilities.d.ts.map +1 -1
  80. package/dist/types/src/capabilities/intent-resolver.d.ts.map +1 -1
  81. package/dist/types/src/capabilities/react-surface.d.ts.map +1 -1
  82. package/dist/types/src/components/ChannelContainer.d.ts +9 -0
  83. package/dist/types/src/components/ChannelContainer.d.ts.map +1 -0
  84. package/dist/types/src/components/Chat.stories.d.ts.map +1 -1
  85. package/dist/types/src/components/ChatContainer.d.ts +7 -1
  86. package/dist/types/src/components/ChatContainer.d.ts.map +1 -1
  87. package/dist/types/src/components/CommentContainer.d.ts.map +1 -1
  88. package/dist/types/src/components/Comments.stories.d.ts.map +1 -1
  89. package/dist/types/src/components/MessageContainer.d.ts +3 -2
  90. package/dist/types/src/components/MessageContainer.d.ts.map +1 -1
  91. package/dist/types/src/components/ThreadComplementary.d.ts.map +1 -1
  92. package/dist/types/src/components/index.d.ts +3 -2
  93. package/dist/types/src/components/index.d.ts.map +1 -1
  94. package/dist/types/src/components/testing.d.ts +44 -40
  95. package/dist/types/src/components/testing.d.ts.map +1 -1
  96. package/dist/types/src/events.d.ts +4 -0
  97. package/dist/types/src/events.d.ts.map +1 -0
  98. package/dist/types/src/hooks/analytics.d.ts +2 -1
  99. package/dist/types/src/hooks/analytics.d.ts.map +1 -1
  100. package/dist/types/src/index.d.ts +2 -0
  101. package/dist/types/src/index.d.ts.map +1 -1
  102. package/dist/types/src/meta.d.ts +2 -7
  103. package/dist/types/src/meta.d.ts.map +1 -1
  104. package/dist/types/src/translations.d.ts +2 -9
  105. package/dist/types/src/translations.d.ts.map +1 -1
  106. package/dist/types/src/types.d.ts +20 -4
  107. package/dist/types/src/types.d.ts.map +1 -1
  108. package/package.json +33 -30
  109. package/src/ThreadPlugin.tsx +11 -7
  110. package/src/capabilities/capabilities.ts +6 -0
  111. package/src/capabilities/intent-resolver.ts +39 -33
  112. package/src/capabilities/react-surface.tsx +6 -18
  113. package/src/capabilities/state.ts +1 -1
  114. package/src/components/ChannelContainer.tsx +80 -0
  115. package/src/components/Chat.stories.tsx +19 -9
  116. package/src/components/ChatContainer.tsx +27 -29
  117. package/src/components/CommentContainer.tsx +8 -2
  118. package/src/components/Comments.stories.tsx +2 -1
  119. package/src/components/MessageContainer.tsx +18 -14
  120. package/src/components/ThreadComplementary.tsx +5 -4
  121. package/src/components/index.ts +1 -1
  122. package/src/components/testing.ts +4 -27
  123. package/src/events.ts +11 -0
  124. package/src/extensions/threads.ts +2 -2
  125. package/src/hooks/analytics.ts +7 -2
  126. package/src/index.ts +2 -0
  127. package/src/meta.ts +2 -2
  128. package/src/translations.ts +1 -3
  129. package/src/types.ts +18 -4
  130. package/dist/lib/browser/ThreadContainer-6OP5AG2W.mjs +0 -19
  131. package/dist/lib/browser/ThreadContainer-6OP5AG2W.mjs.map +0 -7
  132. package/dist/lib/browser/chunk-NAO3LZMZ.mjs.map +0 -7
  133. package/dist/lib/browser/chunk-UPKU23DA.mjs.map +0 -7
  134. package/dist/lib/browser/chunk-VOMIDDNO.mjs +0 -15
  135. package/dist/lib/browser/chunk-VOMIDDNO.mjs.map +0 -7
  136. package/dist/lib/browser/chunk-YK3ICB7G.mjs.map +0 -7
  137. package/dist/lib/browser/intent-resolver-FAFQ54NP.mjs.map +0 -7
  138. package/dist/lib/browser/markdown-RPYOUBVR.mjs.map +0 -7
  139. package/dist/lib/browser/react-surface-Y4MUSICN.mjs.map +0 -7
  140. package/dist/lib/browser/state-GNFUURIC.mjs.map +0 -7
  141. package/dist/lib/node/ThreadContainer-LTKKLPXX.cjs +0 -45
  142. package/dist/lib/node/ThreadContainer-LTKKLPXX.cjs.map +0 -7
  143. package/dist/lib/node/chunk-AWSTZ2KN.cjs.map +0 -7
  144. package/dist/lib/node/chunk-BHFHFTHO.cjs +0 -50
  145. package/dist/lib/node/chunk-BHFHFTHO.cjs.map +0 -7
  146. package/dist/lib/node/chunk-CMEMMYDL.cjs.map +0 -7
  147. package/dist/lib/node/chunk-FPWNZ6TB.cjs.map +0 -7
  148. package/dist/lib/node/chunk-RQR5Z23G.cjs.map +0 -7
  149. package/dist/lib/node/intent-resolver-DVBEXJ33.cjs.map +0 -7
  150. package/dist/lib/node/markdown-ELRGISXE.cjs.map +0 -7
  151. package/dist/lib/node/react-surface-7HLTN5XS.cjs.map +0 -7
  152. package/dist/lib/node/state-TQWEZ6B3.cjs.map +0 -7
  153. package/dist/lib/node-esm/ThreadContainer-SV74JFRH.mjs +0 -20
  154. package/dist/lib/node-esm/ThreadContainer-SV74JFRH.mjs.map +0 -7
  155. package/dist/lib/node-esm/chunk-33NDMQQQ.mjs.map +0 -7
  156. package/dist/lib/node-esm/chunk-CISLDOH7.mjs.map +0 -7
  157. package/dist/lib/node-esm/chunk-PJPVEO7E.mjs +0 -17
  158. package/dist/lib/node-esm/chunk-PJPVEO7E.mjs.map +0 -7
  159. package/dist/lib/node-esm/chunk-ZJITX3TO.mjs.map +0 -7
  160. package/dist/lib/node-esm/intent-resolver-DHVLBNCC.mjs.map +0 -7
  161. package/dist/lib/node-esm/markdown-23OB7EZG.mjs.map +0 -7
  162. package/dist/lib/node-esm/react-surface-AZHTTR6J.mjs.map +0 -7
  163. package/dist/lib/node-esm/state-7MLR27YG.mjs.map +0 -7
  164. package/dist/types/src/components/ThreadContainer.d.ts +0 -7
  165. package/dist/types/src/components/ThreadContainer.d.ts.map +0 -1
  166. package/src/components/ThreadContainer.tsx +0 -22
  167. /package/dist/lib/browser/{settings-WQTE5AEZ.mjs.map → settings-5CREE7BH.mjs.map} +0 -0
  168. /package/dist/lib/node/{settings-7VQYARM5.cjs.map → settings-XOLYNUHH.cjs.map} +0 -0
  169. /package/dist/lib/node-esm/{settings-SGMM7UDT.mjs.map → settings-32PBKVBB.mjs.map} +0 -0
@@ -2,11 +2,9 @@ declare const _default: {
2
2
  'en-US': {
3
3
  [x: string]: {
4
4
  'typename label': string;
5
+ 'object name placeholder': string;
5
6
  'plugin name'?: undefined;
6
- 'channel name placeholder'?: undefined;
7
7
  'channel title label'?: undefined;
8
- 'delete channel label'?: undefined;
9
- 'create channel label'?: undefined;
10
8
  'message placeholder'?: undefined;
11
9
  'activity message'?: undefined;
12
10
  'anonymous label'?: undefined;
@@ -33,10 +31,7 @@ declare const _default: {
33
31
  'show unresolved label'?: undefined;
34
32
  } | {
35
33
  'plugin name': string;
36
- 'channel name placeholder': string;
37
34
  'channel title label': string;
38
- 'delete channel label': string;
39
- 'create channel label': string;
40
35
  'message placeholder': string;
41
36
  'activity message': string;
42
37
  'anonymous label': string;
@@ -62,13 +57,11 @@ declare const _default: {
62
57
  'show all label': string;
63
58
  'show unresolved label': string;
64
59
  'typename label'?: undefined;
60
+ 'object name placeholder'?: undefined;
65
61
  };
66
62
  "dxos.org/plugin/thread": {
67
63
  'plugin name': string;
68
- 'channel name placeholder': string;
69
64
  'channel title label': string;
70
- 'delete channel label': string;
71
- 'create channel label': string;
72
65
  'message placeholder': string;
73
66
  'activity message': string;
74
67
  'anonymous label': string;
@@ -1 +1 @@
1
- {"version":3,"file":"translations.d.ts","sourceRoot":"","sources":["../../../src/translations.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAQA,wBAwCE"}
1
+ {"version":3,"file":"translations.d.ts","sourceRoot":"","sources":["../../../src/translations.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAQA,wBAsCE"}
@@ -1,16 +1,30 @@
1
1
  import { S } from '@dxos/echo-schema';
2
- import { ChannelType, MessageType, ThreadType } from '@dxos/plugin-space/types';
2
+ import { ChannelType, ThreadType } from '@dxos/plugin-space/types';
3
+ import { MessageType } from '@dxos/schema';
3
4
  export declare namespace ThreadAction {
5
+ const CreateChannel_base: S.TaggedClass<CreateChannel, "dxos.org/plugin/thread/action/create-channel", {
6
+ readonly _tag: S.tag<"dxos.org/plugin/thread/action/create-channel">;
7
+ } & {
8
+ input: S.Struct<{
9
+ spaceId: typeof S.String;
10
+ name: S.optional<typeof S.String>;
11
+ }>;
12
+ output: S.Struct<{
13
+ object: typeof ChannelType;
14
+ }>;
15
+ }>;
16
+ export class CreateChannel extends CreateChannel_base {
17
+ }
4
18
  const Create_base: S.TaggedClass<Create, "dxos.org/plugin/thread/action/create", {
5
19
  readonly _tag: S.tag<"dxos.org/plugin/thread/action/create">;
6
20
  } & {
7
21
  input: S.Struct<{
8
22
  name: S.optional<typeof S.String>;
9
- cursor: S.optional<typeof S.String>;
10
- subject: S.optional<S.Schema<import("@dxos/echo-db").ReactiveEchoObject<any>, import("@dxos/echo-db").ReactiveEchoObject<any>, never>>;
23
+ cursor: typeof S.String;
24
+ subject: S.Schema<import("@dxos/echo-db").ReactiveEchoObject<any>, import("@dxos/echo-db").ReactiveEchoObject<any>, never>;
11
25
  }>;
12
26
  output: S.Struct<{
13
- object: S.Union<[typeof ChannelType, typeof ThreadType]>;
27
+ object: typeof ThreadType;
14
28
  }>;
15
29
  }>;
16
30
  export class Create extends Create_base {
@@ -86,6 +100,8 @@ export type ViewState = {
86
100
  };
87
101
  export type ViewStore = Record<SubjectId, ViewState>;
88
102
  export type ThreadState = {
103
+ /** Current channel activity. */
104
+ activities: Record<string, string | undefined>;
89
105
  /** In-memory draft threads. */
90
106
  drafts: Record<string, ThreadType[]>;
91
107
  current?: string | undefined;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/types.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,CAAC,EAAE,MAAM,mBAAmB,CAAC;AACtC,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAKhF,yBAAiB,YAAY,CAAC;;;;;;;;;;;;;IAG5B,MAAM,OAAO,MAAO,SAAQ,WAS1B;KAAG;;;;;;;;;;IAEL,MAAM,OAAO,MAAO,SAAQ,WAM1B;KAAG;;;;;;;;;IAEL,MAAM,OAAO,cAAe,SAAQ,mBAKlC;KAAG;;;;;;;;;;;IAEL,MAAM,OAAO,MAAO,SAAQ,WAO1B;KAAG;;;;;;;;;;IAGL,MAAM,OAAO,YAAa,SAAQ,iBAMhC;KAAG;;;;;;;;;;;;;IAEL,MAAM,OAAO,aAAc,SAAQ,kBASjC;KAAG;;CACN;AAED,eAAO,MAAM,oBAAoB,yBAA0B,CAAC;AAE5D,MAAM,MAAM,mBAAmB,GAAG,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAE7E,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,UAAU,CAAC;CAClB;AAED,KAAK,SAAS,GAAG,MAAM,CAAC;AACxB,MAAM,MAAM,SAAS,GAAG;IAAE,mBAAmB,EAAE,OAAO,CAAA;CAAE,CAAC;AACzD,MAAM,MAAM,SAAS,GAAG,MAAM,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;AAErD,MAAM,MAAM,WAAW,GAAG;IACxB,+BAA+B;IAC/B,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,EAAE,CAAC,CAAC;IACrC,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAC9B,CAAC"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/types.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,CAAC,EAAE,MAAM,mBAAmB,CAAC;AACtC,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAEnE,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAI3C,yBAAiB,YAAY,CAAC;;;;;;;;;;;;IAG5B,MAAM,OAAO,aAAc,SAAQ,kBASjC;KAAG;;;;;;;;;;;;;IAEL,MAAM,OAAO,MAAO,SAAQ,WAS1B;KAAG;;;;;;;;;;IAEL,MAAM,OAAO,MAAO,SAAQ,WAM1B;KAAG;;;;;;;;;IAEL,MAAM,OAAO,cAAe,SAAQ,mBAKlC;KAAG;;;;;;;;;;;IAEL,MAAM,OAAO,MAAO,SAAQ,WAO1B;KAAG;;;;;;;;;;IAGL,MAAM,OAAO,YAAa,SAAQ,iBAMhC;KAAG;;;;;;;;;;;;;IAEL,MAAM,OAAO,aAAc,SAAQ,kBASjC;KAAG;;CACN;AAED,eAAO,MAAM,oBAAoB,yBAA0B,CAAC;AAE5D,MAAM,MAAM,mBAAmB,GAAG,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAE7E,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,UAAU,CAAC;CAClB;AAED,KAAK,SAAS,GAAG,MAAM,CAAC;AACxB,MAAM,MAAM,SAAS,GAAG;IAAE,mBAAmB,EAAE,OAAO,CAAA;CAAE,CAAC;AACzD,MAAM,MAAM,SAAS,GAAG,MAAM,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;AAErD,MAAM,MAAM,WAAW,GAAG;IACxB,gCAAgC;IAChC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC;IAC/C,+BAA+B;IAC/B,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,EAAE,CAAC,CAAC;IACrC,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAC9B,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dxos/plugin-thread",
3
- "version": "0.8.1-main.ba2dec9",
3
+ "version": "0.8.1-staging.5be625a",
4
4
  "description": "DXOS Threads Surface plugin",
5
5
  "homepage": "https://dxos.org",
6
6
  "bugs": "https://github.com/dxos/dxos/issues",
@@ -39,29 +39,32 @@
39
39
  "@preact/signals-core": "^1.6.0",
40
40
  "date-fns": "^3.3.1",
41
41
  "lodash.get": "^4.4.2",
42
- "@dxos/app-framework": "0.8.1-main.ba2dec9",
43
- "@dxos/async": "0.8.1-main.ba2dec9",
44
- "@dxos/echo-schema": "0.8.1-main.ba2dec9",
45
- "@dxos/display-name": "0.8.1-main.ba2dec9",
46
- "@dxos/local-storage": "0.8.1-main.ba2dec9",
47
- "@dxos/invariant": "0.8.1-main.ba2dec9",
48
- "@dxos/log": "0.8.1-main.ba2dec9",
49
- "@dxos/live-object": "0.8.1-main.ba2dec9",
50
- "@dxos/plugin-attention": "0.8.1-main.ba2dec9",
51
- "@dxos/plugin-client": "0.8.1-main.ba2dec9",
52
- "@dxos/plugin-deck": "0.8.1-main.ba2dec9",
53
- "@dxos/plugin-markdown": "0.8.1-main.ba2dec9",
54
- "@dxos/plugin-graph": "0.8.1-main.ba2dec9",
55
- "@dxos/plugin-observability": "0.8.1-main.ba2dec9",
56
- "@dxos/plugin-space": "0.8.1-main.ba2dec9",
57
- "@dxos/react-ui-attention": "0.8.1-main.ba2dec9",
58
- "@dxos/react-client": "0.8.1-main.ba2dec9",
59
- "@dxos/react-ui-editor": "0.8.1-main.ba2dec9",
60
- "@dxos/react-ui-form": "0.8.1-main.ba2dec9",
61
- "@dxos/react-ui-tabs": "0.8.1-main.ba2dec9",
62
- "@dxos/util": "0.8.1-main.ba2dec9",
63
- "@dxos/react-ui-thread": "0.8.1-main.ba2dec9",
64
- "@dxos/react-ui-stack": "0.8.1-main.ba2dec9"
42
+ "@dxos/app-framework": "0.8.1-staging.5be625a",
43
+ "@dxos/display-name": "0.8.1-staging.5be625a",
44
+ "@dxos/async": "0.8.1-staging.5be625a",
45
+ "@dxos/invariant": "0.8.1-staging.5be625a",
46
+ "@dxos/keys": "0.8.1-staging.5be625a",
47
+ "@dxos/echo-schema": "0.8.1-staging.5be625a",
48
+ "@dxos/live-object": "0.8.1-staging.5be625a",
49
+ "@dxos/local-storage": "0.8.1-staging.5be625a",
50
+ "@dxos/plugin-attention": "0.8.1-staging.5be625a",
51
+ "@dxos/log": "0.8.1-staging.5be625a",
52
+ "@dxos/plugin-client": "0.8.1-staging.5be625a",
53
+ "@dxos/plugin-deck": "0.8.1-staging.5be625a",
54
+ "@dxos/plugin-graph": "0.8.1-staging.5be625a",
55
+ "@dxos/plugin-markdown": "0.8.1-staging.5be625a",
56
+ "@dxos/plugin-observability": "0.8.1-staging.5be625a",
57
+ "@dxos/plugin-space": "0.8.1-staging.5be625a",
58
+ "@dxos/react-client": "0.8.1-staging.5be625a",
59
+ "@dxos/react-ui-attention": "0.8.1-staging.5be625a",
60
+ "@dxos/react-ui-form": "0.8.1-staging.5be625a",
61
+ "@dxos/react-ui-menu": "0.8.1-staging.5be625a",
62
+ "@dxos/react-ui-editor": "0.8.1-staging.5be625a",
63
+ "@dxos/react-ui-stack": "0.8.1-staging.5be625a",
64
+ "@dxos/react-ui-tabs": "0.8.1-staging.5be625a",
65
+ "@dxos/react-ui-thread": "0.8.1-staging.5be625a",
66
+ "@dxos/schema": "0.8.1-staging.5be625a",
67
+ "@dxos/util": "0.8.1-staging.5be625a"
65
68
  },
66
69
  "devDependencies": {
67
70
  "@phosphor-icons/react": "^2.1.5",
@@ -71,17 +74,17 @@
71
74
  "react": "~18.2.0",
72
75
  "react-dom": "~18.2.0",
73
76
  "vite": "5.4.7",
74
- "@dxos/random": "0.8.1-main.ba2dec9",
75
- "@dxos/react-ui": "0.8.1-main.ba2dec9",
76
- "@dxos/storybook-utils": "0.8.1-main.ba2dec9",
77
- "@dxos/react-ui-theme": "0.8.1-main.ba2dec9"
77
+ "@dxos/react-ui": "0.8.1-staging.5be625a",
78
+ "@dxos/random": "0.8.1-staging.5be625a",
79
+ "@dxos/storybook-utils": "0.8.1-staging.5be625a",
80
+ "@dxos/react-ui-theme": "0.8.1-staging.5be625a"
78
81
  },
79
82
  "peerDependencies": {
80
83
  "@phosphor-icons/react": "^2.1.5",
81
84
  "react": "~18.2.0",
82
85
  "react-dom": "~18.2.0",
83
- "@dxos/react-ui": "0.8.1-main.ba2dec9",
84
- "@dxos/react-ui-theme": "0.8.1-main.ba2dec9"
86
+ "@dxos/react-ui": "0.8.1-staging.5be625a",
87
+ "@dxos/react-ui-theme": "0.8.1-staging.5be625a"
85
88
  },
86
89
  "publishConfig": {
87
90
  "access": "public"
@@ -7,11 +7,13 @@ import { ClientCapabilities, ClientEvents } from '@dxos/plugin-client';
7
7
  import { DeckCapabilities, DeckEvents } from '@dxos/plugin-deck';
8
8
  import { MarkdownEvents } from '@dxos/plugin-markdown';
9
9
  import { SpaceCapabilities, ThreadEvents } from '@dxos/plugin-space';
10
- import { ChannelType, defineObjectForm, MessageType, ThreadType } from '@dxos/plugin-space/types';
10
+ import { ChannelType, defineObjectForm, ThreadType } from '@dxos/plugin-space/types';
11
11
  import { type ReactiveEchoObject, RefArray } from '@dxos/react-client/echo';
12
12
  import { translations as threadTranslations } from '@dxos/react-ui-thread';
13
+ import { MessageType, MessageTypeV1, MessageTypeV1ToV2 } from '@dxos/schema';
13
14
 
14
15
  import { IntentResolver, Markdown, ReactSurface, ThreadState } from './capabilities';
16
+ import { ThreadEvents as LocalThreadEvents } from './events';
15
17
  import { meta, THREAD_ITEM, THREAD_PLUGIN } from './meta';
16
18
  import translations from './translations';
17
19
  import { ThreadAction } from './types';
@@ -46,10 +48,7 @@ export const ThreadPlugin = () =>
46
48
  contributes(Capabilities.Metadata, {
47
49
  id: ChannelType.typename,
48
50
  metadata: {
49
- placeholder: ['channel name placeholder', { ns: THREAD_PLUGIN }],
50
51
  icon: 'ph--chat--regular',
51
- // TODO(wittjosiah): Move out of metadata.
52
- loadReferences: async (channel: ChannelType) => await RefArray.loadAll(channel.threads ?? []),
53
52
  },
54
53
  }),
55
54
  contributes(Capabilities.Metadata, {
@@ -91,14 +90,19 @@ export const ThreadPlugin = () =>
91
90
  SpaceCapabilities.ObjectForm,
92
91
  defineObjectForm({
93
92
  objectSchema: ChannelType,
94
- getIntent: () => createIntent(ThreadAction.Create),
93
+ getIntent: (_, options) => createIntent(ThreadAction.CreateChannel, { spaceId: options.space.id }),
95
94
  }),
96
95
  ),
97
96
  }),
98
97
  defineModule({
99
98
  id: `${meta.id}/module/schema`,
100
99
  activatesOn: ClientEvents.SetupSchema,
101
- activate: () => contributes(ClientCapabilities.Schema, [ThreadType, MessageType]),
100
+ activate: () => contributes(ClientCapabilities.Schema, [ThreadType, MessageType, MessageTypeV1]),
101
+ }),
102
+ defineModule({
103
+ id: `${meta.id}/module/migration`,
104
+ activatesOn: ClientEvents.SetupMigration,
105
+ activate: () => contributes(ClientCapabilities.Migration, [MessageTypeV1ToV2]),
102
106
  }),
103
107
  defineModule({
104
108
  id: `${meta.id}/module/complementary-panel`,
@@ -128,7 +132,7 @@ export const ThreadPlugin = () =>
128
132
  id: `${meta.id}/module/react-surface`,
129
133
  activatesOn: Events.SetupReactSurface,
130
134
  // TODO(wittjosiah): Should occur before the comments thread is loaded when surfaces activation is more granular.
131
- activatesBefore: [ThreadEvents.SetupThread],
135
+ activatesBefore: [ThreadEvents.SetupThread, LocalThreadEvents.SetupActivity],
132
136
  activate: ReactSurface,
133
137
  }),
134
138
  defineModule({
@@ -3,6 +3,7 @@
3
3
  //
4
4
 
5
5
  import { defineCapability } from '@dxos/app-framework';
6
+ import { type MenuActionProperties } from '@dxos/react-ui-menu';
6
7
  import { type DeepReadonly } from '@dxos/util';
7
8
 
8
9
  import { THREAD_PLUGIN } from '../meta';
@@ -16,4 +17,9 @@ export namespace ThreadCapabilities {
16
17
  export const MutableState = defineCapability<{ state: ThreadState; getViewState: GetViewState }>(
17
18
  `${THREAD_PLUGIN}/capability/state`,
18
19
  );
20
+
21
+ export type Activity = Omit<MenuActionProperties, 'variant' | 'checked'> & {
22
+ id: string;
23
+ };
24
+ export const Activity = defineCapability<Activity>(`${THREAD_PLUGIN}/capability/activity`);
19
25
  }
@@ -10,7 +10,9 @@ import {
10
10
  LayoutAction,
11
11
  type PluginsContext,
12
12
  } from '@dxos/app-framework';
13
- import { Ref } from '@dxos/echo-schema';
13
+ import { ObjectId, Ref } from '@dxos/echo-schema';
14
+ import { DXN, QueueSubspaceTags } from '@dxos/keys';
15
+ import { refFromDXN } from '@dxos/live-object';
14
16
  import { log } from '@dxos/log';
15
17
  import { ObservabilityAction } from '@dxos/plugin-observability/types';
16
18
  import { ChannelType, ThreadType } from '@dxos/plugin-space/types';
@@ -22,44 +24,48 @@ import { ThreadAction } from '../types';
22
24
 
23
25
  export default (context: PluginsContext) =>
24
26
  contributes(Capabilities.IntentResolver, [
27
+ createResolver({
28
+ intent: ThreadAction.CreateChannel,
29
+ resolve: ({ spaceId, name }) => ({
30
+ data: {
31
+ object: create(ChannelType, {
32
+ name,
33
+ queue: refFromDXN(new DXN(DXN.kind.QUEUE, [QueueSubspaceTags.DATA, spaceId, ObjectId.random()])),
34
+ }),
35
+ },
36
+ }),
37
+ }),
25
38
  createResolver({
26
39
  intent: ThreadAction.Create,
27
40
  resolve: ({ name, cursor, subject }) => {
28
- if (cursor && subject) {
29
- // Seed the threads array if it does not exist.
30
- if (subject?.threads === undefined) {
31
- try {
32
- // Static schema will throw an error if subject does not support threads array property.
33
- subject.threads = [];
34
- } catch (err) {
35
- log.error('Subject does not support threads array', { typename: subject?.typename });
36
- return;
37
- }
38
- }
39
-
40
- const { state } = context.requestCapability(ThreadCapabilities.MutableState);
41
- const subjectId = fullyQualifiedId(subject);
42
- const thread = create(ThreadType, { name, anchor: cursor, messages: [], status: 'staged' });
43
- const draft = state.drafts[subjectId];
44
- if (draft) {
45
- draft.push(thread);
46
- } else {
47
- state.drafts[subjectId] = [thread];
41
+ // Seed the threads array if it does not exist.
42
+ if (subject?.threads === undefined) {
43
+ try {
44
+ // Static schema will throw an error if subject does not support threads array property.
45
+ subject.threads = [];
46
+ } catch (err) {
47
+ log.error('Subject does not support threads array', { typename: subject?.typename });
48
+ return;
48
49
  }
50
+ }
49
51
 
50
- return {
51
- data: { object: thread },
52
- intents: [
53
- createIntent(ThreadAction.Select, { current: fullyQualifiedId(thread) }),
54
- createIntent(LayoutAction.UpdateComplementary, { part: 'complementary', subject: 'comments' }),
55
- ],
56
- };
52
+ const { state } = context.requestCapability(ThreadCapabilities.MutableState);
53
+ const subjectId = fullyQualifiedId(subject);
54
+ const thread = create(ThreadType, { name, anchor: cursor, messages: [], status: 'staged' });
55
+ const draft = state.drafts[subjectId];
56
+ if (draft) {
57
+ draft.push(thread);
57
58
  } else {
58
- // TODO(wittjosiah): Create separate intent for channel creation.
59
- return {
60
- data: { object: create(ChannelType, { threads: [makeRef(create(ThreadType, { messages: [] }))] }) },
61
- };
59
+ state.drafts[subjectId] = [thread];
62
60
  }
61
+
62
+ return {
63
+ data: { object: thread },
64
+ intents: [
65
+ createIntent(ThreadAction.Select, { current: fullyQualifiedId(thread) }),
66
+ createIntent(LayoutAction.UpdateComplementary, { part: 'complementary', subject: 'comments' }),
67
+ ],
68
+ };
63
69
  },
64
70
  }),
65
71
  createResolver({
@@ -220,7 +226,7 @@ export default (context: PluginsContext) =>
220
226
  ],
221
227
  };
222
228
  } else {
223
- if (!messageIndex || !message) {
229
+ if (messageIndex === undefined || !message) {
224
230
  return;
225
231
  }
226
232
 
@@ -10,7 +10,7 @@ import { SettingsStore } from '@dxos/local-storage';
10
10
  import { ChannelType, type ThreadType } from '@dxos/plugin-space/types';
11
11
  import { getSpace } from '@dxos/react-client/echo';
12
12
 
13
- import { ThreadContainer, ThreadComplementary, ThreadSettings } from '../components';
13
+ import { ChannelContainer, ThreadComplementary, ThreadSettings } from '../components';
14
14
  import { THREAD_PLUGIN } from '../meta';
15
15
  import { type ThreadSettingsProps } from '../types';
16
16
 
@@ -19,25 +19,13 @@ export default () =>
19
19
  createSurface({
20
20
  id: `${THREAD_PLUGIN}/channel`,
21
21
  role: 'article',
22
- filter: (data): data is { subject: ChannelType } =>
23
- data.subject instanceof ChannelType && !!data.subject.threads[0],
24
- component: ({ data, role }) => {
22
+ filter: (data): data is { subject: ChannelType } => data.subject instanceof ChannelType,
23
+ component: ({ data: { subject: channel }, role }) => {
25
24
  const layout = useLayout();
26
- const channel = data.subject;
27
- void channel.threads[0].load();
28
- const thread = channel.threads[0].target;
29
- if (!thread) {
30
- return null;
31
- }
32
-
33
25
  const currentPosition = layout.active.findIndex((id) => id === channel.id);
34
- if (currentPosition > 0) {
35
- const objectToTheLeft = layout.active[currentPosition - 1];
36
- const context = getSpace(channel)?.db.getObjectById(objectToTheLeft);
37
- return <ThreadContainer role={role} thread={thread} context={context} />;
38
- }
39
-
40
- return <ThreadContainer role={role} thread={thread} />;
26
+ const objectToTheLeft = layout.active[currentPosition - 1];
27
+ const context = currentPosition > 0 ? getSpace(channel)?.db.getObjectById(objectToTheLeft) : undefined;
28
+ return <ChannelContainer role={role} channel={channel} context={context} />;
41
29
  },
42
30
  }),
43
31
  createSurface({
@@ -11,7 +11,7 @@ import { type ThreadState, type ViewStore } from '../types';
11
11
  const initialViewState = { showResolvedThreads: false };
12
12
 
13
13
  export default () => {
14
- const state = create<ThreadState>({ drafts: {} });
14
+ const state = create<ThreadState>({ activities: {}, drafts: {} });
15
15
  const viewStore = create<ViewStore>({});
16
16
 
17
17
  const getViewState = (subjectId: string) => {
@@ -0,0 +1,80 @@
1
+ //
2
+ // Copyright 2024 DXOS.org
3
+ //
4
+
5
+ import React, { useCallback, type ComponentProps } from 'react';
6
+
7
+ import { Surface, useCapabilities, useCapability } from '@dxos/app-framework';
8
+ import { type NodeArg } from '@dxos/plugin-graph';
9
+ import { type ChannelType } from '@dxos/plugin-space/types';
10
+ import { fullyQualifiedId, getSpace } from '@dxos/react-client/echo';
11
+ import { createEditorActionGroup } from '@dxos/react-ui-editor';
12
+ import {
13
+ createMenuAction,
14
+ MenuProvider,
15
+ ToolbarMenu,
16
+ type ToolbarMenuActionGroupProperties,
17
+ useMenuActions,
18
+ type MenuAction,
19
+ } from '@dxos/react-ui-menu';
20
+ import { StackItem } from '@dxos/react-ui-stack';
21
+
22
+ import { ChatContainer } from './ChatContainer';
23
+ import { ThreadCapabilities } from '../capabilities';
24
+
25
+ const useActivitiesMenu = (activities: ThreadCapabilities.Activity[], activity: string | undefined) => {
26
+ return useMenuActions(() => ({
27
+ nodes: [
28
+ createEditorActionGroup('activities', {
29
+ variant: 'toggleGroup',
30
+ selectCardinality: 'single',
31
+ value: activity,
32
+ } as ToolbarMenuActionGroupProperties) as NodeArg<any>,
33
+ ...activities.map(({ id, ...properties }) =>
34
+ createMenuAction(id, {
35
+ ...properties,
36
+ checked: true,
37
+ }),
38
+ ),
39
+ ],
40
+ edges: [
41
+ { source: 'root', target: 'activities' },
42
+ ...activities.map((activity) => ({ source: 'activities', target: activity.id })),
43
+ ],
44
+ }));
45
+ };
46
+
47
+ const ChannelContainer = ({
48
+ role,
49
+ channel,
50
+ context,
51
+ }: Pick<ComponentProps<typeof ChatContainer>, 'context'> & { channel: ChannelType; role: string }) => {
52
+ const { state } = useCapability(ThreadCapabilities.MutableState);
53
+ const currentActivity = state.activities[channel.id];
54
+ const activities = useCapabilities(ThreadCapabilities.Activity);
55
+ const menu = useActivitiesMenu(activities, currentActivity);
56
+ const handleAction = useCallback(
57
+ (action: MenuAction) => (state.activities[channel.id] = currentActivity === action.id ? undefined : action.id),
58
+ [currentActivity],
59
+ );
60
+
61
+ const space = getSpace(channel);
62
+ if (!space) {
63
+ return null;
64
+ }
65
+
66
+ return (
67
+ <StackItem.Content toolbar>
68
+ <MenuProvider {...menu} onAction={handleAction} attendableId={fullyQualifiedId(channel)}>
69
+ <ToolbarMenu />
70
+ </MenuProvider>
71
+ {currentActivity ? (
72
+ <Surface role={`channel-activity--${currentActivity}`} data={{ subject: channel }} />
73
+ ) : (
74
+ <ChatContainer space={space} dxn={channel.queue.dxn} context={context} />
75
+ )}
76
+ </StackItem.Content>
77
+ );
78
+ };
79
+
80
+ export default ChannelContainer;
@@ -7,19 +7,22 @@ import '@dxos-theme';
7
7
  import { type Meta } from '@storybook/react';
8
8
  import React, { useEffect, useState } from 'react';
9
9
 
10
- import { Capabilities, contributes, createSurface } from '@dxos/app-framework';
10
+ import { Capabilities, contributes, createSurface, IntentPlugin } from '@dxos/app-framework';
11
11
  import { withPluginManager } from '@dxos/app-framework/testing';
12
- import { MessageType, ThreadType } from '@dxos/plugin-space/types';
12
+ import { ObjectId } from '@dxos/echo-schema';
13
+ import { DXN, QueueSubspaceTags } from '@dxos/keys';
14
+ import { refFromDXN } from '@dxos/live-object';
15
+ import { ChannelType, ThreadType } from '@dxos/plugin-space/types';
13
16
  import { faker } from '@dxos/random';
14
17
  import { useClient } from '@dxos/react-client';
15
- import { type Space } from '@dxos/react-client/echo';
18
+ import { create, type Space } from '@dxos/react-client/echo';
16
19
  import { useIdentity } from '@dxos/react-client/halo';
17
20
  import { withClientProvider } from '@dxos/react-client/testing';
18
21
  import { Thread } from '@dxos/react-ui-thread';
22
+ import { MessageType } from '@dxos/schema';
19
23
  import { withLayout, withTheme } from '@dxos/storybook-utils';
20
24
 
21
25
  import { ChatContainer } from './ChatContainer';
22
- import { createChatThread } from './testing';
23
26
  import translations from '../translations';
24
27
 
25
28
  faker.seed(1);
@@ -28,25 +31,31 @@ const Story = () => {
28
31
  const client = useClient();
29
32
  const identity = useIdentity();
30
33
  const [space, setSpace] = useState<Space>();
31
- const [thread, setThread] = useState<ThreadType | null>();
34
+ const [channel, setChannel] = useState<ChannelType | null>();
32
35
 
33
36
  useEffect(() => {
34
37
  if (identity) {
35
38
  setTimeout(async () => {
36
39
  const space = await client.spaces.create();
37
- const thread = space.db.add(createChatThread(identity));
40
+ const channel = space.db.add(
41
+ create(ChannelType, {
42
+ queue: refFromDXN(new DXN(DXN.kind.QUEUE, [QueueSubspaceTags.DATA, space.id, ObjectId.random()])),
43
+ }),
44
+ );
38
45
  setSpace(space);
39
- setThread(thread);
46
+ setChannel(channel);
40
47
  });
41
48
  }
42
49
  }, [identity]);
43
50
 
44
- if (!identity || !thread) {
51
+ if (!identity || !channel || !space) {
45
52
  return null;
46
53
  }
47
54
 
48
55
  return (
49
- <main className='max-is-prose mli-auto bs-dvh overflow-hidden'>{space && <ChatContainer thread={thread} />}</main>
56
+ <main className='max-is-prose mli-auto bs-dvh overflow-hidden'>
57
+ <ChatContainer space={space} dxn={channel.queue.dxn} />
58
+ </main>
50
59
  );
51
60
  };
52
61
 
@@ -58,6 +67,7 @@ const meta: Meta = {
58
67
  render: () => <Story />,
59
68
  decorators: [
60
69
  withPluginManager({
70
+ plugins: [IntentPlugin()],
61
71
  capabilities: [
62
72
  contributes(
63
73
  Capabilities.ReactSurface,