@k2b/ui 0.27.0 → 0.29.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 (323) hide show
  1. package/README.md +1 -1
  2. package/dist/base.css +147 -2
  3. package/dist/browser/actions/ContextMenu.js +35 -4
  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 +184 -158
  8. package/dist/browser/actions/Dropdown.js.map +1 -1
  9. package/dist/browser/actions/GestureMenu.js +95 -139
  10. package/dist/browser/actions/GestureMenu.js.map +1 -1
  11. package/dist/browser/actions/Toolbar.js +379 -48
  12. package/dist/browser/actions/Toolbar.js.map +1 -1
  13. package/dist/browser/actions/drag-and-drop-messages.js +75 -0
  14. package/dist/browser/actions/drag-and-drop-messages.js.map +1 -0
  15. package/dist/browser/actions/drag-and-drop.js +692 -0
  16. package/dist/browser/actions/drag-and-drop.js.map +1 -0
  17. package/dist/browser/actions/index.js +1 -0
  18. package/dist/browser/actions/index.js.map +1 -1
  19. package/dist/browser/actions/menu-rows.js +15 -0
  20. package/dist/browser/actions/menu-rows.js.map +1 -0
  21. package/dist/browser/actions/menu-sheet.js +154 -0
  22. package/dist/browser/actions/menu-sheet.js.map +1 -0
  23. package/dist/browser/actions/toolbar-messages.js +20 -0
  24. package/dist/browser/actions/toolbar-messages.js.map +1 -0
  25. package/dist/browser/chart-inspection.js +3 -0
  26. package/dist/browser/chart-inspection.js.map +1 -0
  27. package/dist/browser/chat/ChatComposer.js +714 -410
  28. package/dist/browser/chat/ChatComposer.js.map +1 -1
  29. package/dist/browser/chat/ChatDecision.js +778 -0
  30. package/dist/browser/chat/ChatDecision.js.map +1 -0
  31. package/dist/browser/chat/ChatPrimitives.js +34 -28
  32. package/dist/browser/chat/ChatPrimitives.js.map +1 -1
  33. package/dist/browser/chat/ChatTimeline.js.map +1 -1
  34. package/dist/browser/chat/chat-messages.js +25 -1
  35. package/dist/browser/chat/chat-messages.js.map +1 -1
  36. package/dist/browser/chat/command-search.js +13 -3
  37. package/dist/browser/chat/command-search.js.map +1 -1
  38. package/dist/browser/chat/index.js +8 -1
  39. package/dist/browser/chat/index.js.map +1 -1
  40. package/dist/browser/chat/reaction-people.js +15 -0
  41. package/dist/browser/chat/reaction-people.js.map +1 -0
  42. package/dist/browser/chat/types.js.map +1 -1
  43. package/dist/browser/content/Calendar.js +3 -3
  44. package/dist/browser/content/Calendar.js.map +1 -1
  45. package/dist/browser/content/Chart.js +60 -86
  46. package/dist/browser/content/Chart.js.map +1 -1
  47. package/dist/browser/content/ChartSnapshotView.js +7 -10
  48. package/dist/browser/content/ChartSnapshotView.js.map +1 -1
  49. package/dist/browser/content/FileBrowser.js +2 -2
  50. package/dist/browser/content/FileBrowser.js.map +1 -1
  51. package/dist/browser/content/FileTree.js +42 -36
  52. package/dist/browser/content/FileTree.js.map +1 -1
  53. package/dist/browser/content/FileTypeIcon.js +72 -0
  54. package/dist/browser/content/FileTypeIcon.js.map +1 -0
  55. package/dist/browser/content/FileView.js +2 -2
  56. package/dist/browser/content/FileView.js.map +1 -1
  57. package/dist/browser/content/MessageRow.js +330 -448
  58. package/dist/browser/content/MessageRow.js.map +1 -1
  59. package/dist/browser/content/ReactionBar.js +419 -0
  60. package/dist/browser/content/ReactionBar.js.map +1 -0
  61. package/dist/browser/content/ReferenceChip.js +162 -0
  62. package/dist/browser/content/ReferenceChip.js.map +1 -0
  63. package/dist/browser/content/calendar-pointer.js +9 -0
  64. package/dist/browser/content/calendar-pointer.js.map +1 -1
  65. package/dist/browser/content/calendar-time-view.js +6 -3
  66. package/dist/browser/content/calendar-time-view.js.map +1 -1
  67. package/dist/browser/content/chart-inspection-core.js +557 -0
  68. package/dist/browser/content/chart-inspection-core.js.map +1 -0
  69. package/dist/browser/content/chart-inspection.js +10 -445
  70. package/dist/browser/content/chart-inspection.js.map +1 -1
  71. package/dist/browser/content/chart-line-gaps.js +1 -1
  72. package/dist/browser/content/chart-line-gaps.js.map +1 -1
  73. package/dist/browser/content/chart-snapshot.js +1 -1
  74. package/dist/browser/content/chart-snapshot.js.map +1 -1
  75. package/dist/browser/content/index.js +3 -0
  76. package/dist/browser/content/index.js.map +1 -1
  77. package/dist/browser/feedback/dialog-core.js +135 -23
  78. package/dist/browser/feedback/dialog-core.js.map +1 -1
  79. package/dist/browser/index.js +1 -0
  80. package/dist/browser/index.js.map +1 -1
  81. package/dist/browser/input-mode.js +40 -0
  82. package/dist/browser/input-mode.js.map +1 -0
  83. package/dist/browser/inputs/FileDropTarget.js +24 -9
  84. package/dist/browser/inputs/FileDropTarget.js.map +1 -1
  85. package/dist/browser/inputs/FileInputs.js +2 -2
  86. package/dist/browser/inputs/FileInputs.js.map +1 -1
  87. package/dist/browser/inputs/SelectChip.js +9 -0
  88. package/dist/browser/inputs/SelectChip.js.map +1 -1
  89. package/dist/browser/inputs/emoji/EmojiPicker.js +13 -0
  90. package/dist/browser/inputs/emoji/EmojiPicker.js.map +1 -1
  91. package/dist/browser/inputs/file-drop.js.map +1 -1
  92. package/dist/browser/layout/AppOverview.js +1 -1
  93. package/dist/browser/layout/AppOverview.js.map +1 -1
  94. package/dist/browser/layout/AppWorkspace.js +644 -445
  95. package/dist/browser/layout/AppWorkspace.js.map +1 -1
  96. package/dist/browser/layout/DetailPanel.js +283 -197
  97. package/dist/browser/layout/DetailPanel.js.map +1 -1
  98. package/dist/browser/layout/Discussion.js +233 -185
  99. package/dist/browser/layout/Discussion.js.map +1 -1
  100. package/dist/browser/layout/PanelDialog.js +88 -86
  101. package/dist/browser/layout/PanelDialog.js.map +1 -1
  102. package/dist/browser/layout/ResizeSeparator.js +81 -0
  103. package/dist/browser/layout/ResizeSeparator.js.map +1 -0
  104. package/dist/browser/layout/SidebarSwitcher.js +9 -2
  105. package/dist/browser/layout/SidebarSwitcher.js.map +1 -1
  106. package/dist/browser/layout/TabBar.js +15 -12
  107. package/dist/browser/layout/TabBar.js.map +1 -1
  108. package/dist/browser/layout/TableOfContents.js +10 -2
  109. package/dist/browser/layout/TableOfContents.js.map +1 -1
  110. package/dist/browser/layout/app-workspace-controller.js +130 -17
  111. package/dist/browser/layout/app-workspace-controller.js.map +1 -1
  112. package/dist/browser/layout/detail-panel-messages.js +35 -0
  113. package/dist/browser/layout/detail-panel-messages.js.map +1 -0
  114. package/dist/browser/layout/index.js +3 -1
  115. package/dist/browser/layout/index.js.map +1 -1
  116. package/dist/browser/layout/resize-separator.js +90 -0
  117. package/dist/browser/layout/resize-separator.js.map +1 -0
  118. package/dist/browser/layout/workspace-messages.js +12 -2
  119. package/dist/browser/layout/workspace-messages.js.map +1 -1
  120. package/dist/browser/surfaces/Avatar.js +50 -20
  121. package/dist/browser/surfaces/Avatar.js.map +1 -1
  122. package/dist/browser/surfaces/AvatarStack.js +406 -0
  123. package/dist/browser/surfaces/AvatarStack.js.map +1 -0
  124. package/dist/browser/surfaces/LinkCard.js +1 -1
  125. package/dist/browser/surfaces/LinkCard.js.map +1 -1
  126. package/dist/browser/surfaces/Placeholder.js +14 -3
  127. package/dist/browser/surfaces/Placeholder.js.map +1 -1
  128. package/dist/browser/surfaces/StatCell.js +23 -0
  129. package/dist/browser/surfaces/StatCell.js.map +1 -1
  130. package/dist/browser/surfaces/avatar-messages.js +8 -2
  131. package/dist/browser/surfaces/avatar-messages.js.map +1 -1
  132. package/dist/browser/surfaces/index.js +1 -0
  133. package/dist/browser/surfaces/index.js.map +1 -1
  134. package/dist/browser/widgets/Widget.js +1 -1
  135. package/dist/browser/widgets/Widget.js.map +1 -1
  136. package/dist/ssr/actions/ContextMenu.js +26 -3
  137. package/dist/ssr/actions/ContextMenu.js.map +1 -1
  138. package/dist/ssr/actions/DragAndDrop.js +63 -0
  139. package/dist/ssr/actions/DragAndDrop.js.map +1 -0
  140. package/dist/ssr/actions/Dropdown.js +140 -72
  141. package/dist/ssr/actions/Dropdown.js.map +1 -1
  142. package/dist/ssr/actions/GestureMenu.js +76 -107
  143. package/dist/ssr/actions/GestureMenu.js.map +1 -1
  144. package/dist/ssr/actions/Toolbar.js +294 -14
  145. package/dist/ssr/actions/Toolbar.js.map +1 -1
  146. package/dist/ssr/actions/drag-and-drop-messages.js +75 -0
  147. package/dist/ssr/actions/drag-and-drop-messages.js.map +1 -0
  148. package/dist/ssr/actions/drag-and-drop.js +692 -0
  149. package/dist/ssr/actions/drag-and-drop.js.map +1 -0
  150. package/dist/ssr/actions/index.js +1 -0
  151. package/dist/ssr/actions/index.js.map +1 -1
  152. package/dist/ssr/actions/menu-rows.js +15 -0
  153. package/dist/ssr/actions/menu-rows.js.map +1 -0
  154. package/dist/ssr/actions/menu-sheet.js +138 -0
  155. package/dist/ssr/actions/menu-sheet.js.map +1 -0
  156. package/dist/ssr/actions/toolbar-messages.js +20 -0
  157. package/dist/ssr/actions/toolbar-messages.js.map +1 -0
  158. package/dist/ssr/chart-inspection.js +3 -0
  159. package/dist/ssr/chart-inspection.js.map +1 -0
  160. package/dist/ssr/chat/ChatComposer.js +393 -102
  161. package/dist/ssr/chat/ChatComposer.js.map +1 -1
  162. package/dist/ssr/chat/ChatDecision.js +465 -0
  163. package/dist/ssr/chat/ChatDecision.js.map +1 -0
  164. package/dist/ssr/chat/ChatPrimitives.js +2 -2
  165. package/dist/ssr/chat/ChatPrimitives.js.map +1 -1
  166. package/dist/ssr/chat/ChatTimeline.js.map +1 -1
  167. package/dist/ssr/chat/chat-messages.js +25 -1
  168. package/dist/ssr/chat/chat-messages.js.map +1 -1
  169. package/dist/ssr/chat/command-search.js +13 -3
  170. package/dist/ssr/chat/command-search.js.map +1 -1
  171. package/dist/ssr/chat/index.js +8 -1
  172. package/dist/ssr/chat/index.js.map +1 -1
  173. package/dist/ssr/chat/reaction-people.js +15 -0
  174. package/dist/ssr/chat/reaction-people.js.map +1 -0
  175. package/dist/ssr/chat/types.js.map +1 -1
  176. package/dist/ssr/content/Calendar.js +3 -3
  177. package/dist/ssr/content/Calendar.js.map +1 -1
  178. package/dist/ssr/content/Chart.js +25 -38
  179. package/dist/ssr/content/Chart.js.map +1 -1
  180. package/dist/ssr/content/ChartSnapshotView.js +7 -10
  181. package/dist/ssr/content/ChartSnapshotView.js.map +1 -1
  182. package/dist/ssr/content/FileBrowser.js +2 -2
  183. package/dist/ssr/content/FileBrowser.js.map +1 -1
  184. package/dist/ssr/content/FileTree.js +21 -14
  185. package/dist/ssr/content/FileTree.js.map +1 -1
  186. package/dist/ssr/content/FileTypeIcon.js +50 -0
  187. package/dist/ssr/content/FileTypeIcon.js.map +1 -0
  188. package/dist/ssr/content/FileView.js +2 -2
  189. package/dist/ssr/content/FileView.js.map +1 -1
  190. package/dist/ssr/content/MessageRow.js +98 -152
  191. package/dist/ssr/content/MessageRow.js.map +1 -1
  192. package/dist/ssr/content/ReactionBar.js +304 -0
  193. package/dist/ssr/content/ReactionBar.js.map +1 -0
  194. package/dist/ssr/content/ReferenceChip.js +121 -0
  195. package/dist/ssr/content/ReferenceChip.js.map +1 -0
  196. package/dist/ssr/content/calendar-pointer.js +9 -0
  197. package/dist/ssr/content/calendar-pointer.js.map +1 -1
  198. package/dist/ssr/content/calendar-time-view.js +6 -3
  199. package/dist/ssr/content/calendar-time-view.js.map +1 -1
  200. package/dist/ssr/content/chart-inspection-core.js +557 -0
  201. package/dist/ssr/content/chart-inspection-core.js.map +1 -0
  202. package/dist/ssr/content/chart-inspection.js +10 -445
  203. package/dist/ssr/content/chart-inspection.js.map +1 -1
  204. package/dist/ssr/content/chart-line-gaps.js +1 -1
  205. package/dist/ssr/content/chart-line-gaps.js.map +1 -1
  206. package/dist/ssr/content/chart-snapshot.js +1 -1
  207. package/dist/ssr/content/chart-snapshot.js.map +1 -1
  208. package/dist/ssr/content/index.js +3 -0
  209. package/dist/ssr/content/index.js.map +1 -1
  210. package/dist/ssr/feedback/dialog-core.js +135 -23
  211. package/dist/ssr/feedback/dialog-core.js.map +1 -1
  212. package/dist/ssr/index.js +1 -0
  213. package/dist/ssr/index.js.map +1 -1
  214. package/dist/ssr/input-mode.js +40 -0
  215. package/dist/ssr/input-mode.js.map +1 -0
  216. package/dist/ssr/inputs/FileDropTarget.js +17 -5
  217. package/dist/ssr/inputs/FileDropTarget.js.map +1 -1
  218. package/dist/ssr/inputs/FileInputs.js +2 -2
  219. package/dist/ssr/inputs/FileInputs.js.map +1 -1
  220. package/dist/ssr/inputs/SelectChip.js +9 -0
  221. package/dist/ssr/inputs/SelectChip.js.map +1 -1
  222. package/dist/ssr/inputs/emoji/EmojiPicker.js +12 -0
  223. package/dist/ssr/inputs/emoji/EmojiPicker.js.map +1 -1
  224. package/dist/ssr/inputs/file-drop.js.map +1 -1
  225. package/dist/ssr/layout/AppOverview.js +1 -1
  226. package/dist/ssr/layout/AppOverview.js.map +1 -1
  227. package/dist/ssr/layout/AppWorkspace.js +272 -95
  228. package/dist/ssr/layout/AppWorkspace.js.map +1 -1
  229. package/dist/ssr/layout/DetailPanel.js +112 -58
  230. package/dist/ssr/layout/DetailPanel.js.map +1 -1
  231. package/dist/ssr/layout/Discussion.js +63 -36
  232. package/dist/ssr/layout/Discussion.js.map +1 -1
  233. package/dist/ssr/layout/PanelDialog.js +7 -6
  234. package/dist/ssr/layout/PanelDialog.js.map +1 -1
  235. package/dist/ssr/layout/ResizeSeparator.js +45 -0
  236. package/dist/ssr/layout/ResizeSeparator.js.map +1 -0
  237. package/dist/ssr/layout/SidebarSwitcher.js +9 -2
  238. package/dist/ssr/layout/SidebarSwitcher.js.map +1 -1
  239. package/dist/ssr/layout/TabBar.js +1 -1
  240. package/dist/ssr/layout/TabBar.js.map +1 -1
  241. package/dist/ssr/layout/TableOfContents.js +10 -2
  242. package/dist/ssr/layout/TableOfContents.js.map +1 -1
  243. package/dist/ssr/layout/app-workspace-controller.js +130 -17
  244. package/dist/ssr/layout/app-workspace-controller.js.map +1 -1
  245. package/dist/ssr/layout/detail-panel-messages.js +35 -0
  246. package/dist/ssr/layout/detail-panel-messages.js.map +1 -0
  247. package/dist/ssr/layout/index.js +3 -1
  248. package/dist/ssr/layout/index.js.map +1 -1
  249. package/dist/ssr/layout/resize-separator.js +90 -0
  250. package/dist/ssr/layout/resize-separator.js.map +1 -0
  251. package/dist/ssr/layout/workspace-messages.js +12 -2
  252. package/dist/ssr/layout/workspace-messages.js.map +1 -1
  253. package/dist/ssr/surfaces/Avatar.js +20 -2
  254. package/dist/ssr/surfaces/Avatar.js.map +1 -1
  255. package/dist/ssr/surfaces/AvatarStack.js +286 -0
  256. package/dist/ssr/surfaces/AvatarStack.js.map +1 -0
  257. package/dist/ssr/surfaces/LinkCard.js +1 -1
  258. package/dist/ssr/surfaces/LinkCard.js.map +1 -1
  259. package/dist/ssr/surfaces/Placeholder.js +4 -2
  260. package/dist/ssr/surfaces/Placeholder.js.map +1 -1
  261. package/dist/ssr/surfaces/StatCell.js +23 -0
  262. package/dist/ssr/surfaces/StatCell.js.map +1 -1
  263. package/dist/ssr/surfaces/avatar-messages.js +8 -2
  264. package/dist/ssr/surfaces/avatar-messages.js.map +1 -1
  265. package/dist/ssr/surfaces/index.js +1 -0
  266. package/dist/ssr/surfaces/index.js.map +1 -1
  267. package/dist/ssr/widgets/Widget.js +1 -1
  268. package/dist/ssr/widgets/Widget.js.map +1 -1
  269. package/dist/styles.css +1 -1
  270. package/dist/types/actions/ContextMenu.d.ts +9 -0
  271. package/dist/types/actions/DragAndDrop.d.ts +29 -0
  272. package/dist/types/actions/Dropdown.d.ts +12 -5
  273. package/dist/types/actions/GestureMenu.d.ts +6 -4
  274. package/dist/types/actions/Toolbar.d.ts +20 -0
  275. package/dist/types/actions/drag-and-drop-messages.d.ts +35 -0
  276. package/dist/types/actions/drag-and-drop.d.ts +36 -0
  277. package/dist/types/actions/index.d.ts +3 -1
  278. package/dist/types/actions/menu-rows.d.ts +5 -0
  279. package/dist/types/actions/menu-sheet.d.ts +22 -0
  280. package/dist/types/actions/toolbar-messages.d.ts +8 -0
  281. package/dist/types/chart-inspection.d.ts +2 -0
  282. package/dist/types/chat/ChatComposer.d.ts +26 -1
  283. package/dist/types/chat/ChatDecision.d.ts +133 -0
  284. package/dist/types/chat/ChatPrimitives.d.ts +4 -1
  285. package/dist/types/chat/ChatTimeline.d.ts +2 -1
  286. package/dist/types/chat/chat-messages.d.ts +13 -2
  287. package/dist/types/chat/command-search.d.ts +5 -0
  288. package/dist/types/chat/index.d.ts +25 -1
  289. package/dist/types/chat/reaction-people.d.ts +9 -0
  290. package/dist/types/chat/types.d.ts +54 -1
  291. package/dist/types/content/Chart.d.ts +11 -5
  292. package/dist/types/content/FileTypeIcon.d.ts +27 -0
  293. package/dist/types/content/MessageRow.d.ts +3 -10
  294. package/dist/types/content/ReactionBar.d.ts +32 -0
  295. package/dist/types/content/ReferenceChip.d.ts +49 -0
  296. package/dist/types/content/calendar-pointer.d.ts +6 -0
  297. package/dist/types/content/chart-inspection-core.d.ts +61 -0
  298. package/dist/types/content/chart-inspection.d.ts +4 -20
  299. package/dist/types/content/chart-snapshot.d.ts +1 -1
  300. package/dist/types/content/index.d.ts +5 -1
  301. package/dist/types/feedback/dialog-core.d.ts +16 -1
  302. package/dist/types/index.d.ts +1 -0
  303. package/dist/types/input-mode.d.ts +7 -0
  304. package/dist/types/inputs/FileDropTarget.d.ts +6 -3
  305. package/dist/types/inputs/SelectChip.d.ts +2 -0
  306. package/dist/types/inputs/file-drop.d.ts +2 -0
  307. package/dist/types/layout/AppWorkspace.d.ts +5 -3
  308. package/dist/types/layout/DetailPanel.d.ts +11 -0
  309. package/dist/types/layout/Discussion.d.ts +8 -0
  310. package/dist/types/layout/ResizeSeparator.d.ts +9 -0
  311. package/dist/types/layout/TabBar.d.ts +7 -0
  312. package/dist/types/layout/TableOfContents.d.ts +2 -0
  313. package/dist/types/layout/app-workspace-controller.d.ts +2 -0
  314. package/dist/types/layout/detail-panel-messages.d.ts +15 -0
  315. package/dist/types/layout/index.d.ts +3 -1
  316. package/dist/types/layout/resize-separator.d.ts +18 -0
  317. package/dist/types/layout/workspace-messages.d.ts +5 -0
  318. package/dist/types/surfaces/Avatar.d.ts +12 -0
  319. package/dist/types/surfaces/AvatarStack.d.ts +41 -0
  320. package/dist/types/surfaces/StatCell.d.ts +6 -0
  321. package/dist/types/surfaces/avatar-messages.d.ts +3 -0
  322. package/dist/types/surfaces/index.d.ts +3 -1
  323. package/package.json +7 -2
