@k2b/ui 0.31.0 → 0.33.0

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 (209) hide show
  1. package/dist/base.css +2 -0
  2. package/dist/browser/actions/Dropdown.js +159 -99
  3. package/dist/browser/actions/Dropdown.js.map +1 -1
  4. package/dist/browser/actions/FilterChip.js +113 -56
  5. package/dist/browser/actions/FilterChip.js.map +1 -1
  6. package/dist/browser/actions/ViewTabs.js +8 -0
  7. package/dist/browser/actions/ViewTabs.js.map +1 -1
  8. package/dist/browser/actions/filter-messages.js +26 -2
  9. package/dist/browser/actions/filter-messages.js.map +1 -1
  10. package/dist/browser/actions/menu-rows.js +23 -3
  11. package/dist/browser/actions/menu-rows.js.map +1 -1
  12. package/dist/browser/actions/menu-sheet.js +2 -7
  13. package/dist/browser/actions/menu-sheet.js.map +1 -1
  14. package/dist/browser/chat/ChatComposer.js +480 -403
  15. package/dist/browser/chat/ChatComposer.js.map +1 -1
  16. package/dist/browser/chat/chat-messages.js +14 -0
  17. package/dist/browser/chat/chat-messages.js.map +1 -1
  18. package/dist/browser/chat/index.js.map +1 -1
  19. package/dist/browser/content/Calendar.js +39 -29
  20. package/dist/browser/content/Calendar.js.map +1 -1
  21. package/dist/browser/content/CalendarDayView.js +159 -165
  22. package/dist/browser/content/CalendarDayView.js.map +1 -1
  23. package/dist/browser/content/Chart.js +104 -55
  24. package/dist/browser/content/Chart.js.map +1 -1
  25. package/dist/browser/content/ChartExplorer.js +5 -3
  26. package/dist/browser/content/ChartExplorer.js.map +1 -1
  27. package/dist/browser/content/MapView.js +4 -4
  28. package/dist/browser/content/MapView.js.map +1 -1
  29. package/dist/browser/content/MessageRow.js +607 -343
  30. package/dist/browser/content/MessageRow.js.map +1 -1
  31. package/dist/browser/content/ReactionBar.js +17 -0
  32. package/dist/browser/content/ReactionBar.js.map +1 -1
  33. package/dist/browser/content/chart-inspection-core.js +4 -1
  34. package/dist/browser/content/chart-inspection-core.js.map +1 -1
  35. package/dist/browser/content/code-highlight.js +66 -0
  36. package/dist/browser/content/code-highlight.js.map +1 -1
  37. package/dist/browser/content/index.js +2 -1
  38. package/dist/browser/content/index.js.map +1 -1
  39. package/dist/browser/content/map-view-live.js +47 -10
  40. package/dist/browser/content/map-view-live.js.map +1 -1
  41. package/dist/browser/content/map-view-types.js.map +1 -1
  42. package/dist/browser/feedback/dialog-core.js +6 -0
  43. package/dist/browser/feedback/dialog-core.js.map +1 -1
  44. package/dist/browser/inputs/AutocompleteEditor.js +167 -104
  45. package/dist/browser/inputs/AutocompleteEditor.js.map +1 -1
  46. package/dist/browser/inputs/RichSelect.js +1474 -0
  47. package/dist/browser/inputs/RichSelect.js.map +1 -0
  48. package/dist/browser/inputs/TextInput.js +99 -61
  49. package/dist/browser/inputs/TextInput.js.map +1 -1
  50. package/dist/browser/inputs/choice.js +19 -8
  51. package/dist/browser/inputs/choice.js.map +1 -1
  52. package/dist/browser/inputs/index.js +1 -0
  53. package/dist/browser/inputs/index.js.map +1 -1
  54. package/dist/browser/inputs/rich-select-messages.js +46 -0
  55. package/dist/browser/inputs/rich-select-messages.js.map +1 -0
  56. package/dist/browser/intl/shortcut-messages.js +4 -0
  57. package/dist/browser/intl/shortcut-messages.js.map +1 -1
  58. package/dist/browser/intl/shortcut.js +4 -0
  59. package/dist/browser/intl/shortcut.js.map +1 -1
  60. package/dist/browser/layout/AppWorkspace.js +624 -565
  61. package/dist/browser/layout/AppWorkspace.js.map +1 -1
  62. package/dist/browser/layout/DetailPanel.js +10 -1
  63. package/dist/browser/layout/DetailPanel.js.map +1 -1
  64. package/dist/browser/layout/MobileShell.js +213 -38
  65. package/dist/browser/layout/MobileShell.js.map +1 -1
  66. package/dist/browser/layout/Navigation.js +14 -5
  67. package/dist/browser/layout/Navigation.js.map +1 -1
  68. package/dist/browser/layout/PageTitle.js +9 -3
  69. package/dist/browser/layout/PageTitle.js.map +1 -1
  70. package/dist/browser/layout/ResizeSeparator.js +8 -2
  71. package/dist/browser/layout/ResizeSeparator.js.map +1 -1
  72. package/dist/browser/layout/app-workspace-controller.js +192 -31
  73. package/dist/browser/layout/app-workspace-controller.js.map +1 -1
  74. package/dist/browser/layout/index.js +1 -0
  75. package/dist/browser/layout/index.js.map +1 -1
  76. package/dist/browser/layout/navigation-model.js.map +1 -1
  77. package/dist/browser/layout/resize-separator.js +25 -1
  78. package/dist/browser/layout/resize-separator.js.map +1 -1
  79. package/dist/browser/layout/scroll-fade.js +32 -5
  80. package/dist/browser/layout/scroll-fade.js.map +1 -1
  81. package/dist/browser/surfaces/NoticeCard.js +46 -30
  82. package/dist/browser/surfaces/NoticeCard.js.map +1 -1
  83. package/dist/browser/surfaces/Skeleton.js +14 -0
  84. package/dist/browser/surfaces/Skeleton.js.map +1 -0
  85. package/dist/browser/surfaces/index.js +1 -0
  86. package/dist/browser/surfaces/index.js.map +1 -1
  87. package/dist/browser/surfaces/resource-messages.js +2 -2
  88. package/dist/browser/surfaces/resource-messages.js.map +1 -1
  89. package/dist/ssr/actions/Dropdown.js +51 -27
  90. package/dist/ssr/actions/Dropdown.js.map +1 -1
  91. package/dist/ssr/actions/FilterChip.js +67 -16
  92. package/dist/ssr/actions/FilterChip.js.map +1 -1
  93. package/dist/ssr/actions/ViewTabs.js +8 -0
  94. package/dist/ssr/actions/ViewTabs.js.map +1 -1
  95. package/dist/ssr/actions/filter-messages.js +26 -2
  96. package/dist/ssr/actions/filter-messages.js.map +1 -1
  97. package/dist/ssr/actions/menu-rows.js +23 -3
  98. package/dist/ssr/actions/menu-rows.js.map +1 -1
  99. package/dist/ssr/actions/menu-sheet.js +2 -7
  100. package/dist/ssr/actions/menu-sheet.js.map +1 -1
  101. package/dist/ssr/chat/ChatComposer.js +96 -67
  102. package/dist/ssr/chat/ChatComposer.js.map +1 -1
  103. package/dist/ssr/chat/chat-messages.js +14 -0
  104. package/dist/ssr/chat/chat-messages.js.map +1 -1
  105. package/dist/ssr/chat/index.js.map +1 -1
  106. package/dist/ssr/content/Calendar.js +40 -31
  107. package/dist/ssr/content/Calendar.js.map +1 -1
  108. package/dist/ssr/content/CalendarDayView.js +40 -48
  109. package/dist/ssr/content/CalendarDayView.js.map +1 -1
  110. package/dist/ssr/content/Chart.js +27 -7
  111. package/dist/ssr/content/Chart.js.map +1 -1
  112. package/dist/ssr/content/ChartExplorer.js +5 -3
  113. package/dist/ssr/content/ChartExplorer.js.map +1 -1
  114. package/dist/ssr/content/MapView.js +4 -4
  115. package/dist/ssr/content/MapView.js.map +1 -1
  116. package/dist/ssr/content/MessageRow.js +264 -91
  117. package/dist/ssr/content/MessageRow.js.map +1 -1
  118. package/dist/ssr/content/ReactionBar.js +17 -0
  119. package/dist/ssr/content/ReactionBar.js.map +1 -1
  120. package/dist/ssr/content/chart-inspection-core.js +4 -1
  121. package/dist/ssr/content/chart-inspection-core.js.map +1 -1
  122. package/dist/ssr/content/code-highlight.js +66 -0
  123. package/dist/ssr/content/code-highlight.js.map +1 -1
  124. package/dist/ssr/content/index.js +2 -1
  125. package/dist/ssr/content/index.js.map +1 -1
  126. package/dist/ssr/content/map-view-types.js.map +1 -1
  127. package/dist/ssr/feedback/dialog-core.js +6 -0
  128. package/dist/ssr/feedback/dialog-core.js.map +1 -1
  129. package/dist/ssr/inputs/AutocompleteEditor.js +64 -24
  130. package/dist/ssr/inputs/AutocompleteEditor.js.map +1 -1
  131. package/dist/ssr/inputs/RichSelect.js +950 -0
  132. package/dist/ssr/inputs/RichSelect.js.map +1 -0
  133. package/dist/ssr/inputs/TextInput.js +44 -17
  134. package/dist/ssr/inputs/TextInput.js.map +1 -1
  135. package/dist/ssr/inputs/choice.js +19 -8
  136. package/dist/ssr/inputs/choice.js.map +1 -1
  137. package/dist/ssr/inputs/index.js +1 -0
  138. package/dist/ssr/inputs/index.js.map +1 -1
  139. package/dist/ssr/inputs/rich-select-messages.js +46 -0
  140. package/dist/ssr/inputs/rich-select-messages.js.map +1 -0
  141. package/dist/ssr/intl/shortcut-messages.js +4 -0
  142. package/dist/ssr/intl/shortcut-messages.js.map +1 -1
  143. package/dist/ssr/intl/shortcut.js +4 -0
  144. package/dist/ssr/intl/shortcut.js.map +1 -1
  145. package/dist/ssr/layout/AppWorkspace.js +166 -125
  146. package/dist/ssr/layout/AppWorkspace.js.map +1 -1
  147. package/dist/ssr/layout/DetailPanel.js +1 -1
  148. package/dist/ssr/layout/DetailPanel.js.map +1 -1
  149. package/dist/ssr/layout/MobileShell.js +100 -20
  150. package/dist/ssr/layout/MobileShell.js.map +1 -1
  151. package/dist/ssr/layout/Navigation.js +1 -1
  152. package/dist/ssr/layout/Navigation.js.map +1 -1
  153. package/dist/ssr/layout/PageTitle.js +9 -3
  154. package/dist/ssr/layout/PageTitle.js.map +1 -1
  155. package/dist/ssr/layout/ResizeSeparator.js +4 -1
  156. package/dist/ssr/layout/ResizeSeparator.js.map +1 -1
  157. package/dist/ssr/layout/app-workspace-controller.js +192 -31
  158. package/dist/ssr/layout/app-workspace-controller.js.map +1 -1
  159. package/dist/ssr/layout/index.js +1 -0
  160. package/dist/ssr/layout/index.js.map +1 -1
  161. package/dist/ssr/layout/navigation-model.js.map +1 -1
  162. package/dist/ssr/layout/resize-separator.js +25 -1
  163. package/dist/ssr/layout/resize-separator.js.map +1 -1
  164. package/dist/ssr/layout/scroll-fade.js +32 -5
  165. package/dist/ssr/layout/scroll-fade.js.map +1 -1
  166. package/dist/ssr/surfaces/NoticeCard.js +21 -12
  167. package/dist/ssr/surfaces/NoticeCard.js.map +1 -1
  168. package/dist/ssr/surfaces/Skeleton.js +8 -0
  169. package/dist/ssr/surfaces/Skeleton.js.map +1 -0
  170. package/dist/ssr/surfaces/index.js +1 -0
  171. package/dist/ssr/surfaces/index.js.map +1 -1
  172. package/dist/ssr/surfaces/resource-messages.js +2 -2
  173. package/dist/ssr/surfaces/resource-messages.js.map +1 -1
  174. package/dist/styles.css +1 -1
  175. package/dist/types/actions/Dropdown.d.ts +14 -0
  176. package/dist/types/actions/FilterChip.d.ts +11 -0
  177. package/dist/types/actions/filter-messages.d.ts +12 -0
  178. package/dist/types/actions/menu-rows.d.ts +7 -2
  179. package/dist/types/chat/ChatComposer.d.ts +13 -0
  180. package/dist/types/chat/chat-messages.d.ts +7 -0
  181. package/dist/types/chat/index.d.ts +1 -1
  182. package/dist/types/content/Calendar.d.ts +7 -0
  183. package/dist/types/content/Chart.d.ts +4 -2
  184. package/dist/types/content/ChartExplorer.d.ts +0 -1
  185. package/dist/types/content/MessageRow.d.ts +64 -2
  186. package/dist/types/content/code-highlight.d.ts +3 -1
  187. package/dist/types/content/index.d.ts +3 -2
  188. package/dist/types/content/map-view-live.d.ts +1 -1
  189. package/dist/types/content/map-view-types.d.ts +2 -0
  190. package/dist/types/feedback/dialog-core.d.ts +3 -0
  191. package/dist/types/inputs/AutocompleteEditor.d.ts +6 -1
  192. package/dist/types/inputs/RichSelect.d.ts +93 -0
  193. package/dist/types/inputs/TextInput.d.ts +5 -2
  194. package/dist/types/inputs/choice.d.ts +24 -4
  195. package/dist/types/inputs/index.d.ts +2 -0
  196. package/dist/types/inputs/rich-select-messages.d.ts +21 -0
  197. package/dist/types/intl/shortcut-messages.d.ts +2 -0
  198. package/dist/types/layout/AppWorkspace.d.ts +9 -0
  199. package/dist/types/layout/DetailPanel.d.ts +2 -0
  200. package/dist/types/layout/MobileShell.d.ts +52 -5
  201. package/dist/types/layout/app-workspace-controller.d.ts +2 -0
  202. package/dist/types/layout/index.d.ts +2 -1
  203. package/dist/types/layout/navigation-model.d.ts +2 -0
  204. package/dist/types/layout/resize-separator.d.ts +1 -0
  205. package/dist/types/layout/scroll-fade.d.ts +5 -0
  206. package/dist/types/surfaces/NoticeCard.d.ts +3 -0
  207. package/dist/types/surfaces/Skeleton.d.ts +6 -0
  208. package/dist/types/surfaces/index.d.ts +1 -0
  209. package/package.json +4 -4
