@k2b/ui 0.17.0 → 0.19.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 (228) hide show
  1. package/README.md +3 -2
  2. package/dist/browser/actions/ContextMenu.js +3 -1
  3. package/dist/browser/actions/ContextMenu.js.map +1 -1
  4. package/dist/browser/actions/Dropdown.js +91 -46
  5. package/dist/browser/actions/Dropdown.js.map +1 -1
  6. package/dist/browser/actions/FilterChip.js +4 -1
  7. package/dist/browser/actions/FilterChip.js.map +1 -1
  8. package/dist/browser/chat/ChatComposer.js +1311 -565
  9. package/dist/browser/chat/ChatComposer.js.map +1 -1
  10. package/dist/browser/chat/ChatPrimitives.js +9 -6
  11. package/dist/browser/chat/ChatPrimitives.js.map +1 -1
  12. package/dist/browser/chat/chat-behavior.js +9 -0
  13. package/dist/browser/chat/chat-behavior.js.map +1 -1
  14. package/dist/browser/chat/index.js.map +1 -1
  15. package/dist/browser/chat/types.js.map +1 -1
  16. package/dist/browser/content/Calendar.js +579 -533
  17. package/dist/browser/content/Calendar.js.map +1 -1
  18. package/dist/browser/content/FileView.js +62 -36
  19. package/dist/browser/content/FileView.js.map +1 -1
  20. package/dist/browser/content/Lightbox.js +76 -40
  21. package/dist/browser/content/Lightbox.js.map +1 -1
  22. package/dist/browser/content/MarkdownView.js +9 -3
  23. package/dist/browser/content/MarkdownView.js.map +1 -1
  24. package/dist/browser/content/PdfPreview.js +146 -79
  25. package/dist/browser/content/PdfPreview.js.map +1 -1
  26. package/dist/browser/content/Timeline.js +1038 -0
  27. package/dist/browser/content/Timeline.js.map +1 -0
  28. package/dist/browser/content/VideoPlayer.js +299 -0
  29. package/dist/browser/content/VideoPlayer.js.map +1 -0
  30. package/dist/browser/content/chart-inspection.js +7 -2
  31. package/dist/browser/content/chart-inspection.js.map +1 -1
  32. package/dist/browser/content/file-view-preview.js +2 -2
  33. package/dist/browser/content/file-view-preview.js.map +1 -1
  34. package/dist/browser/content/index.js +3 -0
  35. package/dist/browser/content/index.js.map +1 -1
  36. package/dist/browser/content/markdown-links.js +178 -0
  37. package/dist/browser/content/markdown-links.js.map +1 -0
  38. package/dist/browser/content/timeline-model.js +579 -0
  39. package/dist/browser/content/timeline-model.js.map +1 -0
  40. package/dist/browser/feedback/dialog-core.js +26 -14
  41. package/dist/browser/feedback/dialog-core.js.map +1 -1
  42. package/dist/browser/inputs/ChoiceChips.js +66 -0
  43. package/dist/browser/inputs/ChoiceChips.js.map +1 -0
  44. package/dist/browser/inputs/ChoiceGroups.js +53 -12
  45. package/dist/browser/inputs/ChoiceGroups.js.map +1 -1
  46. package/dist/browser/inputs/FileDropTarget.js +129 -0
  47. package/dist/browser/inputs/FileDropTarget.js.map +1 -0
  48. package/dist/browser/inputs/FileInputs.js +84 -43
  49. package/dist/browser/inputs/FileInputs.js.map +1 -1
  50. package/dist/browser/inputs/SignatureInput.js +558 -0
  51. package/dist/browser/inputs/SignatureInput.js.map +1 -0
  52. package/dist/browser/inputs/emoji/EmojiPicker.js +841 -0
  53. package/dist/browser/inputs/emoji/EmojiPicker.js.map +1 -0
  54. package/dist/browser/inputs/emoji/emoji-data.js +1903 -0
  55. package/dist/browser/inputs/emoji/emoji-data.js.map +1 -0
  56. package/dist/browser/inputs/emoji/emoji-index.js +209 -0
  57. package/dist/browser/inputs/emoji/emoji-index.js.map +1 -0
  58. package/dist/browser/inputs/emoji/emoji-messages.js +64 -0
  59. package/dist/browser/inputs/emoji/emoji-messages.js.map +1 -0
  60. package/dist/browser/inputs/file-drop.js +338 -0
  61. package/dist/browser/inputs/file-drop.js.map +1 -0
  62. package/dist/browser/inputs/index.js +6 -0
  63. package/dist/browser/inputs/index.js.map +1 -1
  64. package/dist/browser/inputs/markdown/MarkdownEditor.js +72 -78
  65. package/dist/browser/inputs/markdown/MarkdownEditor.js.map +1 -1
  66. package/dist/browser/inputs/markdown/actions.js +48 -2
  67. package/dist/browser/inputs/markdown/actions.js.map +1 -1
  68. package/dist/browser/inputs/markdown/code-zone.js +38 -2
  69. package/dist/browser/inputs/markdown/code-zone.js.map +1 -1
  70. package/dist/browser/inputs/signature-messages.js +39 -0
  71. package/dist/browser/inputs/signature-messages.js.map +1 -0
  72. package/dist/browser/inputs/signature.js +208 -0
  73. package/dist/browser/inputs/signature.js.map +1 -0
  74. package/dist/browser/internal/render-error.js +49 -0
  75. package/dist/browser/internal/render-error.js.map +1 -0
  76. package/dist/browser/intl/messages.js +205 -4
  77. package/dist/browser/intl/messages.js.map +1 -1
  78. package/dist/browser/layout/AppWorkspace.js +483 -218
  79. package/dist/browser/layout/AppWorkspace.js.map +1 -1
  80. package/dist/browser/layout/FloatingWindow.js +4 -1
  81. package/dist/browser/layout/FloatingWindow.js.map +1 -1
  82. package/dist/browser/layout/Navigation.js +274 -197
  83. package/dist/browser/layout/Navigation.js.map +1 -1
  84. package/dist/browser/layout/SidebarItemPreview.js +5 -1
  85. package/dist/browser/layout/SidebarItemPreview.js.map +1 -1
  86. package/dist/browser/layout/index.js.map +1 -1
  87. package/dist/browser/layout/navigation-model.js +2 -0
  88. package/dist/browser/layout/navigation-model.js.map +1 -1
  89. package/dist/browser/surfaces/NoticeCard.js +47 -44
  90. package/dist/browser/surfaces/NoticeCard.js.map +1 -1
  91. package/dist/browser/surfaces/ResourceCard.js +212 -0
  92. package/dist/browser/surfaces/ResourceCard.js.map +1 -0
  93. package/dist/browser/surfaces/index.js +1 -0
  94. package/dist/browser/surfaces/index.js.map +1 -1
  95. package/dist/licenses/emojibase-data.txt +21 -0
  96. package/dist/ssr/actions/ContextMenu.js +3 -1
  97. package/dist/ssr/actions/ContextMenu.js.map +1 -1
  98. package/dist/ssr/actions/Dropdown.js +49 -12
  99. package/dist/ssr/actions/Dropdown.js.map +1 -1
  100. package/dist/ssr/actions/FilterChip.js +4 -1
  101. package/dist/ssr/actions/FilterChip.js.map +1 -1
  102. package/dist/ssr/chat/ChatComposer.js +823 -221
  103. package/dist/ssr/chat/ChatComposer.js.map +1 -1
  104. package/dist/ssr/chat/ChatPrimitives.js +9 -6
  105. package/dist/ssr/chat/ChatPrimitives.js.map +1 -1
  106. package/dist/ssr/chat/chat-behavior.js +9 -0
  107. package/dist/ssr/chat/chat-behavior.js.map +1 -1
  108. package/dist/ssr/chat/index.js.map +1 -1
  109. package/dist/ssr/chat/types.js.map +1 -1
  110. package/dist/ssr/content/Calendar.js +183 -142
  111. package/dist/ssr/content/Calendar.js.map +1 -1
  112. package/dist/ssr/content/FileView.js +30 -6
  113. package/dist/ssr/content/FileView.js.map +1 -1
  114. package/dist/ssr/content/Lightbox.js +19 -5
  115. package/dist/ssr/content/Lightbox.js.map +1 -1
  116. package/dist/ssr/content/MarkdownView.js +9 -3
  117. package/dist/ssr/content/MarkdownView.js.map +1 -1
  118. package/dist/ssr/content/PdfPreview.js +77 -36
  119. package/dist/ssr/content/PdfPreview.js.map +1 -1
  120. package/dist/ssr/content/Timeline.js +804 -0
  121. package/dist/ssr/content/Timeline.js.map +1 -0
  122. package/dist/ssr/content/VideoPlayer.js +228 -0
  123. package/dist/ssr/content/VideoPlayer.js.map +1 -0
  124. package/dist/ssr/content/chart-inspection.js +7 -2
  125. package/dist/ssr/content/chart-inspection.js.map +1 -1
  126. package/dist/ssr/content/file-view-preview.js +2 -2
  127. package/dist/ssr/content/file-view-preview.js.map +1 -1
  128. package/dist/ssr/content/index.js +3 -0
  129. package/dist/ssr/content/index.js.map +1 -1
  130. package/dist/ssr/content/markdown-links.js +178 -0
  131. package/dist/ssr/content/markdown-links.js.map +1 -0
  132. package/dist/ssr/content/timeline-model.js +579 -0
  133. package/dist/ssr/content/timeline-model.js.map +1 -0
  134. package/dist/ssr/feedback/dialog-core.js +26 -14
  135. package/dist/ssr/feedback/dialog-core.js.map +1 -1
  136. package/dist/ssr/inputs/ChoiceChips.js +66 -0
  137. package/dist/ssr/inputs/ChoiceChips.js.map +1 -0
  138. package/dist/ssr/inputs/ChoiceGroups.js +12 -4
  139. package/dist/ssr/inputs/ChoiceGroups.js.map +1 -1
  140. package/dist/ssr/inputs/FileDropTarget.js +103 -0
  141. package/dist/ssr/inputs/FileDropTarget.js.map +1 -0
  142. package/dist/ssr/inputs/FileInputs.js +49 -12
  143. package/dist/ssr/inputs/FileInputs.js.map +1 -1
  144. package/dist/ssr/inputs/SignatureInput.js +404 -0
  145. package/dist/ssr/inputs/SignatureInput.js.map +1 -0
  146. package/dist/ssr/inputs/emoji/EmojiPicker.js +551 -0
  147. package/dist/ssr/inputs/emoji/EmojiPicker.js.map +1 -0
  148. package/dist/ssr/inputs/emoji/emoji-data.js +1903 -0
  149. package/dist/ssr/inputs/emoji/emoji-data.js.map +1 -0
  150. package/dist/ssr/inputs/emoji/emoji-index.js +209 -0
  151. package/dist/ssr/inputs/emoji/emoji-index.js.map +1 -0
  152. package/dist/ssr/inputs/emoji/emoji-messages.js +64 -0
  153. package/dist/ssr/inputs/emoji/emoji-messages.js.map +1 -0
  154. package/dist/ssr/inputs/file-drop.js +338 -0
  155. package/dist/ssr/inputs/file-drop.js.map +1 -0
  156. package/dist/ssr/inputs/index.js +6 -0
  157. package/dist/ssr/inputs/index.js.map +1 -1
  158. package/dist/ssr/inputs/markdown/MarkdownEditor.js +14 -2
  159. package/dist/ssr/inputs/markdown/MarkdownEditor.js.map +1 -1
  160. package/dist/ssr/inputs/markdown/actions.js +48 -2
  161. package/dist/ssr/inputs/markdown/actions.js.map +1 -1
  162. package/dist/ssr/inputs/markdown/code-zone.js +38 -2
  163. package/dist/ssr/inputs/markdown/code-zone.js.map +1 -1
  164. package/dist/ssr/inputs/signature-messages.js +39 -0
  165. package/dist/ssr/inputs/signature-messages.js.map +1 -0
  166. package/dist/ssr/inputs/signature.js +208 -0
  167. package/dist/ssr/inputs/signature.js.map +1 -0
  168. package/dist/ssr/internal/render-error.js +49 -0
  169. package/dist/ssr/internal/render-error.js.map +1 -0
  170. package/dist/ssr/intl/messages.js +205 -4
  171. package/dist/ssr/intl/messages.js.map +1 -1
  172. package/dist/ssr/layout/AppWorkspace.js +264 -47
  173. package/dist/ssr/layout/AppWorkspace.js.map +1 -1
  174. package/dist/ssr/layout/FloatingWindow.js +4 -1
  175. package/dist/ssr/layout/FloatingWindow.js.map +1 -1
  176. package/dist/ssr/layout/Navigation.js +169 -122
  177. package/dist/ssr/layout/Navigation.js.map +1 -1
  178. package/dist/ssr/layout/SidebarItemPreview.js +5 -1
  179. package/dist/ssr/layout/SidebarItemPreview.js.map +1 -1
  180. package/dist/ssr/layout/index.js.map +1 -1
  181. package/dist/ssr/layout/navigation-model.js +2 -0
  182. package/dist/ssr/layout/navigation-model.js.map +1 -1
  183. package/dist/ssr/surfaces/NoticeCard.js +17 -12
  184. package/dist/ssr/surfaces/NoticeCard.js.map +1 -1
  185. package/dist/ssr/surfaces/ResourceCard.js +115 -0
  186. package/dist/ssr/surfaces/ResourceCard.js.map +1 -0
  187. package/dist/ssr/surfaces/index.js +1 -0
  188. package/dist/ssr/surfaces/index.js.map +1 -1
  189. package/dist/styles.css +1 -1
  190. package/dist/types/actions/Dropdown.d.ts +13 -1
  191. package/dist/types/actions/FilterChip.d.ts +5 -0
  192. package/dist/types/chat/ChatComposer.d.ts +24 -1
  193. package/dist/types/chat/ChatPrimitives.d.ts +1 -1
  194. package/dist/types/chat/chat-behavior.d.ts +15 -0
  195. package/dist/types/chat/index.d.ts +1 -1
  196. package/dist/types/chat/types.d.ts +34 -0
  197. package/dist/types/content/Calendar.d.ts +28 -8
  198. package/dist/types/content/Lightbox.d.ts +8 -0
  199. package/dist/types/content/Timeline.d.ts +49 -0
  200. package/dist/types/content/VideoPlayer.d.ts +41 -0
  201. package/dist/types/content/index.d.ts +6 -2
  202. package/dist/types/content/markdown-links.d.ts +66 -0
  203. package/dist/types/content/timeline-model.d.ts +148 -0
  204. package/dist/types/feedback/dialog-core.d.ts +1 -1
  205. package/dist/types/inputs/ChoiceChips.d.ts +20 -0
  206. package/dist/types/inputs/ChoiceGroups.d.ts +11 -2
  207. package/dist/types/inputs/FileDropTarget.d.ts +23 -0
  208. package/dist/types/inputs/FileInputs.d.ts +8 -0
  209. package/dist/types/inputs/SignatureInput.d.ts +22 -0
  210. package/dist/types/inputs/emoji/EmojiPicker.d.ts +42 -0
  211. package/dist/types/inputs/emoji/emoji-data.d.ts +2 -0
  212. package/dist/types/inputs/emoji/emoji-index.d.ts +109 -0
  213. package/dist/types/inputs/emoji/emoji-messages.d.ts +30 -0
  214. package/dist/types/inputs/file-drop.d.ts +80 -0
  215. package/dist/types/inputs/index.d.ts +12 -0
  216. package/dist/types/inputs/markdown/actions.d.ts +4 -0
  217. package/dist/types/inputs/markdown/code-zone.d.ts +7 -0
  218. package/dist/types/inputs/signature-messages.d.ts +11 -0
  219. package/dist/types/inputs/signature.d.ts +72 -0
  220. package/dist/types/internal/render-error.d.ts +13 -0
  221. package/dist/types/intl/messages.d.ts +101 -0
  222. package/dist/types/layout/AppWorkspace.d.ts +38 -0
  223. package/dist/types/layout/SidebarItemPreview.d.ts +2 -0
  224. package/dist/types/layout/index.d.ts +2 -2
  225. package/dist/types/layout/navigation-model.d.ts +18 -0
  226. package/dist/types/surfaces/ResourceCard.d.ts +31 -0
  227. package/dist/types/surfaces/index.d.ts +2 -0
  228. package/package.json +5 -4
