@k2b/ui 0.32.0 → 0.34.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 (292) hide show
  1. package/dist/base.css +14 -1
  2. package/dist/browser/actions/ContextMenu.js +13 -0
  3. package/dist/browser/actions/ContextMenu.js.map +1 -1
  4. package/dist/browser/actions/Dropdown.js +173 -102
  5. package/dist/browser/actions/Dropdown.js.map +1 -1
  6. package/dist/browser/actions/FilterChip.js +113 -56
  7. package/dist/browser/actions/FilterChip.js.map +1 -1
  8. package/dist/browser/actions/SelectionToolbar.js +129 -0
  9. package/dist/browser/actions/SelectionToolbar.js.map +1 -0
  10. package/dist/browser/actions/filter-messages.js +26 -2
  11. package/dist/browser/actions/filter-messages.js.map +1 -1
  12. package/dist/browser/actions/index.js +1 -0
  13. package/dist/browser/actions/index.js.map +1 -1
  14. package/dist/browser/actions/menu-rows.js +23 -3
  15. package/dist/browser/actions/menu-rows.js.map +1 -1
  16. package/dist/browser/actions/menu-sheet.js +2 -7
  17. package/dist/browser/actions/menu-sheet.js.map +1 -1
  18. package/dist/browser/charts.js +6 -0
  19. package/dist/browser/charts.js.map +1 -0
  20. package/dist/browser/chat/ChatComposer.js +616 -421
  21. package/dist/browser/chat/ChatComposer.js.map +1 -1
  22. package/dist/browser/chat/chat-messages.js +18 -0
  23. package/dist/browser/chat/chat-messages.js.map +1 -1
  24. package/dist/browser/chat/composer-document.js +19 -0
  25. package/dist/browser/chat/composer-document.js.map +1 -1
  26. package/dist/browser/chat/index.js.map +1 -1
  27. package/dist/browser/content/Calendar.js +39 -29
  28. package/dist/browser/content/Calendar.js.map +1 -1
  29. package/dist/browser/content/CalendarDayView.js +159 -165
  30. package/dist/browser/content/CalendarDayView.js.map +1 -1
  31. package/dist/browser/content/Chart.js +8 -0
  32. package/dist/browser/content/Chart.js.map +1 -1
  33. package/dist/browser/content/FileGrid.js +231 -9
  34. package/dist/browser/content/FileGrid.js.map +1 -1
  35. package/dist/browser/content/FileTypeIcon.js +15 -0
  36. package/dist/browser/content/FileTypeIcon.js.map +1 -1
  37. package/dist/browser/content/FileView.js +11 -4
  38. package/dist/browser/content/FileView.js.map +1 -1
  39. package/dist/browser/content/MessageRow.js +627 -343
  40. package/dist/browser/content/MessageRow.js.map +1 -1
  41. package/dist/browser/content/ReactionBar.js +20 -1
  42. package/dist/browser/content/ReactionBar.js.map +1 -1
  43. package/dist/browser/content/calendar-day-scroll.js +4 -3
  44. package/dist/browser/content/calendar-day-scroll.js.map +1 -1
  45. package/dist/browser/content/chart-bar.js +476 -0
  46. package/dist/browser/content/chart-bar.js.map +1 -0
  47. package/dist/browser/content/file-list-messages.js +52 -0
  48. package/dist/browser/content/file-list-messages.js.map +1 -0
  49. package/dist/browser/content/index.js +2 -2
  50. package/dist/browser/content/index.js.map +1 -1
  51. package/dist/browser/feedback/Tooltip.js +31 -14
  52. package/dist/browser/feedback/Tooltip.js.map +1 -1
  53. package/dist/browser/feedback/dialog-core.js +6 -0
  54. package/dist/browser/feedback/dialog-core.js.map +1 -1
  55. package/dist/browser/inputs/ChoiceList.js +178 -0
  56. package/dist/browser/inputs/ChoiceList.js.map +1 -0
  57. package/dist/browser/inputs/ChoiceSlider.js +314 -0
  58. package/dist/browser/inputs/ChoiceSlider.js.map +1 -0
  59. package/dist/browser/inputs/ChoiceTiles.js +135 -0
  60. package/dist/browser/inputs/ChoiceTiles.js.map +1 -0
  61. package/dist/browser/inputs/ColorChoices.js +120 -0
  62. package/dist/browser/inputs/ColorChoices.js.map +1 -0
  63. package/dist/browser/inputs/QrScanner.js +95 -13
  64. package/dist/browser/inputs/QrScanner.js.map +1 -1
  65. package/dist/browser/inputs/TextInput.js +19 -14
  66. package/dist/browser/inputs/TextInput.js.map +1 -1
  67. package/dist/browser/inputs/index.js +4 -0
  68. package/dist/browser/inputs/index.js.map +1 -1
  69. package/dist/browser/inputs/qr-messages.js +2 -0
  70. package/dist/browser/inputs/qr-messages.js.map +1 -1
  71. package/dist/browser/internal/radio-keys.js +13 -0
  72. package/dist/browser/internal/radio-keys.js.map +1 -0
  73. package/dist/browser/intl/shortcut-messages.js +4 -0
  74. package/dist/browser/intl/shortcut-messages.js.map +1 -1
  75. package/dist/browser/intl/shortcut.js +4 -0
  76. package/dist/browser/intl/shortcut.js.map +1 -1
  77. package/dist/browser/layout/AnchoredPopover.js +180 -0
  78. package/dist/browser/layout/AnchoredPopover.js.map +1 -0
  79. package/dist/browser/layout/AppWorkspace.js +684 -532
  80. package/dist/browser/layout/AppWorkspace.js.map +1 -1
  81. package/dist/browser/layout/DetailPanel.js +443 -333
  82. package/dist/browser/layout/DetailPanel.js.map +1 -1
  83. package/dist/browser/layout/MobileShell.js +231 -42
  84. package/dist/browser/layout/MobileShell.js.map +1 -1
  85. package/dist/browser/layout/Settings.js +283 -175
  86. package/dist/browser/layout/Settings.js.map +1 -1
  87. package/dist/browser/layout/SidebarRailHint.js +79 -0
  88. package/dist/browser/layout/SidebarRailHint.js.map +1 -0
  89. package/dist/browser/layout/SidebarSwitcher.js +79 -66
  90. package/dist/browser/layout/SidebarSwitcher.js.map +1 -1
  91. package/dist/browser/layout/TabBar.js +18 -4
  92. package/dist/browser/layout/TabBar.js.map +1 -1
  93. package/dist/browser/layout/app-workspace-controller.js +11 -4
  94. package/dist/browser/layout/app-workspace-controller.js.map +1 -1
  95. package/dist/browser/layout/detail-panel-messages.js +4 -2
  96. package/dist/browser/layout/detail-panel-messages.js.map +1 -1
  97. package/dist/browser/layout/index.js +3 -1
  98. package/dist/browser/layout/index.js.map +1 -1
  99. package/dist/browser/layout/scroll-fade.js +32 -5
  100. package/dist/browser/layout/scroll-fade.js.map +1 -1
  101. package/dist/browser/layout/settings-messages.js +26 -2
  102. package/dist/browser/layout/settings-messages.js.map +1 -1
  103. package/dist/browser/surfaces/Avatar.js +2 -14
  104. package/dist/browser/surfaces/Avatar.js.map +1 -1
  105. package/dist/browser/surfaces/DotStrip.js +70 -0
  106. package/dist/browser/surfaces/DotStrip.js.map +1 -0
  107. package/dist/browser/surfaces/NoticeCard.js +46 -30
  108. package/dist/browser/surfaces/NoticeCard.js.map +1 -1
  109. package/dist/browser/surfaces/ProgressRing.js +3 -0
  110. package/dist/browser/surfaces/ProgressRing.js.map +1 -1
  111. package/dist/browser/surfaces/ResourceCard.js +125 -68
  112. package/dist/browser/surfaces/ResourceCard.js.map +1 -1
  113. package/dist/browser/surfaces/index.js +2 -0
  114. package/dist/browser/surfaces/index.js.map +1 -1
  115. package/dist/browser/surfaces/person-color.js +18 -0
  116. package/dist/browser/surfaces/person-color.js.map +1 -0
  117. package/dist/browser/surfaces/resource-messages.js +8 -4
  118. package/dist/browser/surfaces/resource-messages.js.map +1 -1
  119. package/dist/browser/widgets/Widget.js +3 -2
  120. package/dist/browser/widgets/Widget.js.map +1 -1
  121. package/dist/ssr/actions/ContextMenu.js +9 -0
  122. package/dist/ssr/actions/ContextMenu.js.map +1 -1
  123. package/dist/ssr/actions/Dropdown.js +65 -31
  124. package/dist/ssr/actions/Dropdown.js.map +1 -1
  125. package/dist/ssr/actions/FilterChip.js +67 -16
  126. package/dist/ssr/actions/FilterChip.js.map +1 -1
  127. package/dist/ssr/actions/SelectionToolbar.js +104 -0
  128. package/dist/ssr/actions/SelectionToolbar.js.map +1 -0
  129. package/dist/ssr/actions/filter-messages.js +26 -2
  130. package/dist/ssr/actions/filter-messages.js.map +1 -1
  131. package/dist/ssr/actions/index.js +1 -0
  132. package/dist/ssr/actions/index.js.map +1 -1
  133. package/dist/ssr/actions/menu-rows.js +23 -3
  134. package/dist/ssr/actions/menu-rows.js.map +1 -1
  135. package/dist/ssr/actions/menu-sheet.js +2 -7
  136. package/dist/ssr/actions/menu-sheet.js.map +1 -1
  137. package/dist/ssr/charts.js +6 -0
  138. package/dist/ssr/charts.js.map +1 -0
  139. package/dist/ssr/chat/ChatComposer.js +184 -76
  140. package/dist/ssr/chat/ChatComposer.js.map +1 -1
  141. package/dist/ssr/chat/chat-messages.js +18 -0
  142. package/dist/ssr/chat/chat-messages.js.map +1 -1
  143. package/dist/ssr/chat/composer-document.js +19 -0
  144. package/dist/ssr/chat/composer-document.js.map +1 -1
  145. package/dist/ssr/chat/index.js.map +1 -1
  146. package/dist/ssr/content/Calendar.js +40 -31
  147. package/dist/ssr/content/Calendar.js.map +1 -1
  148. package/dist/ssr/content/CalendarDayView.js +40 -48
  149. package/dist/ssr/content/CalendarDayView.js.map +1 -1
  150. package/dist/ssr/content/Chart.js +8 -0
  151. package/dist/ssr/content/Chart.js.map +1 -1
  152. package/dist/ssr/content/FileGrid.js +132 -5
  153. package/dist/ssr/content/FileGrid.js.map +1 -1
  154. package/dist/ssr/content/FileTypeIcon.js +15 -0
  155. package/dist/ssr/content/FileTypeIcon.js.map +1 -1
  156. package/dist/ssr/content/FileView.js +11 -4
  157. package/dist/ssr/content/FileView.js.map +1 -1
  158. package/dist/ssr/content/MessageRow.js +274 -91
  159. package/dist/ssr/content/MessageRow.js.map +1 -1
  160. package/dist/ssr/content/ReactionBar.js +20 -1
  161. package/dist/ssr/content/ReactionBar.js.map +1 -1
  162. package/dist/ssr/content/calendar-day-scroll.js +4 -3
  163. package/dist/ssr/content/calendar-day-scroll.js.map +1 -1
  164. package/dist/ssr/content/chart-bar.js +476 -0
  165. package/dist/ssr/content/chart-bar.js.map +1 -0
  166. package/dist/ssr/content/file-list-messages.js +52 -0
  167. package/dist/ssr/content/file-list-messages.js.map +1 -0
  168. package/dist/ssr/content/index.js +2 -2
  169. package/dist/ssr/content/index.js.map +1 -1
  170. package/dist/ssr/feedback/Tooltip.js +31 -14
  171. package/dist/ssr/feedback/Tooltip.js.map +1 -1
  172. package/dist/ssr/feedback/dialog-core.js +6 -0
  173. package/dist/ssr/feedback/dialog-core.js.map +1 -1
  174. package/dist/ssr/inputs/ChoiceList.js +95 -0
  175. package/dist/ssr/inputs/ChoiceList.js.map +1 -0
  176. package/dist/ssr/inputs/ChoiceSlider.js +191 -0
  177. package/dist/ssr/inputs/ChoiceSlider.js.map +1 -0
  178. package/dist/ssr/inputs/ChoiceTiles.js +61 -0
  179. package/dist/ssr/inputs/ChoiceTiles.js.map +1 -0
  180. package/dist/ssr/inputs/ColorChoices.js +60 -0
  181. package/dist/ssr/inputs/ColorChoices.js.map +1 -0
  182. package/dist/ssr/inputs/QrScanner.js +89 -10
  183. package/dist/ssr/inputs/QrScanner.js.map +1 -1
  184. package/dist/ssr/inputs/TextInput.js +17 -2
  185. package/dist/ssr/inputs/TextInput.js.map +1 -1
  186. package/dist/ssr/inputs/index.js +4 -0
  187. package/dist/ssr/inputs/index.js.map +1 -1
  188. package/dist/ssr/inputs/qr-messages.js +2 -0
  189. package/dist/ssr/inputs/qr-messages.js.map +1 -1
  190. package/dist/ssr/internal/radio-keys.js +13 -0
  191. package/dist/ssr/internal/radio-keys.js.map +1 -0
  192. package/dist/ssr/intl/shortcut-messages.js +4 -0
  193. package/dist/ssr/intl/shortcut-messages.js.map +1 -1
  194. package/dist/ssr/intl/shortcut.js +4 -0
  195. package/dist/ssr/intl/shortcut.js.map +1 -1
  196. package/dist/ssr/layout/AnchoredPopover.js +142 -0
  197. package/dist/ssr/layout/AnchoredPopover.js.map +1 -0
  198. package/dist/ssr/layout/AppWorkspace.js +287 -141
  199. package/dist/ssr/layout/AppWorkspace.js.map +1 -1
  200. package/dist/ssr/layout/DetailPanel.js +181 -108
  201. package/dist/ssr/layout/DetailPanel.js.map +1 -1
  202. package/dist/ssr/layout/MobileShell.js +118 -24
  203. package/dist/ssr/layout/MobileShell.js.map +1 -1
  204. package/dist/ssr/layout/Settings.js +122 -45
  205. package/dist/ssr/layout/Settings.js.map +1 -1
  206. package/dist/ssr/layout/SidebarRailHint.js +79 -0
  207. package/dist/ssr/layout/SidebarRailHint.js.map +1 -0
  208. package/dist/ssr/layout/SidebarSwitcher.js +13 -3
  209. package/dist/ssr/layout/SidebarSwitcher.js.map +1 -1
  210. package/dist/ssr/layout/TabBar.js +11 -3
  211. package/dist/ssr/layout/TabBar.js.map +1 -1
  212. package/dist/ssr/layout/app-workspace-controller.js +11 -4
  213. package/dist/ssr/layout/app-workspace-controller.js.map +1 -1
  214. package/dist/ssr/layout/detail-panel-messages.js +4 -2
  215. package/dist/ssr/layout/detail-panel-messages.js.map +1 -1
  216. package/dist/ssr/layout/index.js +3 -1
  217. package/dist/ssr/layout/index.js.map +1 -1
  218. package/dist/ssr/layout/scroll-fade.js +32 -5
  219. package/dist/ssr/layout/scroll-fade.js.map +1 -1
  220. package/dist/ssr/layout/settings-messages.js +26 -2
  221. package/dist/ssr/layout/settings-messages.js.map +1 -1
  222. package/dist/ssr/surfaces/Avatar.js +2 -14
  223. package/dist/ssr/surfaces/Avatar.js.map +1 -1
  224. package/dist/ssr/surfaces/DotStrip.js +31 -0
  225. package/dist/ssr/surfaces/DotStrip.js.map +1 -0
  226. package/dist/ssr/surfaces/NoticeCard.js +21 -12
  227. package/dist/ssr/surfaces/NoticeCard.js.map +1 -1
  228. package/dist/ssr/surfaces/ProgressRing.js +3 -0
  229. package/dist/ssr/surfaces/ProgressRing.js.map +1 -1
  230. package/dist/ssr/surfaces/ResourceCard.js +40 -15
  231. package/dist/ssr/surfaces/ResourceCard.js.map +1 -1
  232. package/dist/ssr/surfaces/index.js +2 -0
  233. package/dist/ssr/surfaces/index.js.map +1 -1
  234. package/dist/ssr/surfaces/person-color.js +18 -0
  235. package/dist/ssr/surfaces/person-color.js.map +1 -0
  236. package/dist/ssr/surfaces/resource-messages.js +8 -4
  237. package/dist/ssr/surfaces/resource-messages.js.map +1 -1
  238. package/dist/ssr/widgets/Widget.js +3 -2
  239. package/dist/ssr/widgets/Widget.js.map +1 -1
  240. package/dist/styles.css +1 -1
  241. package/dist/types/actions/ContextMenu.d.ts +5 -0
  242. package/dist/types/actions/Dropdown.d.ts +19 -0
  243. package/dist/types/actions/FilterChip.d.ts +11 -0
  244. package/dist/types/actions/SelectionToolbar.d.ts +38 -0
  245. package/dist/types/actions/filter-messages.d.ts +12 -0
  246. package/dist/types/actions/index.d.ts +2 -0
  247. package/dist/types/actions/menu-rows.d.ts +7 -2
  248. package/dist/types/charts.d.ts +5 -0
  249. package/dist/types/chat/ChatComposer.d.ts +28 -0
  250. package/dist/types/chat/chat-messages.d.ts +9 -0
  251. package/dist/types/chat/composer-document.d.ts +5 -0
  252. package/dist/types/chat/index.d.ts +1 -1
  253. package/dist/types/content/Calendar.d.ts +7 -0
  254. package/dist/types/content/Chart.d.ts +2 -1
  255. package/dist/types/content/FileGrid.d.ts +43 -3
  256. package/dist/types/content/FileTypeIcon.d.ts +10 -0
  257. package/dist/types/content/FileView.d.ts +5 -1
  258. package/dist/types/content/MessageRow.d.ts +66 -2
  259. package/dist/types/content/calendar-day-scroll.d.ts +2 -1
  260. package/dist/types/content/chart-bar.d.ts +60 -0
  261. package/dist/types/content/file-list-messages.d.ts +24 -0
  262. package/dist/types/content/index.d.ts +4 -4
  263. package/dist/types/feedback/Tooltip.d.ts +8 -2
  264. package/dist/types/feedback/dialog-core.d.ts +3 -0
  265. package/dist/types/inputs/ChoiceList.d.ts +28 -0
  266. package/dist/types/inputs/ChoiceSlider.d.ts +36 -0
  267. package/dist/types/inputs/ChoiceTiles.d.ts +25 -0
  268. package/dist/types/inputs/ColorChoices.d.ts +19 -0
  269. package/dist/types/inputs/index.d.ts +8 -0
  270. package/dist/types/inputs/qr-messages.d.ts +1 -0
  271. package/dist/types/internal/radio-keys.d.ts +5 -0
  272. package/dist/types/intl/shortcut-messages.d.ts +2 -0
  273. package/dist/types/layout/AnchoredPopover.d.ts +31 -0
  274. package/dist/types/layout/AppWorkspace.d.ts +12 -0
  275. package/dist/types/layout/DetailPanel.d.ts +17 -0
  276. package/dist/types/layout/MobileShell.d.ts +55 -5
  277. package/dist/types/layout/Settings.d.ts +22 -0
  278. package/dist/types/layout/SidebarRailHint.d.ts +26 -0
  279. package/dist/types/layout/TabBar.d.ts +5 -0
  280. package/dist/types/layout/detail-panel-messages.d.ts +1 -0
  281. package/dist/types/layout/index.d.ts +5 -3
  282. package/dist/types/layout/scroll-fade.d.ts +5 -0
  283. package/dist/types/layout/settings-messages.d.ts +12 -0
  284. package/dist/types/surfaces/DotStrip.d.ts +22 -0
  285. package/dist/types/surfaces/NoticeCard.d.ts +3 -0
  286. package/dist/types/surfaces/ProgressRing.d.ts +2 -1
  287. package/dist/types/surfaces/ResourceCard.d.ts +9 -0
  288. package/dist/types/surfaces/index.d.ts +4 -1
  289. package/dist/types/surfaces/person-color.d.ts +10 -0
  290. package/dist/types/surfaces/resource-messages.d.ts +2 -0
  291. package/dist/types/widgets/Widget.d.ts +3 -2
  292. package/package.json +7 -2
