@tldraw/commenting 5.4.0-next.ef99ab47e5ce → 5.5.0-canary.022e164c8709

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 (40) hide show
  1. package/LICENSE.md +1 -0
  2. package/dist-cjs/canvas/cluster-model.js +1 -0
  3. package/dist-cjs/canvas/cluster-model.js.map +2 -2
  4. package/dist-cjs/canvas/comments-overlay.js +11 -4
  5. package/dist-cjs/canvas/comments-overlay.js.map +2 -2
  6. package/dist-cjs/canvas/license.js +1 -1
  7. package/dist-cjs/canvas/license.js.map +2 -2
  8. package/dist-cjs/canvas/thread-state.js +1 -0
  9. package/dist-cjs/canvas/thread-state.js.map +2 -2
  10. package/dist-cjs/index.d.ts +24 -17
  11. package/dist-cjs/index.js +1 -1
  12. package/dist-cjs/ui/emoji-picker.js +1 -1
  13. package/dist-cjs/ui/emoji-picker.js.map +2 -2
  14. package/dist-cjs/ui/reaction-picker.js +9 -3
  15. package/dist-cjs/ui/reaction-picker.js.map +2 -2
  16. package/dist-esm/canvas/cluster-model.mjs +1 -0
  17. package/dist-esm/canvas/cluster-model.mjs.map +2 -2
  18. package/dist-esm/canvas/comments-overlay.mjs +11 -4
  19. package/dist-esm/canvas/comments-overlay.mjs.map +2 -2
  20. package/dist-esm/canvas/license.mjs +2 -2
  21. package/dist-esm/canvas/license.mjs.map +2 -2
  22. package/dist-esm/canvas/thread-state.mjs +1 -0
  23. package/dist-esm/canvas/thread-state.mjs.map +2 -2
  24. package/dist-esm/index.d.mts +24 -17
  25. package/dist-esm/index.mjs +1 -1
  26. package/dist-esm/ui/emoji-picker.mjs +1 -1
  27. package/dist-esm/ui/emoji-picker.mjs.map +2 -2
  28. package/dist-esm/ui/reaction-picker.mjs +9 -3
  29. package/dist-esm/ui/reaction-picker.mjs.map +2 -2
  30. package/package.json +13 -5
  31. package/src/canvas/cluster-model.test.ts +64 -1
  32. package/src/canvas/cluster-model.ts +1 -0
  33. package/src/canvas/comments-overlay.test.ts +43 -0
  34. package/src/canvas/comments-overlay.tsx +22 -6
  35. package/src/canvas/license.ts +5 -3
  36. package/src/canvas/thread-state.test.ts +35 -0
  37. package/src/canvas/thread-state.ts +1 -0
  38. package/src/ui/emoji-picker.tsx +7 -3
  39. package/src/ui/reaction-picker.test.ts +36 -0
  40. package/src/ui/reaction-picker.tsx +15 -4
@@ -1,4 +1,4 @@
1
- import { useCallback, useId, type ComponentType } from 'react'
1
+ import { useCallback, useId, type ComponentType, type KeyboardEvent, type MouseEvent } from 'react'
2
2
  import {
3
3
  TldrawUiButton,
4
4
  TldrawUiDropdownMenuContent,
@@ -40,6 +40,14 @@ export interface ReactionPickerProps {
40
40
  className?: string
41
41
  }
42
42
 
43
+ /**
44
+ * Whether a palette pick asked to keep the palette open (shift held) for multi-select.
45
+ * @internal
46
+ */
47
+ export function isMultiSelectPick(event?: MouseEvent | KeyboardEvent): boolean {
48
+ return !!event?.shiftKey
49
+ }
50
+
43
51
  /**
44
52
  * The add-reaction affordance: a smiley button that opens an emoji grid.
45
53
  *
@@ -47,7 +55,8 @@ export interface ReactionPickerProps {
47
55
  * reactions are added and the row reflows.
48
56
  *
49
57
  * Picking an emoji dismisses the grid — adding and removing alike, since either way the picker has
50
- * done its job — and hands focus back to the trigger.
58
+ * done its job — and hands focus back to the trigger. Shift-picking keeps the grid open, for
59
+ * choosing several reactions in a row.
51
60
  * @public @react
52
61
  */
53
62
  export function ReactionPicker({
@@ -69,9 +78,11 @@ export function ReactionPicker({
69
78
  // what closes it. The palette's tokens are plain buttons — a swappable component, not radix
70
79
  // menu items — so nothing dismisses the menu on its own.
71
80
  const handleSelect = useCallback(
72
- (value: string) => {
81
+ (value: string, event?: MouseEvent | KeyboardEvent) => {
73
82
  onSelect?.(value)
74
- tlmenus.deleteOpenMenu(id, editor?.contextId)
83
+ if (!isMultiSelectPick(event)) {
84
+ tlmenus.deleteOpenMenu(id, editor?.contextId)
85
+ }
75
86
  },
76
87
  [onSelect, id, editor]
77
88
  )