@@ -0,0 +1,109 @@
1
+ /**
2
+ * The emoji dataset behind `EmojiPicker` and the composer's `:shortcode` completion. The data (about 80 kB compressed)
3
+ * loads on first use, so a page that never opens either does not download it.
4
+ */
5
+ /** `0` is the default yellow; `1` (light) to `5` (dark) are the Fitzpatrick modifiers. */
6
+ export type EmojiSkinTone = 0 | 1 | 2 | 3 | 4 | 5;
7
+ export declare const EMOJI_SKIN_TONES: readonly EmojiSkinTone[];
8
+ /** The groups in their order. Emojibase numbers them 0 to 9; 2 holds skin-tone parts and never appears. */
9
+ export declare const EMOJI_GROUPS: readonly [{
10
+ readonly id: 0;
11
+ readonly key: "smileys";
12
+ readonly icon: "ti ti-mood-smile";
13
+ }, {
14
+ readonly id: 1;
15
+ readonly key: "people";
16
+ readonly icon: "ti ti-hand-stop";
17
+ }, {
18
+ readonly id: 3;
19
+ readonly key: "animals";
20
+ readonly icon: "ti ti-paw";
21
+ }, {
22
+ readonly id: 4;
23
+ readonly key: "food";
24
+ readonly icon: "ti ti-tools-kitchen-2";
25
+ }, {
26
+ readonly id: 5;
27
+ readonly key: "travel";
28
+ readonly icon: "ti ti-plane";
29
+ }, {
30
+ readonly id: 6;
31
+ readonly key: "activities";
32
+ readonly icon: "ti ti-ball-football";
33
+ }, {
34
+ readonly id: 7;
35
+ readonly key: "objects";
36
+ readonly icon: "ti ti-bulb";
37
+ }, {
38
+ readonly id: 8;
39
+ readonly key: "symbols";
40
+ readonly icon: "ti ti-heart";
41
+ }, {
42
+ readonly id: 9;
43
+ readonly key: "flags";
44
+ readonly icon: "ti ti-flag";
45
+ }];
46
+ export type EmojiGroupKey = (typeof EMOJI_GROUPS)[number]["key"];
47
+ export type EmojiEntry = {
48
+ emoji: string;
49
+ group: number;
50
+ /** The light variant; the other tones swap its modifier. Absent for emoji without skin tones. */
51
+ light?: string;
52
+ name: {
53
+ en: string;
54
+ de: string;
55
+ };
56
+ shortcodes: readonly string[];
57
+ /** Normalized names, keywords and shortcodes for search. */
58
+ search: {
59
+ names: readonly string[];
60
+ keywords: readonly string[];
61
+ shortcodes: readonly string[];
62
+ words: readonly string[];
63
+ };
64
+ };
65
+ export type EmojiIndex = {
66
+ entries: readonly EmojiEntry[];
67
+ /** Every emoji and skin-tone variant, without presentation selectors, to its entry. Look up with `findEmoji`. */
68
+ byEmoji: ReadonlyMap<string, EmojiEntry>;
69
+ byShortcode: ReadonlyMap<string, EmojiEntry>;
70
+ };
71
+ /** Lower case without accents, so "lacheln", "laecheln" and "Lächeln" meet; `_` and `-` separate words. */
72
+ export declare const normalizeEmojiQuery: (value: string) => string;
73
+ export declare const parseEmojiData: (data: string) => EmojiIndex;
74
+ /** Loads and indexes the dataset once. A failed load is retried on the next call. */
75
+ export declare const loadEmojiIndex: () => Promise<EmojiIndex>;
76
+ /** The entry of an emoji in any skin tone, with or without presentation selectors. */
77
+ export declare const findEmoji: (index: EmojiIndex, emoji: string) => EmojiEntry | undefined;
78
+ /** The emoji in `tone`; emoji without skin tones stay as they are. */
79
+ export declare const emojiInTone: (entry: EmojiEntry, tone: EmojiSkinTone) => string;
80
+ /** The name in the render language: German for `de` locales, English otherwise. */
81
+ export declare const emojiName: (entry: EmojiEntry, locale: string) => string;
82
+ /** Matches in English and German names, keywords and shortcodes, best first and otherwise in Unicode order. */
83
+ export declare const searchEmoji: (index: EmojiIndex, query: string, limit?: number) => EmojiEntry[];
84
+ /**
85
+ * The suggestions for a `:shortcode` being typed. Only the start of a shortcode, name, word or keyword counts, and a
86
+ * leading sign must start a shortcode, as in `:+1` and `:-1`: emoticons such as `:DD`, `:-D` or `:-P` find nothing,
87
+ * so Enter still sends them.
88
+ */
89
+ export declare const suggestEmoji: (index: EmojiIndex, query: string, limit: number) => EmojiEntry[];
90
+ /** As many recent emoji as the picker shows: three rows. */
91
+ export declare const RECENT_EMOJI_LIMIT = 24;
92
+ /** The recent list after `emoji` was used: it moves to the front, once, and the oldest drop off. */
93
+ export declare const rememberEmoji: (recent: readonly string[], emoji: string) => string[];
94
+ export type EmojiShortcodeQuery = {
95
+ start: number;
96
+ end: number;
97
+ query: string;
98
+ };
99
+ /**
100
+ * The `:shortcode` being typed at the caret: a colon at the start or after a space or "(", then at least two letters,
101
+ * digits, "_", "+" or "-". Code, URLs ("https://") and times ("10:30") are no queries.
102
+ */
103
+ export declare const emojiShortcodeQuery: (text: string, caret: number, selectionEnd?: number) => EmojiShortcodeQuery | null;
104
+ /** A complete `:shortcode:` just typed at the caret, such as `:thumbsup:`, with its range. */
105
+ export declare const completedEmojiShortcode: (text: string, caret: number) => {
106
+ start: number;
107
+ end: number;
108
+ shortcode: string;
109
+ } | null;
@@ -0,0 +1,30 @@
1
+ /** The picker's own strings. They live with the picker, so pages without it do not carry them. */
2
+ declare const emojiMessages: import("@k2b/stdlib").Catalog<{
3
+ emojiPicker: string;
4
+ emojiSearch: string;
5
+ emojiGroups: string;
6
+ emojiRecent: string;
7
+ emojiSmileys: string;
8
+ emojiPeople: string;
9
+ emojiAnimals: string;
10
+ emojiFood: string;
11
+ emojiTravel: string;
12
+ emojiActivities: string;
13
+ emojiObjects: string;
14
+ emojiSymbols: string;
15
+ emojiFlags: string;
16
+ emojiSkinTone: string;
17
+ emojiToneDefault: string;
18
+ emojiToneLight: string;
19
+ emojiToneMediumLight: string;
20
+ emojiToneMedium: string;
21
+ emojiToneMediumDark: string;
22
+ emojiToneDark: string;
23
+ emojiNoResults: string;
24
+ emojiLoadFailed: string;
25
+ }>;
26
+ export type EmojiMessages = ReturnType<(typeof emojiMessages)["resolve"]>["t"];
27
+ /** Resolved from the inherited render locale, like the rest of @k2b/ui. */
28
+ export declare const useEmojiMessages: () => (() => EmojiMessages);
29
+ export declare const checkEmojiMessages: () => import("@k2b/stdlib").CatalogIssue[];
30
+ export {};
@@ -0,0 +1,80 @@
1
+ import { type Accessor } from "solid-js";
2
+ import type { UiMessages } from "../intl/messages";
3
+ export type FileDropRejection = {
4
+ file: File;
5
+ /** `type` misses `accept`, `size` exceeds `maxSize`, `count` is past `maxFiles` or the single file of `multiple={false}`. */
6
+ reason: "type" | "size" | "count";
7
+ };
8
+ export type FileDropDetails = {
9
+ /** The drop's data, readable only while `onDrop` runs synchronously; read folder entries before the first `await`. */
10
+ dataTransfer: DataTransfer;
11
+ /** Files left out by `accept`, `maxSize`, or the file count; the user has already been told. */
12
+ rejected: readonly FileDropRejection[];
13
+ };
14
+ export type FileDropOptions = {
15
+ /** One sentence that says what dropping does here, such as "Drop to attach to the message". */
16
+ label: string;
17
+ /** `<input accept>` syntax, such as `"image/*,.pdf"`. */
18
+ accept?: string;
19
+ /** Defaults to `true`; `false` takes the first fitting file. */
20
+ multiple?: boolean;
21
+ /** The most files one drop hands over. */
22
+ maxFiles?: number;
23
+ /** The largest file in bytes. */
24
+ maxSize?: number;
25
+ disabled?: boolean;
26
+ /**
27
+ * Called synchronously in the drop with the files that fit. `files` is empty only when the drop carried no file
28
+ * objects at all, as some engines hand over dropped folders; `details.dataTransfer.items` still has their entries.
29
+ */
30
+ onDrop: (files: File[], details: FileDropDetails) => void | Promise<void>;
31
+ };
32
+ export type FileDropTargetEntry = {
33
+ options: FileDropOptions;
34
+ messages: () => UiMessages;
35
+ locale: () => string;
36
+ /** Set for regions: the area the overlay covers. Specific targets are keyed by their element. */
37
+ region?: () => Element | undefined;
38
+ /** Set for regions: where the target itself is rendered; a region whose host is hidden takes no drops. */
39
+ host?: () => Element | undefined;
40
+ };
41
+ export type FileDropHover = {
42
+ entry: FileDropTargetEntry;
43
+ element: Element;
44
+ invalid: boolean;
45
+ };
46
+ export type FileDropSession = {
47
+ /** Regions that show their overlay during this drag: eligible, visible, and not inside another shown region. */
48
+ shown: readonly FileDropTargetEntry[];
49
+ hover: FileDropHover | null;
50
+ };
51
+ export type FileDropEngine = {
52
+ session: Accessor<FileDropSession | null>;
53
+ /** Changes on every drag movement, so overlays can follow a region that moved or resized. */
54
+ frame: Accessor<number>;
55
+ addRegion: (entry: FileDropTargetEntry) => () => void;
56
+ setTarget: (element: Element, entry: FileDropTargetEntry) => void;
57
+ };
58
+ /** The marker a hovered specific target carries for its ring; regions show their own overlay instead. */
59
+ export declare const FILE_DROP_ATTRIBUTE = "data-file-drop";
60
+ /** Where a region without `for` looks for its area: the nearest dialog, workspace detail, or workspace main area. */
61
+ export declare const FILE_DROP_DEFAULT_REGION = "dialog, .k2b-app-workspace__detail, .k2b-app-workspace__main";
62
+ /** Sorts dropped files into the ones a target takes and the ones it leaves out, in drop order. */
63
+ export declare const partitionDroppedFiles: (files: readonly File[], options: Pick<FileDropOptions, "accept" | "multiple" | "maxFiles" | "maxSize">) => {
64
+ accepted: File[];
65
+ rejected: FileDropRejection[];
66
+ };
67
+ /**
68
+ * During a drag only the types are readable, and only in some engines. A drag is refused when none of them can fit.
69
+ * An extension in `accept` matches by file name, and systems report differing types for one extension (a `.csv` may be
70
+ * `application/vnd.ms-excel`), so with one the drop decides.
71
+ */
72
+ export declare const refusesDraggedTypes: (types: readonly string[], accept: string | undefined) => boolean;
73
+ export declare const fileDropRejectionMessage: (rejected: readonly FileDropRejection[], options: Pick<FileDropOptions, "multiple" | "maxFiles" | "maxSize">, messages: UiMessages, locale: string) => string;
74
+ /**
75
+ * The document an element lives in. A freshly rendered element still belongs to the inert document of the template it
76
+ * was cloned from; until it is inserted, that is the page's document.
77
+ */
78
+ export declare const liveDocument: (element: Element) => Document;
79
+ /** The one drag tracker of a document, shared by every drop target in it. */
80
+ export declare const fileDropEngine: (doc: Document) => FileDropEngine;
@@ -6,6 +6,8 @@ export type { CheckboxProps } from "./Checkbox";
6
6
  export { Checkbox } from "./Checkbox";