@@ -2,8 +2,8 @@ import { template as _$template } from "solid-js/web";
2
2
  import { delegateEvents as _$delegateEvents } from "solid-js/web";
3
3
  import { setProperty as _$setProperty } from "solid-js/web";
4
4
  import { use as _$use } from "solid-js/web";
5
- import { memo as _$memo } from "solid-js/web";
6
5
  import { getNextMarker as _$getNextMarker } from "solid-js/web";
6
+ import { memo as _$memo } from "solid-js/web";
7
7
  import { runHydrationEvents as _$runHydrationEvents } from "solid-js/web";
8
8
  import { setAttribute as _$setAttribute } from "solid-js/web";
9
9
  import { style as _$style } from "solid-js/web";
@@ -16,35 +16,35 @@ var _tmpl$ = /*#__PURE__*/_$template(`<span>`),
16
16
  _tmpl$2 = /*#__PURE__*/_$template(`<span role=img>`),
17
17
  _tmpl$3 = /*#__PURE__*/_$template(`<a target=_blank rel="noopener noreferrer">`),
18
18
  _tmpl$4 = /*#__PURE__*/_$template(`<button type=button>`),
19
- _tmpl$5 = /*#__PURE__*/_$template(`<span class=k2b-message-row__name>`),
20
- _tmpl$6 = /*#__PURE__*/_$template(`<span class=k2b-message-row__badge>`),
21
- _tmpl$7 = /*#__PURE__*/_$template(`<time class=k2b-message-row__time>`),
22
- _tmpl$8 = /*#__PURE__*/_$template(`<i class="ti ti-arrow-back-up"aria-hidden=true>`),
23
- _tmpl$9 = /*#__PURE__*/_$template(`<span class=k2b-message-row__quote-text><span class=k2b-sr-only><!$><!/> </span><span class=k2b-message-row__quote-author></span> <!$><!/>`),
24
- _tmpl$0 = /*#__PURE__*/_$template(`<img alt loading=lazy decoding=async>`, true, false, false),
25
- _tmpl$1 = /*#__PURE__*/_$template(`<span class=k2b-message-row__media-play aria-hidden=true><i class="ti ti-player-play">`),
26
- _tmpl$10 = /*#__PURE__*/_$template(`<span class=k2b-message-row__media-duration aria-hidden=true>`),
27
- _tmpl$11 = /*#__PURE__*/_$template(`<span class=k2b-message-row__media-more aria-hidden=true>+<!$><!/>`),
28
- _tmpl$12 = /*#__PURE__*/_$template(`<span class=k2b-message-row__avatar aria-hidden=true>`),
29
- _tmpl$13 = /*#__PURE__*/_$template(`<div class=k2b-message-row__gutter>`),
30
- _tmpl$14 = /*#__PURE__*/_$template(`<div class=k2b-message-row__meta>`),
31
- _tmpl$15 = /*#__PURE__*/_$template(`<div class=k2b-message-row__marker><i class="ti ti-arrow-forward-up"aria-hidden=true></i><span>`),
32
- _tmpl$16 = /*#__PURE__*/_$template(`<div class="k2b-content-markdown k2b-message-row__text"data-heading-scale=compact>`),
33
- _tmpl$17 = /*#__PURE__*/_$template(`<span class=k2b-message-row__edited>`),
34
- _tmpl$18 = /*#__PURE__*/_$template(`<div class=k2b-message-row__more-line><!$><!/><!$><!/>`),
35
- _tmpl$19 = /*#__PURE__*/_$template(`<div class=k2b-message-row__bubble>`),
36
- _tmpl$20 = /*#__PURE__*/_$template(`<div class=k2b-message-row__marker><i class="ti ti-pencil"aria-hidden=true></i><span class=k2b-message-row__edited>`),
37
- _tmpl$21 = /*#__PURE__*/_$template(`<div class=k2b-message-row__media role=group>`),
38
- _tmpl$22 = /*#__PURE__*/_$template(`<div class=k2b-message-row__files>`),
39
- _tmpl$23 = /*#__PURE__*/_$template(`<div class=k2b-message-row__slot data-gesture-ignore>`),
40
- _tmpl$24 = /*#__PURE__*/_$template(`<div class=k2b-message-row__line>`),
41
- _tmpl$25 = /*#__PURE__*/_$template(`<div class=k2b-message-row__footer><!$><!/><!$><!/>`),
42
- _tmpl$26 = /*#__PURE__*/_$template(`<div class=k2b-message-row__actions role=group>`),
43
- _tmpl$27 = /*#__PURE__*/_$template(`<div><!$><!/><div class=k2b-message-row__body><!$><!/><!$><!/><!$><!/><!$><!/><!$><!/><!$><!/><!$><!/><!$><!/><!$><!/><!$><!/><!$><!/></div><!$><!/>`),
44
- _tmpl$28 = /*#__PURE__*/_$template(`<span class=k2b-sr-only><!$><!/>, <!$><!/>: `),
45
- _tmpl$29 = /*#__PURE__*/_$template(`<div class=k2b-message-row__meta><span class=k2b-sr-only><!$><!/>, </span><time class=k2b-message-row__time>`),
46
- _tmpl$30 = /*#__PURE__*/_$template(`<div class=k2b-message-row__quote>`),
47
- _tmpl$31 = /*#__PURE__*/_$template(`<button type=button class=k2b-message-row__quote>`),
19
+ _tmpl$5 = /*#__PURE__*/_$template(`<i class="ti ti-dots"aria-hidden=true>`),
20
+ _tmpl$6 = /*#__PURE__*/_$template(`<span class=k2b-message-row__name>`),
21
+ _tmpl$7 = /*#__PURE__*/_$template(`<span class=k2b-message-row__badge>`),
22
+ _tmpl$8 = /*#__PURE__*/_$template(`<time class=k2b-message-row__time>`),
23
+ _tmpl$9 = /*#__PURE__*/_$template(`<span class=k2b-message-row__quote-author><span class=k2b-sr-only><!$><!/> </span><!$><!/>`),
24
+ _tmpl$0 = /*#__PURE__*/_$template(`<span class=k2b-message-row__quote-text>`),
25
+ _tmpl$1 = /*#__PURE__*/_$template(`<div class=k2b-message-row__quote>`),
26
+ _tmpl$10 = /*#__PURE__*/_$template(`<button type=button class=k2b-message-row__quote>`),
27
+ _tmpl$11 = /*#__PURE__*/_$template(`<img alt loading=lazy decoding=async>`, true, false, false),
28
+ _tmpl$12 = /*#__PURE__*/_$template(`<span class=k2b-message-row__media-play aria-hidden=true><i class="ti ti-player-play">`),
29
+ _tmpl$13 = /*#__PURE__*/_$template(`<span class=k2b-message-row__media-duration aria-hidden=true>`),
30
+ _tmpl$14 = /*#__PURE__*/_$template(`<span class=k2b-message-row__media-more aria-hidden=true>+<!$><!/>`),
31
+ _tmpl$15 = /*#__PURE__*/_$template(`<span class=k2b-message-row__avatar aria-hidden=true>`),
32
+ _tmpl$16 = /*#__PURE__*/_$template(`<div class=k2b-message-row__gutter>`),
33
+ _tmpl$17 = /*#__PURE__*/_$template(`<div class=k2b-message-row__meta>`),
34
+ _tmpl$18 = /*#__PURE__*/_$template(`<div class=k2b-message-row__marker><i class="ti ti-arrow-forward-up"aria-hidden=true></i><span>`),
35
+ _tmpl$19 = /*#__PURE__*/_$template(`<div class="k2b-content-markdown k2b-message-row__text"data-heading-scale=compact>`),
36
+ _tmpl$20 = /*#__PURE__*/_$template(`<span class=k2b-message-row__edited>`),
37
+ _tmpl$21 = /*#__PURE__*/_$template(`<div class=k2b-message-row__more-line><!$><!/><!$><!/>`),
38
+ _tmpl$22 = /*#__PURE__*/_$template(`<div class=k2b-message-row__bubble><!$><!/><!$><!/><!$><!/>`),
39
+ _tmpl$23 = /*#__PURE__*/_$template(`<div class=k2b-message-row__marker><i class="ti ti-pencil"aria-hidden=true></i><span class=k2b-message-row__edited>`),
40
+ _tmpl$24 = /*#__PURE__*/_$template(`<div class=k2b-message-row__media role=group>`),
41
+ _tmpl$25 = /*#__PURE__*/_$template(`<div class=k2b-message-row__files>`),
42
+ _tmpl$26 = /*#__PURE__*/_$template(`<div class=k2b-message-row__slot data-gesture-ignore>`),
43
+ _tmpl$27 = /*#__PURE__*/_$template(`<div class=k2b-message-row__line>`),
44
+ _tmpl$28 = /*#__PURE__*/_$template(`<div class=k2b-message-row__footer><!$><!/><!$><!/>`),
45
+ _tmpl$29 = /*#__PURE__*/_$template(`<div><!$><!/><div class=k2b-message-row__body><!$><!/><!$><!/><!$><!/><!$><!/><!$><!/><!$><!/><!$><!/><!$><!/><!$><!/><!$><!/><!$><!/><!$><!/><!$><!/>`),
46
+ _tmpl$30 = /*#__PURE__*/_$template(`<span class=k2b-sr-only><!$><!/>, <!$><!/>: `),
47
+ _tmpl$31 = /*#__PURE__*/_$template(`<div class=k2b-message-row__meta><span class=k2b-sr-only><!$><!/>, </span><time class=k2b-message-row__time>`),
48
48
  _tmpl$32 = /*#__PURE__*/_$template(`<span class=k2b-message-row__deleted><i class="ti ti-message-off"aria-hidden=true></i><!$><!/>`),