@@ -22,38 +22,45 @@ var _tmpl$ = ["<span><strong", ">", "</strong></span>"],
22
22
  _tmpl$13 = ["<button class=\"k2b-chat-composer__command\"", " type=\"button\" role=\"option\" tabindex=\"-1\"", "><i", " aria-hidden=\"true\"></i><span class=\"k2b-chat-composer__command-text\"><strong>", "</strong>", "</span>", "</button>"],
23
23
  _tmpl$14 = ["<b>", "</b>"],
24
24
  _tmpl$15 = ["<small", ">", "</small>"],
25
- _tmpl$16 = ["<div class=\"k2b-chat-composer-accessory\"><div", " class=\"k2b-chat-composer__commands\" role=\"listbox\"", ">", "</div></div>"],
26
- _tmpl$17 = ["<label class=\"k2b-chat-composer__command-search\"><i class=\"ti ti-search\" aria-hidden=\"true\"></i><input type=\"text\" role=\"combobox\"", " aria-autocomplete=\"list\"", " aria-expanded=\"true\"", " autocomplete=\"off\" autocapitalize=\"off\" spellcheck=\"false\"", "></label>"],
27
- _tmpl$18 = ["<div role=\"status\" class=\"k2b-chat-composer__loading\"><i class=\"ti ti-loader-2 k2b-spin\" aria-hidden=\"true\"></i><strong>", "</strong></div>"],
28
- _tmpl$19 = ["<div role=\"status\"><i class=\"ti ti-alert-circle\"></i> ", "</div>"],
29
- _tmpl$20 = ["<div role=\"status\">", "</div>"],
30
- _tmpl$21 = ["<div class=\"k2b-chat-composer-accessory\" data-commands", ">", "<div", " class=\"k2b-chat-composer__commands\" role=\"listbox\"", ">", "", "", "", "", "</div></div>"],
31
- _tmpl$22 = ["<div class=\"k2b-chat-composer-slot\"", "><div style=\"", "\"", ">", "</div>", "", "</div>"],
32
- _tmpl$23 = ["<div class=\"k2b-chat-composer__hint\" aria-live=\"polite\">", "</div>"],
33
- _tmpl$24 = ["<div class=\"k2b-chat-composer__attachments\" role=\"list\"", " tabindex=\"0\">", "</div>"],
34
- _tmpl$25 = ["<div class=\"k2b-chat-composer__error\" role=\"alert\"><i class=\"ti ti-alert-circle\" aria-hidden=\"true\"></i>", "</div>"],
35
- _tmpl$26 = ["<div class=\"k2b-chat-composer__row\">", "", "<div class=\"k2b-chat-composer__field\">", "<div class=\"k2b-chat-composer__field-tools\">", "", "", "</div></div>", "</div>"],
36
- _tmpl$27 = ["<div class=\"k2b-chat-composer-shell\">", "<section class=\"", "\"", " role=\"group\"", ">", "", "", "", "</section><div class=\"k2b-sr-only\" role=\"status\" aria-live=\"polite\">", "</div><div class=\"k2b-chat-composer__status\" role=\"status\">", "", "</div></div>"],
37
- _tmpl$28 = ["<button id=\"", "\" type=\"button\" role=\"option\" tabindex=\"-1\"", "><span class=\"k2b-chat-composer__emoji-glyph\" aria-hidden=\"true\">", "</span><strong>", "</strong>", "</button>"],
38
- _tmpl$29 = ["<small>:", ":</small>"],
39
- _tmpl$30 = "<i class=\"ti ti-loader-2 k2b-spin\" aria-hidden=\"true\"></i>",
40
- _tmpl$31 = ["<div class=\"k2b-chat-composer__command-group\" role=\"group\"", "><div class=\"k2b-chat-composer__command-heading\"", " role=\"presentation\"><span>", "</span>", "</div>", "", "</div>"],
41
- _tmpl$32 = "<div class=\"k2b-chat-composer__command-placeholder\" aria-hidden=\"true\"><span></span><span><span></span><span></span></span></div>",
42
- _tmpl$33 = ["<span class=\"k2b-chat-composer__hint-text\">", "</span>"],
43
- _tmpl$34 = ["<span class=\"k2b-chat-composer__dictation\"", "><i", " aria-hidden=\"true\"></i><span>", "</span></span>"],
44
- _tmpl$35 = ["<button type=\"button\" class=\"k2b-chat-composer__hint-action\"", ">", "</button>"],
45
- _tmpl$36 = ["<button type=\"button\" class=\"k2b-chat-composer__attachment-remove\"", "", "><i class=\"ti ti-x\" aria-hidden=\"true\"></i></button>"],
46
- _tmpl$37 = ["<div class=\"k2b-chat-composer__attachment\" role=\"listitem\"><div class=\"", "\">", "", "</div>", "</div>"],
47
- _tmpl$38 = ["<img", ">"],
48
- _tmpl$39 = ["<div class=\"k2b-chat-composer__attachment-identity\">", "", "</div>"],
49
- _tmpl$40 = ["<a class=\"k2b-chat-composer__attachment-link\"", " target=\"_blank\" rel=\"noopener noreferrer\"", ">", "", "</a>"],
50
- _tmpl$41 = ["<button type=\"button\" class=\"k2b-chat-composer__attachment-action\"", ">", "", "</button>"],
51
- _tmpl$42 = ["<footer class=\"k2b-chat-composer__footer\">", "</footer>"],
52
- _tmpl$43 = ["<div class=\"k2b-chat-composer__tools\">", "", "", "", "", "", "", "</div>"],
53
- _tmpl$44 = ["<div class=\"k2b-chat-composer__submit\">", "", "", "", "", "</div>"],
54
- _tmpl$45 = ["<span>", "</span>"],
55
- _tmpl$46 = ["<div class=\"k2b-chat-composer__status-line\"", "><i aria-hidden=\"true\"", "></i><span>", "</span></div>"],
56
- _tmpl$47 = ["<span class=\"k2b-sr-only\">", "</span>"];
25
+ _tmpl$16 = ["<span class=\"k2b-message-row__quote-author\"><span class=\"k2b-sr-only\">", " </span>", "</span>"],
26
+ _tmpl$17 = ["<span class=\"k2b-message-row__quote-text\">", "</span>"],
27
+ _tmpl$18 = ["<div class=\"k2b-chat-composer-accessory\"><div", " class=\"k2b-chat-composer__commands\" role=\"listbox\"", ">", "</div></div>"],
28
+ _tmpl$19 = ["<label class=\"k2b-chat-composer__command-search\"><i class=\"ti ti-search\" aria-hidden=\"true\"></i><input type=\"text\" role=\"combobox\"", " aria-autocomplete=\"list\"", " aria-expanded=\"true\"", " autocomplete=\"off\" autocapitalize=\"off\" spellcheck=\"false\"", "></label>"],
29
+ _tmpl$20 = ["<div role=\"status\" class=\"k2b-chat-composer__loading\"><i class=\"ti ti-loader-2 k2b-spin\" aria-hidden=\"true\"></i><strong>", "</strong></div>"],
30
+ _tmpl$21 = ["<div role=\"status\"><i class=\"ti ti-alert-circle\"></i> ", "</div>"],
31
+ _tmpl$22 = ["<div role=\"status\">", "</div>"],
32
+ _tmpl$23 = ["<div class=\"k2b-chat-composer-accessory\" data-commands", ">", "<div", " class=\"k2b-chat-composer__commands\" role=\"listbox\"", ">", "", "", "", "", "</div></div>"],
33
+ _tmpl$24 = ["<div class=\"k2b-chat-composer-slot\"", "><div style=\"", "\"", ">", "</div>", "", "", "</div>"],
34
+ _tmpl$25 = ["<div class=\"k2b-chat-composer__hint\" aria-live=\"polite\">", "</div>"],
35
+ _tmpl$26 = ["<div class=\"k2b-chat-composer__attachments\" role=\"list\"", " tabindex=\"0\">", "</div>"],
36
+ _tmpl$27 = ["<div class=\"k2b-chat-composer__error\" role=\"alert\"><i class=\"ti ti-alert-circle\" aria-hidden=\"true\"></i>", "</div>"],
37
+ _tmpl$28 = ["<div class=\"k2b-chat-composer__row\">", "", "<div class=\"k2b-chat-composer__field\">", "<div class=\"k2b-chat-composer__field-tools\">", "", "", "</div></div>", "</div>"],
38
+ _tmpl$29 = ["<div class=\"k2b-chat-composer-shell\">", "<section class=\"", "\"", " role=\"group\"", ">", "", "", "", "", "</section><div class=\"k2b-sr-only\" role=\"status\" aria-live=\"polite\">", "</div><div class=\"k2b-chat-composer__status\" role=\"status\">", "", "</div></div>"],
39
+ _tmpl$30 = ["<button id=\"", "\" type=\"button\" role=\"option\" tabindex=\"-1\"", "><span class=\"k2b-chat-composer__emoji-glyph\" aria-hidden=\"true\">", "</span><strong>", "</strong>", "</button>"],
40
+ _tmpl$31 = ["<small>:", ":</small>"],
41
+ _tmpl$32 = ["<small>", "</small>"],
42
+ _tmpl$33 = ["<button id=\"", "\" type=\"button\" role=\"option\" tabindex=\"-1\"", "><i", " aria-hidden=\"true\"></i><strong>", "</strong>", "</button>"],
43
+ _tmpl$34 = "<i class=\"ti ti-loader-2 k2b-spin\" aria-hidden=\"true\"></i>",
44
+ _tmpl$35 = ["<div class=\"k2b-chat-composer__command-group\" role=\"group\"", "><div class=\"k2b-chat-composer__command-heading\"", " role=\"presentation\"><span>", "</span>", "</div>", "", "</div>"],
45
+ _tmpl$36 = "<div class=\"k2b-chat-composer__command-placeholder\" aria-hidden=\"true\"><span></span><span><span></span><span></span></span></div>",
46
+ _tmpl$37 = ["<span class=\"k2b-chat-composer__hint-text\">", "</span>"],
47
+ _tmpl$38 = ["<span class=\"k2b-chat-composer__dictation\"", "><i", " aria-hidden=\"true\"></i><span>", "</span></span>"],
48
+ _tmpl$39 = ["<button type=\"button\" class=\"k2b-chat-composer__hint-action\"", ">", "</button>"],
49
+ _tmpl$40 = ["<div class=\"k2b-chat-composer__reply\">", "<button type=\"button\" class=\"k2b-chat-composer__icon-action k2b-chat-composer__reply-cancel\"", "><i class=\"ti ti-x\" aria-hidden=\"true\"></i></button></div>"],
50
+ _tmpl$41 = ["<div class=\"k2b-message-row__quote\">", "</div>"],
51
+ _tmpl$42 = ["<button type=\"button\" class=\"k2b-message-row__quote\">", "</button>"],
52
+ _tmpl$43 = ["<button type=\"button\" class=\"k2b-chat-composer__attachment-remove\"", "", "><i class=\"ti ti-x\" aria-hidden=\"true\"></i></button>"],
53
+ _tmpl$44 = ["<div class=\"k2b-chat-composer__attachment\" role=\"listitem\"><div class=\"", "\">", "", "</div>", "</div>"],
54
+ _tmpl$45 = ["<img", ">"],
55
+ _tmpl$46 = ["<div class=\"k2b-chat-composer__attachment-identity\">", "", "</div>"],
56
+ _tmpl$47 = ["<a class=\"k2b-chat-composer__attachment-link\"", " target=\"_blank\" rel=\"noopener noreferrer\"", ">", "", "</a>"],
57
+ _tmpl$48 = ["<button type=\"button\" class=\"k2b-chat-composer__attachment-action\"", ">", "", "</button>"],
58
+ _tmpl$49 = ["<footer class=\"k2b-chat-composer__footer\">", "</footer>"],
59
+ _tmpl$50 = ["<div class=\"k2b-chat-composer__tools\">", "", "", "", "", "", "", "</div>"],
60
+ _tmpl$51 = ["<div class=\"k2b-chat-composer__submit\">", "", "", "", "", "</div>"],
61
+ _tmpl$52 = ["<span>", "</span>"],
62
+ _tmpl$53 = ["<div class=\"k2b-chat-composer__status-line\"", "><i aria-hidden=\"true\"", "></i><span>", "</span></div>"],
63
+ _tmpl$54 = ["<span class=\"k2b-sr-only\">", "</span>"];
57
64
  import { batch, children, createEffect, createMemo, createSignal, createUniqueId, For, Index, on, onCleanup, onMount, Show, untrack } from "solid-js";
