@k2b/ui 0.28.0 → 0.30.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 (278) hide show
  1. package/README.md +1 -1
  2. package/dist/base.css +2 -2
  3. package/dist/browser/actions/ContextMenu.js +5 -0
  4. package/dist/browser/actions/ContextMenu.js.map +1 -1
  5. package/dist/browser/actions/DragAndDrop.js +89 -0
  6. package/dist/browser/actions/DragAndDrop.js.map +1 -0
  7. package/dist/browser/actions/Dropdown.js +6 -3
  8. package/dist/browser/actions/Dropdown.js.map +1 -1
  9. package/dist/browser/actions/FilterChip.js +137 -7
  10. package/dist/browser/actions/FilterChip.js.map +1 -1
  11. package/dist/browser/actions/GestureMenu.js +26 -3
  12. package/dist/browser/actions/GestureMenu.js.map +1 -1
  13. package/dist/browser/actions/SegmentedControl.js +5 -9
  14. package/dist/browser/actions/SegmentedControl.js.map +1 -1
  15. package/dist/browser/actions/SpotlightSearch.js +6 -3
  16. package/dist/browser/actions/SpotlightSearch.js.map +1 -1
  17. package/dist/browser/actions/Tabs.js +5 -2
  18. package/dist/browser/actions/Tabs.js.map +1 -1
  19. package/dist/browser/actions/ViewTabs.js +294 -0
  20. package/dist/browser/actions/ViewTabs.js.map +1 -0
  21. package/dist/browser/actions/drag-and-drop-messages.js +75 -0
  22. package/dist/browser/actions/drag-and-drop-messages.js.map +1 -0
  23. package/dist/browser/actions/drag-and-drop.js +692 -0
  24. package/dist/browser/actions/drag-and-drop.js.map +1 -0
  25. package/dist/browser/actions/filter-messages.js +6 -2
  26. package/dist/browser/actions/filter-messages.js.map +1 -1
  27. package/dist/browser/actions/index.js +3 -1
  28. package/dist/browser/actions/index.js.map +1 -1
  29. package/dist/browser/chat/ChatComposer.js +1229 -605
  30. package/dist/browser/chat/ChatComposer.js.map +1 -1
  31. package/dist/browser/chat/ChatDecision.js +814 -0
  32. package/dist/browser/chat/ChatDecision.js.map +1 -0
  33. package/dist/browser/chat/ChatPrimitives.js +292 -153
  34. package/dist/browser/chat/ChatPrimitives.js.map +1 -1
  35. package/dist/browser/chat/ChatTimeline.js.map +1 -1
  36. package/dist/browser/chat/chat-messages.js +14 -0
  37. package/dist/browser/chat/chat-messages.js.map +1 -1
  38. package/dist/browser/chat/command-search.js +35 -17
  39. package/dist/browser/chat/command-search.js.map +1 -1
  40. package/dist/browser/chat/index.js +10 -3
  41. package/dist/browser/chat/index.js.map +1 -1
  42. package/dist/browser/chat/types.js.map +1 -1
  43. package/dist/browser/content/Calendar.js +146 -119
  44. package/dist/browser/content/Calendar.js.map +1 -1
  45. package/dist/browser/content/CalendarWeekView.js +291 -266
  46. package/dist/browser/content/CalendarWeekView.js.map +1 -1
  47. package/dist/browser/content/Chart.js +54 -71
  48. package/dist/browser/content/Chart.js.map +1 -1
  49. package/dist/browser/content/DataTable.js +224 -155
  50. package/dist/browser/content/DataTable.js.map +1 -1
  51. package/dist/browser/content/FileBrowser.js +2 -2
  52. package/dist/browser/content/FileBrowser.js.map +1 -1
  53. package/dist/browser/content/FileTree.js +42 -36
  54. package/dist/browser/content/FileTree.js.map +1 -1
  55. package/dist/browser/content/FileTypeIcon.js +72 -0
  56. package/dist/browser/content/FileTypeIcon.js.map +1 -0
  57. package/dist/browser/content/FileView.js +2 -2
  58. package/dist/browser/content/FileView.js.map +1 -1
  59. package/dist/browser/content/ReferenceChip.js +162 -0
  60. package/dist/browser/content/ReferenceChip.js.map +1 -0
  61. package/dist/browser/content/calendar-pointer.js +9 -0
  62. package/dist/browser/content/calendar-pointer.js.map +1 -1
  63. package/dist/browser/content/calendar-time-view.js +6 -3
  64. package/dist/browser/content/calendar-time-view.js.map +1 -1
  65. package/dist/browser/content/data-table-messages.js +4 -2
  66. package/dist/browser/content/data-table-messages.js.map +1 -1
  67. package/dist/browser/content/index.js +2 -0
  68. package/dist/browser/content/index.js.map +1 -1
  69. package/dist/browser/feedback/MovedHint.js +197 -0
  70. package/dist/browser/feedback/MovedHint.js.map +1 -0
  71. package/dist/browser/feedback/dialog-core.js +66 -9
  72. package/dist/browser/feedback/dialog-core.js.map +1 -1
  73. package/dist/browser/feedback/index.js +1 -0
  74. package/dist/browser/feedback/index.js.map +1 -1
  75. package/dist/browser/feedback/prompts.js +6 -1
  76. package/dist/browser/feedback/prompts.js.map +1 -1
  77. package/dist/browser/inputs/DatePicker.js +337 -212
  78. package/dist/browser/inputs/DatePicker.js.map +1 -1
  79. package/dist/browser/inputs/date-picker.js +59 -5
  80. package/dist/browser/inputs/date-picker.js.map +1 -1
  81. package/dist/browser/intl/messages.js +12 -0
  82. package/dist/browser/intl/messages.js.map +1 -1
  83. package/dist/browser/intl/weekend.js +39 -0
  84. package/dist/browser/intl/weekend.js.map +1 -0
  85. package/dist/browser/layout/AppOverview.js +1 -2
  86. package/dist/browser/layout/AppOverview.js.map +1 -1
  87. package/dist/browser/layout/AppWorkspace.js +947 -531
  88. package/dist/browser/layout/AppWorkspace.js.map +1 -1
  89. package/dist/browser/layout/PageTitle.js +3 -2
  90. package/dist/browser/layout/PageTitle.js.map +1 -1
  91. package/dist/browser/layout/PanelDialog.js +88 -86
  92. package/dist/browser/layout/PanelDialog.js.map +1 -1
  93. package/dist/browser/layout/ResizeSeparator.js +81 -0
  94. package/dist/browser/layout/ResizeSeparator.js.map +1 -0
  95. package/dist/browser/layout/SettingsModal.js +2 -2
  96. package/dist/browser/layout/SettingsModal.js.map +1 -1
  97. package/dist/browser/layout/SidebarSwitcher.js +19 -11
  98. package/dist/browser/layout/SidebarSwitcher.js.map +1 -1
  99. package/dist/browser/layout/TabBar.js +16 -13
  100. package/dist/browser/layout/TabBar.js.map +1 -1
  101. package/dist/browser/layout/app-host-width.js +44 -0
  102. package/dist/browser/layout/app-host-width.js.map +1 -0
  103. package/dist/browser/layout/app-workspace-controller.js +337 -44
  104. package/dist/browser/layout/app-workspace-controller.js.map +1 -1
  105. package/dist/browser/layout/index.js +4 -1
  106. package/dist/browser/layout/index.js.map +1 -1
  107. package/dist/browser/layout/resize-separator.js +90 -0
  108. package/dist/browser/layout/resize-separator.js.map +1 -0
  109. package/dist/browser/layout/workspace-messages.js +12 -2
  110. package/dist/browser/layout/workspace-messages.js.map +1 -1
  111. package/dist/browser/surfaces/LinkCard.js +1 -1
  112. package/dist/browser/surfaces/LinkCard.js.map +1 -1
  113. package/dist/browser/surfaces/Placeholder.js +45 -11
  114. package/dist/browser/surfaces/Placeholder.js.map +1 -1
  115. package/dist/browser/surfaces/StatCell.js +23 -0
  116. package/dist/browser/surfaces/StatCell.js.map +1 -1
  117. package/dist/browser/widgets/Widget.js +1 -1
  118. package/dist/browser/widgets/Widget.js.map +1 -1
  119. package/dist/ssr/actions/ContextMenu.js +5 -0
  120. package/dist/ssr/actions/ContextMenu.js.map +1 -1
  121. package/dist/ssr/actions/DragAndDrop.js +63 -0
  122. package/dist/ssr/actions/DragAndDrop.js.map +1 -0
  123. package/dist/ssr/actions/Dropdown.js +5 -2
  124. package/dist/ssr/actions/Dropdown.js.map +1 -1
  125. package/dist/ssr/actions/FilterChip.js +59 -7
  126. package/dist/ssr/actions/FilterChip.js.map +1 -1
  127. package/dist/ssr/actions/GestureMenu.js +26 -3
  128. package/dist/ssr/actions/GestureMenu.js.map +1 -1
  129. package/dist/ssr/actions/SegmentedControl.js +1 -2
  130. package/dist/ssr/actions/SegmentedControl.js.map +1 -1
  131. package/dist/ssr/actions/SpotlightSearch.js +2 -2
  132. package/dist/ssr/actions/SpotlightSearch.js.map +1 -1
  133. package/dist/ssr/actions/Tabs.js +2 -2
  134. package/dist/ssr/actions/Tabs.js.map +1 -1
  135. package/dist/ssr/actions/ViewTabs.js +211 -0
  136. package/dist/ssr/actions/ViewTabs.js.map +1 -0
  137. package/dist/ssr/actions/drag-and-drop-messages.js +75 -0
  138. package/dist/ssr/actions/drag-and-drop-messages.js.map +1 -0
  139. package/dist/ssr/actions/drag-and-drop.js +692 -0
  140. package/dist/ssr/actions/drag-and-drop.js.map +1 -0
  141. package/dist/ssr/actions/filter-messages.js +6 -2
  142. package/dist/ssr/actions/filter-messages.js.map +1 -1
  143. package/dist/ssr/actions/index.js +3 -1
  144. package/dist/ssr/actions/index.js.map +1 -1
  145. package/dist/ssr/chat/ChatComposer.js +668 -136
  146. package/dist/ssr/chat/ChatComposer.js.map +1 -1
  147. package/dist/ssr/chat/ChatDecision.js +479 -0
  148. package/dist/ssr/chat/ChatDecision.js.map +1 -0
  149. package/dist/ssr/chat/ChatPrimitives.js +95 -24
  150. package/dist/ssr/chat/ChatPrimitives.js.map +1 -1
  151. package/dist/ssr/chat/ChatTimeline.js.map +1 -1
  152. package/dist/ssr/chat/chat-messages.js +14 -0
  153. package/dist/ssr/chat/chat-messages.js.map +1 -1
  154. package/dist/ssr/chat/command-search.js +35 -17
  155. package/dist/ssr/chat/command-search.js.map +1 -1
  156. package/dist/ssr/chat/index.js +10 -3
  157. package/dist/ssr/chat/index.js.map +1 -1
  158. package/dist/ssr/chat/types.js.map +1 -1
  159. package/dist/ssr/content/Calendar.js +112 -103
  160. package/dist/ssr/content/Calendar.js.map +1 -1
  161. package/dist/ssr/content/CalendarWeekView.js +42 -28
  162. package/dist/ssr/content/CalendarWeekView.js.map +1 -1
  163. package/dist/ssr/content/Chart.js +19 -23
  164. package/dist/ssr/content/Chart.js.map +1 -1
  165. package/dist/ssr/content/DataTable.js +78 -31
  166. package/dist/ssr/content/DataTable.js.map +1 -1
  167. package/dist/ssr/content/FileBrowser.js +2 -2
  168. package/dist/ssr/content/FileBrowser.js.map +1 -1
  169. package/dist/ssr/content/FileTree.js +21 -14
  170. package/dist/ssr/content/FileTree.js.map +1 -1
  171. package/dist/ssr/content/FileTypeIcon.js +50 -0
  172. package/dist/ssr/content/FileTypeIcon.js.map +1 -0
  173. package/dist/ssr/content/FileView.js +2 -2
  174. package/dist/ssr/content/FileView.js.map +1 -1
  175. package/dist/ssr/content/ReferenceChip.js +121 -0
  176. package/dist/ssr/content/ReferenceChip.js.map +1 -0
  177. package/dist/ssr/content/calendar-pointer.js +9 -0
  178. package/dist/ssr/content/calendar-pointer.js.map +1 -1
  179. package/dist/ssr/content/calendar-time-view.js +6 -3
  180. package/dist/ssr/content/calendar-time-view.js.map +1 -1
  181. package/dist/ssr/content/data-table-messages.js +4 -2
  182. package/dist/ssr/content/data-table-messages.js.map +1 -1
  183. package/dist/ssr/content/index.js +2 -0
  184. package/dist/ssr/content/index.js.map +1 -1
  185. package/dist/ssr/feedback/MovedHint.js +166 -0
  186. package/dist/ssr/feedback/MovedHint.js.map +1 -0
  187. package/dist/ssr/feedback/dialog-core.js +66 -9
  188. package/dist/ssr/feedback/dialog-core.js.map +1 -1
  189. package/dist/ssr/feedback/index.js +1 -0
  190. package/dist/ssr/feedback/index.js.map +1 -1
  191. package/dist/ssr/feedback/prompts.js +6 -1
  192. package/dist/ssr/feedback/prompts.js.map +1 -1
  193. package/dist/ssr/inputs/DatePicker.js +138 -69
  194. package/dist/ssr/inputs/DatePicker.js.map +1 -1
  195. package/dist/ssr/inputs/date-picker.js +59 -5
  196. package/dist/ssr/inputs/date-picker.js.map +1 -1
  197. package/dist/ssr/intl/messages.js +12 -0
  198. package/dist/ssr/intl/messages.js.map +1 -1
  199. package/dist/ssr/intl/weekend.js +39 -0
  200. package/dist/ssr/intl/weekend.js.map +1 -0
  201. package/dist/ssr/layout/AppOverview.js +1 -2
  202. package/dist/ssr/layout/AppOverview.js.map +1 -1
  203. package/dist/ssr/layout/AppWorkspace.js +457 -116
  204. package/dist/ssr/layout/AppWorkspace.js.map +1 -1
  205. package/dist/ssr/layout/PageTitle.js +3 -2
  206. package/dist/ssr/layout/PageTitle.js.map +1 -1
  207. package/dist/ssr/layout/PanelDialog.js +7 -6
  208. package/dist/ssr/layout/PanelDialog.js.map +1 -1
  209. package/dist/ssr/layout/ResizeSeparator.js +45 -0
  210. package/dist/ssr/layout/ResizeSeparator.js.map +1 -0
  211. package/dist/ssr/layout/SettingsModal.js +2 -2
  212. package/dist/ssr/layout/SettingsModal.js.map +1 -1
  213. package/dist/ssr/layout/SidebarSwitcher.js +19 -11
  214. package/dist/ssr/layout/SidebarSwitcher.js.map +1 -1
  215. package/dist/ssr/layout/TabBar.js +2 -2
  216. package/dist/ssr/layout/TabBar.js.map +1 -1
  217. package/dist/ssr/layout/app-host-width.js +44 -0
  218. package/dist/ssr/layout/app-host-width.js.map +1 -0
  219. package/dist/ssr/layout/app-workspace-controller.js +337 -44
  220. package/dist/ssr/layout/app-workspace-controller.js.map +1 -1
  221. package/dist/ssr/layout/index.js +4 -1
  222. package/dist/ssr/layout/index.js.map +1 -1
  223. package/dist/ssr/layout/resize-separator.js +90 -0
  224. package/dist/ssr/layout/resize-separator.js.map +1 -0
  225. package/dist/ssr/layout/workspace-messages.js +12 -2
  226. package/dist/ssr/layout/workspace-messages.js.map +1 -1
  227. package/dist/ssr/surfaces/LinkCard.js +1 -1
  228. package/dist/ssr/surfaces/LinkCard.js.map +1 -1
  229. package/dist/ssr/surfaces/Placeholder.js +25 -6
  230. package/dist/ssr/surfaces/Placeholder.js.map +1 -1
  231. package/dist/ssr/surfaces/StatCell.js +23 -0
  232. package/dist/ssr/surfaces/StatCell.js.map +1 -1
  233. package/dist/ssr/widgets/Widget.js +1 -1
  234. package/dist/ssr/widgets/Widget.js.map +1 -1
  235. package/dist/styles.css +1 -1
  236. package/dist/types/actions/ContextMenu.d.ts +1 -0
  237. package/dist/types/actions/DragAndDrop.d.ts +29 -0
  238. package/dist/types/actions/Dropdown.d.ts +4 -0
  239. package/dist/types/actions/FilterChip.d.ts +22 -0
  240. package/dist/types/actions/ViewTabs.d.ts +30 -0
  241. package/dist/types/actions/drag-and-drop-messages.d.ts +35 -0
  242. package/dist/types/actions/drag-and-drop.d.ts +36 -0
  243. package/dist/types/actions/filter-messages.d.ts +2 -0
  244. package/dist/types/actions/index.d.ts +6 -2
  245. package/dist/types/chat/ChatComposer.d.ts +71 -1
  246. package/dist/types/chat/ChatDecision.d.ts +149 -0
  247. package/dist/types/chat/ChatPrimitives.d.ts +14 -1
  248. package/dist/types/chat/ChatTimeline.d.ts +2 -1
  249. package/dist/types/chat/chat-messages.d.ts +7 -0
  250. package/dist/types/chat/command-search.d.ts +5 -0
  251. package/dist/types/chat/index.d.ts +28 -5
  252. package/dist/types/chat/types.d.ts +54 -1
  253. package/dist/types/content/Chart.d.ts +9 -3
  254. package/dist/types/content/DataTable.d.ts +3 -0
  255. package/dist/types/content/FileTypeIcon.d.ts +27 -0
  256. package/dist/types/content/ReferenceChip.d.ts +49 -0
  257. package/dist/types/content/calendar-pointer.d.ts +6 -0
  258. package/dist/types/content/data-table-messages.d.ts +1 -0
  259. package/dist/types/content/index.d.ts +3 -0
  260. package/dist/types/feedback/MovedHint.d.ts +25 -0
  261. package/dist/types/feedback/dialog-core.d.ts +5 -2
  262. package/dist/types/feedback/index.d.ts +2 -0
  263. package/dist/types/feedback/prompts.d.ts +2 -0
  264. package/dist/types/inputs/DatePicker.d.ts +7 -0
  265. package/dist/types/inputs/date-picker.d.ts +25 -1
  266. package/dist/types/intl/messages.d.ts +6 -0
  267. package/dist/types/intl/weekend.d.ts +12 -0
  268. package/dist/types/layout/AppWorkspace.d.ts +48 -10
  269. package/dist/types/layout/ResizeSeparator.d.ts +9 -0
  270. package/dist/types/layout/TabBar.d.ts +7 -0
  271. package/dist/types/layout/app-host-width.d.ts +6 -0
  272. package/dist/types/layout/app-workspace-controller.d.ts +2 -0
  273. package/dist/types/layout/index.d.ts +5 -2
  274. package/dist/types/layout/resize-separator.d.ts +18 -0
  275. package/dist/types/layout/workspace-messages.d.ts +5 -0
  276. package/dist/types/surfaces/Placeholder.d.ts +2 -1
  277. package/dist/types/surfaces/StatCell.d.ts +6 -0
  278. package/package.json +5 -5