49
49
  _tmpl$33 = /*#__PURE__*/_$template(`<span class=k2b-message-row__writing><span class=k2b-chat-progress-dots aria-hidden=true><span></span><span></span><span>`),
50
50
  _tmpl$34 = /*#__PURE__*/_$template(`<span class=k2b-message-row__file-icon aria-hidden=true><i>`),
@@ -61,18 +61,25 @@ var _tmpl$ = /*#__PURE__*/_$template(`<span>`),
61
61
  _tmpl$45 = /*#__PURE__*/_$template(`<span class=k2b-message-row__receipt>`),
62
62
  _tmpl$46 = /*#__PURE__*/_$template(`<i class="ti ti-loader-2 k2b-spin"aria-hidden=true>`),
63
63
  _tmpl$47 = /*#__PURE__*/_$template(`<span class=k2b-message-row__line-text>`),
64
- _tmpl$48 = /*#__PURE__*/_$template(`<i aria-hidden=true>`),
65
- _tmpl$49 = /*#__PURE__*/_$template(`<time>`),
66
- _tmpl$50 = /*#__PURE__*/_$template(`<div><!$><!/><span></span><!$><!/>`);
64
+ _tmpl$48 = /*#__PURE__*/_$template(`<span class=k2b-message-row__origin><!$><!/><!$><!/>`),
65
+ _tmpl$49 = /*#__PURE__*/_$template(`<i aria-hidden=true>`),
66
+ _tmpl$50 = /*#__PURE__*/_$template(`<button type=button class=k2b-message-row__origin><!$><!/><!$><!/>`),
67
+ _tmpl$51 = /*#__PURE__*/_$template(`<time>`),
68
+ _tmpl$52 = /*#__PURE__*/_$template(`<div><i aria-hidden=true></i><span class=k2b-message-event-row__text></span><!$><!/><!$><!/>`),
69
+ _tmpl$53 = /*#__PURE__*/_$template(`<button type=button><i class="ti ti-history"aria-hidden=true></i><span class=k2b-message-event-row__text></span><!$><!/><i aria-hidden=true>`),
70
+ _tmpl$54 = /*#__PURE__*/_$template(`<div><!$><!/><span></span><!$><!/>`);
67
71
  import { fileIcons } from "@k2b/stdlib";
68
72
  import { createMemo, createSignal, createUniqueId, For, onCleanup, Show } from "solid-js";
69
- import { Button, IconButton } from "../actions/Button";
73
+ import { Button } from "../actions/Button";
70
74
  import { copyText } from "../actions/CopyButton";
75
+ import { Dropdown } from "../actions/Dropdown";
76
+ import { GestureMenu } from "../actions/GestureMenu";
71
77
  import { useChatMessages } from "../chat/chat-messages";
72
78
  import { announce } from "../feedback/announce";
73
79
  import { useLocale } from "../intl/locale";
74
80
  import { useUiMessages } from "../intl/messages";
75
81
  import { Avatar } from "../surfaces/Avatar";
82
+ import { Kbd } from "./Kbd";
76
83
  import { createSafeMarked, createSafeRenderer, escapeHtml } from "./MarkdownView";
77
84
  import { ReactionBar } from "./ReactionBar";
78
85
 
@@ -89,6 +96,8 @@ const LINE_CHARS = 100;
89
96
  /** Lines at the bottom of a collapsed message that fade out, as `.k2b-message-row__text[data-collapsed]` draws them. */
90
97
  const FADE_LINES = 2;
91
98
  const COPIED_MS = 2_000;
99
+ /** Alt+click on these keeps its own meaning, such as downloading a link. */
100
+ const ALT_CLICK_IGNORE = "a[href], button, input, textarea, select, summary, label, audio, video, [role='button'], [role='link']";
92
101
  /** Links in messages may only use these schemes; other links show as their text. */
93
102
  const LINK_PROTOCOLS = ["https:", "http:", "mailto:"];
94
103
  /** Attachments open and load only from these schemes or from a relative URL. */
@@ -106,6 +115,8 @@ const MEDIA_RATIO_MAX = 3;
106
115
 
107
116
  /** Reaction labels are read by screen readers and shown in the names hint. */
108
117
 
118
+ /** Where a message belongs, shown as a small chip under it, for example its thread in a timeline of several. */
119
+
109
120
  const timestamp = value => value instanceof Date ? value.getTime() : new Date(value).getTime();
110
121
 
111
122
  /**
@@ -400,41 +411,128 @@ export function MessageRow(props) {
400
411
  const fade = text.getBoundingClientRect().bottom - FADE_LINES * Number.parseFloat(getComputedStyle(text).lineHeight);
401
412
  if (event.target.getBoundingClientRect().bottom > fade) setExpanded(true);
402
413
  };
414
+
415
+ // The same entries serve "…", right-click, the keyboard, and a long press. Alt+click and keys show at the entry's end.
416
+ // Each menu gets its own entries: a rendered shortcut is a DOM node and can live in only one menu.
417
+ const entries = () => (props.actions ?? []).map(entry => ({
418
+ label: entry.label,
419
+ icon: entry.icon,
420
+ description: entry.description,
421
+ disabled: entry.disabled,
422
+ variant: entry.variant,
423
+ gesture: entry.gesture,
424
+ immediate: entry.immediate,
425
+ trailing: entry.altClick ? _$createComponent(Kbd, {
426
+ keys: "alt+click"
427
+ }) : entry.shortcut ? _$createComponent(Kbd, {
428
+ get keys() {
429
+ return entry.shortcut;
430
+ }
431
+ }) : undefined,
432
+ action: () => entry.onSelect()
433
+ }));
434
+ const menuItems = createMemo(entries);
435
+ const gestureItems = createMemo(entries);
436
+ const hasMenu = () => (props.actions?.length ?? 0) > 0;
437
+
438
+ // Alt+click (Option+click) on the message, not on a link or control inside it, runs the entry that asks for it.
439
+ const altClick = event => {
440
+ if (!event.altKey || event.button !== 0 || event.ctrlKey || event.metaKey || event.shiftKey) return;
441
+ const entry = props.actions?.find(action => action.altClick && !action.disabled);
442
+ const target = event.target instanceof Element ? event.target : null;
443
+ if (!entry || target?.closest(ALT_CLICK_IGNORE)) return;
444
+ event.preventDefault();
445
+ entry.onSelect();
446
+ };
447
+ const more = () => _$createComponent(Dropdown.Root, {
448
+ get items() {
449
+ return menuItems();
450
+ },
451
+ get label() {
452
+ return chatMessages().messageActions;
453
+ },
454
+ "class": "k2b-message-row__menu-root",
455
+ get position() {
456
+ return props.own ? "bottom-right" : "bottom-left";
457
+ },
458
+ phone: "sheet",
459
+ get children() {
460
+ return _$createComponent(Dropdown.Trigger, {
461
+ iconOnly: true,
462
+ variant: "ghost",
463
+ size: "sm",
464
+ get label() {
465
+ return chatMessages().messageActions;
466
+ },
467
+ "class": "k2b-message-row__menu",
468
+ get children() {
469
+ return _$getNextElement(_tmpl$5);
470
+ }
471
+ });
472
+ }
473
+ });
403
474
  const header = () => [(() => {
404
- var _el$5 = _$getNextElement(_tmpl$5);
405
- _$insert(_el$5, () => props.author.name);
406
- return _el$5;
475
+ var _el$6 = _$getNextElement(_tmpl$6);
476
+ _$insert(_el$6, () => props.author.name);
477
+ return _el$6;
407
478
  })(), _$createComponent(Show, {
408
479
  get when() {
409
480
  return props.badge;
410
481
  },
411
482
  get children() {
412
- var _el$6 = _$getNextElement(_tmpl$6);
413
- _$insert(_el$6, () => props.badge);
414
- return _el$6;
483
+ var _el$7 = _$getNextElement(_tmpl$7);
484
+ _$insert(_el$7, () => props.badge);
485
+ return _el$7;
415
486
  }
416
487
  }), (() => {
417
- var _el$7 = _$getNextElement(_tmpl$7);
418
- _$insert(_el$7, () => props.time);
419
- _$effect(() => _$setAttribute(_el$7, "datetime", dateTimeOf(props.dateTime)));
420
- return _el$7;
488
+ var _el$8 = _$getNextElement(_tmpl$8);
489
+ _$insert(_el$8, () => props.time);
490
+ _$effect(() => _$setAttribute(_el$8, "datetime", dateTimeOf(props.dateTime)));
491
+ return _el$8;
421
492
  })()];
422
- const quote = value => [_$getNextElement(_tmpl$8), (() => {
493
+ const quote = value => [(() => {
423
494
  var _el$9 = _$getNextElement(_tmpl$9),
424
495
  _el$0 = _el$9.firstChild,
425
496
  _el$10 = _el$0.firstChild,
426
497
  [_el$11, _co$] = _$getNextMarker(_el$10.nextSibling),
427
498
  _el$1 = _el$11.nextSibling,
428
499
  _el$12 = _el$0.nextSibling,
429
- _el$13 = _el$12.nextSibling,
430
- _el$14 = _el$13.nextSibling,
431
- [_el$15, _co$2] = _$getNextMarker(_el$14.nextSibling);
500
+ [_el$13, _co$2] = _$getNextMarker(_el$12.nextSibling);
432
501
  _$insert(_el$0, () => chatMessages().messageReplyTo, _el$11, _co$);
433
- _$insert(_el$12, () => value.author);
434
- _$insert(_el$9, () => value.text, _el$15, _co$2);
502
+ _$insert(_el$9, () => value.author, _el$13, _co$2);
435
503
  return _el$9;
504
+ })(), (() => {
505
+ var _el$14 = _$getNextElement(_tmpl$0);
506
+ _$insert(_el$14, () => value.text);
507
+ return _el$14;
436
508
  })()];
437
509
 
510
+ /** The answered message on a quiet tint at the top of the bubble, or in its place without one. */
511
+ const quoteBlock = () => _$createComponent(Show, {
512
+ get when() {
513
+ return _$memo(() => !!content())() && props.quote;
514
+ },
515
+ children: value => _$createComponent(Show, {
516
+ get when() {
517
+ return value().onSelect;
518
+ },
519
+ get fallback() {
520
+ return (() => {
521
+ var _el$15 = _$getNextElement(_tmpl$1);
522
+ _$insert(_el$15, () => quote(value()));
523
+ return _el$15;
524
+ })();
525
+ },
526
+ children: select => (() => {
527
+ var _el$16 = _$getNextElement(_tmpl$10);
528
+ _el$16.$$click = () => select()();
529
+ _$insert(_el$16, () => quote(value()));
530
+ _$runHydrationEvents();
531
+ return _el$16;
532
+ })()
533
+ })
534
+ });
535
+
438
536
  /** The picture's description, then that it is a video and how long, then how many more the grid hides. */