7
7
  export type { CheckboxCardProps } from "./CheckboxCard";
8
8
  export { CheckboxCard } from "./CheckboxCard";
9
+ export type { ChoiceChipOption, ChoiceChipsProps } from "./ChoiceChips";
10
+ export { ChoiceChips } from "./ChoiceChips";
9
11
  export type { ColorInputProps, PinInputProps, SliderProps, } from "./ChoiceInputs";
10
12
  export { ColorInput, PinInput, Slider } from "./ChoiceInputs";
11
13
  export type { ComboboxOption, ComboboxProps } from "./Combobox";
@@ -15,6 +17,12 @@ export type { Completion, QueryContext, SuggestContext, Suggestion, } from "./co
15
17
  export { abbreviations } from "./completion";
16
18
  export type { DatePickerBaseProps, DatePickerProps, DatePreset, DateRangePickerProps, DateRangeValue, DateTimePickerProps, DurationPreset, } from "./DatePicker";
17
19
  export { DatePicker, DateRangePicker, DateTimePicker } from "./DatePicker";
20
+ export type { EmojiPickerPopoverProps, EmojiPickerProps } from "./emoji/EmojiPicker";
21
+ export { EmojiPicker } from "./emoji/EmojiPicker";
22
+ export type { EmojiSkinTone } from "./emoji/emoji-index";
23
+ export { rememberEmoji } from "./emoji/emoji-index";
24
+ export type { FileDropDetails, FileDropOptions, FileDropRejection, FileDropTargetProps } from "./FileDropTarget";
25
+ export { FileDropTarget, fileDropTarget } from "./FileDropTarget";
18
26
  export type { FileDropzoneProps, ImageCropperProps, ImageInputProps } from "./FileInputs";