@@ -21,5 +21,6 @@ export declare function ContextMenu(props: ContextMenuProps): JSX.Element;
21
21
  export declare function ContextMenuBase(props: ContextMenuProps & {
22
22
  openAt?: (open: (x: number, y: number) => void) => void;
23
23
  title?: string;
24
+ closeWith?: (close: () => void) => void;
24
25
  }): JSX.Element;
25
26
  export default ContextMenu;
@@ -0,0 +1,29 @@
1
+ import { type JSX } from "solid-js";
2
+ import { type DragPayload } from "./drag-and-drop";
3
+ export type { DragPayload } from "./drag-and-drop";
4
+ export { activeDrag } from "./drag-and-drop";
5
+ export type DragSourceProps<Type extends string = string> = {
6
+ /** Read when the drag starts, so a selection can decide what is dragged. */
7
+ payload: DragPayload<Type>;
8
+ disabled?: boolean;
9
+ class?: string;
10
+ children: JSX.Element;
11
+ };
12
+ export type DropTargetProps<Type extends string = string> = {
13
+ /** The payload types this target takes. */
14
+ accept: readonly Type[];
15
+ /** Names the target in announcements and in the keyboard path, such as "Archive". */
16
+ label: string;
17
+ onDrop: (payload: DragPayload<Type>) => void;
18
+ /** The target takes nothing now, for example without access; it refuses every drop. */
19
+ disabled?: boolean;
20
+ class?: string;
21
+ children: JSX.Element;
22
+ };
23
+ export declare function DragSource<Type extends string = string>(props: DragSourceProps<Type>): JSX.Element;
24
+ export declare function DropTarget<Type extends string = string>(props: DropTargetProps<Type>): JSX.Element;
25
+ /**
26
+ * Starts the optional keyboard pick-up sequence from a menu entry. Focus returns to `origin` afterwards, or to its
27
+ * nearest focusable ancestor, such as the group of a `GestureMenu`.
28
+ */
29
+ export declare function useKeyboardDrag(): (payload: DragPayload, origin: HTMLElement) => void;
@@ -14,6 +14,8 @@ export type DropdownActionBase = {
14
14
  */
15
15
  ariaLabel?: string;
16
16
  description?: string;
17
+ /** Quiet trailing information, such as a count. */
18
+ trailing?: JSX.Element;
17
19
  variant?: "danger";
18
20
  };