439
537
  const mediaLabel = (item, more) => [item.alt, item.kind === "video" ? [chatMessages().messageVideo, item.duration].filter(Boolean).join(" ") : "", more > 0 ? chatMessages().messageMoreAttachments({
440
538
  count: more
@@ -459,34 +557,34 @@ export function MessageRow(props) {
459
557
  },
460
558
  get children() {
461
559
  return [(() => {
462
- var _el$16 = _$getNextElement(_tmpl$0);
560
+ var _el$17 = _$getNextElement(_tmpl$11);
463
561
  _$effect(_p$ => {
464
562
  var _v$11 = attachmentUrl(item.src, true),
465
563
  _v$12 = item.width > 0 ? item.width : undefined,
466
564
  _v$13 = item.height > 0 ? item.height : undefined;
467
- _v$11 !== _p$.e && _$setAttribute(_el$16, "src", _p$.e = _v$11);
468
- _v$12 !== _p$.t && _$setAttribute(_el$16, "width", _p$.t = _v$12);
469
- _v$13 !== _p$.a && _$setAttribute(_el$16, "height", _p$.a = _v$13);
565
+ _v$11 !== _p$.e && _$setAttribute(_el$17, "src", _p$.e = _v$11);
566
+ _v$12 !== _p$.t && _$setAttribute(_el$17, "width", _p$.t = _v$12);
567
+ _v$13 !== _p$.a && _$setAttribute(_el$17, "height", _p$.a = _v$13);
470
568
  return _p$;
471
569
  }, {
472
570
  e: undefined,
473
571
  t: undefined,
474
572
  a: undefined
475
573
  });
476
- return _el$16;
574
+ return _el$17;
477
575
  })(), _$createComponent(Show, {
478
576
  get when() {
479
577
  return item.kind === "video";
480
578
  },
481
579
  get children() {
482
- return [_$getNextElement(_tmpl$1), _$createComponent(Show, {
580
+ return [_$getNextElement(_tmpl$12), _$createComponent(Show, {
483
581
  get when() {
484
582
  return item.duration;
485
583
  },
486
584
  get children() {
487
- var _el$18 = _$getNextElement(_tmpl$10);
488
- _$insert(_el$18, () => item.duration);
489
- return _el$18;
585
+ var _el$19 = _$getNextElement(_tmpl$13);
586
+ _$insert(_el$19, () => item.duration);
587
+ return _el$19;
490
588
  }
491
589
  })];
492
590
  }
@@ -495,59 +593,63 @@ export function MessageRow(props) {
495
593
  return more() > 0;
496
594
  },
497
595
  get children() {
498
- var _el$19 = _$getNextElement(_tmpl$11),
499
- _el$20 = _el$19.firstChild,
500
- _el$21 = _el$20.nextSibling,
501
- [_el$22, _co$3] = _$getNextMarker(_el$21.nextSibling);
502
- _$insert(_el$19, more, _el$22, _co$3);
503
- return _el$19;
596
+ var _el$20 = _$getNextElement(_tmpl$14),
597
+ _el$21 = _el$20.firstChild,
598
+ _el$22 = _el$21.nextSibling,
599
+ [_el$23, _co$3] = _$getNextMarker(_el$22.nextSibling);
600
+ _$insert(_el$20, more, _el$23, _co$3);
601
+ return _el$20;
504
602
  }
505
603
  })];
506
604
  }
507
605
  });
508
606
  };
509
- return (() => {
510
- var _el$23 = _$getNextElement(_tmpl$27),
511
- _el$75 = _el$23.firstChild,
607
+ const row = // biome-ignore lint/a11y/noStaticElementInteractions lint/a11y/useKeyWithClickEvents: Alt+click is a pointer shortcut for a menu entry that the keyboard reaches through "…".
608
+ (() => {
609
+ var _el$24 = _$getNextElement(_tmpl$29),
610
+ _el$85 = _el$24.firstChild,
611
+ [_el$86, _co$22] = _$getNextMarker(_el$85.nextSibling),
612
+ _el$27 = _el$86.nextSibling,
613
+ _el$59 = _el$27.firstChild,
614
+ [_el$60, _co$1] = _$getNextMarker(_el$59.nextSibling),
615
+ _el$61 = _el$60.nextSibling,
616
+ [_el$62, _co$10] = _$getNextMarker(_el$61.nextSibling),
617
+ _el$63 = _el$62.nextSibling,
618
+ [_el$64, _co$11] = _$getNextMarker(_el$63.nextSibling),
619
+ _el$65 = _el$64.nextSibling,
620
+ [_el$66, _co$12] = _$getNextMarker(_el$65.nextSibling),
621
+ _el$67 = _el$66.nextSibling,
622
+ [_el$68, _co$13] = _$getNextMarker(_el$67.nextSibling),
623
+ _el$69 = _el$68.nextSibling,
624
+ [_el$70, _co$14] = _$getNextMarker(_el$69.nextSibling),
625
+ _el$71 = _el$70.nextSibling,
626
+ [_el$72, _co$15] = _$getNextMarker(_el$71.nextSibling),
627
+ _el$73 = _el$72.nextSibling,
628
+ [_el$74, _co$16] = _$getNextMarker(_el$73.nextSibling),
629
+ _el$75 = _el$74.nextSibling,
512
630
  [_el$76, _co$17] = _$getNextMarker(_el$75.nextSibling),
513
- _el$26 = _el$76.nextSibling,
514
- _el$52 = _el$26.firstChild,
515
- [_el$53, _co$8] = _$getNextMarker(_el$52.nextSibling),
516
- _el$54 = _el$53.nextSibling,
517
- [_el$55, _co$9] = _$getNextMarker(_el$54.nextSibling),
518
- _el$56 = _el$55.nextSibling,
519
- [_el$57, _co$0] = _$getNextMarker(_el$56.nextSibling),
520
- _el$58 = _el$57.nextSibling,
521
- [_el$59, _co$1] = _$getNextMarker(_el$58.nextSibling),
522
- _el$60 = _el$59.nextSibling,
523
- [_el$61, _co$10] = _$getNextMarker(_el$60.nextSibling),
524
- _el$62 = _el$61.nextSibling,
525
- [_el$63, _co$11] = _$getNextMarker(_el$62.nextSibling),
526
- _el$64 = _el$63.nextSibling,
527
- [_el$65, _co$12] = _$getNextMarker(_el$64.nextSibling),
528
- _el$66 = _el$65.nextSibling,
529
- [_el$67, _co$13] = _$getNextMarker(_el$66.nextSibling),
530
- _el$68 = _el$67.nextSibling,
531
- [_el$69, _co$14] = _$getNextMarker(_el$68.nextSibling),
532
- _el$70 = _el$69.nextSibling,
533
- [_el$71, _co$15] = _$getNextMarker(_el$70.nextSibling),
534
- _el$72 = _el$71.nextSibling,
535
- [_el$73, _co$16] = _$getNextMarker(_el$72.nextSibling),
536
- _el$77 = _el$26.nextSibling,
537
- [_el$78, _co$18] = _$getNextMarker(_el$77.nextSibling);
538
- _$insert(_el$23, _$createComponent(Show, {
631
+ _el$77 = _el$76.nextSibling,
632
+ [_el$78, _co$18] = _$getNextMarker(_el$77.nextSibling),
633
+ _el$79 = _el$78.nextSibling,
634
+ [_el$80, _co$19] = _$getNextMarker(_el$79.nextSibling),
635
+ _el$81 = _el$80.nextSibling,
636
+ [_el$82, _co$20] = _$getNextMarker(_el$81.nextSibling),
637
+ _el$83 = _el$82.nextSibling,
638
+ [_el$84, _co$21] = _$getNextMarker(_el$83.nextSibling);
639
+ _el$24.$$click = altClick;
640
+ _$insert(_el$24, _$createComponent(Show, {
539
641
  get when() {
540
642
  return !props.own;
541
643
  },
542
644
  get children() {
543
- var _el$24 = _$getNextElement(_tmpl$13);
544
- _$insert(_el$24, _$createComponent(Show, {
645
+ var _el$25 = _$getNextElement(_tmpl$16);
646
+ _$insert(_el$25, _$createComponent(Show, {
545
647
  get when() {
546
648
  return groupStart();
547
649
  },
548
650
  get children() {
549
- var _el$25 = _$getNextElement(_tmpl$12);
550
- _$insert(_el$25, _$createComponent(Avatar, {
651
+ var _el$26 = _$getNextElement(_tmpl$15);
652
+ _$insert(_el$26, _$createComponent(Avatar, {
551
653
  get name() {
552
654
  return props.author.name;
553
655
  },
@@ -559,28 +661,28 @@ export function MessageRow(props) {
559
661
  },
560
662
  size: "sm"
561
663
  }));
562
- return _el$25;
664
+ return _el$26;
563
665
  }
564
666
  }));
565
- return _el$24;
667
+ return _el$25;
566
668
  }
567
- }), _el$76, _co$17);
568
- _$insert(_el$26, _$createComponent(Show, {
669
+ }), _el$86, _co$22);
670
+ _$insert(_el$27, _$createComponent(Show, {
569
671
  get when() {
570
672
  return groupStart();
571
673
  },
572
674
  get fallback() {
573
675
  return (() => {
574
- var _el$79 = _$getNextElement(_tmpl$28),
575
- _el$82 = _el$79.firstChild,
576
- [_el$83, _co$19] = _$getNextMarker(_el$82.nextSibling),
577
- _el$80 = _el$83.nextSibling,
578
- _el$84 = _el$80.nextSibling,
579
- [_el$85, _co$20] = _$getNextMarker(_el$84.nextSibling),
580
- _el$81 = _el$85.nextSibling;
581
- _$insert(_el$79, () => props.author.name, _el$83, _co$19);
582
- _$insert(_el$79, () => props.time, _el$85, _co$20);
583
- return _el$79;
676
+ var _el$87 = _$getNextElement(_tmpl$30),
677
+ _el$90 = _el$87.firstChild,
678
+ [_el$91, _co$23] = _$getNextMarker(_el$90.nextSibling),
679
+ _el$88 = _el$91.nextSibling,
680
+ _el$92 = _el$88.nextSibling,
681
+ [_el$93, _co$24] = _$getNextMarker(_el$92.nextSibling),
682
+ _el$89 = _el$93.nextSibling;
683
+ _$insert(_el$87, () => props.author.name, _el$91, _co$23);
684
+ _$insert(_el$87, () => props.time, _el$93, _co$24);
685
+ return _el$87;
584
686
  })();
585
687
  },
586
688
  get children() {
@@ -590,80 +692,71 @@ export function MessageRow(props) {
590
692
  },
591
693
  get fallback() {
592
694
  return (() => {
593
- var _el$86 = _$getNextElement(_tmpl$29),
594
- _el$87 = _el$86.firstChild,
595
- _el$89 = _el$87.firstChild,
596
- [_el$90, _co$21] = _$getNextMarker(_el$89.nextSibling),
597
- _el$88 = _el$90.nextSibling,
598
- _el$91 = _el$87.nextSibling;
599
- _$insert(_el$87, () => props.author.name, _el$90, _co$21);
600
- _$insert(_el$91, () => props.time);
601
- _$effect(() => _$setAttribute(_el$91, "datetime", dateTimeOf(props.dateTime)));
602
- return _el$86;
695
+ var _el$94 = _$getNextElement(_tmpl$31),
696
+ _el$95 = _el$94.firstChild,
697
+ _el$97 = _el$95.firstChild,
698
+ [_el$98, _co$25] = _$getNextMarker(_el$97.nextSibling),
699
+ _el$96 = _el$98.nextSibling,
700
+ _el$99 = _el$95.nextSibling;
701
+ _$insert(_el$95, () => props.author.name, _el$98, _co$25);
702
+ _$insert(_el$99, () => props.time);
703
+ _$effect(() => _$setAttribute(_el$99, "datetime", dateTimeOf(props.dateTime)));
704
+ return _el$94;
603
705
  })();
604
706
  },
605
707
  get children() {
606
- var _el$27 = _$getNextElement(_tmpl$14);
607
- _$insert(_el$27, header);
608
- return _el$27;
708
+ var _el$28 = _$getNextElement(_tmpl$17);
709
+ _$insert(_el$28, header);
710
+ return _el$28;
609
711
  }
610
712
  });
611
713
  }
612
- }), _el$53, _co$8);
613
- _$insert(_el$26, _$createComponent(Show, {
714
+ }), _el$60, _co$1);
715
+ _$insert(_el$27, _$createComponent(Show, {
614
716
  get when() {
615
717
  return _$memo(() => !!content())() && props.forwarded;
616
718
  },
617
719
  get children() {
618
- var _el$28 = _$getNextElement(_tmpl$15),
619
- _el$29 = _el$28.firstChild,
620
- _el$30 = _el$29.nextSibling;
621
- _$insert(_el$30, () => chatMessages().messageForwarded);
622
- return _el$28;
720
+ var _el$29 = _$getNextElement(_tmpl$18),
721
+ _el$30 = _el$29.firstChild,
722
+ _el$31 = _el$30.nextSibling;
723
+ _$insert(_el$31, () => chatMessages().messageForwarded);
724
+ return _el$29;
623
725
  }
624
- }), _el$55, _co$9);
625
- _$insert(_el$26, _$createComponent(Show, {
726
+ }), _el$62, _co$10);
727
+ _$insert(_el$27, _$createComponent(Show, {
626
728
  get when() {
627
- return _$memo(() => !!content())() && props.quote;
729
+ return !hasBubble();
628
730
  },
629
- children: value => _$createComponent(Show, {
630
- get when() {
631
- return value().onSelect;
632
- },
633
- get fallback() {
634
- return (() => {
635
- var _el$92 = _$getNextElement(_tmpl$30);
636
- _$insert(_el$92, () => quote(value()));
637
- return _el$92;
638
- })();
639
- },
640
- children: select => (() => {
641
- var _el$93 = _$getNextElement(_tmpl$31);
642
- _el$93.$$click = () => select()();
643
- _$insert(_el$93, () => quote(value()));
644
- _$runHydrationEvents();
645
- return _el$93;
646
- })()
647
- })
648
- }), _el$57, _co$0);
649
- _$insert(_el$26, _$createComponent(Show, {
731
+ get children() {
732
+ return quoteBlock();
733
+ }
734
+ }), _el$64, _co$11);
735
+ _$insert(_el$27, _$createComponent(Show, {
650
736
  get when() {
651
737
  return hasBubble();
652
738
  },
653
739
  get children() {
654
- var _el$31 = _$getNextElement(_tmpl$19);
655
- _$insert(_el$31, _$createComponent(Show, {
740
+ var _el$32 = _$getNextElement(_tmpl$22),
741
+ _el$40 = _el$32.firstChild,
742
+ [_el$41, _co$6] = _$getNextMarker(_el$40.nextSibling),
743
+ _el$42 = _el$41.nextSibling,
744
+ [_el$43, _co$7] = _$getNextMarker(_el$42.nextSibling),
745
+ _el$44 = _el$43.nextSibling,
746
+ [_el$45, _co$8] = _$getNextMarker(_el$44.nextSibling);
747
+ _$insert(_el$32, quoteBlock, _el$41, _co$6);
748
+ _$insert(_el$32, _$createComponent(Show, {
656
749
  get when() {
657
750
  return !props.deleted;
658
751
  },
659
752
  get fallback() {
660
753
  return (() => {
661
- var _el$94 = _$getNextElement(_tmpl$32),
662
- _el$95 = _el$94.firstChild,
663
- _el$96 = _el$95.nextSibling,
664
- [_el$97, _co$22] = _$getNextMarker(_el$96.nextSibling);
665
- _$insert(_el$94, () => chatMessages().messageDeleted, _el$97, _co$22);
666
- return _el$94;
754
+ var _el$100 = _$getNextElement(_tmpl$32),
755
+ _el$101 = _el$100.firstChild,
756
+ _el$102 = _el$101.nextSibling,
757
+ [_el$103, _co$26] = _$getNextMarker(_el$102.nextSibling);
758
+ _$insert(_el$100, () => chatMessages().messageDeleted, _el$103, _co$26);
759
+ return _el$100;
667
760
  })();
668
761
  },
669
762
  get children() {
@@ -676,35 +769,35 @@ export function MessageRow(props) {
676
769
  },
677
770
  get children() {
678
771
  return [(() => {
679
- var _el$32 = _$getNextElement(_tmpl$16);
680
- _el$32.$$focusin = revealFocus;
681
- _el$32.$$click = copyCode;
772
+ var _el$33 = _$getNextElement(_tmpl$19);
773
+ _el$33.$$focusin = revealFocus;
774
+ _el$33.$$click = copyCode;
682
775
  var _ref$ = text;
683
- typeof _ref$ === "function" ? _$use(_ref$, _el$32) : text = _el$32;
684
- _$setAttribute(_el$32, "id", textId);
776
+ typeof _ref$ === "function" ? _$use(_ref$, _el$33) : text = _el$33;
777
+ _$setAttribute(_el$33, "id", textId);
685
778
  _$effect(_p$ => {
686
779
  var _v$14 = collapsed() ? "" : undefined,
687
780
  _v$15 = rendered().html;
688
- _v$14 !== _p$.e && _$setAttribute(_el$32, "data-collapsed", _p$.e = _v$14);
689
- _v$15 !== _p$.t && _$setProperty(_el$32, "innerHTML", _p$.t = _v$15);
781
+ _v$14 !== _p$.e && _$setAttribute(_el$33, "data-collapsed", _p$.e = _v$14);
782
+ _v$15 !== _p$.t && _$setProperty(_el$33, "innerHTML", _p$.t = _v$15);
690
783
  return _p$;
691
784
  }, {
692
785
  e: undefined,
693
786
  t: undefined
694
787
  });
695
788
  _$runHydrationEvents();
696
- return _el$32;
789
+ return _el$33;
697
790
  })(), _$createComponent(Show, {
698
791
  get when() {
699
792
  return collapsible();
700
793
  },
701
794
  get children() {
702
- var _el$33 = _$getNextElement(_tmpl$18),
703
- _el$35 = _el$33.firstChild,
704
- [_el$36, _co$4] = _$getNextMarker(_el$35.nextSibling),
705
- _el$37 = _el$36.nextSibling,
706
- [_el$38, _co$5] = _$getNextMarker(_el$37.nextSibling);
707
- _$insert(_el$33, _$createComponent(Button, {
795
+ var _el$34 = _$getNextElement(_tmpl$21),
796
+ _el$36 = _el$34.firstChild,
797
+ [_el$37, _co$4] = _$getNextMarker(_el$36.nextSibling),
798
+ _el$38 = _el$37.nextSibling,
799
+ [_el$39, _co$5] = _$getNextMarker(_el$38.nextSibling);
800
+ _$insert(_el$34, _$createComponent(Button, {
708
801
  variant: "text",
709
802
  size: "xs",
710
803
  "class": "k2b-message-row__more",
@@ -716,56 +809,72 @@ export function MessageRow(props) {
716
809
  get children() {
717
810
  return _$memo(() => !!expanded())() ? chatMessages().messageShowLess : chatMessages().messageShowMore;
718
811
  }
719
- }), _el$36, _co$4);
720
- _$insert(_el$33, _$createComponent(Show, {
812
+ }), _el$37, _co$4);
813
+ _$insert(_el$34, _$createComponent(Show, {
721
814
  get when() {
722
815
  return props.edited;
723
816
  },
724
817
  get children() {
725
- var _el$34 = _$getNextElement(_tmpl$17);
726
- _$insert(_el$34, () => chatMessages().messageEdited);
727
- return _el$34;
818
+ var _el$35 = _$getNextElement(_tmpl$20);
819
+ _$insert(_el$35, () => chatMessages().messageEdited);
820
+ return _el$35;
728
821
  }
729
- }), _el$38, _co$5);
730
- return _el$33;
822
+ }), _el$39, _co$5);
823
+ return _el$34;
731
824
  }
732
825
  })];
733
826
  }
734
827
  });
735
828
  }
736
- }));
829
+ }), _el$43, _co$7);
830
+ _$insert(_el$32, _$createComponent(Show, {
831
+ get when() {
832
+ return hasMenu();
833
+ },
834
+ get children() {
835
+ return more();
836
+ }
837
+ }), _el$45, _co$8);
737
838
  _$effect(_p$ => {
738
839
  var _v$16 = props.deleted ? "" : undefined,
739
840
  _v$17 = props.progress && !props.deleted ? "true" : undefined;
740
- _v$16 !== _p$.e && _$setAttribute(_el$31, "data-deleted", _p$.e = _v$16);
741
- _v$17 !== _p$.t && _$setAttribute(_el$31, "aria-busy", _p$.t = _v$17);
841
+ _v$16 !== _p$.e && _$setAttribute(_el$32, "data-deleted", _p$.e = _v$16);
842
+ _v$17 !== _p$.t && _$setAttribute(_el$32, "aria-busy", _p$.t = _v$17);
742
843
  return _p$;
743
844
  }, {
744
845
  e: undefined,
745
846
  t: undefined
746
847
  });
747
- return _el$31;
848
+ return _el$32;
748
849
  }
749
- }), _el$59, _co$1);
750
- _$insert(_el$26, _$createComponent(Show, {
850
+ }), _el$66, _co$12);
851
+ _$insert(_el$27, _$createComponent(Show, {
852
+ get when() {
853
+ return _$memo(() => !!hasMenu())() && !hasBubble();
854
+ },
855
+ get children() {
856
+ return more();
857
+ }
858
+ }), _el$68, _co$13);
859
+ _$insert(_el$27, _$createComponent(Show, {
751
860
  get when() {
752
861
  return _$memo(() => !!(content() && props.edited))() && !hasBubble();
753
862
  },
754
863
  get children() {
755
- var _el$39 = _$getNextElement(_tmpl$20),
756
- _el$40 = _el$39.firstChild,
757
- _el$41 = _el$40.nextSibling;
758
- _$insert(_el$41, () => chatMessages().messageEdited);
759
- return _el$39;
864
+ var _el$46 = _$getNextElement(_tmpl$23),
865
+ _el$47 = _el$46.firstChild,
866
+ _el$48 = _el$47.nextSibling;
867
+ _$insert(_el$48, () => chatMessages().messageEdited);
868
+ return _el$46;
760
869
  }
761
- }), _el$61, _co$10);
762
- _$insert(_el$26, _$createComponent(Show, {
870
+ }), _el$70, _co$14);
871
+ _$insert(_el$27, _$createComponent(Show, {
763
872
  get when() {
764
873
  return media().length > 0;
765
874
  },
766
875
  get children() {
767
- var _el$42 = _$getNextElement(_tmpl$21);
768
- _$insert(_el$42, _$createComponent(For, {
876
+ var _el$49 = _$getNextElement(_tmpl$24);
877
+ _$insert(_el$49, _$createComponent(For, {
769
878
  get each() {
770
879
  return shownMedia();
771
880
  },
@@ -777,25 +886,25 @@ export function MessageRow(props) {
777
886
  _v$20 = media().length === 1 ? {
778
887
  width: mediaWidth(media()[0])
779
888
  } : undefined;
780
- _v$18 !== _p$.e && _$setAttribute(_el$42, "aria-label", _p$.e = _v$18);
781
- _v$19 !== _p$.t && _$setAttribute(_el$42, "data-count", _p$.t = _v$19);
782
- _p$.a = _$style(_el$42, _v$20, _p$.a);
889
+ _v$18 !== _p$.e && _$setAttribute(_el$49, "aria-label", _p$.e = _v$18);
890
+ _v$19 !== _p$.t && _$setAttribute(_el$49, "data-count", _p$.t = _v$19);
891
+ _p$.a = _$style(_el$49, _v$20, _p$.a);
783
892
  return _p$;
784
893
  }, {
785
894
  e: undefined,
786
895
  t: undefined,
787
896
  a: undefined
788
897
  });
789
- return _el$42;
898
+ return _el$49;
790
899
  }
791
- }), _el$63, _co$11);
792
- _$insert(_el$26, _$createComponent(Show, {
900
+ }), _el$72, _co$15);
901
+ _$insert(_el$27, _$createComponent(Show, {
793
902
  get when() {
794
903
  return files().length > 0;
795
904
  },
796
905
  get children() {
797
- var _el$43 = _$getNextElement(_tmpl$22);
798
- _$insert(_el$43, _$createComponent(For, {
906
+ var _el$50 = _$getNextElement(_tmpl$25);
907
+ _$insert(_el$50, _$createComponent(For, {
799
908
  get each() {
800
909
  return files();
801
910
  },
@@ -809,73 +918,73 @@ export function MessageRow(props) {
809
918
  },
810
919
  get children() {
811
920
  return [(() => {
812
- var _el$99 = _$getNextElement(_tmpl$34),
813
- _el$100 = _el$99.firstChild;
814
- _$effect(() => _$className(_el$100, fileIcon(file)));
815
- return _el$99;
921
+ var _el$105 = _$getNextElement(_tmpl$34),
922
+ _el$106 = _el$105.firstChild;
923
+ _$effect(() => _$className(_el$106, fileIcon(file)));
924
+ return _el$105;
816
925
  })(), (() => {
817
- var _el$101 = _$getNextElement(_tmpl$36),
818
- _el$102 = _el$101.firstChild,
819
- _el$104 = _el$102.nextSibling,
820
- [_el$105, _co$23] = _$getNextMarker(_el$104.nextSibling);
821
- _$insert(_el$102, () => file.name);
822
- _$insert(_el$101, _$createComponent(Show, {
926
+ var _el$107 = _$getNextElement(_tmpl$36),
927
+ _el$108 = _el$107.firstChild,
928
+ _el$110 = _el$108.nextSibling,
929
+ [_el$111, _co$27] = _$getNextMarker(_el$110.nextSibling);
930
+ _$insert(_el$108, () => file.name);
931
+ _$insert(_el$107, _$createComponent(Show, {
823
932
  get when() {
824
933
  return file.detail;
825
934
  },
826
935
  get children() {
827
- var _el$103 = _$getNextElement(_tmpl$35);
828
- _$insert(_el$103, () => file.detail);
829
- return _el$103;
936
+ var _el$109 = _$getNextElement(_tmpl$35);
937
+ _$insert(_el$109, () => file.detail);
938
+ return _el$109;
830
939
  }
831
- }), _el$105, _co$23);
832
- return _el$101;
940
+ }), _el$111, _co$27);
941
+ return _el$107;
833
942
  })()];
834
943
  }
835
944
  })
836
945
  }));
837
- return _el$43;
946
+ return _el$50;
838
947
  }
839
- }), _el$65, _co$12);
840
- _$insert(_el$26, _$createComponent(Show, {
948
+ }), _el$74, _co$16);
949
+ _$insert(_el$27, _$createComponent(Show, {
841
950
  get when() {
842
951
  return _$memo(() => !!content())() && props.linkPreview;
843
952
  },
844
953
  get children() {
845
- var _el$44 = _$getNextElement(_tmpl$23);
846
- _$insert(_el$44, () => props.linkPreview);
847
- return _el$44;
954
+ var _el$51 = _$getNextElement(_tmpl$26);
955
+ _$insert(_el$51, () => props.linkPreview);
956
+ return _el$51;
848
957
  }
849
- }), _el$67, _co$13);
850
- _$insert(_el$26, _$createComponent(Show, {
958
+ }), _el$76, _co$17);
959
+ _$insert(_el$27, _$createComponent(Show, {
851
960
  get when() {
852
961
  return _$memo(() => !!content())() && props.card;
853
962
  },
854
963
  get children() {
855
- var _el$45 = _$getNextElement(_tmpl$23);
856
- _$insert(_el$45, () => props.card);
857
- return _el$45;
964
+ var _el$52 = _$getNextElement(_tmpl$26);
965
+ _$insert(_el$52, () => props.card);
966
+ return _el$52;
858
967
  }
859
- }), _el$69, _co$14);
860
- _$insert(_el$26, _$createComponent(Show, {
968
+ }), _el$78, _co$18);
969
+ _$insert(_el$27, _$createComponent(Show, {
861
970
  get when() {
862
971
  return props.thread;
863
972
  },
864
973
  children: thread => (() => {
865
- var _el$106 = _$getNextElement(_tmpl$38),
866
- _el$109 = _el$106.firstChild,
867
- [_el$110, _co$24] = _$getNextMarker(_el$109.nextSibling),
868
- _el$108 = _el$110.nextSibling,
869
- _el$111 = _el$108.nextSibling,
870
- [_el$112, _co$25] = _$getNextMarker(_el$111.nextSibling);
871
- _el$106.$$click = () => thread().onOpen();
872
- _$insert(_el$106, _$createComponent(Show, {
974
+ var _el$112 = _$getNextElement(_tmpl$38),
975
+ _el$115 = _el$112.firstChild,
976
+ [_el$116, _co$28] = _$getNextMarker(_el$115.nextSibling),
977
+ _el$114 = _el$116.nextSibling,
978
+ _el$117 = _el$114.nextSibling,
979
+ [_el$118, _co$29] = _$getNextMarker(_el$117.nextSibling);
980
+ _el$112.$$click = () => thread().onOpen();
981
+ _$insert(_el$112, _$createComponent(Show, {
873
982
  get when() {
874
983
  return (thread().participants?.length ?? 0) > 0;
875
984
  },
876
985
  get children() {
877
- var _el$107 = _$getNextElement(_tmpl$37);
878
- _$insert(_el$107, _$createComponent(For, {
986
+ var _el$113 = _$getNextElement(_tmpl$37);
987
+ _$insert(_el$113, _$createComponent(For, {
879
988
  get each() {
880
989
  return thread().participants?.slice(0, 3);
881
990
  },
@@ -892,40 +1001,50 @@ export function MessageRow(props) {
892
1001
  size: "xs"
893
1002
  })
894
1003
  }));
895
- return _el$107;
1004
+ return _el$113;
896
1005
  }
897
- }), _el$110, _co$24);
898
- _$insert(_el$108, () => chatMessages().messageReplies({
1006
+ }), _el$116, _co$28);
1007
+ _$insert(_el$114, () => chatMessages().messageReplies({
899
1008
  count: thread().count
900
1009
  }));
901
- _$insert(_el$106, _$createComponent(Show, {
1010
+ _$insert(_el$112, _$createComponent(Show, {
902
1011
  get when() {
903
1012
  return thread().lastReply;
904
1013
  },
905
1014
  children: time => (() => {
906
- var _el$113 = _$getNextElement(_tmpl$39);
907
- _$insert(_el$113, () => chatMessages().messageLastReply({
1015
+ var _el$119 = _$getNextElement(_tmpl$39);
1016
+ _$insert(_el$119, () => chatMessages().messageLastReply({
908
1017
  time: time()
909
1018
  }));
910
- _$effect(() => _$setAttribute(_el$113, "datetime", dateTimeOf(thread().lastReplyDateTime)));
911
- return _el$113;
1019
+ _$effect(() => _$setAttribute(_el$119, "datetime", dateTimeOf(thread().lastReplyDateTime)));
1020
+ return _el$119;
912
1021
  })()
913
- }), _el$112, _co$25);
1022
+ }), _el$118, _co$29);
914
1023
  _$runHydrationEvents();
915
- return _el$106;
1024
+ return _el$112;
916
1025
  })()
917
- }), _el$71, _co$15);
918
- _$insert(_el$26, _$createComponent(Show, {
1026
+ }), _el$80, _co$19);
1027
+ _$insert(_el$27, _$createComponent(Show, {
1028
+ get when() {
1029
+ return props.origin;
1030
+ },
1031
+ children: origin => _$createComponent(OriginChip, {
1032
+ get origin() {
1033
+ return origin();
1034
+ }
1035
+ })
1036
+ }), _el$82, _co$20);
1037
+ _$insert(_el$27, _$createComponent(Show, {
919
1038
  get when() {
920
1039
  return hasFooter();
921
1040
  },
922
1041
  get children() {
923
- var _el$46 = _$getNextElement(_tmpl$25),
924
- _el$48 = _el$46.firstChild,
925
- [_el$49, _co$6] = _$getNextMarker(_el$48.nextSibling),
926
- _el$50 = _el$49.nextSibling,
927
- [_el$51, _co$7] = _$getNextMarker(_el$50.nextSibling);
928
- _$insert(_el$46, _$createComponent(Show, {
1042
+ var _el$53 = _$getNextElement(_tmpl$28),
1043
+ _el$55 = _el$53.firstChild,
1044
+ [_el$56, _co$9] = _$getNextMarker(_el$55.nextSibling),
1045
+ _el$57 = _el$56.nextSibling,
1046
+ [_el$58, _co$0] = _$getNextMarker(_el$57.nextSibling);
1047
+ _$insert(_el$53, _$createComponent(Show, {
929
1048
  get when() {
930
1049
  return reactions();
931
1050
  },
@@ -940,14 +1059,14 @@ export function MessageRow(props) {
940
1059
  return props.onAddReaction;
941
1060
  }
942
1061
  })
943
- }), _el$49, _co$6);
944
- _$insert(_el$46, _$createComponent(Show, {
1062
+ }), _el$56, _co$9);
1063
+ _$insert(_el$53, _$createComponent(Show, {
945
1064
  get when() {
946
1065
  return hasLine();
947
1066
  },
948
1067
  get children() {
949
- var _el$47 = _$getNextElement(_tmpl$24);
950
- _$insert(_el$47, _$createComponent(Show, {
1068
+ var _el$54 = _$getNextElement(_tmpl$27);
1069
+ _$insert(_el$54, _$createComponent(Show, {
951
1070
  get when() {
952
1071
  return props.progress;
953
1072
  },
@@ -958,9 +1077,9 @@ export function MessageRow(props) {
958
1077
  },
959
1078
  get children() {
960
1079
  return [_$getNextElement(_tmpl$40), (() => {
961
- var _el$115 = _$getNextElement(_tmpl$);
962
- _$insert(_el$115, () => chatMessages().sending);
963
- return _el$115;
1080
+ var _el$121 = _$getNextElement(_tmpl$);
1081
+ _$insert(_el$121, () => chatMessages().sending);
1082
+ return _el$121;
964
1083
  })()];
965
1084
  }
966
1085
  }), _$createComponent(Show, {
@@ -969,9 +1088,9 @@ export function MessageRow(props) {
969
1088
  },
970
1089
  get children() {
971
1090
  return [_$getNextElement(_tmpl$41), (() => {
972
- var _el$117 = _$getNextElement(_tmpl$);
973
- _$insert(_el$117, () => chatMessages().messageNotSent);
974
- return _el$117;
1091
+ var _el$123 = _$getNextElement(_tmpl$);
1092
+ _$insert(_el$123, () => chatMessages().messageNotSent);
1093
+ return _el$123;
975
1094
  })(), _$createComponent(Show, {
976
1095
  get when() {
977
1096
  return props.onRetry;
@@ -984,6 +1103,18 @@ export function MessageRow(props) {
984
1103
  return chatMessages().messageRetry;
985
1104
  }
986
1105
  })
1106
+ }), _$createComponent(Show, {
1107
+ get when() {
1108
+ return props.onDiscard;
1109
+ },
1110
+ children: discard => _$createComponent(Button, {
1111
+ variant: "text",
1112
+ size: "xs",
1113
+ onClick: () => discard()(),
1114
+ get children() {
1115
+ return chatMessages().messageDiscard;
1116
+ }
1117
+ })
987
1118
  })];
988
1119
  }
989
1120
  }), _$createComponent(Show, {
@@ -1002,26 +1133,26 @@ export function MessageRow(props) {
1002
1133
  },
1003
1134
  get children() {
1004
1135
  return [_$getNextElement(_tmpl$42), (() => {
1005
- var _el$119 = _$getNextElement(_tmpl$43);
1006
- _$insert(_el$119, () => chatMessages().messageSent);
1007
- return _el$119;
1136
+ var _el$125 = _$getNextElement(_tmpl$43);
1137
+ _$insert(_el$125, () => chatMessages().messageSent);
1138
+ return _el$125;
1008
1139
  })()];
1009
1140
  }
1010
1141
  });
1011
1142
  },
1012
1143
  children: receipt => [_$getNextElement(_tmpl$44), (() => {
1013
- var _el$121 = _$getNextElement(_tmpl$45);
1014
- _$insert(_el$121, receipt);
1015
- return _el$121;
1144
+ var _el$127 = _$getNextElement(_tmpl$45);
1145
+ _$insert(_el$127, receipt);
1146
+ return _el$127;
1016
1147
  })()]
1017
1148
  });
1018
1149
  }
1019
1150
  })];
1020
1151
  },
1021
1152
  children: progress => [_$getNextElement(_tmpl$46), (() => {
1022
- var _el$123 = _$getNextElement(_tmpl$47);
1023
- _$insert(_el$123, () => progress().status);
1024
- return _el$123;
1153
+ var _el$129 = _$getNextElement(_tmpl$47);
1154
+ _$insert(_el$129, () => progress().status);
1155
+ return _el$129;
1025
1156
  })(), _$createComponent(Show, {
1026
1157
  get when() {
1027
1158
  return progress().onStop;
@@ -1036,53 +1167,23 @@ export function MessageRow(props) {
1036
1167
  })
1037
1168
  })]
1038
1169
  }));
1039
- return _el$47;
1170
+ return _el$54;
1040
1171
  }
1041
- }), _el$51, _co$7);
1042
- return _el$46;
1172
+ }), _el$58, _co$0);
1173
+ return _el$53;
1043
1174
  }
1044
- }), _el$73, _co$16);
1045
- _$insert(_el$23, _$createComponent(Show, {
1046
- get when() {
1047
- return (props.actions?.length ?? 0) > 0;
1048
- },
1049
- get children() {
1050
- var _el$74 = _$getNextElement(_tmpl$26);
1051
- _$insert(_el$74, _$createComponent(For, {
1052
- get each() {
1053
- return props.actions;
1054
- },
1055
- children: action => _$createComponent(IconButton, {
1056
- get label() {
1057
- return action.label;
1058
- },
1059
- size: "sm",
1060
- get disabled() {
1061
- return action.disabled;
1062
- },
1063
- onClick: () => action.onSelect(),
1064
- get children() {
1065
- var _el$124 = _$getNextElement(_tmpl$48);
1066
- _$effect(() => _$className(_el$124, action.icon));
1067
- return _el$124;
1068
- }
1069
- })
1070
- }));
1071
- _$effect(() => _$setAttribute(_el$74, "aria-label", chatMessages().messageActions));
1072
- return _el$74;
1073
- }
1074
- }), _el$78, _co$18);
1175
+ }), _el$84, _co$21);
1075
1176
  _$effect(_p$ => {
1076
1177
  var _v$21 = props.class ? `k2b-message-row ${props.class}` : "k2b-message-row",
1077
1178
  _v$22 = props.own ? "" : undefined,
1078
1179
  _v$23 = groupStart() ? "" : undefined,
1079
1180
  _v$24 = props.status,
1080
1181
  _v$25 = media().length > 0 ? "" : undefined;
1081
- _v$21 !== _p$.e && _$className(_el$23, _p$.e = _v$21);
1082
- _v$22 !== _p$.t && _$setAttribute(_el$23, "data-own", _p$.t = _v$22);
1083
- _v$23 !== _p$.a && _$setAttribute(_el$23, "data-group-start", _p$.a = _v$23);
1084
- _v$24 !== _p$.o && _$setAttribute(_el$23, "data-status", _p$.o = _v$24);
1085
- _v$25 !== _p$.i && _$setAttribute(_el$23, "data-media", _p$.i = _v$25);
1182
+ _v$21 !== _p$.e && _$className(_el$24, _p$.e = _v$21);
1183
+ _v$22 !== _p$.t && _$setAttribute(_el$24, "data-own", _p$.t = _v$22);
1184
+ _v$23 !== _p$.a && _$setAttribute(_el$24, "data-group-start", _p$.a = _v$23);
1185
+ _v$24 !== _p$.o && _$setAttribute(_el$24, "data-status", _p$.o = _v$24);
1186
+ _v$25 !== _p$.i && _$setAttribute(_el$24, "data-media", _p$.i = _v$25);
1086
1187
  return _p$;
1087
1188
  }, {
1088
1189
  e: undefined,
@@ -1091,43 +1192,206 @@ export function MessageRow(props) {
1091
1192
  o: undefined,
1092
1193
  i: undefined
1093
1194
  });
1094
- return _el$23;
1195
+ _$runHydrationEvents();
1196
+ return _el$24;
1197
+ })();
1198
+ return _$createComponent(Show, {
1199
+ get when() {
1200
+ return hasMenu();
1201
+ },
1202
+ fallback: row,
1203
+ get children() {
1204
+ return _$createComponent(GestureMenu, {
1205
+ get items() {
1206
+ return gestureItems();
1207
+ },
1208
+ get label() {
1209
+ return chatMessages().messageMenu({
1210
+ author: props.author.name,
1211
+ time: props.time
1212
+ });
1213
+ },
1214
+ tabIndex: -1,
1215
+ children: row
1216
+ });
1217
+ }
1218
+ });
1219
+ }
1220
+
1221
+ /** Where a row belongs, such as its thread; a control when it opens that place. */
1222
+ function OriginChip(props) {
1223
+ return _$createComponent(Show, {
1224
+ get when() {
1225
+ return props.origin.onSelect;
1226
+ },
1227
+ get fallback() {
1228
+ return (() => {
1229
+ var _el$130 = _$getNextElement(_tmpl$48),
1230
+ _el$131 = _el$130.firstChild,
1231
+ [_el$132, _co$30] = _$getNextMarker(_el$131.nextSibling),
1232
+ _el$133 = _el$132.nextSibling,
1233
+ [_el$134, _co$31] = _$getNextMarker(_el$133.nextSibling);
1234
+ _$insert(_el$130, _$createComponent(Show, {
1235
+ get when() {
1236
+ return props.origin.icon;
1237
+ },
1238
+ children: icon => (() => {
1239
+ var _el$135 = _$getNextElement(_tmpl$49);
1240
+ _$effect(() => _$className(_el$135, icon()));
1241
+ return _el$135;
1242
+ })()
1243
+ }), _el$132, _co$30);
1244
+ _$insert(_el$130, () => props.origin.label, _el$134, _co$31);
1245
+ return _el$130;
1246
+ })();
1247
+ },
1248
+ children: select => (() => {
1249
+ var _el$136 = _$getNextElement(_tmpl$50),
1250
+ _el$137 = _el$136.firstChild,
1251
+ [_el$138, _co$32] = _$getNextMarker(_el$137.nextSibling),
1252
+ _el$139 = _el$138.nextSibling,
1253
+ [_el$140, _co$33] = _$getNextMarker(_el$139.nextSibling);
1254
+ _el$136.$$click = () => select()();
1255
+ _$insert(_el$136, _$createComponent(Show, {
1256
+ get when() {
1257
+ return props.origin.icon;
1258
+ },
1259
+ children: icon => (() => {
1260
+ var _el$141 = _$getNextElement(_tmpl$49);
1261
+ _$effect(() => _$className(_el$141, icon()));
1262
+ return _el$141;
1263
+ })()
1264
+ }), _el$138, _co$32);
1265
+ _$insert(_el$136, () => props.origin.label, _el$140, _co$33);
1266
+ _$effect(() => _$setAttribute(_el$136, "aria-label", props.origin.selectLabel));
1267
+ _$runHydrationEvents();
1268
+ return _el$136;
1269
+ })()
1270
+ });
1271
+ }
1272
+
1273
+ /**
1274
+ * A quiet line for a change to something the conversation is about, such as a task's new status: no bubble, aligned
1275
+ * with the messages' text, with its time at the end. It is no message: it never counts as unread.
1276
+ */
1277
+ export function MessageEventRow(props) {
1278
+ return (() => {
1279
+ var _el$142 = _$getNextElement(_tmpl$52),
1280
+ _el$143 = _el$142.firstChild,
1281
+ _el$144 = _el$143.nextSibling,
1282
+ _el$146 = _el$144.nextSibling,
1283
+ [_el$147, _co$34] = _$getNextMarker(_el$146.nextSibling),
1284
+ _el$148 = _el$147.nextSibling,
1285
+ [_el$149, _co$35] = _$getNextMarker(_el$148.nextSibling);
1286
+ _$insert(_el$144, () => props.children);
1287
+ _$insert(_el$142, _$createComponent(Show, {
1288
+ get when() {
1289
+ return props.origin;
1290
+ },
1291
+ children: origin => _$createComponent(OriginChip, {
1292
+ get origin() {
1293
+ return origin();
1294
+ }
1295
+ })
1296
+ }), _el$147, _co$34);
1297
+ _$insert(_el$142, _$createComponent(Show, {
1298
+ get when() {
1299
+ return props.time;
1300
+ },
1301
+ get children() {
1302
+ var _el$145 = _$getNextElement(_tmpl$51);
1303
+ _$insert(_el$145, () => props.time);
1304
+ _$effect(() => _$setAttribute(_el$145, "datetime", dateTimeOf(props.dateTime)));
1305
+ return _el$145;
1306
+ }
1307
+ }), _el$149, _co$35);
1308
+ _$effect(_p$ => {
1309
+ var _v$26 = props.class ? `k2b-message-event-row ${props.class}` : "k2b-message-event-row",
1310
+ _v$27 = props.icon ?? "ti ti-point";
1311
+ _v$26 !== _p$.e && _$className(_el$142, _p$.e = _v$26);
1312
+ _v$27 !== _p$.t && _$className(_el$143, _p$.t = _v$27);
1313
+ return _p$;
1314
+ }, {
1315
+ e: undefined,
1316
+ t: undefined
1317
+ });
1318
+ return _el$142;
1319
+ })();
1320
+ }
1321
+
1322
+ /** Several event lines in a row as one line that opens them, such as "4 changes to Invitation and Light test". */
1323
+ export function MessageEventGroup(props) {
1324
+ return (() => {
1325
+ var _el$150 = _$getNextElement(_tmpl$53),
1326
+ _el$151 = _el$150.firstChild,
1327
+ _el$152 = _el$151.nextSibling,
1328
+ _el$155 = _el$152.nextSibling,
1329
+ [_el$156, _co$36] = _$getNextMarker(_el$155.nextSibling),
1330
+ _el$154 = _el$156.nextSibling;
1331
+ _el$150.$$click = () => props.onToggle();
1332
+ _$insert(_el$152, () => props.label);
1333
+ _$insert(_el$150, _$createComponent(Show, {
1334
+ get when() {
1335
+ return props.time;
1336
+ },
1337
+ get children() {
1338
+ var _el$153 = _$getNextElement(_tmpl$51);
1339
+ _$insert(_el$153, () => props.time);
1340
+ _$effect(() => _$setAttribute(_el$153, "datetime", dateTimeOf(props.dateTime)));
1341
+ return _el$153;
1342
+ }
1343
+ }), _el$156, _co$36);
1344
+ _$effect(_p$ => {
1345
+ var _v$28 = props.class ? `k2b-message-event-row k2b-message-event-group ${props.class}` : "k2b-message-event-row k2b-message-event-group",
1346
+ _v$29 = props.expanded,
1347
+ _v$30 = props.expanded ? "ti ti-chevron-up" : "ti ti-chevron-down";
1348
+ _v$28 !== _p$.e && _$className(_el$150, _p$.e = _v$28);
1349
+ _v$29 !== _p$.t && _$setAttribute(_el$150, "aria-expanded", _p$.t = _v$29);
1350
+ _v$30 !== _p$.a && _$className(_el$154, _p$.a = _v$30);
1351
+ return _p$;
1352
+ }, {
1353
+ e: undefined,
1354
+ t: undefined,
1355
+ a: undefined
1356
+ });
1357
+ _$runHydrationEvents();
1358
+ return _el$150;
1095
1359
  })();
1096
1360
  }
1097
1361
 
1098
1362
  /** A quiet, centered line for something that happened in the conversation, such as a person joining. */
1099
1363
  export function MessageSystemRow(props) {
1100
1364
  return (() => {
1101
- var _el$125 = _$getNextElement(_tmpl$50),
1102
- _el$128 = _el$125.firstChild,
1103
- [_el$129, _co$26] = _$getNextMarker(_el$128.nextSibling),
1104
- _el$126 = _el$129.nextSibling,
1105
- _el$130 = _el$126.nextSibling,
1106
- [_el$131, _co$27] = _$getNextMarker(_el$130.nextSibling);
1107
- _$insert(_el$125, _$createComponent(Show, {
1365
+ var _el$157 = _$getNextElement(_tmpl$54),
1366
+ _el$160 = _el$157.firstChild,
1367
+ [_el$161, _co$37] = _$getNextMarker(_el$160.nextSibling),
1368
+ _el$158 = _el$161.nextSibling,
1369
+ _el$162 = _el$158.nextSibling,
1370
+ [_el$163, _co$38] = _$getNextMarker(_el$162.nextSibling);
1371
+ _$insert(_el$157, _$createComponent(Show, {
1108
1372
  get when() {
1109
1373
  return props.icon;
1110
1374
  },
1111
1375
  children: icon => (() => {
1112
- var _el$132 = _$getNextElement(_tmpl$48);
1113
- _$effect(() => _$className(_el$132, icon()));
1114
- return _el$132;
1376
+ var _el$164 = _$getNextElement(_tmpl$49);
1377
+ _$effect(() => _$className(_el$164, icon()));
1378
+ return _el$164;
1115
1379
  })()
1116
- }), _el$129, _co$26);
1117
- _$insert(_el$126, () => props.children);
1118
- _$insert(_el$125, _$createComponent(Show, {
1380
+ }), _el$161, _co$37);
1381
+ _$insert(_el$158, () => props.children);
1382
+ _$insert(_el$157, _$createComponent(Show, {
1119
1383
  get when() {
1120
1384
  return props.time;
1121
1385
  },
1122
1386
  get children() {
1123
- var _el$127 = _$getNextElement(_tmpl$49);
1124
- _$insert(_el$127, () => props.time);
1125
- _$effect(() => _$setAttribute(_el$127, "datetime", dateTimeOf(props.dateTime)));
1126
- return _el$127;
1387
+ var _el$159 = _$getNextElement(_tmpl$51);
1388
+ _$insert(_el$159, () => props.time);
1389
+ _$effect(() => _$setAttribute(_el$159, "datetime", dateTimeOf(props.dateTime)));
1390
+ return _el$159;
1127
1391
  }
1128
- }), _el$131, _co$27);
1129
- _$effect(() => _$className(_el$125, props.class ? `k2b-message-system-row ${props.class}` : "k2b-message-system-row"));
1130
- return _el$125;
1392
+ }), _el$163, _co$38);
1393
+ _$effect(() => _$className(_el$157, props.class ? `k2b-message-system-row ${props.class}` : "k2b-message-system-row"));
1394
+ return _el$157;
1131
1395
  })();
1132
1396
  }
1133
1397
  _$delegateEvents(["click", "focusin"]);