@tldraw/commenting 0.0.0-bootstrap → 5.3.0-internal.1640468db8fd

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 (184) hide show
  1. package/commenting.css +284 -153
  2. package/dist-cjs/canvas/comment-body.js +1 -1
  3. package/dist-cjs/canvas/comment-body.js.map +2 -2
  4. package/dist-cjs/canvas/comment-drafts.js +54 -0
  5. package/dist-cjs/canvas/comment-drafts.js.map +7 -0
  6. package/dist-cjs/canvas/comment-render.js +2 -0
  7. package/dist-cjs/canvas/comment-render.js.map +2 -2
  8. package/dist-cjs/canvas/comment-tool.js +65 -12
  9. package/dist-cjs/canvas/comment-tool.js.map +2 -2
  10. package/dist-cjs/canvas/comments-filter-menu.js +54 -63
  11. package/dist-cjs/canvas/comments-filter-menu.js.map +2 -2
  12. package/dist-cjs/canvas/comments-overflow-menu.js +21 -27
  13. package/dist-cjs/canvas/comments-overflow-menu.js.map +2 -2
  14. package/dist-cjs/canvas/comments-overlay.js +304 -112
  15. package/dist-cjs/canvas/comments-overlay.js.map +2 -2
  16. package/dist-cjs/canvas/comments-sidebar.js +12 -18
  17. package/dist-cjs/canvas/comments-sidebar.js.map +2 -2
  18. package/dist-cjs/canvas/comments-visibility-toggle.js +66 -0
  19. package/dist-cjs/canvas/comments-visibility-toggle.js.map +7 -0
  20. package/dist-cjs/canvas/options.js +1 -0
  21. package/dist-cjs/canvas/options.js.map +2 -2
  22. package/dist-cjs/canvas/sidebar-filters.js +2 -2
  23. package/dist-cjs/canvas/sidebar-filters.js.map +2 -2
  24. package/dist-cjs/canvas/state.js +11 -0
  25. package/dist-cjs/canvas/state.js.map +2 -2
  26. package/dist-cjs/canvas/thread-state.js +8 -1
  27. package/dist-cjs/canvas/thread-state.js.map +2 -2
  28. package/dist-cjs/clustering/runtime.js +119 -7
  29. package/dist-cjs/clustering/runtime.js.map +2 -2
  30. package/dist-cjs/index.d.ts +126 -41
  31. package/dist-cjs/index.js +7 -1
  32. package/dist-cjs/index.js.map +2 -2
  33. package/dist-cjs/ui/avatar.js +14 -6
  34. package/dist-cjs/ui/avatar.js.map +2 -2
  35. package/dist-cjs/ui/byline.js +4 -4
  36. package/dist-cjs/ui/byline.js.map +2 -2
  37. package/dist-cjs/ui/comment-author.js +17 -0
  38. package/dist-cjs/ui/comment-author.js.map +7 -0
  39. package/dist-cjs/ui/comment-card.js +4 -4
  40. package/dist-cjs/ui/comment-card.js.map +2 -2
  41. package/dist-cjs/ui/comment-composer.js +92 -29
  42. package/dist-cjs/ui/comment-composer.js.map +2 -2
  43. package/dist-cjs/ui/comment-mention.js +1 -1
  44. package/dist-cjs/ui/comment-mention.js.map +2 -2
  45. package/dist-cjs/ui/comment-pin.js +23 -3
  46. package/dist-cjs/ui/comment-pin.js.map +2 -2
  47. package/dist-cjs/ui/comment-text.js +1 -1
  48. package/dist-cjs/ui/comment-text.js.map +2 -2
  49. package/dist-cjs/ui/comment-thread.js +6 -6
  50. package/dist-cjs/ui/comment-thread.js.map +2 -2
  51. package/dist-cjs/ui/comments-list.js +12 -12
  52. package/dist-cjs/ui/comments-list.js.map +2 -2
  53. package/dist-cjs/ui/count-badge.js +1 -1
  54. package/dist-cjs/ui/count-badge.js.map +2 -2
  55. package/dist-cjs/ui/empty-state.js +3 -3
  56. package/dist-cjs/ui/empty-state.js.map +2 -2
  57. package/dist-cjs/ui/format-time.js +3 -0
  58. package/dist-cjs/ui/format-time.js.map +2 -2
  59. package/dist-cjs/ui/mention-list.js +8 -8
  60. package/dist-cjs/ui/mention-list.js.map +2 -2
  61. package/dist-cjs/ui/mention-suggestion.js +3 -3
  62. package/dist-cjs/ui/mention-suggestion.js.map +2 -2
  63. package/dist-cjs/ui/mention.js +1 -1
  64. package/dist-cjs/ui/mention.js.map +2 -2
  65. package/dist-cjs/ui/reaction.js +11 -4
  66. package/dist-cjs/ui/reaction.js.map +2 -2
  67. package/dist-cjs/ui/reactions.js +10 -2
  68. package/dist-cjs/ui/reactions.js.map +2 -2
  69. package/dist-cjs/ui/send-button.js +1 -1
  70. package/dist-cjs/ui/send-button.js.map +2 -2
  71. package/dist-cjs/ui/tooltip-button.js +32 -0
  72. package/dist-cjs/ui/tooltip-button.js.map +7 -0
  73. package/dist-esm/canvas/comment-body.mjs +1 -1
  74. package/dist-esm/canvas/comment-body.mjs.map +2 -2
  75. package/dist-esm/canvas/comment-drafts.mjs +34 -0
  76. package/dist-esm/canvas/comment-drafts.mjs.map +7 -0
  77. package/dist-esm/canvas/comment-render.mjs +2 -0
  78. package/dist-esm/canvas/comment-render.mjs.map +2 -2
  79. package/dist-esm/canvas/comment-tool.mjs +67 -14
  80. package/dist-esm/canvas/comment-tool.mjs.map +2 -2
  81. package/dist-esm/canvas/comments-filter-menu.mjs +54 -63
  82. package/dist-esm/canvas/comments-filter-menu.mjs.map +2 -2
  83. package/dist-esm/canvas/comments-overflow-menu.mjs +22 -27
  84. package/dist-esm/canvas/comments-overflow-menu.mjs.map +2 -2
  85. package/dist-esm/canvas/comments-overlay.mjs +322 -114
  86. package/dist-esm/canvas/comments-overlay.mjs.map +2 -2
  87. package/dist-esm/canvas/comments-sidebar.mjs +15 -21
  88. package/dist-esm/canvas/comments-sidebar.mjs.map +2 -2
  89. package/dist-esm/canvas/comments-visibility-toggle.mjs +46 -0
  90. package/dist-esm/canvas/comments-visibility-toggle.mjs.map +7 -0
  91. package/dist-esm/canvas/options.mjs +1 -0
  92. package/dist-esm/canvas/options.mjs.map +2 -2
  93. package/dist-esm/canvas/sidebar-filters.mjs +2 -2
  94. package/dist-esm/canvas/sidebar-filters.mjs.map +2 -2
  95. package/dist-esm/canvas/state.mjs +11 -0
  96. package/dist-esm/canvas/state.mjs.map +2 -2
  97. package/dist-esm/canvas/thread-state.mjs +8 -1
  98. package/dist-esm/canvas/thread-state.mjs.map +2 -2
  99. package/dist-esm/clustering/runtime.mjs +119 -7
  100. package/dist-esm/clustering/runtime.mjs.map +2 -2
  101. package/dist-esm/index.d.mts +126 -41
  102. package/dist-esm/index.mjs +11 -1
  103. package/dist-esm/index.mjs.map +2 -2
  104. package/dist-esm/ui/avatar.mjs +14 -6
  105. package/dist-esm/ui/avatar.mjs.map +2 -2
  106. package/dist-esm/ui/byline.mjs +4 -4
  107. package/dist-esm/ui/byline.mjs.map +2 -2
  108. package/dist-esm/ui/comment-author.mjs +1 -0
  109. package/dist-esm/ui/comment-author.mjs.map +7 -0
  110. package/dist-esm/ui/comment-card.mjs +4 -4
  111. package/dist-esm/ui/comment-card.mjs.map +2 -2
  112. package/dist-esm/ui/comment-composer.mjs +93 -30
  113. package/dist-esm/ui/comment-composer.mjs.map +2 -2
  114. package/dist-esm/ui/comment-mention.mjs +1 -1
  115. package/dist-esm/ui/comment-mention.mjs.map +2 -2
  116. package/dist-esm/ui/comment-pin.mjs +23 -3
  117. package/dist-esm/ui/comment-pin.mjs.map +2 -2
  118. package/dist-esm/ui/comment-text.mjs +1 -1
  119. package/dist-esm/ui/comment-text.mjs.map +2 -2
  120. package/dist-esm/ui/comment-thread.mjs +6 -6
  121. package/dist-esm/ui/comment-thread.mjs.map +2 -2
  122. package/dist-esm/ui/comments-list.mjs +12 -12
  123. package/dist-esm/ui/comments-list.mjs.map +2 -2
  124. package/dist-esm/ui/count-badge.mjs +1 -1
  125. package/dist-esm/ui/count-badge.mjs.map +2 -2
  126. package/dist-esm/ui/empty-state.mjs +3 -3
  127. package/dist-esm/ui/empty-state.mjs.map +2 -2
  128. package/dist-esm/ui/format-time.mjs +3 -0
  129. package/dist-esm/ui/format-time.mjs.map +2 -2
  130. package/dist-esm/ui/mention-list.mjs +8 -8
  131. package/dist-esm/ui/mention-list.mjs.map +2 -2
  132. package/dist-esm/ui/mention-suggestion.mjs +3 -3
  133. package/dist-esm/ui/mention-suggestion.mjs.map +2 -2
  134. package/dist-esm/ui/mention.mjs +1 -1
  135. package/dist-esm/ui/mention.mjs.map +2 -2
  136. package/dist-esm/ui/reaction.mjs +11 -4
  137. package/dist-esm/ui/reaction.mjs.map +2 -2
  138. package/dist-esm/ui/reactions.mjs +10 -2
  139. package/dist-esm/ui/reactions.mjs.map +2 -2
  140. package/dist-esm/ui/send-button.mjs +1 -1
  141. package/dist-esm/ui/send-button.mjs.map +2 -2
  142. package/dist-esm/ui/tooltip-button.mjs +12 -0
  143. package/dist-esm/ui/tooltip-button.mjs.map +7 -0
  144. package/package.json +3 -3
  145. package/src/canvas/canvas.css +79 -36
  146. package/src/canvas/comment-body.tsx +1 -1
  147. package/src/canvas/comment-drafts.test.ts +55 -0
  148. package/src/canvas/comment-drafts.ts +46 -0
  149. package/src/canvas/comment-render.test.ts +1 -1
  150. package/src/canvas/comment-render.ts +7 -2
  151. package/src/canvas/comment-tool.tsx +98 -17
  152. package/src/canvas/comments-filter-menu.tsx +27 -33
  153. package/src/canvas/comments-overflow-menu.tsx +13 -21
  154. package/src/canvas/comments-overlay.tsx +441 -145
  155. package/src/canvas/comments-sidebar.tsx +27 -28
  156. package/src/canvas/comments-visibility-toggle.tsx +50 -0
  157. package/src/canvas/options.ts +25 -0
  158. package/src/canvas/sidebar-filters.ts +4 -3
  159. package/src/canvas/state.ts +22 -0
  160. package/src/canvas/thread-state.ts +16 -3
  161. package/src/clustering/runtime.test.ts +183 -7
  162. package/src/clustering/runtime.ts +164 -15
  163. package/src/index.ts +7 -0
  164. package/src/ui/avatar.tsx +15 -11
  165. package/src/ui/byline.tsx +6 -5
  166. package/src/ui/comment-author.ts +15 -0
  167. package/src/ui/comment-card.tsx +6 -5
  168. package/src/ui/comment-composer.tsx +122 -33
  169. package/src/ui/comment-mention.ts +2 -2
  170. package/src/ui/comment-pin.tsx +35 -4
  171. package/src/ui/comment-text.tsx +1 -1
  172. package/src/ui/comment-thread.tsx +8 -6
  173. package/src/ui/comments-list.tsx +19 -14
  174. package/src/ui/comments.css +205 -117
  175. package/src/ui/count-badge.tsx +1 -1
  176. package/src/ui/empty-state.tsx +3 -3
  177. package/src/ui/format-time.ts +5 -0
  178. package/src/ui/mention-list.tsx +13 -16
  179. package/src/ui/mention-suggestion.tsx +3 -3
  180. package/src/ui/mention.tsx +1 -1
  181. package/src/ui/reaction.tsx +6 -3
  182. package/src/ui/reactions.tsx +6 -2
  183. package/src/ui/send-button.tsx +1 -1
  184. package/src/ui/tooltip-button.tsx +20 -0
