@dxos/plugin-thread 0.6.14-staging.8758a12 → 0.6.14-staging.9b873ce

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 (51) hide show
  1. package/dist/lib/browser/{ThreadArticle-6RFOFTU2.mjs → ThreadArticle-IGDTPV3Y.mjs} +3 -3
  2. package/dist/lib/browser/{ThreadMain-45OFO3G6.mjs → ThreadMain-ECGVEYNG.mjs} +3 -3
  3. package/dist/lib/browser/{chunk-YQUONHZJ.mjs → chunk-3VHVY4H7.mjs} +2 -2
  4. package/dist/lib/browser/{chunk-YLYCGZ62.mjs → chunk-ENERBDYI.mjs} +2 -2
  5. package/dist/lib/browser/{chunk-YLYCGZ62.mjs.map → chunk-ENERBDYI.mjs.map} +1 -1
  6. package/dist/lib/browser/{chunk-OTCR7JTS.mjs → chunk-OD3DA5BE.mjs} +6 -6
  7. package/dist/lib/browser/chunk-OD3DA5BE.mjs.map +7 -0
  8. package/dist/lib/browser/index.mjs +5 -5
  9. package/dist/lib/browser/meta.json +1 -1
  10. package/dist/lib/browser/meta.mjs +1 -1
  11. package/dist/lib/browser/types.mjs +2 -2
  12. package/dist/lib/node/{ThreadArticle-IUK2EECC.cjs → ThreadArticle-LV3HHHJT.cjs} +7 -7
  13. package/dist/lib/node/{ThreadMain-CXIQPH4H.cjs → ThreadMain-ZS2PYBRX.cjs} +7 -7
  14. package/dist/lib/node/{chunk-LGA276VA.cjs → chunk-ANGUPCW3.cjs} +6 -6
  15. package/dist/lib/node/{chunk-XOW5SL5M.cjs → chunk-GXREFXBX.cjs} +13 -13
  16. package/dist/lib/node/chunk-GXREFXBX.cjs.map +7 -0
  17. package/dist/lib/node/{chunk-YWFYN3OY.cjs → chunk-IC2NICNC.cjs} +5 -5
  18. package/dist/lib/node/{chunk-YWFYN3OY.cjs.map → chunk-IC2NICNC.cjs.map} +1 -1
  19. package/dist/lib/node/index.cjs +56 -56
  20. package/dist/lib/node/meta.cjs +4 -4
  21. package/dist/lib/node/meta.cjs.map +1 -1
  22. package/dist/lib/node/meta.json +1 -1
  23. package/dist/lib/node/types.cjs +3 -3
  24. package/dist/lib/node/types.cjs.map +1 -1
  25. package/dist/lib/node-esm/{ThreadArticle-OA3T4XFJ.mjs → ThreadArticle-3GEYBQKP.mjs} +3 -3
  26. package/dist/lib/node-esm/{ThreadMain-VXFO6JL6.mjs → ThreadMain-7ZEIVEV6.mjs} +3 -3
  27. package/dist/lib/node-esm/{chunk-SSEJYCYQ.mjs → chunk-7QRGG25F.mjs} +2 -2
  28. package/dist/lib/node-esm/{chunk-SSEJYCYQ.mjs.map → chunk-7QRGG25F.mjs.map} +1 -1
  29. package/dist/lib/node-esm/{chunk-5R5QKQY4.mjs → chunk-7S5K2747.mjs} +6 -6
  30. package/dist/lib/node-esm/chunk-7S5K2747.mjs.map +7 -0
  31. package/dist/lib/node-esm/{chunk-3CZBPOEH.mjs → chunk-CWPZCZ2F.mjs} +2 -2
  32. package/dist/lib/node-esm/index.mjs +5 -5
  33. package/dist/lib/node-esm/meta.json +1 -1
  34. package/dist/lib/node-esm/meta.mjs +1 -1
  35. package/dist/lib/node-esm/types.mjs +2 -2
  36. package/package.json +29 -29
  37. package/src/components/ChatContainer.tsx +4 -4
  38. package/src/components/MessageContainer.tsx +1 -1
  39. package/src/meta.ts +1 -1
  40. package/dist/lib/browser/chunk-OTCR7JTS.mjs.map +0 -7
  41. package/dist/lib/node/chunk-XOW5SL5M.cjs.map +0 -7
  42. package/dist/lib/node-esm/chunk-5R5QKQY4.mjs.map +0 -7
  43. /package/dist/lib/browser/{ThreadArticle-6RFOFTU2.mjs.map → ThreadArticle-IGDTPV3Y.mjs.map} +0 -0
  44. /package/dist/lib/browser/{ThreadMain-45OFO3G6.mjs.map → ThreadMain-ECGVEYNG.mjs.map} +0 -0
  45. /package/dist/lib/browser/{chunk-YQUONHZJ.mjs.map → chunk-3VHVY4H7.mjs.map} +0 -0
  46. /package/dist/lib/node/{ThreadArticle-IUK2EECC.cjs.map → ThreadArticle-LV3HHHJT.cjs.map} +0 -0
  47. /package/dist/lib/node/{ThreadMain-CXIQPH4H.cjs.map → ThreadMain-ZS2PYBRX.cjs.map} +0 -0
  48. /package/dist/lib/node/{chunk-LGA276VA.cjs.map → chunk-ANGUPCW3.cjs.map} +0 -0
  49. /package/dist/lib/node-esm/{ThreadArticle-OA3T4XFJ.mjs.map → ThreadArticle-3GEYBQKP.mjs.map} +0 -0
  50. /package/dist/lib/node-esm/{ThreadMain-VXFO6JL6.mjs.map → ThreadMain-7ZEIVEV6.mjs.map} +0 -0
  51. /package/dist/lib/node-esm/{chunk-3CZBPOEH.mjs.map → chunk-CWPZCZ2F.mjs.map} +0 -0
@@ -26,8 +26,8 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
26
26
  mod
27
27
  ));