58
65
  import { Dropdown } from "../actions/Dropdown";
59
66
  import { dialogHistorySettled, holdDialogHistory } from "../feedback/dialog-core";
@@ -72,7 +79,7 @@ import { ChatContextUsage as ContextUsage } from "./ChatPrimitives";
72
79
  import { chatCommandKey, conversationEnterAction, executeChatAction, nextChatCommandIndex, reportChatFailure, runChatSubmission } from "./chat-behavior";
73
80
  import { useChatMessages } from "./chat-messages";
74
81
  import { chatCommandListModel, parseChatCommandQuery } from "./command-search";
75
- import { chatCommandQuery, chatMentionSegments, reconcileChatMentions } from "./composer-document";
82
+ import { chatCommandQuery, chatMentionSegments, chatPeopleQuery, reconcileChatMentions } from "./composer-document";
76
83
  const composerMaxInputHeight = 309;
77
84
  const commandDoneMs = 3_000;
78
85
  /** Emoji suggestions for a `:shortcode`, as many as fit the list without scrolling on a phone. */
@@ -98,6 +105,10 @@ const composerUndoBudgetChars = 1_000_000;
98
105
 
99
106
  /** Passed as the third argument to `searchCommands`. */
100
107
 
108
+ /** A person `@` can mention: a member of the conversation, a person or an agent. */
109
+
110
+ /** Suggests people for `@`; the composer inserts the chosen one as a mention named "@Name". */
111
+
101
112
  /** The row stays short: what a chat message needs. Other Markdown, typed by hand, keeps working. */
