@quanta-intellect/vessel-browser 0.1.69 → 0.1.71
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.
|
@@ -1435,6 +1435,7 @@ function Dynamic(props) {
|
|
|
1435
1435
|
}
|
|
1436
1436
|
var _tmpl$$i = /* @__PURE__ */ template(`<div class=title-bar><div class=title-bar-drag></div><div class=mcp-status-area><button class=mcp-status-indicator><span class=mcp-dot></span><span class=mcp-label>MCP</span></button></div><div class=window-controls><button class=window-btn data-tooltip=Minimize><svg width=10 height=10 viewBox="0 0 10 10"><rect x=1 y=5 width=8 height=1 fill=currentColor></rect></svg></button><button class=window-btn data-tooltip=Maximize><svg width=10 height=10 viewBox="0 0 10 10"><rect x=1 y=1 width=8 height=8 fill=none stroke=currentColor stroke-width=1></rect></svg></button><button class="window-btn window-btn-close"data-tooltip=Close><svg width=10 height=10 viewBox="0 0 10 10"><line x1=1 y1=1 x2=9 y2=9 stroke=currentColor stroke-width=1.2></line><line x1=9 y1=1 x2=1 y2=9 stroke=currentColor stroke-width=1.2>`);
|
|
1437
1437
|
const TitleBar = () => {
|
|
1438
|
+
const isPrivateWindow = new URLSearchParams(window.location.search).get("private") === "1";
|
|
1438
1439
|
const [mcpStatus, setMcpStatus] = createSignal("starting");
|
|
1439
1440
|
const [mcpTooltip, setMcpTooltip] = createSignal("MCP: starting...");
|
|
1440
1441
|
const applyHealth = (health) => {
|
|
@@ -1461,6 +1462,7 @@ const TitleBar = () => {
|
|
|
1461
1462
|
onCleanup(unsubscribe);
|
|
1462
1463
|
});
|
|
1463
1464
|
const handleMcpClick = () => {
|
|
1465
|
+
if (isPrivateWindow) return;
|
|
1464
1466
|
window.vessel.ui.setSettingsVisibility(true);
|
|
1465
1467
|
};
|
|
1466
1468
|
return (() => {
|
|
@@ -1594,7 +1596,12 @@ function useTabs() {
|
|
|
1594
1596
|
patchTab(id, { adBlockingEnabled: newState });
|
|
1595
1597
|
}
|
|
1596
1598
|
return newState;
|
|
1597
|
-
}
|
|
1599
|
+
},
|
|
1600
|
+
zoomIn: (id) => window.vessel.tabs.zoomIn(id),
|
|
1601
|
+
zoomOut: (id) => window.vessel.tabs.zoomOut(id),
|
|
1602
|
+
zoomReset: (id) => window.vessel.tabs.zoomReset(id),
|
|
1603
|
+
reopenClosed: () => window.vessel.tabs.reopenClosed(),
|
|
1604
|
+
duplicate: (id) => window.vessel.tabs.duplicate(id)
|
|
1598
1605
|
};
|
|
1599
1606
|
}
|
|
1600
1607
|
const [now, setNow] = createSignal(Date.now());
|
|
@@ -1773,7 +1780,7 @@ function getAgentPresence(state, currentTime = Date.now()) {
|
|
|
1773
1780
|
}
|
|
1774
1781
|
return "idle";
|
|
1775
1782
|
}
|
|
1776
|
-
var _tmpl$$h = /* @__PURE__ */ template(`<img class=tab-favicon alt>`), _tmpl$2$f = /* @__PURE__ */ template(`<span class=tab-favicon-fallback>`), _tmpl$3$c = /* @__PURE__ */ template(`<div class=tab-bar><div class=tab-list><button class=tab-new data-tooltip="New
|
|
1783
|
+
var _tmpl$$h = /* @__PURE__ */ template(`<img class=tab-favicon alt>`), _tmpl$2$f = /* @__PURE__ */ template(`<span class=tab-favicon-fallback>`), _tmpl$3$c = /* @__PURE__ */ template(`<div class=tab-bar><div class=tab-list></div><div class=tab-actions><button class=tab-new data-tooltip="New tab"data-tooltip-pos=left>+</button><button class="tab-new tab-new-private"data-tooltip="Private window"data-tooltip-pos=left><svg width=12 height=12 viewBox="0 0 16 16"fill=currentColor><path d="M8 1a7 7 0 100 14A7 7 0 008 1zm0 1.5a5.5 5.5 0 110 11 5.5 5.5 0 010-11z">`), _tmpl$4$c = /* @__PURE__ */ template(`<div role=tab><span class=tab-title></span><button class=tab-close>×`), _tmpl$5$b = /* @__PURE__ */ template(`<span class=tab-agent-indicator aria-hidden=true title="Agent active on this tab">`), _tmpl$6$a = /* @__PURE__ */ template(`<span class=tab-loading>`);
|
|
1777
1784
|
const TAB_CLOSE_MS = 200;
|
|
1778
1785
|
function stringToHue(str) {
|
|
1779
1786
|
let hash = 0;
|
|
@@ -1840,18 +1847,22 @@ const TabBar = () => {
|
|
|
1840
1847
|
}, TAB_CLOSE_MS);
|
|
1841
1848
|
};
|
|
1842
1849
|
return (() => {
|
|
1843
|
-
var _el$3 = _tmpl$3$c(), _el$4 = _el$3.firstChild, _el$5 = _el$4.firstChild;
|
|
1850
|
+
var _el$3 = _tmpl$3$c(), _el$4 = _el$3.firstChild, _el$5 = _el$4.nextSibling, _el$6 = _el$5.firstChild, _el$7 = _el$6.nextSibling;
|
|
1844
1851
|
insert(_el$4, createComponent(For, {
|
|
1845
1852
|
get each() {
|
|
1846
1853
|
return tabs2();
|
|
1847
1854
|
},
|
|
1848
1855
|
children: (tab) => (() => {
|
|
1849
|
-
var _el$
|
|
1850
|
-
_el$
|
|
1856
|
+
var _el$8 = _tmpl$4$c(), _el$9 = _el$8.firstChild, _el$0 = _el$9.nextSibling;
|
|
1857
|
+
_el$8.$$contextmenu = (e) => {
|
|
1858
|
+
e.preventDefault();
|
|
1859
|
+
window.vessel.tabs.showContextMenu(tab.id);
|
|
1860
|
+
};
|
|
1861
|
+
_el$8.addEventListener("auxclick", (e) => {
|
|
1851
1862
|
if (e.button === 1) handleClose(tab.id);
|
|
1852
1863
|
});
|
|
1853
|
-
_el$
|
|
1854
|
-
insert(_el$
|
|
1864
|
+
_el$8.$$click = () => switchTab(tab.id);
|
|
1865
|
+
insert(_el$8, createComponent(TabFavicon, {
|
|
1855
1866
|
get favicon() {
|
|
1856
1867
|
return tab.favicon;
|
|
1857
1868
|
},
|
|
@@ -1861,39 +1872,40 @@ const TabBar = () => {
|
|
|
1861
1872
|
get url() {
|
|
1862
1873
|
return tab.url;
|
|
1863
1874
|
}
|
|
1864
|
-
}), _el$
|
|
1865
|
-
insert(_el$
|
|
1875
|
+
}), _el$9);
|
|
1876
|
+
insert(_el$8, (() => {
|
|
1866
1877
|
var _c$ = memo(() => !!modelActiveTabIds().has(tab.id));
|
|
1867
1878
|
return () => _c$() && _tmpl$5$b();
|
|
1868
|
-
})(), _el$
|
|
1869
|
-
insert(_el$
|
|
1870
|
-
insert(_el$
|
|
1879
|
+
})(), _el$9);
|
|
1880
|
+
insert(_el$9, () => tab.title || "New Tab");
|
|
1881
|
+
insert(_el$8, (() => {
|
|
1871
1882
|
var _c$2 = memo(() => !!tab.isLoading);
|
|
1872
1883
|
return () => _c$2() && _tmpl$6$a();
|
|
1873
|
-
})(), _el$
|
|
1874
|
-
_el$
|
|
1884
|
+
})(), _el$0);
|
|
1885
|
+
_el$0.$$click = (e) => {
|
|
1875
1886
|
e.stopPropagation();
|
|
1876
1887
|
handleClose(tab.id);
|
|
1877
1888
|
};
|
|
1878
1889
|
createRenderEffect((_p$) => {
|
|
1879
1890
|
var _v$ = `tab-item ${tab.id === activeTabId2() ? "active" : ""} ${modelActiveTabIds().has(tab.id) ? "model-active" : ""}`, _v$2 = !!closingTabIds().has(tab.id), _v$3 = modelActiveTabIds().has(tab.id) ? `${tab.title || "New Tab"} • Agent active` : tab.title;
|
|
1880
|
-
_v$ !== _p$.e && className(_el$
|
|
1881
|
-
_v$2 !== _p$.t && _el$
|
|
1882
|
-
_v$3 !== _p$.a && setAttribute(_el$
|
|
1891
|
+
_v$ !== _p$.e && className(_el$8, _p$.e = _v$);
|
|
1892
|
+
_v$2 !== _p$.t && _el$8.classList.toggle("closing", _p$.t = _v$2);
|
|
1893
|
+
_v$3 !== _p$.a && setAttribute(_el$8, "title", _p$.a = _v$3);
|
|
1883
1894
|
return _p$;
|
|
1884
1895
|
}, {
|
|
1885
1896
|
e: void 0,
|
|
1886
1897
|
t: void 0,
|
|
1887
1898
|
a: void 0
|
|
1888
1899
|
});
|
|
1889
|
-
return _el$
|
|
1900
|
+
return _el$8;
|
|
1890
1901
|
})()
|
|
1891
|
-
})
|
|
1892
|
-
_el$
|
|
1902
|
+
}));
|
|
1903
|
+
_el$6.$$click = () => createTab();
|
|
1904
|
+
_el$7.$$click = () => window.vessel.tabs.openPrivateWindow();
|
|
1893
1905
|
return _el$3;
|
|
1894
1906
|
})();
|
|
1895
1907
|
};
|
|
1896
|
-
delegateEvents(["click"]);
|
|
1908
|
+
delegateEvents(["click", "contextmenu"]);
|
|
1897
1909
|
const DEFAULT_SIDEBAR_WIDTH = 400;
|
|
1898
1910
|
const MIN_SIDEBAR = 240;
|
|
1899
1911
|
const MAX_SIDEBAR = 800;
|
|
@@ -1964,6 +1976,82 @@ function useUI() {
|
|
|
1964
1976
|
}
|
|
1965
1977
|
};
|
|
1966
1978
|
}
|
|
1979
|
+
const logger$3 = createLogger("HistoryStore");
|
|
1980
|
+
const INITIAL$1 = { entries: [] };
|
|
1981
|
+
const [historyState, setHistoryState] = createSignal(INITIAL$1);
|
|
1982
|
+
let initialized$2 = false;
|
|
1983
|
+
let initPromise$1 = null;
|
|
1984
|
+
async function init$2() {
|
|
1985
|
+
if (initPromise$1) return initPromise$1;
|
|
1986
|
+
if (initialized$2) return;
|
|
1987
|
+
initialized$2 = true;
|
|
1988
|
+
initPromise$1 = (async () => {
|
|
1989
|
+
try {
|
|
1990
|
+
const state = await window.vessel.history.get();
|
|
1991
|
+
setHistoryState(state);
|
|
1992
|
+
window.vessel.history.onUpdate((s) => setHistoryState(s));
|
|
1993
|
+
} catch (error) {
|
|
1994
|
+
initialized$2 = false;
|
|
1995
|
+
logger$3.error("Failed to initialize history store:", error);
|
|
1996
|
+
} finally {
|
|
1997
|
+
initPromise$1 = null;
|
|
1998
|
+
}
|
|
1999
|
+
})();
|
|
2000
|
+
return initPromise$1;
|
|
2001
|
+
}
|
|
2002
|
+
function useHistory() {
|
|
2003
|
+
void init$2();
|
|
2004
|
+
return {
|
|
2005
|
+
historyState,
|
|
2006
|
+
search: (query) => window.vessel.history.search(query),
|
|
2007
|
+
clear: () => window.vessel.history.clear()
|
|
2008
|
+
};
|
|
2009
|
+
}
|
|
2010
|
+
const logger$2 = createLogger("BookmarksStore");
|
|
2011
|
+
const INITIAL = { folders: [], bookmarks: [] };
|
|
2012
|
+
const [bookmarksState, setBookmarksState] = createSignal(INITIAL);
|
|
2013
|
+
let initialized$1 = false;
|
|
2014
|
+
let initPromise = null;
|
|
2015
|
+
async function init$1() {
|
|
2016
|
+
if (initPromise) return initPromise;
|
|
2017
|
+
if (initialized$1) return;
|
|
2018
|
+
initialized$1 = true;
|
|
2019
|
+
initPromise = (async () => {
|
|
2020
|
+
try {
|
|
2021
|
+
const state = await window.vessel.bookmarks.get();
|
|
2022
|
+
setBookmarksState(state);
|
|
2023
|
+
window.vessel.bookmarks.onUpdate((s) => setBookmarksState(s));
|
|
2024
|
+
} catch (error) {
|
|
2025
|
+
initialized$1 = false;
|
|
2026
|
+
logger$2.error("Failed to initialize bookmarks store:", error);
|
|
2027
|
+
} finally {
|
|
2028
|
+
initPromise = null;
|
|
2029
|
+
}
|
|
2030
|
+
})();
|
|
2031
|
+
return initPromise;
|
|
2032
|
+
}
|
|
2033
|
+
function useBookmarks() {
|
|
2034
|
+
void init$1();
|
|
2035
|
+
return {
|
|
2036
|
+
bookmarksState,
|
|
2037
|
+
saveBookmark: (url, title, folderId, note, intent, expectedContent, keyFields, agentHints) => window.vessel.bookmarks.saveBookmark(
|
|
2038
|
+
url,
|
|
2039
|
+
title,
|
|
2040
|
+
folderId,
|
|
2041
|
+
note,
|
|
2042
|
+
intent,
|
|
2043
|
+
expectedContent,
|
|
2044
|
+
keyFields,
|
|
2045
|
+
agentHints
|
|
2046
|
+
),
|
|
2047
|
+
updateBookmark: (id, updates) => window.vessel.bookmarks.updateBookmark(id, updates),
|
|
2048
|
+
removeBookmark: (id) => window.vessel.bookmarks.removeBookmark(id),
|
|
2049
|
+
createFolder: (name) => window.vessel.bookmarks.createFolder(name),
|
|
2050
|
+
createFolderWithSummary: (name, summary) => window.vessel.bookmarks.createFolderWithSummary(name, summary),
|
|
2051
|
+
removeFolder: (id, deleteContents) => window.vessel.bookmarks.removeFolder(id, deleteContents),
|
|
2052
|
+
renameFolder: (id, newName, summary) => window.vessel.bookmarks.renameFolder(id, newName, summary)
|
|
2053
|
+
};
|
|
2054
|
+
}
|
|
1967
2055
|
function normalizePageUrl(rawUrl) {
|
|
1968
2056
|
try {
|
|
1969
2057
|
const url = new URL(rawUrl);
|
|
@@ -2078,7 +2166,15 @@ function buildPageSnapshotKey(rawUrl) {
|
|
|
2078
2166
|
function matchesPageSnapshotUrl(left, right) {
|
|
2079
2167
|
return buildPageSnapshotKey(left) === buildPageSnapshotKey(right);
|
|
2080
2168
|
}
|
|
2081
|
-
|
|
2169
|
+
const SEARCH_ENGINE_PRESETS = {
|
|
2170
|
+
duckduckgo: { label: "DuckDuckGo", url: "https://duckduckgo.com/?q=" },
|
|
2171
|
+
google: { label: "Google", url: "https://www.google.com/search?q=" },
|
|
2172
|
+
bing: { label: "Bing", url: "https://www.bing.com/search?q=" },
|
|
2173
|
+
brave: { label: "Brave Search", url: "https://search.brave.com/search?q=" },
|
|
2174
|
+
ecosia: { label: "Ecosia", url: "https://www.ecosia.org/search?q=" },
|
|
2175
|
+
kagi: { label: "Kagi", url: "https://kagi.com/search?q=" }
|
|
2176
|
+
};
|
|
2177
|
+
var _tmpl$$g = /* @__PURE__ */ template(`<div class=private-badge title="Private Browsing - history and cookies are not saved"><svg width=12 height=12 viewBox="0 0 16 16"fill=currentColor><path d="M8 1a7 7 0 100 14A7 7 0 008 1zm0 1.5a5.5 5.5 0 110 11 5.5 5.5 0 010-11zM5.5 7a1.5 1.5 0 103 0 1.5 1.5 0 00-3 0zm3.5 3.5c0-1-1.5-2-2.5-2s-2.5 1-2.5 2"></path></svg><span>Private`), _tmpl$2$e = /* @__PURE__ */ template(`<div id=address-autocomplete class=autocomplete-dropdown role=listbox>`), _tmpl$3$b = /* @__PURE__ */ template(`<div><span class=agent-status-dot aria-hidden=true></span><span class=agent-status-text>`), _tmpl$4$b = /* @__PURE__ */ template(`<button class="agent-status-badge recent"title="Open the What Changed timeline"style=cursor:pointer;font-size:11px><span class=agent-status-dot aria-hidden=true style=background:#f59e0b></span><span class=agent-status-text>What Changed?`), _tmpl$5$a = /* @__PURE__ */ template(`<span class=page-diff-burst-meta>Updated <!> times over `), _tmpl$6$9 = /* @__PURE__ */ template(`<div class=page-diff-burst-history><div class=page-diff-burst-history-label>Changed recently`), _tmpl$7$7 = /* @__PURE__ */ template(`<div class=page-diff-popup><div class=page-diff-popup-header><div class=page-diff-popup-header-copy><span>What changed since </span></div><div style=display:flex;gap:8px;align-items:center><button class=nav-btn title="Open the full What Changed timeline"style="height:24px;min-width:auto;padding:0 8px">Timeline</button><button class=page-diff-popup-close>×`), _tmpl$8$5 = /* @__PURE__ */ template(`<svg><path d="M3 3 L11 3 L11 9 Q7 13 3 9 Z"fill=none stroke=currentColor stroke-width=1.2 stroke-linejoin=round></svg>`, false, true, false), _tmpl$9$4 = /* @__PURE__ */ template(`<svg><line x1=2 y1=12 x2=12 y2=2 stroke=currentColor stroke-width=1.4 stroke-linecap=round></svg>`, false, true, false), _tmpl$0$4 = /* @__PURE__ */ template(`<button class=nav-btn data-tooltip="Reader Mode"><svg width=14 height=14 viewBox="0 0 14 14"><rect x=2 y=1 width=10 height=12 rx=1 fill=none stroke=currentColor stroke-width=1.2></rect><line x1=4 y1=4 x2=10 y2=4 stroke=currentColor stroke-width=1></line><line x1=4 y1=6.5 x2=10 y2=6.5 stroke=currentColor stroke-width=1></line><line x1=4 y1=9 x2=8 y2=9 stroke=currentColor stroke-width=1>`), _tmpl$1$4 = /* @__PURE__ */ template(`<button class=nav-btn data-tooltip="Dev Tools"><svg width=14 height=14 viewBox="0 0 14 14"><polyline points="3,5 1,7 3,9"fill=none stroke=currentColor stroke-width=1.2 stroke-linecap=round stroke-linejoin=round></polyline><polyline points="11,5 13,7 11,9"fill=none stroke=currentColor stroke-width=1.2 stroke-linecap=round stroke-linejoin=round></polyline><line x1=8.5 y1=2 x2=5.5 y2=12 stroke=currentColor stroke-width=1.2 stroke-linecap=round>`), _tmpl$10$4 = /* @__PURE__ */ template(`<span class=nav-btn-badge>`), _tmpl$11$4 = /* @__PURE__ */ template(`<button class="nav-btn nav-btn-sidebar"><svg width=14 height=14 viewBox="0 0 14 14"><rect x=1 y=1 width=12 height=12 rx=1.5 fill=none stroke=currentColor stroke-width=1.2></rect><line x1=9 y1=1 x2=9 y2=13 stroke=currentColor stroke-width=1.2>`), _tmpl$12$4 = /* @__PURE__ */ template(`<button class=nav-btn data-tooltip=Settings><svg width=14 height=14 viewBox="0 0 14 14"><circle cx=7 cy=7 r=2 fill=none stroke=currentColor stroke-width=1.2></circle><path d="M7 1v2M7 11v2M1 7h2M11 7h2M2.8 2.8l1.4 1.4M9.8 9.8l1.4 1.4M11.2 2.8l-1.4 1.4M4.2 9.8l-1.4 1.4"stroke=currentColor stroke-width=1 stroke-linecap=round>`), _tmpl$13$3 = /* @__PURE__ */ template(`<div class=address-bar><div class=nav-controls><button class=nav-btn data-tooltip=Back><svg width=14 height=14 viewBox="0 0 14 14"><path d="M9 2L4 7l5 5"fill=none stroke=currentColor stroke-width=1.5 stroke-linecap=round stroke-linejoin=round></path></svg></button><button class=nav-btn data-tooltip=Forward><svg width=14 height=14 viewBox="0 0 14 14"><path d="M5 2l5 5-5 5"fill=none stroke=currentColor stroke-width=1.5 stroke-linecap=round stroke-linejoin=round></path></svg></button><button class=nav-btn data-tooltip=Reload><svg width=14 height=14 viewBox="0 0 14 14"><path d="M2.5 7a4.5 4.5 0 1 1 1 3"fill=none stroke=currentColor stroke-width=1.5 stroke-linecap=round></path><path d="M2 4v3.5h3.5"fill=none stroke=currentColor stroke-width=1.5 stroke-linecap=round stroke-linejoin=round></path></svg></button></div><div class=url-shell><form class=url-form><input class=url-input type=text placeholder="Search or enter URL"autocomplete=off aria-autocomplete=list aria-controls=address-autocomplete></form></div><div class=toolbar-actions><button class=nav-btn><svg width=14 height=14 viewBox="0 0 14 14">`), _tmpl$14$3 = /* @__PURE__ */ template(`<div role=option><span class=autocomplete-icon></span><span class=autocomplete-text><span class=autocomplete-title></span><span class=autocomplete-url>`), _tmpl$15$3 = /* @__PURE__ */ template(`<div class=page-diff-burst-row><span class=page-diff-burst-time></span><span class=page-diff-burst-summary>`), _tmpl$16$3 = /* @__PURE__ */ template(`<div class=page-diff-snippet><span class=page-diff-snippet-label>Before</span><span class=page-diff-snippet-text>`), _tmpl$17$3 = /* @__PURE__ */ template(`<div class=page-diff-snippet><span class=page-diff-snippet-label>After</span><span class=page-diff-snippet-text>`), _tmpl$18$3 = /* @__PURE__ */ template(`<div class=page-diff-snippets>`), _tmpl$19$3 = /* @__PURE__ */ template(`<div class=page-diff-list-group><span class=page-diff-list-label>Added</span><ul class=page-diff-list>`), _tmpl$20$3 = /* @__PURE__ */ template(`<div class=page-diff-list-group><span class=page-diff-list-label>Removed</span><ul class=page-diff-list>`), _tmpl$21$3 = /* @__PURE__ */ template(`<div><div class=page-diff-item-header><span class=page-diff-section></span><span class=page-diff-summary>`), _tmpl$22$3 = /* @__PURE__ */ template(`<li>`);
|
|
2082
2178
|
const AddressBar = () => {
|
|
2083
2179
|
const {
|
|
2084
2180
|
activeTab,
|
|
@@ -2098,16 +2194,48 @@ const AddressBar = () => {
|
|
|
2098
2194
|
toggleDevTools,
|
|
2099
2195
|
devtoolsPanelOpen: devtoolsPanelOpen2
|
|
2100
2196
|
} = useUI();
|
|
2197
|
+
const isPrivateWindow = new URLSearchParams(window.location.search).get("private") === "1";
|
|
2198
|
+
const {
|
|
2199
|
+
historyState: historyState2
|
|
2200
|
+
} = useHistory();
|
|
2201
|
+
const {
|
|
2202
|
+
bookmarksState: bookmarksState2
|
|
2203
|
+
} = useBookmarks();
|
|
2101
2204
|
const [inputValue, setInputValue] = createSignal("");
|
|
2205
|
+
const [showSuggestions, setShowSuggestions] = createSignal(false);
|
|
2206
|
+
const [selectedIndex, setSelectedIndex] = createSignal(-1);
|
|
2207
|
+
const [searchEngine, setSearchEngine] = createSignal("duckduckgo");
|
|
2102
2208
|
const now2 = useNow();
|
|
2103
2209
|
let inputRef;
|
|
2104
2210
|
const agentPresence = createMemo(() => getAgentPresence(runtimeState2(), now2()));
|
|
2105
2211
|
const agentStatusMessage = createMemo(() => getLatestAgentStatusMessage(runtimeState2(), now2()));
|
|
2106
2212
|
const pendingApprovalCount = createMemo(() => runtimeState2().supervisor.pendingApprovals.length);
|
|
2213
|
+
const searchEnginePreset = createMemo(() => {
|
|
2214
|
+
const engine = searchEngine();
|
|
2215
|
+
return engine === "none" ? SEARCH_ENGINE_PRESETS.duckduckgo : SEARCH_ENGINE_PRESETS[engine];
|
|
2216
|
+
});
|
|
2217
|
+
const buildSearchUrl = (query) => searchEnginePreset().url + encodeURIComponent(query);
|
|
2107
2218
|
const [pageDiff, setPageDiff] = createSignal(null);
|
|
2108
2219
|
const [diffExpanded, setDiffExpanded] = createSignal(false);
|
|
2109
2220
|
let diffCollapseTimer = null;
|
|
2221
|
+
onMount(() => {
|
|
2222
|
+
let disposed = false;
|
|
2223
|
+
void window.vessel.settings.get().then((settings) => {
|
|
2224
|
+
if (!disposed) {
|
|
2225
|
+
setSearchEngine(settings.defaultSearchEngine ?? "duckduckgo");
|
|
2226
|
+
}
|
|
2227
|
+
}).catch(() => {
|
|
2228
|
+
});
|
|
2229
|
+
const unsubscribe = window.vessel.settings.onUpdate((settings) => {
|
|
2230
|
+
setSearchEngine(settings.defaultSearchEngine ?? "duckduckgo");
|
|
2231
|
+
});
|
|
2232
|
+
onCleanup(() => {
|
|
2233
|
+
disposed = true;
|
|
2234
|
+
unsubscribe();
|
|
2235
|
+
});
|
|
2236
|
+
});
|
|
2110
2237
|
const showIncomingDiff = (diff) => {
|
|
2238
|
+
if (isPrivateWindow) return;
|
|
2111
2239
|
setPageDiff(diff);
|
|
2112
2240
|
setDiffExpanded(true);
|
|
2113
2241
|
if (diffCollapseTimer) clearTimeout(diffCollapseTimer);
|
|
@@ -2117,6 +2245,7 @@ const AddressBar = () => {
|
|
|
2117
2245
|
}, 8e3);
|
|
2118
2246
|
};
|
|
2119
2247
|
const openDiffTimeline = async () => {
|
|
2248
|
+
if (isPrivateWindow) return;
|
|
2120
2249
|
setDiffExpanded(false);
|
|
2121
2250
|
if (diffCollapseTimer) {
|
|
2122
2251
|
clearTimeout(diffCollapseTimer);
|
|
@@ -2145,6 +2274,7 @@ const AddressBar = () => {
|
|
|
2145
2274
|
return `${hours}h`;
|
|
2146
2275
|
};
|
|
2147
2276
|
createEffect(() => {
|
|
2277
|
+
if (isPrivateWindow) return;
|
|
2148
2278
|
const unsubscribe = window.vessel.pageDiff.onChanged((diff) => {
|
|
2149
2279
|
const tab = activeTab();
|
|
2150
2280
|
if (!tab) return;
|
|
@@ -2163,10 +2293,65 @@ const AddressBar = () => {
|
|
|
2163
2293
|
const tab = activeTab();
|
|
2164
2294
|
if (tab && !inputRef?.matches(":focus")) {
|
|
2165
2295
|
setInputValue(tab.url === "about:blank" ? "" : tab.url);
|
|
2296
|
+
setShowSuggestions(false);
|
|
2297
|
+
setSelectedIndex(-1);
|
|
2298
|
+
}
|
|
2299
|
+
});
|
|
2300
|
+
const MAX_SUGGESTIONS = 8;
|
|
2301
|
+
const suggestions = createMemo(() => {
|
|
2302
|
+
const rawQuery = inputValue().trim();
|
|
2303
|
+
const query = rawQuery.toLowerCase();
|
|
2304
|
+
if (!query || query.length < 2) return [];
|
|
2305
|
+
const results = [];
|
|
2306
|
+
const seen = /* @__PURE__ */ new Set();
|
|
2307
|
+
const matchLimit = MAX_SUGGESTIONS - 1;
|
|
2308
|
+
for (const b of bookmarksState2().bookmarks) {
|
|
2309
|
+
if (seen.has(b.url)) continue;
|
|
2310
|
+
const urlMatch = b.url.toLowerCase().includes(query);
|
|
2311
|
+
const titleMatch = b.title.toLowerCase().includes(query);
|
|
2312
|
+
if (urlMatch || titleMatch) {
|
|
2313
|
+
seen.add(b.url);
|
|
2314
|
+
results.push({
|
|
2315
|
+
url: b.url,
|
|
2316
|
+
title: b.title,
|
|
2317
|
+
source: "bookmark"
|
|
2318
|
+
});
|
|
2319
|
+
}
|
|
2320
|
+
if (results.length >= matchLimit) break;
|
|
2321
|
+
}
|
|
2322
|
+
if (results.length < matchLimit) {
|
|
2323
|
+
for (const h of historyState2().entries) {
|
|
2324
|
+
if (seen.has(h.url)) continue;
|
|
2325
|
+
const urlMatch = h.url.toLowerCase().includes(query);
|
|
2326
|
+
const titleMatch = h.title.toLowerCase().includes(query);
|
|
2327
|
+
if (urlMatch || titleMatch) {
|
|
2328
|
+
seen.add(h.url);
|
|
2329
|
+
results.push({
|
|
2330
|
+
url: h.url,
|
|
2331
|
+
title: h.title,
|
|
2332
|
+
source: "history"
|
|
2333
|
+
});
|
|
2334
|
+
}
|
|
2335
|
+
if (results.length >= matchLimit) break;
|
|
2336
|
+
}
|
|
2337
|
+
}
|
|
2338
|
+
if (results.length < MAX_SUGGESTIONS) {
|
|
2339
|
+
results.push({
|
|
2340
|
+
url: buildSearchUrl(rawQuery),
|
|
2341
|
+
title: `Search for "${rawQuery}"`,
|
|
2342
|
+
subtitle: searchEnginePreset().label,
|
|
2343
|
+
source: "search"
|
|
2344
|
+
});
|
|
2166
2345
|
}
|
|
2346
|
+
return results;
|
|
2167
2347
|
});
|
|
2168
2348
|
createEffect(() => {
|
|
2169
2349
|
const tab = activeTab();
|
|
2350
|
+
if (isPrivateWindow) {
|
|
2351
|
+
setPageDiff(null);
|
|
2352
|
+
setDiffExpanded(false);
|
|
2353
|
+
return;
|
|
2354
|
+
}
|
|
2170
2355
|
if (!tab) {
|
|
2171
2356
|
setPageDiff(null);
|
|
2172
2357
|
setDiffExpanded(false);
|
|
@@ -2190,37 +2375,150 @@ const AddressBar = () => {
|
|
|
2190
2375
|
cancelled = true;
|
|
2191
2376
|
});
|
|
2192
2377
|
});
|
|
2378
|
+
const selectSuggestion = (url) => {
|
|
2379
|
+
setInputValue(url);
|
|
2380
|
+
setShowSuggestions(false);
|
|
2381
|
+
setSelectedIndex(-1);
|
|
2382
|
+
navigate(url);
|
|
2383
|
+
inputRef?.blur();
|
|
2384
|
+
};
|
|
2193
2385
|
const handleSubmit = (e) => {
|
|
2194
2386
|
e.preventDefault();
|
|
2195
|
-
const
|
|
2196
|
-
|
|
2197
|
-
|
|
2198
|
-
|
|
2387
|
+
const idx = selectedIndex();
|
|
2388
|
+
const items = suggestions();
|
|
2389
|
+
if (idx >= 0 && idx < items.length) {
|
|
2390
|
+
selectSuggestion(items[idx].url);
|
|
2391
|
+
} else {
|
|
2392
|
+
const val = inputValue().trim();
|
|
2393
|
+
if (val) {
|
|
2394
|
+
navigate(val);
|
|
2395
|
+
inputRef?.blur();
|
|
2396
|
+
setShowSuggestions(false);
|
|
2397
|
+
}
|
|
2398
|
+
}
|
|
2399
|
+
};
|
|
2400
|
+
const handleInputKeyDown = (e) => {
|
|
2401
|
+
const items = suggestions();
|
|
2402
|
+
const idx = selectedIndex();
|
|
2403
|
+
if (e.key === "ArrowDown") {
|
|
2404
|
+
e.preventDefault();
|
|
2405
|
+
if (items.length > 0) {
|
|
2406
|
+
setShowSuggestions(true);
|
|
2407
|
+
setSelectedIndex(idx < items.length - 1 ? idx + 1 : 0);
|
|
2408
|
+
}
|
|
2409
|
+
} else if (e.key === "ArrowUp") {
|
|
2410
|
+
e.preventDefault();
|
|
2411
|
+
if (items.length > 0) {
|
|
2412
|
+
setShowSuggestions(true);
|
|
2413
|
+
setSelectedIndex(idx > 0 ? idx - 1 : items.length - 1);
|
|
2414
|
+
}
|
|
2415
|
+
} else if (e.key === "Escape") {
|
|
2416
|
+
if (showSuggestions()) {
|
|
2417
|
+
setShowSuggestions(false);
|
|
2418
|
+
setSelectedIndex(-1);
|
|
2419
|
+
} else {
|
|
2420
|
+
inputRef?.blur();
|
|
2421
|
+
}
|
|
2199
2422
|
}
|
|
2200
2423
|
};
|
|
2201
2424
|
const formatSectionLabel = (section) => section === "title" ? "Title" : section === "headings" ? "Headings" : "Content";
|
|
2202
2425
|
return (() => {
|
|
2203
|
-
var _el$ = _tmpl$
|
|
2204
|
-
_el$34.firstChild;
|
|
2205
|
-
var _el$37 = _el$34.nextSibling;
|
|
2426
|
+
var _el$ = _tmpl$13$3(), _el$2 = _el$.firstChild, _el$3 = _el$2.firstChild, _el$4 = _el$3.nextSibling, _el$5 = _el$4.nextSibling, _el$7 = _el$2.nextSibling, _el$8 = _el$7.firstChild, _el$9 = _el$8.firstChild, _el$28 = _el$7.nextSibling, _el$29 = _el$28.firstChild, _el$30 = _el$29.firstChild;
|
|
2206
2427
|
addEventListener(_el$3, "click", goBack, true);
|
|
2207
2428
|
addEventListener(_el$4, "click", goForward, true);
|
|
2208
2429
|
addEventListener(_el$5, "click", reload, true);
|
|
2209
|
-
_el
|
|
2210
|
-
|
|
2211
|
-
|
|
2430
|
+
insert(_el$, createComponent(Show, {
|
|
2431
|
+
when: isPrivateWindow,
|
|
2432
|
+
get children() {
|
|
2433
|
+
return _tmpl$$g();
|
|
2434
|
+
}
|
|
2435
|
+
}), _el$7);
|
|
2436
|
+
_el$8.addEventListener("submit", handleSubmit);
|
|
2437
|
+
_el$9.addEventListener("blur", () => {
|
|
2438
|
+
setTimeout(() => {
|
|
2439
|
+
setShowSuggestions(false);
|
|
2440
|
+
setSelectedIndex(-1);
|
|
2441
|
+
}, 150);
|
|
2442
|
+
});
|
|
2443
|
+
_el$9.$$keydown = handleInputKeyDown;
|
|
2444
|
+
_el$9.addEventListener("focus", (e) => {
|
|
2445
|
+
e.currentTarget.select();
|
|
2446
|
+
const query = inputValue().trim();
|
|
2447
|
+
if (query.length >= 2) setShowSuggestions(true);
|
|
2448
|
+
});
|
|
2449
|
+
_el$9.$$input = (e) => {
|
|
2450
|
+
setInputValue(e.currentTarget.value);
|
|
2451
|
+
setShowSuggestions(true);
|
|
2452
|
+
setSelectedIndex(-1);
|
|
2453
|
+
};
|
|
2212
2454
|
var _ref$ = inputRef;
|
|
2213
|
-
typeof _ref$ === "function" ? use(_ref$, _el$
|
|
2214
|
-
setAttribute(_el$
|
|
2215
|
-
insert(_el$
|
|
2216
|
-
|
|
2455
|
+
typeof _ref$ === "function" ? use(_ref$, _el$9) : inputRef = _el$9;
|
|
2456
|
+
setAttribute(_el$9, "spellcheck", false);
|
|
2457
|
+
insert(_el$7, createComponent(Show, {
|
|
2458
|
+
get when() {
|
|
2459
|
+
return memo(() => !!showSuggestions())() && suggestions().length > 0;
|
|
2460
|
+
},
|
|
2461
|
+
get children() {
|
|
2462
|
+
var _el$0 = _tmpl$2$e();
|
|
2463
|
+
insert(_el$0, createComponent(For, {
|
|
2464
|
+
get each() {
|
|
2465
|
+
return suggestions();
|
|
2466
|
+
},
|
|
2467
|
+
children: (item, i) => (() => {
|
|
2468
|
+
var _el$40 = _tmpl$14$3(), _el$41 = _el$40.firstChild, _el$42 = _el$41.nextSibling, _el$43 = _el$42.firstChild, _el$44 = _el$43.nextSibling;
|
|
2469
|
+
_el$40.addEventListener("mouseenter", () => setSelectedIndex(i()));
|
|
2470
|
+
_el$40.$$mousedown = (e) => {
|
|
2471
|
+
e.preventDefault();
|
|
2472
|
+
selectSuggestion(item.url);
|
|
2473
|
+
};
|
|
2474
|
+
insert(_el$41, (() => {
|
|
2475
|
+
var _c$ = memo(() => item.source === "bookmark");
|
|
2476
|
+
return () => _c$() ? "★" : item.source === "search" ? "⌕" : "◌";
|
|
2477
|
+
})());
|
|
2478
|
+
insert(_el$43, () => item.title || item.url);
|
|
2479
|
+
insert(_el$44, () => item.subtitle || item.url);
|
|
2480
|
+
createRenderEffect((_p$) => {
|
|
2481
|
+
var _v$10 = `address-autocomplete-${i()}`, _v$11 = `autocomplete-item ${selectedIndex() === i() ? "selected" : ""}`, _v$12 = selectedIndex() === i();
|
|
2482
|
+
_v$10 !== _p$.e && setAttribute(_el$40, "id", _p$.e = _v$10);
|
|
2483
|
+
_v$11 !== _p$.t && className(_el$40, _p$.t = _v$11);
|
|
2484
|
+
_v$12 !== _p$.a && setAttribute(_el$40, "aria-selected", _p$.a = _v$12);
|
|
2485
|
+
return _p$;
|
|
2486
|
+
}, {
|
|
2487
|
+
e: void 0,
|
|
2488
|
+
t: void 0,
|
|
2489
|
+
a: void 0
|
|
2490
|
+
});
|
|
2491
|
+
return _el$40;
|
|
2492
|
+
})()
|
|
2493
|
+
}));
|
|
2494
|
+
return _el$0;
|
|
2495
|
+
}
|
|
2496
|
+
}), null);
|
|
2497
|
+
insert(_el$7, createComponent(Show, {
|
|
2498
|
+
when: !isPrivateWindow,
|
|
2499
|
+
get children() {
|
|
2500
|
+
var _el$1 = _tmpl$3$b(), _el$10 = _el$1.firstChild, _el$11 = _el$10.nextSibling;
|
|
2501
|
+
insert(_el$11, () => agentStatusMessage() || (agentPresence() === "active" ? "Agent Active" : agentPresence() === "recent" ? "Agent Connected" : "Agent Offline"));
|
|
2502
|
+
createRenderEffect((_p$) => {
|
|
2503
|
+
var _v$ = `agent-status-badge ${agentPresence()}`, _v$2 = agentStatusMessage() || (agentPresence() === "active" ? "Agent is actively using the browser" : agentPresence() === "recent" ? "Agent is connected" : "No agent connection detected");
|
|
2504
|
+
_v$ !== _p$.e && className(_el$1, _p$.e = _v$);
|
|
2505
|
+
_v$2 !== _p$.t && setAttribute(_el$1, "title", _p$.t = _v$2);
|
|
2506
|
+
return _p$;
|
|
2507
|
+
}, {
|
|
2508
|
+
e: void 0,
|
|
2509
|
+
t: void 0
|
|
2510
|
+
});
|
|
2511
|
+
return _el$1;
|
|
2512
|
+
}
|
|
2513
|
+
}), null);
|
|
2514
|
+
insert(_el$7, createComponent(Show, {
|
|
2217
2515
|
get when() {
|
|
2218
2516
|
return pageDiff();
|
|
2219
2517
|
},
|
|
2220
2518
|
get children() {
|
|
2221
|
-
var _el$
|
|
2222
|
-
_el$
|
|
2223
|
-
return _el$
|
|
2519
|
+
var _el$12 = _tmpl$4$b();
|
|
2520
|
+
_el$12.$$click = () => void openDiffTimeline();
|
|
2521
|
+
return _el$12;
|
|
2224
2522
|
}
|
|
2225
2523
|
}), null);
|
|
2226
2524
|
insert(_el$, createComponent(Show, {
|
|
@@ -2228,176 +2526,212 @@ const AddressBar = () => {
|
|
|
2228
2526
|
return memo(() => !!pageDiff())() && diffExpanded();
|
|
2229
2527
|
},
|
|
2230
2528
|
get children() {
|
|
2231
|
-
var _el$
|
|
2232
|
-
_el$
|
|
2233
|
-
var _el$
|
|
2234
|
-
insert(_el$
|
|
2235
|
-
insert(_el$
|
|
2529
|
+
var _el$13 = _tmpl$7$7(), _el$14 = _el$13.firstChild, _el$15 = _el$14.firstChild, _el$16 = _el$15.firstChild;
|
|
2530
|
+
_el$16.firstChild;
|
|
2531
|
+
var _el$23 = _el$15.nextSibling, _el$24 = _el$23.firstChild, _el$25 = _el$24.nextSibling;
|
|
2532
|
+
insert(_el$16, () => formatRelativeTime(pageDiff().oldSnapshot.capturedAt), null);
|
|
2533
|
+
insert(_el$15, createComponent(Show, {
|
|
2236
2534
|
get when() {
|
|
2237
2535
|
return memo(() => !!((pageDiff().burstCount || 0) > 1 && pageDiff().firstDetectedAt))() && pageDiff().lastDetectedAt;
|
|
2238
2536
|
},
|
|
2239
2537
|
get children() {
|
|
2240
|
-
var _el$
|
|
2241
|
-
_el$
|
|
2242
|
-
insert(_el$
|
|
2243
|
-
insert(_el$
|
|
2244
|
-
return _el$
|
|
2538
|
+
var _el$18 = _tmpl$5$a(), _el$19 = _el$18.firstChild, _el$22 = _el$19.nextSibling;
|
|
2539
|
+
_el$22.nextSibling;
|
|
2540
|
+
insert(_el$18, () => pageDiff().burstCount, _el$22);
|
|
2541
|
+
insert(_el$18, () => formatElapsed(pageDiff().firstDetectedAt, pageDiff().lastDetectedAt), null);
|
|
2542
|
+
return _el$18;
|
|
2245
2543
|
}
|
|
2246
2544
|
}), null);
|
|
2247
|
-
_el$
|
|
2248
|
-
_el$
|
|
2249
|
-
insert(_el$
|
|
2545
|
+
_el$24.$$click = () => void openDiffTimeline();
|
|
2546
|
+
_el$25.$$click = () => setDiffExpanded(false);
|
|
2547
|
+
insert(_el$13, createComponent(Show, {
|
|
2250
2548
|
get when() {
|
|
2251
2549
|
return memo(() => !!pageDiff().recentBursts?.length)() && (pageDiff().recentBursts?.length || 0) > 1;
|
|
2252
2550
|
},
|
|
2253
2551
|
get children() {
|
|
2254
|
-
var _el$
|
|
2255
|
-
_el$
|
|
2256
|
-
insert(_el$
|
|
2552
|
+
var _el$26 = _tmpl$6$9();
|
|
2553
|
+
_el$26.firstChild;
|
|
2554
|
+
insert(_el$26, createComponent(For, {
|
|
2257
2555
|
get each() {
|
|
2258
2556
|
return pageDiff().recentBursts;
|
|
2259
2557
|
},
|
|
2260
2558
|
children: (burst) => (() => {
|
|
2261
|
-
var _el$
|
|
2262
|
-
insert(_el$
|
|
2263
|
-
insert(_el$
|
|
2264
|
-
return _el$
|
|
2559
|
+
var _el$45 = _tmpl$15$3(), _el$46 = _el$45.firstChild, _el$47 = _el$46.nextSibling;
|
|
2560
|
+
insert(_el$46, () => formatRelativeTime(burst.detectedAt));
|
|
2561
|
+
insert(_el$47, () => burst.summary);
|
|
2562
|
+
return _el$45;
|
|
2265
2563
|
})()
|
|
2266
2564
|
}), null);
|
|
2267
|
-
return _el$
|
|
2565
|
+
return _el$26;
|
|
2268
2566
|
}
|
|
2269
2567
|
}), null);
|
|
2270
|
-
insert(_el$
|
|
2568
|
+
insert(_el$13, createComponent(For, {
|
|
2271
2569
|
get each() {
|
|
2272
2570
|
return pageDiff().changes;
|
|
2273
2571
|
},
|
|
2274
2572
|
children: (change) => (() => {
|
|
2275
|
-
var _el$
|
|
2276
|
-
insert(_el$
|
|
2277
|
-
insert(_el$
|
|
2278
|
-
insert(_el$
|
|
2573
|
+
var _el$48 = _tmpl$21$3(), _el$49 = _el$48.firstChild, _el$50 = _el$49.firstChild, _el$51 = _el$50.nextSibling;
|
|
2574
|
+
insert(_el$50, () => formatSectionLabel(change.section));
|
|
2575
|
+
insert(_el$51, () => change.summary);
|
|
2576
|
+
insert(_el$48, createComponent(Show, {
|
|
2279
2577
|
get when() {
|
|
2280
2578
|
return change.before || change.after;
|
|
2281
2579
|
},
|
|
2282
2580
|
get children() {
|
|
2283
|
-
var _el$
|
|
2284
|
-
insert(_el$
|
|
2581
|
+
var _el$52 = _tmpl$18$3();
|
|
2582
|
+
insert(_el$52, createComponent(Show, {
|
|
2285
2583
|
get when() {
|
|
2286
2584
|
return change.before;
|
|
2287
2585
|
},
|
|
2288
2586
|
get children() {
|
|
2289
|
-
var _el$
|
|
2290
|
-
insert(_el$
|
|
2291
|
-
return _el$
|
|
2587
|
+
var _el$53 = _tmpl$16$3(), _el$54 = _el$53.firstChild, _el$55 = _el$54.nextSibling;
|
|
2588
|
+
insert(_el$55, () => change.before);
|
|
2589
|
+
return _el$53;
|
|
2292
2590
|
}
|
|
2293
2591
|
}), null);
|
|
2294
|
-
insert(_el$
|
|
2592
|
+
insert(_el$52, createComponent(Show, {
|
|
2295
2593
|
get when() {
|
|
2296
2594
|
return change.after;
|
|
2297
2595
|
},
|
|
2298
2596
|
get children() {
|
|
2299
|
-
var _el$
|
|
2300
|
-
insert(_el$
|
|
2301
|
-
return _el$
|
|
2597
|
+
var _el$56 = _tmpl$17$3(), _el$57 = _el$56.firstChild, _el$58 = _el$57.nextSibling;
|
|
2598
|
+
insert(_el$58, () => change.after);
|
|
2599
|
+
return _el$56;
|
|
2302
2600
|
}
|
|
2303
2601
|
}), null);
|
|
2304
|
-
return _el$
|
|
2602
|
+
return _el$52;
|
|
2305
2603
|
}
|
|
2306
2604
|
}), null);
|
|
2307
|
-
insert(_el$
|
|
2605
|
+
insert(_el$48, createComponent(Show, {
|
|
2308
2606
|
get when() {
|
|
2309
2607
|
return change.addedItems?.length;
|
|
2310
2608
|
},
|
|
2311
2609
|
get children() {
|
|
2312
|
-
var _el$
|
|
2313
|
-
insert(_el$
|
|
2610
|
+
var _el$59 = _tmpl$19$3(), _el$60 = _el$59.firstChild, _el$61 = _el$60.nextSibling;
|
|
2611
|
+
insert(_el$61, createComponent(For, {
|
|
2314
2612
|
get each() {
|
|
2315
2613
|
return change.addedItems;
|
|
2316
2614
|
},
|
|
2317
2615
|
children: (item) => (() => {
|
|
2318
|
-
var _el$
|
|
2319
|
-
insert(_el$
|
|
2320
|
-
return _el$
|
|
2616
|
+
var _el$65 = _tmpl$22$3();
|
|
2617
|
+
insert(_el$65, item);
|
|
2618
|
+
return _el$65;
|
|
2321
2619
|
})()
|
|
2322
2620
|
}));
|
|
2323
|
-
return _el$
|
|
2621
|
+
return _el$59;
|
|
2324
2622
|
}
|
|
2325
2623
|
}), null);
|
|
2326
|
-
insert(_el$
|
|
2624
|
+
insert(_el$48, createComponent(Show, {
|
|
2327
2625
|
get when() {
|
|
2328
2626
|
return change.removedItems?.length;
|
|
2329
2627
|
},
|
|
2330
2628
|
get children() {
|
|
2331
|
-
var _el$
|
|
2332
|
-
insert(_el$
|
|
2629
|
+
var _el$62 = _tmpl$20$3(), _el$63 = _el$62.firstChild, _el$64 = _el$63.nextSibling;
|
|
2630
|
+
insert(_el$64, createComponent(For, {
|
|
2333
2631
|
get each() {
|
|
2334
2632
|
return change.removedItems;
|
|
2335
2633
|
},
|
|
2336
2634
|
children: (item) => (() => {
|
|
2337
|
-
var _el$
|
|
2338
|
-
insert(_el$
|
|
2339
|
-
return _el$
|
|
2635
|
+
var _el$66 = _tmpl$22$3();
|
|
2636
|
+
insert(_el$66, item);
|
|
2637
|
+
return _el$66;
|
|
2340
2638
|
})()
|
|
2341
2639
|
}));
|
|
2342
|
-
return _el$
|
|
2640
|
+
return _el$62;
|
|
2343
2641
|
}
|
|
2344
2642
|
}), null);
|
|
2345
|
-
createRenderEffect(() => className(_el$
|
|
2346
|
-
return _el$
|
|
2643
|
+
createRenderEffect(() => className(_el$48, `page-diff-item page-diff-${change.kind}`));
|
|
2644
|
+
return _el$48;
|
|
2347
2645
|
})()
|
|
2348
2646
|
}), null);
|
|
2349
|
-
return _el$
|
|
2647
|
+
return _el$13;
|
|
2350
2648
|
}
|
|
2351
|
-
}), _el$
|
|
2352
|
-
_el$
|
|
2649
|
+
}), _el$28);
|
|
2650
|
+
_el$29.$$click = async () => {
|
|
2353
2651
|
const id = activeTabId2();
|
|
2354
2652
|
if (!id) return;
|
|
2355
2653
|
await toggleAdBlock(id);
|
|
2356
2654
|
};
|
|
2357
|
-
insert(_el$
|
|
2655
|
+
insert(_el$30, createComponent(Show, {
|
|
2358
2656
|
get when() {
|
|
2359
2657
|
return activeTab()?.adBlockingEnabled;
|
|
2360
2658
|
},
|
|
2361
2659
|
get children() {
|
|
2362
|
-
return _tmpl$5
|
|
2660
|
+
return _tmpl$8$5();
|
|
2363
2661
|
}
|
|
2364
2662
|
}), null);
|
|
2365
|
-
insert(_el$
|
|
2663
|
+
insert(_el$30, createComponent(Show, {
|
|
2366
2664
|
get when() {
|
|
2367
2665
|
return !activeTab()?.adBlockingEnabled;
|
|
2368
2666
|
},
|
|
2369
2667
|
get children() {
|
|
2370
|
-
return [_tmpl$5
|
|
2668
|
+
return [_tmpl$8$5(), _tmpl$9$4()];
|
|
2371
2669
|
}
|
|
2372
2670
|
}), null);
|
|
2373
|
-
_el$
|
|
2374
|
-
|
|
2375
|
-
|
|
2376
|
-
|
|
2377
|
-
|
|
2378
|
-
|
|
2379
|
-
|
|
2671
|
+
insert(_el$28, createComponent(Show, {
|
|
2672
|
+
when: !isPrivateWindow,
|
|
2673
|
+
get children() {
|
|
2674
|
+
var _el$34 = _tmpl$0$4();
|
|
2675
|
+
_el$34.$$click = () => window.vessel.content.toggleReader();
|
|
2676
|
+
createRenderEffect(() => _el$34.classList.toggle("active", !!activeTab()?.isReaderMode));
|
|
2677
|
+
return _el$34;
|
|
2678
|
+
}
|
|
2679
|
+
}), null);
|
|
2680
|
+
insert(_el$28, createComponent(Show, {
|
|
2681
|
+
when: !isPrivateWindow,
|
|
2380
2682
|
get children() {
|
|
2381
|
-
var _el$
|
|
2382
|
-
|
|
2383
|
-
createRenderEffect(() =>
|
|
2683
|
+
var _el$35 = _tmpl$1$4();
|
|
2684
|
+
addEventListener(_el$35, "click", toggleDevTools, true);
|
|
2685
|
+
createRenderEffect(() => _el$35.classList.toggle("active", !!devtoolsPanelOpen2()));
|
|
2686
|
+
return _el$35;
|
|
2687
|
+
}
|
|
2688
|
+
}), null);
|
|
2689
|
+
insert(_el$28, createComponent(Show, {
|
|
2690
|
+
when: !isPrivateWindow,
|
|
2691
|
+
get children() {
|
|
2692
|
+
var _el$36 = _tmpl$11$4();
|
|
2693
|
+
_el$36.firstChild;
|
|
2694
|
+
addEventListener(_el$36, "click", toggleSidebar, true);
|
|
2695
|
+
insert(_el$36, createComponent(Show, {
|
|
2696
|
+
get when() {
|
|
2697
|
+
return pendingApprovalCount() > 0;
|
|
2698
|
+
},
|
|
2699
|
+
get children() {
|
|
2700
|
+
var _el$38 = _tmpl$10$4();
|
|
2701
|
+
insert(_el$38, pendingApprovalCount);
|
|
2702
|
+
createRenderEffect(() => setAttribute(_el$38, "aria-label", `${pendingApprovalCount()} pending`));
|
|
2703
|
+
return _el$38;
|
|
2704
|
+
}
|
|
2705
|
+
}), null);
|
|
2706
|
+
createRenderEffect((_p$) => {
|
|
2707
|
+
var _v$3 = !!(pendingApprovalCount() > 0), _v$4 = pendingApprovalCount() > 0 ? `AI Sidebar — ${pendingApprovalCount()} pending approval${pendingApprovalCount() > 1 ? "s" : ""}` : "AI Sidebar (Ctrl+Shift+L)";
|
|
2708
|
+
_v$3 !== _p$.e && _el$36.classList.toggle("has-approvals", _p$.e = _v$3);
|
|
2709
|
+
_v$4 !== _p$.t && setAttribute(_el$36, "title", _p$.t = _v$4);
|
|
2710
|
+
return _p$;
|
|
2711
|
+
}, {
|
|
2712
|
+
e: void 0,
|
|
2713
|
+
t: void 0
|
|
2714
|
+
});
|
|
2384
2715
|
return _el$36;
|
|
2385
2716
|
}
|
|
2386
2717
|
}), null);
|
|
2387
|
-
|
|
2718
|
+
insert(_el$28, createComponent(Show, {
|
|
2719
|
+
when: !isPrivateWindow,
|
|
2720
|
+
get children() {
|
|
2721
|
+
var _el$39 = _tmpl$12$4();
|
|
2722
|
+
addEventListener(_el$39, "click", openSettings, true);
|
|
2723
|
+
return _el$39;
|
|
2724
|
+
}
|
|
2725
|
+
}), null);
|
|
2388
2726
|
createRenderEffect((_p$) => {
|
|
2389
|
-
var _v$ = !activeTab()?.canGoBack, _v$
|
|
2390
|
-
_v$ !== _p$.e && (_el$3.disabled = _p$.e = _v$);
|
|
2391
|
-
_v$
|
|
2392
|
-
_v$
|
|
2393
|
-
_v$
|
|
2394
|
-
_v$
|
|
2395
|
-
_v$
|
|
2396
|
-
_v$
|
|
2397
|
-
_v$8 !== _p$.h && _el$32.classList.toggle("active", _p$.h = _v$8);
|
|
2398
|
-
_v$9 !== _p$.r && _el$33.classList.toggle("active", _p$.r = _v$9);
|
|
2399
|
-
_v$0 !== _p$.d && _el$34.classList.toggle("has-approvals", _p$.d = _v$0);
|
|
2400
|
-
_v$1 !== _p$.l && setAttribute(_el$34, "title", _p$.l = _v$1);
|
|
2727
|
+
var _v$5 = !activeTab()?.canGoBack, _v$6 = !activeTab()?.canGoForward, _v$7 = showSuggestions() && suggestions().length > 0, _v$8 = selectedIndex() >= 0 ? `address-autocomplete-${selectedIndex()}` : void 0, _v$9 = !!activeTab()?.adBlockingEnabled, _v$0 = !activeTab()?.adBlockingEnabled, _v$1 = activeTab()?.adBlockingEnabled ? "Ad Block: On (click to disable)" : "Ad Block: Off (click to enable)";
|
|
2728
|
+
_v$5 !== _p$.e && (_el$3.disabled = _p$.e = _v$5);
|
|
2729
|
+
_v$6 !== _p$.t && (_el$4.disabled = _p$.t = _v$6);
|
|
2730
|
+
_v$7 !== _p$.a && setAttribute(_el$9, "aria-expanded", _p$.a = _v$7);
|
|
2731
|
+
_v$8 !== _p$.o && setAttribute(_el$9, "aria-activedescendant", _p$.o = _v$8);
|
|
2732
|
+
_v$9 !== _p$.i && _el$29.classList.toggle("active", _p$.i = _v$9);
|
|
2733
|
+
_v$0 !== _p$.n && _el$29.classList.toggle("nav-btn-muted", _p$.n = _v$0);
|
|
2734
|
+
_v$1 !== _p$.s && setAttribute(_el$29, "title", _p$.s = _v$1);
|
|
2401
2735
|
return _p$;
|
|
2402
2736
|
}, {
|
|
2403
2737
|
e: void 0,
|
|
@@ -2406,17 +2740,13 @@ const AddressBar = () => {
|
|
|
2406
2740
|
o: void 0,
|
|
2407
2741
|
i: void 0,
|
|
2408
2742
|
n: void 0,
|
|
2409
|
-
s: void 0
|
|
2410
|
-
h: void 0,
|
|
2411
|
-
r: void 0,
|
|
2412
|
-
d: void 0,
|
|
2413
|
-
l: void 0
|
|
2743
|
+
s: void 0
|
|
2414
2744
|
});
|
|
2415
|
-
createRenderEffect(() => _el$
|
|
2745
|
+
createRenderEffect(() => _el$9.value = inputValue());
|
|
2416
2746
|
return _el$;
|
|
2417
2747
|
})();
|
|
2418
2748
|
};
|
|
2419
|
-
delegateEvents(["click", "input"]);
|
|
2749
|
+
delegateEvents(["click", "input", "keydown", "mousedown"]);
|
|
2420
2750
|
var _tmpl$$f = /* @__PURE__ */ template(`<div class=bookmark-toast-stack aria-live=polite aria-atomic=true>`), _tmpl$2$d = /* @__PURE__ */ template(`<div class=bookmark-toast role=status><div class=bookmark-toast-title></div><div class=bookmark-toast-message>`);
|
|
2421
2751
|
const TOAST_DURATION_MS$1 = 4200;
|
|
2422
2752
|
const TOAST_EXIT_MS$2 = 300;
|
|
@@ -3154,7 +3484,7 @@ const [pendingQueries, setPendingQueries] = createSignal([]);
|
|
|
3154
3484
|
const [pendingQueryActivities, setPendingQueryActivities] = createSignal([]);
|
|
3155
3485
|
const [queueNotice, setQueueNotice] = createSignal(null);
|
|
3156
3486
|
const [automationActivities, setAutomationActivities] = createSignal([]);
|
|
3157
|
-
let initialized
|
|
3487
|
+
let initialized = false;
|
|
3158
3488
|
let pendingDrainScheduled = false;
|
|
3159
3489
|
let listenerCleanups = [];
|
|
3160
3490
|
let pendingAutomationActivity = null;
|
|
@@ -3212,9 +3542,9 @@ function schedulePendingDrain() {
|
|
|
3212
3542
|
}
|
|
3213
3543
|
});
|
|
3214
3544
|
}
|
|
3215
|
-
function init
|
|
3216
|
-
if (initialized
|
|
3217
|
-
initialized
|
|
3545
|
+
function init() {
|
|
3546
|
+
if (initialized) return;
|
|
3547
|
+
initialized = true;
|
|
3218
3548
|
listenerCleanups.push(window.vessel.ai.onStreamStart((prompt) => {
|
|
3219
3549
|
setMessages((prev) => {
|
|
3220
3550
|
const next = [...prev, { role: "user", content: prompt }];
|
|
@@ -3297,7 +3627,7 @@ function init$2() {
|
|
|
3297
3627
|
}));
|
|
3298
3628
|
}
|
|
3299
3629
|
function useAI() {
|
|
3300
|
-
init
|
|
3630
|
+
init();
|
|
3301
3631
|
const query = async (prompt, activity = null) => {
|
|
3302
3632
|
recordRecentQuery(prompt);
|
|
3303
3633
|
if (isStreaming()) {
|
|
@@ -3513,82 +3843,6 @@ const CommandBar = () => {
|
|
|
3513
3843
|
});
|
|
3514
3844
|
};
|
|
3515
3845
|
delegateEvents(["click", "input", "keydown"]);
|
|
3516
|
-
const logger$3 = createLogger("HistoryStore");
|
|
3517
|
-
const INITIAL$1 = { entries: [] };
|
|
3518
|
-
const [historyState, setHistoryState] = createSignal(INITIAL$1);
|
|
3519
|
-
let initialized$1 = false;
|
|
3520
|
-
let initPromise$1 = null;
|
|
3521
|
-
async function init$1() {
|
|
3522
|
-
if (initPromise$1) return initPromise$1;
|
|
3523
|
-
if (initialized$1) return;
|
|
3524
|
-
initialized$1 = true;
|
|
3525
|
-
initPromise$1 = (async () => {
|
|
3526
|
-
try {
|
|
3527
|
-
const state = await window.vessel.history.get();
|
|
3528
|
-
setHistoryState(state);
|
|
3529
|
-
window.vessel.history.onUpdate((s) => setHistoryState(s));
|
|
3530
|
-
} catch (error) {
|
|
3531
|
-
initialized$1 = false;
|
|
3532
|
-
logger$3.error("Failed to initialize history store:", error);
|
|
3533
|
-
} finally {
|
|
3534
|
-
initPromise$1 = null;
|
|
3535
|
-
}
|
|
3536
|
-
})();
|
|
3537
|
-
return initPromise$1;
|
|
3538
|
-
}
|
|
3539
|
-
function useHistory() {
|
|
3540
|
-
void init$1();
|
|
3541
|
-
return {
|
|
3542
|
-
historyState,
|
|
3543
|
-
search: (query) => window.vessel.history.search(query),
|
|
3544
|
-
clear: () => window.vessel.history.clear()
|
|
3545
|
-
};
|
|
3546
|
-
}
|
|
3547
|
-
const logger$2 = createLogger("BookmarksStore");
|
|
3548
|
-
const INITIAL = { folders: [], bookmarks: [] };
|
|
3549
|
-
const [bookmarksState, setBookmarksState] = createSignal(INITIAL);
|
|
3550
|
-
let initialized = false;
|
|
3551
|
-
let initPromise = null;
|
|
3552
|
-
async function init() {
|
|
3553
|
-
if (initPromise) return initPromise;
|
|
3554
|
-
if (initialized) return;
|
|
3555
|
-
initialized = true;
|
|
3556
|
-
initPromise = (async () => {
|
|
3557
|
-
try {
|
|
3558
|
-
const state = await window.vessel.bookmarks.get();
|
|
3559
|
-
setBookmarksState(state);
|
|
3560
|
-
window.vessel.bookmarks.onUpdate((s) => setBookmarksState(s));
|
|
3561
|
-
} catch (error) {
|
|
3562
|
-
initialized = false;
|
|
3563
|
-
logger$2.error("Failed to initialize bookmarks store:", error);
|
|
3564
|
-
} finally {
|
|
3565
|
-
initPromise = null;
|
|
3566
|
-
}
|
|
3567
|
-
})();
|
|
3568
|
-
return initPromise;
|
|
3569
|
-
}
|
|
3570
|
-
function useBookmarks() {
|
|
3571
|
-
void init();
|
|
3572
|
-
return {
|
|
3573
|
-
bookmarksState,
|
|
3574
|
-
saveBookmark: (url, title, folderId, note, intent, expectedContent, keyFields, agentHints) => window.vessel.bookmarks.saveBookmark(
|
|
3575
|
-
url,
|
|
3576
|
-
title,
|
|
3577
|
-
folderId,
|
|
3578
|
-
note,
|
|
3579
|
-
intent,
|
|
3580
|
-
expectedContent,
|
|
3581
|
-
keyFields,
|
|
3582
|
-
agentHints
|
|
3583
|
-
),
|
|
3584
|
-
updateBookmark: (id, updates) => window.vessel.bookmarks.updateBookmark(id, updates),
|
|
3585
|
-
removeBookmark: (id) => window.vessel.bookmarks.removeBookmark(id),
|
|
3586
|
-
createFolder: (name) => window.vessel.bookmarks.createFolder(name),
|
|
3587
|
-
createFolderWithSummary: (name, summary) => window.vessel.bookmarks.createFolderWithSummary(name, summary),
|
|
3588
|
-
removeFolder: (id, deleteContents) => window.vessel.bookmarks.removeFolder(id, deleteContents),
|
|
3589
|
-
renameFolder: (id, newName, summary) => window.vessel.bookmarks.renameFolder(id, newName, summary)
|
|
3590
|
-
};
|
|
3591
|
-
}
|
|
3592
3846
|
const MEMORY_STORAGE_KEY = "vessel.bookmark-context.memories";
|
|
3593
3847
|
const MAX_MEMORY_LINES = 4;
|
|
3594
3848
|
const MAX_MEMORY_CHARS = 420;
|
|
@@ -8361,14 +8615,6 @@ const DevToolsPanel = () => {
|
|
|
8361
8615
|
})();
|
|
8362
8616
|
};
|
|
8363
8617
|
delegateEvents(["click", "input"]);
|
|
8364
|
-
const SEARCH_ENGINE_PRESETS = {
|
|
8365
|
-
duckduckgo: { label: "DuckDuckGo", url: "https://duckduckgo.com/?q=" },
|
|
8366
|
-
google: { label: "Google", url: "https://www.google.com/search?q=" },
|
|
8367
|
-
bing: { label: "Bing", url: "https://www.bing.com/search?q=" },
|
|
8368
|
-
brave: { label: "Brave Search", url: "https://search.brave.com/search?q=" },
|
|
8369
|
-
ecosia: { label: "Ecosia", url: "https://www.ecosia.org/search?q=" },
|
|
8370
|
-
kagi: { label: "Kagi", url: "https://kagi.com/search?q=" }
|
|
8371
|
-
};
|
|
8372
8618
|
const PROVIDERS = {
|
|
8373
8619
|
anthropic: {
|
|
8374
8620
|
id: "anthropic",
|
|
@@ -10438,28 +10684,52 @@ var _tmpl$$1 = /* @__PURE__ */ template(`<div class=command-bar-overlay><div cla
|
|
|
10438
10684
|
`), _tmpl$3 = /* @__PURE__ */ template(`<div class=keyboard-help-keys>`), _tmpl$4 = /* @__PURE__ */ template(`<div class=keyboard-help-action>`), _tmpl$5 = /* @__PURE__ */ template(`<kbd>`), _tmpl$6 = /* @__PURE__ */ template(`<span class=keyboard-help-plus>+`);
|
|
10439
10685
|
const SHORTCUTS = [{
|
|
10440
10686
|
keys: "Ctrl+L",
|
|
10441
|
-
action: "AI Command Bar"
|
|
10687
|
+
action: "AI Command Bar",
|
|
10688
|
+
privateMode: false
|
|
10442
10689
|
}, {
|
|
10443
10690
|
keys: "Ctrl+Shift+L",
|
|
10444
|
-
action: "Toggle AI Sidebar"
|
|
10691
|
+
action: "Toggle AI Sidebar",
|
|
10692
|
+
privateMode: false
|
|
10445
10693
|
}, {
|
|
10446
10694
|
keys: "Ctrl+Shift+F",
|
|
10447
|
-
action: "Toggle Focus Mode"
|
|
10695
|
+
action: "Toggle Focus Mode",
|
|
10696
|
+
privateMode: false
|
|
10448
10697
|
}, {
|
|
10449
10698
|
keys: "F12",
|
|
10450
|
-
action: "Toggle Dev Tools Panel"
|
|
10699
|
+
action: "Toggle Dev Tools Panel",
|
|
10700
|
+
privateMode: false
|
|
10451
10701
|
}, {
|
|
10452
10702
|
keys: "Ctrl+T",
|
|
10453
10703
|
action: "New Tab"
|
|
10454
10704
|
}, {
|
|
10455
10705
|
keys: "Ctrl+W",
|
|
10456
10706
|
action: "Close Tab"
|
|
10707
|
+
}, {
|
|
10708
|
+
keys: "Ctrl+Shift+T",
|
|
10709
|
+
action: "Reopen Closed Tab"
|
|
10710
|
+
}, {
|
|
10711
|
+
keys: "Ctrl+F",
|
|
10712
|
+
action: "Find in Page"
|
|
10713
|
+
}, {
|
|
10714
|
+
keys: "Ctrl++ / Ctrl+=",
|
|
10715
|
+
action: "Zoom In"
|
|
10716
|
+
}, {
|
|
10717
|
+
keys: "Ctrl+-",
|
|
10718
|
+
action: "Zoom Out"
|
|
10719
|
+
}, {
|
|
10720
|
+
keys: "Ctrl+0",
|
|
10721
|
+
action: "Reset Zoom"
|
|
10722
|
+
}, {
|
|
10723
|
+
keys: "Ctrl+Shift+N",
|
|
10724
|
+
action: "New Private Window"
|
|
10457
10725
|
}, {
|
|
10458
10726
|
keys: "Ctrl+,",
|
|
10459
|
-
action: "Settings"
|
|
10727
|
+
action: "Settings",
|
|
10728
|
+
privateMode: false
|
|
10460
10729
|
}, {
|
|
10461
10730
|
keys: "Ctrl+H",
|
|
10462
|
-
action: "Capture Highlight"
|
|
10731
|
+
action: "Capture Highlight",
|
|
10732
|
+
privateMode: false
|
|
10463
10733
|
}, {
|
|
10464
10734
|
keys: "?",
|
|
10465
10735
|
action: "This help overlay"
|
|
@@ -10469,6 +10739,7 @@ const KeyboardHelp = (props) => {
|
|
|
10469
10739
|
visible,
|
|
10470
10740
|
closing
|
|
10471
10741
|
} = useAnimatedPresence(() => props.open, 200);
|
|
10742
|
+
const shortcuts = () => props.privateMode ? SHORTCUTS.filter((shortcut) => shortcut.privateMode !== false) : SHORTCUTS;
|
|
10472
10743
|
return createComponent(Show, {
|
|
10473
10744
|
get when() {
|
|
10474
10745
|
return visible();
|
|
@@ -10479,7 +10750,7 @@ const KeyboardHelp = (props) => {
|
|
|
10479
10750
|
addEventListener(_el$, "click", props.onClose, true);
|
|
10480
10751
|
_el$2.$$click = (e) => e.stopPropagation();
|
|
10481
10752
|
addEventListener(_el$5, "click", props.onClose, true);
|
|
10482
|
-
insert(_el$6, () =>
|
|
10753
|
+
insert(_el$6, () => shortcuts().map((s) => [(() => {
|
|
10483
10754
|
var _el$8 = _tmpl$3();
|
|
10484
10755
|
insert(_el$8, () => s.keys.split("+").map((k, i) => [i > 0 && _tmpl$6(), (() => {
|
|
10485
10756
|
var _el$0 = _tmpl$5();
|
|
@@ -10502,27 +10773,38 @@ delegateEvents(["click"]);
|
|
|
10502
10773
|
function setupKeybindings(handlers) {
|
|
10503
10774
|
const listener = (e) => {
|
|
10504
10775
|
const ctrl = e.ctrlKey || e.metaKey;
|
|
10505
|
-
|
|
10776
|
+
const key = e.key.toLowerCase();
|
|
10777
|
+
if (ctrl && key === "l" && !e.shiftKey) {
|
|
10506
10778
|
e.preventDefault();
|
|
10507
10779
|
handlers.openCommandBar();
|
|
10508
10780
|
return;
|
|
10509
10781
|
}
|
|
10510
|
-
if (ctrl &&
|
|
10782
|
+
if (ctrl && key === "l" && e.shiftKey) {
|
|
10511
10783
|
e.preventDefault();
|
|
10512
10784
|
handlers.toggleSidebar();
|
|
10513
10785
|
return;
|
|
10514
10786
|
}
|
|
10515
|
-
if (ctrl &&
|
|
10787
|
+
if (ctrl && key === "f" && e.shiftKey) {
|
|
10516
10788
|
e.preventDefault();
|
|
10517
10789
|
handlers.toggleFocusMode();
|
|
10518
10790
|
return;
|
|
10519
10791
|
}
|
|
10520
|
-
if (ctrl &&
|
|
10792
|
+
if (ctrl && key === "t" && e.shiftKey) {
|
|
10793
|
+
e.preventDefault();
|
|
10794
|
+
handlers.reopenClosedTab?.();
|
|
10795
|
+
return;
|
|
10796
|
+
}
|
|
10797
|
+
if (ctrl && key === "n" && e.shiftKey) {
|
|
10798
|
+
e.preventDefault();
|
|
10799
|
+
handlers.openPrivateWindow?.();
|
|
10800
|
+
return;
|
|
10801
|
+
}
|
|
10802
|
+
if (ctrl && key === "t" && !e.shiftKey) {
|
|
10521
10803
|
e.preventDefault();
|
|
10522
10804
|
handlers.newTab();
|
|
10523
10805
|
return;
|
|
10524
10806
|
}
|
|
10525
|
-
if (ctrl &&
|
|
10807
|
+
if (ctrl && key === "w") {
|
|
10526
10808
|
e.preventDefault();
|
|
10527
10809
|
handlers.closeTab();
|
|
10528
10810
|
return;
|
|
@@ -10532,7 +10814,7 @@ function setupKeybindings(handlers) {
|
|
|
10532
10814
|
handlers.openSettings();
|
|
10533
10815
|
return;
|
|
10534
10816
|
}
|
|
10535
|
-
if (ctrl &&
|
|
10817
|
+
if (ctrl && key === "h" && !e.shiftKey) {
|
|
10536
10818
|
e.preventDefault();
|
|
10537
10819
|
handlers.captureHighlight();
|
|
10538
10820
|
return;
|
|
@@ -10542,6 +10824,21 @@ function setupKeybindings(handlers) {
|
|
|
10542
10824
|
handlers.toggleDevTools?.();
|
|
10543
10825
|
return;
|
|
10544
10826
|
}
|
|
10827
|
+
if (ctrl && (e.key === "+" || e.key === "=")) {
|
|
10828
|
+
e.preventDefault();
|
|
10829
|
+
handlers.zoomIn?.();
|
|
10830
|
+
return;
|
|
10831
|
+
}
|
|
10832
|
+
if (ctrl && e.key === "-") {
|
|
10833
|
+
e.preventDefault();
|
|
10834
|
+
handlers.zoomOut?.();
|
|
10835
|
+
return;
|
|
10836
|
+
}
|
|
10837
|
+
if (ctrl && e.key === "0") {
|
|
10838
|
+
e.preventDefault();
|
|
10839
|
+
handlers.zoomReset?.();
|
|
10840
|
+
return;
|
|
10841
|
+
}
|
|
10545
10842
|
if (e.key === "?" && !ctrl && !e.altKey) {
|
|
10546
10843
|
const tag = e.target?.tagName;
|
|
10547
10844
|
if (tag !== "INPUT" && tag !== "TEXTAREA" && !e.target?.isContentEditable) {
|
|
@@ -10564,6 +10861,7 @@ try {
|
|
|
10564
10861
|
}
|
|
10565
10862
|
const App = () => {
|
|
10566
10863
|
const view = new URLSearchParams(window.location.search).get("view") || "chrome";
|
|
10864
|
+
const isPrivateWindow = new URLSearchParams(window.location.search).get("private") === "1";
|
|
10567
10865
|
const {
|
|
10568
10866
|
openCommandBar,
|
|
10569
10867
|
toggleSidebar,
|
|
@@ -10575,7 +10873,11 @@ const App = () => {
|
|
|
10575
10873
|
createTab,
|
|
10576
10874
|
closeTab,
|
|
10577
10875
|
activeTabId: activeTabId2,
|
|
10578
|
-
activeTab
|
|
10876
|
+
activeTab,
|
|
10877
|
+
zoomIn,
|
|
10878
|
+
zoomOut,
|
|
10879
|
+
zoomReset,
|
|
10880
|
+
reopenClosed
|
|
10579
10881
|
} = useTabs();
|
|
10580
10882
|
const [highlightToast, setHighlightToast] = createSignal(null);
|
|
10581
10883
|
const [keyboardHelpOpen, setKeyboardHelpOpen] = createSignal(false);
|
|
@@ -10627,17 +10929,31 @@ const App = () => {
|
|
|
10627
10929
|
});
|
|
10628
10930
|
if (view !== "chrome") return;
|
|
10629
10931
|
const cleanupKeys = setupKeybindings({
|
|
10630
|
-
openCommandBar,
|
|
10631
|
-
toggleSidebar,
|
|
10632
|
-
toggleFocusMode,
|
|
10932
|
+
openCommandBar: isPrivateWindow ? void 0 : openCommandBar,
|
|
10933
|
+
toggleSidebar: isPrivateWindow ? void 0 : toggleSidebar,
|
|
10934
|
+
toggleFocusMode: isPrivateWindow ? void 0 : toggleFocusMode,
|
|
10633
10935
|
newTab: () => createTab(),
|
|
10634
10936
|
closeTab: () => {
|
|
10635
10937
|
const id = activeTabId2();
|
|
10636
10938
|
if (id) closeTab(id);
|
|
10637
10939
|
},
|
|
10638
|
-
openSettings,
|
|
10639
|
-
captureHighlight,
|
|
10640
|
-
|
|
10940
|
+
openSettings: isPrivateWindow ? void 0 : openSettings,
|
|
10941
|
+
captureHighlight: isPrivateWindow ? void 0 : captureHighlight,
|
|
10942
|
+
zoomIn: () => {
|
|
10943
|
+
const id = activeTabId2();
|
|
10944
|
+
if (id) zoomIn(id);
|
|
10945
|
+
},
|
|
10946
|
+
zoomOut: () => {
|
|
10947
|
+
const id = activeTabId2();
|
|
10948
|
+
if (id) zoomOut(id);
|
|
10949
|
+
},
|
|
10950
|
+
zoomReset: () => {
|
|
10951
|
+
const id = activeTabId2();
|
|
10952
|
+
if (id) zoomReset(id);
|
|
10953
|
+
},
|
|
10954
|
+
reopenClosedTab: () => reopenClosed(),
|
|
10955
|
+
openPrivateWindow: () => window.vessel.tabs.openPrivateWindow(),
|
|
10956
|
+
toggleDevTools: isPrivateWindow ? void 0 : () => {
|
|
10641
10957
|
window.vessel.devtoolsPanel.toggle();
|
|
10642
10958
|
},
|
|
10643
10959
|
toggleKeyboardHelp: () => setKeyboardHelpOpen((v) => !v)
|
|
@@ -10658,17 +10974,25 @@ const App = () => {
|
|
|
10658
10974
|
}
|
|
10659
10975
|
return (() => {
|
|
10660
10976
|
var _el$ = _tmpl$2(), _el$2 = _el$.firstChild;
|
|
10661
|
-
insert(_el$, createComponent(
|
|
10662
|
-
|
|
10663
|
-
get
|
|
10664
|
-
return
|
|
10665
|
-
|
|
10666
|
-
|
|
10977
|
+
insert(_el$, createComponent(Show, {
|
|
10978
|
+
when: !isPrivateWindow,
|
|
10979
|
+
get children() {
|
|
10980
|
+
return [createComponent(BookmarkNotifications, {}), createComponent(HighlightNotifications, {
|
|
10981
|
+
get toast() {
|
|
10982
|
+
return highlightToast();
|
|
10983
|
+
},
|
|
10984
|
+
onDismiss: () => setHighlightToast(null)
|
|
10985
|
+
})];
|
|
10986
|
+
}
|
|
10667
10987
|
}), _el$2);
|
|
10668
10988
|
insert(_el$, createComponent(DownloadToast, {}), _el$2);
|
|
10669
10989
|
insert(_el$, createComponent(FindBar, {}), _el$2);
|
|
10670
|
-
insert(_el$, createComponent(
|
|
10671
|
-
|
|
10990
|
+
insert(_el$, createComponent(Show, {
|
|
10991
|
+
when: !isPrivateWindow,
|
|
10992
|
+
get children() {
|
|
10993
|
+
return [createComponent(FlowProgress, {}), createComponent(AgentTranscriptDock, {})];
|
|
10994
|
+
}
|
|
10995
|
+
}), _el$2);
|
|
10672
10996
|
insert(_el$2, createComponent(TitleBar, {}), null);
|
|
10673
10997
|
insert(_el$2, createComponent(TabBar, {}), null);
|
|
10674
10998
|
insert(_el$2, createComponent(AddressBar, {}), null);
|
|
@@ -10682,13 +11006,18 @@ const App = () => {
|
|
|
10682
11006
|
return _el$3;
|
|
10683
11007
|
}
|
|
10684
11008
|
}), null);
|
|
10685
|
-
insert(_el$, createComponent(
|
|
10686
|
-
|
|
11009
|
+
insert(_el$, createComponent(Show, {
|
|
11010
|
+
when: !isPrivateWindow,
|
|
11011
|
+
get children() {
|
|
11012
|
+
return [createComponent(CommandBar, {}), createComponent(Settings, {})];
|
|
11013
|
+
}
|
|
11014
|
+
}), null);
|
|
10687
11015
|
insert(_el$, createComponent(KeyboardHelp, {
|
|
10688
11016
|
get open() {
|
|
10689
11017
|
return keyboardHelpOpen();
|
|
10690
11018
|
},
|
|
10691
|
-
onClose: () => setKeyboardHelpOpen(false)
|
|
11019
|
+
onClose: () => setKeyboardHelpOpen(false),
|
|
11020
|
+
privateMode: isPrivateWindow
|
|
10692
11021
|
}), null);
|
|
10693
11022
|
createRenderEffect(() => _el$.classList.toggle("focus-mode", !!focusMode2()));
|
|
10694
11023
|
return _el$;
|