@@ -1,7 +1,60 @@
1
+ import type { JSX } from "solid-js";
1
2
  import type { EmojiSkinTone } from "../inputs/emoji/emoji-index";
2
3
  export type ChatRole = "user" | "assistant" | "system" | "tool";
3
4
  export type ChatMessageStatus = "pending" | "streaming" | "complete" | "error";
4
- export type ChatActivityTone = "neutral" | "ai" | "success" | "danger";
5
+ /** `warning` marks a partial result or an outcome that is not yet known. */
6
+ export type ChatActivityTone = "neutral" | "ai" | "success" | "warning" | "danger";
7
+ /** `open` asks; `sending` while the answer is on its way; `decided` once answered; `expired` when it ran out. */
8
+ export type ChatDecisionState = "open" | "sending" | "decided" | "expired";
9
+ /** One answer of a question. Set the question's state in `onSelect` before awaiting anything, so it collapses at once. */
10
+ export type ChatDecisionAnswer = {
11
+ label: string;
12
+ /** Icon class, for example `ti ti-send`. */
13
+ icon?: string;
14
+ onSelect: () => void | Promise<void>;
15
+ };
16
+ /** Why a question is asked, or why its main answer is off. */
17
+ export type ChatDecisionReason = {
18
+ text: JSX.Element;
19
+ /** Icon class; the text after it starts 1.5rem from the edge. */
20
+ icon?: string;
21
+ /** `danger` for deletions, `warning` for outside content and limits. */
22
+ tone?: "neutral" | "danger" | "warning";
23
+ };
24
+ export type ChatOutcomeTone = "running" | "done" | "off" | "waiting" | "warning" | "error";
25
+ /** One text of an outcome flow. */
26
+ export type ChatOutcomeLine = {
27
+ tone: ChatOutcomeTone;
28
+ /** What happened, as one sentence, usually with `ReferenceChip`s. */
29
+ text: JSX.Element;
30
+ /** A quiet second sentence, such as "You declined." */
31
+ detail?: JSX.Element;
32
+ /** A formatted time after the text. */
33
+ time?: string;
34
+ /** Replaces the tone's icon, for example `ti ti-clock-x` for an expired question. */
35
+ icon?: string;
36
+ /** One text link after the line, such as "Ask again". */
37
+ action?: {
38
+ label: string;
39
+ onSelect: () => void | Promise<void>;
40
+ };
41
+ /** Small buttons under the line. Shown while this line is current; otherwise hidden but still reserving their row. */
42
+ actions?: JSX.Element;
43
+ };
44
+ /** A person in a preview header: the name in the text colour, then the address the message really uses. */
45
+ export type ChatPreviewPerson = {
46
+ name?: string;
47
+ address?: string;
48
+ };
49
+ /** One header row, such as "To Lea Berg lea.berg@example.com". */
50
+ export type ChatPreviewHeaderRow = {
51
+ label: string;
52
+ people?: readonly ChatPreviewPerson[];
53
+ /** Further content after the people, such as "and 2 more". */
54
+ value?: JSX.Element;
55
+ /** Draws the label stronger, for recipients others cannot see. */
56
+ emphasis?: boolean;
57
+ };
5
58
  type ChatActionBase = {
6
59
  id: string;
7
60
  label: string;
@@ -2,7 +2,7 @@ import type { MapViewport } from "@k2b/stdlib";
2
2
  import { charts } from "@k2b/stdlib";
3
3
  import type { JSX } from "solid-js";
4
4
  import type { ChartCursor } from "./chart-cursor";
5
- import { type ChartDatumRef, type ChartSelection, type ChartTooltipFormatter } from "./chart-inspection";
5
+ import { type ChartDatumRef, type ChartKind, type ChartSelection, type ChartTooltipFormatter } from "./chart-inspection-core";
6
6
  import { type StateTimelineChartOptions, type StateTimelineDomain } from "./chart-state-timeline";
7
7
  /**
8
8
  * Chart — minimal Solid wrapper around `stdlib.charts`.
@@ -25,9 +25,9 @@ import { type StateTimelineChartOptions, type StateTimelineDomain } from "./char
25
25
  * **Why so thin.** The props are a discriminated union over each
26
26
  * stdlib chart function — `kind: "line"` brings in exactly the params
27
27
  * `charts.line` expects, `kind: "bar"` brings in `charts.bar`'s, etc.
28
- * Options stay aligned with stdlib without renaming. Shared interactive
29
- * layers add bounded pan / zoom controls to maps and state timelines, plus
30
- * renderer-owned inspection, tooltips and optional selection for all chart kinds.
28
+ * Options stay aligned with stdlib without renaming. Every chart provides
29
+ * renderer-owned inspection, tooltips and optional selection by default.
30
+ * `interactive` adds bounded pan / zoom and reset controls to maps and state timelines.
31
31
  * If stdlib gains a new option, it's automatically available at every
32
32
  * callsite.
33
33
  *
@@ -49,7 +49,7 @@ import { type StateTimelineChartOptions, type StateTimelineDomain } from "./char
49
49
  * ```
50
50
  */
51
51
  /** All chart kinds shipped by `stdlib.charts`. */
52
- export type ChartKind = keyof typeof charts;
52
+ export type { ChartKind } from "./chart-inspection-core";
53
53
  export type ChartLabels = Partial<{
54
54
  empty: string;
55
55
  series: string;
@@ -75,10 +75,16 @@ export type ChartProps = {
75
75
  class?: string;
76
76
  style?: JSX.CSSProperties | string;
77
77
  labels?: ChartLabels;
78
+ /**
79
+ * Navigation for maps and state timelines: pan, zoom and reset controls.
80
+ * Arrows pan; Alt+arrows inspect. Every chart shows tooltips and keyboard
81
+ * inspection without this prop.
82
+ */
78
83
  interactive?: boolean;
79
84
  onSelect?: (selection: ChartSelection) => void;
80
85
  /** Controlled highlight; indices belong to this exact input snapshot. */
81
86
  selected?: ChartDatumRef | null;
87
+ /** Customize the always-on tooltip with a title and labeled text rows. */
82
88
  tooltip?: ChartTooltipFormatter;
83
89
  /** Optional shared X cursor for line charts. */
84
90
  cursor?: ChartCursor;
@@ -0,0 +1,27 @@
1
+ import type { JSX } from "solid-js";
2
+ /** The colour family a file's icon tile uses. `other` covers code, text, and unknown files. */
3
+ export type FileType = "folder" | "pdf" | "image" | "sheet" | "document" | "slides" | "video" | "audio" | "archive" | "other";
4
+ export type FileTypeIconProps = {
5
+ /** The file or folder name; its extension picks the glyph and the type colour. */
6
+ name: string;
7
+ mediaType?: string;
8
+ folder?: boolean;
9
+ /** Shows an open folder, for example the folder a list is showing. */
10
+ open?: boolean;
11
+ /** A Tabler icon class that replaces the glyph the name picks; the type colour still follows the name. */
12
+ icon?: string;
13
+ /** `sm` for tree rows, `md` for list rows, `lg` for grid previews. Defaults to `md`. */
14
+ size?: "sm" | "md" | "lg";
15
+ class?: string;
16
+ };
17
+ /** Resolve the colour family for a file or folder from its name and media type. */
18
+ export declare const fileTypeOf: (file: {
19
+ name: string;
20
+ mediaType?: string;
21
+ folder?: boolean;
22
+ }) => FileType;
23
+ /**
24
+ * A file or folder glyph in a soft chip of its type colour. Folders take the app accent hook
25
+ * `--k2b-app-workspace-active`; code, text, and unknown files a neutral ink. The box size is fixed per `size`.
26
+ */
27
+ export declare function FileTypeIcon(props: FileTypeIconProps): JSX.Element;
@@ -1,4 +1,5 @@
1
1
  import { type JSX } from "solid-js";
2
+ import { type ReactionBarItem } from "./ReactionBar";
2
3
  export type MessageRowAuthor = {
3
4
  /** Display name, shown at the start of a group and read before every message. */
4
5
  name: string;
@@ -25,16 +26,8 @@ export type MessageRowQuote = {
25
26
  /** Opens the quoted message, for example by scrolling to it. Without it, the quote is not a control. */
26
27
  onSelect?: () => void;
27
28
  };
28
- export type MessageRowReaction = {
29
- /** Stable identity of the reaction, passed to `onToggleReaction`. */
30
- key: string;
31
- emoji: string;
32
- count: number;
33
- /** The reader reacted this way; the chip shows pressed. */
34
- own?: boolean;
35
- /** Who reacted, for example "Nora, Tobias". Read by screen readers and shown as a tooltip. */
36
- label?: string;
37
- };
29
+ /** Reaction labels are read by screen readers and shown in the names hint. */
30
+ export type MessageRowReaction = ReactionBarItem;
38
31
  export type MessageRowThread = {
39
32
  /** Number of replies. */
40
33
  count: number;
@@ -0,0 +1,32 @@
1
+ import { type JSX } from "solid-js";
2
+ export type ReactionBarItem = {
3
+ /** Stable identity of the reaction, passed to `onToggle`. */
4
+ key: string;
5
+ emoji: string;
6
+ count: number;
7
+ /** The reader reacted this way; the chip shows pressed. */
8
+ own?: boolean;
9
+ /** Who reacted, for example from `reactionPeople`. Read by screen readers and shown in the names hint. */
10
+ label?: string;
11
+ /** A change of the reader's own reaction is still being saved; the chip carries `aria-busy`. */
12
+ busy?: boolean;
13
+ };
14
+ export type ReactionBarProps = {
15
+ reactions: readonly ReactionBarItem[];
16
+ /** Called with a reaction's key when the reader presses its chip. Without it, the chips are not controls. */
17
+ onToggle?: (key: string) => void;
18
+ /** Called by "Add reaction" with the button to anchor a picker to, such as `EmojiPicker.Popover`. Without it there is no button. */
19
+ onAdd?: (anchor: HTMLElement) => void;
20
+ /** "default": 26 px chips (chat, item detail). "compact": 24 px chips (cards). */
21
+ density?: "default" | "compact";
22
+ /** "scroll" (default): one line of fixed height that scrolls sideways. "wrap": every chip shows, lines wrap. */
23
+ overflow?: "scroll" | "wrap";
24
+ /** Shows at most this many chips and then "+n", n being the number of further emoji. The shown chips do not scroll. */
25
+ max?: number;
26
+ /** Screen-reader text of "+n"; defaults to "{n} more reactions". */
27
+ moreLabel?: (count: number) => string;
28
+ /** "always" (default) or "progressive": shown on hover and focus with a mouse or trackpad (k2b-progressive-action, inside the caller's k2b-progressive-row), kept while its picker is open, hidden on touch. Its place stays reserved. */
29
+ add?: "always" | "progressive";
30
+ class?: string;
31
+ };
32
+ export declare function ReactionBar(props: ReactionBarProps): JSX.Element;
@@ -0,0 +1,49 @@
1
+ import { type JSX } from "solid-js";
2
+ /** The visible length of a chip; longer titles are cut in the middle. */
3
+ export declare const REFERENCE_CHIP_MAX_CHARACTERS = 40;
4
+ /**
5
+ * Shortens `text` to at most `max` visible characters by cutting its middle, so the start and an ending such as
6
+ * ".pdf" stay readable. Counts user-perceived characters, so an emoji is never split.
7
+ * @example truncateMiddle("Quarterly report for the operations team 2026.pdf", 24) // "Quarterly re…m 2026.pdf"
8
+ */
9
+ export declare const truncateMiddle: (text: string, max?: number) => string;
10
+ type ReferenceChipCommon = {
11
+ class?: string;
12
+ };
13
+ /** A thing or a place: an icon in its application colour and its title, a link while it exists. */
14
+ export type ReferenceChipObjectProps = ReferenceChipCommon & {
15
+ kind: "object" | "place";
16
+ title: string;
17
+ /** Destination of the chip. Omit it, or set `gone`, when there is nothing to open. */
18
+ href?: string;
19
+ /** Icon class, for example `ti ti-mail`. */
20
+ icon?: string;
21
+ /** Icon colour, usually the owning application's accent. Sets `--k2b-reference-icon`. */
22
+ accent?: string;
23
+ /** The thing no longer exists: struck through and never a link. */
24
+ gone?: boolean;
25
+ };
26
+ /** A person: avatar and display name. The address belongs in the preview, never in the chip. */
27
+ export type ReferenceChipPersonProps = ReferenceChipCommon & {
28
+ kind: "person";
29
+ name: string;
30
+ /** Avatar image; initials on a tint from the name otherwise. */
31
+ src?: string | null;
32
+ href?: string;
33
+ };
34
+ /** A date or time the host already formatted for the reader. */
35
+ export type ReferenceChipTimeProps = ReferenceChipCommon & {
36
+ kind: "time";
37
+ label: string;
38
+ /** Machine-readable value for `<time datetime>`. */
39
+ dateTime?: string;
40
+ };
41
+ export type ReferenceChipProps = ReferenceChipObjectProps | ReferenceChipPersonProps | ReferenceChipTimeProps;
42
+ /**
43
+ * A typed reference inside a sentence: a thing, a place, a person, or a time, in the calm `.k2b-reference` pill.
44
+ * A chip shows at most 40 characters and cuts longer titles in the middle; the full title stays its accessible name
45
+ * and tooltip.
46
+ * @example <ReferenceChip kind="object" title="Maintenance window" icon="ti ti-mail" accent="var(--app-mail)" href="/mail/…" />
47
+ */
48
+ export declare function ReferenceChip(props: ReferenceChipProps): JSX.Element;
49
+ export default ReferenceChip;
@@ -22,6 +22,12 @@ type CalendarPointerSessionOptions<T> = {
22
22
  /** Called on every move once the gesture is active, such as to move a token with the pointer. */
23
23
  onMove?: (clientX: number, clientY: number) => void;
24
24
  };
25
+ /**
26
+ * Runs `open` once the browser has handled the pointer release that ends a drag. The browser light-dismisses an
27
+ * `auto` popover that opens while it dispatches that `pointerup`, as the HTML popover rules ask and Chromium 156
28
+ * does, so a popover that a drag opens must open after the release.
29
+ */
30
+ export declare const afterPointerRelease: (open: () => void) => void;
25
31
  /**
26
32
  * Owns one pointer gesture from threshold crossing through commit or cancel.
27
33
  * Views provide geometry through `resolve`; this helper owns global cleanup,
@@ -0,0 +1,61 @@
1
+ import type { ChartDatum, charts } from "@k2b/stdlib";
2
+ import type { ChartCursor } from "./chart-cursor";
3
+ export type ChartKind = keyof typeof charts;
4
+ export type ChartDatumRef = Pick<ChartDatum, "role" | "index" | "seriesIndex">;
5
+ export declare const sameChartDatum: (a: ChartDatumRef, b: ChartDatumRef) => boolean;
6
+ export type ChartSelection = {
7
+ kind: ChartKind;
8
+ datum: ChartDatum;
9
+ };
10
+ export type ChartTooltip = {
11
+ title?: string;
12
+ rows: readonly {
13
+ label: string;
14
+ value: string;
15
+ }[];
16
+ };
17
+ export type ChartTooltipFormatter = (selection: ChartSelection) => ChartTooltip;
18
+ export declare function isChartDatum(value: unknown): value is ChartDatum;
19
+ /** Enhances existing SVG nodes. Pointer/focus changes never rebuild the chart. */
20
+ export declare function createChartInspector(options: {
21
+ container: () => HTMLElement | undefined;
22
+ cursor?: () => ChartCursor | undefined;
23
+ tooltip: () => HTMLSpanElement | undefined;
24
+ anchor: () => HTMLSpanElement | undefined;
25
+ kind: () => ChartKind;
26
+ enabled: () => boolean;
27
+ format: ChartTooltipFormatter;
28
+ select: (selection: ChartSelection) => void;
29
+ }): {
30
+ selectDatum: (selected: ChartDatumRef | null | undefined) => void;
31
+ selectData: (selected: readonly ChartDatumRef[]) => void;
32
+ linkCursor: (cursor: ChartCursor | undefined) => (() => void);
33
+ destroy: () => void;
34
+ move: (event: PointerEvent) => void;
35
+ down: (event: PointerEvent) => void;
36
+ click: (event: MouseEvent) => void;
37
+ focus: (event: FocusEvent) => void;
38
+ key: (event: KeyboardEvent) => boolean;
39
+ close: () => void;
40
+ invalidate: () => void;
41
+ leave: () => void;
42
+ };
43
+ /** Dismiss inspection on outside interaction, but allow the tooltip itself to scroll. */
44
+ export declare function closeChartInspectionOnOutside(options: {
45
+ container: () => HTMLElement | undefined;
46
+ tooltip: () => HTMLElement | undefined;
47
+ close: () => void;
48
+ }): () => void;
49
+ export type InspectChartOptions = {
50
+ kind: ChartKind;
51
+ format: ChartTooltipFormatter;
52
+ select?: (selection: ChartSelection) => void;
53
+ cursor?: ChartCursor;
54
+ };
55
+ export type ChartInspection = {
56
+ invalidate(): void;
57
+ close(): void;
58
+ destroy(): void;
59
+ };
60
+ /** Attach inspection to stdlib SVG rendered with inspect: true, without a framework. */
61
+ export declare function inspectChart(container: HTMLElement, options: InspectChartOptions): ChartInspection;
@@ -1,22 +1,6 @@
1
- import type { ChartDatum } from "@k2b/stdlib";
2
- import type { ChartKind } from "./Chart";
3
1
  import type { ChartCursor } from "./chart-cursor";
4
- export type ChartDatumRef = Pick<ChartDatum, "role" | "index" | "seriesIndex">;
5
- export declare const sameChartDatum: (a: ChartDatumRef, b: ChartDatumRef) => boolean;
6
- export type ChartSelection = {
7
- kind: ChartKind;
8
- datum: ChartDatum;
9
- };
10
- export type ChartTooltip = {
11
- title?: string;
12
- rows: readonly {
13
- label: string;
14
- value: string;
15
- }[];
16
- };
17
- export type ChartTooltipFormatter = (selection: ChartSelection) => ChartTooltip;
18
- export declare function isChartDatum(value: unknown): value is ChartDatum;
19
- /** Enhances existing SVG nodes. Pointer/focus changes never rebuild the chart. */
2
+ import { type ChartKind, type ChartSelection, type ChartTooltipFormatter } from "./chart-inspection-core";
3
+ export type { ChartSelection } from "./chart-inspection-core";
20
4
  export declare function createChartInspection(options: {
21
5
  container: () => HTMLDivElement | undefined;
22
6
  cursor?: () => ChartCursor | undefined;
@@ -27,8 +11,8 @@ export declare function createChartInspection(options: {
27
11
  format: ChartTooltipFormatter;
28
12
  select: (selection: ChartSelection) => void;
29
13
  }): {
30
- selectDatum: (selected: ChartDatumRef | null | undefined) => void;
31
- selectData: (selected: readonly ChartDatumRef[]) => void;
14
+ selectDatum: (selected: import("./chart-inspection-core").ChartDatumRef | null | undefined) => void;
15
+ selectData: (selected: readonly import("./chart-inspection-core").ChartDatumRef[]) => void;
32
16
  move: (event: PointerEvent) => void;
33
17
  down: (event: PointerEvent) => void;
34
18
  click: (event: MouseEvent) => void;
@@ -1,6 +1,6 @@
1
1
  import { type ChartDatum } from "@k2b/stdlib";
2
2
  import { type ChartKind, type ChartRenderOptions } from "./Chart";
3
- import { type ChartSelection, type ChartTooltip, type ChartTooltipFormatter } from "./chart-inspection";
3
+ import { type ChartSelection, type ChartTooltip, type ChartTooltipFormatter } from "./chart-inspection-core";
4
4
  /** Trusted output of prepareChartSnapshot; never accept arbitrary user SVG. */
5
5
  export type ChartSnapshot = {
6
6
  kind: ChartKind;
@@ -13,7 +13,7 @@ export { default as CodeDisplay } from "./CodeDisplay";
13
13
  export { type ChartCursor, createChartCursor } from "./chart-cursor";
14
14
  export type { ChartExplorerCharts, ChartExplorerController, ChartExplorerData, ChartExplorerOptions, ChartExplorerRequest, ChartExplorerRow, ChartExplorerSnapshot, } from "./chart-explorer";
15
15
  export { createChartExplorer } from "./chart-explorer";
16
- export type { ChartDatumRef, ChartSelection, ChartTooltip, ChartTooltipFormatter } from "./chart-inspection";
16
+ export type { ChartDatumRef, ChartSelection, ChartTooltip, ChartTooltipFormatter } from "./chart-inspection-core";
17
17
  export type { ChartSnapshot } from "./chart-snapshot";
18
18
  export { prepareChartSnapshot } from "./chart-snapshot";
19
19
  export type { StateTimelineChartOptions, StateTimelineDomain, StateTimelineInterval, StateTimelineRow, StateTimelineState, } from "./chart-state-timeline";
@@ -25,6 +25,7 @@ export { DocCode, DocConceptGrid, DocInlineCode, DocLead, DocNote, DocPage, DocR
25
25
  export { FileBrowserPanel, type FileBrowserPanelProps, type FileSource, openFileBrowser } from "./FileBrowser";
26
26
  export { FileGrid, type FileGridProps } from "./FileGrid";
27
27
  export { default as FileTree, type FileTreeActions, type FileTreeEntry, type FileTreeProps } from "./FileTree";
28
+ export { type FileType, FileTypeIcon, type FileTypeIconProps, fileTypeOf } from "./FileTypeIcon";
28
29
  export { canPreviewFile, default as FileView, type FileViewContent, type FileViewFile, type FileViewPreviewKind, type FileViewProps, type FileViewRenderer, type FileViewRendererProps, formatFileViewSize, getFileViewPreviewKind, } from "./FileView";
29
30
  export type { KbdProps } from "./Kbd";
30
31
  export { Kbd } from "./Kbd";
@@ -44,6 +45,9 @@ export type { PdfPreviewProps, PdfPreviewRequest } from "./PdfPreview";
44
45
  export { default as PdfPreview } from "./PdfPreview";
45
46
  export type { RangeOption, RangePickerProps } from "./RangePicker";
46
47
  export { default as RangePicker } from "./RangePicker";
48
+ export { ReactionBar, type ReactionBarItem, type ReactionBarProps } from "./ReactionBar";
49
+ export type { ReferenceChipObjectProps, ReferenceChipPersonProps, ReferenceChipProps, ReferenceChipTimeProps, } from "./ReferenceChip";
50
+ export { REFERENCE_CHIP_MAX_CHARACTERS, ReferenceChip, truncateMiddle } from "./ReferenceChip";
47
51
  export type { StepsProps } from "./Steps";
48
52
  export { Steps } from "./Steps";
49
53
  export type { StructuredDataPreviewMode, StructuredDataPreviewProps, StructuredDataValue } from "./StructuredDataPreview";
@@ -11,6 +11,8 @@ export type OpenDialogOptions = {
11
11
  /**
12
12
  * Add a same-URL history entry while the dialog is open, so the browser's or the phone's Back closes the dialog
13
13
  * instead of leaving the page. Closing the dialog removes the entry again; the returned promise settles after that.
14
+ * With the Navigation API, same-URL traversals between this core's entries and the page do not reach application popstate listeners.
15
+ * Without it, only the synthetic Back on close is suppressed.
14
16
  */
15
17
  history?: boolean;
16
18
  };
@@ -33,5 +35,18 @@ export type DialogCore = {
33
35
  close: (result?: unknown) => void;
34
36
  isOpen: () => boolean;
35
37
  };
36
- export declare const createDialogCore: () => DialogCore;
38
+ export declare const createDialogCore: () => {
39
+ open: <T>(view: DialogRender<T>, options?: OpenDialogOptions) => Promise<T | undefined>;
40
+ close: (result?: unknown) => void;
41
+ isOpen: () => boolean;
42
+ holdHistory: (onBack: () => void) => (() => void);
43
+ historySettled: () => Promise<void>;
44
+ };
37
45
  export declare const dialogCore: DialogCore;
46
+ /**
47
+ * Internal: transient UI shares dialogs' Back handling without exposing another public dialog capability.
48
+ * Same-URL traversals are suppressed with the Navigation API; without it, only the synthetic Back on release is suppressed.
49
+ */
50
+ export declare const holdDialogHistory: (onBack: () => void) => (() => void);
51
+ /** Internal: waits until entries released through `holdDialogHistory` have left the history. */
52
+ export declare const dialogHistorySettled: () => Promise<void>;
@@ -2,6 +2,7 @@ export * from "./actions";
2
2
  export * from "./chat";
3
3
  export * from "./content";
4
4
  export * from "./feedback";
5
+ export { installInputModeController } from "./input-mode";
5
6
  export * from "./inputs";
6
7
  export { suppressTextSelection } from "./internal/text-selection";
7
8
  export * from "./intl";
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Records `data-k2b-input="touch" | "trackpad"` and the sticky
3
+ * `data-k2b-kbd="on"` on `<html>` of root after qualifying input events.
4
+ * Returns a function that removes listeners but keeps the attributes.
5
+ * No-op on the server; installing does not change the initial HTML.
6
+ */
7
+ export declare const installInputModeController: (root?: Document | undefined) => (() => void);
@@ -9,9 +9,10 @@ export type FileDropTargetProps = FileDropOptions & {
9
9
  for?: Element;
10
10
  };
11
11
  /**
12
- * Turns an area into a drop target while files from outside the page are dragged over the window. A calm overlay
13
- * covers the area without moving anything and says what dropping does; a more specific target inside it, such as a
14
- * folder row or a `FileDropzone`, takes the drop and its sentence while the pointer is over it. Text, links, and
12
+ * Turns an area into a drop target while files from outside the page are dragged over the window. A calm tint covers
13
+ * the area without moving anything, and while the pointer is over it a chip at its bottom says what dropping does; a
14
+ * more specific target inside it, such as a folder row or a `FileDropzone`, takes the drop and its sentence while the
15
+ * pointer is over it. Text, links, and
15
16
  * elements dragged within the page never show it. Keep a visible upload button for keyboard and touch users.
16
17
  */
17
18
  export declare function FileDropTarget(props: FileDropTargetProps): JSX.Element;
@@ -21,3 +22,5 @@ export declare function FileDropTarget(props: FileDropTargetProps): JSX.Element;
21
22
  * sentence. Calling the ref again with new options replaces them.
22
23
  */
23
24
  export declare function fileDropTarget(options: FileDropOptions): (element: Element) => void;
25
+ /** @internal A specific target that shows its drop sentence itself, as `FileDropzone` does; the area's chip then stays hidden. */
26
+ export declare function labelledFileDropTarget(options: FileDropOptions): (element: Element) => void;
@@ -25,6 +25,8 @@ export type SelectChipProps<T extends string | number = string> = ValueFieldProp
25
25
  * its size, cannot be opened, is marked busy, and shows a spinner where its
26
26
  * chevron (or, icon-only, its icon) is. */
27
27
  loading?: boolean;
28
+ open?: boolean;
29
+ onOpenChange?: (open: boolean) => void;
28
30
  };
29
31
  export declare function SelectChip<T extends string | number = string>(props: SelectChipProps<T>): JSX.Element;
30
32
  export default SelectChip;
@@ -37,6 +37,8 @@ export type FileDropTargetEntry = {
37
37
  region?: () => Element | undefined;
38
38
  /** Set for regions: where the target itself is rendered; a region whose host is hidden takes no drops. */
39
39
  host?: () => Element | undefined;
40
+ /** Set for specific targets that show the drop sentence themselves, so the area's overlay does not repeat it. */
41
+ labelled?: boolean;
40
42
  };
41
43
  export type FileDropHover = {
42
44
  entry: FileDropTargetEntry;
@@ -123,9 +123,11 @@ export type AppWorkspaceSidebarProps = {
123
123
  /**
124
124
  * Below 48rem (768 px) the sidebar is hidden and the host's mobile
125
125
  * navigation takes over; from 48 to 64rem it is an overlay that a button in
126
- * the workspace's head opens. `"stacked"` keeps it as a block above the
127
- * content below 64rem instead, for overviews whose sidebar is the primary
128
- * object list.
126
+ * the workspace's head opens. `"stacked"` is for overviews whose sidebar is
127
+ * the primary object list: below 64rem its items become one row of chips
128
+ * above the content, and "All" at the end of the row opens the complete
129
+ * sidebar in a sheet (a centered dialog from 48rem). From 64rem it is the
130
+ * regular sidebar column; the element is a `nav` landmark either way.
129
131
  */
130
132
  mobile?: "hidden" | "stacked";
131
133
  resizable?: boolean;
@@ -43,6 +43,9 @@ type DetailPanelSectionBaseProps = {
43
43
  icon?: string;
44
44
  tone?: DetailPanelTone;
45
45
  description?: JSX.Element;
46
+ /** How many things the section lists, as a chip after the title; `0` reads "None yet". */
47
+ count?: number;
48
+ /** Short state after the title, such as "2 of 4 done". */
46
49
  meta?: JSX.Element;
47
50
  class?: string;
48
51
  };
@@ -61,6 +64,10 @@ type DetailPanelActionBaseProps = {
61
64
  leading?: JSX.Element;
62
65
  trailing?: JSX.Element;
63
66
  secondaryAction?: DetailPanelActionSecondary;
67
+ /** Marks the row of the current place, such as the section in view, in the panel's accent. */
68
+ current?: boolean;
69
+ /** Lets the title wrap to two lines instead of ending with an ellipsis. */
70
+ wrap?: boolean;
64
71
  class?: string;
65
72
  };
66
73
  type DetailPanelActionMenuProps = {
@@ -102,5 +109,9 @@ type DetailPanelComponent = ((props: DetailPanelProps) => JSX.Element) & {
102
109
  Section: (props: DetailPanelSectionProps) => JSX.Element;
103
110
  Action: (props: DetailPanelActionProps) => JSX.Element;
104
111
  };
112
+ /** A count chip, or "None yet" for zero; shared by sections and discussions. */
113
+ export declare const DetailPanelCount: (props: {
114
+ count: number;
115
+ }) => JSX.Element;
105
116
  declare const DetailPanel: DetailPanelComponent;
106
117
  export default DetailPanel;
@@ -30,6 +30,14 @@ export type DiscussionListProps = {
30
30
  loadingMore?: boolean;
31
31
  loadMoreLabel?: string;
32
32
  onLoadMore?: () => boolean | void | Promise<boolean | void>;
33
+ /**
34
+ * Shows only the newest `fold` entries and a "Show n older" toggle above them. Expanded, the toggle reads "Show less"
35
+ * and earlier pages load as usual. Omit it to show every loaded entry.
36
+ */
37
+ fold?: number;
38
+ /** Controls the fold, for example to reveal an older entry; `onExpandedChange` requests a change. */
39
+ expanded?: boolean;
40
+ onExpandedChange?: (expanded: boolean) => void;
33
41
  class?: string;
34
42
  };
35
43
  export type DiscussionItemProps = Omit<JSX.LiHTMLAttributes<HTMLLIElement>, "children" | "class"> & {
@@ -0,0 +1,9 @@
1
+ import { type ResizeSeparatorOptions } from "./resize-separator";
2
+ export type ResizeSeparatorProps = Omit<ResizeSeparatorOptions, "value"> & {
3
+ label: string;
4
+ orientation: "vertical" | "horizontal";
5
+ value: number;
6
+ controls?: string;
7
+ class?: string;
8
+ };
9
+ export default function ResizeSeparator(props: ResizeSeparatorProps): import("solid-js").JSX.Element;
@@ -15,6 +15,13 @@ export type TabBarProps = {
15
15
  label: string;
16
16
  /** Up to five destinations; further items are not rendered. Put the rest behind a "More" destination. */
17
17
  items: readonly TabBarItem[];
18
+ /**
19
+ * `bar` (the default) is flat on the page canvas and pads the bottom safe area. `floating` is a rounded bar that the
20
+ * host places above the content, away from the safe areas; its open item is a raised chip. The host may paint it
21
+ * with `--k2b-tab-bar-background`, color its items with `--k2b-tab-bar-color`, and color the open item with
22
+ * `--k2b-tab-bar-selected-background` and `--k2b-tab-bar-selected-color`.
23
+ */
24
+ variant?: "bar" | "floating";
18
25
  class?: string;
19
26
  };
20
27
  /**
@@ -10,6 +10,8 @@ export type TableOfContentsProps = {
10
10
  title?: string;
11
11
  /** Element whose scrolling decides the active section. Defaults to the window. */
12
12
  scrollRoot?: MaybeAccessor<HTMLElement | undefined>;
13
+ /** Element that contains the section headings. Defaults to the document. */
14
+ contentRoot?: MaybeAccessor<HTMLElement | undefined>;
13
15
  /** Stay in view inside the caller's layout. */
14
16
  sticky?: boolean;
15
17
  /** Called when another section becomes active. */
@@ -4,6 +4,8 @@ export type AppWorkspaceControllerOptions = {
4
4
  readState?: () => AppWorkspaceLayoutState | null | undefined;
5
5
  writeState?: (state: AppWorkspaceLayoutState) => void;
6
6
  };
7
+ /** Parks open waiting-detail drawers; focus follows only when it was inside one. */
8
+ export declare const parkWorkspaceDetailDrawers: (root?: ParentNode) => void;
7
9
  /**
8
10
  * Asks the owning `AppWorkspace.Sidebar` to hide. The sidebar's `hidden` prop
9
11
  * stays application state, so the controller only requests the change.
@@ -0,0 +1,15 @@
1
+ /** Counts and list folding shared by detail panel sections and discussions. */
2
+ declare const detailPanelMessages: import("@k2b/stdlib").Catalog<{
3
+ noneYet: string;
4
+ showOlder: ({ count }: {
5
+ count: number;
6
+ }) => string;
7
+ showMore: ({ count }: {
8
+ count: number;
9
+ }) => string;
10
+ showLess: string;
11
+ }>;
12
+ export type DetailPanelMessages = ReturnType<(typeof detailPanelMessages)["resolve"]>["t"];
13
+ export declare const useDetailPanelMessages: () => (() => DetailPanelMessages);
14
+ export declare const checkDetailPanelMessages: () => import("@k2b/stdlib").CatalogIssue[];
15
+ export {};
@@ -3,7 +3,7 @@ export { default as AppOverview } from "./AppOverview";
3
3
  export type { AppWorkspaceBottomDrawerHeight, AppWorkspaceBottomDrawerProps, AppWorkspaceContentProps, AppWorkspaceDetailProps, AppWorkspaceDetailWidth, AppWorkspaceMainPaneProps, AppWorkspaceMainProps, AppWorkspaceNavTreeItemProps, AppWorkspaceNavTreeMove, AppWorkspaceNavTreeProps, AppWorkspaceProps, AppWorkspaceSidebarAccessoryVisibility, AppWorkspaceSidebarBodyProps, AppWorkspaceSidebarIconActionProps, AppWorkspaceSidebarIconActionTone, AppWorkspaceSidebarIconGridProps, AppWorkspaceSidebarItemActionProps, AppWorkspaceSidebarItemActionsProps, AppWorkspaceSidebarItemIconProps, AppWorkspaceSidebarItemLabelProps, AppWorkspaceSidebarItemMetaProps, AppWorkspaceSidebarItemProps, AppWorkspaceSidebarItemStatusProps, AppWorkspaceSidebarItemTone, AppWorkspaceSidebarProps, AppWorkspaceSidebarSectionProps, AppWorkspaceSidebarVisibility, } from "./AppWorkspace";
4
4
  export { default as AppWorkspace } from "./AppWorkspace";
5
5
  export type { AppWorkspaceControllerOptions } from "./app-workspace-controller";
6
- export { installAppWorkspaceController } from "./app-workspace-controller";
6
+ export { installAppWorkspaceController, parkWorkspaceDetailDrawers } from "./app-workspace-controller";
7
7
  export type { AppWorkspaceLayoutState, AppWorkspaceResizeKind, } from "./app-workspace-state";
8
8
  export { APP_WORKSPACE_DETAIL_DEFAULT, APP_WORKSPACE_DETAIL_MAX, APP_WORKSPACE_DETAIL_MIN, APP_WORKSPACE_DRAWER_DEFAULT, APP_WORKSPACE_DRAWER_MAX, APP_WORKSPACE_DRAWER_MIN, APP_WORKSPACE_MAIN_MIN, APP_WORKSPACE_MAIN_MIN_HEIGHT, APP_WORKSPACE_PANE_DEFAULT, APP_WORKSPACE_PANE_MAX, APP_WORKSPACE_PANE_MIN, APP_WORKSPACE_SIDEBAR_COLLAPSE_THRESHOLD, APP_WORKSPACE_SIDEBAR_COLLAPSED, APP_WORKSPACE_SIDEBAR_DEFAULT, APP_WORKSPACE_SIDEBAR_MAX, APP_WORKSPACE_SIDEBAR_MIN, appWorkspaceLayoutStyle, appWorkspacePanelVariable, appWorkspaceResizeLimits, normalizeAppWorkspaceLayoutState, parseAppWorkspaceLayoutState, resolveAppWorkspaceSidebarWidth, safeAppWorkspacePanelId, serializeAppWorkspaceLayoutState, shouldCollapseAppWorkspaceSidebar, } from "./app-workspace-state";
9
9
  export { type BottomSheetProps, bottomSheetAdaptiveOptions, bottomSheetOptions, default as BottomSheet } from "./BottomSheet";
@@ -32,6 +32,8 @@ export { default as PullToRefresh } from "./PullToRefresh";
32
32
  export { installPageTitleController } from "./page-title-controller";
33
33
  export type { AddPanesItemOptions, PanesDirection, PanesGroup, PanesIntent, PanesLayout, PanesNode, PanesPath, PanesPathSegment, PanesSide, PanesSplit, } from "./panes-layout";
34
34
  export { activatePanesItem, addPanesItem, applyPanesIntent, createPanesLayout, isPanesItemVisible, PANES_LAYOUT_VERSION, parsePanesLayout, reconcilePanesLayout, removePanesItem, resizePanesSplit, } from "./panes-layout";
35
+ export { default as ResizeSeparator, type ResizeSeparatorProps } from "./ResizeSeparator";
36
+ export { attachResizeSeparator, type ResizeSeparatorOptions } from "./resize-separator";
35
37
  export type { ScrollAreaProps } from "./ScrollArea";
36
38
  export { default as ScrollArea } from "./ScrollArea";
37
39
  export type { SettingsFieldControlProps, SettingsFieldProps, SettingsGroupActionProps, SettingsGroupProps, SettingsPageProps, SettingsPanelFooterProps, SettingsSaveBarProps, SettingsSectionProps, } from "./Settings";