@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.
- package/README.md +3 -2
- package/dist/browser/actions/ContextMenu.js +3 -1
- package/dist/browser/actions/ContextMenu.js.map +1 -1
- package/dist/browser/actions/Dropdown.js +91 -46
- package/dist/browser/actions/Dropdown.js.map +1 -1
- package/dist/browser/actions/FilterChip.js +4 -1
- package/dist/browser/actions/FilterChip.js.map +1 -1
- package/dist/browser/chat/ChatComposer.js +1311 -565
- package/dist/browser/chat/ChatComposer.js.map +1 -1
- package/dist/browser/chat/ChatPrimitives.js +9 -6
- package/dist/browser/chat/ChatPrimitives.js.map +1 -1
- package/dist/browser/chat/chat-behavior.js +9 -0
- package/dist/browser/chat/chat-behavior.js.map +1 -1
- package/dist/browser/chat/index.js.map +1 -1
- package/dist/browser/chat/types.js.map +1 -1
- package/dist/browser/content/Calendar.js +579 -533
- package/dist/browser/content/Calendar.js.map +1 -1
- package/dist/browser/content/FileView.js +62 -36
- package/dist/browser/content/FileView.js.map +1 -1
- package/dist/browser/content/Lightbox.js +76 -40
- package/dist/browser/content/Lightbox.js.map +1 -1
- package/dist/browser/content/MarkdownView.js +9 -3
- package/dist/browser/content/MarkdownView.js.map +1 -1
- package/dist/browser/content/PdfPreview.js +146 -79
- package/dist/browser/content/PdfPreview.js.map +1 -1
- package/dist/browser/content/Timeline.js +1038 -0
- package/dist/browser/content/Timeline.js.map +1 -0
- package/dist/browser/content/VideoPlayer.js +299 -0
- package/dist/browser/content/VideoPlayer.js.map +1 -0
- package/dist/browser/content/chart-inspection.js +7 -2
- package/dist/browser/content/chart-inspection.js.map +1 -1
- package/dist/browser/content/file-view-preview.js +2 -2
- package/dist/browser/content/file-view-preview.js.map +1 -1
- package/dist/browser/content/index.js +3 -0
- package/dist/browser/content/index.js.map +1 -1
- package/dist/browser/content/markdown-links.js +178 -0
- package/dist/browser/content/markdown-links.js.map +1 -0
- package/dist/browser/content/timeline-model.js +579 -0
- package/dist/browser/content/timeline-model.js.map +1 -0
- package/dist/browser/feedback/dialog-core.js +26 -14
- package/dist/browser/feedback/dialog-core.js.map +1 -1
- package/dist/browser/inputs/ChoiceChips.js +66 -0
- package/dist/browser/inputs/ChoiceChips.js.map +1 -0
- package/dist/browser/inputs/ChoiceGroups.js +53 -12
- package/dist/browser/inputs/ChoiceGroups.js.map +1 -1
- package/dist/browser/inputs/FileDropTarget.js +129 -0
- package/dist/browser/inputs/FileDropTarget.js.map +1 -0
- package/dist/browser/inputs/FileInputs.js +84 -43
- package/dist/browser/inputs/FileInputs.js.map +1 -1
- package/dist/browser/inputs/SignatureInput.js +558 -0
- package/dist/browser/inputs/SignatureInput.js.map +1 -0
- package/dist/browser/inputs/emoji/EmojiPicker.js +841 -0
- package/dist/browser/inputs/emoji/EmojiPicker.js.map +1 -0
- package/dist/browser/inputs/emoji/emoji-data.js +1903 -0
- package/dist/browser/inputs/emoji/emoji-data.js.map +1 -0
- package/dist/browser/inputs/emoji/emoji-index.js +209 -0
- package/dist/browser/inputs/emoji/emoji-index.js.map +1 -0
- package/dist/browser/inputs/emoji/emoji-messages.js +64 -0
- package/dist/browser/inputs/emoji/emoji-messages.js.map +1 -0
- package/dist/browser/inputs/file-drop.js +338 -0
- package/dist/browser/inputs/file-drop.js.map +1 -0
- package/dist/browser/inputs/index.js +6 -0
- package/dist/browser/inputs/index.js.map +1 -1
- package/dist/browser/inputs/markdown/MarkdownEditor.js +72 -78
- package/dist/browser/inputs/markdown/MarkdownEditor.js.map +1 -1
- package/dist/browser/inputs/markdown/actions.js +48 -2
- package/dist/browser/inputs/markdown/actions.js.map +1 -1
- package/dist/browser/inputs/markdown/code-zone.js +38 -2
- package/dist/browser/inputs/markdown/code-zone.js.map +1 -1
- package/dist/browser/inputs/signature-messages.js +39 -0
- package/dist/browser/inputs/signature-messages.js.map +1 -0
- package/dist/browser/inputs/signature.js +208 -0
- package/dist/browser/inputs/signature.js.map +1 -0
- package/dist/browser/internal/render-error.js +49 -0
- package/dist/browser/internal/render-error.js.map +1 -0
- package/dist/browser/intl/messages.js +205 -4
- package/dist/browser/intl/messages.js.map +1 -1
- package/dist/browser/layout/AppWorkspace.js +483 -218
- package/dist/browser/layout/AppWorkspace.js.map +1 -1
- package/dist/browser/layout/FloatingWindow.js +4 -1
- package/dist/browser/layout/FloatingWindow.js.map +1 -1
- package/dist/browser/layout/Navigation.js +274 -197
- package/dist/browser/layout/Navigation.js.map +1 -1
- package/dist/browser/layout/SidebarItemPreview.js +5 -1
- package/dist/browser/layout/SidebarItemPreview.js.map +1 -1
- package/dist/browser/layout/index.js.map +1 -1
- package/dist/browser/layout/navigation-model.js +2 -0
- package/dist/browser/layout/navigation-model.js.map +1 -1
- package/dist/browser/surfaces/NoticeCard.js +47 -44
- package/dist/browser/surfaces/NoticeCard.js.map +1 -1
- package/dist/browser/surfaces/ResourceCard.js +212 -0
- package/dist/browser/surfaces/ResourceCard.js.map +1 -0
- package/dist/browser/surfaces/index.js +1 -0
- package/dist/browser/surfaces/index.js.map +1 -1
- package/dist/licenses/emojibase-data.txt +21 -0
- package/dist/ssr/actions/ContextMenu.js +3 -1
- package/dist/ssr/actions/ContextMenu.js.map +1 -1
- package/dist/ssr/actions/Dropdown.js +49 -12
- package/dist/ssr/actions/Dropdown.js.map +1 -1
- package/dist/ssr/actions/FilterChip.js +4 -1
- package/dist/ssr/actions/FilterChip.js.map +1 -1
- package/dist/ssr/chat/ChatComposer.js +823 -221
- package/dist/ssr/chat/ChatComposer.js.map +1 -1
- package/dist/ssr/chat/ChatPrimitives.js +9 -6
- package/dist/ssr/chat/ChatPrimitives.js.map +1 -1
- package/dist/ssr/chat/chat-behavior.js +9 -0
- package/dist/ssr/chat/chat-behavior.js.map +1 -1
- package/dist/ssr/chat/index.js.map +1 -1
- package/dist/ssr/chat/types.js.map +1 -1
- package/dist/ssr/content/Calendar.js +183 -142
- package/dist/ssr/content/Calendar.js.map +1 -1
- package/dist/ssr/content/FileView.js +30 -6
- package/dist/ssr/content/FileView.js.map +1 -1
- package/dist/ssr/content/Lightbox.js +19 -5
- package/dist/ssr/content/Lightbox.js.map +1 -1
- package/dist/ssr/content/MarkdownView.js +9 -3
- package/dist/ssr/content/MarkdownView.js.map +1 -1
- package/dist/ssr/content/PdfPreview.js +77 -36
- package/dist/ssr/content/PdfPreview.js.map +1 -1
- package/dist/ssr/content/Timeline.js +804 -0
- package/dist/ssr/content/Timeline.js.map +1 -0
- package/dist/ssr/content/VideoPlayer.js +228 -0
- package/dist/ssr/content/VideoPlayer.js.map +1 -0
- package/dist/ssr/content/chart-inspection.js +7 -2
- package/dist/ssr/content/chart-inspection.js.map +1 -1
- package/dist/ssr/content/file-view-preview.js +2 -2
- package/dist/ssr/content/file-view-preview.js.map +1 -1
- package/dist/ssr/content/index.js +3 -0
- package/dist/ssr/content/index.js.map +1 -1
- package/dist/ssr/content/markdown-links.js +178 -0
- package/dist/ssr/content/markdown-links.js.map +1 -0
- package/dist/ssr/content/timeline-model.js +579 -0
- package/dist/ssr/content/timeline-model.js.map +1 -0
- package/dist/ssr/feedback/dialog-core.js +26 -14
- package/dist/ssr/feedback/dialog-core.js.map +1 -1
- package/dist/ssr/inputs/ChoiceChips.js +66 -0
- package/dist/ssr/inputs/ChoiceChips.js.map +1 -0
- package/dist/ssr/inputs/ChoiceGroups.js +12 -4
- package/dist/ssr/inputs/ChoiceGroups.js.map +1 -1
- package/dist/ssr/inputs/FileDropTarget.js +103 -0
- package/dist/ssr/inputs/FileDropTarget.js.map +1 -0
- package/dist/ssr/inputs/FileInputs.js +49 -12
- package/dist/ssr/inputs/FileInputs.js.map +1 -1
- package/dist/ssr/inputs/SignatureInput.js +404 -0
- package/dist/ssr/inputs/SignatureInput.js.map +1 -0
- package/dist/ssr/inputs/emoji/EmojiPicker.js +551 -0
- package/dist/ssr/inputs/emoji/EmojiPicker.js.map +1 -0
- package/dist/ssr/inputs/emoji/emoji-data.js +1903 -0
- package/dist/ssr/inputs/emoji/emoji-data.js.map +1 -0
- package/dist/ssr/inputs/emoji/emoji-index.js +209 -0
- package/dist/ssr/inputs/emoji/emoji-index.js.map +1 -0
- package/dist/ssr/inputs/emoji/emoji-messages.js +64 -0
- package/dist/ssr/inputs/emoji/emoji-messages.js.map +1 -0
- package/dist/ssr/inputs/file-drop.js +338 -0
- package/dist/ssr/inputs/file-drop.js.map +1 -0
- package/dist/ssr/inputs/index.js +6 -0
- package/dist/ssr/inputs/index.js.map +1 -1
- package/dist/ssr/inputs/markdown/MarkdownEditor.js +14 -2
- package/dist/ssr/inputs/markdown/MarkdownEditor.js.map +1 -1
- package/dist/ssr/inputs/markdown/actions.js +48 -2
- package/dist/ssr/inputs/markdown/actions.js.map +1 -1
- package/dist/ssr/inputs/markdown/code-zone.js +38 -2
- package/dist/ssr/inputs/markdown/code-zone.js.map +1 -1
- package/dist/ssr/inputs/signature-messages.js +39 -0
- package/dist/ssr/inputs/signature-messages.js.map +1 -0
- package/dist/ssr/inputs/signature.js +208 -0
- package/dist/ssr/inputs/signature.js.map +1 -0
- package/dist/ssr/internal/render-error.js +49 -0
- package/dist/ssr/internal/render-error.js.map +1 -0
- package/dist/ssr/intl/messages.js +205 -4
- package/dist/ssr/intl/messages.js.map +1 -1
- package/dist/ssr/layout/AppWorkspace.js +264 -47
- package/dist/ssr/layout/AppWorkspace.js.map +1 -1
- package/dist/ssr/layout/FloatingWindow.js +4 -1
- package/dist/ssr/layout/FloatingWindow.js.map +1 -1
- package/dist/ssr/layout/Navigation.js +169 -122
- package/dist/ssr/layout/Navigation.js.map +1 -1
- package/dist/ssr/layout/SidebarItemPreview.js +5 -1
- package/dist/ssr/layout/SidebarItemPreview.js.map +1 -1
- package/dist/ssr/layout/index.js.map +1 -1
- package/dist/ssr/layout/navigation-model.js +2 -0
- package/dist/ssr/layout/navigation-model.js.map +1 -1
- package/dist/ssr/surfaces/NoticeCard.js +17 -12
- package/dist/ssr/surfaces/NoticeCard.js.map +1 -1
- package/dist/ssr/surfaces/ResourceCard.js +115 -0
- package/dist/ssr/surfaces/ResourceCard.js.map +1 -0
- package/dist/ssr/surfaces/index.js +1 -0
- package/dist/ssr/surfaces/index.js.map +1 -1
- package/dist/styles.css +1 -1
- package/dist/types/actions/Dropdown.d.ts +13 -1
- package/dist/types/actions/FilterChip.d.ts +5 -0
- package/dist/types/chat/ChatComposer.d.ts +24 -1
- package/dist/types/chat/ChatPrimitives.d.ts +1 -1
- package/dist/types/chat/chat-behavior.d.ts +15 -0
- package/dist/types/chat/index.d.ts +1 -1
- package/dist/types/chat/types.d.ts +34 -0
- package/dist/types/content/Calendar.d.ts +28 -8
- package/dist/types/content/Lightbox.d.ts +8 -0
- package/dist/types/content/Timeline.d.ts +49 -0
- package/dist/types/content/VideoPlayer.d.ts +41 -0
- package/dist/types/content/index.d.ts +6 -2
- package/dist/types/content/markdown-links.d.ts +66 -0
- package/dist/types/content/timeline-model.d.ts +148 -0
- package/dist/types/feedback/dialog-core.d.ts +1 -1
- package/dist/types/inputs/ChoiceChips.d.ts +20 -0
- package/dist/types/inputs/ChoiceGroups.d.ts +11 -2
- package/dist/types/inputs/FileDropTarget.d.ts +23 -0
- package/dist/types/inputs/FileInputs.d.ts +8 -0
- package/dist/types/inputs/SignatureInput.d.ts +22 -0
- package/dist/types/inputs/emoji/EmojiPicker.d.ts +42 -0
- package/dist/types/inputs/emoji/emoji-data.d.ts +2 -0
- package/dist/types/inputs/emoji/emoji-index.d.ts +109 -0
- package/dist/types/inputs/emoji/emoji-messages.d.ts +30 -0
- package/dist/types/inputs/file-drop.d.ts +80 -0
- package/dist/types/inputs/index.d.ts +12 -0
- package/dist/types/inputs/markdown/actions.d.ts +4 -0
- package/dist/types/inputs/markdown/code-zone.d.ts +7 -0
- package/dist/types/inputs/signature-messages.d.ts +11 -0
- package/dist/types/inputs/signature.d.ts +72 -0
- package/dist/types/internal/render-error.d.ts +13 -0
- package/dist/types/intl/messages.d.ts +101 -0
- package/dist/types/layout/AppWorkspace.d.ts +38 -0
- package/dist/types/layout/SidebarItemPreview.d.ts +2 -0
- package/dist/types/layout/index.d.ts +2 -2
- package/dist/types/layout/navigation-model.d.ts +18 -0
- package/dist/types/surfaces/ResourceCard.d.ts +31 -0
- package/dist/types/surfaces/index.d.ts +2 -0
- 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";
|