28
28
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
29
- var chunk_XOW5SL5M_exports = {};
30
- __export(chunk_XOW5SL5M_exports, {
29
+ var chunk_GXREFXBX_exports = {};
30
+ __export(chunk_GXREFXBX_exports, {
31
31
  ChatContainer: () => ChatContainer,
32
32
  ChatHeading: () => ChatHeading,
33
33
  MessageContainer: () => MessageContainer,
@@ -37,8 +37,8 @@ __export(chunk_XOW5SL5M_exports, {
37
37
  useOnEditAnalytics: () => useOnEditAnalytics,
38
38
  useStatus: () => useStatus
39
39
  });
40
- module.exports = __toCommonJS(chunk_XOW5SL5M_exports);
41
- var import_chunk_YWFYN3OY = require("./chunk-YWFYN3OY.cjs");
40
+ module.exports = __toCommonJS(chunk_GXREFXBX_exports);
41
+ var import_chunk_IC2NICNC = require("./chunk-IC2NICNC.cjs");
42
42
  var import_react = require("react");
43
43
  var import_react2 = require("react");
44
44
  var import_app_framework = require("@dxos/app-framework");
@@ -51,8 +51,8 @@ var import_types = require("@dxos/plugin-space/types");
51
51
  var import_echo2 = require("@dxos/react-client/echo");
52
52
  var import_halo = require("@dxos/react-client/halo");
53
53
  var import_react_ui2 = require("@dxos/react-ui");
54
- var import_react_ui_deck = require("@dxos/react-ui-deck");
55
54
  var import_react_ui_editor = require("@dxos/react-ui-editor");
55
+ var import_react_ui_stack = require("@dxos/react-ui-stack");
56
56
  var import_react_ui_theme = require("@dxos/react-ui-theme");
57
57
  var import_react_ui_thread = require("@dxos/react-ui-thread");
58
58
  var import_util = require("@dxos/util");
@@ -184,7 +184,7 @@ var MessageContainer = ({ message, members, onDelete }) => {
184
184
  message,
185
185
  onDelete
186
186
  ]);
187
- const { t } = (0, import_react_ui3.useTranslation)(import_chunk_YWFYN3OY.THREAD_PLUGIN);
187
+ const { t } = (0, import_react_ui3.useTranslation)(import_chunk_IC2NICNC.THREAD_PLUGIN);
188
188
  const editLabel = t(editing ? "save message label" : "edit message label");
189
189
  const deleteLabel = t("delete message label");
190
190
  return /* @__PURE__ */ import_react5.default.createElement(import_react_ui_thread2.MessageRoot, {
@@ -239,7 +239,7 @@ var MessagePart = ({ part }) => {
239
239
  return /* @__PURE__ */ import_react5.default.createElement(import_react_ui_mosaic.Mosaic.Container, {
240
240
  id: part.id
241
241
  }, /* @__PURE__ */ import_react5.default.createElement(import_react_ui_mosaic.Mosaic.DraggableTile, {
242
- type: import_chunk_YWFYN3OY.THREAD_ITEM,
242
+ type: import_chunk_IC2NICNC.THREAD_ITEM,
243
243
  path: part.id,
244
244
  item: part,
245
245
  Component: MessageBlockObjectTile
@@ -295,7 +295,7 @@ var TextboxBlock = ({ message, isAuthor, editing }) => {
295
295
  });
296
296
  };
297
297
  var MessageBlockObjectTile = /* @__PURE__ */ (0, import_react5.forwardRef)(({ draggableStyle, draggableProps, item, active, ref: _ref, ...props }, forwardedRef) => {
298
- let title = item.name ?? item.title ?? item.__typename ?? "Object";
298
+ let title = item.name ?? item.title ?? item.type ?? "Object";
299
299
  if (typeof title !== "string") {
300
300
  title = title?.content ?? "";
301
301
  }
@@ -316,16 +316,16 @@ var MessageBlockObjectTile = /* @__PURE__ */ (0, import_react5.forwardRef)(({ dr
316
316
  }));
317
317
  });
318
318
  var ChatHeading = ({ attendableId }) => {
319
- const { t } = (0, import_react_ui2.useTranslation)(import_chunk_YWFYN3OY.THREAD_PLUGIN);
319
+ const { t } = (0, import_react_ui2.useTranslation)(import_chunk_IC2NICNC.THREAD_PLUGIN);
320
320
  return /* @__PURE__ */ import_react3.default.createElement("div", {
321
321
  role: "none",
322
322
  className: "flex items-center"
323
- }, /* @__PURE__ */ import_react3.default.createElement(import_react_ui_deck.PlankHeading.Button, {
323
+ }, /* @__PURE__ */ import_react3.default.createElement(import_react_ui_stack.StackItem.SigilButton, {
324
324
  attendableId
325
325
  }, /* @__PURE__ */ import_react3.default.createElement(import_react_ui2.Icon, {
326
326
  icon: "ph--chat--regular",
327
327
  size: 5
328
- })), /* @__PURE__ */ import_react3.default.createElement(import_react_ui_deck.PlankHeading.Label, {
328
+ })), /* @__PURE__ */ import_react3.default.createElement(import_react_ui_stack.StackItem.HeadingLabel, {
329
329
  attendableId
330
330
  }, t("chat heading")));
331
331
  };
@@ -334,7 +334,7 @@ var ChatContainer = ({ thread, context, current, autoFocusTextbox }) => {
334
334
  const space = (0, import_echo2.getSpace)(thread);
335
335
  const members = (0, import_echo2.useMembers)(space?.key);
336
336
  const activity = useStatus(space, (0, import_echo2.fullyQualifiedId)(thread));
337
- const { t } = (0, import_react_ui2.useTranslation)(import_chunk_YWFYN3OY.THREAD_PLUGIN);
337
+ const { t } = (0, import_react_ui2.useTranslation)(import_chunk_IC2NICNC.THREAD_PLUGIN);
338
338
  const [_count, _setCount] = (0, import_react3.useState)(0);
339
339
  const rerenderEditor = () => _setCount((count) => count + 1);
340
340
  const [autoFocus, setAutoFocus] = (0, import_react3.useState)(autoFocusTextbox);
@@ -428,4 +428,4 @@ var ChatContainer = ({ thread, context, current, autoFocusTextbox }) => {
428
428
  useOnEditAnalytics,
429
429
  useStatus
430
430
  });
431
- //# sourceMappingURL=chunk-XOW5SL5M.cjs.map
431
+ //# sourceMappingURL=chunk-GXREFXBX.cjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/hooks/useStatus.ts", "../../../src/hooks/analytics.ts", "../../../src/components/ChatContainer.tsx", "../../../src/components/MessageContainer.tsx", "../../../src/components/command-extension.ts", "../../../src/util.ts"],
4
+ "sourcesContent": ["//\n// Copyright 2024 DXOS.org\n//\n\nimport { useEffect, useState } from 'react';\n\nimport { type Space } from '@dxos/react-client/echo';\n\n// TODO(burdon): Generalize and factor out.\nexport const useStatus = (space?: Space, channel?: string) => {\n const [processing, setProcessing] = useState(false);\n useEffect(() => {\n if (!space || !channel) {\n return;\n }\n\n const unsubscribe = space.listen(`status/${channel}`, (status) => {\n const { event } = status.payload ?? {};\n setProcessing(event === 'processing');\n });\n\n const t = setInterval(() => {\n setProcessing((prev: any) => {\n if (typeof prev?.ts === 'number' && Date.now() - prev.ts > 30_000) {\n return undefined;\n } else {\n return prev;\n }\n });\n }, 1_000);\n\n return () => {\n unsubscribe();\n clearInterval(t);\n };\n }, [space, channel]);\n\n return processing;\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { useCallback } from 'react';\n\nimport { useIntentDispatcher } from '@dxos/app-framework';\nimport { type ReactiveObject } from '@dxos/echo-schema';\nimport { ObservabilityAction } from '@dxos/plugin-observability/meta';\nimport { getSpace } from '@dxos/react-client/echo';\nimport { useOnTransition } from '@dxos/react-ui';\n\nexport const useAnalyticsCallback = (spaceId: string | undefined, name: string, meta?: any) => {\n const dispatch = useIntentDispatcher();\n\n return useCallback(\n (dynamicMeta?: any) => {\n void dispatch({\n action: ObservabilityAction.SEND_EVENT,\n data: {\n name,\n properties: { ...meta, ...dynamicMeta, spaceId },\n },\n });\n },\n [dispatch, name, meta, spaceId],\n );\n};\n\nexport const useOnEditAnalytics = (message: ReactiveObject<any>, editing: boolean) => {\n const space = getSpace(message);\n\n const onEditAnalytics = useAnalyticsCallback(space?.id, 'threads.comment-edited', {\n messageId: message.id,\n messageLength: message.text.length,\n });\n\n useOnTransition(editing, true, false, onEditAnalytics);\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport React, { useLayoutEffect, useMemo, useRef, useState } from 'react';\n\nimport { create } from '@dxos/echo-schema';\nimport { MessageType } from '@dxos/plugin-space/types';\nimport { fullyQualifiedId, getSpace, useMembers } from '@dxos/react-client/echo';\nimport { useIdentity } from '@dxos/react-client/halo';\nimport { Icon, ScrollArea, useThemeContext, useTranslation } from '@dxos/react-ui';\nimport { createBasicExtensions, createThemeExtensions, listener } from '@dxos/react-ui-editor';\nimport { StackItem } from '@dxos/react-ui-stack';\nimport { mx } from '@dxos/react-ui-theme';\nimport { MessageTextbox, type MessageTextboxProps, Thread, ThreadFooter, threadLayout } from '@dxos/react-ui-thread';\nimport { nonNullable } from '@dxos/util';\n\nimport { MessageContainer } from './MessageContainer';\nimport { command } from './command-extension';\nimport { type ThreadContainerProps } from './types';\nimport { useStatus } from '../hooks';\nimport { THREAD_PLUGIN } from '../meta';\nimport { getMessageMetadata } from '../util';\n\nexport const ChatHeading = ({ attendableId }: { attendableId?: string }) => {\n const { t } = useTranslation(THREAD_PLUGIN);\n return (\n <div role='none' className='flex items-center'>\n <StackItem.SigilButton attendableId={attendableId}>\n <Icon icon='ph--chat--regular' size={5} />\n </StackItem.SigilButton>\n <StackItem.HeadingLabel attendableId={attendableId}>{t('chat heading')}</StackItem.HeadingLabel>\n </div>\n );\n};\n\nexport const ChatContainer = ({ thread, context, current, autoFocusTextbox }: ThreadContainerProps) => {\n const identity = useIdentity()!;\n const space = getSpace(thread);\n const members = useMembers(space?.key);\n const activity = useStatus(space, fullyQualifiedId(thread));\n const { t } = useTranslation(THREAD_PLUGIN);\n // TODO(wittjosiah): This is a hack to reset the editor after a message is sent.\n const [_count, _setCount] = useState(0);\n const rerenderEditor = () => _setCount((count) => count + 1);\n const [autoFocus, setAutoFocus] = useState(autoFocusTextbox);\n const threadScrollRef = useRef<HTMLDivElement | null>(null);\n const { themeMode } = useThemeContext();\n\n const textboxMetadata = getMessageMetadata(fullyQualifiedId(thread), identity);\n const messageRef = useRef('');\n const extensions = useMemo(\n () => [\n createBasicExtensions({ placeholder: t('message placeholder') }),\n createThemeExtensions({ themeMode }),\n listener({ onChange: (text) => (messageRef.current = text) }),\n command,\n ],\n [themeMode, _count],\n );\n\n // TODO(thure): Factor out.\n // TODO(thure): `flex-col-reverse` does not work to start the container scrolled to the end while also using\n // `ScrollArea`. This is the least-bad way I found to scroll to the end on mount. Note that 0ms was insufficient\n // for the desired effect; this is likely hardware-dependent and should be reevaluated.\n const scrollToEnd = (behavior: ScrollBehavior) =>\n setTimeout(() => threadScrollRef.current?.scrollIntoView({ behavior, block: 'end' }), 10);\n\n useLayoutEffect(() => {\n scrollToEnd('instant');\n }, []);\n\n // TODO(burdon): Change to model.\n const handleCreate: MessageTextboxProps['onSend'] = () => {\n if (!messageRef.current?.length) {\n return false;\n }\n\n thread.messages.push(\n create(MessageType, {\n sender: { identityKey: identity.identityKey.toHex() },\n timestamp: new Date().toISOString(),\n text: messageRef.current,\n context,\n }),\n );\n\n messageRef.current = '';\n setAutoFocus(true);\n scrollToEnd('smooth');\n rerenderEditor();\n return true;\n };\n\n const handleDelete = (id: string) => {\n const messageIndex = thread.messages.filter(nonNullable).findIndex((message) => message.id === id);\n if (messageIndex !== -1) {\n thread.messages.splice(messageIndex, 1);\n }\n };\n\n return (\n <Thread\n current={current}\n id={fullyQualifiedId(thread)}\n classNames='bs-full grid-rows-[1fr_min-content_min-content] overflow-hidden transition-[padding-block-end] [[data-sidebar-inline-start-state=open]_&]:lg:pbe-0'\n >\n <ScrollArea.Root classNames='col-span-2'>\n <ScrollArea.Viewport classNames='overflow-anchored after:overflow-anchor after:block after:bs-px after:-mbs-px [&>div]:min-bs-full [&>div]:!grid [&>div]:grid-rows-[1fr_0]'>\n <div role='none' className={mx(threadLayout, 'place-self-end')}>\n {thread.messages.filter(nonNullable).map((message) => (\n <MessageContainer key={message.id} message={message} members={members} onDelete={handleDelete} />\n ))}\n </div>\n {/* NOTE(thure): This can’t also be the `overflow-anchor` because `ScrollArea` injects an interceding node that contains this necessary ref’d element. */}\n <div role='none' className='bs-px -mbs-px' ref={threadScrollRef} />\n <ScrollArea.Scrollbar>\n <ScrollArea.Thumb />\n </ScrollArea.Scrollbar>\n </ScrollArea.Viewport>\n </ScrollArea.Root>\n <MessageTextbox extensions={extensions} autoFocus={autoFocus} onSend={handleCreate} {...textboxMetadata} />\n <ThreadFooter activity={activity}>{t('activity message')}</ThreadFooter>\n </Thread>\n );\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { EditorView } from '@codemirror/view';\nimport { Check, PencilSimple, X } from '@phosphor-icons/react';\nimport React, { forwardRef, useCallback, useEffect, useRef, useState } from 'react';\n\nimport { Surface } from '@dxos/app-framework';\nimport { type MessageType } from '@dxos/plugin-space/types';\nimport { PublicKey } from '@dxos/react-client';\nimport { type EchoReactiveObject, type Expando, type SpaceMember } from '@dxos/react-client/echo';\nimport { useIdentity, type Identity } from '@dxos/react-client/halo';\nimport { Button, ButtonGroup, Tooltip, useOnTransition, useThemeContext, useTranslation } from '@dxos/react-ui';\nimport { createBasicExtensions, createThemeExtensions, useTextEditor } from '@dxos/react-ui-editor';\nimport { Mosaic, type MosaicTileComponent } from '@dxos/react-ui-mosaic';\nimport {\n getSize,\n hoverableControlItem,\n hoverableControls,\n hoverableFocusedWithinControls,\n mx,\n} from '@dxos/react-ui-theme';\nimport { MessageHeading, MessageRoot } from '@dxos/react-ui-thread';\nimport { nonNullable } from '@dxos/util';\n\nimport { command } from './command-extension';\nimport { useOnEditAnalytics } from '../hooks';\nimport { THREAD_ITEM, THREAD_PLUGIN } from '../meta';\nimport { getMessageMetadata } from '../util';\n\n// TODO(thure): #8149\nconst messageControlClassNames = ['!p-1 !min-bs-0 transition-opacity', hoverableControlItem];\n\nexport const MessageContainer = ({\n message,\n members,\n onDelete,\n}: {\n message: MessageType;\n members: SpaceMember[];\n onDelete?: (id: string) => void;\n}) => {\n const senderIdentity = members.find(\n (member) => message.sender.identityKey && PublicKey.equals(member.identity.identityKey, message.sender.identityKey),\n )?.identity;\n const messageMetadata = getMessageMetadata(message.id, senderIdentity);\n const userIsAuthor = useIdentity()?.identityKey.toHex() === messageMetadata.authorId;\n const [editing, setEditing] = useState(false);\n const handleDelete = useCallback(() => onDelete?.(message.id), [message, onDelete]);\n const { t } = useTranslation(THREAD_PLUGIN);\n const editLabel = t(editing ? 'save message label' : 'edit message label');\n const deleteLabel = t('delete message label');\n\n return (\n <MessageRoot {...messageMetadata} classNames={[hoverableControls, hoverableFocusedWithinControls]}>\n <MessageHeading authorName={messageMetadata.authorName} timestamp={messageMetadata.timestamp}>\n <ButtonGroup classNames='mie-1'>\n {userIsAuthor && (\n <Tooltip.Root>\n <Tooltip.Trigger asChild>\n <Button\n variant='ghost'\n data-testid={editing ? 'thread.message.save' : 'thread.message.edit'}\n classNames={messageControlClassNames}\n onClick={() => setEditing((editing) => !editing)}\n >\n <span className='sr-only'>{editLabel}</span>\n {editing ? <Check className={getSize(4)} /> : <PencilSimple className={getSize(4)} />}\n </Button>\n </Tooltip.Trigger>\n <Tooltip.Portal>\n <Tooltip.Content classNames='z-[21]'>\n {editLabel}\n <Tooltip.Arrow />\n </Tooltip.Content>\n </Tooltip.Portal>\n </Tooltip.Root>\n )}\n {onDelete && (\n <Tooltip.Root>\n <Tooltip.Trigger asChild>\n <Button\n variant='ghost'\n data-testid='thread.message.delete'\n classNames={messageControlClassNames}\n onClick={() => handleDelete()}\n >\n <span className='sr-only'>{deleteLabel}</span>\n <X className={getSize(4)} />\n </Button>\n </Tooltip.Trigger>\n <Tooltip.Portal>\n <Tooltip.Content classNames='z-[21]'>\n {deleteLabel}\n <Tooltip.Arrow />\n </Tooltip.Content>\n </Tooltip.Portal>\n </Tooltip.Root>\n )}\n </ButtonGroup>\n </MessageHeading>\n <TextboxBlock message={message} isAuthor={userIsAuthor} editing={editing} />\n {message.parts?.filter(nonNullable).map((part, index) => <MessagePart key={index} part={part} />)}\n </MessageRoot>\n );\n};\n\nconst MessagePart = ({ part }: { part: Expando }) => {\n return (\n <Mosaic.Container id={part.id}>\n <Mosaic.DraggableTile type={THREAD_ITEM} path={part.id} item={part} Component={MessageBlockObjectTile} />\n </Mosaic.Container>\n );\n};\n\nconst TextboxBlock = ({\n message,\n isAuthor,\n editing,\n}: {\n message: MessageType;\n editing?: boolean;\n isAuthor?: boolean;\n identity?: Identity;\n}) => {\n const { themeMode } = useThemeContext();\n const inMemoryContentRef = useRef(message.text);\n\n const handleDocumentChange = useCallback((newState: string) => {\n inMemoryContentRef.current = newState;\n }, []);\n\n const saveDocumentChange = useCallback(() => {\n message.text = inMemoryContentRef.current;\n }, [message]);\n\n useOnTransition(editing, true, false, saveDocumentChange);\n\n const { parentRef, focusAttributes, view } = useTextEditor(\n () => ({\n initialValue: message.text,\n extensions: [\n createBasicExtensions({ readonly: !isAuthor || !editing }),\n createThemeExtensions({ themeMode }),\n command,\n EditorView.updateListener.of((update) => {\n if (update.docChanged) {\n handleDocumentChange(update.state.doc.toString());\n }\n }),\n ],\n }),\n [message.text, editing, isAuthor, themeMode, handleDocumentChange],\n );\n\n useEffect(() => {\n editing && view?.focus();\n }, [editing, view]);\n\n useOnEditAnalytics(message, !!editing);\n\n return <div role='none' ref={parentRef} className='mie-4' {...focusAttributes} />;\n};\n\nconst MessageBlockObjectTile: MosaicTileComponent<EchoReactiveObject<any>> = forwardRef(\n ({ draggableStyle, draggableProps, item, active, ref: _ref, ...props }, forwardedRef) => {\n let title = item.name ?? item.title ?? item.type ?? 'Object';\n if (typeof title !== 'string') {\n title = title?.content ?? '';\n }\n\n return (\n <div\n role='group'\n className={mx('grid col-span-3 py-1 pr-4', hoverableControls, hoverableFocusedWithinControls)}\n style={draggableStyle}\n ref={forwardedRef}\n >\n <Surface\n role='card'\n limit={1}\n data={{ content: item }}\n draggableProps={draggableProps}\n fallback={title}\n {...props}\n />\n </div>\n );\n },\n);\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { StreamLanguage, HighlightStyle, syntaxHighlighting } from '@codemirror/language';\nimport { type Extension } from '@codemirror/state';\n\nimport { tags } from '@dxos/react-ui-editor';\nimport { mx, tagRoot } from '@dxos/react-ui-theme';\n\n/**\n * https://github.com/codemirror/stream-parser/blob/main/test/test-stream-parser.ts\n */\nconst parser = StreamLanguage.define<{ count: number }>({\n startState: () => ({ count: 0 }),\n token: (stream, state) => {\n state.count++;\n if (stream.eatSpace()) {\n return null;\n }\n if (state.count === 1 && stream.match(/^(\\/\\w+)/)) {\n return 'tagName';\n }\n stream.next();\n return null;\n },\n});\n\nconst styles = HighlightStyle.define([\n {\n tag: tags.tagName,\n class: mx(tagRoot({ palette: 'cyan' }), 'text-baseText font-medium'),\n },\n]);\n\nexport const command: Extension = [parser, syntaxHighlighting(styles)];\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { generateName } from '@dxos/display-name';\nimport { type PublicKey } from '@dxos/react-client';\nimport { type Identity } from '@dxos/react-client/halo';\nimport { type MessageMetadata } from '@dxos/react-ui-thread';\nimport { hexToFallback } from '@dxos/util';\n\nexport type MessagePropertiesProvider = (identityKey: PublicKey | undefined) => MessageMetadata;\n\nexport const getMessageMetadata = (id: string, identity?: Identity): MessageMetadata => {\n const fallback = hexToFallback(identity?.identityKey.toHex() ?? '0');\n return {\n id,\n authorId: identity?.identityKey.toHex(),\n authorName:\n identity?.profile?.displayName ??\n (identity?.identityKey ? generateName(identity.identityKey.toHex()) : undefined),\n authorAvatarProps: {\n hue: identity?.profile?.data?.hue ?? fallback.hue,\n emoji: identity?.profile?.data?.emoji ?? fallback.emoji,\n },\n };\n};\n"],
5
+ "mappings": "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",
6
+ "names": ["import_react", "import_echo", "import_react_ui", "import_app_framework", "import_halo", "import_react_ui_editor", "import_react_ui_theme", "import_react_ui_thread", "import_util", "useStatus", "space", "channel", "processing", "setProcessing", "useState", "useEffect", "unsubscribe", "listen", "status", "event", "payload", "t", "setInterval", "prev", "ts", "Date", "now", "undefined", "clearInterval", "useAnalyticsCallback", "spaceId", "name", "meta", "dispatch", "useIntentDispatcher", "useCallback", "dynamicMeta", "action", "ObservabilityAction", "SEND_EVENT", "data", "properties", "useOnEditAnalytics", "message", "editing", "getSpace", "onEditAnalytics", "id", "messageId", "messageLength", "text", "length", "useOnTransition", "parser", "StreamLanguage", "define", "startState", "count", "token", "stream", "state", "eatSpace", "match", "next", "styles", "HighlightStyle", "tag", "tags", "tagName", "class", "mx", "tagRoot", "palette", "command", "syntaxHighlighting", "getMessageMetadata", "identity", "fallback", "hexToFallback", "identityKey", "toHex", "authorId", "authorName", "profile", "displayName", "generateName", "authorAvatarProps", "hue", "emoji", "messageControlClassNames", "hoverableControlItem", "MessageContainer", "members", "onDelete", "senderIdentity", "find", "member", "sender", "PublicKey", "equals", "messageMetadata", "userIsAuthor", "useIdentity", "setEditing", "handleDelete", "useTranslation", "THREAD_PLUGIN", "editLabel", "deleteLabel", "React", "MessageRoot", "classNames", "hoverableControls", "hoverableFocusedWithinControls", "MessageHeading", "timestamp", "ButtonGroup", "Tooltip", "Root", "Trigger", "asChild", "Button", "variant", "data-testid", "onClick", "span", "className", "Check", "getSize", "PencilSimple", "Portal", "Content", "Arrow", "X", "TextboxBlock", "isAuthor", "parts", "filter", "nonNullable", "map", "part", "index", "MessagePart", "key", "Mosaic", "Container", "DraggableTile", "type", "THREAD_ITEM", "path", "item", "Component", "MessageBlockObjectTile", "themeMode", "useThemeContext", "inMemoryContentRef", "useRef", "handleDocumentChange", "newState", "current", "saveDocumentChange", "parentRef", "focusAttributes", "view", "useTextEditor", "initialValue", "extensions", "createBasicExtensions", "readonly", "createThemeExtensions", "EditorView", "updateListener", "of", "update", "docChanged", "doc", "toString", "focus", "div", "role", "ref", "forwardRef", "draggableStyle", "draggableProps", "active", "_ref", "props", "forwardedRef", "title", "content", "style", "Surface", "limit", "ChatHeading", "attendableId", "StackItem", "SigilButton", "Icon", "icon", "size", "HeadingLabel", "ChatContainer", "thread", "context", "autoFocusTextbox", "useMembers", "activity", "fullyQualifiedId", "_count", "_setCount", "rerenderEditor", "autoFocus", "setAutoFocus", "threadScrollRef", "textboxMetadata", "messageRef", "useMemo", "placeholder", "listener", "onChange", "scrollToEnd", "behavior", "setTimeout", "scrollIntoView", "block", "useLayoutEffect", "handleCreate", "messages", "push", "create", "MessageType", "toISOString", "messageIndex", "findIndex", "splice", "Thread", "ScrollArea", "Viewport", "threadLayout", "Scrollbar", "Thumb", "MessageTextbox", "onSend", "ThreadFooter"]
7
+ }
@@ -16,19 +16,19 @@ var __copyProps = (to, from, except, desc) => {
16
16
  return to;
17
17
  };
18
18
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
- var chunk_YWFYN3OY_exports = {};
20
- __export(chunk_YWFYN3OY_exports, {
19
+ var chunk_IC2NICNC_exports = {};
20
+ __export(chunk_IC2NICNC_exports, {
21
21
  THREAD_ITEM: () => THREAD_ITEM,
22
22
  THREAD_PLUGIN: () => THREAD_PLUGIN,
23
23
  meta_default: () => meta_default
24
24
  });
25
- module.exports = __toCommonJS(chunk_YWFYN3OY_exports);
25
+ module.exports = __toCommonJS(chunk_IC2NICNC_exports);
26
26
  var THREAD_PLUGIN = "dxos.org/plugin/thread";
27
27
  var THREAD_ITEM = `${THREAD_PLUGIN}/item`;
28
28
  var meta_default = {
29
29
  id: THREAD_PLUGIN,
30
30
  name: "Threads",
31
- description: "Comment threads on documents.",
31
+ description: "Add comment threads to objects.",
32
32
  icon: "ph--chat--regular",
33
33
  source: "https://github.com/dxos/dxos/tree/main/packages/plugins/plugin-thread"
34
34
  };
@@ -38,4 +38,4 @@ var meta_default = {
38
38
  THREAD_PLUGIN,
39
39
  meta_default
40
40
  });
41
- //# sourceMappingURL=chunk-YWFYN3OY.cjs.map
41
+ //# sourceMappingURL=chunk-IC2NICNC.cjs.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/meta.ts"],
4
- "sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport { type PluginMeta } from '@dxos/app-framework';\n\nexport const THREAD_PLUGIN = 'dxos.org/plugin/thread';\nexport const THREAD_ITEM = `${THREAD_PLUGIN}/item`;\n\nexport default {\n id: THREAD_PLUGIN,\n name: 'Threads',\n description: 'Comment threads on documents.',\n icon: 'ph--chat--regular',\n source: 'https://github.com/dxos/dxos/tree/main/packages/plugins/plugin-thread',\n} satisfies PluginMeta;\n"],
4
+ "sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport { type PluginMeta } from '@dxos/app-framework';\n\nexport const THREAD_PLUGIN = 'dxos.org/plugin/thread';\nexport const THREAD_ITEM = `${THREAD_PLUGIN}/item`;\n\nexport default {\n id: THREAD_PLUGIN,\n name: 'Threads',\n description: 'Add comment threads to objects.',\n icon: 'ph--chat--regular',\n source: 'https://github.com/dxos/dxos/tree/main/packages/plugins/plugin-thread',\n} satisfies PluginMeta;\n"],
5
5
  "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;AAMO,IAAMA,gBAAgB;AACtB,IAAMC,cAAc,GAAGD,aAAAA;AAE9B,IAAA,eAAe;EACbE,IAAIF;EACJG,MAAM;EACNC,aAAa;EACbC,MAAM;EACNC,QAAQ;AACV;",
6
6
  "names": ["THREAD_PLUGIN", "THREAD_ITEM", "id", "name", "description", "icon", "source"]
7
7
  }
@@ -28,17 +28,17 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
28
28
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
29
29
  var node_exports = {};
30
30
  __export(node_exports, {
31
- ThreadAction: () => import_chunk_LGA276VA.ThreadAction,
31
+ ThreadAction: () => import_chunk_ANGUPCW3.ThreadAction,
32
32
  ThreadPlugin: () => ThreadPlugin,
33
33
  default: () => src_default,
34
- useAnalyticsCallback: () => import_chunk_XOW5SL5M.useAnalyticsCallback,
35
- useOnEditAnalytics: () => import_chunk_XOW5SL5M.useOnEditAnalytics,
36
- useStatus: () => import_chunk_XOW5SL5M.useStatus
34
+ useAnalyticsCallback: () => import_chunk_GXREFXBX.useAnalyticsCallback,
35
+ useOnEditAnalytics: () => import_chunk_GXREFXBX.useOnEditAnalytics,
36
+ useStatus: () => import_chunk_GXREFXBX.useStatus
37
37
  });
38
38
  module.exports = __toCommonJS(node_exports);
39
- var import_chunk_LGA276VA = require("./chunk-LGA276VA.cjs");
40
- var import_chunk_XOW5SL5M = require("./chunk-XOW5SL5M.cjs");
41
- var import_chunk_YWFYN3OY = require("./chunk-YWFYN3OY.cjs");
39
+ var import_chunk_ANGUPCW3 = require("./chunk-ANGUPCW3.cjs");
40
+ var import_chunk_GXREFXBX = require("./chunk-GXREFXBX.cjs");
41
+ var import_chunk_IC2NICNC = require("./chunk-IC2NICNC.cjs");
42
42
  var import_react = __toESM(require("react"));
43
43
  var import_app_framework = require("@dxos/app-framework");
44
44
  var import_local_storage = require("@dxos/local-storage");
@@ -86,7 +86,7 @@ var import_util3 = require("@dxos/util");
86
86
  var sizeClass = (0, import_react_ui_theme.getSize)(4);
87
87
  var commentControlClassNames = "!p-1 !min-bs-0 transition-opacity";
88
88
  var ToggleResolvedButton = ({ isResolved, onResolve }) => {
89
- const { t } = (0, import_react_ui.useTranslation)(import_chunk_YWFYN3OY.THREAD_PLUGIN);
89
+ const { t } = (0, import_react_ui.useTranslation)(import_chunk_IC2NICNC.THREAD_PLUGIN);
90
90
  const label = t(isResolved ? "mark as unresolved label" : "mark as resolved label");
91
91
  return /* @__PURE__ */ import_react4.default.createElement(import_react_ui.Tooltip.Root, null, /* @__PURE__ */ import_react4.default.createElement(import_react_ui.Tooltip.Trigger, {
92
92
  asChild: true
@@ -110,7 +110,7 @@ var ToggleResolvedButton = ({ isResolved, onResolve }) => {
110
110
  }, label, /* @__PURE__ */ import_react4.default.createElement(import_react_ui.Tooltip.Arrow, null))));
111
111
  };
112
112
  var DeleteThreadButton = ({ onDelete }) => {
113
- const { t } = (0, import_react_ui.useTranslation)(import_chunk_YWFYN3OY.THREAD_PLUGIN);
113
+ const { t } = (0, import_react_ui.useTranslation)(import_chunk_IC2NICNC.THREAD_PLUGIN);
114
114
  const label = t("delete thread label");
115
115
  return /* @__PURE__ */ import_react4.default.createElement(import_react_ui.Tooltip.Root, null, /* @__PURE__ */ import_react4.default.createElement(import_react_ui.Tooltip.Trigger, {
116
116
  asChild: true
@@ -134,11 +134,11 @@ var CommentContainer = ({ thread, detached, context, current, onAttend, onThread
134
134
  const identity = (0, import_halo.useIdentity)();
135
135
  const space = (0, import_echo3.getSpace)(thread);
136
136
  const members = (0, import_echo3.useMembers)(space?.key);
137
- const activity = (0, import_chunk_XOW5SL5M.useStatus)(space, (0, import_echo3.fullyQualifiedId)(thread));
138
- const { t } = (0, import_react_ui.useTranslation)(import_chunk_YWFYN3OY.THREAD_PLUGIN);
137
+ const activity = (0, import_chunk_GXREFXBX.useStatus)(space, (0, import_echo3.fullyQualifiedId)(thread));
138
+ const { t } = (0, import_react_ui.useTranslation)(import_chunk_IC2NICNC.THREAD_PLUGIN);
139
139
  const threadScrollRef = (0, import_react4.useRef)(null);
140
140
  const { themeMode } = (0, import_react_ui.useThemeContext)();
141
- const textboxMetadata = (0, import_chunk_XOW5SL5M.getMessageMetadata)((0, import_echo3.fullyQualifiedId)(thread), identity);
141
+ const textboxMetadata = (0, import_chunk_GXREFXBX.getMessageMetadata)((0, import_echo3.fullyQualifiedId)(thread), identity);
142
142
  const [_count, _setCount] = (0, import_react4.useState)(0);
143
143
  const rerenderEditor = () => _setCount((count) => count + 1);
144
144
  const messageRef = (0, import_react4.useRef)("");
@@ -152,7 +152,7 @@ var CommentContainer = ({ thread, detached, context, current, onAttend, onThread
152
152
  (0, import_react_ui_editor.listener)({
153
153
  onChange: (text) => messageRef.current = text
154
154
  }),
155
- import_chunk_XOW5SL5M.command
155
+ import_chunk_GXREFXBX.command
156
156
  ], [
157
157
  _count
158
158
  ]);
@@ -205,7 +205,7 @@ var CommentContainer = ({ thread, detached, context, current, onAttend, onThread
205
205
  onResolve
206
206
  }), onThreadDelete && /* @__PURE__ */ import_react4.default.createElement(DeleteThreadButton, {
207
207
  onDelete: onThreadDelete
208
- }))), thread.messages.filter(import_util.nonNullable).map((message) => /* @__PURE__ */ import_react4.default.createElement(import_chunk_XOW5SL5M.MessageContainer, {
208
+ }))), thread.messages.filter(import_util.nonNullable).map((message) => /* @__PURE__ */ import_react4.default.createElement(import_chunk_GXREFXBX.MessageContainer, {
209
209
  key: message.id,
210
210
  message,
211
211
  members,
@@ -223,7 +223,7 @@ var CommentContainer = ({ thread, detached, context, current, onAttend, onThread
223
223
  }));
224
224
  };
225
225
  var CommentsContainer = ({ threads: threads2, detached = [], currentId, showResolvedThreads, onThreadAttend, onThreadDelete, onMessageDelete, onThreadToggleResolved, ...props }) => {
226
- const { t } = (0, import_react_ui2.useTranslation)(import_chunk_YWFYN3OY.THREAD_PLUGIN);
226
+ const { t } = (0, import_react_ui2.useTranslation)(import_chunk_IC2NICNC.THREAD_PLUGIN);
227
227
  const filteredThreads = showResolvedThreads ? threads2 : threads2.filter((thread) => !(thread?.status === "resolved"));
228
228
  (0, import_react6.useEffect)(() => {
229
229
  if (currentId) {
@@ -336,8 +336,8 @@ var ThreadComplementary = ({ role, subject, drafts, current, showResolvedThreads
336
336
  },
337
337
  onThreadDelete: (thread) => {
338
338
  return dispatch({
339
- plugin: import_chunk_YWFYN3OY.THREAD_PLUGIN,
340
- action: import_chunk_LGA276VA.ThreadAction.DELETE,
339
+ plugin: import_chunk_IC2NICNC.THREAD_PLUGIN,
340
+ action: import_chunk_ANGUPCW3.ThreadAction.DELETE,
341
341
  data: {
342
342
  subject,
343
343
  thread
@@ -345,8 +345,8 @@ var ThreadComplementary = ({ role, subject, drafts, current, showResolvedThreads
345
345
  });
346
346
  },
347
347
  onMessageDelete: (thread, messageId) => dispatch({
348
- plugin: import_chunk_YWFYN3OY.THREAD_PLUGIN,
349
- action: import_chunk_LGA276VA.ThreadAction.DELETE_MESSAGE,
348
+ plugin: import_chunk_IC2NICNC.THREAD_PLUGIN,
349
+ action: import_chunk_ANGUPCW3.ThreadAction.DELETE_MESSAGE,
350
350
  data: {
351
351
  subject,
352
352
  thread,
@@ -354,15 +354,15 @@ var ThreadComplementary = ({ role, subject, drafts, current, showResolvedThreads
354
354
  }
355
355
  }),
356
356
  onThreadToggleResolved: (thread) => dispatch({
357
- plugin: import_chunk_YWFYN3OY.THREAD_PLUGIN,
358
- action: import_chunk_LGA276VA.ThreadAction.TOGGLE_RESOLVED,
357
+ plugin: import_chunk_IC2NICNC.THREAD_PLUGIN,
358
+ action: import_chunk_ANGUPCW3.ThreadAction.TOGGLE_RESOLVED,
359
359
  data: {
360
360
  thread
361
361
  }
362
362
  }),
363
363
  onComment: (thread) => {
364
364
  void dispatch({
365
- action: import_chunk_LGA276VA.ThreadAction.ON_MESSAGE_ADD,
365
+ action: import_chunk_ANGUPCW3.ThreadAction.ON_MESSAGE_ADD,
366
366
  data: {
367
367
  thread,
368
368
  subject
@@ -375,7 +375,7 @@ var ThreadComplementary = ({ role, subject, drafts, current, showResolvedThreads
375
375
  }), /* @__PURE__ */ import_react7.default.createElement(import_react_ui3.ScrollArea.Scrollbar, null, /* @__PURE__ */ import_react7.default.createElement(import_react_ui3.ScrollArea.Thumb, null)))));
376
376
  };
377
377
  var ThreadSettings = ({ settings }) => {
378
- const { t } = (0, import_react_ui4.useTranslation)(import_chunk_YWFYN3OY.THREAD_PLUGIN);
378
+ const { t } = (0, import_react_ui4.useTranslation)(import_chunk_IC2NICNC.THREAD_PLUGIN);
379
379
  return /* @__PURE__ */ import_react8.default.createElement(import_react8.default.Fragment, null, /* @__PURE__ */ import_react8.default.createElement(import_react_ui_data.DeprecatedFormInput, {
380
380
  label: t("settings standalone label")
381
381
  }, /* @__PURE__ */ import_react8.default.createElement(import_react_ui4.Input.Switch, {
@@ -383,8 +383,8 @@ var ThreadSettings = ({ settings }) => {
383
383
  onCheckedChange: (checked) => settings.standalone = !!checked
384
384
  })));
385
385
  };
386
- var ThreadMain = (0, import_react2.lazy)(() => import("./ThreadMain-CXIQPH4H.cjs"));
387
- var ThreadArticle = (0, import_react2.lazy)(() => import("./ThreadArticle-IUK2EECC.cjs"));
386
+ var ThreadMain = (0, import_react2.lazy)(() => import("./ThreadMain-ZS2PYBRX.cjs"));
387
+ var ThreadArticle = (0, import_react2.lazy)(() => import("./ThreadArticle-LV3HHHJT.cjs"));
388
388
  var getName = (doc, anchor) => {
389
389
  if (doc.content) {
390
390
  const [start, end] = anchor.split(":");
@@ -426,7 +426,7 @@ var threads = (state, doc, dispatch) => {
426
426
  onCreate: ({ cursor }) => {
427
427
  const name = getName(doc, cursor);
428
428
  void dispatch({
429
- action: import_chunk_LGA276VA.ThreadAction.CREATE,
429
+ action: import_chunk_ANGUPCW3.ThreadAction.CREATE,
430
430
  data: {
431
431
  cursor,
432
432
  name,
@@ -456,7 +456,7 @@ var threads = (state, doc, dispatch) => {
456
456
  },
457
457
  onSelect: ({ selection: { current, closest } }) => {
458
458
  void dispatch({
459
- action: import_chunk_LGA276VA.ThreadAction.SELECT,
459
+ action: import_chunk_ANGUPCW3.ThreadAction.SELECT,
460
460
  data: {
461
461
  current: current ?? closest,
462
462
  skipOpen: true
@@ -469,7 +469,7 @@ var threads = (state, doc, dispatch) => {
469
469
  var translations_default = [
470
470
  {
471
471
  "en-US": {
472
- [import_chunk_YWFYN3OY.THREAD_PLUGIN]: {
472
+ [import_chunk_IC2NICNC.THREAD_PLUGIN]: {
473
473
  "plugin name": "Threads",
474
474
  "channel name placeholder": "New channel",
475
475
  "channel title label": "Title",
@@ -506,7 +506,7 @@ var initialViewState = {
506
506
  showResolvedThreads: false
507
507
  };
508
508
  var ThreadPlugin = () => {
509
- const settings = new import_local_storage.LocalStorageStore(import_chunk_YWFYN3OY.THREAD_PLUGIN);
509
+ const settings = new import_local_storage.LocalStorageStore(import_chunk_IC2NICNC.THREAD_PLUGIN);
510
510
  const state = (0, import_echo.create)({
511
511
  drafts: {}
512
512
  });
@@ -523,7 +523,7 @@ var ThreadPlugin = () => {
523
523
  let intentPlugin;
524
524
  const unsubscribeCallbacks = [];
525
525
  return {
526
- meta: import_chunk_YWFYN3OY.meta_default,
526
+ meta: import_chunk_IC2NICNC.meta_default,
527
527
  ready: async (plugins) => {
528
528
  settings.prop({
529
529
  key: "standalone",
@@ -545,7 +545,7 @@ var ThreadPlugin = () => {
545
545
  placeholder: [
546
546
  "channel name placeholder",
547
547
  {
548
- ns: import_chunk_YWFYN3OY.THREAD_PLUGIN
548
+ ns: import_chunk_IC2NICNC.THREAD_PLUGIN
549
549
  }
550
550
  ],
551
551
  icon: "ph--chat--regular",
@@ -560,7 +560,7 @@ var ThreadPlugin = () => {
560
560
  // TODO(wittjosiah): Move out of metadata.
561
561
  loadReferences: (message) => []
562
562
  },
563
- [import_chunk_YWFYN3OY.THREAD_ITEM]: {
563
+ [import_chunk_IC2NICNC.THREAD_ITEM]: {
564
564
  parse: (item, type) => {
565
565
  switch (type) {
566
566
  case "node":
@@ -599,7 +599,7 @@ var ThreadPlugin = () => {
599
599
  label: [
600
600
  "open comments panel label",
601
601
  {
602
- ns: import_chunk_YWFYN3OY.THREAD_PLUGIN
602
+ ns: import_chunk_IC2NICNC.THREAD_PLUGIN
603
603
  }
604
604
  ],
605
605
  icon: "ph--chat-text--regular"
@@ -618,7 +618,7 @@ var ThreadPlugin = () => {
618
618
  const icon = "ph--chat-text--regular";
619
619
  return [
620
620
  (0, import_plugin_graph.createExtension)({
621
- id: `${import_chunk_YWFYN3OY.THREAD_PLUGIN}/comments-for-subject`,
621
+ id: `${import_chunk_IC2NICNC.THREAD_PLUGIN}/comments-for-subject`,
622
622
  resolver: ({ id }) => {
623
623
  if (!id.endsWith("~comments")) {
624
624
  return;
@@ -636,7 +636,7 @@ var ThreadPlugin = () => {
636
636
  label: [
637
637
  "unnamed object threads label",
638
638
  {
639
- ns: import_chunk_YWFYN3OY.THREAD_PLUGIN
639
+ ns: import_chunk_IC2NICNC.THREAD_PLUGIN
640
640
  }
641
641
  ],
642
642
  showResolvedThreads: false,
@@ -659,7 +659,7 @@ var ThreadPlugin = () => {
659
659
  const label = meta.label?.(object) || object.name || meta.placeholder || [
660
660
  "unnamed object threads label",
661
661
  {
662
- ns: import_chunk_YWFYN3OY.THREAD_PLUGIN
662
+ ns: import_chunk_IC2NICNC.THREAD_PLUGIN
663
663
  }
664
664
  ];
665
665
  const viewState = getViewState(subjectId);
@@ -699,13 +699,13 @@ var ThreadPlugin = () => {
699
699
  };
700
700
  return [
701
701
  {
702
- id: `${import_chunk_YWFYN3OY.THREAD_PLUGIN}/toggle-show-resolved/${node.id}`,
702
+ id: `${import_chunk_IC2NICNC.THREAD_PLUGIN}/toggle-show-resolved/${node.id}`,
703
703
  data: toggle,
704
704
  properties: {
705
705
  label: [
706
706
  "toggle show resolved",
707
707
  {
708
- ns: import_chunk_YWFYN3OY.THREAD_PLUGIN
708
+ ns: import_chunk_IC2NICNC.THREAD_PLUGIN
709
709
  }
710
710
  ],
711
711
  menuItemType: "toggle",
@@ -718,7 +718,7 @@ var ThreadPlugin = () => {
718
718
  }
719
719
  }),
720
720
  (0, import_plugin_graph.createExtension)({
721
- id: import_chunk_LGA276VA.ThreadAction.CREATE,
721
+ id: import_chunk_ANGUPCW3.ThreadAction.CREATE,
722
722
  filter: (node) => !!settings.values.standalone && (0, import_plugin_graph.isActionGroup)(node) && node.id.startsWith(import_plugin_space.SpaceAction.ADD_OBJECT),
723
723
  actions: ({ node }) => {
724
724
  const id = node.id.split("/").at(-1);
@@ -731,12 +731,12 @@ var ThreadPlugin = () => {
731
731
  }
732
732
  return [
733
733
  {
734
- id: `${import_chunk_YWFYN3OY.THREAD_PLUGIN}/create/${node.id}`,
734
+ id: `${import_chunk_IC2NICNC.THREAD_PLUGIN}/create/${node.id}`,
735
735
  data: async () => {
736
736
  await dispatch([
737
737
  {
738
- plugin: import_chunk_YWFYN3OY.THREAD_PLUGIN,
739
- action: import_chunk_LGA276VA.ThreadAction.CREATE
738
+ plugin: import_chunk_IC2NICNC.THREAD_PLUGIN,
739
+ action: import_chunk_ANGUPCW3.ThreadAction.CREATE
740
740
  },
741
741
  {
742
742
  action: import_plugin_space.SpaceAction.ADD_OBJECT,
@@ -753,7 +753,7 @@ var ThreadPlugin = () => {
753
753
  label: [
754
754
  "create channel label",
755
755
  {
756
- ns: import_chunk_YWFYN3OY.THREAD_PLUGIN
756
+ ns: import_chunk_IC2NICNC.THREAD_PLUGIN
757
757
  }
758
758
  ],
759
759
  icon: "ph--chat--regular",
@@ -775,7 +775,7 @@ var ThreadPlugin = () => {
775
775
  }) : null;
776
776
  }
777
777
  case "settings": {
778
- return data.plugin === import_chunk_YWFYN3OY.meta_default.id ? /* @__PURE__ */ import_react.default.createElement(ThreadSettings, {
778
+ return data.plugin === import_chunk_IC2NICNC.meta_default.id ? /* @__PURE__ */ import_react.default.createElement(ThreadSettings, {
779
779
  settings: settings.values
780
780
  }) : null;
781
781
  }
@@ -800,9 +800,9 @@ var ThreadPlugin = () => {
800
800
  });
801
801
  }
802
802
  if (data.subject instanceof import_types.ThreadType) {
803
- return /* @__PURE__ */ import_react.default.createElement(import_react.default.Fragment, null, /* @__PURE__ */ import_react.default.createElement(import_chunk_XOW5SL5M.ChatHeading, {
803
+ return /* @__PURE__ */ import_react.default.createElement(import_react.default.Fragment, null, /* @__PURE__ */ import_react.default.createElement(import_chunk_GXREFXBX.ChatHeading, {
804
804
  attendableId: data.subject.id
805
- }), /* @__PURE__ */ import_react.default.createElement(import_chunk_XOW5SL5M.ChatContainer, {
805
+ }), /* @__PURE__ */ import_react.default.createElement(import_chunk_GXREFXBX.ChatContainer, {
806
806
  thread: data.subject
807
807
  }));
808
808
  }
@@ -828,7 +828,7 @@ var ThreadPlugin = () => {
828
828
  intent: {
829
829
  resolver: async (intent) => {
830
830
  switch (intent.action) {
831
- case import_chunk_LGA276VA.ThreadAction.CREATE: {
831
+ case import_chunk_ANGUPCW3.ThreadAction.CREATE: {
832
832
  if (intent.data && intent.data.cursor !== void 0) {
833
833
  const { cursor, name, subject } = intent.data;
834
834
  if (subject?.threads === void 0) {
@@ -864,7 +864,7 @@ var ThreadPlugin = () => {
864
864
  intents: [
865
865
  [
866
866
  {
867
- action: import_chunk_LGA276VA.ThreadAction.SELECT,
867
+ action: import_chunk_ANGUPCW3.ThreadAction.SELECT,
868
868
  data: {
869
869
  current: (0, import_echo2.fullyQualifiedId)(thread)
870
870
  }
@@ -903,7 +903,7 @@ var ThreadPlugin = () => {
903
903
  };
904
904
  }
905
905
  }
906
- case import_chunk_LGA276VA.ThreadAction.SELECT: {
906
+ case import_chunk_ANGUPCW3.ThreadAction.SELECT: {
907
907
  state.current = intent.data?.current;
908
908
  return {
909
909
  data: true,
@@ -921,7 +921,7 @@ var ThreadPlugin = () => {
921
921
  ] : []
922
922
  };
923
923
  }
924
- case import_chunk_LGA276VA.ThreadAction.TOGGLE_RESOLVED: {
924
+ case import_chunk_ANGUPCW3.ThreadAction.TOGGLE_RESOLVED: {
925
925
  const { thread } = intent.data ?? {};
926
926
  if (!(thread instanceof import_types.ThreadType)) {
927
927
  return;
@@ -951,7 +951,7 @@ var ThreadPlugin = () => {
951
951
  ]
952
952
  };
953
953
  }
954
- case import_chunk_LGA276VA.ThreadAction.DELETE: {
954
+ case import_chunk_ANGUPCW3.ThreadAction.DELETE: {
955
955
  const { subject, thread } = intent.data ?? {};
956
956
  if (!(thread instanceof import_types.ThreadType) || !(subject && typeof subject === "object" && "threads" in subject)) {
957
957
  return;
@@ -980,7 +980,7 @@ var ThreadPlugin = () => {
980
980
  space.db.remove(thread);
981
981
  return {
982
982
  undoable: {
983
- message: translations_default[0]["en-US"][import_chunk_YWFYN3OY.THREAD_PLUGIN]["thread deleted label"],
983
+ message: translations_default[0]["en-US"][import_chunk_IC2NICNC.THREAD_PLUGIN]["thread deleted label"],
984
984
  data: {
985
985
  cursor
986
986
  }
@@ -1023,7 +1023,7 @@ var ThreadPlugin = () => {
1023
1023
  }
1024
1024
  break;
1025
1025
  }
1026
- case import_chunk_LGA276VA.ThreadAction.ON_MESSAGE_ADD: {
1026
+ case import_chunk_ANGUPCW3.ThreadAction.ON_MESSAGE_ADD: {
1027
1027
  const { thread, subject } = intent.data ?? {};
1028
1028
  if (!(thread instanceof import_types.ThreadType) || !(subject && typeof subject === "object" && "threads" in subject && Array.isArray(subject.threads))) {
1029
1029
  return;
@@ -1066,7 +1066,7 @@ var ThreadPlugin = () => {
1066
1066
  ]
1067
1067
  };
1068
1068
  }
1069
- case import_chunk_LGA276VA.ThreadAction.DELETE_MESSAGE: {
1069
+ case import_chunk_ANGUPCW3.ThreadAction.DELETE_MESSAGE: {
1070
1070
  const { subject, thread, messageId } = intent.data ?? {};
1071
1071
  const space = (0, import_echo2.getSpace)(subject);
1072
1072
  if (!(thread instanceof import_types.ThreadType) || !(subject && typeof subject === "object" && "threads" in subject)) {
@@ -1083,7 +1083,7 @@ var ThreadPlugin = () => {
1083
1083
  intents: [
1084
1084
  [
1085
1085
  {
1086
- action: import_chunk_LGA276VA.ThreadAction.DELETE,
1086
+ action: import_chunk_ANGUPCW3.ThreadAction.DELETE,
1087
1087
  data: {
1088
1088
  subject,
1089
1089
  thread
@@ -1097,7 +1097,7 @@ var ThreadPlugin = () => {
1097
1097
  }
1098
1098
  return {
1099
1099
  undoable: {
1100
- message: translations_default[0]["en-US"][import_chunk_YWFYN3OY.THREAD_PLUGIN]["message deleted label"],
1100
+ message: translations_default[0]["en-US"][import_chunk_IC2NICNC.THREAD_PLUGIN]["message deleted label"],
1101
1101
  data: {
1102
1102
  message,
1103
1103
  messageIndex
@@ -18,12 +18,12 @@ var __copyProps = (to, from, except, desc) => {
18
18
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
19
  var meta_exports = {};
20
20
  __export(meta_exports, {
21
- THREAD_ITEM: () => import_chunk_YWFYN3OY.THREAD_ITEM,
22
- THREAD_PLUGIN: () => import_chunk_YWFYN3OY.THREAD_PLUGIN,
23
- default: () => import_chunk_YWFYN3OY.meta_default
21
+ THREAD_ITEM: () => import_chunk_IC2NICNC.THREAD_ITEM,
22
+ THREAD_PLUGIN: () => import_chunk_IC2NICNC.THREAD_PLUGIN,
23
+ default: () => import_chunk_IC2NICNC.meta_default
24
24
  });
25
25
  module.exports = __toCommonJS(meta_exports);
26
- var import_chunk_YWFYN3OY = require("./chunk-YWFYN3OY.cjs");
26
+ var import_chunk_IC2NICNC = require("./chunk-IC2NICNC.cjs");
27
27
  // Annotate the CommonJS export names for ESM import in node:
28
28
  0 && (module.exports = {
29
29
  THREAD_ITEM,
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["meta.cjs"],
4
- "sourcesContent": ["import {\n THREAD_ITEM,\n THREAD_PLUGIN,\n meta_default\n} from \"./chunk-YWFYN3OY.cjs\";\nexport {\n THREAD_ITEM,\n THREAD_PLUGIN,\n meta_default as default\n};\n//# sourceMappingURL=meta.cjs.map\n"],
4
+ "sourcesContent": ["import {\n THREAD_ITEM,\n THREAD_PLUGIN,\n meta_default\n} from \"./chunk-IC2NICNC.cjs\";\nexport {\n THREAD_ITEM,\n THREAD_PLUGIN,\n meta_default as default\n};\n//# sourceMappingURL=meta.cjs.map\n"],
5
5
  "mappings": ";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,4BAIO;",
6
6
  "names": []
7
7
  }