@floegence/floe-webapp-core 0.35.47 → 0.35.49

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.
@@ -8,4 +8,4 @@ export { Breadcrumb, type BreadcrumbProps } from './Breadcrumb';
8
8
  export { FileBrowserToolbar, type FileBrowserToolbarProps } from './FileBrowserToolbar';
9
9
  export { FileBrowserDragPreview } from './DragPreview';
10
10
  export { FolderIcon, FolderOpenIcon, SymlinkFolderIcon, SymlinkFolderOpenIcon, FileIcon, SymlinkFileIcon, BrokenSymlinkIcon, CodeFileIcon, JavaScriptFileIcon, TypeScriptFileIcon, ShellScriptFileIcon, ImageFileIcon, DocumentFileIcon, ConfigFileIcon, StyleFileIcon, FileItemIcon, getFileIcon, resolveFileItemIcon, } from './FileIcons';
11
- export type { FileItem, FileItemIconOverride, FileItemLinkKind, FileItemLinkTargetType, FileItemLinkMeta, FileBrowserRevealClearFilter, FileBrowserRevealRequest, ViewMode, SortField, SortDirection, SortConfig, FileListColumnRatios, FileBrowserContextValue, ContextMenuActionType, ContextMenuTargetKind, ContextMenuSource, ContextMenuDirectory, ContextMenuItem, ContextMenuEvent, ContextMenuCallbacks, OptimisticUpdateType, OptimisticRemove, OptimisticUpdate, OptimisticInsert, OptimisticOperation, ScrollPosition, } from './types';
11
+ export type { FileItem, FileItemIconOverride, FileItemLinkKind, FileItemLinkTargetType, FileItemLinkMeta, FileBrowserRevealClearFilter, FileBrowserRevealRequest, ViewMode, SortField, SortDirection, SortConfig, FileListColumnRatios, FileBrowserContextValue, ContextMenuActionType, ContextMenuTargetKind, ContextMenuSource, ContextMenuDirectory, ContextMenuItem, ContextMenuEvent, ContextMenuCallbacks, OptimisticUpdateType, OptimisticRemove, OptimisticUpdate, OptimisticInsert, OptimisticOperation, ReplaceSelectionOptions, ScrollPosition, } from './types';
@@ -1,55 +1,54 @@
1
1
  import { onCleanup as v } from "solid-js";
2
2
  import { createItemContextMenuEvent as p } from "./contextMenuEvent.js";