102
113
  const formatTools = [{
103
114
  id: "bold",
@@ -295,6 +306,32 @@ export function ChatComposer(props) {
295
306
  return token && index ? suggestEmoji(index, token.query, emojiSuggestionLimit) : [];
296
307
  });
297
308
  const emojiOpen = () => emojiMatches().length > 0;
309
+ // People for `@name`: each change of the query asks again and gives up the previous question.
310
+ const peopleQuery = createMemo(() => !props.people || dismissed() || composing() ? null : chatPeopleQuery(props.value, caret(), selectionEnd(), mentions()));
311
+ // Results belong to the query they answer; while a newer query is asked, the older results show nothing to pick.
312
+ const [peopleResults, setPeopleResults] = createSignal();
313
+ const peopleMatches = () => {
314
+ const results = peopleResults();
315
+ return results && results.query === peopleQuery()?.query ? results.people : [];
316
+ };
317
+ const setPeopleMatches = (people, query = peopleQuery()?.query ?? "") => setPeopleResults({
318
+ query,
319
+ people
320
+ });
321
+ createEffect(on(() => [peopleQuery()?.start, peopleQuery()?.query], ([start, query]) => {
322
+ if (start === undefined || query === undefined || !props.people) {
323
+ setPeopleMatches([]);
324
+ return;
325
+ }
326
+ const abort = new AbortController();
327
+ onCleanup(() => abort.abort());
328
+ props.people.search(query, abort.signal).then(found => {
329
+ if (!abort.signal.aborted) setPeopleMatches(found.slice(0, 8), query);
330
+ }, () => {
331
+ if (!abort.signal.aborted) setPeopleMatches([], query);
332
+ });
333
+ }));
334
+ const peopleOpen = () => !emojiOpen() && Boolean(peopleQuery()) && peopleMatches().length > 0;
298
335
  // From "+", the search field's text is the query of an empty token at the field's stored caret.
299
336
  const caretCommandToken = createMemo(() => {
300
337
  const search = addSearch();
@@ -389,7 +426,7 @@ export function ChatComposer(props) {
389
426
  currentCommandQuery();
390
427
  setCommandMoved(false);
391
428
  });
392
- const commandsOpen = () => Boolean(!emojiOpen() && commandQuery() && (localCommands().length || props.searchCommands || commandFallbackRow()));
429
+ const commandsOpen = () => Boolean(!emojiOpen() && !peopleOpen() && commandQuery() && (localCommands().length || props.searchCommands || commandFallbackRow()));
393
430
  // Rows that arrive for a pending section never move a visible row of the overview: until the person types, the list
394
431
  // keeps the height it had with its placeholders and scrolls what does not fit. A list below its maximum height grows
395
432
  // upward from the field, so a change of height alone would move its first row. While searching, the rows arrive
@@ -459,7 +496,7 @@ export function ChatComposer(props) {
459
496
  if (!commandSheetHeld()) return;
460
497
  onCleanup(holdDialogHistory(() => closeCommandList()));
461
498
  });
462
- const suggestionsOpen = () => commandsOpen() || emojiOpen();
499
+ const suggestionsOpen = () => commandsOpen() || emojiOpen() || peopleOpen();
463
500
  const fieldOwnsList = () => suggestionsOpen() && !addSearch();
464
501
  // From "+", the panel keeps the height it opened with while the person types or rows arrive, so neither the search
465
502
  // field nor the first row moves; what does not fit scrolls. The space above the field still bounds it.
@@ -774,7 +811,7 @@ export function ChatComposer(props) {
774
811
  const editBlocked = () => conversation() ? busy() : blocked();
775
812
  const hasDraft = () => Boolean(props.value.trim() || !running() && attachments().length > 0);
776
813
  /** The draft may go out now, apart from a submission that is already on its way. */
777
- const submittable = () => !busy() && hasDraft() && !(running() && runningSubmitIntent() === "steer" && mentions().length);
814
+ const submittable = () => !busy() && !props.submitDisabled && hasDraft() && !(running() && runningSubmitIntent() === "steer" && mentions().length);
778
815
  const canSubmit = () => !submitting() && submittable();
779
816
  const canSelectFiles = () => Boolean(props.fileSelection && !props.fileSelection.disabled && !running() && !blocked());
780
817
  const hasAddMenu = () => Boolean(props.fileSelection || props.menuActions?.length);
@@ -804,7 +841,16 @@ export function ChatComposer(props) {
804
841
  label: action.label,
805
842
  variant: action.variant,
806
843
  disabled: action.disabled,
807
- action: () => reportChatFailure(() => executeChatAction(action), props.onError)
844
+ action: () => reportChatFailure(async () => {
845
+ await executeChatAction(action);
846
+ // Like attaching files, an add action returns to the field when the focus is still on this composer's add
847
+ // button or nowhere; focus the action moved somewhere on purpose stays there.
848
+ queueMicrotask(() => {
849
+ const active = textareaRef?.ownerDocument.activeElement;
850
+ const root = textareaRef?.closest(".k2b-chat-composer");
851
+ if (!active || active === active.ownerDocument.body || root?.contains(active) && active.matches("[data-chat-composer-add]")) focus();
852
+ });
853
+ }, props.onError)
808
854
  });
809
855
  }
