@sqlrooms/discuss 0.29.0-rc.0 → 0.29.0-rc.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -75,7 +75,11 @@ export function DiscussionPanel() {
75
75
  const discussions = useRoomStore((state) => state.discuss.config.discussions);
76
76
 
77
77
  if (discussions.length === 0) {
78
- return <div className="p-4 text-sm text-muted-foreground">No discussions yet.</div>;
78
+ return (
79
+ <div className="text-muted-foreground p-4 text-sm">
80
+ No discussions yet.
81
+ </div>
82
+ );
79
83
  }
80
84
 
81
85
  return (
@@ -83,10 +87,13 @@ export function DiscussionPanel() {
83
87
  className="flex flex-col gap-4"
84
88
  renderComment={(props) => (
85
89
  <CommentItem {...props}>
86
- <div className="text-xs text-muted-foreground">
87
- {props.comment.userId} • {formatTimeRelative(props.comment.timestamp)}
90
+ <div className="text-muted-foreground text-xs">
91
+ {props.comment.userId} •{' '}
92
+ {formatTimeRelative(props.comment.timestamp)}
93
+ </div>
94
+ <div className="text-sm whitespace-pre-wrap">
95
+ {props.comment.text}
88
96
  </div>
89
- <div className="whitespace-pre-wrap text-sm">{props.comment.text}</div>
90
97
  </CommentItem>
91
98
  )}
92
99
  />
@@ -7,7 +7,7 @@ import { useStoreWithDiscussion } from '../DiscussSlice';
7
7
  // Default implementation for rendering a comment's content
8
8
  export const defaultRenderComment = (props) => {
9
9
  const { comment } = props;
10
- return (_jsx(CommentItem, { ...props, children: _jsxs("div", { className: "flex flex-col gap-1", children: [_jsxs("div", { className: "text-muted-foreground text-xs", children: ["Anonymous - ", formatTimeRelative(comment.timestamp)] }), _jsx("div", { className: "whitespace-pre-wrap text-sm", children: comment.text })] }) }));
10
+ return (_jsx(CommentItem, { ...props, children: _jsxs("div", { className: "flex flex-col gap-1", children: [_jsxs("div", { className: "text-muted-foreground text-xs", children: ["Anonymous - ", formatTimeRelative(comment.timestamp)] }), _jsx("div", { className: "text-sm whitespace-pre-wrap", children: comment.text })] }) }));
11
11
  };
12
12
  export const CommentItem = forwardRef(({ discussion, comment, isRootComment = false, className, children }, ref) => {
13
13
  const userId = useStoreWithDiscussion((state) => state.discuss.userId);
@@ -1 +1 @@
1
- {"version":3,"file":"CommentItem.js","sourceRoot":"","sources":["../../src/components/CommentItem.tsx"],"names":[],"mappings":"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","sourcesContent":["import {\n Button,\n cn,\n Tooltip,\n TooltipContent,\n TooltipProvider,\n TooltipTrigger,\n} from '@sqlrooms/ui';\nimport {formatTimeRelative} from '@sqlrooms/utils';\nimport {Edit, MessageSquareReply, Trash2} from 'lucide-react';\nimport {ComponentPropsWithRef, forwardRef, ReactNode} from 'react';\nimport type {Comment, Discussion} from '../DiscussSlice';\nimport {useStoreWithDiscussion} from '../DiscussSlice';\n\nexport type CommentItemProps = ComponentPropsWithRef<'div'> & {\n discussion: Discussion;\n comment: Comment;\n isRootComment?: boolean;\n className?: string;\n};\n\n// Default implementation for rendering a comment's content\nexport const defaultRenderComment = (props: CommentItemProps): ReactNode => {\n const {comment} = props;\n return (\n <CommentItem {...props}>\n <div className=\"flex flex-col gap-1\">\n <div className=\"text-muted-foreground text-xs\">\n Anonymous - {formatTimeRelative(comment.timestamp)}\n </div>\n <div className=\"whitespace-pre-wrap text-sm\">{comment.text}</div>\n </div>\n </CommentItem>\n );\n};\n\nexport const CommentItem = forwardRef<HTMLDivElement, CommentItemProps>(\n ({discussion, comment, isRootComment = false, className, children}, ref) => {\n const userId = useStoreWithDiscussion((state) => state.discuss.userId);\n const discussionId = discussion.id;\n const setReplyToItem = useStoreWithDiscussion(\n (state) => state.discuss.setReplyToItem,\n );\n const setEditingItem = useStoreWithDiscussion(\n (state) => state.discuss.setEditingItem,\n );\n const setItemToDelete = useStoreWithDiscussion(\n (state) => state.discuss.setItemToDelete,\n );\n\n const handleReply = () => {\n if (isRootComment) {\n setReplyToItem({discussionId});\n } else {\n setReplyToItem({discussionId, commentId: comment.id});\n }\n };\n\n const handleEdit = () => {\n if (isRootComment) {\n setEditingItem({discussionId});\n } else {\n setEditingItem({discussionId, commentId: comment.id});\n }\n };\n\n const handleDelete = () => {\n if (isRootComment) {\n setItemToDelete({discussionId, itemType: 'Discussion'});\n } else {\n setItemToDelete({\n discussionId,\n commentId: comment.id,\n itemType: 'Comment',\n });\n }\n };\n\n return (\n <TooltipProvider>\n <div ref={ref} className={cn('flex flex-col gap-2', className)}>\n {children}\n <div className=\"mt-1 flex justify-end gap-1 text-xs\">\n <Tooltip>\n <TooltipTrigger asChild>\n <Button variant=\"ghost\" size=\"xs\" onClick={handleReply}>\n <MessageSquareReply className=\"h-3 w-3\" />\n </Button>\n </TooltipTrigger>\n <TooltipContent>\n <p>Reply</p>\n </TooltipContent>\n </Tooltip>\n {comment.userId === userId && (\n <>\n <Tooltip>\n <TooltipTrigger asChild>\n <Button variant=\"ghost\" size=\"xs\" onClick={handleEdit}>\n <Edit className=\"h-3 w-3\" />\n </Button>\n </TooltipTrigger>\n <TooltipContent>\n <p>Edit</p>\n </TooltipContent>\n </Tooltip>\n <Tooltip>\n <TooltipTrigger asChild>\n <Button variant=\"ghost\" size=\"xs\" onClick={handleDelete}>\n <Trash2 className=\"h-3 w-3\" />\n </Button>\n </TooltipTrigger>\n <TooltipContent>\n <p>Delete</p>\n </TooltipContent>\n </Tooltip>\n </>\n )}\n </div>\n </div>\n </TooltipProvider>\n );\n },\n);\nCommentItem.displayName = 'CommentItem';\n"]}
1
+ {"version":3,"file":"CommentItem.js","sourceRoot":"","sources":["../../src/components/CommentItem.tsx"],"names":[],"mappings":";AAAA,OAAO,EACL,MAAM,EACN,EAAE,EACF,OAAO,EACP,cAAc,EACd,eAAe,EACf,cAAc,GACf,MAAM,cAAc,CAAC;AACtB,OAAO,EAAC,kBAAkB,EAAC,MAAM,iBAAiB,CAAC;AACnD,OAAO,EAAC,IAAI,EAAE,kBAAkB,EAAE,MAAM,EAAC,MAAM,cAAc,CAAC;AAC9D,OAAO,EAAwB,UAAU,EAAY,MAAM,OAAO,CAAC;AAEnE,OAAO,EAAC,sBAAsB,EAAC,MAAM,iBAAiB,CAAC;AASvD,2DAA2D;AAC3D,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,KAAuB,EAAa,EAAE;IACzE,MAAM,EAAC,OAAO,EAAC,GAAG,KAAK,CAAC;IACxB,OAAO,CACL,KAAC,WAAW,OAAK,KAAK,YACpB,eAAK,SAAS,EAAC,qBAAqB,aAClC,eAAK,SAAS,EAAC,+BAA+B,6BAC/B,kBAAkB,CAAC,OAAO,CAAC,SAAS,CAAC,IAC9C,EACN,cAAK,SAAS,EAAC,6BAA6B,YAAE,OAAO,CAAC,IAAI,GAAO,IAC7D,GACM,CACf,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,WAAW,GAAG,UAAU,CACnC,CAAC,EAAC,UAAU,EAAE,OAAO,EAAE,aAAa,GAAG,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAC,EAAE,GAAG,EAAE,EAAE;IACzE,MAAM,MAAM,GAAG,sBAAsB,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IACvE,MAAM,YAAY,GAAG,UAAU,CAAC,EAAE,CAAC;IACnC,MAAM,cAAc,GAAG,sBAAsB,CAC3C,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,cAAc,CACxC,CAAC;IACF,MAAM,cAAc,GAAG,sBAAsB,CAC3C,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,cAAc,CACxC,CAAC;IACF,MAAM,eAAe,GAAG,sBAAsB,CAC5C,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,eAAe,CACzC,CAAC;IAEF,MAAM,WAAW,GAAG,GAAG,EAAE;QACvB,IAAI,aAAa,EAAE,CAAC;YAClB,cAAc,CAAC,EAAC,YAAY,EAAC,CAAC,CAAC;QACjC,CAAC;aAAM,CAAC;YACN,cAAc,CAAC,EAAC,YAAY,EAAE,SAAS,EAAE,OAAO,CAAC,EAAE,EAAC,CAAC,CAAC;QACxD,CAAC;IACH,CAAC,CAAC;IAEF,MAAM,UAAU,GAAG,GAAG,EAAE;QACtB,IAAI,aAAa,EAAE,CAAC;YAClB,cAAc,CAAC,EAAC,YAAY,EAAC,CAAC,CAAC;QACjC,CAAC;aAAM,CAAC;YACN,cAAc,CAAC,EAAC,YAAY,EAAE,SAAS,EAAE,OAAO,CAAC,EAAE,EAAC,CAAC,CAAC;QACxD,CAAC;IACH,CAAC,CAAC;IAEF,MAAM,YAAY,GAAG,GAAG,EAAE;QACxB,IAAI,aAAa,EAAE,CAAC;YAClB,eAAe,CAAC,EAAC,YAAY,EAAE,QAAQ,EAAE,YAAY,EAAC,CAAC,CAAC;QAC1D,CAAC;aAAM,CAAC;YACN,eAAe,CAAC;gBACd,YAAY;gBACZ,SAAS,EAAE,OAAO,CAAC,EAAE;gBACrB,QAAQ,EAAE,SAAS;aACpB,CAAC,CAAC;QACL,CAAC;IACH,CAAC,CAAC;IAEF,OAAO,CACL,KAAC,eAAe,cACd,eAAK,GAAG,EAAE,GAAG,EAAE,SAAS,EAAE,EAAE,CAAC,qBAAqB,EAAE,SAAS,CAAC,aAC3D,QAAQ,EACT,eAAK,SAAS,EAAC,qCAAqC,aAClD,MAAC,OAAO,eACN,KAAC,cAAc,IAAC,OAAO,kBACrB,KAAC,MAAM,IAAC,OAAO,EAAC,OAAO,EAAC,IAAI,EAAC,IAAI,EAAC,OAAO,EAAE,WAAW,YACpD,KAAC,kBAAkB,IAAC,SAAS,EAAC,SAAS,GAAG,GACnC,GACM,EACjB,KAAC,cAAc,cACb,gCAAY,GACG,IACT,EACT,OAAO,CAAC,MAAM,KAAK,MAAM,IAAI,CAC5B,8BACE,MAAC,OAAO,eACN,KAAC,cAAc,IAAC,OAAO,kBACrB,KAAC,MAAM,IAAC,OAAO,EAAC,OAAO,EAAC,IAAI,EAAC,IAAI,EAAC,OAAO,EAAE,UAAU,YACnD,KAAC,IAAI,IAAC,SAAS,EAAC,SAAS,GAAG,GACrB,GACM,EACjB,KAAC,cAAc,cACb,+BAAW,GACI,IACT,EACV,MAAC,OAAO,eACN,KAAC,cAAc,IAAC,OAAO,kBACrB,KAAC,MAAM,IAAC,OAAO,EAAC,OAAO,EAAC,IAAI,EAAC,IAAI,EAAC,OAAO,EAAE,YAAY,YACrD,KAAC,MAAM,IAAC,SAAS,EAAC,SAAS,GAAG,GACvB,GACM,EACjB,KAAC,cAAc,cACb,iCAAa,GACE,IACT,IACT,CACJ,IACG,IACF,GACU,CACnB,CAAC;AACJ,CAAC,CACF,CAAC;AACF,WAAW,CAAC,WAAW,GAAG,aAAa,CAAC","sourcesContent":["import {\n Button,\n cn,\n Tooltip,\n TooltipContent,\n TooltipProvider,\n TooltipTrigger,\n} from '@sqlrooms/ui';\nimport {formatTimeRelative} from '@sqlrooms/utils';\nimport {Edit, MessageSquareReply, Trash2} from 'lucide-react';\nimport {ComponentPropsWithRef, forwardRef, ReactNode} from 'react';\nimport type {Comment, Discussion} from '../DiscussSlice';\nimport {useStoreWithDiscussion} from '../DiscussSlice';\n\nexport type CommentItemProps = ComponentPropsWithRef<'div'> & {\n discussion: Discussion;\n comment: Comment;\n isRootComment?: boolean;\n className?: string;\n};\n\n// Default implementation for rendering a comment's content\nexport const defaultRenderComment = (props: CommentItemProps): ReactNode => {\n const {comment} = props;\n return (\n <CommentItem {...props}>\n <div className=\"flex flex-col gap-1\">\n <div className=\"text-muted-foreground text-xs\">\n Anonymous - {formatTimeRelative(comment.timestamp)}\n </div>\n <div className=\"text-sm whitespace-pre-wrap\">{comment.text}</div>\n </div>\n </CommentItem>\n );\n};\n\nexport const CommentItem = forwardRef<HTMLDivElement, CommentItemProps>(\n ({discussion, comment, isRootComment = false, className, children}, ref) => {\n const userId = useStoreWithDiscussion((state) => state.discuss.userId);\n const discussionId = discussion.id;\n const setReplyToItem = useStoreWithDiscussion(\n (state) => state.discuss.setReplyToItem,\n );\n const setEditingItem = useStoreWithDiscussion(\n (state) => state.discuss.setEditingItem,\n );\n const setItemToDelete = useStoreWithDiscussion(\n (state) => state.discuss.setItemToDelete,\n );\n\n const handleReply = () => {\n if (isRootComment) {\n setReplyToItem({discussionId});\n } else {\n setReplyToItem({discussionId, commentId: comment.id});\n }\n };\n\n const handleEdit = () => {\n if (isRootComment) {\n setEditingItem({discussionId});\n } else {\n setEditingItem({discussionId, commentId: comment.id});\n }\n };\n\n const handleDelete = () => {\n if (isRootComment) {\n setItemToDelete({discussionId, itemType: 'Discussion'});\n } else {\n setItemToDelete({\n discussionId,\n commentId: comment.id,\n itemType: 'Comment',\n });\n }\n };\n\n return (\n <TooltipProvider>\n <div ref={ref} className={cn('flex flex-col gap-2', className)}>\n {children}\n <div className=\"mt-1 flex justify-end gap-1 text-xs\">\n <Tooltip>\n <TooltipTrigger asChild>\n <Button variant=\"ghost\" size=\"xs\" onClick={handleReply}>\n <MessageSquareReply className=\"h-3 w-3\" />\n </Button>\n </TooltipTrigger>\n <TooltipContent>\n <p>Reply</p>\n </TooltipContent>\n </Tooltip>\n {comment.userId === userId && (\n <>\n <Tooltip>\n <TooltipTrigger asChild>\n <Button variant=\"ghost\" size=\"xs\" onClick={handleEdit}>\n <Edit className=\"h-3 w-3\" />\n </Button>\n </TooltipTrigger>\n <TooltipContent>\n <p>Edit</p>\n </TooltipContent>\n </Tooltip>\n <Tooltip>\n <TooltipTrigger asChild>\n <Button variant=\"ghost\" size=\"xs\" onClick={handleDelete}>\n <Trash2 className=\"h-3 w-3\" />\n </Button>\n </TooltipTrigger>\n <TooltipContent>\n <p>Delete</p>\n </TooltipContent>\n </Tooltip>\n </>\n )}\n </div>\n </div>\n </TooltipProvider>\n );\n },\n);\nCommentItem.displayName = 'CommentItem';\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sqlrooms/discuss",
3
- "version": "0.29.0-rc.0",
3
+ "version": "0.29.0-rc.2",
4
4
  "type": "module",
5
5
  "sideEffects": false,
6
6
  "main": "dist/index.js",
@@ -16,9 +16,9 @@
16
16
  },
17
17
  "dependencies": {
18
18
  "@paralleldrive/cuid2": "^3.0.0",
19
- "@sqlrooms/room-shell": "0.29.0-rc.0",
20
- "@sqlrooms/ui": "0.29.0-rc.0",
21
- "@sqlrooms/utils": "0.29.0-rc.0",
19
+ "@sqlrooms/room-shell": "0.29.0-rc.2",
20
+ "@sqlrooms/ui": "0.29.0-rc.2",
21
+ "@sqlrooms/utils": "0.29.0-rc.2",
22
22
  "immer": "^11.0.1",
23
23
  "lucide-react": "^0.556.0",
24
24
  "zod": "^4.1.8"
@@ -33,5 +33,5 @@
33
33
  "lint": "eslint .",
34
34
  "typedoc": "typedoc"
35
35
  },
36
- "gitHead": "afdb949c9601b4cdeaae966157a25a54aea2ae54"
36
+ "gitHead": "5d511631992c1af8852ea79ced488867aad4a555"
37
37
  }