3
- function S(s, r, i) {
4
- const m = i?.delayMs ?? 500, w = i?.moveTolerancePx ?? 10, C = i?.selectOnOpen ?? !0, f = i?.source ?? "list";
5
- let t = null, l = null, u = !1;
6
- const c = () => {
7
- t !== null && typeof window < "u" && (window.clearTimeout(t), t = null), l = null;
3
+ function O(c, r, u) {
4
+ const d = u?.delayMs ?? 500, m = u?.moveTolerancePx ?? 10, w = u?.selectOnOpen ?? !0, f = u?.source ?? "list";
5
+ let n = null, s = null, i = !1;
6
+ const l = () => {
7
+ n !== null && typeof window < "u" && (window.clearTimeout(n), n = null), s = null;
8
8
  }, a = () => {
9
- u = !0;
10
- }, y = (e, n) => {
11
- if (!C) {
12
- s.showContextMenu(p({
9
+ i = !0;
10
+ }, C = (e, t) => {
11
+ if (!w) {
12
+ c.showContextMenu(p({
13
13
  x: e,
14
- y: n,
14
+ y: t,
15
15
  triggerItem: r,
16
16
  items: [r],
17
17
  source: f
18
18
  })), a();
19
19
  return;
20
20
  }
21
- const o = r.id;
22
- s.isSelected(o) || s.selectItem(o, !1);
23
- const d = s.getSelectedItemsList(), h = d.length > 0 ? d : [r];
24
- s.showContextMenu(p({
21
+ c.ensureContextMenuSelection(r.id);
22
+ const o = c.getSelectedItemsList(), h = o.length > 0 ? o : [r];
23
+ c.showContextMenu(p({
25
24
  x: e,
26
- y: n,
25
+ y: t,
27
26
  triggerItem: r,
28
27
  items: h,
29
28
  source: f
30
29
  })), a();
30
+ }, x = (e) => {
31
+ if (i = !1, e.pointerType === "mouse" || typeof window > "u") return;
32
+ l(), s = { x: e.clientX, y: e.clientY };
33
+ const t = e.clientX, o = e.clientY;
34
+ n = window.setTimeout(() => {
35
+ n = null, C(t, o);
36
+ }, d);
31
37
  }, M = (e) => {
32
- if (u = !1, e.pointerType === "mouse" || typeof window > "u") return;
33
- c(), l = { x: e.clientX, y: e.clientY };
34
- const n = e.clientX, o = e.clientY;
35
- t = window.setTimeout(() => {
36
- t = null, y(n, o);
37
- }, m);
38
- }, g = (e) => {
39
- if (t === null || !l) return;
40
- const n = e.clientX - l.x, o = e.clientY - l.y;
41
- Math.hypot(n, o) > w && (c(), a());
42
- }, x = () => c(), P = () => c(), I = (e) => u ? (u = !1, e.preventDefault(), e.stopPropagation(), !0) : !1;
38
+ if (n === null || !s) return;
39
+ const t = e.clientX - s.x, o = e.clientY - s.y;
40
+ Math.hypot(t, o) > m && (l(), a());
41
+ }, y = () => l(), g = () => l(), P = (e) => i ? (i = !1, e.preventDefault(), e.stopPropagation(), !0) : !1;
43
42
  return v(() => {
44
- c();
43
+ l();
45
44
  }), {
46
- onPointerDown: M,
47
- onPointerMove: g,
48
- onPointerUp: x,
49
- onPointerCancel: P,
50
- consumeClickSuppression: I
45
+ onPointerDown: x,
46
+ onPointerMove: M,
47
+ onPointerUp: y,
48
+ onPointerCancel: g,
49
+ consumeClickSuppression: P
51
50
  };
52
51
  }
53
52
  export {
54
- S as createLongPressContextMenuHandlers
53
+ O as createLongPressContextMenuHandlers
55
54
  };
@@ -179,6 +179,11 @@ export interface ScrollPosition {
179
179
  top: number;
180
180
  left: number;
181
181
  }
182
+ export interface ReplaceSelectionOptions {
183
+ anchorId?: string | null;
184
+ lastInteractedId?: string | null;
185
+ preserveAnchor?: boolean;
186
+ }
182
187
  /**
183
188
  * Represents an item being dragged in a file browser
184
189
  */
@@ -222,7 +227,12 @@ export interface FileBrowserContextValue {
222
227
  navigateTo: (item: FileItem) => void;
223
228
  homeLabel: Accessor<string>;
224
229
  selectedItems: Accessor<Set<string>>;
230
+ selectionAnchorId: Accessor<string | null>;
231
+ lastInteractedId: Accessor<string | null>;
225
232
  selectItem: (id: string, multi?: boolean) => void;
233
+ selectRangeTo: (id: string, additive?: boolean) => void;
234
+ replaceSelection: (ids: Iterable<string>, options?: ReplaceSelectionOptions) => void;
235
+ ensureContextMenuSelection: (id: string) => void;
226
236
  clearSelection: () => void;
227
237
  isSelected: (id: string) => boolean;
228
238
  viewMode: Accessor<ViewMode>;
@@ -0,0 +1,16 @@
1
+ import { type Accessor } from 'solid-js';
2
+ import type { ReplaceSelectionOptions } from './types';
3
+ export interface FileBrowserMarqueeSelectionOptions {
4
+ getContainer: () => HTMLElement | null;
5
+ getVisibleItemIdsInOrder: () => string[];
6
+ getElementForId: (id: string) => HTMLElement | null | undefined;
7
+ getSelectedIds: () => string[];
8
+ replaceSelection: (ids: string[], options?: ReplaceSelectionOptions) => void;
9
+ clearSelection: () => void;
10
+ }
11
+ export interface FileBrowserMarqueeSelectionResult {
12
+ overlayStyle: Accessor<Record<string, string> | null>;
13
+ onPointerDown: (event: PointerEvent) => void;
14
+ }
15
+ export declare const FILE_BROWSER_MARQUEE_OVERLAY_CLASS = "pointer-events-none fixed z-40 rounded-md floe-file-browser-marquee-overlay";
16
+ export declare function createFileBrowserMarqueeSelection(options: FileBrowserMarqueeSelectionOptions): FileBrowserMarqueeSelectionResult;
@@ -0,0 +1,69 @@
1
+ import { createSignal as R, createMemo as b, onCleanup as y } from "solid-js";
2
+ import { isPrimaryModKeyPressed as L } from "../../utils/keybind.js";
3
+ const w = 4, G = "pointer-events-none fixed z-40 rounded-md floe-file-browser-marquee-overlay";
4
+ function x(t, n, l, o) {
5
+ const r = Math.min(t, l), c = Math.min(n, o);
6
+ return {
7
+ left: r,
8
+ top: c,
9
+ width: Math.abs(l - t),
10
+ height: Math.abs(o - n)
11
+ };
12
+ }
13
+ function P(t, n) {
14
+ return !(t.left + t.width < n.left || n.right < t.left || t.top + t.height < n.top || n.bottom < t.top);
15
+ }
16
+ function _(t) {
17
+ return !(!(t instanceof Element) || t.closest("[data-file-browser-item-id]") || t.closest('button, input, textarea, select, a, [role="button"], [role="menuitem"]'));
18
+ }
19
+ function C(t) {
20
+ const [n, l] = R(null);
21
+ let o = null, r = !1, c = [], s = 0, a = 0, u = !1;
22
+ const g = () => {
23
+ typeof document > "u" || (document.removeEventListener("pointermove", m, !0), document.removeEventListener("pointerup", p, !0), document.removeEventListener("pointercancel", h, !0));
24
+ }, f = () => {
25
+ g(), o = null, r = !1, c = [], s = 0, a = 0, u = !1, l(null);
26
+ }, E = (e) => {
27
+ const d = t.getVisibleItemIdsInOrder().filter((M) => {
28
+ const I = t.getElementForId(M);
29
+ return I ? P(e, I.getBoundingClientRect()) : !1;
30
+ }), i = r ? [...c, ...d] : d;
31
+ t.replaceSelection(i, {
32
+ anchorId: r ? void 0 : i[0] ?? null,
33
+ lastInteractedId: i[i.length - 1] ?? null,
34
+ preserveAnchor: r
35
+ });
36
+ }, m = (e) => {
37
+ if (o !== e.pointerId) return;
38
+ const d = Math.hypot(e.clientX - s, e.clientY - a);
39
+ if (!u && d < w)
40
+ return;
41
+ e.preventDefault(), u = !0;
42
+ const i = x(s, a, e.clientX, e.clientY);
43
+ l(i), E(i);
44
+ }, p = (e) => {
45
+ o === e.pointerId && (!u && !r && t.clearSelection(), f());
46
+ }, h = (e) => {
47
+ o === e.pointerId && f();
48
+ }, S = (e) => {
49
+ e.pointerType !== "mouse" || e.button !== 0 || _(e.target) && t.getContainer() && (o = e.pointerId, r = L(e), c = r ? t.getSelectedIds() : [], s = e.clientX, a = e.clientY, u = !1, typeof document < "u" && (document.addEventListener("pointermove", m, !0), document.addEventListener("pointerup", p, !0), document.addEventListener("pointercancel", h, !0)), e.preventDefault());
50
+ }, v = b(() => {
51
+ const e = n();
52
+ return e ? {
53
+ left: `${e.left}px`,
54
+ top: `${e.top}px`,
55
+ width: `${e.width}px`,
56
+ height: `${e.height}px`
57
+ } : null;
58
+ });
59
+ return y(() => {
60
+ f();
61
+ }), {
62
+ overlayStyle: v,
63
+ onPointerDown: S
64
+ };
65
+ }
66
+ export {
67
+ G as FILE_BROWSER_MARQUEE_OVERLAY_CLASS,
68
+ C as createFileBrowserMarqueeSelection
69
+ };
package/dist/floe.css CHANGED
@@ -324,6 +324,14 @@
324
324
  -webkit-touch-callout: none;
325
325
  }
326
326
 
327
+ .floe-file-browser-marquee-overlay {
328
+ border: 2px solid color-mix(in srgb, var(--selection-bg) 96%, white 4%);
329
+ background-color: color-mix(in srgb, var(--selection-bg) 18%, transparent);
330
+ box-shadow:
331
+ 0 0 0 1px color-mix(in srgb, var(--selection-bg) 24%, white 12%),
332
+ 0 8px 24px color-mix(in srgb, var(--selection-bg) 18%, transparent);
333
+ }
334
+
327
335
  [data-floe-touch-surface='true'],
328
336
  [data-floe-touch-surface='true'] * {
329
337
  -webkit-user-select: none;
package/dist/full.js CHANGED
@@ -1,12 +1,12 @@
1
1
  import { FloeProvider as r } from "./app/FloeProvider.js";
2
2
  import { applyTheme as n, builtInThemes as i, getSystemTheme as a, mergeThemeTokenMaps as m, resolveThemeTokenOverrides as c, resolveThemeTokens as l, syncThemeTokenOverrides as s } from "./styles/themes/index.js";
3
3
  import { floeColorTokenCategories as f, floeDesignTokens as d, floeFontFamilyTokens as x, floeMotionTokens as I, floeRadiusTokens as g, floeSharedCssVariables as C, floeSpacingTokens as u, floeThemeColorVariables as S, floeTypographyTokens as T, getFloeColorTokenValue as h } from "./styles/tokens.js";
4
- import { Activity as F, ActivityIcon as P, AlertCircle as y, AlertTriangle as B, ArchiveIcon as v, ArrowDown as D, ArrowLeft as M, ArrowRight as L, ArrowRightLeft as w, ArrowUp as A, AtSign as E, AwardIcon as b, BarChart as W, BatteryIcon as R, Bell as O, BellIcon as N, Bookmark as _, BookmarkIcon as G, Bot as H, BotIcon as V, BugIcon as U, Calendar as K, CalendarIcon as z, Camera as X, CameraIcon as Z, ChartIcon as Q, Check as Y, CheckCircle as q, CheckIcon as J, ChevronDown as j, ChevronLeft as $, ChevronRight as ee, ChevronUp as oe, ChevronsUpDown as re, Clock as te, ClockIcon as ne, CloseIcon as ie, Cloud as ae, CloudIcon as me, Code as ce, CodeIcon as le, CompassIcon as se, Copy as pe, CopyCheck as fe, CopyCheckIcon as de, CopyIcon as xe, Cpu as Ie, CreditCardIcon as ge, Database as Ce, DatabaseIcon as ue, DollarIcon as Se, Download as Te, DownloadIcon as he, EditIcon as ke, ErrorIcon as Fe, ExternalLink as Pe, Eye as ye, EyeIcon as Be, EyeOff as ve, FileCode as De, FilePlus as Me, FilePlusIcon as Le, FileText as we, Files as Ae, Filter as Ee, FilterIcon as be, FireIcon as We, Folder as Re, FolderOpen as Oe, FolderPlus as Ne, FolderPlusIcon as _e, GiftIcon as Ge, GitBranch as He, GitBranchIcon as Ve, Globe as Ue, GlobeIcon as Ke, Grid as ze, Grid3x3 as Xe, GripVertical as Ze, Hash as Qe, HeadphonesIcon as Ye, Heart as qe, HeartIcon as Je, HelpIcon as je, Highlighter as $e, History as eo, Home as oo, HomeIcon as ro, Image as to, ImageIcon as no, Info as io, InfoIcon as ao, Key as mo, KeyIcon as co, Layers as lo, LayersIcon as so, LayoutDashboard as po, Link as fo, LinkIcon as xo, Loader2 as Io, LoadingIcon as go, Lock as Co, LockIcon as uo, MagicIcon as So, Mail as To, MailIcon as ho, MapPinIcon as ko, Maximize as Fo, Menu as Po, MessageIcon as yo, MessageSquare as Bo, Mic as vo, MicIcon as Do, MicOff as Mo, Minus as Lo, MinusIcon as wo, Moon as Ao, MoonIcon as Eo, MoreHorizontal as bo, MoreVertical as Wo, MuteIcon as Ro, Package as Oo, PackageIcon as No, Paperclip as _o, Paste as Go, PasteIcon as Ho, Pause as Vo, PauseIcon as Uo, Pencil as Ko, Phone as zo, PieChart as Xo, Pin as Zo, PinIcon as Qo, Play as Yo, PlayIcon as qo, Plus as Jo, PlusIcon as jo, PowerIcon as $o, PrinterIcon as er, Quote as or, Refresh as rr, RefreshIcon as tr, Restore as nr, RocketIcon as ir, Save as ar, SaveIcon as mr, Search as cr, SearchIcon as lr, Send as sr, SendIcon as pr, Settings as fr, SettingsIcon as dr, ShareIcon as xr, Shield as Ir, ShieldCheck as gr, ShieldIcon as Cr, SparkleIcon as ur, Sparkles as Sr, Star as Tr, StarIcon as hr, Stop as kr, SuccessIcon as Fr, Sun as Pr, SunIcon as yr, TagIcon as Br, TargetIcon as vr, Terminal as Dr, TerminalIcon as Mr, ThumbsDownIcon as Lr, ThumbsUpIcon as wr, Timer as Ar, Trash as Er, TrashIcon as br, TrendingDown as Wr, TrendingUp as Rr, Unlock as Or, Upload as Nr, UploadIcon as _r, User as Gr, UserIcon as Hr, Video as Vr, VideoIcon as Ur, Volume as Kr, VolumeIcon as zr, VolumeOff as Xr, Wand as Zr, WarningIcon as Qr, WifiIcon as Yr, WifiOffIcon as qr, Workflow as Jr, X as jr, XCircle as $r, Zap as et, ZapIcon as ot } from "./components/icons/index.js";
4
+ import { Activity as F, ActivityIcon as P, AlertCircle as y, AlertTriangle as B, ArchiveIcon as v, ArrowDown as M, ArrowLeft as D, ArrowRight as L, ArrowRightLeft as w, ArrowUp as A, AtSign as E, AwardIcon as b, BarChart as W, BatteryIcon as R, Bell as O, BellIcon as N, Bookmark as _, BookmarkIcon as G, Bot as H, BotIcon as V, BugIcon as U, Calendar as K, CalendarIcon as z, Camera as X, CameraIcon as Z, ChartIcon as Q, Check as Y, CheckCircle as q, CheckIcon as J, ChevronDown as j, ChevronLeft as $, ChevronRight as ee, ChevronUp as oe, ChevronsUpDown as re, Clock as te, ClockIcon as ne, CloseIcon as ie, Cloud as ae, CloudIcon as me, Code as ce, CodeIcon as le, CompassIcon as se, Copy as pe, CopyCheck as fe, CopyCheckIcon as de, CopyIcon as xe, Cpu as Ie, CreditCardIcon as ge, Database as Ce, DatabaseIcon as ue, DollarIcon as Se, Download as Te, DownloadIcon as he, EditIcon as ke, ErrorIcon as Fe, ExternalLink as Pe, Eye as ye, EyeIcon as Be, EyeOff as ve, FileCode as Me, FilePlus as De, FilePlusIcon as Le, FileText as we, Files as Ae, Filter as Ee, FilterIcon as be, FireIcon as We, Folder as Re, FolderOpen as Oe, FolderPlus as Ne, FolderPlusIcon as _e, GiftIcon as Ge, GitBranch as He, GitBranchIcon as Ve, Globe as Ue, GlobeIcon as Ke, Grid as ze, Grid3x3 as Xe, GripVertical as Ze, Hash as Qe, HeadphonesIcon as Ye, Heart as qe, HeartIcon as Je, HelpIcon as je, Highlighter as $e, History as eo, Home as oo, HomeIcon as ro, Image as to, ImageIcon as no, Info as io, InfoIcon as ao, Key as mo, KeyIcon as co, Layers as lo, LayersIcon as so, LayoutDashboard as po, Link as fo, LinkIcon as xo, Loader2 as Io, LoadingIcon as go, Lock as Co, LockIcon as uo, MagicIcon as So, Mail as To, MailIcon as ho, MapPinIcon as ko, Maximize as Fo, Menu as Po, MessageIcon as yo, MessageSquare as Bo, Mic as vo, MicIcon as Mo, MicOff as Do, Minus as Lo, MinusIcon as wo, Moon as Ao, MoonIcon as Eo, MoreHorizontal as bo, MoreVertical as Wo, MuteIcon as Ro, Package as Oo, PackageIcon as No, Paperclip as _o, Paste as Go, PasteIcon as Ho, Pause as Vo, PauseIcon as Uo, Pencil as Ko, Phone as zo, PieChart as Xo, Pin as Zo, PinIcon as Qo, Play as Yo, PlayIcon as qo, Plus as Jo, PlusIcon as jo, PowerIcon as $o, PrinterIcon as er, Quote as or, Refresh as rr, RefreshIcon as tr, Restore as nr, RocketIcon as ir, Save as ar, SaveIcon as mr, Search as cr, SearchIcon as lr, Send as sr, SendIcon as pr, Settings as fr, SettingsIcon as dr, ShareIcon as xr, Shield as Ir, ShieldCheck as gr, ShieldIcon as Cr, SparkleIcon as ur, Sparkles as Sr, Star as Tr, StarIcon as hr, Stop as kr, SuccessIcon as Fr, Sun as Pr, SunIcon as yr, TagIcon as Br, TargetIcon as vr, Terminal as Mr, TerminalIcon as Dr, ThumbsDownIcon as Lr, ThumbsUpIcon as wr, Timer as Ar, Trash as Er, TrashIcon as br, TrendingDown as Wr, TrendingUp as Rr, Unlock as Or, Upload as Nr, UploadIcon as _r, User as Gr, UserIcon as Hr, Video as Vr, VideoIcon as Ur, Volume as Kr, VolumeIcon as zr, VolumeOff as Xr, Wand as Zr, WarningIcon as Qr, WifiIcon as Yr, WifiOffIcon as qr, Workflow as Jr, X as jr, XCircle as $r, Zap as et, ZapIcon as ot } from "./components/icons/index.js";
5
5
  import { DEFAULT_TERMINAL_WORKSPACE_PROFILE as tt, normalizeTerminalWorkspaceProfile as nt } from "./terminal/workspaceProfile.js";
6
6
  import { clampTerminalCursor as at, createTerminalEditorState as mt, deleteTerminalTextBackward as ct, insertTerminalText as lt, moveTerminalCursor as st, navigateTerminalHistory as pt } from "./terminal/editorModel.js";
7
7
  import { applyTerminalSessionSuggestion as dt, createTerminalSessionState as xt, dispatchTerminalSessionKey as It, getTerminalPromptPreview as gt, getTerminalSessionSuggestions as Ct, setTerminalSessionInputValue as ut, submitTerminalSession as St } from "./terminal/sessionModel.js";
8
8
  import { runTerminalMockCommand as ht } from "./terminal/mockRuntime.js";
9
- import { DEFAULT_TERMINAL_SUGGESTION_PROVIDERS as Ft, applyTerminalSuggestion as Pt, autocompleteTerminalInput as yt, createTerminalFullLineSuggestion as Bt, createTerminalTokenSuggestion as vt, getTerminalSuggestions as Dt, matchesTerminalSuggestionPrefix as Mt, parseTerminalSuggestionContext as Lt, terminalCommandTokenSuggestionProvider as wt, terminalHistorySuggestionProvider as At, terminalPathSuggestionProvider as Et, terminalRootSuggestionProvider as bt, terminalSnippetSuggestionProvider as Wt } from "./terminal/suggestionEngine.js";
9
+ import { DEFAULT_TERMINAL_SUGGESTION_PROVIDERS as Ft, applyTerminalSuggestion as Pt, autocompleteTerminalInput as yt, createTerminalFullLineSuggestion as Bt, createTerminalTokenSuggestion as vt, getTerminalSuggestions as Mt, matchesTerminalSuggestionPrefix as Dt, parseTerminalSuggestionContext as Lt, terminalCommandTokenSuggestionProvider as wt, terminalHistorySuggestionProvider as At, terminalPathSuggestionProvider as Et, terminalRootSuggestionProvider as bt, terminalSnippetSuggestionProvider as Wt } from "./terminal/suggestionEngine.js";
10
10
  import { ActivityAppsMain as Ot } from "./app/ActivityAppsMain.js";
11
11
  import { ActivityBar as _t } from "./components/layout/ActivityBar.js";
12
12
  import { AffixInput as Ht, Input as Vt, NumberInput as Ut, Textarea as Kt } from "./components/ui/Input.js";
@@ -16,7 +16,7 @@ import { AttachmentPreview as sn } from "./components/chat/input/AttachmentPrevi
16
16
  import { BlockRenderer as fn } from "./components/chat/blocks/BlockRenderer.js";
17
17
  import { BottomBar as xn, BottomBarItem as In, StatusIndicator as gn } from "./components/layout/BottomBar.js";
18
18
  import { Breadcrumb as un } from "./components/file-browser/Breadcrumb.js";
19
- import { BrokenSymlinkIcon as Tn, CodeFileIcon as hn, ConfigFileIcon as kn, DocumentFileIcon as Fn, FileIcon as Pn, FileItemIcon as yn, FolderIcon as Bn, FolderOpenIcon as vn, ImageFileIcon as Dn, JavaScriptFileIcon as Mn, ShellScriptFileIcon as Ln, StyleFileIcon as wn, SymlinkFileIcon as An, SymlinkFolderIcon as En, SymlinkFolderOpenIcon as bn, TypeScriptFileIcon as Wn, getFileIcon as Rn, resolveFileItemIcon as On } from "./components/file-browser/FileIcons.js";
19
+ import { BrokenSymlinkIcon as Tn, CodeFileIcon as hn, ConfigFileIcon as kn, DocumentFileIcon as Fn, FileIcon as Pn, FileItemIcon as yn, FolderIcon as Bn, FolderOpenIcon as vn, ImageFileIcon as Mn, JavaScriptFileIcon as Dn, ShellScriptFileIcon as Ln, StyleFileIcon as wn, SymlinkFileIcon as An, SymlinkFolderIcon as En, SymlinkFolderOpenIcon as bn, TypeScriptFileIcon as Wn, getFileIcon as Rn, resolveFileItemIcon as On } from "./components/file-browser/FileIcons.js";
20
20
  import { Button as _n } from "./components/ui/Button.js";
21
21
  import { ChatContainer as Hn } from "./components/chat/ChatContainer.js";
22
22
  import { ChatInput as Un } from "./components/chat/input/ChatInput.js";
@@ -31,7 +31,7 @@ import { CommandProvider as pi, createCommandService as fi, useCommand as di } f
31
31
  import { ComponentRegistryProvider as Ii, createComponentRegistry as gi, hasComponentRegistryContext as Ci, useComponentContextFactory as ui, useComponentRegistry as Si, useOptionalComponentRegistry as Ti } from "./context/ComponentRegistry.js";
32
32
  import { ConfirmDialog as ki, Dialog as Fi } from "./components/ui/Dialog.js";
33
33
  import { ConnectionStatus as yi } from "./components/chat/status/ConnectionStatus.js";
34
- import { DECK_GRID_CONFIG as vi, DeckGrid as Di, getGridConfigFromElement as Mi } from "./components/deck/DeckGrid.js";
34
+ import { DECK_GRID_CONFIG as vi, DeckGrid as Mi, getGridConfigFromElement as Di } from "./components/deck/DeckGrid.js";
35
35
  import { DEFAULT_FLOE_CONFIG as wi, FloeConfigProvider as Ai, useFloeConfig as Ei, useResolvedFloeConfig as bi } from "./context/FloeConfigContext.js";
36
36
  import { DEFAULT_VIRTUAL_LIST_CONFIG as Ri } from "./components/chat/types.js";
37
37
  import { DeckCell as Ni } from "./components/deck/DeckCell.js";
@@ -49,7 +49,7 @@ import { FileBrowser as Ca } from "./components/file-browser/FileBrowser.js";
49
49
  import { FileBrowserDragPreview as Sa } from "./components/file-browser/DragPreview.js";
50
50
  import { FileBrowserDragProvider as ha, hasFileBrowserDragContext as ka, useFileBrowserDrag as Fa } from "./context/FileBrowserDragContext.js";
51
51
  import { FileBrowserProvider as ya, useFileBrowser as Ba } from "./components/file-browser/FileBrowserContext.js";
52
- import { FileBrowserToolbar as Da } from "./components/file-browser/FileBrowserToolbar.js";
52
+ import { FileBrowserToolbar as Ma } from "./components/file-browser/FileBrowserToolbar.js";
53
53
  import { FileContextMenu as La } from "./components/file-browser/FileContextMenu.js";
54
54
  import { FileGridView as Aa } from "./components/file-browser/FileGridView.js";
55
55
  import { FileListView as ba } from "./components/file-browser/FileListView.js";
@@ -68,7 +68,7 @@ import { LaunchpadItem as um } from "./components/launchpad/LaunchpadItem.js";
68
68
  import { LaunchpadModal as Tm } from "./components/launchpad/LaunchpadModal.js";
69
69
  import { LaunchpadPagination as km } from "./components/launchpad/LaunchpadPagination.js";
70
70
  import { LaunchpadSearch as Pm } from "./components/launchpad/LaunchpadSearch.js";
71
- import { LayoutProvider as Bm, createLayoutService as vm, useLayout as Dm } from "./context/LayoutContext.js";
71
+ import { LayoutProvider as Bm, createLayoutService as vm, useLayout as Mm } from "./context/LayoutContext.js";
72
72
  import { LayoutSelector as Lm } from "./components/deck/LayoutSelector.js";
73
73
  import { LoadingOverlay as Am } from "./components/loading/LoadingOverlay.js";
74
74
  import { MarkdownBlock as bm } from "./components/chat/blocks/MarkdownBlock.js";
@@ -82,7 +82,7 @@ import { MetricsWidget as Qm } from "./widgets/MetricsWidget.js";
82
82
  import { MobileKeyboard as qm } from "./components/ui/MobileKeyboard.js";
83
83
  import { MobileTabBar as jm } from "./components/layout/MobileTabBar.js";
84
84
  import { NOTES_CONTEXT_MENU_WIDTH_PX as ec, NotesContextMenu as oc, estimateNotesContextMenuHeight as rc } from "./components/notes/NotesContextMenu.js";
85
- import { NOTES_SCALE_MAX as nc, NOTES_SCALE_MIN as ic, NOTE_BUCKET_METRICS as ac, NOTE_COLOR_TOKENS as mc, TOPIC_ACCENT_TOKENS as cc, TOPIC_ICON_KEYS as lc, applyNotesEvent as sc, centerViewportOnWorldPoint as pc, clampScale as fc, computeBoardBounds as dc, createDefaultNotesSnapshot as xc, groupTrashItems as Ic, mergeBoardBounds as gc, nextLocalZIndex as Cc, normalizeNotesSnapshot as uc, noteBucketMetrics as Sc, promoteLocalItem as Tc, removeSnapshotItem as hc, removeSnapshotTopic as kc, removeSnapshotTrashItem as Fc, replaceSnapshotItem as Pc, replaceSnapshotTopic as yc, replaceSnapshotTrashItem as Bc, screenToWorld as vc, visibleWorldRect as Dc, worldToScreen as Mc, zoomViewportAtPoint as Lc } from "./components/notes/types.js";
85
+ import { NOTES_SCALE_MAX as nc, NOTES_SCALE_MIN as ic, NOTE_BUCKET_METRICS as ac, NOTE_COLOR_TOKENS as mc, TOPIC_ACCENT_TOKENS as cc, TOPIC_ICON_KEYS as lc, applyNotesEvent as sc, centerViewportOnWorldPoint as pc, clampScale as fc, computeBoardBounds as dc, createDefaultNotesSnapshot as xc, groupTrashItems as Ic, mergeBoardBounds as gc, nextLocalZIndex as Cc, normalizeNotesSnapshot as uc, noteBucketMetrics as Sc, promoteLocalItem as Tc, removeSnapshotItem as hc, removeSnapshotTopic as kc, removeSnapshotTrashItem as Fc, replaceSnapshotItem as Pc, replaceSnapshotTopic as yc, replaceSnapshotTrashItem as Bc, screenToWorld as vc, visibleWorldRect as Mc, worldToScreen as Dc, zoomViewportAtPoint as Lc } from "./components/notes/types.js";
86
86
  import { NOTE_COLOR_LABELS as Ac, NotesAnimalIcon as Ec, NotesOverlayIcon as bc, NotesTrashCanIcon as Wc, TOPIC_ACCENT_LABELS as Rc } from "./components/notes/notesAppearance.js";
87
87
  import { NotesOverlay as Nc } from "./components/notes/NotesOverlay.js";
88
88
  import { NotificationContainer as Gc, NotificationProvider as Hc, createNotificationService as Vc, useNotification as Uc } from "./context/NotificationContext.js";
@@ -99,7 +99,7 @@ import { Sidebar as dl, SidebarContent as xl, SidebarItem as Il, SidebarItemList
99
99
  import { SidebarPane as Sl } from "./components/layout/SidebarPane.js";
100
100
  import { Skeleton as hl, SkeletonCard as kl, SkeletonList as Fl, SkeletonText as Pl } from "./components/loading/Skeleton.js";
101
101
  import { SnakeLoader as Bl } from "./components/loading/SnakeLoader.js";
102
- import { Stepper as Dl, Wizard as Ml, useWizard as Ll } from "./components/ui/Stepper.js";
102
+ import { Stepper as Ml, Wizard as Dl, useWizard as Ll } from "./components/ui/Stepper.js";
103
103
  import { StreamingCursor as Al } from "./components/chat/status/StreamingCursor.js";
104
104
  import { SvgBlock as bl } from "./components/chat/blocks/SvgBlock.js";
105
105
  import { Switch as Rl } from "./components/ui/Switch.js";
@@ -120,7 +120,7 @@ import { WidgetPalette as Is } from "./components/deck/WidgetPalette.js";
120
120
  import { WidgetRegistryProvider as Cs, createWidgetRegistry as us, useWidgetRegistry as Ss } from "./context/WidgetRegistry.js";
121
121
  import { WidgetResizeHandle as hs } from "./components/deck/WidgetResizeHandle.js";
122
122
  import { WidgetStateProvider as Fs, useCurrentWidgetId as Ps, useWidgetState as ys, useWidgetStateContext as Bs } from "./context/WidgetStateContext.js";
123
- import { WidgetTypeSwitcher as Ds } from "./components/deck/WidgetTypeSwitcher.js";
123
+ import { WidgetTypeSwitcher as Ms } from "./components/deck/WidgetTypeSwitcher.js";
124
124
  import { WorkingIndicator as Ls } from "./components/chat/status/WorkingIndicator.js";
125
125
  import { applyDragDelta as As, applyResizeDelta as Es, getGridCellSize as bs, pixelDeltaToGridDelta as Ws, positionToGridArea as Rs, snapToGrid as Os } from "./utils/gridLayout.js";
126
126
  import { buildAssistantNoticeEvents as _s, createStreamEventBuilder as Gs, isStreamEvent as Hs } from "./components/chat/streamEvents.js";
@@ -132,21 +132,21 @@ import { configureMermaidWorker as fp, configureSyncMermaid as dp, renderMermaid
132
132
  import { configureShikiWorker as up, configureSyncHighlighter as Sp, highlightCode as Tp, terminateShikiWorker as hp, useCodeHighlight as kp } from "./components/chat/hooks/useCodeHighlight.js";
133
133
  import { createSimpleContext as Pp } from "./context/createSimpleContext.js";
134
134
  import { deferAfterPaint as Bp, deferNonBlocking as vp } from "./utils/defer.js";
135
- import { duration as Mp, easing as Lp, fadeIn as wp, listContainer as Ap, listItem as Ep, panelResize as bp, popIn as Wp, scaleIn as Rp, sidebarVariants as Op, slideInFromBottom as Np, slideInFromLeft as _p, slideInFromRight as Gp, slideInFromTop as Hp, springConfig as Vp } from "./utils/animations.js";
136
- import { formatKeybind as Kp, matchKeybind as zp, parseKeybind as Xp } from "./utils/keybind.js";
137
- import { isTypingElement as Qp, shouldIgnoreHotkeys as Yp } from "./utils/dom.js";
138
- import { lockBodyStyle as Jp } from "./utils/bodyStyleLock.js";
139
- import { registerCommandContributions as $p, useCommandContributions as ef } from "./hooks/useCommandContributions.js";
140
- import { useAttachments as rf } from "./components/chat/hooks/useAttachments.js";
141
- import { useAutoScroll as nf } from "./components/chat/hooks/useAutoScroll.js";
142
- import { useDebounce as mf } from "./hooks/useDebounce.js";
143
- import { useDeckDrag as lf } from "./hooks/useDeckDrag.js";
144
- import { useFileBrowserDropTarget as pf, useFileBrowserItemDrag as ff } from "./hooks/useFileBrowserDrag.js";
145
- import { useKeybind as xf } from "./hooks/useKeybind.js";
146
- import { useMediaQuery as gf } from "./hooks/useMediaQuery.js";
147
- import { usePersisted as uf } from "./hooks/usePersisted.js";
148
- import { useResizeObserver as Tf } from "./hooks/useResizeObserver.js";
149
- import { useVirtualList as kf } from "./components/chat/hooks/useVirtualList.js";
135
+ import { duration as Dp, easing as Lp, fadeIn as wp, listContainer as Ap, listItem as Ep, panelResize as bp, popIn as Wp, scaleIn as Rp, sidebarVariants as Op, slideInFromBottom as Np, slideInFromLeft as _p, slideInFromRight as Gp, slideInFromTop as Hp, springConfig as Vp } from "./utils/animations.js";
136
+ import { formatKeybind as Kp, isMacLikePlatform as zp, isPrimaryModKeyPressed as Xp, matchKeybind as Zp, parseKeybind as Qp } from "./utils/keybind.js";
137
+ import { isTypingElement as qp, shouldIgnoreHotkeys as Jp } from "./utils/dom.js";
138
+ import { lockBodyStyle as $p } from "./utils/bodyStyleLock.js";
139
+ import { registerCommandContributions as of, useCommandContributions as rf } from "./hooks/useCommandContributions.js";
140
+ import { useAttachments as nf } from "./components/chat/hooks/useAttachments.js";
141
+ import { useAutoScroll as mf } from "./components/chat/hooks/useAutoScroll.js";
142
+ import { useDebounce as lf } from "./hooks/useDebounce.js";
143
+ import { useDeckDrag as pf } from "./hooks/useDeckDrag.js";
144
+ import { useFileBrowserDropTarget as df, useFileBrowserItemDrag as xf } from "./hooks/useFileBrowserDrag.js";
145
+ import { useKeybind as gf } from "./hooks/useKeybind.js";
146
+ import { useMediaQuery as uf } from "./hooks/useMediaQuery.js";
147
+ import { usePersisted as Tf } from "./hooks/usePersisted.js";
148
+ import { useResizeObserver as kf } from "./hooks/useResizeObserver.js";
149
+ import { useVirtualList as Pf } from "./components/chat/hooks/useVirtualList.js";
150
150
  export {
151
151
  F as Activity,
152
152
  Ot as ActivityAppsMain,
@@ -158,8 +158,8 @@ export {
158
158
  Xt as AnimatedBorderCard,
159
159
  v as ArchiveIcon,
160
160
  tn as AreaChart,
161
- D as ArrowDown,
162
- M as ArrowLeft,
161
+ M as ArrowDown,
162
+ D as ArrowLeft,
163
163
  L as ArrowRight,
164
164
  w as ArrowRightLeft,
165
165
  A as ArrowUp,
@@ -241,7 +241,7 @@ export {
241
241
  Ce as Database,
242
242
  ue as DatabaseIcon,
243
243
  Ni as DeckCell,
244
- Di as DeckGrid,
244
+ Mi as DeckGrid,
245
245
  Gi as DeckProvider,
246
246
  Ki as DeckTopBar,
247
247
  Fi as Dialog,
@@ -268,14 +268,14 @@ export {
268
268
  Sa as FileBrowserDragPreview,
269
269
  ha as FileBrowserDragProvider,
270
270
  ya as FileBrowserProvider,
271
- Da as FileBrowserToolbar,
272
- De as FileCode,
271
+ Ma as FileBrowserToolbar,
272
+ Me as FileCode,
273
273
  La as FileContextMenu,
274
274
  Aa as FileGridView,
275
275
  Pn as FileIcon,
276
276
  yn as FileItemIcon,
277
277
  ba as FileListView,
278
- Me as FilePlus,
278
+ De as FilePlus,
279
279
  Le as FilePlusIcon,
280
280
  Ra as FileSavePicker,
281
281
  we as FileText,
@@ -325,7 +325,7 @@ export {
325
325
  ro as HomeIcon,
326
326
  to as Image,
327
327
  cm as ImageBlock,
328
- Dn as ImageFileIcon,
328
+ Mn as ImageFileIcon,
329
329
  no as ImageIcon,
330
330
  sm as InfiniteCanvas,
331
331
  io as Info,
@@ -333,7 +333,7 @@ export {
333
333
  ao as InfoIcon,
334
334
  Vt as Input,
335
335
  $t as Interactive3DCard,
336
- Mn as JavaScriptFileIcon,
336
+ Dn as JavaScriptFileIcon,
337
337
  fm as KeepAliveStack,
338
338
  mo as Key,
339
339
  co as KeyIcon,
@@ -374,8 +374,8 @@ export {
374
374
  Bo as MessageSquare,
375
375
  Qm as MetricsWidget,
376
376
  vo as Mic,
377
- Do as MicIcon,
378
- Mo as MicOff,
377
+ Mo as MicIcon,
378
+ Do as MicOff,
379
379
  Lo as Minus,
380
380
  wo as MinusIcon,
381
381
  qm as MobileKeyboard,
@@ -474,7 +474,7 @@ export {
474
474
  Tr as Star,
475
475
  hr as StarIcon,
476
476
  gn as StatusIndicator,
477
- Dl as Stepper,
477
+ Ml as Stepper,
478
478
  ti as StepsProgress,
479
479
  kr as Stop,
480
480
  Al as StreamingCursor,
@@ -496,8 +496,8 @@ export {
496
496
  Hl as Tag,
497
497
  Br as TagIcon,
498
498
  vr as TargetIcon,
499
- Dr as Terminal,
500
- Mr as TerminalIcon,
499
+ Mr as Terminal,
500
+ Dr as TerminalIcon,
501
501
  Ul as TerminalWidget,
502
502
  Xl as TextBlock,
503
503
  Kt as Textarea,
@@ -536,10 +536,10 @@ export {
536
536
  Cs as WidgetRegistryProvider,
537
537
  hs as WidgetResizeHandle,
538
538
  Fs as WidgetStateProvider,
539
- Ds as WidgetTypeSwitcher,
539
+ Ms as WidgetTypeSwitcher,
540
540
  Yr as WifiIcon,
541
541
  qr as WifiOffIcon,
542
- Ml as Wizard,
542
+ Dl as Wizard,
543
543
  Jr as Workflow,
544
544
  Ls as WorkingIndicator,
545
545
  jr as X,
@@ -591,7 +591,7 @@ export {
591
591
  vp as deferNonBlocking,
592
592
  ct as deleteTerminalTextBackward,
593
593
  It as dispatchTerminalSessionKey,
594
- Mp as duration,
594
+ Dp as duration,
595
595
  Lp as easing,
596
596
  rc as estimateNotesContextMenuHeight,
597
597
  wp as fadeIn,
@@ -609,11 +609,11 @@ export {
609
609
  Rn as getFileIcon,
610
610
  h as getFloeColorTokenValue,
611
611
  bs as getGridCellSize,
612
- Mi as getGridConfigFromElement,
612
+ Di as getGridConfigFromElement,
613
613
  a as getSystemTheme,
614
614
  gt as getTerminalPromptPreview,
615
615
  Ct as getTerminalSessionSuggestions,
616
- Dt as getTerminalSuggestions,
616
+ Mt as getTerminalSuggestions,
617
617
  Ic as groupTrashItems,
618
618
  Xs as hasCollision,
619
619
  Ci as hasComponentRegistryContext,
@@ -622,13 +622,15 @@ export {
622
622
  ap as hasMarkdownWorker,
623
623
  Tp as highlightCode,
624
624
  lt as insertTerminalText,
625
+ zp as isMacLikePlatform,
626
+ Xp as isPrimaryModKeyPressed,
625
627
  Hs as isStreamEvent,
626
- Qp as isTypingElement,
628
+ qp as isTypingElement,
627
629
  Ap as listContainer,
628
630
  Ep as listItem,
629
- Jp as lockBodyStyle,
630
- zp as matchKeybind,
631
- Mt as matchesTerminalSuggestionPrefix,
631
+ $p as lockBodyStyle,
632
+ Zp as matchKeybind,
633
+ Dt as matchesTerminalSuggestionPrefix,
632
634
  gc as mergeBoardBounds,
633
635
  m as mergeThemeTokenMaps,
634
636
  st as moveTerminalCursor,
@@ -638,13 +640,13 @@ export {
638
640
  nt as normalizeTerminalWorkspaceProfile,
639
641
  Sc as noteBucketMetrics,
640
642
  bp as panelResize,
641
- Xp as parseKeybind,
643
+ Qp as parseKeybind,
642
644
  Lt as parseTerminalSuggestionContext,
643
645
  Ws as pixelDeltaToGridDelta,
644
646
  Wp as popIn,
645
647
  Rs as positionToGridArea,
646
648
  Tc as promoteLocalItem,
647
- $p as registerCommandContributions,
649
+ of as registerCommandContributions,
648
650
  hc as removeSnapshotItem,
649
651
  kc as removeSnapshotTopic,
650
652
  Fc as removeSnapshotTrashItem,
@@ -661,7 +663,7 @@ export {
661
663
  Rp as scaleIn,
662
664
  vc as screenToWorld,
663
665
  ut as setTerminalSessionInputValue,
664
- Yp as shouldIgnoreHotkeys,
666
+ Jp as shouldIgnoreHotkeys,
665
667
  Op as sidebarVariants,
666
668
  Np as slideInFromBottom,
667
669
  _p as slideInFromLeft,
@@ -681,43 +683,43 @@ export {
681
683
  lp as terminateMarkdownWorker,
682
684
  Ip as terminateMermaidWorker,
683
685
  hp as terminateShikiWorker,
684
- rf as useAttachments,
685
- nf as useAutoScroll,
686
+ nf as useAttachments,
687
+ mf as useAutoScroll,
686
688
  Xn as useChatContext,
687
689
  kp as useCodeHighlight,
688
690
  di as useCommand,
689
- ef as useCommandContributions,
691
+ rf as useCommandContributions,
690
692
  ui as useComponentContextFactory,
691
693
  Si as useComponentRegistry,
692
694
  Ps as useCurrentWidgetId,
693
- mf as useDebounce,
695
+ lf as useDebounce,
694
696
  Vi as useDeck,
695
- lf as useDeckDrag,
697
+ pf as useDeckDrag,
696
698
  Ba as useFileBrowser,
697
699
  Fa as useFileBrowserDrag,
698
- pf as useFileBrowserDropTarget,
699
- ff as useFileBrowserItemDrag,
700
+ df as useFileBrowserDropTarget,
701
+ xf as useFileBrowserItemDrag,
700
702
  Ei as useFloeConfig,
701
703
  am as useFormSubmitting,
702
- xf as useKeybind,
703
- Dm as useLayout,
704
- gf as useMediaQuery,
704
+ gf as useKeybind,
705
+ Mm as useLayout,
706
+ uf as useMediaQuery,
705
707
  gp as useMermaid,
706
708
  Uc as useNotification,
707
709
  Ti as useOptionalComponentRegistry,
708
- uf as usePersisted,
709
- Tf as useResizeObserver,
710
+ Tf as usePersisted,
711
+ kf as useResizeObserver,
710
712
  bi as useResolvedFloeConfig,
711
713
  ql as useTheme,
712
714
  ls as useViewActivation,
713
- kf as useVirtualList,
715
+ Pf as useVirtualList,
714
716
  Ss as useWidgetRegistry,
715
717
  ys as useWidgetState,
716
718
  Bs as useWidgetStateContext,
717
719
  Ll as useWizard,
718
- Dc as visibleWorldRect,
720
+ Mc as visibleWorldRect,
719
721
  rp as waitForDiffWorker,
720
722
  sp as waitForMarkdownWorker,
721
- Mc as worldToScreen,
723
+ Dc as worldToScreen,
722
724
  Lc as zoomViewportAtPoint
723
725
  };