810
856
  return items;
@@ -835,11 +881,12 @@ export function ChatComposer(props) {
835
881
  });
836
882
  createEffect(() => {
837
883
  emojiMatches();
884
+ peopleMatches();
838
885
  setSelectedCommandIndex(0);
839
886
  });
840
887
  createEffect(() => {
841
888
  const command = selectedCommand();
842
- const id = emojiOpen() ? `${commandListId}-${selectedCommandIndex()}` : command ? commandOptionId(command) : undefined;
889
+ const id = emojiOpen() || peopleOpen() ? `${commandListId}-${selectedCommandIndex()}` : command ? commandOptionId(command) : undefined;
843
890
  queueMicrotask(() => {
844
891
  const list = commandListRef;
845
892
  const item = id ? list?.querySelector(`[id="${id}"]`) : undefined;
@@ -1286,6 +1333,32 @@ export function ChatComposer(props) {
1286
1333
  syncCaret();
1287
1334
  reportChatFailure(() => props.emoji?.onPick?.(emoji), props.onError);
1288
1335
  };
1336
+ /** Replaces `@query` with "@Name" as a mention and a space, as one edit the person can undo. */
1337
+ const pickPersonSuggestion = position => {
1338
+ const token = peopleQuery();
1339
+ const person = peopleMatches()[position];
1340
+ if (!token || !person || !textareaRef || editBlocked()) return;
1341
+ const text = `@${person.name}`;
1342
+ const nextValue = `${props.value.slice(0, token.start)}${text} ${props.value.slice(token.end)}`;
1343
+ const nextMentions = reconcileChatMentions(props.value, nextValue, mentions());
1344
+ nextMentions.push({
1345
+ start: token.start,
1346
+ end: token.start + text.length,
1347
+ attachment: {
1348
+ id: person.id,
1349
+ name: text,
1350
+ kind: "resource",
1351
+ icon: person.agent ? "ti ti-robot" : "ti ti-user"
1352
+ }
1353
+ });
1354
+ edit(nextValue, nextMentions);
1355
+ setPeopleMatches([]);
1356
+ const after = token.start + text.length + 1;
1357
+ queueMicrotask(() => {
1358
+ textareaRef?.setSelectionRange(after, after);
1359
+ syncCaret();
1360
+ });
1361
+ };
1289
1362
  const pickEmojiSuggestion = position => {
1290
1363
  const token = emojiQuery();
1291
1364
  const entry = emojiMatches()[position];
@@ -1384,17 +1457,18 @@ export function ChatComposer(props) {
1384
1457
  restoreHistory(event.shiftKey ? 1 : -1);
1385
1458
  return;
1386
1459
  }
1387
- if (emojiOpen()) {
1460
+ if (emojiOpen() || peopleOpen()) {
1461
+ const count = emojiOpen() ? emojiMatches().length : peopleMatches().length;
1388
1462
  if (event.key === "ArrowUp" || event.key === "ArrowDown") {
1389
1463
  event.preventDefault();
1390
- setSelectedCommandIndex(index => nextChatCommandIndex(index, emojiMatches().length, event.key === "ArrowUp" ? -1 : 1));
1464
+ setSelectedCommandIndex(index => nextChatCommandIndex(index, count, event.key === "ArrowUp" ? -1 : 1));
1391
1465
  return;
1392
1466
  }
1393
1467
  // Only a plain Enter or Tab picks: Shift+Enter still breaks the line, Shift+Tab still moves the focus back.
1394
1468
  const plain = !event.shiftKey && !event.altKey && !event.ctrlKey && !event.metaKey;
1395
1469
  if (plain && (event.key === "Enter" || event.key === "Tab")) {
1396
1470
  event.preventDefault();
1397
- pickEmojiSuggestion(selectedCommandIndex());
1471
+ if (emojiOpen()) pickEmojiSuggestion(selectedCommandIndex());else pickPersonSuggestion(selectedCommandIndex());
1398
1472
  return;
1399
1473
  }
1400
1474
  if (event.key === "Escape") {
@@ -1517,6 +1591,7 @@ export function ChatComposer(props) {
1517
1591
  return _$createComponent(Dropdown.Trigger, {
1518
1592
  appearance: "plain",
1519
1593
  "class": `k2b-chat-composer__icon-action${extraClass}`,
1594
+ "data-chat-composer-add": "",
1520
1595
  get label() {
1521
1596
  return chatMessages().addToChat;
1522
1597
  },
@@ -1853,7 +1928,7 @@ export function ChatComposer(props) {
1853
1928
  children: part => _$ssr(_tmpl$10, Boolean(part.mention) ? "k2b-chat-composer__mention" : "", _$escape(part.text))
1854
1929
  })));
1855
1930
  }
1856
- })), mentions().length > 0 ? "k2b-chat-composer__textarea--highlighted" : "", _$ssrAttribute("value", _$escape(props.value, true), false), _$ssrAttribute("disabled", editBlocked() && openingRow() === undefined, true) + _$ssrAttribute("readonly", _$escape(openingRow(), true) !== _$escape(undefined, true), false) + _$ssrAttribute("enterkeyhint", conversation() ? "enter" : _$escape(undefined, true), false) + _$ssrAttribute("placeholder", _$escape(props.placeholder ?? (running() ? chatMessages().addGuidance : conversation() ? chatMessages().writeConversationMessage : chatMessages().writeMessage), true), false) + _$ssrAttribute("aria-label", _$escape(props.inputLabel ?? messages().message, true), false) + _$ssrAttribute("role", fieldOwnsList() ? "combobox" : _$escape(undefined, true), false) + _$ssrAttribute("aria-autocomplete", fieldOwnsList() ? "list" : _$escape(undefined, true), false) + _$ssrAttribute("aria-controls", fieldOwnsList() ? _$escape(commandListId, true) : _$escape(undefined, true), false) + _$ssrAttribute("aria-expanded", fieldOwnsList() ? "true" : _$escape(undefined, true), false) + _$ssrAttribute("aria-activedescendant", !fieldOwnsList() ? _$escape(undefined, true) : emojiOpen() ? `${_$escape(commandListId, true)}-${_$escape(selectedCommandIndex(), true)}` : selectedCommand() ? _$escape(commandOptionId(selectedCommand()), true) : _$escape(undefined, true), false), _$escape(_$createComponent(Show, {
1931
+ })), mentions().length > 0 ? "k2b-chat-composer__textarea--highlighted" : "", _$ssrAttribute("value", _$escape(props.value, true), false), _$ssrAttribute("disabled", editBlocked() && openingRow() === undefined, true) + _$ssrAttribute("readonly", _$escape(openingRow(), true) !== _$escape(undefined, true), false) + _$ssrAttribute("enterkeyhint", conversation() ? "enter" : _$escape(undefined, true), false) + _$ssrAttribute("placeholder", _$escape(props.placeholder ?? (running() ? chatMessages().addGuidance : conversation() ? chatMessages().writeConversationMessage : chatMessages().writeMessage), true), false) + _$ssrAttribute("aria-label", _$escape(props.inputLabel ?? messages().message, true), false) + _$ssrAttribute("role", fieldOwnsList() ? "combobox" : _$escape(undefined, true), false) + _$ssrAttribute("aria-autocomplete", fieldOwnsList() ? "list" : _$escape(undefined, true), false) + _$ssrAttribute("aria-controls", fieldOwnsList() ? _$escape(commandListId, true) : _$escape(undefined, true), false) + _$ssrAttribute("aria-expanded", fieldOwnsList() ? "true" : _$escape(undefined, true), false) + _$ssrAttribute("aria-activedescendant", !fieldOwnsList() ? _$escape(undefined, true) : emojiOpen() || peopleOpen() ? `${_$escape(commandListId, true)}-${_$escape(selectedCommandIndex(), true)}` : selectedCommand() ? _$escape(commandOptionId(selectedCommand()), true) : _$escape(undefined, true), false), _$escape(_$createComponent(Show, {
1857
1932
  get when() {
1858
1933
  return conversation();
1859
1934
  },
@@ -1902,25 +1977,45 @@ export function ChatComposer(props) {
1902
1977
  }
1903
1978
  })));
1904
1979
  };
1905
- return _$ssr(_tmpl$27, _$escape(_$createComponent(Show, {
1980
+ const replyQuote = reply => [_$ssr(_tmpl$16, _$escape(chatMessages().replyingTo), _$escape(reply.author)), _$ssr(_tmpl$17, _$escape(reply.text))];
1981
+ return _$ssr(_tmpl$29, _$escape(_$createComponent(Show, {
1906
1982
  get when() {
1907
1983
  return suggestionsOpen() || hasAccessory();
1908
1984
  },
1909
1985
  get children() {
1910
- return _$ssr(_tmpl$22, _$ssrAttribute("data-overlay", hasAccessory() ? _$escape(undefined, true) : "true", false), _$ssrStyleProperty("visibility:", suggestionsOpen() ? "hidden" : _$escape(undefined, true)), _$ssrAttribute("inert", suggestionsOpen(), true), _$escape(accessory()), _$escape(_$createComponent(Show, {
1986
+ return _$ssr(_tmpl$24, _$ssrAttribute("data-overlay", hasAccessory() ? _$escape(undefined, true) : "true", false), _$ssrStyleProperty("visibility:", suggestionsOpen() ? "hidden" : _$escape(undefined, true)), _$ssrAttribute("inert", suggestionsOpen(), true), _$escape(accessory()), _$escape(_$createComponent(Show, {
1911
1987
  get when() {
1912
1988
  return emojiOpen();
1913
1989
  },
1914
1990
  get children() {
1915
- return _$ssr(_tmpl$16, _$ssrAttribute("id", _$escape(commandListId, true), false), _$ssrAttribute("aria-label", _$escape(chatMessages().emojiSuggestions, true), false), _$escape(_$createComponent(For, {
1991
+ return _$ssr(_tmpl$18, _$ssrAttribute("id", _$escape(commandListId, true), false), _$ssrAttribute("aria-label", _$escape(chatMessages().emojiSuggestions, true), false), _$escape(_$createComponent(For, {
1916
1992
  get each() {
1917
1993
  return emojiMatches();
1918
1994
  },
1919
- children: (entry, index) => _$ssr(_tmpl$28, `${_$escape(commandListId, true)}-${_$escape(index(), true)}`, _$ssrAttribute("aria-selected", _$escape(index(), true) === _$escape(selectedCommandIndex(), true), false) + _$ssrAttribute("aria-label", _$escape(emojiName(entry, locale()), true), false) + _$ssrAttribute("data-active", index() === selectedCommandIndex() ? "true" : _$escape(undefined, true), false), _$escape(emojiInTone(entry, props.emoji?.skinTone ?? 0)), _$escape(emojiName(entry, locale())), _$escape(_$createComponent(Show, {
1995
+ children: (entry, index) => _$ssr(_tmpl$30, `${_$escape(commandListId, true)}-${_$escape(index(), true)}`, _$ssrAttribute("aria-selected", _$escape(index(), true) === _$escape(selectedCommandIndex(), true), false) + _$ssrAttribute("aria-label", _$escape(emojiName(entry, locale()), true), false) + _$ssrAttribute("data-active", index() === selectedCommandIndex() ? "true" : _$escape(undefined, true), false), _$escape(emojiInTone(entry, props.emoji?.skinTone ?? 0)), _$escape(emojiName(entry, locale())), _$escape(_$createComponent(Show, {
1920
1996
  get when() {
1921
1997
  return entry.shortcodes[0];
1922
1998
  },
1923
- children: code => _$ssr(_tmpl$29, _$escape(code()))
1999
+ children: code => _$ssr(_tmpl$31, _$escape(code()))
2000
+ })))
2001
+ })));
2002
+ }
2003
+ })), _$escape(_$createComponent(Show, {
2004
+ get when() {
2005
+ return peopleOpen();
2006
+ },
2007
+ get children() {
2008
+ return _$ssr(_tmpl$18, _$ssrAttribute("id", _$escape(commandListId, true), false), _$ssrAttribute("aria-label", _$escape(chatMessages().peopleSuggestions, true), false), _$escape(_$createComponent(For, {
2009
+ get each() {
2010
+ return peopleMatches();
2011
+ },
2012
+ children: (person, index) => _$ssr(_tmpl$33, `${_$escape(commandListId, true)}-${_$escape(index(), true)}`, _$ssrAttribute("aria-selected", _$escape(index(), true) === _$escape(selectedCommandIndex(), true), false) + _$ssrAttribute("data-active", index() === selectedCommandIndex() ? "true" : _$escape(undefined, true), false), _$ssrAttribute("class", person.agent ? "ti ti-robot" : "ti ti-user", false), _$escape(person.name), _$escape(_$createComponent(Show, {
2013
+ get when() {
2014
+ return person.agent;
2015
+ },
2016
+ get children() {
2017
+ return _$ssr(_tmpl$32, _$escape(chatMessages().agentLabel));
2018
+ }
1924
2019
  })))
1925
2020
  })));
1926
2021
  }
@@ -1929,12 +2024,12 @@ export function ChatComposer(props) {
1929
2024
  return commandsOpen();
1930
2025
  },
1931
2026
  get children() {
1932
- return _$ssr(_tmpl$21, _$ssrAttribute("data-search", addSearch() ? "" : _$escape(undefined, true), false), _$escape(_$createComponent(Show, {
2027
+ return _$ssr(_tmpl$23, _$ssrAttribute("data-search", addSearch() ? "" : _$escape(undefined, true), false), _$escape(_$createComponent(Show, {
1933
2028
  get when() {
1934
2029
  return addSearch();
1935
2030
  },
1936
2031
  get children() {
1937
- return _$ssr(_tmpl$17, _$ssrAttribute("value", _$escape(addQuery(), true), false) + _$ssrAttribute("placeholder", _$escape(chatMessages().commandSearch, true), false) + _$ssrAttribute("aria-label", _$escape(chatMessages().commandSearchLabel, true), false), _$ssrAttribute("aria-controls", _$escape(commandListId, true), false), _$ssrAttribute("aria-activedescendant", selectedCommand() ? _$escape(commandOptionId(selectedCommand()), true) : _$escape(undefined, true), false), _$ssrAttribute("readonly", _$escape(openingRow(), true) !== _$escape(undefined, true), false));
2032
+ return _$ssr(_tmpl$19, _$ssrAttribute("value", _$escape(addQuery(), true), false) + _$ssrAttribute("placeholder", _$escape(chatMessages().commandSearch, true), false) + _$ssrAttribute("aria-label", _$escape(chatMessages().commandSearchLabel, true), false), _$ssrAttribute("aria-controls", _$escape(commandListId, true), false), _$ssrAttribute("aria-activedescendant", selectedCommand() ? _$escape(commandOptionId(selectedCommand()), true) : _$escape(undefined, true), false), _$ssrAttribute("readonly", _$escape(openingRow(), true) !== _$escape(undefined, true), false));
1938
2033
  }
1939
2034
  })), _$ssrAttribute("id", _$escape(commandListId, true), false), _$ssrAttribute("aria-label", _$escape(chatMessages().commands, true), false) + _$ssrAttribute("aria-busy", searching() ? "true" : _$escape(undefined, true), false), _$escape(_$createComponent(For, {
1940
2035
  get each() {
@@ -1955,12 +2050,12 @@ export function ChatComposer(props) {
1955
2050
  });
1956
2051
  },
1957
2052
  get children() {
1958
- return _$ssr(_tmpl$31, _$ssrAttribute("aria-labelledby", _$escape(headingId(), true), false), _$ssrAttribute("id", _$escape(headingId(), true), false), _$escape(group()?.scopeTitle ?? group()?.section?.label), _$escape(_$createComponent(Show, {
2053
+ return _$ssr(_tmpl$35, _$ssrAttribute("aria-labelledby", _$escape(headingId(), true), false), _$ssrAttribute("id", _$escape(headingId(), true), false), _$escape(group()?.scopeTitle ?? group()?.section?.label), _$escape(_$createComponent(Show, {
1959
2054
  get when() {
1960
2055
  return group()?.loading;
1961
2056
  },
1962
2057
  get children() {
1963
- return _$ssr(_tmpl$30);
2058
+ return _$ssr(_tmpl$34);
1964
2059
  }
1965
2060
  })), _$escape(_$createComponent(For, {
1966
2061
  get each() {
@@ -1973,7 +2068,7 @@ export function ChatComposer(props) {
1973
2068
  length: Math.max(group()?.placeholder ? 1 : 0, group()?.pendingRows ?? 0)
1974
2069
  });
1975
2070
  },
1976
- children: () => _$ssr(_tmpl$32)
2071
+ children: () => _$ssr(_tmpl$36)
1977
2072
  })));
1978
2073
  }
1979
2074
  });
@@ -1983,21 +2078,21 @@ export function ChatComposer(props) {
1983
2078
  return _$memo(() => !!(searching() && foundCommandCount() === 0))() && !commandModel().groups.some(group => group.section || group.scopeTitle);
1984
2079
  },
1985
2080
  get children() {
1986
- return _$ssr(_tmpl$18, _$escape(messages().loading));
2081
+ return _$ssr(_tmpl$20, _$escape(messages().loading));
1987
2082
  }
1988
2083
  })), _$escape(_$createComponent(Show, {
1989
2084
  get when() {
1990
2085
  return searchError();
1991
2086
  },
1992
2087
  get children() {
1993
- return _$ssr(_tmpl$19, _$escape(messages().error));
2088
+ return _$ssr(_tmpl$21, _$escape(messages().error));
1994
2089
  }
1995
2090
  })), _$escape(_$createComponent(Show, {
1996
2091
  get when() {
1997
2092
  return _$memo(() => !!(!searching() && !searchError() && foundCommandCount() === 0))() && !commandModel().groups.some(group => group.pendingRows);
1998
2093
  },
1999
2094
  get children() {
2000
- return _$ssr(_tmpl$20, !parsedCommandQuery().query.trim() ? _$escape(messages().noResults) : _$escape(chatMessages().commandsNothingFound({
2095
+ return _$ssr(_tmpl$22, !parsedCommandQuery().query.trim() ? _$escape(messages().noResults) : _$escape(chatMessages().commandsNothingFound({
2001
2096
  query: parsedCommandQuery().query.trim()
2002
2097
  })));
2003
2098
  }
@@ -2016,36 +2111,49 @@ export function ChatComposer(props) {
2016
2111
  return showHint();
2017
2112
  },
2018
2113
  get children() {
2019
- return _$ssr(_tmpl$23, _$escape(_$createComponent(Show, {
2114
+ return _$ssr(_tmpl$25, _$escape(_$createComponent(Show, {
2020
2115
  get when() {
2021
2116
  return dictationStatus();
2022
2117
  },
2023
2118
  get fallback() {
2024
- return _$ssr(_tmpl$33, _$escape(hint()));
2119
+ return _$ssr(_tmpl$37, _$escape(hint()));
2025
2120
  },
2026
- children: status => [_$ssr(_tmpl$34, _$ssrAttribute("data-state", _$escape(dictation() ?? undefined, true), false), _$ssrAttribute("class", _$escape(status().icon, true), false), _$escape(status().text)), _$createComponent(Show, {
2121
+ children: status => [_$ssr(_tmpl$38, _$ssrAttribute("data-state", _$escape(dictation() ?? undefined, true), false), _$ssrAttribute("class", _$escape(status().icon, true), false), _$escape(status().text)), _$createComponent(Show, {
2027
2122
  get when() {
2028
2123
  return _$memo(() => dictation() === "refined")() ? props.microphone?.onRestoreOriginal : undefined;
2029
2124
  },
2030
- children: restore => _$ssr(_tmpl$35, _$ssrAttribute("disabled", microphoneDisabled(), true), _$escape(chatMessages().restoreOriginal))
2125
+ children: restore => _$ssr(_tmpl$39, _$ssrAttribute("disabled", microphoneDisabled(), true), _$escape(chatMessages().restoreOriginal))
2031
2126
  })]
2032
2127
  })));
2033
2128
  }
2129
+ })), _$escape(_$createComponent(Show, {
2130
+ get when() {
2131
+ return props.reply;
2132
+ },
2133
+ children: reply => _$ssr(_tmpl$40, _$escape(_$createComponent(Show, {
2134
+ get when() {
2135
+ return reply().onSelect;
2136
+ },
2137
+ get fallback() {
2138
+ return _$ssr(_tmpl$41, _$escape(replyQuote(reply())));
2139
+ },
2140
+ children: select => _$ssr(_tmpl$42, _$escape(replyQuote(reply())))
2141
+ })), _$ssrAttribute("aria-label", _$escape(chatMessages().cancelReply, true), false) + _$ssrAttribute("title", _$escape(chatMessages().cancelReply, true), false))
2034
2142
  })), _$escape(_$createComponent(Show, {
2035
2143
  get when() {
2036
2144
  return attachments().length > 0;
2037
2145
  },
2038
2146
  get children() {
2039
- return _$ssr(_tmpl$24, _$ssrAttribute("aria-label", _$escape(chatMessages().attachments, true), false), _$escape(_$createComponent(For, {
2147
+ return _$ssr(_tmpl$26, _$ssrAttribute("aria-label", _$escape(chatMessages().attachments, true), false), _$escape(_$createComponent(For, {
2040
2148
  get each() {
2041
2149
  return attachments();
2042
2150
  },
2043
- children: attachment => _$ssr(_tmpl$37, `k2b-chat-composer__attachment-content ${Boolean(attachment.action) ? "k2b-chat-composer__attachment-content--action" : ""}`, _$escape(_$createComponent(Show, {
2151
+ children: attachment => _$ssr(_tmpl$44, `k2b-chat-composer__attachment-content ${Boolean(attachment.action) ? "k2b-chat-composer__attachment-content--action" : ""}`, _$escape(_$createComponent(Show, {
2044
2152
  get when() {
2045
2153
  return attachment.href;
2046
2154
  },
2047
2155
  get fallback() {
2048
- return _$ssr(_tmpl$39, _$escape(_$createComponent(Show, {
2156
+ return _$ssr(_tmpl$46, _$escape(_$createComponent(Show, {
2049
2157
  get when() {
2050
2158
  return _$memo(() => attachment.kind === "image")() && attachment.previewUrl;
2051
2159
  },
@@ -2053,11 +2161,11 @@ export function ChatComposer(props) {
2053
2161
  return _$ssr(_tmpl$3, _$ssrAttribute("class", _$escape(attachmentIcon(attachment), true), false));
2054
2162
  },
2055
2163
  get children() {
2056
- return _$ssr(_tmpl$38, _$ssrAttribute("src", _$escape(attachment.previewUrl, true), false) + _$ssrAttribute("alt", _$escape(attachment.alt ?? "", true), false));
2164
+ return _$ssr(_tmpl$45, _$ssrAttribute("src", _$escape(attachment.previewUrl, true), false) + _$ssrAttribute("alt", _$escape(attachment.alt ?? "", true), false));
2057
2165
  }
2058
2166
  })), _$escape(renderAttachmentCopy(attachment)));
2059
2167
  },
2060
- children: href => _$ssr(_tmpl$40, _$ssrAttribute("href", _$escape(href(), true), false), _$ssrAttribute("aria-label", _$escape(chatMessages().openInNewTab({
2168
+ children: href => _$ssr(_tmpl$47, _$ssrAttribute("href", _$escape(href(), true), false), _$ssrAttribute("aria-label", _$escape(chatMessages().openInNewTab({
2061
2169
  name: attachment.name
2062
2170
  }), true), false), _$escape(_$createComponent(Show, {
2063
2171
  get when() {
@@ -2067,14 +2175,14 @@ export function ChatComposer(props) {
2067
2175
  return _$ssr(_tmpl$3, _$ssrAttribute("class", _$escape(attachmentIcon(attachment), true), false));
2068
2176
  },
2069
2177
  get children() {
2070
- return _$ssr(_tmpl$38, _$ssrAttribute("src", _$escape(attachment.previewUrl, true), false) + _$ssrAttribute("alt", _$escape(attachment.alt ?? "", true), false));
2178
+ return _$ssr(_tmpl$45, _$ssrAttribute("src", _$escape(attachment.previewUrl, true), false) + _$ssrAttribute("alt", _$escape(attachment.alt ?? "", true), false));
2071
2179
  }
2072
2180
  })), _$escape(renderAttachmentCopy(attachment)))
2073
2181
  })), _$escape(_$createComponent(Show, {
2074
2182
  get when() {
2075
2183
  return attachment.action;
2076
2184
  },
2077
- children: action => _$ssr(_tmpl$41, _$ssrAttribute("disabled", blocked() || action().disabled, true), _$escape(_$createComponent(Show, {
2185
+ children: action => _$ssr(_tmpl$48, _$ssrAttribute("disabled", blocked() || action().disabled, true), _$escape(_$createComponent(Show, {
2078
2186
  get when() {
2079
2187
  return action().icon;
2080
2188
  },
@@ -2085,7 +2193,7 @@ export function ChatComposer(props) {
2085
2193
  return props.onAttachmentsChange;
2086
2194
  },
2087
2195
  get children() {
2088
- return _$ssr(_tmpl$36, _$ssrAttribute("aria-label", _$escape(selectMessages().removeNamed({
2196
+ return _$ssr(_tmpl$43, _$ssrAttribute("aria-label", _$escape(selectMessages().removeNamed({
2089
2197
  name: attachment.name
2090
2198
  }), true), false), _$ssrAttribute("disabled", blocked(), true));
2091
2199
  }
@@ -2102,14 +2210,14 @@ export function ChatComposer(props) {
2102
2210
  return props.error;
2103
2211
  },
2104
2212
  get children() {
2105
- return _$ssr(_tmpl$25, _$escape(props.error));
2213
+ return _$ssr(_tmpl$27, _$escape(props.error));
2106
2214
  }
2107
- }), formatRow(), _$ssr(_tmpl$42, _$escape(_$createComponent(Show, {
2215
+ }), formatRow(), _$ssr(_tmpl$49, _$escape(_$createComponent(Show, {
2108
2216
  get when() {
2109
2217
  return footer();
2110
2218
  },
2111
2219
  get fallback() {
2112
- return [_$ssr(_tmpl$43, _$escape(props.footerTools), _$escape(_$createComponent(Show, {
2220
+ return [_$ssr(_tmpl$50, _$escape(props.footerTools), _$escape(_$createComponent(Show, {
2113
2221
  get when() {
2114
2222
  return addOpensCommands();
2115
2223
  },
@@ -2172,7 +2280,7 @@ export function ChatComposer(props) {
2172
2280
  }
2173
2281
  });
2174
2282
  }
2175
- })), _$escape(props.modelDetails)), _$ssr(_tmpl$44, _$escape(_$createComponent(For, {
2283
+ })), _$escape(props.modelDetails)), _$ssr(_tmpl$51, _$escape(_$createComponent(For, {
2176
2284
  get each() {
2177
2285
  return props.contextActions;
2178
2286
  },
@@ -2224,9 +2332,9 @@ export function ChatComposer(props) {
2224
2332
  return props.error;
2225
2333
  },
2226
2334
  get children() {
2227
- return _$ssr(_tmpl$25, _$escape(props.error));
2335
+ return _$ssr(_tmpl$27, _$escape(props.error));
2228
2336
  }
2229
- }), formatRow(), _$ssr(_tmpl$26, _$escape(attachControl()), _$escape(fileInput()), _$escape(field()), _$escape(formatToggle()), _$escape(emojiButton()), _$escape(microphoneControl()), _$escape(sendControl()))];
2337
+ }), formatRow(), _$ssr(_tmpl$28, _$escape(attachControl()), _$escape(fileInput()), _$escape(field()), _$escape(formatToggle()), _$escape(emojiButton()), _$escape(microphoneControl()), _$escape(sendControl()))];
2230
2338
  }
2231
2339
  })), _$escape(_$createComponent(Show, {
2232
2340
  get when() {
@@ -2252,18 +2360,18 @@ export function ChatComposer(props) {
2252
2360
  return suggestionAnnouncement();
2253
2361
  },
2254
2362
  keyed: true,
2255
- children: announced => _$ssr(_tmpl$45, _$escape(announced.text))
2363
+ children: announced => _$ssr(_tmpl$52, _$escape(announced.text))
2256
2364
  })), _$escape(_$createComponent(Show, {
2257
2365
  get when() {
2258
2366
  return _$memo(() => !!!suggestionsOpen())() && commandStatus();
2259
2367
  },
2260
- children: status => _$ssr(_tmpl$46, _$ssrAttribute("data-tone", _$escape(status().tone, true), false), _$ssrAttribute("class", status().tone === "busy" ? "ti ti-loader-2 k2b-spin" : status().tone === "done" ? "ti ti-check" : "ti ti-alert-circle", false), _$escape(status().text))
2368
+ children: status => _$ssr(_tmpl$53, _$ssrAttribute("data-tone", _$escape(status().tone, true), false), _$ssrAttribute("class", status().tone === "busy" ? "ti ti-loader-2 k2b-spin" : status().tone === "done" ? "ti ti-check" : "ti ti-alert-circle", false), _$escape(status().text))
2261
2369
  })), _$escape(_$createComponent(Show, {
2262
2370
  get when() {
2263
2371
  return _$memo(() => !!suggestionsOpen())() && announcement();
2264
2372
  },
2265
2373
  keyed: true,
2266
- children: announced => _$ssr(_tmpl$47, _$escape(announced.text))
2374
+ children: announced => _$ssr(_tmpl$54, _$escape(announced.text))
2267
2375
  })));
2268
2376
  }
2269
2377
  //# sourceMappingURL=ChatComposer.js.map