@@ -1,4 +1,4 @@
1
- import { ReactNode } from 'react'
1
+ import { CSSProperties, ReactNode } from 'react'
2
2
 
3
3
  /** @public */
4
4
  export interface CommentPinProps {
@@ -8,14 +8,45 @@ export interface CommentPinProps {
8
8
  resolved?: boolean
9
9
  /** The pin's thread is open — shows the active/selected indicator state. */
10
10
  open?: boolean
11
+ /** Background color (any CSS color). Falls back to the default pin tint.
12
+ * Ignored while resolved — resolved pins are always grey. */
13
+ color?: string
11
14
  }
12
15
 
16
+ /* An inline check, not a text glyph — the '✓' character sits off-baseline and varies by font. */
17
+ const resolvedCheck = (
18
+ <svg
19
+ viewBox="0 0 24 24"
20
+ width="15"
21
+ height="15"
22
+ fill="none"
23
+ stroke="currentColor"
24
+ strokeWidth="2.5"
25
+ strokeLinecap="round"
26
+ strokeLinejoin="round"
27
+ aria-hidden="true"
28
+ >
29
+ <path d="M4 12.5l5 5L20 6.5" />
30
+ </svg>
31
+ )
32
+
13
33
  /** A canvas comment marker: shows its `children` (or a check when resolved). Purely
14
34
  * presentational — it reflects open/resolved state via CSS; wrap it to make it clickable.
15
35
  * @public @react */
16
- export function CommentPin({ children, resolved, open }: CommentPinProps) {
17
- const className = ['cmt-pin', resolved && 'cmt-pin--resolved', open && 'cmt-pin--open']
36
+ export function CommentPin({ children, resolved, open, color }: CommentPinProps) {
37
+ const className = [
38
+ 'tlui-cmt-pin',
39
+ resolved && 'tlui-cmt-pin--resolved',
40
+ open && 'tlui-cmt-pin--open',
41
+ ]
18
42
  .filter(Boolean)
19
43
  .join(' ')
20
- return <div className={className}>{resolved ? '✓' : children}</div>
44
+ // A custom property rather than backgroundColor, so the open ring follows the tint too.
45
+ const style =
46
+ color && !resolved ? ({ '--tlui-cmt-pin-color': color } as CSSProperties) : undefined
47
+ return (
48
+ <div className={className} style={style}>
49
+ {resolved ? resolvedCheck : children}
50
+ </div>
51
+ )
21
52
  }
@@ -8,5 +8,5 @@ export interface CommentTextProps {
8
8
 
9
9
  /** A comment's body, rendered as markdown (bold, italic, code, links, lists). @public @react */
10
10
  export function CommentText({ text }: CommentTextProps) {
11
- return <div className="cmt-text">{renderMarkdown(text)}</div>
11
+ return <div className="tlui-cmt-text">{renderMarkdown(text)}</div>
12
12
  }
@@ -33,17 +33,19 @@ export function CommentThread({
33
33
  renderComment,
34
34
  }: CommentThreadProps) {
35
35
  return (
36
- <div className="cmt-thread">
36
+ <div className="tlui-cmt-thread">
37
37
  {(header !== undefined || headerActions !== undefined) && (
38
- <div className="cmt-thread__header">
39
- <span className="cmt-thread__title">{header}</span>
38
+ <div className="tlui-cmt-thread__header">
39
+ <span className="tlui-cmt-thread__title">{header}</span>
40
40
  {headerActions !== undefined && (
41
- <div className="cmt-thread__actions">{headerActions}</div>
41
+ <div className="tlui-cmt-thread__actions">{headerActions}</div>
42
42
  )}
43
43
  </div>
44
44
  )}
45
- {resolvedBanner !== undefined && <div className="cmt-thread__resolved">{resolvedBanner}</div>}
46
- <div className="cmt-thread__list">
45
+ {resolvedBanner !== undefined && (
46
+ <div className="tlui-cmt-thread__resolved">{resolvedBanner}</div>
47
+ )}
48
+ <div className="tlui-cmt-thread__list">
47
49
  {comments.map((comment, i) => (
48
50
  <div key={i}>
49
51
  {renderComment ? renderComment(comment, i) : <CommentCard {...comment} />}
@@ -1,11 +1,12 @@
1
1
  import { ReactNode } from 'react'
2
2
  import { Avatar } from './avatar'
3
3
  import { Byline } from './byline'
4
+ import { CommentAuthor } from './comment-author'
4
5
 
5
6
  /** @public */
6
7
  export interface CommentListItemProps {
7
8
  id: string
8
- author: string
9
+ author: CommentAuthor
9
10
  /** A short preview of the thread — e.g. the first comment's body. */
10
11
  preview: ReactNode
11
12
  /** ISO datetime of the thread's first comment. */
@@ -52,17 +53,17 @@ export function CommentsList({
52
53
  renderItem,
53
54
  }: CommentsListProps) {
54
55
  return (
55
- <div className="cmt-list">
56
+ <div className="tlui-cmt-list">
56
57
  {(header !== undefined || headerAction) && (
57
- <div className="cmt-list__header">
58
- {header !== undefined && <span className="cmt-list__header-title">{header}</span>}
58
+ <div className="tlui-cmt-list__header">
59
+ {header !== undefined && <span className="tlui-cmt-list__header-title">{header}</span>}
59
60
  {headerAction}
60
61
  </div>
61
62
  )}
62
63
  {items.length === 0 ? (
63
- <div className="cmt-list__empty">{empty}</div>
64
+ <div className="tlui-cmt-list__empty">{empty}</div>
64
65
  ) : (
65
- <div className="cmt-list__items">
66
+ <div className="tlui-cmt-list__items">
66
67
  {items.map((item) =>
67
68
  renderItem ? (
68
69
  renderItem(item)
@@ -99,27 +100,31 @@ function CommentListItem({
99
100
  return (
100
101
  <button
101
102
  type="button"
102
- className={selected ? 'cmt-list__item cmt-list__item--selected' : 'cmt-list__item'}
103
+ className={
104
+ selected ? 'tlui-cmt-list__item tlui-cmt-list__item--selected' : 'tlui-cmt-list__item'
105
+ }
103
106
  data-resolved={resolved || undefined}
104
107
  onClick={handleClick}
105
108
  >
106
- <Avatar name={author} />
107
- <div className="cmt-list__item-body">
109
+ <Avatar author={author} />
110
+ <div className="tlui-cmt-list__item-body">
108
111
  <Byline author={author} date={date} />
109
- <div className="cmt-list__item-preview">{preview}</div>
112
+ <div className="tlui-cmt-list__item-preview">{preview}</div>
110
113
  {(resolved || page !== undefined) && (
111
- <div className="cmt-list__item-meta">
114
+ <div className="tlui-cmt-list__item-meta">
112
115
  {resolved && (
113
- <span className="cmt-list__item-resolved">
116
+ <span className="tlui-cmt-list__item-resolved">
114
117
  <CheckIcon />
115
118
  {resolvedLabel}
116
119
  </span>
117
120
  )}
118
- {page !== undefined && <span className="cmt-list__item-page">{page}</span>}
121
+ {page !== undefined && <span className="tlui-cmt-list__item-page">{page}</span>}
119
122
  </div>
120
123
  )}
121
124
  </div>
122
- {count !== undefined && count > 1 && <span className="cmt-list__item-count">{count}</span>}
125
+ {count !== undefined && count > 1 && (
126
+ <span className="tlui-cmt-list__item-count">{count}</span>
127
+ )}
123
128
  </button>
124
129
  )
125
130
  }