19
27
  export { FileDropzone, ImageCropper, ImageInput } from "./FileInputs";
20
28
  export type { DateContext, FieldProps, MaybeAccessor, ValueFieldProps } from "./field-contract";
@@ -33,10 +41,14 @@ export type { ChoiceAppearance, SelectGridSize, SelectGroup, SelectOption, Selec
33
41
  export { Select } from "./Select";
34
42
  export type { SelectChipOption, SelectChipProps } from "./SelectChip";
35
43
  export { SelectChip } from "./SelectChip";
44
+ export type { SignatureInputProps } from "./SignatureInput";
45
+ export { SignatureInput } from "./SignatureInput";
36
46
  export type { IconInputProps, IconOption } from "./SpecialInputs";
37
47
  export { IconInput } from "./SpecialInputs";
38
48
  export type { SwitchProps } from "./Switch";
39
49
  export { Switch } from "./Switch";
50
+ export type { SignaturePngOptions, SignatureValue } from "./signature";
51
+ export { parseSignature, signatureToPng } from "./signature";
40
52
  export type { TagEditorItem, TagEditorLabels, TagEditorProps, TagEditorValue } from "./TagEditor";
41
53
  export { TagEditor } from "./TagEditor";
42
54
  export type { TagsInputProps } from "./TagsInput";
@@ -1,8 +1,12 @@
1
1
  export declare const toggleBold: (textarea: HTMLTextAreaElement) => void;
2
2
  export declare const toggleItalic: (textarea: HTMLTextAreaElement) => void;
3
3
  export declare const toggleCode: (textarea: HTMLTextAreaElement) => void;
4
+ /** Wraps the selection in `marker`, or unwraps it; without a selection the caret lands between two markers. */
5
+ export declare const toggleInlineMarker: (textarea: HTMLTextAreaElement, marker: string) => void;
4
6
  export declare const insertLink: (textarea: HTMLTextAreaElement, url?: string) => void;
5
7
  export declare const toggleHeading: (textarea: HTMLTextAreaElement, level: 1 | 2 | 3) => void;
6
8
  export declare const toggleBulletList: (textarea: HTMLTextAreaElement) => void;
9
+ /** Puts the selected lines between ``` fences. Inside a fenced block, from its opening line on, it removes that block's fences. */
10
+ export declare const toggleCodeBlock: (textarea: HTMLTextAreaElement) => void;
7
11
  export declare const toggleQuote: (textarea: HTMLTextAreaElement) => void;
8
12
  export declare const toggleNumberedList: (textarea: HTMLTextAreaElement) => void;
@@ -1 +1,8 @@
1
+ /** Whether `line` closes a block that `marker` opened: the same character, at least as many, nothing after it. */
2
+ export declare const closesCodeFence: (line: string, marker: string) => boolean;
3
+ /** The fenced code block that is still open at `position`, judged by the text before it: its opening line's start and marker. */
4
+ export declare const openCodeFence: (text: string, position: number) => {
5
+ start: number;
6
+ marker: string;
7
+ } | null;
1
8
  export declare const isInCodeZone: (text: string, position: number) => boolean;
@@ -0,0 +1,11 @@
1
+ export declare const useSignatureMessages: () => () => {
2
+ method: string;
3
+ draw: string;
4
+ type: string;
5
+ signHere: string;
6
+ drawArea: string;
7
+ drawn: string;
8
+ typeName: string;
9
+ undo: string;
10
+ };
11
+ export declare const checkSignatureMessages: () => import("@k2b/stdlib").CatalogIssue[];
@@ -0,0 +1,72 @@
1
+ /**
2
+ * A signature as the field reports it. `kind` records how it was given, so the
3
+ * application can keep that fact next to the image. `svg` is a standalone SVG
4
+ * document whose ink uses `currentColor`, so it renders black as an image. A
5
+ * value that arrives from a browser is untrusted input: read it with
6
+ * `parseSignature` before storing or embedding it.
7
+ */
8
+ export type SignatureValue = {
9
+ kind: "drawn";
10
+ svg: string;
11
+ } | {
12
+ kind: "typed";
13
+ name: string;
14
+ svg: string;
15
+ };
16
+ /** One sampled pointer position in drawing units, with a pressure from 0 to 1. */
17
+ export type SignaturePoint = {
18
+ x: number;
19
+ y: number;
20
+ pressure: number;
21
+ };
22
+ /** The drawing space as an SVG viewBox and one closed outline path per stroke. */
23
+ export type SignatureDrawing = {
24
+ x: number;
25
+ y: number;
26
+ width: number;
27
+ height: number;
28
+ strokes: readonly string[];
29
+ };
30
+ /** Escapes text for XML content or attributes and drops characters XML cannot hold, so the document stays well-formed. */
31
+ export declare const escapeXml: (text: string) => string;
32
+ /** The name as a typed signature stores it: without characters an SVG cannot hold and without surrounding space. */
33
+ export declare const signatureName: (name: string) => string;
34
+ /** Stroke width in drawing units at a pressure: light pressure still leaves a readable line. */
35
+ export declare const strokeWidth: (size: number, pressure: number) => number;
36
+ /**
37
+ * Turns sampled points into one filled outline: both edges follow the points at
38
+ * half the local stroke width and are smoothed through their midpoints, and
39
+ * round caps close the ends. A filled outline, unlike a stroked path, can change
40
+ * width along the line, so pen pressure and drawing speed show in the ink.
41
+ */
42
+ export declare const strokeOutline: (points: readonly SignaturePoint[], size: number) => string;
43
+ /** Serializes a drawing as a standalone SVG document; an empty drawing has no value. */
44
+ export declare const drawingToSvg: (drawing: SignatureDrawing) => string | null;
45
+ /** Reads the drawing space and strokes back from an SVG drawingToSvg wrote, so a stored signature can be extended or undone. */
46
+ export declare const svgToDrawing: (svg: string) => SignatureDrawing | null;
47
+ /**
48
+ * Lays out a typed name as an SVG document in the given font family. `measure`
49
+ * returns the text width at `TYPED_FONT_SIZE`; without one, the width is estimated.
50
+ */
51
+ export declare const typedToSvg: (name: string, fontFamily: string, measure?: (text: string, font: string) => number | undefined) => string;
52
+ /**
53
+ * Reads a submitted signature on the server: the JSON string of the field's
54
+ * hidden input, or a value the browser sent as JSON. It accepts only markup
55
+ * the field writes and returns it rebuilt, so the result is safe to store and
56
+ * to embed. An empty or invalid value returns `null`.
57
+ */
58
+ export declare const parseSignature: (input: unknown) => SignatureValue | null;
59
+ export type SignaturePngOptions = {
60
+ /** Device pixels per SVG unit. Defaults to `2`. */
61
+ scale?: number;
62
+ /** Ink colour. Defaults to `"#000000"`. */
63
+ color?: string;
64
+ /** Background fill. Defaults to transparent. */
65
+ background?: string;
66
+ };
67
+ /**
68
+ * Rasterizes a signature into a PNG data URL in the browser, for a document or
69
+ * service that needs a bitmap. A typed signature renders with the fonts
70
+ * installed on this device: an SVG image cannot use the page's web fonts.
71
+ */
72
+ export declare const signatureToPng: (value: SignatureValue, options?: SignaturePngOptions) => Promise<string>;
@@ -0,0 +1,13 @@
1
+ import { type JSX } from "solid-js";
2
+ /**
3
+ * Guards a Solid root that @k2b/ui creates itself, such as a dialog or a floating window. These roots are mostly
4
+ * opened from a click handler, outside any owner and any island boundary. Without a boundary of their own, content
5
+ * that throws on an update throws into the code that wrote the signal and leaves other parts of the page stale.
6
+ * The content is created untracked, as `render()` and components create it, so a signal it reads directly does not
7
+ * rebuild it. `onClose` adds a Close button for a root whose content draws its own close control.
8
+ */
9
+ export declare function RenderErrorBoundary(props: {
10
+ content: () => JSX.Element;
11
+ onClose?: () => void;
12
+ onError?: () => void;
13
+ }): JSX.Element;
@@ -38,9 +38,18 @@ declare const uiMessages: import("@k2b/stdlib").Catalog<{
38
38
  infoBlockSuccess: string;
39
39
  infoBlockWarning: string;
40
40
  infoBlockDanger: string;
41
+ referencePdf: string;
42
+ referenceImage: string;
43
+ referenceDesign: string;
44
+ referenceFile: string;
45
+ referenceNote: string;
46
+ referenceHeading: string;
47
+ referenceTask: string;
48
+ referencePage: string;
41
49
  copy: string;
42
50
  closeLightbox: string;
43
51
  couldNotLoadData: string;
52
+ couldNotDisplayContent: string;
44
53
  datePicker: string;
45
54
  dataTable: string;
46
55
  datePresets: string;
@@ -54,6 +63,26 @@ declare const uiMessages: import("@k2b/stdlib").Catalog<{
54
63
  durationPresets: string;
55
64
  filterOptions: string;
56
65
  fileTypeNotAccepted: string;
66
+ fileDropDropped: ({ count }: {
67
+ count: number;
68
+ }) => string;
69
+ fileDropDroppedOne: ({ name }: {
70
+ name: string;
71
+ }) => string;
72
+ fileDropMore: ({ count }: {
73
+ count: number;
74
+ }) => string;
75
+ fileDropRejectedType: ({ names }: {
76
+ names: string;
77
+ }) => string;
78
+ fileDropRejectedSize: ({ names, limit }: {
79
+ names: string;
80
+ limit: string;
81
+ }) => string;
82
+ fileDropRejectedCount: ({ names, max }: {
83
+ names: string;
84
+ max: number;
85
+ }) => string;
57
86
  imageLightbox: string;
58
87
  imageNavigation: string;
59
88
  increaseValue: string;
@@ -167,6 +196,28 @@ declare const uiMessages: import("@k2b/stdlib").Catalog<{
167
196
  start: string;
168
197
  end: string;
169
198
  }) => string;
199
+ timeline: string;
200
+ timelineHint: string;
201
+ timelineTimeRange: ({ start, end }: {
202
+ start: string;
203
+ end: string;
204
+ }) => string;
205
+ timelineDone: string;
206
+ timelineOpen: string;
207
+ timelineNight: ({ start, end }: {
208
+ start: string;
209
+ end: string;
210
+ }) => string;
211
+ timelineNothingPlanned: string;
212
+ timelineFree: ({ duration }: {
213
+ duration: string;
214
+ }) => string;
215
+ timelineMore: ({ count }: {
216
+ count: number;
217
+ }) => string;
218
+ timelineNow: ({ time }: {
219
+ time: string;
220
+ }) => string;
170
221
  today: string;
171
222
  day: string;
172
223
  week: string;
@@ -230,6 +281,10 @@ declare const uiMessages: import("@k2b/stdlib").Catalog<{
230
281
  time: string;
231
282
  }) => string;
232
283
  messageStop: string;
284
+ resourceUntitled: string;
285
+ resourceNoAccess: string;
286
+ resourceDeleted: string;
287
+ resourceUnavailable: string;
233
288
  conversationMessages: ({ label }: {
234
289
  label: string;
235
290
  }) => string;
@@ -322,6 +377,7 @@ declare const uiMessages: import("@k2b/stdlib").Catalog<{
322
377
  templatePreview: string;
323
378
  lastRequestContext: string;
324
379
  contextWindowUsed: string;
380
+ contextWindow: string;
325
381
  contextUsageUnavailable: string;
326
382
  contextUsageUnavailableWithWindow: ({ window }: {
327
383
  window: string;
@@ -342,6 +398,13 @@ declare const uiMessages: import("@k2b/stdlib").Catalog<{
342
398
  label: string;
343
399
  }) => string;
344
400
  rowAction: string;
401
+ sidebarUnread: ({ count }: {
402
+ count: number;
403
+ }) => string;
404
+ sidebarUnreadMany: string;
405
+ sidebarNewActivity: string;
406
+ sidebarMentioned: string;
407
+ sidebarMuted: string;
345
408
  addToNamed: ({ name }: {
346
409
  name: string;
347
410
  }) => string;
@@ -378,6 +441,8 @@ declare const uiMessages: import("@k2b/stdlib").Catalog<{
378
441
  status: number;
379
442
  }) => string;
380
443
  pdfPreviewTabBlocked: string;
444
+ pdfPreviewNoViewer: string;
445
+ pdfPreviewNoViewerDescription: string;
381
446
  pdfPreviewRendering: string;
382
447
  pickIcon: string;
383
448
  postMessage: string;
@@ -389,6 +454,24 @@ declare const uiMessages: import("@k2b/stdlib").Catalog<{
389
454
  sending: string;
390
455
  steering: string;
391
456
  writeMessage: string;
457
+ writeConversationMessage: string;
458
+ composerFormatting: string;
459
+ strikethroughShortcut: string;
460
+ codeBlock: string;
461
+ insertLink: string;
462
+ insertEmoji: string;
463
+ emojiSuggestions: string;
464
+ dictate: string;
465
+ dictateOrHold: string;
466
+ stopDictation: string;
467
+ microphoneOptions: string;
468
+ recordVoiceMessage: string;
469
+ dictationListening: string;
470
+ dictationRefining: string;
471
+ dictationRefined: string;
472
+ dictationUnrefined: string;
473
+ dictationInterrupted: string;
474
+ restoreOriginal: string;
392
475
  openInNewTab: ({ name }: {
393
476
  name: string;
394
477
  }) => string;
@@ -413,6 +496,10 @@ declare const uiMessages: import("@k2b/stdlib").Catalog<{
413
496
  }) => string;
414
497
  range: string;
415
498
  resizePanes: string;
499
+ resizeNavigation: string;
500
+ resizeWorkspacePane: string;
501
+ resizeDetailPanel: string;
502
+ resizeBottomDrawer: string;
416
503
  resetMapView: string;
417
504
  resetTimelineView: string;
418
505
  retryOlderMessages: string;
@@ -448,6 +535,18 @@ declare const uiMessages: import("@k2b/stdlib").Catalog<{
448
535
  italicShortcut: string;
449
536
  linkShortcut: string;
450
537
  markdownFormatting: string;
538
+ editorLines: ({ count, value }: {
539
+ count: number;
540
+ value: string;
541
+ }) => string;
542
+ editorWords: ({ count, value }: {
543
+ count: number;
544
+ value: string;
545
+ }) => string;
546
+ editorCharacters: ({ count, value }: {
547
+ count: number;
548
+ value: string;
549
+ }) => string;
451
550
  numberedListShortcut: string;
452
551
  quote: string;
453
552
  csvSettings: string;
@@ -469,6 +568,8 @@ declare const uiMessages: import("@k2b/stdlib").Catalog<{
469
568
  textEditor: string;
470
569
  audioUnsupported: string;
471
570
  videoUnsupported: string;
571
+ videoCannotPlay: string;
572
+ videoCannotPlayDescription: string;
472
573
  yes: string;
473
574
  installApp: string;
474
575
  installNative: ({ appName }: {
@@ -228,6 +228,22 @@ export type AppWorkspaceSidebarItemActionsProps = {
228
228
  children: JSX.Element;
229
229
  visibility?: AppWorkspaceSidebarAccessoryVisibility;
230
230
  };
231
+ /**
232
+ * Unread state for the trailing `meta` slot. Every mark keeps a fixed width,
233
+ * so the row keeps its height and the label its start in every state.
234
+ */
235
+ export type AppWorkspaceSidebarItemStatusProps = {
236
+ /**
237
+ * A positive number shows a count (above 99 as "99+") and sets the label in
238
+ * a stronger weight; `true` shows a quiet dot for new activity that should
239
+ * not draw attention, such as in a muted conversation.
240
+ */
241
+ unread?: number | boolean;
242
+ /** Marks unread items that mention the person with "@". */
243
+ mention?: boolean;
244
+ /** Shows a muted bell. */
245
+ muted?: boolean;
246
+ };
231
247
  export type AppWorkspaceNavTreeProps = {
232
248
  children: JSX.Element;
233
249
  ariaLabel: string;
@@ -237,8 +253,25 @@ export type AppWorkspaceNavTreeProps = {
237
253
  onSelectedIdChange?: (id: string) => void;
238
254
  onExpandedIdsChange?: (ids: readonly string[]) => void;
239
255
  indented?: boolean;
256
+ /**
257
+ * Lets people reorder `movable` items among their siblings: by dragging on
258
+ * fine pointers and with Alt+ArrowUp/ArrowDown on a focused item. The tree
259
+ * only reports the requested place; the application saves it and renders
260
+ * the new order, and the tree then keeps focus on the moved item.
261
+ */
262
+ onMove?: (move: AppWorkspaceNavTreeMove) => void;
240
263
  class?: string;
241
264
  };
265
+ /** One requested place for an item among its unchanged siblings. */
266
+ export type AppWorkspaceNavTreeMove = {
267
+ id: string;
268
+ /** The parent item, unchanged by the move; `null` on the top level. */
269
+ parentId: string | null;
270
+ /** The sibling the item now precedes; `null` when it becomes the last. */
271
+ beforeId: string | null;
272
+ /** The sibling the item now follows; `null` when it becomes the first. */
273
+ afterId: string | null;
274
+ };
242
275
  export type AppWorkspaceNavTreeItemProps = {
243
276
  id: string;
244
277
  label: JSX.Element;
@@ -252,6 +285,8 @@ export type AppWorkspaceNavTreeItemProps = {
252
285
  onSelect?: (event: MouseEvent) => void;
253
286
  disabled?: boolean;
254
287
  icon?: string;
288
+ /** Names a meaningful icon for screen readers, such as "Homepage"; without it the icon is decorative. */
289
+ iconLabel?: string;
255
290
  /** Replaces `icon` while this branch is expanded and makes the icon the disclosure target. */
256
291
  expandedIcon?: string;
257
292
  meta?: JSX.Element;
@@ -261,6 +296,8 @@ export type AppWorkspaceNavTreeItemProps = {
261
296
  title?: string;
262
297
  viewTransitionName?: string;
263
298
  class?: string;
299
+ /** With the tree's `onMove`, the item can change its place among its siblings. Other items keep theirs, and no item moves past them. */
300
+ movable?: boolean;
264
301
  onDragEnter?: JSX.EventHandlerUnion<HTMLDivElement, DragEvent>;
265
302
  onDragOver?: JSX.EventHandlerUnion<HTMLDivElement, DragEvent>;
266
303
  onDragLeave?: JSX.EventHandlerUnion<HTMLDivElement, DragEvent>;
@@ -289,6 +326,7 @@ type AppWorkspaceComponent = ((props: AppWorkspaceProps) => JSX.Element) & {
289
326
  SidebarItemMeta: (props: AppWorkspaceSidebarItemMetaProps) => JSX.Element;
290
327
  SidebarItemAction: (props: AppWorkspaceSidebarItemActionProps) => JSX.Element;
291
328
  SidebarItemActions: (props: AppWorkspaceSidebarItemActionsProps) => JSX.Element;
329
+ SidebarItemStatus: (props: AppWorkspaceSidebarItemStatusProps) => JSX.Element;
292
330
  NavTree: AppWorkspaceNavTreeComponent;
293
331
  SidebarIconGrid: (props: AppWorkspaceSidebarIconGridProps) => JSX.Element;
294
332
  SidebarIconAction: (props: AppWorkspaceSidebarIconActionProps) => JSX.Element;
@@ -7,5 +7,7 @@ export declare function SidebarItemPreview(props: {
7
7
  trigger?: "action" | "row";
8
8
  align?: "center" | "end";
9
9
  viewportSize?: ScrollAreaProps["viewportSize"];
10
+ /** The row's metadata; a row trigger, named by `label`, keeps it as its description. */
11
+ describedBy?: string;
10
12
  onOpenChange?: (open: boolean) => void;
11
13
  }): JSX.Element;
@@ -1,6 +1,6 @@
1
1
  export type { AppOverviewCardsProps, AppOverviewEmptyStateProps, AppOverviewPanelProps, AppOverviewProps, } from "./AppOverview";
2
2
  export { default as AppOverview } from "./AppOverview";
3
- export type { AppWorkspaceBottomDrawerHeight, AppWorkspaceBottomDrawerProps, AppWorkspaceContentProps, AppWorkspaceDetailProps, AppWorkspaceDetailWidth, AppWorkspaceMainPaneProps, AppWorkspaceMainProps, AppWorkspaceNavTreeItemProps, AppWorkspaceNavTreeProps, AppWorkspaceProps, AppWorkspaceSidebarAccessoryVisibility, AppWorkspaceSidebarBodyProps, AppWorkspaceSidebarIconActionProps, AppWorkspaceSidebarIconActionTone, AppWorkspaceSidebarIconGridProps, AppWorkspaceSidebarItemActionProps, AppWorkspaceSidebarItemActionsProps, AppWorkspaceSidebarItemIconProps, AppWorkspaceSidebarItemLabelProps, AppWorkspaceSidebarItemMetaProps, AppWorkspaceSidebarItemProps, AppWorkspaceSidebarItemTone, AppWorkspaceSidebarProps, AppWorkspaceSidebarSectionProps, AppWorkspaceSidebarVisibility, } from "./AppWorkspace";
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
6
  export { installAppWorkspaceController } from "./app-workspace-controller";
@@ -18,7 +18,7 @@ export { default as FloatingWindow, type FloatingWindowRect, fitFloatingWindowRe
18
18
  export type { MobileShellHeaderProps, MobileShellProps } from "./MobileShell";
19
19
  export { default as MobileShell, observeMobileShell } from "./MobileShell";
20
20
  export { default as Navigation, type NavigationProps } from "./Navigation";
21
- export { createNavigation, findNavigationItem, type NavigationController, type NavigationItem, type NavigationOptions, } from "./navigation-model";
21
+ export { createNavigation, findNavigationItem, type NavigationController, type NavigationItem, type NavigationOptions, type NavigationStatus, } from "./navigation-model";
22
22
  export type { PanelDialogBodyProps, PanelDialogFooterProps, PanelDialogHeaderProps, PanelDialogProps, PanelDialogSectionProps, PanelDialogSurface, PanelDialogTabOption, PanelDialogTabsProps, } from "./PanelDialog";
23
23
  export { confirmDiscardIfDirty, default as PanelDialog, panelDialogFixedOptions, panelDialogFixedPanelClass, panelDialogOptions, panelDialogPanelClass, panelDialogWideOptions, panelDialogWidePanelClass, panelDialogWorkspaceOptions, panelDialogWorkspacePanelClass, } from "./PanelDialog";
24
24
  export type { PanelHeaderProps } from "./PanelHeader";