19
21
  export type DropdownAction = (DropdownActionBase & {
@@ -107,6 +109,8 @@ export type DropdownItemProps = {
107
109
  icon?: string;
108
110
  image?: string;
109
111
  description?: string;
112
+ /** Quiet trailing information, such as a count. */
113
+ trailing?: JSX.Element;
110
114
  disabled?: boolean;
111
115
  danger?: boolean;
112
116
  variant?: "danger";
@@ -28,9 +28,31 @@ export type FilterChipProps = {
28
28
  iconOnly?: boolean;
29
29
  /** Use a standard button appearance instead of the default filter field. */
30
30
  variant?: ButtonVariant;
31
+ /**
32
+ * An active chip names its first value instead of a count: "Tags: Customer", "Tags: Customer +2". Use it for the
33
+ * chips of `AppWorkspace.Head`; pass only the filter's name as `label`. The chip then grows with its value.
34
+ */
35
+ showValue?: boolean;
31
36
  disabled?: boolean;
32
37
  class?: string;
33
38
  };
34
39
  /** Section-aware controlled filter with immediate single- and multi-select commits. */
35
40
  export declare function FilterChip(props: FilterChipProps): JSX.Element;
36
41
  export default FilterChip;
42
+ export type FilterToggleProps = {
43
+ label: JSX.Element;
44
+ icon: string;
45
+ /** Whether the filter is on. An active toggle carries the same tint as an active `FilterChip`. */
46
+ active: boolean;
47
+ /** Link to the URL with the filter switched. The link keeps working without JavaScript. */
48
+ href?: string;
49
+ onClick?: (event: MouseEvent) => void;
50
+ title?: string;
51
+ disabled?: boolean;
52
+ class?: string;
53
+ };
54
+ /**
55
+ * One on/off filter in the chip look: a link marked `aria-current="true"` while active, or a button with
56
+ * `aria-pressed`. Selection changes only colour and background, so neighbouring chips never move.
57
+ */
58
+ export declare function FilterToggle(props: FilterToggleProps): JSX.Element;
@@ -0,0 +1,30 @@
1
+ import { type JSX } from "solid-js";
2
+ export type ViewTab = {
3
+ id: string;
4
+ label: string;
5
+ href: string;
6
+ icon?: string;
7
+ count?: number | string;
8
+ };
9
+ export type ViewTabsProps = {
10
+ /** Accessible name of the navigation landmark, e.g. "Views". */
11
+ label: string;
12
+ items: readonly ViewTab[];
13
+ /** Id of the open view; the server reads it from `?view=`. Unknown ids select nothing. */
14
+ current: string | undefined;
15
+ /** Tabs shown before More (default 5). */
16
+ max?: number;
17
+ class?: string;
18
+ };
19
+ /** Two deterministic strip levels; only opening the menu reads CSS visibility. */
20
+ export declare function viewTabsLayout(items: readonly ViewTab[], current: string | undefined, max?: number): {
21
+ wide: number[];
22
+ compact: number[];
23
+ wideHidden: number;
24
+ compactHidden: number;
25
+ };
26
+ /**
27
+ * URL-backed object views. Every view is an ordinary document link, in the strip and under More, so reload, back,
28
+ * and forward keep the view the URL names.
29
+ */
30
+ export declare function ViewTabs(props: ViewTabsProps): JSX.Element;
@@ -0,0 +1,35 @@
1
+ declare const dragAndDropMessages: import("@k2b/stdlib").Catalog<{
2
+ pickedUp: ({ label }: {
3
+ label: string;
4
+ }) => string;
5
+ pickedUpKeyboard: ({ label, count }: {
6
+ label: string;
7
+ count: number;
8
+ }) => string;
9
+ choice: ({ target, index, count }: {
10
+ target: string;
11
+ index: number;
12
+ count: number;
13
+ }) => string;
14
+ over: ({ target }: {
15
+ target: string;
16
+ }) => string;
17
+ refused: ({ target, label }: {
18
+ target: string;
19
+ label: string;
20
+ }) => string;
21
+ dropped: ({ label, target }: {
22
+ label: string;
23
+ target: string;
24
+ }) => string;
25
+ cancelled: ({ label }: {
26
+ label: string;
27
+ }) => string;
28
+ noTarget: ({ label }: {
29
+ label: string;
30
+ }) => string;
31
+ }>;
32
+ export type DragAndDropMessages = ReturnType<(typeof dragAndDropMessages)["resolve"]>["t"];
33
+ export declare const useDragAndDropMessages: () => (() => DragAndDropMessages);
34
+ export declare const checkDragAndDropMessages: () => import("@k2b/stdlib").CatalogIssue[];
35
+ export {};
@@ -0,0 +1,36 @@
1
+ import type { DragAndDropMessages } from "./drag-and-drop-messages";
2
+ export type DragPayload<Type extends string = string> = {
3
+ /** What is dragged, such as "mail.message"; targets accept by this. */
4
+ type: Type;
5
+ /** Opaque to @k2b/ui: the application's reference, such as an ID or a ref string. */
6
+ value: string;
7
+ /** Names the item in the preview and in announcements. */
8
+ label: string;
9
+ /** Tabler class for the preview, such as "ti ti-mail". */
10
+ icon?: string;
11
+ /** More than one item is dragged: shown as a count on the preview. */
12
+ count?: number;
13
+ };
14
+ /** Reactive payload of the drag in progress, or undefined. */
15
+ export declare const activeDrag: () => DragPayload | undefined;
16
+ /** Internal hand-over to the gesture menu that owns this press. */
17
+ export declare const onPointerDragStart: (listener: (pointerId: number) => void) => (() => void);
18
+ type Target = {
19
+ element: HTMLElement;
20
+ accept: readonly string[];
21
+ label: string;
22
+ messages: DragAndDropMessages;
23
+ disabled?: boolean;
24
+ drop: (payload: DragPayload) => void;
25
+ };
26
+ export declare const registerDropTarget: (element: HTMLElement, initial: Omit<Target, "element">) => {
27
+ update(next: Omit<Target, "element">): void;
28
+ dispose(): void;
29
+ };
30
+ export declare const bindDragSource: (source: HTMLElement, read: () => {
31
+ payload: DragPayload;
32
+ disabled?: boolean;
33
+ messages: DragAndDropMessages;
34
+ }) => (() => void);
35
+ export declare const startKeyboardDrag: (input: DragPayload, origin: HTMLElement, messages: DragAndDropMessages) => (() => void);
36
+ export {};
@@ -1,5 +1,7 @@
1
1
  declare const filterMessages: import("@k2b/stdlib").Catalog<{
2
2
  filterActions: string;
3
+ filters: string;
4
+ reset: string;
3
5
  }>;
4
6
  export type FilterMessages = ReturnType<(typeof filterMessages)["resolve"]>["t"];
5
7
  /** Resolved from the inherited render locale. */
@@ -6,10 +6,12 @@ export type { CopyButtonProps, CopyButtonValue } from "./CopyButton";
6
6
  export { CopyButton } from "./CopyButton";
7
7
  export type { DisclosureProps } from "./Disclosure";
8
8
  export { Disclosure } from "./Disclosure";
9
+ export type { DragPayload, DragSourceProps, DropTargetProps } from "./DragAndDrop";
10
+ export { activeDrag, DragSource, DropTarget, useKeyboardDrag } from "./DragAndDrop";
9
11
  export type { DropdownAction, DropdownActionBase, DropdownChoice, DropdownItemProps, DropdownPosition, DropdownProps, DropdownSection, DropdownTriggerProps, } from "./Dropdown";
10
12
  export { Dropdown, DropdownItem, dropdownPosition } from "./Dropdown";
11
- export type { FilterChipOption, FilterChipProps, FilterChipSection } from "./FilterChip";
12
- export { FilterChip } from "./FilterChip";
13
+ export type { FilterChipOption, FilterChipProps, FilterChipSection, FilterToggleProps } from "./FilterChip";
14
+ export { FilterChip, FilterToggle } from "./FilterChip";
13
15
  export type { GestureKind, GestureMenuAction, GestureMenuItem, GestureMenuProps, GestureMenuSection } from "./GestureMenu";
14
16
  export { GestureMenu } from "./GestureMenu";
15
17
  export type { RemoveButtonProps } from "./RemoveButton";
@@ -24,3 +26,5 @@ export type { TabOption, TabsItemProps, TabsProps } from "./Tabs";
24
26
  export { Tabs } from "./Tabs";
25
27
  export type { ToolbarActionProps, ToolbarGroupProps, ToolbarLabelProps, ToolbarProps, ToolbarSeparatorProps } from "./Toolbar";
26
28
  export { Toolbar } from "./Toolbar";
29
+ export type { ViewTab, ViewTabsProps } from "./ViewTabs";
30
+ export { ViewTabs } from "./ViewTabs";
@@ -6,9 +6,26 @@ export type ChatCommandContext = {
6
6
  focus: () => void;
7
7
  openModelSelection: () => Promise<string | null>;
8
8
  };
9
- /** An action can cancel and restore its token, or report a short completion message. */
9
+ /**
10
+ * An action can cancel and restore its token, report a short completion message, or hand back a reference chosen in a
11
+ * dialog: `mention` takes the token's place exactly as a `mention` row does, and Ctrl/⌘+Z brings the token back.
12
+ */
10
13
  export type ChatCommandResult = void | "cancelled" | {
11
14
  done: string;
15
+ } | {
16
+ mention: ChatAttachment;
17
+ };
18
+ /** The draft as a successful `open` leaves it: without the `/…` token, with its references moved along. Save this one. */
19
+ export type ChatCommandDraft = {
20
+ value: string;
21
+ mentions: readonly ChatMention[];
22
+ };
23
+ /**
24
+ * How an `open` row ends: on success (`void`) the token leaves as for an action; `"cancelled"` changes nothing; `failed`
25
+ * keeps the list open and the draft unchanged, and its text replaces the row's description until the row runs again.
26
+ */
27
+ export type ChatCommandOpenResult = void | "cancelled" | {
28
+ failed: string;
12
29
  };
13
30
  /** A fixed place in the slash list. Sections keep the given order, also while searching. */
14
31
  export type ChatCommandSection = {
@@ -18,6 +35,20 @@ export type ChatCommandSection = {
18
35
  searched?: boolean;
19
36
  /** Only while searching or narrowed: absent from the overview (empty query), including its loading placeholder. */
20
37
  searchOnly?: boolean;
38
+ /** Only in the overview (empty query, no scope): absent while searching or narrowed, such as recently used rows. */
39
+ overviewOnly?: boolean;
40
+ /**
41
+ * Its local rows are fixed when the list opens: a row that arrives while the list is open waits for the next opening,
42
+ * so a section above others whose rows load in the background never pushes a visible row down. Rows that go away
43
+ * still leave at once.
44
+ */
45
+ fixedWhileOpen?: boolean;
46
+ /**
47
+ * Local rows still on their way, such as Commands from a catalog: the section ends with placeholder rows, three in
48
+ * the overview and one while searching, and its heading shows a spinner. Make it the last section, so rows that
49
+ * arrive only fill the end of the list and no visible row moves.
50
+ */
51
+ pending?: boolean;
21
52
  };
22
53
  /** First-word narrowing; Tab writes `words[0]` followed by a space. */
23
54
  export type ChatCommandScope = {
@@ -42,8 +73,15 @@ export type ChatCommand = {
42
73
  selected?: boolean;
43
74
  /** Retry discovery in a new opening, retaining the token and currently displayed rows. */
44
75
  searchAgain?: boolean;
76
+ /** Stays in every search of its section, after the matches, such as a row that retries loading the section. */
77
+ persistent?: boolean;
45
78
  /** Application name, searchable but not displayed. */
46
79
  app?: string;
80
+ /**
81
+ * Used recently by this person. While searching, a matching row moves one step up the ranking ladder of its section
82
+ * and comes before rows of equal rank. The overview keeps consumer order.
83
+ */
84
+ recent?: boolean;
47
85
  /** Stable row key for option ids, marking and de-duplication. Defaults to `name`. */
48
86
  id?: string;
49
87
  name: string;
@@ -57,8 +95,23 @@ export type ChatCommand = {
57
95
  busyLabel?: string;
58
96
  /** Failures restore an unchanged draft and appear once in the status line, without calling `onError`. */
59
97
  action?: (context: ChatCommandContext) => ChatCommandResult | Promise<ChatCommandResult>;
98
+ /**
99
+ * Leaves the composer, such as opening another app. Runs with the token and the list in place: the row shows
100
+ * `busyLabel` (default "Opening …") with a spinner instead of its description, and editing waits. A rejection ends like
101
+ * an action's: the token stays, the list closes and the status line names the reason. Closing the list, such as with
102
+ * Escape, cancels: `signal` aborts and the row ends at once. `signal` also aborts when the opening ends any other way
103
+ * than by success, so the opener can save the draft with its token again. A new `draftKey` cancels too, unless the
104
+ * opener calls `follow()` right before changing it itself: that next change keeps the opening, moves its busy line
105
+ * to the status line, and Escape still cancels. See `ChatCommandOpenResult`.
106
+ */
107
+ open?: (draft: ChatCommandDraft, signal: AbortSignal, follow: () => void) => Promise<ChatCommandOpenResult>;
60
108
  /** Selecting a reference inserts its display name and retains its opaque payload. */
61
109
  mention?: ChatAttachment;
110
+ /**
111
+ * Opens the composer's own file selection, as "Attach files" in the add menu does, within the key or click that chose
112
+ * the row, so the device's file dialog can still open. The token leaves; choosing nothing brings it back.
113
+ */
114
+ attachFiles?: boolean;
62
115
  label?: string;
63
116
  disabled?: boolean;
64
117
  };
@@ -94,7 +147,16 @@ export type ChatComposerProps = {
94
147
  fileSelection?: ChatFileSelection;
95
148
  /** Handle non-file clipboard content. Pasted files already use `fileSelection`. */
96
149
  onPaste?: ChatPasteHandler;
150
+ /** The add menu's entries after "Attach files". Not shown with `addOpensCommands`. */
97
151
  menuActions?: readonly ChatAction[];
152
+ /**
153
+ * "+" opens the slash list with a search field on top instead of the add menu, for keyboards where "/" is hard to
154
+ * reach, such as a phone's. The search field filters, narrows and chooses as typing after "/" does, and a reference
155
+ * lands where the field's caret was when "+" was pressed. Escape, "+" again, Back on a phone or a press outside
156
+ * closes the list without acting on what lies below, and the field gets its focus and selection back. `menuActions`
157
+ * do not show then: offer them as `commands`, and file selection as a row with `attachFiles`.
158
+ */
159
+ addOpensCommands?: boolean;
98
160
  models?: readonly ChatModelOption[];
99
161
  selectedModelId?: string | null;
100
162
  onModelChange?: (modelId: string) => void;
@@ -104,6 +166,14 @@ export type ChatComposerProps = {
104
166
  commandSections?: readonly ChatCommandSection[];
105
167
  commandScopes?: readonly ChatCommandScope[];
106
168
  searchCommands?: (query: string, signal: AbortSignal, search: ChatCommandSearch) => Promise<readonly ChatCommand[]>;
169
+ /**
170
+ * The last row for typed text or a scope, built at once from the query, such as "Search Cloud for “q3”". It is no
171
+ * match: unscoped it follows "Nothing found for …"; in a scope it ends the scope's rows. Not called for the overview.
172
+ */
173
+ commandFallback?: (search: {
174
+ query: string;
175
+ scope?: string;
176
+ }) => ChatCommand | undefined;
107
177
  mentions?: readonly ChatMention[];
108
178
  onMentionsChange?: (mentions: readonly ChatMention[]) => void;
109
179
  /** Shared surface above the editor; suggestions temporarily replace this content. */
@@ -0,0 +1,149 @@
1
+ import { type JSX } from "solid-js";
2
+ import type { ChatDecisionAnswer, ChatDecisionReason, ChatDecisionState, ChatOutcomeLine, ChatPreviewHeaderRow } from "./types";
3
+ export type ChatDecisionProps = {
4
+ /** `open` shows the question; every other state shows `outcome` in its place. */
5
+ state: ChatDecisionState;
6
+ /** The question as one sentence, usually with `ReferenceChip`s. */
7
+ sentence: JSX.Element;
8
+ /** Why this question is asked, in the platform's words. */
9
+ reason: ChatDecisionReason;
10
+ /** The thing itself, usually `Chat.Preview`. */
11
+ preview?: JSX.Element;
12
+ /** The main answer, named by verb and target ("Send to Lea"). `danger` for deletions, `primary` for requests. */
13
+ confirm: ChatDecisionAnswer & {
14
+ variant?: "ai" | "primary" | "danger";
15
+ };
16
+ /** The other answer ("Don't send"). */
17
+ decline: ChatDecisionAnswer;
18
+ /** An optional quiet third answer after the buttons, such as "Yes, and don't ask again in this chat". */
19
+ remember?: ChatDecisionAnswer;
20
+ /** Turns `confirm` and `remember` off; this reason replaces `reason` in the same place. */
21
+ unavailable?: ChatDecisionReason;
22
+ /** The result line shown in every state but `open`, usually `Chat.Outcome`. */
23
+ outcome?: JSX.Element;
24
+ /** Receives a rejected promise from an answer's `onSelect`. */
25
+ onAnswerError?: (error: unknown) => void;
26
+ anchorId?: string | number;
27
+ class?: string;
28
+ };
29
+ /**
30
+ * A question the person answers in the conversation: one sentence, why it is asked, the thing itself, and two answers.
31
+ * An answer collapses it at once to its outcome line, which takes the focus and is announced.
32
+ */
33
+ export declare function ChatDecision(props: ChatDecisionProps): JSX.Element;
34
+ export type ChatOutcomeProps = {
35
+ /**
36
+ * Every line one flow can show, such as running and done. All of them share one cell, so the line is as high as
37
+ * the longest and switching between them moves nothing.
38
+ */
39
+ lines: Readonly<Record<string, ChatOutcomeLine>>;
40
+ /** The key of the visible line. */
41
+ current: string;
42
+ /** Receives an error thrown or rejected by a line's `action`. */
43
+ onActionError?: (error: unknown) => void;
44
+ anchorId?: string | number;
45
+ class?: string;
46
+ };
47
+ /**
48
+ * One line that says what happened: running, done, off, waiting, warning, or error. Changes are announced through a
49
+ * polite live region; the line itself can take the focus.
50
+ */
51
+ export declare function ChatOutcome(props: ChatOutcomeProps): JSX.Element;
52
+ export type ChatPreviewProps = {
53
+ children: JSX.Element;
54
+ class?: string;
55
+ };
56
+ /** The thing a question is about, as calm text on the sentence's edge: no surface, no column. */
57
+ declare function ChatPreviewRoot(props: ChatPreviewProps): JSX.Element;
58
+ export type ChatPreviewHeaderProps = {
59
+ /** One row per field, such as From, To, Cc, and Bcc; the label stands right before its value. */
60
+ rows: readonly ChatPreviewHeaderRow[];
61
+ /** A last line, such as when the message goes out. */
62
+ note?: JSX.Element;
63
+ };
64
+ declare function ChatPreviewHeader(props: ChatPreviewHeaderProps): JSX.Element;
65
+ export type ChatPreviewTitleProps = {
66
+ children: JSX.Element;
67
+ meta?: JSX.Element;
68
+ };
69
+ /** The thing's name in the text's own face, with optional quiet facts after it. */
70
+ declare function ChatPreviewTitle(props: ChatPreviewTitleProps): JSX.Element;
71
+ /** A rule or instruction as one sentence, such as what a routine does; chips and marks may stand inside. */
72
+ declare function ChatPreviewSentence(props: {
73
+ children: JSX.Element;
74
+ }): JSX.Element;
75
+ export type ChatPreviewExcerptProps = {
76
+ children: JSX.Element;
77
+ /** Shows the whole text in place instead of the first lines, such as after `Chat.Preview.ShowAll`. */
78
+ expanded?: boolean;
79
+ id?: string;
80
+ };
81
+ /** The first lines of a longer text. It keeps its line breaks, shows about three lines, and fades out. */
82
+ declare function ChatPreviewExcerpt(props: ChatPreviewExcerptProps): JSX.Element;
83
+ export type ChatPreviewShowAllProps = {
84
+ /** The id of the `Chat.Preview.Excerpt` this button opens. */
85
+ controls: string;
86
+ onShow: () => void;
87
+ children: JSX.Element;
88
+ };
89
+ /**
90
+ * Shows the rest of an excerpt in place, for a text with no page of its own to open. It looks like `ReadMore`; the
91
+ * caller removes it once the text is shown, and the focus moves to the text, so reading goes on where it was.
92
+ */
93
+ declare function ChatPreviewShowAll(props: ChatPreviewShowAllProps): JSX.Element;
94
+ export type ChatPreviewReadMoreProps = {
95
+ href: string;
96
+ children: JSX.Element;
97
+ /** Tooltip, such as "Opens exactly this version of the draft". */
98
+ title?: string;
99
+ };
100
+ /** Opens the whole thing at exactly the version the question shows. */
101
+ declare function ChatPreviewReadMore(props: ChatPreviewReadMoreProps): JSX.Element;
102
+ /** A list of lines with a name, such as "What the routine may do". */
103
+ declare function ChatPreviewLines(props: {
104
+ label?: string;
105
+ children: JSX.Element;
106
+ }): JSX.Element;
107
+ export type ChatPreviewLineProps = {
108
+ /** Icon class; the text after it starts 1.5rem from the edge. */
109
+ icon: string;
110
+ /** Icon colour, such as the PDF colour of an attachment. */
111
+ accent?: string;
112
+ /** `muted` for limits and notes, `warning` for an application's own warning. */
113
+ tone?: "default" | "muted" | "warning";
114
+ /** Marks the whole line as new or removed. */
115
+ mark?: "added" | "removed";
116
+ /** Quiet facts after the text, such as a file size. */
117
+ meta?: JSX.Element;
118
+ children: JSX.Element;
119
+ };
120
+ /** One line led by an icon: a consequence, a right, an attachment, or a warning. */
121
+ declare function ChatPreviewLine(props: ChatPreviewLineProps): JSX.Element;
122
+ export type ChatPreviewPeopleProps = {
123
+ /** The first few people; their avatars overlap at the start of the line. */
124
+ people: readonly {
125
+ name: string;
126
+ src?: string | null;
127
+ }[];
128
+ /** The names as text, such as "Lea Berg, Tom Weber and 3 others". */
129
+ children: JSX.Element;
130
+ };
131
+ declare function ChatPreviewPeople(props: ChatPreviewPeopleProps): JSX.Element;
132
+ export declare const ChatPreview: typeof ChatPreviewRoot & {
133
+ Header: typeof ChatPreviewHeader;
134
+ Title: typeof ChatPreviewTitle;
135
+ Sentence: typeof ChatPreviewSentence;
136
+ Excerpt: typeof ChatPreviewExcerpt;
137
+ ReadMore: typeof ChatPreviewReadMore;
138
+ ShowAll: typeof ChatPreviewShowAll;
139
+ Lines: typeof ChatPreviewLines;
140
+ Line: typeof ChatPreviewLine;
141
+ People: typeof ChatPreviewPeople;
142
+ };
143
+ export type ChatMarkProps = {
144
+ change: "added" | "removed";
145
+ children: JSX.Element;
146
+ };
147
+ /** Marks new or removed words; screen readers hear "new:" or "removed:" first. */
148
+ export declare function ChatMark(props: ChatMarkProps): JSX.Element;
149
+ export {};
@@ -15,7 +15,8 @@ export type ChatMessageProps = {
15
15
  class?: string;
16
16
  };
17
17
  export type ChatActivityProps = {
18
- label: string;
18
+ /** The step as text, or as a sentence with `ReferenceChip`s. */
19
+ label: JSX.Element;
19
20
  /** Spelled-out name for an expandable row whose visible text abbreviates, such as durations. */
20
21
  ariaLabel?: string;
21
22
  description?: string;
@@ -27,6 +28,8 @@ export type ChatActivityProps = {
27
28
  tone?: ChatActivityTone;
28
29
  /** Marks the activity as running with the shared accent sweep. */
29
30
  busy?: boolean;
31
+ /** Lets label and description wrap instead of ending in an ellipsis, for a system line whose whole sentence matters. */
32
+ wrap?: boolean;
30
33
  trailing?: JSX.Element;
31
34
  /** Controlled disclosure state. Omit to keep native details behavior. */
32
35
  open?: boolean;
@@ -50,5 +53,15 @@ export type ChatContextUsageProps = ChatContextUsageData & {
50
53
  };
51
54
  export declare const formatChatTokens: (tokens: number) => string;
52
55
  export declare function ChatMessage(props: ChatMessageProps): JSX.Element;
56
+ export type ChatActivityToggleProps = {
57
+ /** The words that open the body, usually the count, such as "3 of 4 tasks". */
58
+ children: JSX.Element;
59
+ };
60
+ /**
61
+ * The words of an activity label that open its body, with the chevron right after them. With a toggle in its label,
62
+ * only these words are the disclosure, and the rest of the row, chips with links included, stays ordinary content.
63
+ * Outside an activity with a body it renders its words as plain text.
64
+ */
65
+ export declare function ChatActivityToggle(props: ChatActivityToggleProps): JSX.Element;
53
66
  export declare function ChatActivity(props: ChatActivityProps): JSX.Element;
54
67
  export declare function ChatContextUsage(props: ChatContextUsageProps): JSX.Element;
@@ -20,7 +20,8 @@ export type ChatActivityItem = {
20
20
  kind: "activity";
21
21
  /** Unique within the timeline. A record with a known id updates its row in place instead of replacing it. */
22
22
  id: string;
23
- label: string;
23
+ /** The step as text, or as a sentence with `ReferenceChip`s. */
24
+ label: JSX.Element;
24
25
  description?: string;
25
26
  icon?: string;
26
27
  leading?: JSX.Element;
@@ -1,9 +1,16 @@
1
1
  export declare const chatMessages: import("@k2b/stdlib").Catalog<{
2
2
  commandFailed: string;
3
+ commandDraftChanged: string;
4
+ markAdded: string;
5
+ markRemoved: string;
6
+ commandOpening: string;
3
7
  commandSelected: string;
4
8
  attachments: string;
5
9
  assistant: string;
6
10
  addToChat: string;
11
+ addMenu: string;
12
+ commandSearch: string;
13
+ commandSearchLabel: string;
7
14
  attachFiles: string;
8
15
  addGuidance: string;
9
16
  chat: string;
@@ -20,6 +20,8 @@ type Group = {
20
20
  rows: ChatCommandRow[];
21
21
  loading: boolean;
22
22
  placeholder: boolean;
23
+ /** Placeholder rows of a `pending` section, after its rows: three in the overview, one while searching. */
24
+ pendingRows: number;
23
25
  };
24
26
  export declare function chatCommandListModel(input: {
25
27
  query: string;
@@ -30,11 +32,14 @@ export declare function chatCommandListModel(input: {
30
32
  searchResultsFresh: boolean;
31
33
  searchSettled: boolean;
32
34
  searching: boolean;
35
+ /** The composer's `commandFallback` row for this query, if any. */
36
+ fallback?: ChatCommand;
33
37
  }): {
34
38
  scope?: ChatCommandScope;
35
39
  groups: Group[];
36
40
  rows: ChatCommandRow[];
37
41
  empty: boolean;
42
+ fallback?: ChatCommandRow;
38
43
  };
39
44
  /** Use the composer ranking rules to filter consumer-owned server rows. */
40
45
  export declare const matchesChatCommand: (command: ChatCommand, query: string) => boolean;
@@ -3,15 +3,17 @@ import { ChatContextPanel, ChatContextPopup } from "./ChatContextPopup";
3
3
  import { ChatTasks } from "./ChatTasks";
4
4
  export type { ChatTask, ChatTasksProps } from "./ChatTasks";
5
5
  import { ChatComposer } from "./ChatComposer";
6
- import { ChatActivity, ChatContextUsage, ChatMessage } from "./ChatPrimitives";
6
+ import { ChatDecision, ChatMark, ChatOutcome } from "./ChatDecision";
7
+ import { ChatActivity, ChatActivityToggle, ChatContextUsage, ChatMessage } from "./ChatPrimitives";
7
8
  import { ChatRoot } from "./ChatRoot";
8
9
  import { ChatTimeline } from "./ChatTimeline";
9
- export type { ChatCommand, ChatCommandContext, ChatCommandResult, ChatCommandScope, ChatCommandSearch, ChatCommandSection, ChatComposerProps, ChatFileSelection, ChatPasteHandler, } from "./ChatComposer";
10
- export type { ChatActivityProps, ChatContextUsageProps, ChatMessageProps } from "./ChatPrimitives";
10
+ export type { ChatCommand, ChatCommandContext, ChatCommandDraft, ChatCommandOpenResult, ChatCommandResult, ChatCommandScope, ChatCommandSearch, ChatCommandSection, ChatComposerProps, ChatFileSelection, ChatPasteHandler, } from "./ChatComposer";
11
+ export type { ChatDecisionProps, ChatMarkProps, ChatOutcomeProps, ChatPreviewExcerptProps, ChatPreviewHeaderProps, ChatPreviewLineProps, ChatPreviewPeopleProps, ChatPreviewProps, ChatPreviewReadMoreProps, ChatPreviewShowAllProps, ChatPreviewTitleProps, } from "./ChatDecision";
12
+ export type { ChatActivityProps, ChatActivityToggleProps, ChatContextUsageProps, ChatMessageProps } from "./ChatPrimitives";
11
13
  export { formatChatTokens } from "./ChatPrimitives";
12
14
  export type { ChatRootProps } from "./ChatRoot";
13
15
  export type { ChatActivityItem, ChatMessageItem, ChatTimelineItem, ChatTimelineProps } from "./ChatTimeline";
14
- export type { ChatAction, ChatActivityTone, ChatAttachment, ChatComposerEmoji, ChatComposerMicrophone, ChatComposerState, ChatContextUsageData, ChatDictationState, ChatMention, ChatMessageStatus, ChatModelOption, ChatRole, ChatSubmitInput, ChatSubmitIntent, ChatUsage, } from "./types";
16
+ export type { ChatAction, ChatActivityTone, ChatAttachment, ChatComposerEmoji, ChatComposerMicrophone, ChatComposerState, ChatContextUsageData, ChatDecisionAnswer, ChatDecisionReason, ChatDecisionState, ChatDictationState, ChatMention, ChatMessageStatus, ChatModelOption, ChatOutcomeLine, ChatOutcomeTone, ChatPreviewHeaderRow, ChatPreviewPerson, ChatRole, ChatSubmitInput, ChatSubmitIntent, ChatUsage, } from "./types";
15
17
  /**
16
18
  * Portable, controlled chat surface. Applications own storage, streaming,
17
19
  * authorization, rich message rendering, and domain actions.
@@ -20,11 +22,32 @@ export declare const Chat: typeof ChatRoot & {
20
22
  Tasks: typeof ChatTasks;
21
23
  Timeline: typeof ChatTimeline;
22
24
  Message: typeof ChatMessage;
23
- Activity: typeof ChatActivity;
25
+ Activity: typeof ChatActivity & {
26
+ Toggle: typeof ChatActivityToggle;
27
+ };
24
28
  Composer: typeof ChatComposer;
25
29
  ContextUsage: typeof ChatContextUsage;
26
30
  ContextPopup: typeof ChatContextPopup;
27
31
  ContextPanel: typeof ChatContextPanel;
32
+ Decision: typeof ChatDecision;
33
+ Outcome: typeof ChatOutcome;
34
+ Preview: ((props: import("./ChatDecision").ChatPreviewProps) => import("solid-js").JSX.Element) & {
35
+ Header: (props: import("./ChatDecision").ChatPreviewHeaderProps) => import("solid-js").JSX.Element;
36
+ Title: (props: import("./ChatDecision").ChatPreviewTitleProps) => import("solid-js").JSX.Element;
37
+ Sentence: (props: {
38
+ children: import("solid-js").JSX.Element;
39
+ }) => import("solid-js").JSX.Element;
40
+ Excerpt: (props: import("./ChatDecision").ChatPreviewExcerptProps) => import("solid-js").JSX.Element;
41
+ ReadMore: (props: import("./ChatDecision").ChatPreviewReadMoreProps) => import("solid-js").JSX.Element;
42
+ ShowAll: (props: import("./ChatDecision").ChatPreviewShowAllProps) => import("solid-js").JSX.Element;
43
+ Lines: (props: {
44
+ label?: string;
45
+ children: import("solid-js").JSX.Element;
46
+ }) => import("solid-js").JSX.Element;
47
+ Line: (props: import("./ChatDecision").ChatPreviewLineProps) => import("solid-js").JSX.Element;
48
+ People: (props: import("./ChatDecision").ChatPreviewPeopleProps) => import("solid-js").JSX.Element;
49
+ };
50
+ Mark: typeof ChatMark;
28
51
  };
29
52
  export { matchesChatCommand } from "./command-search";
30
53
  export { reconcileChatMentions } from "./composer-document";