@quanta-intellect/vessel-browser 0.1.121 → 0.1.124
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.
|
@@ -1474,7 +1474,7 @@ function Dynamic(props) {
|
|
|
1474
1474
|
const [, others] = splitProps(props, ["component"]);
|
|
1475
1475
|
return createDynamic(() => props.component, others);
|
|
1476
1476
|
}
|
|
1477
|
-
var _tmpl$$
|
|
1477
|
+
var _tmpl$$t = /* @__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=Downloads>↓</button><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>`);
|
|
1478
1478
|
const TitleBar = (props) => {
|
|
1479
1479
|
const isPrivateWindow = new URLSearchParams(window.location.search).get("private") === "1";
|
|
1480
1480
|
const [mcpStatus, setMcpStatus] = createSignal("starting");
|
|
@@ -1507,7 +1507,7 @@ const TitleBar = (props) => {
|
|
|
1507
1507
|
window.vessel.ui.setSettingsVisibility(true);
|
|
1508
1508
|
};
|
|
1509
1509
|
return (() => {
|
|
1510
|
-
var _el$ = _tmpl$$
|
|
1510
|
+
var _el$ = _tmpl$$t(), _el$2 = _el$.firstChild, _el$3 = _el$2.nextSibling, _el$4 = _el$3.firstChild, _el$5 = _el$3.nextSibling, _el$6 = _el$5.firstChild, _el$7 = _el$6.nextSibling, _el$8 = _el$7.nextSibling, _el$9 = _el$8.nextSibling;
|
|
1511
1511
|
_el$4.$$click = handleMcpClick;
|
|
1512
1512
|
_el$6.$$click = () => props.onOpenDownloads?.();
|
|
1513
1513
|
_el$7.$$click = () => window.vessel.window.minimize();
|
|
@@ -1549,7 +1549,7 @@ var LucideContext = createContext({
|
|
|
1549
1549
|
absoluteStrokeWidth: false,
|
|
1550
1550
|
class: ""
|
|
1551
1551
|
});
|
|
1552
|
-
var _tmpl$$
|
|
1552
|
+
var _tmpl$$s = /* @__PURE__ */ template(`<svg>`);
|
|
1553
1553
|
var hasA11yProp = (props) => {
|
|
1554
1554
|
for (const prop in props) {
|
|
1555
1555
|
if (prop.startsWith("aria-") || prop === "role" || prop === "title") {
|
|
@@ -1571,7 +1571,7 @@ var Icon = (props) => {
|
|
|
1571
1571
|
const [localProps, rest] = splitProps(props, ["color", "size", "strokeWidth", "children", "class", "name", "iconNode", "absoluteStrokeWidth"]);
|
|
1572
1572
|
const globalProps = useContext(LucideContext);
|
|
1573
1573
|
return (() => {
|
|
1574
|
-
var _el$ = _tmpl$$
|
|
1574
|
+
var _el$ = _tmpl$$s();
|
|
1575
1575
|
spread(_el$, mergeProps(defaultAttributes_default, {
|
|
1576
1576
|
get width() {
|
|
1577
1577
|
return localProps.size ?? globalProps.size ?? defaultAttributes_default.width;
|
|
@@ -1606,7 +1606,29 @@ var Icon = (props) => {
|
|
|
1606
1606
|
})();
|
|
1607
1607
|
};
|
|
1608
1608
|
var Icon_default = Icon;
|
|
1609
|
-
var iconNode$
|
|
1609
|
+
var iconNode$A = [["rect", {
|
|
1610
|
+
x: "2",
|
|
1611
|
+
y: "4",
|
|
1612
|
+
width: "20",
|
|
1613
|
+
height: "16",
|
|
1614
|
+
rx: "2",
|
|
1615
|
+
key: "izxlao"
|
|
1616
|
+
}], ["path", {
|
|
1617
|
+
d: "M10 4v4",
|
|
1618
|
+
key: "pp8u80"
|
|
1619
|
+
}], ["path", {
|
|
1620
|
+
d: "M2 8h20",
|
|
1621
|
+
key: "d11cs7"
|
|
1622
|
+
}], ["path", {
|
|
1623
|
+
d: "M6 4v4",
|
|
1624
|
+
key: "1svtjw"
|
|
1625
|
+
}]];
|
|
1626
|
+
var AppWindow = (props) => createComponent(Icon_default, mergeProps(props, {
|
|
1627
|
+
iconNode: iconNode$A,
|
|
1628
|
+
name: "app-window"
|
|
1629
|
+
}));
|
|
1630
|
+
var app_window_default = AppWindow;
|
|
1631
|
+
var iconNode$z = [["path", {
|
|
1610
1632
|
d: "M12 7v14",
|
|
1611
1633
|
key: "1akyts"
|
|
1612
1634
|
}], ["path", {
|
|
@@ -1614,20 +1636,65 @@ var iconNode$m = [["path", {
|
|
|
1614
1636
|
key: "ruj8y"
|
|
1615
1637
|
}]];
|
|
1616
1638
|
var BookOpen = (props) => createComponent(Icon_default, mergeProps(props, {
|
|
1617
|
-
iconNode: iconNode$
|
|
1639
|
+
iconNode: iconNode$z,
|
|
1618
1640
|
name: "book-open"
|
|
1619
1641
|
}));
|
|
1620
1642
|
var book_open_default = BookOpen;
|
|
1621
|
-
var iconNode$
|
|
1643
|
+
var iconNode$y = [["path", {
|
|
1644
|
+
d: "M12 8V4H8",
|
|
1645
|
+
key: "hb8ula"
|
|
1646
|
+
}], ["rect", {
|
|
1647
|
+
width: "16",
|
|
1648
|
+
height: "12",
|
|
1649
|
+
x: "4",
|
|
1650
|
+
y: "8",
|
|
1651
|
+
rx: "2",
|
|
1652
|
+
key: "enze0r"
|
|
1653
|
+
}], ["path", {
|
|
1654
|
+
d: "M2 14h2",
|
|
1655
|
+
key: "vft8re"
|
|
1656
|
+
}], ["path", {
|
|
1657
|
+
d: "M20 14h2",
|
|
1658
|
+
key: "4cs60a"
|
|
1659
|
+
}], ["path", {
|
|
1660
|
+
d: "M15 13v2",
|
|
1661
|
+
key: "1xurst"
|
|
1662
|
+
}], ["path", {
|
|
1663
|
+
d: "M9 13v2",
|
|
1664
|
+
key: "rq6x2g"
|
|
1665
|
+
}]];
|
|
1666
|
+
var Bot = (props) => createComponent(Icon_default, mergeProps(props, {
|
|
1667
|
+
iconNode: iconNode$y,
|
|
1668
|
+
name: "bot"
|
|
1669
|
+
}));
|
|
1670
|
+
var bot_default = Bot;
|
|
1671
|
+
var iconNode$x = [["path", {
|
|
1622
1672
|
d: "M20 6 9 17l-5-5",
|
|
1623
1673
|
key: "1gmf2c"
|
|
1624
1674
|
}]];
|
|
1625
1675
|
var Check = (props) => createComponent(Icon_default, mergeProps(props, {
|
|
1626
|
-
iconNode: iconNode$
|
|
1676
|
+
iconNode: iconNode$x,
|
|
1627
1677
|
name: "check"
|
|
1628
1678
|
}));
|
|
1629
1679
|
var check_default = Check;
|
|
1630
|
-
var iconNode$
|
|
1680
|
+
var iconNode$w = [["circle", {
|
|
1681
|
+
cx: "12",
|
|
1682
|
+
cy: "12",
|
|
1683
|
+
r: "10",
|
|
1684
|
+
key: "1mglay"
|
|
1685
|
+
}], ["path", {
|
|
1686
|
+
d: "M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3",
|
|
1687
|
+
key: "1u773s"
|
|
1688
|
+
}], ["path", {
|
|
1689
|
+
d: "M12 17h.01",
|
|
1690
|
+
key: "p32p05"
|
|
1691
|
+
}]];
|
|
1692
|
+
var CircleQuestionMark = (props) => createComponent(Icon_default, mergeProps(props, {
|
|
1693
|
+
iconNode: iconNode$w,
|
|
1694
|
+
name: "circle-question-mark"
|
|
1695
|
+
}));
|
|
1696
|
+
var circle_question_mark_default = CircleQuestionMark;
|
|
1697
|
+
var iconNode$v = [["rect", {
|
|
1631
1698
|
width: "8",
|
|
1632
1699
|
height: "4",
|
|
1633
1700
|
x: "8",
|
|
@@ -1652,11 +1719,11 @@ var iconNode$k = [["rect", {
|
|
|
1652
1719
|
key: "18s6g9"
|
|
1653
1720
|
}]];
|
|
1654
1721
|
var ClipboardList = (props) => createComponent(Icon_default, mergeProps(props, {
|
|
1655
|
-
iconNode: iconNode$
|
|
1722
|
+
iconNode: iconNode$v,
|
|
1656
1723
|
name: "clipboard-list"
|
|
1657
1724
|
}));
|
|
1658
1725
|
var clipboard_list_default = ClipboardList;
|
|
1659
|
-
var iconNode$
|
|
1726
|
+
var iconNode$u = [["circle", {
|
|
1660
1727
|
cx: "12",
|
|
1661
1728
|
cy: "12",
|
|
1662
1729
|
r: "10",
|
|
@@ -1666,11 +1733,11 @@ var iconNode$j = [["circle", {
|
|
|
1666
1733
|
key: "mmk7yg"
|
|
1667
1734
|
}]];
|
|
1668
1735
|
var Clock = (props) => createComponent(Icon_default, mergeProps(props, {
|
|
1669
|
-
iconNode: iconNode$
|
|
1736
|
+
iconNode: iconNode$u,
|
|
1670
1737
|
name: "clock"
|
|
1671
1738
|
}));
|
|
1672
1739
|
var clock_default = Clock;
|
|
1673
|
-
var iconNode$
|
|
1740
|
+
var iconNode$t = [["path", {
|
|
1674
1741
|
d: "M12 20v2",
|
|
1675
1742
|
key: "1lh1kg"
|
|
1676
1743
|
}], ["path", {
|
|
@@ -1722,11 +1789,11 @@ var iconNode$i = [["path", {
|
|
|
1722
1789
|
key: "z9xiuo"
|
|
1723
1790
|
}]];
|
|
1724
1791
|
var Cpu = (props) => createComponent(Icon_default, mergeProps(props, {
|
|
1725
|
-
iconNode: iconNode$
|
|
1792
|
+
iconNode: iconNode$t,
|
|
1726
1793
|
name: "cpu"
|
|
1727
1794
|
}));
|
|
1728
1795
|
var cpu_default = Cpu;
|
|
1729
|
-
var iconNode$
|
|
1796
|
+
var iconNode$s = [["path", {
|
|
1730
1797
|
d: "M12 15V3",
|
|
1731
1798
|
key: "m9g1x1"
|
|
1732
1799
|
}], ["path", {
|
|
@@ -1737,11 +1804,23 @@ var iconNode$h = [["path", {
|
|
|
1737
1804
|
key: "brsn70"
|
|
1738
1805
|
}]];
|
|
1739
1806
|
var Download = (props) => createComponent(Icon_default, mergeProps(props, {
|
|
1740
|
-
iconNode: iconNode$
|
|
1807
|
+
iconNode: iconNode$s,
|
|
1741
1808
|
name: "download"
|
|
1742
1809
|
}));
|
|
1743
1810
|
var download_default = Download;
|
|
1744
|
-
var iconNode$
|
|
1811
|
+
var iconNode$r = [["path", {
|
|
1812
|
+
d: "M21 21H8a2 2 0 0 1-1.42-.587l-3.994-3.999a2 2 0 0 1 0-2.828l10-10a2 2 0 0 1 2.829 0l5.999 6a2 2 0 0 1 0 2.828L12.834 21",
|
|
1813
|
+
key: "g5wo59"
|
|
1814
|
+
}], ["path", {
|
|
1815
|
+
d: "m5.082 11.09 8.828 8.828",
|
|
1816
|
+
key: "1wx5vj"
|
|
1817
|
+
}]];
|
|
1818
|
+
var Eraser = (props) => createComponent(Icon_default, mergeProps(props, {
|
|
1819
|
+
iconNode: iconNode$r,
|
|
1820
|
+
name: "eraser"
|
|
1821
|
+
}));
|
|
1822
|
+
var eraser_default = Eraser;
|
|
1823
|
+
var iconNode$q = [["path", {
|
|
1745
1824
|
d: "M15 3h6v6",
|
|
1746
1825
|
key: "1q9fwt"
|
|
1747
1826
|
}], ["path", {
|
|
@@ -1752,11 +1831,52 @@ var iconNode$g = [["path", {
|
|
|
1752
1831
|
key: "a6xqqp"
|
|
1753
1832
|
}]];
|
|
1754
1833
|
var ExternalLink = (props) => createComponent(Icon_default, mergeProps(props, {
|
|
1755
|
-
iconNode: iconNode$
|
|
1834
|
+
iconNode: iconNode$q,
|
|
1756
1835
|
name: "external-link"
|
|
1757
1836
|
}));
|
|
1758
1837
|
var external_link_default = ExternalLink;
|
|
1759
|
-
var iconNode$
|
|
1838
|
+
var iconNode$p = [["path", {
|
|
1839
|
+
d: "M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z",
|
|
1840
|
+
key: "1oefj6"
|
|
1841
|
+
}], ["path", {
|
|
1842
|
+
d: "M14 2v5a1 1 0 0 0 1 1h5",
|
|
1843
|
+
key: "wfsgrz"
|
|
1844
|
+
}], ["path", {
|
|
1845
|
+
d: "M12 18v-6",
|
|
1846
|
+
key: "17g6i2"
|
|
1847
|
+
}], ["path", {
|
|
1848
|
+
d: "m9 15 3 3 3-3",
|
|
1849
|
+
key: "1npd3o"
|
|
1850
|
+
}]];
|
|
1851
|
+
var FileDown = (props) => createComponent(Icon_default, mergeProps(props, {
|
|
1852
|
+
iconNode: iconNode$p,
|
|
1853
|
+
name: "file-down"
|
|
1854
|
+
}));
|
|
1855
|
+
var file_down_default = FileDown;
|
|
1856
|
+
var iconNode$o = [["circle", {
|
|
1857
|
+
cx: "12",
|
|
1858
|
+
cy: "12",
|
|
1859
|
+
r: "3",
|
|
1860
|
+
key: "1v7zrd"
|
|
1861
|
+
}], ["path", {
|
|
1862
|
+
d: "M3 7V5a2 2 0 0 1 2-2h2",
|
|
1863
|
+
key: "aa7l1z"
|
|
1864
|
+
}], ["path", {
|
|
1865
|
+
d: "M17 3h2a2 2 0 0 1 2 2v2",
|
|
1866
|
+
key: "4qcy5o"
|
|
1867
|
+
}], ["path", {
|
|
1868
|
+
d: "M21 17v2a2 2 0 0 1-2 2h-2",
|
|
1869
|
+
key: "6vwrx8"
|
|
1870
|
+
}], ["path", {
|
|
1871
|
+
d: "M7 21H5a2 2 0 0 1-2-2v-2",
|
|
1872
|
+
key: "ioqczr"
|
|
1873
|
+
}]];
|
|
1874
|
+
var Focus = (props) => createComponent(Icon_default, mergeProps(props, {
|
|
1875
|
+
iconNode: iconNode$o,
|
|
1876
|
+
name: "focus"
|
|
1877
|
+
}));
|
|
1878
|
+
var focus_default = Focus;
|
|
1879
|
+
var iconNode$n = [["circle", {
|
|
1760
1880
|
cx: "12",
|
|
1761
1881
|
cy: "12",
|
|
1762
1882
|
r: "10",
|
|
@@ -1769,11 +1889,11 @@ var iconNode$f = [["circle", {
|
|
|
1769
1889
|
key: "9i4pu4"
|
|
1770
1890
|
}]];
|
|
1771
1891
|
var Globe = (props) => createComponent(Icon_default, mergeProps(props, {
|
|
1772
|
-
iconNode: iconNode$
|
|
1892
|
+
iconNode: iconNode$n,
|
|
1773
1893
|
name: "globe"
|
|
1774
1894
|
}));
|
|
1775
1895
|
var globe_default = Globe;
|
|
1776
|
-
var iconNode$
|
|
1896
|
+
var iconNode$m = [["path", {
|
|
1777
1897
|
d: "M12.83 2.18a2 2 0 0 0-1.66 0L2.6 6.08a1 1 0 0 0 0 1.83l8.58 3.91a2 2 0 0 0 .83.18 2 2 0 0 0 .83-.18l8.58-3.9a1 1 0 0 0 0-1.831z",
|
|
1778
1898
|
key: "zzgyd3"
|
|
1779
1899
|
}], ["path", {
|
|
@@ -1790,11 +1910,11 @@ var iconNode$e = [["path", {
|
|
|
1790
1910
|
key: "jksky3"
|
|
1791
1911
|
}]];
|
|
1792
1912
|
var LayersPlus = (props) => createComponent(Icon_default, mergeProps(props, {
|
|
1793
|
-
iconNode: iconNode$
|
|
1913
|
+
iconNode: iconNode$m,
|
|
1794
1914
|
name: "layers-plus"
|
|
1795
1915
|
}));
|
|
1796
1916
|
var layers_plus_default = LayersPlus;
|
|
1797
|
-
var iconNode$
|
|
1917
|
+
var iconNode$l = [["rect", {
|
|
1798
1918
|
width: "18",
|
|
1799
1919
|
height: "11",
|
|
1800
1920
|
x: "3",
|
|
@@ -1807,11 +1927,27 @@ var iconNode$d = [["rect", {
|
|
|
1807
1927
|
key: "fwvmzm"
|
|
1808
1928
|
}]];
|
|
1809
1929
|
var Lock = (props) => createComponent(Icon_default, mergeProps(props, {
|
|
1810
|
-
iconNode: iconNode$
|
|
1930
|
+
iconNode: iconNode$l,
|
|
1811
1931
|
name: "lock"
|
|
1812
1932
|
}));
|
|
1813
1933
|
var lock_default = Lock;
|
|
1814
|
-
var iconNode$
|
|
1934
|
+
var iconNode$k = [["rect", {
|
|
1935
|
+
width: "18",
|
|
1936
|
+
height: "18",
|
|
1937
|
+
x: "3",
|
|
1938
|
+
y: "3",
|
|
1939
|
+
rx: "2",
|
|
1940
|
+
key: "afitv7"
|
|
1941
|
+
}], ["path", {
|
|
1942
|
+
d: "M9 3v18",
|
|
1943
|
+
key: "fh3hqa"
|
|
1944
|
+
}]];
|
|
1945
|
+
var PanelLeft = (props) => createComponent(Icon_default, mergeProps(props, {
|
|
1946
|
+
iconNode: iconNode$k,
|
|
1947
|
+
name: "panel-left"
|
|
1948
|
+
}));
|
|
1949
|
+
var panel_left_default = PanelLeft;
|
|
1950
|
+
var iconNode$j = [["rect", {
|
|
1815
1951
|
width: "18",
|
|
1816
1952
|
height: "18",
|
|
1817
1953
|
x: "3",
|
|
@@ -1826,11 +1962,27 @@ var iconNode$c = [["rect", {
|
|
|
1826
1962
|
key: "12hl5m"
|
|
1827
1963
|
}]];
|
|
1828
1964
|
var PanelRightClose = (props) => createComponent(Icon_default, mergeProps(props, {
|
|
1829
|
-
iconNode: iconNode$
|
|
1965
|
+
iconNode: iconNode$j,
|
|
1830
1966
|
name: "panel-right-close"
|
|
1831
1967
|
}));
|
|
1832
1968
|
var panel_right_close_default = PanelRightClose;
|
|
1833
|
-
var iconNode$
|
|
1969
|
+
var iconNode$i = [["rect", {
|
|
1970
|
+
width: "18",
|
|
1971
|
+
height: "18",
|
|
1972
|
+
x: "3",
|
|
1973
|
+
y: "3",
|
|
1974
|
+
rx: "2",
|
|
1975
|
+
key: "afitv7"
|
|
1976
|
+
}], ["path", {
|
|
1977
|
+
d: "M15 3v18",
|
|
1978
|
+
key: "14nvp0"
|
|
1979
|
+
}]];
|
|
1980
|
+
var PanelRight = (props) => createComponent(Icon_default, mergeProps(props, {
|
|
1981
|
+
iconNode: iconNode$i,
|
|
1982
|
+
name: "panel-right"
|
|
1983
|
+
}));
|
|
1984
|
+
var panel_right_default = PanelRight;
|
|
1985
|
+
var iconNode$h = [["rect", {
|
|
1834
1986
|
width: "18",
|
|
1835
1987
|
height: "18",
|
|
1836
1988
|
x: "3",
|
|
@@ -1842,11 +1994,11 @@ var iconNode$b = [["rect", {
|
|
|
1842
1994
|
key: "1pudct"
|
|
1843
1995
|
}]];
|
|
1844
1996
|
var PanelTop = (props) => createComponent(Icon_default, mergeProps(props, {
|
|
1845
|
-
iconNode: iconNode$
|
|
1997
|
+
iconNode: iconNode$h,
|
|
1846
1998
|
name: "panel-top"
|
|
1847
1999
|
}));
|
|
1848
2000
|
var panel_top_default = PanelTop;
|
|
1849
|
-
var iconNode$
|
|
2001
|
+
var iconNode$g = [["path", {
|
|
1850
2002
|
d: "M5 12h14",
|
|
1851
2003
|
key: "1ays0h"
|
|
1852
2004
|
}], ["path", {
|
|
@@ -1854,11 +2006,42 @@ var iconNode$a = [["path", {
|
|
|
1854
2006
|
key: "s699le"
|
|
1855
2007
|
}]];
|
|
1856
2008
|
var Plus = (props) => createComponent(Icon_default, mergeProps(props, {
|
|
1857
|
-
iconNode: iconNode$
|
|
2009
|
+
iconNode: iconNode$g,
|
|
1858
2010
|
name: "plus"
|
|
1859
2011
|
}));
|
|
1860
2012
|
var plus_default = Plus;
|
|
1861
|
-
var iconNode$
|
|
2013
|
+
var iconNode$f = [["path", {
|
|
2014
|
+
d: "M6 18H4a2 2 0 0 1-2-2v-5a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2v5a2 2 0 0 1-2 2h-2",
|
|
2015
|
+
key: "143wyd"
|
|
2016
|
+
}], ["path", {
|
|
2017
|
+
d: "M6 9V3a1 1 0 0 1 1-1h10a1 1 0 0 1 1 1v6",
|
|
2018
|
+
key: "1itne7"
|
|
2019
|
+
}], ["rect", {
|
|
2020
|
+
x: "6",
|
|
2021
|
+
y: "14",
|
|
2022
|
+
width: "12",
|
|
2023
|
+
height: "8",
|
|
2024
|
+
rx: "1",
|
|
2025
|
+
key: "1ue0tg"
|
|
2026
|
+
}]];
|
|
2027
|
+
var Printer = (props) => createComponent(Icon_default, mergeProps(props, {
|
|
2028
|
+
iconNode: iconNode$f,
|
|
2029
|
+
name: "printer"
|
|
2030
|
+
}));
|
|
2031
|
+
var printer_default = Printer;
|
|
2032
|
+
var iconNode$e = [["path", {
|
|
2033
|
+
d: "M3 12a9 9 0 1 0 9-9 9.75 9.75 0 0 0-6.74 2.74L3 8",
|
|
2034
|
+
key: "1357e3"
|
|
2035
|
+
}], ["path", {
|
|
2036
|
+
d: "M3 3v5h5",
|
|
2037
|
+
key: "1xhq8a"
|
|
2038
|
+
}]];
|
|
2039
|
+
var RotateCcw = (props) => createComponent(Icon_default, mergeProps(props, {
|
|
2040
|
+
iconNode: iconNode$e,
|
|
2041
|
+
name: "rotate-ccw"
|
|
2042
|
+
}));
|
|
2043
|
+
var rotate_ccw_default = RotateCcw;
|
|
2044
|
+
var iconNode$d = [["path", {
|
|
1862
2045
|
d: "m21 21-4.34-4.34",
|
|
1863
2046
|
key: "14j7rj"
|
|
1864
2047
|
}], ["circle", {
|
|
@@ -1868,29 +2051,43 @@ var iconNode$9 = [["path", {
|
|
|
1868
2051
|
key: "4ej97u"
|
|
1869
2052
|
}]];
|
|
1870
2053
|
var Search = (props) => createComponent(Icon_default, mergeProps(props, {
|
|
1871
|
-
iconNode: iconNode$
|
|
2054
|
+
iconNode: iconNode$d,
|
|
1872
2055
|
name: "search"
|
|
1873
2056
|
}));
|
|
1874
2057
|
var search_default = Search;
|
|
1875
|
-
var iconNode$
|
|
2058
|
+
var iconNode$c = [["path", {
|
|
2059
|
+
d: "M9.671 4.136a2.34 2.34 0 0 1 4.659 0 2.34 2.34 0 0 0 3.319 1.915 2.34 2.34 0 0 1 2.33 4.033 2.34 2.34 0 0 0 0 3.831 2.34 2.34 0 0 1-2.33 4.033 2.34 2.34 0 0 0-3.319 1.915 2.34 2.34 0 0 1-4.659 0 2.34 2.34 0 0 0-3.32-1.915 2.34 2.34 0 0 1-2.33-4.033 2.34 2.34 0 0 0 0-3.831A2.34 2.34 0 0 1 6.35 6.051a2.34 2.34 0 0 0 3.319-1.915",
|
|
2060
|
+
key: "1i5ecw"
|
|
2061
|
+
}], ["circle", {
|
|
2062
|
+
cx: "12",
|
|
2063
|
+
cy: "12",
|
|
2064
|
+
r: "3",
|
|
2065
|
+
key: "1v7zrd"
|
|
2066
|
+
}]];
|
|
2067
|
+
var Settings$1 = (props) => createComponent(Icon_default, mergeProps(props, {
|
|
2068
|
+
iconNode: iconNode$c,
|
|
2069
|
+
name: "settings"
|
|
2070
|
+
}));
|
|
2071
|
+
var settings_default = Settings$1;
|
|
2072
|
+
var iconNode$b = [["path", {
|
|
1876
2073
|
d: "M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z",
|
|
1877
2074
|
key: "oel41y"
|
|
1878
2075
|
}]];
|
|
1879
2076
|
var Shield = (props) => createComponent(Icon_default, mergeProps(props, {
|
|
1880
|
-
iconNode: iconNode$
|
|
2077
|
+
iconNode: iconNode$b,
|
|
1881
2078
|
name: "shield"
|
|
1882
2079
|
}));
|
|
1883
2080
|
var shield_default = Shield;
|
|
1884
|
-
var iconNode$
|
|
2081
|
+
var iconNode$a = [["path", {
|
|
1885
2082
|
d: "M11.525 2.295a.53.53 0 0 1 .95 0l2.31 4.679a2.123 2.123 0 0 0 1.595 1.16l5.166.756a.53.53 0 0 1 .294.904l-3.736 3.638a2.123 2.123 0 0 0-.611 1.878l.882 5.14a.53.53 0 0 1-.771.56l-4.618-2.428a2.122 2.122 0 0 0-1.973 0L6.396 21.01a.53.53 0 0 1-.77-.56l.881-5.139a2.122 2.122 0 0 0-.611-1.879L2.16 9.795a.53.53 0 0 1 .294-.906l5.165-.755a2.122 2.122 0 0 0 1.597-1.16z",
|
|
1886
2083
|
key: "r04s7s"
|
|
1887
2084
|
}]];
|
|
1888
2085
|
var Star = (props) => createComponent(Icon_default, mergeProps(props, {
|
|
1889
|
-
iconNode: iconNode$
|
|
2086
|
+
iconNode: iconNode$a,
|
|
1890
2087
|
name: "star"
|
|
1891
2088
|
}));
|
|
1892
2089
|
var star_default = Star;
|
|
1893
|
-
var iconNode$
|
|
2090
|
+
var iconNode$9 = [["path", {
|
|
1894
2091
|
d: "M12.586 2.586A2 2 0 0 0 11.172 2H4a2 2 0 0 0-2 2v7.172a2 2 0 0 0 .586 1.414l8.704 8.704a2.426 2.426 0 0 0 3.42 0l6.58-6.58a2.426 2.426 0 0 0 0-3.42z",
|
|
1895
2092
|
key: "vktsd0"
|
|
1896
2093
|
}], ["circle", {
|
|
@@ -1901,11 +2098,11 @@ var iconNode$6 = [["path", {
|
|
|
1901
2098
|
key: "kqv944"
|
|
1902
2099
|
}]];
|
|
1903
2100
|
var Tag = (props) => createComponent(Icon_default, mergeProps(props, {
|
|
1904
|
-
iconNode: iconNode$
|
|
2101
|
+
iconNode: iconNode$9,
|
|
1905
2102
|
name: "tag"
|
|
1906
2103
|
}));
|
|
1907
2104
|
var tag_default = Tag;
|
|
1908
|
-
var iconNode$
|
|
2105
|
+
var iconNode$8 = [["path", {
|
|
1909
2106
|
d: "M10 11v6",
|
|
1910
2107
|
key: "nco0om"
|
|
1911
2108
|
}], ["path", {
|
|
@@ -1922,11 +2119,23 @@ var iconNode$5 = [["path", {
|
|
|
1922
2119
|
key: "e791ji"
|
|
1923
2120
|
}]];
|
|
1924
2121
|
var Trash2 = (props) => createComponent(Icon_default, mergeProps(props, {
|
|
1925
|
-
iconNode: iconNode$
|
|
2122
|
+
iconNode: iconNode$8,
|
|
1926
2123
|
name: "trash-2"
|
|
1927
2124
|
}));
|
|
1928
2125
|
var trash_2_default = Trash2;
|
|
1929
|
-
var iconNode$
|
|
2126
|
+
var iconNode$7 = [["path", {
|
|
2127
|
+
d: "M9 14 4 9l5-5",
|
|
2128
|
+
key: "102s5s"
|
|
2129
|
+
}], ["path", {
|
|
2130
|
+
d: "M4 9h10.5a5.5 5.5 0 0 1 5.5 5.5a5.5 5.5 0 0 1-5.5 5.5H11",
|
|
2131
|
+
key: "f3b9sd"
|
|
2132
|
+
}]];
|
|
2133
|
+
var Undo2 = (props) => createComponent(Icon_default, mergeProps(props, {
|
|
2134
|
+
iconNode: iconNode$7,
|
|
2135
|
+
name: "undo-2"
|
|
2136
|
+
}));
|
|
2137
|
+
var undo_2_default = Undo2;
|
|
2138
|
+
var iconNode$6 = [["path", {
|
|
1930
2139
|
d: "M19 21v-2a4 4 0 0 0-4-4H9a4 4 0 0 0-4 4v2",
|
|
1931
2140
|
key: "975kel"
|
|
1932
2141
|
}], ["circle", {
|
|
@@ -1936,11 +2145,11 @@ var iconNode$4 = [["path", {
|
|
|
1936
2145
|
key: "17ys0d"
|
|
1937
2146
|
}]];
|
|
1938
2147
|
var User = (props) => createComponent(Icon_default, mergeProps(props, {
|
|
1939
|
-
iconNode: iconNode$
|
|
2148
|
+
iconNode: iconNode$6,
|
|
1940
2149
|
name: "user"
|
|
1941
2150
|
}));
|
|
1942
2151
|
var user_default = User;
|
|
1943
|
-
var iconNode$
|
|
2152
|
+
var iconNode$5 = [["path", {
|
|
1944
2153
|
d: "M11 4.702a.705.705 0 0 0-1.203-.498L6.413 7.587A1.4 1.4 0 0 1 5.416 8H3a1 1 0 0 0-1 1v6a1 1 0 0 0 1 1h2.416a1.4 1.4 0 0 1 .997.413l3.383 3.384A.705.705 0 0 0 11 19.298z",
|
|
1945
2154
|
key: "uqj9uw"
|
|
1946
2155
|
}], ["path", {
|
|
@@ -1951,11 +2160,11 @@ var iconNode$3 = [["path", {
|
|
|
1951
2160
|
key: "ijwkga"
|
|
1952
2161
|
}]];
|
|
1953
2162
|
var Volume2 = (props) => createComponent(Icon_default, mergeProps(props, {
|
|
1954
|
-
iconNode: iconNode$
|
|
2163
|
+
iconNode: iconNode$5,
|
|
1955
2164
|
name: "volume-2"
|
|
1956
2165
|
}));
|
|
1957
2166
|
var volume_2_default = Volume2;
|
|
1958
|
-
var iconNode$
|
|
2167
|
+
var iconNode$4 = [["path", {
|
|
1959
2168
|
d: "M11 4.702a.705.705 0 0 0-1.203-.498L6.413 7.587A1.4 1.4 0 0 1 5.416 8H3a1 1 0 0 0-1 1v6a1 1 0 0 0 1 1h2.416a1.4 1.4 0 0 1 .997.413l3.383 3.384A.705.705 0 0 0 11 19.298z",
|
|
1960
2169
|
key: "uqj9uw"
|
|
1961
2170
|
}], ["line", {
|
|
@@ -1972,11 +2181,11 @@ var iconNode$2 = [["path", {
|
|
|
1972
2181
|
key: "5ykzw1"
|
|
1973
2182
|
}]];
|
|
1974
2183
|
var VolumeX = (props) => createComponent(Icon_default, mergeProps(props, {
|
|
1975
|
-
iconNode: iconNode$
|
|
2184
|
+
iconNode: iconNode$4,
|
|
1976
2185
|
name: "volume-x"
|
|
1977
2186
|
}));
|
|
1978
2187
|
var volume_x_default = VolumeX;
|
|
1979
|
-
var iconNode$
|
|
2188
|
+
var iconNode$3 = [["path", {
|
|
1980
2189
|
d: "M18 6 6 18",
|
|
1981
2190
|
key: "1bl5f8"
|
|
1982
2191
|
}], ["path", {
|
|
@@ -1984,19 +2193,71 @@ var iconNode$1 = [["path", {
|
|
|
1984
2193
|
key: "d8bk6v"
|
|
1985
2194
|
}]];
|
|
1986
2195
|
var X = (props) => createComponent(Icon_default, mergeProps(props, {
|
|
1987
|
-
iconNode: iconNode$
|
|
2196
|
+
iconNode: iconNode$3,
|
|
1988
2197
|
name: "x"
|
|
1989
2198
|
}));
|
|
1990
2199
|
var x_default = X;
|
|
1991
|
-
var iconNode = [["path", {
|
|
2200
|
+
var iconNode$2 = [["path", {
|
|
1992
2201
|
d: "M4 14a1 1 0 0 1-.78-1.63l9.9-10.2a.5.5 0 0 1 .86.46l-1.92 6.02A1 1 0 0 0 13 10h7a1 1 0 0 1 .78 1.63l-9.9 10.2a.5.5 0 0 1-.86-.46l1.92-6.02A1 1 0 0 0 11 14z",
|
|
1993
2202
|
key: "1xq2db"
|
|
1994
2203
|
}]];
|
|
1995
2204
|
var Zap = (props) => createComponent(Icon_default, mergeProps(props, {
|
|
1996
|
-
iconNode,
|
|
2205
|
+
iconNode: iconNode$2,
|
|
1997
2206
|
name: "zap"
|
|
1998
2207
|
}));
|
|
1999
2208
|
var zap_default = Zap;
|
|
2209
|
+
var iconNode$1 = [["circle", {
|
|
2210
|
+
cx: "11",
|
|
2211
|
+
cy: "11",
|
|
2212
|
+
r: "8",
|
|
2213
|
+
key: "4ej97u"
|
|
2214
|
+
}], ["line", {
|
|
2215
|
+
x1: "21",
|
|
2216
|
+
x2: "16.65",
|
|
2217
|
+
y1: "21",
|
|
2218
|
+
y2: "16.65",
|
|
2219
|
+
key: "13gj7c"
|
|
2220
|
+
}], ["line", {
|
|
2221
|
+
x1: "11",
|
|
2222
|
+
x2: "11",
|
|
2223
|
+
y1: "8",
|
|
2224
|
+
y2: "14",
|
|
2225
|
+
key: "1vmskp"
|
|
2226
|
+
}], ["line", {
|
|
2227
|
+
x1: "8",
|
|
2228
|
+
x2: "14",
|
|
2229
|
+
y1: "11",
|
|
2230
|
+
y2: "11",
|
|
2231
|
+
key: "durymu"
|
|
2232
|
+
}]];
|
|
2233
|
+
var ZoomIn = (props) => createComponent(Icon_default, mergeProps(props, {
|
|
2234
|
+
iconNode: iconNode$1,
|
|
2235
|
+
name: "zoom-in"
|
|
2236
|
+
}));
|
|
2237
|
+
var zoom_in_default = ZoomIn;
|
|
2238
|
+
var iconNode = [["circle", {
|
|
2239
|
+
cx: "11",
|
|
2240
|
+
cy: "11",
|
|
2241
|
+
r: "8",
|
|
2242
|
+
key: "4ej97u"
|
|
2243
|
+
}], ["line", {
|
|
2244
|
+
x1: "21",
|
|
2245
|
+
x2: "16.65",
|
|
2246
|
+
y1: "21",
|
|
2247
|
+
y2: "16.65",
|
|
2248
|
+
key: "13gj7c"
|
|
2249
|
+
}], ["line", {
|
|
2250
|
+
x1: "8",
|
|
2251
|
+
x2: "14",
|
|
2252
|
+
y1: "11",
|
|
2253
|
+
y2: "11",
|
|
2254
|
+
key: "durymu"
|
|
2255
|
+
}]];
|
|
2256
|
+
var ZoomOut = (props) => createComponent(Icon_default, mergeProps(props, {
|
|
2257
|
+
iconNode,
|
|
2258
|
+
name: "zoom-out"
|
|
2259
|
+
}));
|
|
2260
|
+
var zoom_out_default = ZoomOut;
|
|
2000
2261
|
function getEnvFlag(name) {
|
|
2001
2262
|
const globalProcess = typeof globalThis === "object" && "process" in globalThis ? globalThis.process : void 0;
|
|
2002
2263
|
return globalProcess?.env?.[name];
|
|
@@ -2230,6 +2491,53 @@ function useRuntime() {
|
|
|
2230
2491
|
restoreSession: () => window.vessel.ai.restoreSession()
|
|
2231
2492
|
};
|
|
2232
2493
|
}
|
|
2494
|
+
function formatAgentActionName(name) {
|
|
2495
|
+
return name.split(/[_-]+/).filter(Boolean).map((part) => part.charAt(0).toUpperCase() + part.slice(1)).join(" ");
|
|
2496
|
+
}
|
|
2497
|
+
function summarizeAgentAction(action) {
|
|
2498
|
+
if (action.status === "waiting-approval") {
|
|
2499
|
+
return action.argsSummary || "Waiting for approval";
|
|
2500
|
+
}
|
|
2501
|
+
if (action.status === "running") {
|
|
2502
|
+
return action.argsSummary || "Running";
|
|
2503
|
+
}
|
|
2504
|
+
if (action.status === "failed") {
|
|
2505
|
+
return action.error || action.resultSummary || "Action failed";
|
|
2506
|
+
}
|
|
2507
|
+
return action.resultSummary || action.argsSummary || "Completed";
|
|
2508
|
+
}
|
|
2509
|
+
function formatAgentTimelineDuration(durationMs) {
|
|
2510
|
+
if (!durationMs || durationMs < 1) return null;
|
|
2511
|
+
if (durationMs < 1e3) return `${Math.round(durationMs)}ms`;
|
|
2512
|
+
return `${(durationMs / 1e3).toFixed(durationMs < 1e4 ? 1 : 0)}s`;
|
|
2513
|
+
}
|
|
2514
|
+
function buildAgentTimelineItems(state, limit = 12) {
|
|
2515
|
+
const transcriptItems = state.transcript.map((entry) => ({
|
|
2516
|
+
id: `transcript:${entry.id}`,
|
|
2517
|
+
type: "transcript",
|
|
2518
|
+
timestamp: entry.updatedAt,
|
|
2519
|
+
status: entry.status,
|
|
2520
|
+
kind: entry.kind,
|
|
2521
|
+
label: entry.title || entry.kind,
|
|
2522
|
+
detail: entry.text
|
|
2523
|
+
}));
|
|
2524
|
+
const actionItems = state.actions.map((action) => ({
|
|
2525
|
+
id: `action:${action.id}`,
|
|
2526
|
+
type: "action",
|
|
2527
|
+
timestamp: action.finishedAt || action.startedAt,
|
|
2528
|
+
status: action.status,
|
|
2529
|
+
kind: "action",
|
|
2530
|
+
label: formatAgentActionName(action.name),
|
|
2531
|
+
detail: summarizeAgentAction(action),
|
|
2532
|
+
durationMs: action.durationMs
|
|
2533
|
+
}));
|
|
2534
|
+
return [...transcriptItems, ...actionItems].sort(
|
|
2535
|
+
(left, right) => new Date(right.timestamp).getTime() - new Date(left.timestamp).getTime()
|
|
2536
|
+
).slice(0, limit);
|
|
2537
|
+
}
|
|
2538
|
+
function isLiveAgentTimelineItem(item) {
|
|
2539
|
+
return item.status === "streaming" || item.status === "running";
|
|
2540
|
+
}
|
|
2233
2541
|
const AGENT_ACTIVITY_WINDOW_MS = 6e3;
|
|
2234
2542
|
const AGENT_RECENT_WINDOW_MS = 3e4;
|
|
2235
2543
|
const AGENT_RUNNING_STALE_WINDOW_MS = 5 * 6e4;
|
|
@@ -2253,7 +2561,7 @@ function summarizeTranscriptText(entry) {
|
|
|
2253
2561
|
return singleLine.length > 96 ? `${singleLine.slice(0, 93).trimEnd()}...` : singleLine;
|
|
2254
2562
|
}
|
|
2255
2563
|
function summarizeActionText(action) {
|
|
2256
|
-
const name = action.name
|
|
2564
|
+
const name = formatAgentActionName(action.name);
|
|
2257
2565
|
if (action.status === "running") {
|
|
2258
2566
|
return `${name} in progress`;
|
|
2259
2567
|
}
|
|
@@ -2343,7 +2651,7 @@ function getAgentPresence(state, currentTime = Date.now()) {
|
|
|
2343
2651
|
}
|
|
2344
2652
|
return "idle";
|
|
2345
2653
|
}
|
|
2346
|
-
var _tmpl$$
|
|
2654
|
+
var _tmpl$$r = /* @__PURE__ */ template(`<img class=tab-favicon alt>`), _tmpl$2$q = /* @__PURE__ */ template(`<span class=tab-favicon-fallback>`), _tmpl$3$m = /* @__PURE__ */ template(`<div class=tab-bar><div class=tab-list></div><div class=tab-actions><button class=tab-new data-tooltip="New window"data-tooltip-pos=left></button><button class=tab-new data-tooltip="Add active tab to group"data-tooltip-pos=left></button><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$m = /* @__PURE__ */ template(`<button><span class=tab-group-dot></span><span class=tab-group-name></span><span class=tab-group-count>`), _tmpl$5$i = /* @__PURE__ */ template(`<button class="tab-audio tab-audio-pinned">`), _tmpl$6$g = /* @__PURE__ */ template(`<div role=tab>`), _tmpl$7$e = /* @__PURE__ */ template(`<span class=tab-title>`), _tmpl$8$a = /* @__PURE__ */ template(`<button class=tab-audio>`), _tmpl$9$9 = /* @__PURE__ */ template(`<button class=tab-close>×`), _tmpl$0$7 = /* @__PURE__ */ template(`<span class=tab-agent-indicator aria-hidden=true title="Agent active on this tab">`), _tmpl$1$7 = /* @__PURE__ */ template(`<span class=tab-loading>`);
|
|
2347
2655
|
const TAB_CLOSE_MS = 200;
|
|
2348
2656
|
function stringToHue(str) {
|
|
2349
2657
|
let hash = 0;
|
|
@@ -2370,14 +2678,14 @@ const TabFavicon = (props) => {
|
|
|
2370
2678
|
},
|
|
2371
2679
|
get fallback() {
|
|
2372
2680
|
return (() => {
|
|
2373
|
-
var _el$2 = _tmpl$2$
|
|
2681
|
+
var _el$2 = _tmpl$2$q();
|
|
2374
2682
|
insert(_el$2, letter);
|
|
2375
2683
|
createRenderEffect((_$p) => setStyleProperty(_el$2, "--favicon-hue", `${hue()}`));
|
|
2376
2684
|
return _el$2;
|
|
2377
2685
|
})();
|
|
2378
2686
|
},
|
|
2379
2687
|
get children() {
|
|
2380
|
-
var _el$ = _tmpl$$
|
|
2688
|
+
var _el$ = _tmpl$$r();
|
|
2381
2689
|
_el$.addEventListener("error", () => setFailed(true));
|
|
2382
2690
|
createRenderEffect(() => setAttribute(_el$, "src", props.favicon));
|
|
2383
2691
|
return _el$;
|
|
@@ -2443,7 +2751,7 @@ const TabBar = () => {
|
|
|
2443
2751
|
}, TAB_CLOSE_MS);
|
|
2444
2752
|
};
|
|
2445
2753
|
return (() => {
|
|
2446
|
-
var _el$3 = _tmpl$3$
|
|
2754
|
+
var _el$3 = _tmpl$3$m(), _el$4 = _el$3.firstChild, _el$5 = _el$4.nextSibling, _el$6 = _el$5.firstChild, _el$7 = _el$6.nextSibling, _el$8 = _el$7.nextSibling, _el$9 = _el$8.nextSibling;
|
|
2447
2755
|
insert(_el$4, createComponent(For, {
|
|
2448
2756
|
get each() {
|
|
2449
2757
|
return tabEntries();
|
|
@@ -2454,7 +2762,7 @@ const TabBar = () => {
|
|
|
2454
2762
|
},
|
|
2455
2763
|
get fallback() {
|
|
2456
2764
|
return memo(() => entry.type === "group")() && (() => {
|
|
2457
|
-
var _el$0 = _tmpl$4$
|
|
2765
|
+
var _el$0 = _tmpl$4$m(), _el$1 = _el$0.firstChild, _el$10 = _el$1.nextSibling, _el$11 = _el$10.nextSibling;
|
|
2458
2766
|
_el$0.$$contextmenu = (e) => {
|
|
2459
2767
|
e.preventDefault();
|
|
2460
2768
|
window.vessel.tabs.showGroupContextMenu(entry.groupId);
|
|
@@ -2609,7 +2917,7 @@ const TabBar = () => {
|
|
|
2609
2917
|
})();
|
|
2610
2918
|
};
|
|
2611
2919
|
delegateEvents(["click", "contextmenu"]);
|
|
2612
|
-
var _tmpl$$
|
|
2920
|
+
var _tmpl$$q = /* @__PURE__ */ template(`<button class=security-popup-link>Reset permissions for this site`), _tmpl$2$p = /* @__PURE__ */ template(`<div class=security-popup><div class=security-popup-content><p class=security-popup-text></p><button class=security-popup-link>Learn More</button><div class=security-popup-section><div class=security-popup-section-title>Site permissions`), _tmpl$3$l = /* @__PURE__ */ template(`<p class=security-popup-muted>No saved permission decisions for this site.`), _tmpl$4$l = /* @__PURE__ */ template(`<div class=security-popup-permission-row><span></span><strong>`), _tmpl$5$h = /* @__PURE__ */ template(`<div class=security-popup-actions><button class=security-popup-action-proceed>Proceed Anyway</button><button class=security-popup-action-back>Go Back to Safety`);
|
|
2613
2921
|
const SecurityPopup = (props) => {
|
|
2614
2922
|
const statusText = () => {
|
|
2615
2923
|
switch (props.state.status) {
|
|
@@ -2662,7 +2970,7 @@ const SecurityPopup = (props) => {
|
|
|
2662
2970
|
onCleanup(() => document.removeEventListener("click", handleClickOutside, true));
|
|
2663
2971
|
});
|
|
2664
2972
|
return (() => {
|
|
2665
|
-
var _el$ = _tmpl$2$
|
|
2973
|
+
var _el$ = _tmpl$2$p(), _el$2 = _el$.firstChild, _el$3 = _el$2.firstChild, _el$4 = _el$3.nextSibling, _el$5 = _el$4.nextSibling;
|
|
2666
2974
|
_el$5.firstChild;
|
|
2667
2975
|
_el$.$$click = (e) => e.stopPropagation();
|
|
2668
2976
|
insert(_el$3, statusText);
|
|
@@ -2672,7 +2980,7 @@ const SecurityPopup = (props) => {
|
|
|
2672
2980
|
return sitePermissions().length > 0;
|
|
2673
2981
|
},
|
|
2674
2982
|
get fallback() {
|
|
2675
|
-
return _tmpl$3$
|
|
2983
|
+
return _tmpl$3$l();
|
|
2676
2984
|
},
|
|
2677
2985
|
get children() {
|
|
2678
2986
|
return [createComponent(For, {
|
|
@@ -2680,14 +2988,14 @@ const SecurityPopup = (props) => {
|
|
|
2680
2988
|
return sitePermissions();
|
|
2681
2989
|
},
|
|
2682
2990
|
children: (item) => (() => {
|
|
2683
|
-
var _el$9 = _tmpl$4$
|
|
2991
|
+
var _el$9 = _tmpl$4$l(), _el$0 = _el$9.firstChild, _el$1 = _el$0.nextSibling;
|
|
2684
2992
|
insert(_el$0, () => item.permission);
|
|
2685
2993
|
insert(_el$1, () => item.decision);
|
|
2686
2994
|
createRenderEffect(() => className(_el$1, item.decision));
|
|
2687
2995
|
return _el$9;
|
|
2688
2996
|
})()
|
|
2689
2997
|
}), (() => {
|
|
2690
|
-
var _el$7 = _tmpl$$
|
|
2998
|
+
var _el$7 = _tmpl$$q();
|
|
2691
2999
|
_el$7.$$click = async () => {
|
|
2692
3000
|
await window.vessel.permissions.clearOrigin(origin());
|
|
2693
3001
|
await loadPermissions();
|
|
@@ -2709,30 +3017,32 @@ const SecurityPopup = (props) => {
|
|
|
2709
3017
|
})();
|
|
2710
3018
|
};
|
|
2711
3019
|
delegateEvents(["click"]);
|
|
3020
|
+
const SIDEBAR_MIN_WIDTH = 240;
|
|
3021
|
+
const SIDEBAR_MAX_WIDTH = 800;
|
|
3022
|
+
function clampSidebarWidth(width) {
|
|
3023
|
+
return Math.max(
|
|
3024
|
+
SIDEBAR_MIN_WIDTH,
|
|
3025
|
+
Math.min(SIDEBAR_MAX_WIDTH, Math.round(width))
|
|
3026
|
+
);
|
|
3027
|
+
}
|
|
2712
3028
|
const DEFAULT_SIDEBAR_WIDTH = 400;
|
|
2713
|
-
const MIN_SIDEBAR = 240;
|
|
2714
|
-
const MAX_SIDEBAR = 800;
|
|
2715
3029
|
const [sidebarOpen, setSidebarOpen] = createSignal(true);
|
|
2716
3030
|
const [sidebarWidth, setSidebarWidth] = createSignal(DEFAULT_SIDEBAR_WIDTH);
|
|
2717
3031
|
const [sidebarDetached, setSidebarDetached] = createSignal(false);
|
|
2718
3032
|
window.vessel?.settings?.get().then((settings) => {
|
|
2719
3033
|
if (settings?.sidebarWidth && typeof settings.sidebarWidth === "number") {
|
|
2720
|
-
setSidebarWidth(
|
|
2721
|
-
Math.max(MIN_SIDEBAR, Math.min(MAX_SIDEBAR, settings.sidebarWidth))
|
|
2722
|
-
);
|
|
3034
|
+
setSidebarWidth(clampSidebarWidth(settings.sidebarWidth));
|
|
2723
3035
|
}
|
|
2724
3036
|
}).catch(() => {
|
|
2725
3037
|
});
|
|
2726
3038
|
const [focusMode, setFocusMode] = createSignal(false);
|
|
2727
3039
|
const [commandBarOpen, setCommandBarOpen] = createSignal(false);
|
|
3040
|
+
const [browserCommandPaletteOpen, setBrowserCommandPaletteOpen] = createSignal(false);
|
|
2728
3041
|
const [settingsOpen, setSettingsOpen] = createSignal(false);
|
|
2729
3042
|
const [devtoolsPanelOpen, setDevtoolsPanelOpen] = createSignal(false);
|
|
2730
3043
|
let lastIpcTime = 0;
|
|
2731
3044
|
const IPC_THROTTLE_MS = 8;
|
|
2732
3045
|
let sidebarStateListenerInitialized = false;
|
|
2733
|
-
function clampSidebarWidth(width) {
|
|
2734
|
-
return Math.max(MIN_SIDEBAR, Math.min(MAX_SIDEBAR, Math.round(width)));
|
|
2735
|
-
}
|
|
2736
3046
|
function applySidebarState(result) {
|
|
2737
3047
|
setSidebarOpen(result.open);
|
|
2738
3048
|
setSidebarWidth(result.width);
|
|
@@ -2751,6 +3061,7 @@ function useUI() {
|
|
|
2751
3061
|
sidebarDetached,
|
|
2752
3062
|
focusMode,
|
|
2753
3063
|
commandBarOpen,
|
|
3064
|
+
browserCommandPaletteOpen,
|
|
2754
3065
|
settingsOpen,
|
|
2755
3066
|
devtoolsPanelOpen,
|
|
2756
3067
|
toggleSidebar: async () => {
|
|
@@ -2790,6 +3101,8 @@ function useUI() {
|
|
|
2790
3101
|
},
|
|
2791
3102
|
openCommandBar: () => setCommandBarOpen(true),
|
|
2792
3103
|
closeCommandBar: () => setCommandBarOpen(false),
|
|
3104
|
+
openBrowserCommandPalette: () => setBrowserCommandPaletteOpen(true),
|
|
3105
|
+
closeBrowserCommandPalette: () => setBrowserCommandPaletteOpen(false),
|
|
2793
3106
|
openSettings: async () => {
|
|
2794
3107
|
setSidebarOpen(false);
|
|
2795
3108
|
setSettingsOpen(true);
|
|
@@ -3089,7 +3402,7 @@ const SEARCH_ENGINE_PRESETS = {
|
|
|
3089
3402
|
ecosia: { label: "Ecosia", url: "https://www.ecosia.org/search?q=" },
|
|
3090
3403
|
kagi: { label: "Kagi", url: "https://kagi.com/search?q=" }
|
|
3091
3404
|
};
|
|
3092
|
-
var _tmpl$$
|
|
3405
|
+
var _tmpl$$p = /* @__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$o = /* @__PURE__ */ template(`<svg width=14 height=14 viewBox="0 0 14 14"fill=currentColor><path d="M7 1a4 4 0 00-4 4v2H1.5a.5.5 0 00-.5.5v5a.5.5 0 00.5.5h11a.5.5 0 00.5-.5v-5a.5.5 0 00-.5-.5H11V5a4 4 0 00-4-4zm0 1a3 3 0 013 3v2H4V5a3 3 0 013-3z">`), _tmpl$3$k = /* @__PURE__ */ template(`<svg width=14 height=14 viewBox="0 0 14 14"fill=currentColor><path d="M7 1a4 4 0 00-4 4v2H1.5a.5.5 0 00-.5.5v5a.5.5 0 00.5.5h11a.5.5 0 00.5-.5v-5a.5.5 0 00-.5-.5H11V5a4 4 0 00-4-4zm0 1a3 3 0 013 3v2H4V5a3 3 0 013-3z"></path><line x1=2 y1=12 x2=12 y2=2 stroke=currentColor stroke-width=1.5>`), _tmpl$4$k = /* @__PURE__ */ template(`<div class=security-indicator-wrapper><button>`), _tmpl$5$g = /* @__PURE__ */ template(`<div id=address-autocomplete class=autocomplete-dropdown role=listbox>`), _tmpl$6$f = /* @__PURE__ */ template(`<div><span class=agent-status-dot aria-hidden=true></span><span class=agent-status-text>`), _tmpl$7$d = /* @__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$8$9 = /* @__PURE__ */ template(`<span class=page-diff-burst-meta>Updated <!> times over `), _tmpl$9$8 = /* @__PURE__ */ template(`<div class=page-diff-burst-history><div class=page-diff-burst-history-label>Recent detections`), _tmpl$0$6 = /* @__PURE__ */ template(`<div class=page-diff-popup><div class=page-diff-popup-header><div class=page-diff-popup-header-copy><span>Compared with your last visit</span><span class=page-diff-burst-meta>Previous snapshot from </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$1$6 = /* @__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$10$6 = /* @__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$11$6 = /* @__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$12$6 = /* @__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$13$5 = /* @__PURE__ */ template(`<span class=nav-btn-badge>`), _tmpl$14$5 = /* @__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$15$5 = /* @__PURE__ */ template(`<button class=nav-btn data-tooltip="Clear Data">`), _tmpl$16$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$17$4 = /* @__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$18$4 = /* @__PURE__ */ template(`<svg width=14 height=14 viewBox="0 0 14 14"fill=currentColor><path d="M7 1a4 4 0 00-4 4v2H1.5a.5.5 0 00-.5.5v5a.5.5 0 00.5.5h11a.5.5 0 00.5-.5v-5a.5.5 0 00-.5-.5H11V5a4 4 0 00-4-4zm0 1a3 3 0 013 3v2H4V5a3 3 0 013-3z"></path><circle cx=7 cy=8 r=0.8 fill=white>`), _tmpl$19$4 = /* @__PURE__ */ template(`<div role=option><span class=autocomplete-icon></span><span class=autocomplete-text><span class=autocomplete-title></span><span class=autocomplete-url>`), _tmpl$20$4 = /* @__PURE__ */ template(`<div class=page-diff-burst-row><span class=page-diff-burst-time></span><span class=page-diff-burst-summary>`), _tmpl$21$4 = /* @__PURE__ */ template(`<span class=page-diff-burst-summary-section>`), _tmpl$22$4 = /* @__PURE__ */ template(`<span class=page-diff-burst-summary-part><span>`), _tmpl$23$4 = /* @__PURE__ */ template(`<div class=page-diff-snippet><span class=page-diff-snippet-label>Before</span><span class=page-diff-snippet-text>`), _tmpl$24$4 = /* @__PURE__ */ template(`<div class=page-diff-snippet><span class=page-diff-snippet-label>After</span><span class=page-diff-snippet-text>`), _tmpl$25$3 = /* @__PURE__ */ template(`<div class=page-diff-snippets>`), _tmpl$26$3 = /* @__PURE__ */ template(`<div class=page-diff-list-group><span class=page-diff-list-label>Added</span><ul class=page-diff-list>`), _tmpl$27$3 = /* @__PURE__ */ template(`<div class=page-diff-list-group><span class=page-diff-list-label>Removed</span><ul class=page-diff-list>`), _tmpl$28$3 = /* @__PURE__ */ template(`<div><div class=page-diff-item-header><div class=page-diff-badges><span class=page-diff-kind></span><span class=page-diff-section></span></div><span class=page-diff-summary>`), _tmpl$29$3 = /* @__PURE__ */ template(`<li>`);
|
|
3093
3406
|
const AddressBar = (props) => {
|
|
3094
3407
|
const {
|
|
3095
3408
|
activeTab,
|
|
@@ -3392,7 +3705,7 @@ const AddressBar = (props) => {
|
|
|
3392
3705
|
insert(_el$, createComponent(Show, {
|
|
3393
3706
|
when: isPrivateWindow,
|
|
3394
3707
|
get children() {
|
|
3395
|
-
return _tmpl$$
|
|
3708
|
+
return _tmpl$$p();
|
|
3396
3709
|
}
|
|
3397
3710
|
}), _el$11);
|
|
3398
3711
|
insert(_el$, createComponent(Show, {
|
|
@@ -3400,7 +3713,7 @@ const AddressBar = (props) => {
|
|
|
3400
3713
|
return memo(() => !!securityState()?.status)() && securityState()?.status !== "none";
|
|
3401
3714
|
},
|
|
3402
3715
|
get children() {
|
|
3403
|
-
var _el$7 = _tmpl$4$
|
|
3716
|
+
var _el$7 = _tmpl$4$k(), _el$8 = _el$7.firstChild;
|
|
3404
3717
|
_el$8.$$click = () => setShowSecurityPopup((prev) => !prev);
|
|
3405
3718
|
insert(_el$8, createComponent(Switch, {
|
|
3406
3719
|
get fallback() {
|
|
@@ -3416,7 +3729,7 @@ const AddressBar = (props) => {
|
|
|
3416
3729
|
return securityState()?.status === "secure";
|
|
3417
3730
|
},
|
|
3418
3731
|
get children() {
|
|
3419
|
-
var _el$9 = _tmpl$2$
|
|
3732
|
+
var _el$9 = _tmpl$2$o();
|
|
3420
3733
|
_el$9.firstChild;
|
|
3421
3734
|
return _el$9;
|
|
3422
3735
|
}
|
|
@@ -3425,7 +3738,7 @@ const AddressBar = (props) => {
|
|
|
3425
3738
|
return securityState()?.status === "insecure";
|
|
3426
3739
|
},
|
|
3427
3740
|
get children() {
|
|
3428
|
-
var _el$1 = _tmpl$3$
|
|
3741
|
+
var _el$1 = _tmpl$3$k();
|
|
3429
3742
|
_el$1.firstChild;
|
|
3430
3743
|
return _el$1;
|
|
3431
3744
|
}
|
|
@@ -3806,7 +4119,7 @@ const AddressBar = (props) => {
|
|
|
3806
4119
|
})();
|
|
3807
4120
|
};
|
|
3808
4121
|
delegateEvents(["click", "input", "keydown", "mousedown"]);
|
|
3809
|
-
var _tmpl$$
|
|
4122
|
+
var _tmpl$$o = /* @__PURE__ */ template(`<div class=bookmark-toast-stack aria-live=polite aria-atomic=true>`), _tmpl$2$n = /* @__PURE__ */ template(`<div class=bookmark-toast role=status><div class=bookmark-toast-header><div class=bookmark-toast-title></div><button type=button class=bookmark-toast-close aria-label="Dismiss notification">×</button></div><div class=bookmark-toast-message>`);
|
|
3810
4123
|
const TOAST_DURATION_MS$1 = 4200;
|
|
3811
4124
|
const TOAST_EXIT_MS$2 = 300;
|
|
3812
4125
|
function isBookmarkToastCandidate(action) {
|
|
@@ -3866,13 +4179,13 @@ const BookmarkNotifications = () => {
|
|
|
3866
4179
|
timeoutIds.clear();
|
|
3867
4180
|
});
|
|
3868
4181
|
return (() => {
|
|
3869
|
-
var _el$ = _tmpl$$
|
|
4182
|
+
var _el$ = _tmpl$$o();
|
|
3870
4183
|
insert(_el$, createComponent(For, {
|
|
3871
4184
|
get each() {
|
|
3872
4185
|
return toasts();
|
|
3873
4186
|
},
|
|
3874
4187
|
children: (toast) => (() => {
|
|
3875
|
-
var _el$2 = _tmpl$2$
|
|
4188
|
+
var _el$2 = _tmpl$2$n(), _el$3 = _el$2.firstChild, _el$4 = _el$3.firstChild, _el$5 = _el$4.nextSibling, _el$6 = _el$3.nextSibling;
|
|
3876
4189
|
insert(_el$4, () => toast.title);
|
|
3877
4190
|
_el$5.$$click = () => dismissToast(toast.id);
|
|
3878
4191
|
insert(_el$6, () => toast.message);
|
|
@@ -3884,7 +4197,7 @@ const BookmarkNotifications = () => {
|
|
|
3884
4197
|
})();
|
|
3885
4198
|
};
|
|
3886
4199
|
delegateEvents(["click"]);
|
|
3887
|
-
var _tmpl$$
|
|
4200
|
+
var _tmpl$$n = /* @__PURE__ */ template(`<div class=bookmark-toast-stack aria-live=polite><div class="bookmark-toast highlight-toast"role=status><div class=bookmark-toast-header><div class=bookmark-toast-title></div><button type=button class=bookmark-toast-close aria-label="Dismiss notification">×</button></div><div class=bookmark-toast-message>`);
|
|
3888
4201
|
const TOAST_DURATION_MS = 3e3;
|
|
3889
4202
|
const TOAST_EXIT_MS$1 = 300;
|
|
3890
4203
|
const HighlightNotifications = (props) => {
|
|
@@ -3923,7 +4236,7 @@ const HighlightNotifications = (props) => {
|
|
|
3923
4236
|
return memo(() => !!visible())() && current();
|
|
3924
4237
|
},
|
|
3925
4238
|
get children() {
|
|
3926
|
-
var _el$ = _tmpl$$
|
|
4239
|
+
var _el$ = _tmpl$$n(), _el$2 = _el$.firstChild, _el$3 = _el$2.firstChild, _el$4 = _el$3.firstChild, _el$5 = _el$4.nextSibling, _el$6 = _el$3.nextSibling;
|
|
3927
4240
|
insert(_el$4, () => current().title);
|
|
3928
4241
|
_el$5.$$click = dismiss;
|
|
3929
4242
|
insert(_el$6, () => current().message);
|
|
@@ -3933,7 +4246,7 @@ const HighlightNotifications = (props) => {
|
|
|
3933
4246
|
});
|
|
3934
4247
|
};
|
|
3935
4248
|
delegateEvents(["click"]);
|
|
3936
|
-
var _tmpl$$
|
|
4249
|
+
var _tmpl$$m = /* @__PURE__ */ template(`<div class=download-toast-stack aria-live=polite>`), _tmpl$2$m = /* @__PURE__ */ template(`<span class=download-toast-done>✓`), _tmpl$3$j = /* @__PURE__ */ template(`<span class=download-toast-failed>!`), _tmpl$4$j = /* @__PURE__ */ template(`<div class=download-toast-bar-track><div class=download-toast-bar-fill>`), _tmpl$5$f = /* @__PURE__ */ template(`<div class=download-toast-size>`), _tmpl$6$e = /* @__PURE__ */ template(`<div class="download-toast-size download-toast-size-done"> downloaded`), _tmpl$7$c = /* @__PURE__ */ template(`<div class=download-toast role=status><div class=download-toast-header><span class=download-toast-filename>`);
|
|
3937
4250
|
const TOAST_DONE_DURATION_MS = 4200;
|
|
3938
4251
|
const TOAST_EXIT_MS = 300;
|
|
3939
4252
|
function formatBytes$1(bytes) {
|
|
@@ -4024,7 +4337,7 @@ const DownloadToast = () => {
|
|
|
4024
4337
|
return Math.min(100, Math.round(d.receivedBytes / d.totalBytes * 100));
|
|
4025
4338
|
};
|
|
4026
4339
|
return (() => {
|
|
4027
|
-
var _el$ = _tmpl$$
|
|
4340
|
+
var _el$ = _tmpl$$m();
|
|
4028
4341
|
insert(_el$, createComponent(For, {
|
|
4029
4342
|
get each() {
|
|
4030
4343
|
return downloads();
|
|
@@ -4037,7 +4350,7 @@ const DownloadToast = () => {
|
|
|
4037
4350
|
return dl.state === "completed";
|
|
4038
4351
|
},
|
|
4039
4352
|
get children() {
|
|
4040
|
-
return _tmpl$2$
|
|
4353
|
+
return _tmpl$2$m();
|
|
4041
4354
|
}
|
|
4042
4355
|
}), null);
|
|
4043
4356
|
insert(_el$3, createComponent(Show, {
|
|
@@ -4045,7 +4358,7 @@ const DownloadToast = () => {
|
|
|
4045
4358
|
return dl.state === "cancelled" || dl.state === "interrupted";
|
|
4046
4359
|
},
|
|
4047
4360
|
get children() {
|
|
4048
|
-
return _tmpl$3$
|
|
4361
|
+
return _tmpl$3$j();
|
|
4049
4362
|
}
|
|
4050
4363
|
}), null);
|
|
4051
4364
|
insert(_el$2, createComponent(Show, {
|
|
@@ -4054,7 +4367,7 @@ const DownloadToast = () => {
|
|
|
4054
4367
|
},
|
|
4055
4368
|
get children() {
|
|
4056
4369
|
return [(() => {
|
|
4057
|
-
var _el$7 = _tmpl$4$
|
|
4370
|
+
var _el$7 = _tmpl$4$j(), _el$8 = _el$7.firstChild;
|
|
4058
4371
|
createRenderEffect((_$p) => setStyleProperty(_el$8, "width", `${progressPercent(dl)}%`));
|
|
4059
4372
|
return _el$7;
|
|
4060
4373
|
})(), (() => {
|
|
@@ -4089,7 +4402,7 @@ const DownloadToast = () => {
|
|
|
4089
4402
|
return _el$;
|
|
4090
4403
|
})();
|
|
4091
4404
|
};
|
|
4092
|
-
var _tmpl$$
|
|
4405
|
+
var _tmpl$$l = /* @__PURE__ */ template(`<div class=modal-backdrop><div class=downloads-panel><div class=downloads-panel-header><div><h2>Downloads</h2><p>Recent files saved by Vessel</p></div><div class=downloads-panel-actions><button>Clear</button><button>Close</button></div></div><div class=downloads-panel-list>`), _tmpl$2$l = /* @__PURE__ */ template(`<div class=downloads-empty>No downloads yet.`), _tmpl$3$i = /* @__PURE__ */ template(`<div class=downloads-row><div class=downloads-file><strong></strong><span></span><small> · </small></div><div class=downloads-row-actions><button>Open</button><button>Show in folder`), _tmpl$4$i = /* @__PURE__ */ template(`<span>Source: `);
|
|
4093
4406
|
const formatBytes = (bytes) => {
|
|
4094
4407
|
if (!bytes) return "0 B";
|
|
4095
4408
|
const units = ["B", "KB", "MB", "GB"];
|
|
@@ -4114,7 +4427,7 @@ const DownloadsPanel = (props) => {
|
|
|
4114
4427
|
return props.open;
|
|
4115
4428
|
},
|
|
4116
4429
|
get children() {
|
|
4117
|
-
var _el$ = _tmpl$$
|
|
4430
|
+
var _el$ = _tmpl$$l(), _el$2 = _el$.firstChild, _el$3 = _el$2.firstChild, _el$4 = _el$3.firstChild, _el$5 = _el$4.nextSibling, _el$6 = _el$5.firstChild, _el$7 = _el$6.nextSibling, _el$8 = _el$3.nextSibling;
|
|
4118
4431
|
addEventListener(_el$, "click", props.onClose, true);
|
|
4119
4432
|
_el$2.$$click = (e) => e.stopPropagation();
|
|
4120
4433
|
_el$6.$$click = async () => {
|
|
@@ -4127,10 +4440,10 @@ const DownloadsPanel = (props) => {
|
|
|
4127
4440
|
return items();
|
|
4128
4441
|
},
|
|
4129
4442
|
get fallback() {
|
|
4130
|
-
return _tmpl$2$
|
|
4443
|
+
return _tmpl$2$l();
|
|
4131
4444
|
},
|
|
4132
4445
|
children: (item) => (() => {
|
|
4133
|
-
var _el$0 = _tmpl$3$
|
|
4446
|
+
var _el$0 = _tmpl$3$i(), _el$1 = _el$0.firstChild, _el$10 = _el$1.firstChild, _el$11 = _el$10.nextSibling, _el$12 = _el$11.nextSibling, _el$13 = _el$12.firstChild, _el$14 = _el$1.nextSibling, _el$15 = _el$14.firstChild, _el$16 = _el$15.nextSibling;
|
|
4134
4447
|
insert(_el$10, () => item.filename);
|
|
4135
4448
|
insert(_el$11, () => item.savePath);
|
|
4136
4449
|
insert(_el$1, createComponent(Show, {
|
|
@@ -4138,7 +4451,7 @@ const DownloadsPanel = (props) => {
|
|
|
4138
4451
|
return item.url;
|
|
4139
4452
|
},
|
|
4140
4453
|
children: (url) => (() => {
|
|
4141
|
-
var _el$17 = _tmpl$4$
|
|
4454
|
+
var _el$17 = _tmpl$4$i();
|
|
4142
4455
|
_el$17.firstChild;
|
|
4143
4456
|
insert(_el$17, url, null);
|
|
4144
4457
|
return _el$17;
|
|
@@ -4161,7 +4474,7 @@ const DownloadsPanel = (props) => {
|
|
|
4161
4474
|
});
|
|
4162
4475
|
};
|
|
4163
4476
|
delegateEvents(["click"]);
|
|
4164
|
-
var _tmpl$$
|
|
4477
|
+
var _tmpl$$k = /* @__PURE__ */ template(`<div class=find-bar><input class=find-bar-input type=text placeholder="Find in page..."><button class=find-bar-btn title="Previous (Shift+Enter)">▲</button><button class=find-bar-btn title="Next (Enter)">▼</button><button class="find-bar-btn find-bar-close"title="Close (Escape)">×`), _tmpl$2$k = /* @__PURE__ */ template(`<span class=find-bar-count>`);
|
|
4165
4478
|
const FindBar = () => {
|
|
4166
4479
|
const [open, setOpen] = createSignal(false);
|
|
4167
4480
|
const [query, setQuery] = createSignal("");
|
|
@@ -4239,7 +4552,7 @@ const FindBar = () => {
|
|
|
4239
4552
|
return open();
|
|
4240
4553
|
},
|
|
4241
4554
|
get children() {
|
|
4242
|
-
var _el$ = _tmpl$$
|
|
4555
|
+
var _el$ = _tmpl$$k(), _el$2 = _el$.firstChild, _el$3 = _el$2.nextSibling, _el$4 = _el$3.nextSibling, _el$5 = _el$4.nextSibling;
|
|
4243
4556
|
_el$2.$$input = (e) => handleInput(e.currentTarget.value);
|
|
4244
4557
|
var _ref$ = inputRef;
|
|
4245
4558
|
typeof _ref$ === "function" ? use(_ref$, _el$2) : inputRef = _el$2;
|
|
@@ -4249,7 +4562,7 @@ const FindBar = () => {
|
|
|
4249
4562
|
return result();
|
|
4250
4563
|
},
|
|
4251
4564
|
children: (r) => (() => {
|
|
4252
|
-
var _el$6 = _tmpl$2$
|
|
4565
|
+
var _el$6 = _tmpl$2$k();
|
|
4253
4566
|
insert(_el$6, (() => {
|
|
4254
4567
|
var _c$ = memo(() => r().matches > 0);
|
|
4255
4568
|
return () => _c$() ? `${r().activeMatchOrdinal} / ${r().matches}` : "No results";
|
|
@@ -4266,7 +4579,7 @@ const FindBar = () => {
|
|
|
4266
4579
|
});
|
|
4267
4580
|
};
|
|
4268
4581
|
delegateEvents(["input", "click"]);
|
|
4269
|
-
var _tmpl$$
|
|
4582
|
+
var _tmpl$$j = /* @__PURE__ */ template(`<div class=flow-progress>`), _tmpl$2$j = /* @__PURE__ */ template(`<div class=flow-progress-hint>Last: `), _tmpl$3$h = /* @__PURE__ */ template(`<div class=flow-progress-hint>Next: `), _tmpl$4$h = /* @__PURE__ */ template(`<div class=flow-progress-section><div class=flow-progress-header><span class=flow-progress-goal></span><span class=flow-progress-pct>%</span></div><div class=flow-progress-bar-track><div class=flow-progress-bar-fill></div></div><div class=flow-steps>`), _tmpl$5$e = /* @__PURE__ */ template(`<div><span class=flow-step-dot></span><span class=flow-step-label>`);
|
|
4270
4583
|
const FlowProgress = () => {
|
|
4271
4584
|
const {
|
|
4272
4585
|
runtimeState: runtimeState2
|
|
@@ -4297,13 +4610,13 @@ const FlowProgress = () => {
|
|
|
4297
4610
|
return flow() || tracker();
|
|
4298
4611
|
},
|
|
4299
4612
|
get children() {
|
|
4300
|
-
var _el$ = _tmpl$$
|
|
4613
|
+
var _el$ = _tmpl$$j();
|
|
4301
4614
|
insert(_el$, createComponent(Show, {
|
|
4302
4615
|
get when() {
|
|
4303
4616
|
return tracker();
|
|
4304
4617
|
},
|
|
4305
4618
|
children: (t) => (() => {
|
|
4306
|
-
var _el$2 = _tmpl$4$
|
|
4619
|
+
var _el$2 = _tmpl$4$h(), _el$3 = _el$2.firstChild, _el$4 = _el$3.firstChild, _el$5 = _el$4.nextSibling, _el$6 = _el$5.firstChild, _el$7 = _el$3.nextSibling, _el$8 = _el$7.firstChild, _el$9 = _el$7.nextSibling;
|
|
4307
4620
|
insert(_el$4, () => t().goal);
|
|
4308
4621
|
insert(_el$5, () => progressPercent(t().steps), _el$6);
|
|
4309
4622
|
insert(_el$9, createComponent(For, {
|
|
@@ -4322,7 +4635,7 @@ const FlowProgress = () => {
|
|
|
4322
4635
|
return t().lastAction;
|
|
4323
4636
|
},
|
|
4324
4637
|
get children() {
|
|
4325
|
-
var _el$0 = _tmpl$2$
|
|
4638
|
+
var _el$0 = _tmpl$2$j();
|
|
4326
4639
|
_el$0.firstChild;
|
|
4327
4640
|
insert(_el$0, () => t().lastAction, null);
|
|
4328
4641
|
return _el$0;
|
|
@@ -4333,7 +4646,7 @@ const FlowProgress = () => {
|
|
|
4333
4646
|
return memo(() => !!t().nextHint)() && !t().steps.every((s) => s.status === "done");
|
|
4334
4647
|
},
|
|
4335
4648
|
get children() {
|
|
4336
|
-
var _el$10 = _tmpl$3$
|
|
4649
|
+
var _el$10 = _tmpl$3$h();
|
|
4337
4650
|
_el$10.firstChild;
|
|
4338
4651
|
insert(_el$10, () => t().nextHint, null);
|
|
4339
4652
|
return _el$10;
|
|
@@ -4348,7 +4661,7 @@ const FlowProgress = () => {
|
|
|
4348
4661
|
return memo(() => !!flow())() && !tracker();
|
|
4349
4662
|
},
|
|
4350
4663
|
children: (f) => (() => {
|
|
4351
|
-
var _el$15 = _tmpl$4$
|
|
4664
|
+
var _el$15 = _tmpl$4$h(), _el$16 = _el$15.firstChild, _el$17 = _el$16.firstChild, _el$18 = _el$17.nextSibling, _el$19 = _el$18.firstChild, _el$20 = _el$16.nextSibling, _el$21 = _el$20.firstChild, _el$22 = _el$20.nextSibling;
|
|
4352
4665
|
insert(_el$17, () => f().goal);
|
|
4353
4666
|
insert(_el$18, () => progressPercent(f().steps), _el$19);
|
|
4354
4667
|
insert(_el$22, createComponent(For, {
|
|
@@ -4397,7 +4710,7 @@ function formatTime(iso, options) {
|
|
|
4397
4710
|
...options?.includeSeconds && { second: "2-digit" }
|
|
4398
4711
|
});
|
|
4399
4712
|
}
|
|
4400
|
-
var _tmpl$$
|
|
4713
|
+
var _tmpl$$i = /* @__PURE__ */ template(`<div class=agent-summary-hud>`), _tmpl$2$i = /* @__PURE__ */ template(`<span class=agent-transcript-live><span class=agent-transcript-live-dot aria-hidden=true></span>Live`), _tmpl$3$g = /* @__PURE__ */ template(`<div class=agent-transcript-list>`), _tmpl$4$g = /* @__PURE__ */ template(`<aside class=agent-transcript-dock><div class=agent-transcript-header><div class=agent-transcript-title-row><span class=agent-transcript-title>Agent Timeline</span></div><div class=agent-transcript-actions><button class=agent-transcript-icon></button><button class=agent-transcript-icon data-tooltip=Hide>×`), _tmpl$5$d = /* @__PURE__ */ template(`<span class=agent-summary-live-dot aria-hidden=true>`), _tmpl$6$d = /* @__PURE__ */ template(`<span class=agent-summary-text>: `), _tmpl$7$b = /* @__PURE__ */ template(`<article><div class=agent-transcript-meta><span class=agent-transcript-badge></span><span class=agent-transcript-time></span></div><div class=agent-transcript-text>`);
|
|
4401
4714
|
const AgentTranscriptDock = () => {
|
|
4402
4715
|
const {
|
|
4403
4716
|
runtimeState: runtimeState2
|
|
@@ -4413,20 +4726,20 @@ const AgentTranscriptDock = () => {
|
|
|
4413
4726
|
});
|
|
4414
4727
|
onCleanup(unsubscribe2);
|
|
4415
4728
|
});
|
|
4416
|
-
const
|
|
4417
|
-
const hasStreamingEntry = createMemo(() =>
|
|
4729
|
+
const timelineItems = createMemo(() => buildAgentTimelineItems(runtimeState2()));
|
|
4730
|
+
const hasStreamingEntry = createMemo(() => timelineItems().some(isLiveAgentTimelineItem));
|
|
4418
4731
|
const hideDock = async () => {
|
|
4419
4732
|
setMode("off");
|
|
4420
4733
|
await window.vessel.settings.set("agentTranscriptMode", "off");
|
|
4421
4734
|
};
|
|
4422
4735
|
const isSummary = createMemo(() => mode() === "summary");
|
|
4423
4736
|
const latestEntry = createMemo(() => {
|
|
4424
|
-
const entries2 =
|
|
4737
|
+
const entries2 = timelineItems();
|
|
4425
4738
|
return entries2.length > 0 ? entries2[0] : null;
|
|
4426
4739
|
});
|
|
4427
4740
|
return createComponent(Show, {
|
|
4428
4741
|
get when() {
|
|
4429
|
-
return memo(() => mode() !== "off")() &&
|
|
4742
|
+
return memo(() => mode() !== "off")() && timelineItems().length > 0;
|
|
4430
4743
|
},
|
|
4431
4744
|
get children() {
|
|
4432
4745
|
return [createComponent(Show, {
|
|
@@ -4434,7 +4747,7 @@ const AgentTranscriptDock = () => {
|
|
|
4434
4747
|
return isSummary();
|
|
4435
4748
|
},
|
|
4436
4749
|
get children() {
|
|
4437
|
-
var _el$ = _tmpl$$
|
|
4750
|
+
var _el$ = _tmpl$$i();
|
|
4438
4751
|
insert(_el$, createComponent(Show, {
|
|
4439
4752
|
get when() {
|
|
4440
4753
|
return latestEntry();
|
|
@@ -4448,10 +4761,10 @@ const AgentTranscriptDock = () => {
|
|
|
4448
4761
|
}
|
|
4449
4762
|
}), (() => {
|
|
4450
4763
|
var _el$10 = _tmpl$6$d(), _el$11 = _el$10.firstChild;
|
|
4451
|
-
insert(_el$10, () => entry().
|
|
4764
|
+
insert(_el$10, () => entry().label, _el$11);
|
|
4452
4765
|
insert(_el$10, (() => {
|
|
4453
|
-
var _c$ = memo(() => entry().
|
|
4454
|
-
return () => _c$() ? entry().
|
|
4766
|
+
var _c$ = memo(() => entry().detail.length > 80);
|
|
4767
|
+
return () => _c$() ? entry().detail.slice(0, 77) + "..." : entry().detail;
|
|
4455
4768
|
})(), null);
|
|
4456
4769
|
return _el$10;
|
|
4457
4770
|
})()]
|
|
@@ -4463,7 +4776,7 @@ const AgentTranscriptDock = () => {
|
|
|
4463
4776
|
return !isSummary();
|
|
4464
4777
|
},
|
|
4465
4778
|
get children() {
|
|
4466
|
-
var _el$2 = _tmpl$4$
|
|
4779
|
+
var _el$2 = _tmpl$4$g(), _el$3 = _el$2.firstChild, _el$4 = _el$3.firstChild;
|
|
4467
4780
|
_el$4.firstChild;
|
|
4468
4781
|
var _el$7 = _el$4.nextSibling, _el$8 = _el$7.firstChild, _el$9 = _el$8.nextSibling;
|
|
4469
4782
|
insert(_el$4, createComponent(Show, {
|
|
@@ -4471,7 +4784,7 @@ const AgentTranscriptDock = () => {
|
|
|
4471
4784
|
return hasStreamingEntry();
|
|
4472
4785
|
},
|
|
4473
4786
|
get children() {
|
|
4474
|
-
return _tmpl$2$
|
|
4787
|
+
return _tmpl$2$i();
|
|
4475
4788
|
}
|
|
4476
4789
|
}), null);
|
|
4477
4790
|
_el$8.$$click = () => setCollapsed((value) => !value);
|
|
@@ -4482,28 +4795,41 @@ const AgentTranscriptDock = () => {
|
|
|
4482
4795
|
return !collapsed();
|
|
4483
4796
|
},
|
|
4484
4797
|
get children() {
|
|
4485
|
-
var _el$0 = _tmpl$3$
|
|
4798
|
+
var _el$0 = _tmpl$3$g();
|
|
4486
4799
|
use((el) => useScrollFade(el), _el$0);
|
|
4487
4800
|
insert(_el$0, createComponent(For, {
|
|
4488
4801
|
get each() {
|
|
4489
|
-
return
|
|
4802
|
+
return timelineItems();
|
|
4490
4803
|
},
|
|
4491
|
-
children: (entry) =>
|
|
4492
|
-
|
|
4493
|
-
|
|
4494
|
-
|
|
4495
|
-
|
|
4496
|
-
|
|
4497
|
-
|
|
4498
|
-
|
|
4499
|
-
|
|
4500
|
-
|
|
4501
|
-
|
|
4502
|
-
|
|
4503
|
-
|
|
4504
|
-
|
|
4505
|
-
|
|
4506
|
-
|
|
4804
|
+
children: (entry) => {
|
|
4805
|
+
const duration = () => entry.type === "action" ? formatAgentTimelineDuration(entry.durationMs) : null;
|
|
4806
|
+
return (() => {
|
|
4807
|
+
var _el$13 = _tmpl$7$b(), _el$14 = _el$13.firstChild, _el$15 = _el$14.firstChild, _el$16 = _el$15.nextSibling, _el$17 = _el$14.nextSibling;
|
|
4808
|
+
insert(_el$15, () => entry.label);
|
|
4809
|
+
insert(_el$16, () => formatTime(entry.timestamp), null);
|
|
4810
|
+
insert(_el$16, createComponent(Show, {
|
|
4811
|
+
get when() {
|
|
4812
|
+
return duration();
|
|
4813
|
+
},
|
|
4814
|
+
children: (value) => [" · ", memo(value)]
|
|
4815
|
+
}), null);
|
|
4816
|
+
insert(_el$17, () => entry.detail);
|
|
4817
|
+
createRenderEffect((_p$) => {
|
|
4818
|
+
var _v$3 = `agent-transcript-entry ${entry.kind}`, _v$4 = !!isLiveAgentTimelineItem(entry), _v$5 = !!(entry.status === "failed"), _v$6 = !!(entry.status === "waiting-approval");
|
|
4819
|
+
_v$3 !== _p$.e && className(_el$13, _p$.e = _v$3);
|
|
4820
|
+
_v$4 !== _p$.t && _el$13.classList.toggle("streaming", _p$.t = _v$4);
|
|
4821
|
+
_v$5 !== _p$.a && _el$13.classList.toggle("failed", _p$.a = _v$5);
|
|
4822
|
+
_v$6 !== _p$.o && _el$13.classList.toggle("waiting-approval", _p$.o = _v$6);
|
|
4823
|
+
return _p$;
|
|
4824
|
+
}, {
|
|
4825
|
+
e: void 0,
|
|
4826
|
+
t: void 0,
|
|
4827
|
+
a: void 0,
|
|
4828
|
+
o: void 0
|
|
4829
|
+
});
|
|
4830
|
+
return _el$13;
|
|
4831
|
+
})();
|
|
4832
|
+
}
|
|
4507
4833
|
}));
|
|
4508
4834
|
return _el$0;
|
|
4509
4835
|
}
|
|
@@ -4524,6 +4850,541 @@ const AgentTranscriptDock = () => {
|
|
|
4524
4850
|
});
|
|
4525
4851
|
};
|
|
4526
4852
|
delegateEvents(["click"]);
|
|
4853
|
+
function useAnimatedPresence(isOpen, exitDurationMs) {
|
|
4854
|
+
const [visible, setVisible] = createSignal(false);
|
|
4855
|
+
const [closing, setClosing] = createSignal(false);
|
|
4856
|
+
let exitTimer;
|
|
4857
|
+
createEffect(() => {
|
|
4858
|
+
const open = isOpen();
|
|
4859
|
+
if (open) {
|
|
4860
|
+
if (exitTimer) {
|
|
4861
|
+
clearTimeout(exitTimer);
|
|
4862
|
+
exitTimer = void 0;
|
|
4863
|
+
}
|
|
4864
|
+
setClosing(false);
|
|
4865
|
+
setVisible(true);
|
|
4866
|
+
} else if (visible()) {
|
|
4867
|
+
setClosing(true);
|
|
4868
|
+
exitTimer = window.setTimeout(() => {
|
|
4869
|
+
setVisible(false);
|
|
4870
|
+
setClosing(false);
|
|
4871
|
+
exitTimer = void 0;
|
|
4872
|
+
}, exitDurationMs);
|
|
4873
|
+
}
|
|
4874
|
+
});
|
|
4875
|
+
onCleanup(() => {
|
|
4876
|
+
if (exitTimer) clearTimeout(exitTimer);
|
|
4877
|
+
});
|
|
4878
|
+
return { visible, closing };
|
|
4879
|
+
}
|
|
4880
|
+
const BROWSER_COMMAND_DEFINITIONS = [
|
|
4881
|
+
{
|
|
4882
|
+
id: "browser-command-palette",
|
|
4883
|
+
label: "Browser Command Palette",
|
|
4884
|
+
hint: "Search browser actions",
|
|
4885
|
+
keywords: "command palette actions",
|
|
4886
|
+
shortcuts: [{ ctrl: true, key: "k" }],
|
|
4887
|
+
shortcutLabel: "Ctrl+K",
|
|
4888
|
+
icon: "search",
|
|
4889
|
+
privateMode: false,
|
|
4890
|
+
showInPalette: false
|
|
4891
|
+
},
|
|
4892
|
+
{
|
|
4893
|
+
id: "ask-agent",
|
|
4894
|
+
label: "Ask Agent",
|
|
4895
|
+
hint: "Open the AI command bar",
|
|
4896
|
+
keywords: "ai ask chat command bar",
|
|
4897
|
+
shortcuts: [{ ctrl: true, key: "l" }],
|
|
4898
|
+
shortcutLabel: "Ctrl+L",
|
|
4899
|
+
icon: "bot",
|
|
4900
|
+
privateMode: false
|
|
4901
|
+
},
|
|
4902
|
+
{
|
|
4903
|
+
id: "toggle-sidebar",
|
|
4904
|
+
label: "Toggle Agent Panel",
|
|
4905
|
+
hint: "Show or hide the docked agent sidebar",
|
|
4906
|
+
keywords: "agent sidebar panel chat",
|
|
4907
|
+
shortcuts: [{ ctrl: true, shift: true, key: "l" }],
|
|
4908
|
+
shortcutLabel: "Ctrl+Shift+L",
|
|
4909
|
+
icon: "sidebar",
|
|
4910
|
+
privateMode: false
|
|
4911
|
+
},
|
|
4912
|
+
{
|
|
4913
|
+
id: "focus-mode",
|
|
4914
|
+
label: "Toggle Focus Mode",
|
|
4915
|
+
hint: "Hide or restore browser chrome",
|
|
4916
|
+
keywords: "focus fullscreen chrome",
|
|
4917
|
+
shortcuts: [{ ctrl: true, shift: true, key: "f" }],
|
|
4918
|
+
shortcutLabel: "Ctrl+Shift+F",
|
|
4919
|
+
icon: "focus",
|
|
4920
|
+
privateMode: false
|
|
4921
|
+
},
|
|
4922
|
+
{
|
|
4923
|
+
id: "new-tab",
|
|
4924
|
+
label: "New Tab",
|
|
4925
|
+
hint: "Open a fresh browser tab",
|
|
4926
|
+
keywords: "tab create open",
|
|
4927
|
+
shortcuts: [{ ctrl: true, key: "t" }],
|
|
4928
|
+
shortcutLabel: "Ctrl+T",
|
|
4929
|
+
icon: "plus"
|
|
4930
|
+
},
|
|
4931
|
+
{
|
|
4932
|
+
id: "close-tab",
|
|
4933
|
+
label: "Close Tab",
|
|
4934
|
+
hint: "Close the active browser tab",
|
|
4935
|
+
keywords: "tab close remove",
|
|
4936
|
+
shortcuts: [{ ctrl: true, key: "w" }],
|
|
4937
|
+
shortcutLabel: "Ctrl+W",
|
|
4938
|
+
icon: "eraser"
|
|
4939
|
+
},
|
|
4940
|
+
{
|
|
4941
|
+
id: "reopen-tab",
|
|
4942
|
+
label: "Reopen Closed Tab",
|
|
4943
|
+
hint: "Restore the most recently closed tab",
|
|
4944
|
+
keywords: "undo restore closed tab",
|
|
4945
|
+
shortcuts: [{ ctrl: true, shift: true, key: "t" }],
|
|
4946
|
+
shortcutLabel: "Ctrl+Shift+T",
|
|
4947
|
+
icon: "undo"
|
|
4948
|
+
},
|
|
4949
|
+
{
|
|
4950
|
+
id: "new-window",
|
|
4951
|
+
label: "New Window",
|
|
4952
|
+
hint: "Open another Vessel window",
|
|
4953
|
+
keywords: "window browser",
|
|
4954
|
+
shortcuts: [{ ctrl: true, key: "n" }],
|
|
4955
|
+
shortcutLabel: "Ctrl+N",
|
|
4956
|
+
icon: "app-window"
|
|
4957
|
+
},
|
|
4958
|
+
{
|
|
4959
|
+
id: "private-window",
|
|
4960
|
+
label: "New Private Window",
|
|
4961
|
+
hint: "Browse without saving local session data",
|
|
4962
|
+
keywords: "incognito private window",
|
|
4963
|
+
shortcuts: [{ ctrl: true, shift: true, key: "n" }],
|
|
4964
|
+
shortcutLabel: "Ctrl+Shift+N",
|
|
4965
|
+
icon: "shield"
|
|
4966
|
+
},
|
|
4967
|
+
{
|
|
4968
|
+
id: "reload",
|
|
4969
|
+
label: "Reload Page",
|
|
4970
|
+
hint: (context) => context.activeTabTitle() || "Reload the active tab",
|
|
4971
|
+
keywords: "refresh reload page",
|
|
4972
|
+
icon: "rotate"
|
|
4973
|
+
},
|
|
4974
|
+
{
|
|
4975
|
+
id: "go-back",
|
|
4976
|
+
label: "Go Back",
|
|
4977
|
+
hint: "Navigate the active tab backward",
|
|
4978
|
+
keywords: "history previous back",
|
|
4979
|
+
icon: "undo"
|
|
4980
|
+
},
|
|
4981
|
+
{
|
|
4982
|
+
id: "go-forward",
|
|
4983
|
+
label: "Go Forward",
|
|
4984
|
+
hint: "Navigate the active tab forward",
|
|
4985
|
+
keywords: "history next forward",
|
|
4986
|
+
icon: "panel-right"
|
|
4987
|
+
},
|
|
4988
|
+
{
|
|
4989
|
+
id: "find-page",
|
|
4990
|
+
label: "Find in Page",
|
|
4991
|
+
hint: "Search text in the active page",
|
|
4992
|
+
keywords: "find search page text",
|
|
4993
|
+
shortcuts: [{ ctrl: true, key: "f" }],
|
|
4994
|
+
shortcutLabel: "Ctrl+F",
|
|
4995
|
+
icon: "search",
|
|
4996
|
+
showInPalette: false
|
|
4997
|
+
},
|
|
4998
|
+
{
|
|
4999
|
+
id: "settings",
|
|
5000
|
+
label: "Settings",
|
|
5001
|
+
hint: "Open runtime settings",
|
|
5002
|
+
keywords: "preferences configuration provider",
|
|
5003
|
+
shortcuts: [{ ctrl: true, key: "," }],
|
|
5004
|
+
shortcutLabel: "Ctrl+,",
|
|
5005
|
+
icon: "settings",
|
|
5006
|
+
privateMode: false
|
|
5007
|
+
},
|
|
5008
|
+
{
|
|
5009
|
+
id: "downloads",
|
|
5010
|
+
label: "Downloads",
|
|
5011
|
+
hint: "Show recent downloads",
|
|
5012
|
+
keywords: "download files",
|
|
5013
|
+
icon: "download"
|
|
5014
|
+
},
|
|
5015
|
+
{
|
|
5016
|
+
id: "clear-data",
|
|
5017
|
+
label: "Clear Browsing Data",
|
|
5018
|
+
hint: "Open privacy cleanup options",
|
|
5019
|
+
keywords: "privacy cache cookies history",
|
|
5020
|
+
shortcuts: [{ ctrl: true, shift: true, key: "Delete" }],
|
|
5021
|
+
shortcutLabel: "Ctrl+Shift+Delete",
|
|
5022
|
+
icon: "eraser",
|
|
5023
|
+
privateMode: false
|
|
5024
|
+
},
|
|
5025
|
+
{
|
|
5026
|
+
id: "keyboard-help",
|
|
5027
|
+
label: "Keyboard Shortcuts",
|
|
5028
|
+
hint: "Show available browser shortcuts",
|
|
5029
|
+
keywords: "help shortcuts keys",
|
|
5030
|
+
shortcuts: [{ shift: true, key: "?" }],
|
|
5031
|
+
shortcutLabel: "?",
|
|
5032
|
+
icon: "help-circle",
|
|
5033
|
+
ignoreEditableTarget: true
|
|
5034
|
+
},
|
|
5035
|
+
{
|
|
5036
|
+
id: "devtools",
|
|
5037
|
+
label: "Toggle Agent DevTools",
|
|
5038
|
+
hint: "Open or close the agent debugging panel",
|
|
5039
|
+
keywords: "debug devtools activity network console",
|
|
5040
|
+
shortcuts: [{ key: "F12" }],
|
|
5041
|
+
shortcutLabel: "F12",
|
|
5042
|
+
icon: "shield",
|
|
5043
|
+
privateMode: false
|
|
5044
|
+
},
|
|
5045
|
+
{
|
|
5046
|
+
id: "zoom-in",
|
|
5047
|
+
label: "Zoom In",
|
|
5048
|
+
hint: "Increase active page zoom",
|
|
5049
|
+
keywords: "page scale larger",
|
|
5050
|
+
shortcuts: [
|
|
5051
|
+
{ ctrl: true, key: "+" },
|
|
5052
|
+
{ ctrl: true, key: "=" }
|
|
5053
|
+
],
|
|
5054
|
+
shortcutLabel: "Ctrl++ / Ctrl+=",
|
|
5055
|
+
icon: "zoom-in"
|
|
5056
|
+
},
|
|
5057
|
+
{
|
|
5058
|
+
id: "zoom-out",
|
|
5059
|
+
label: "Zoom Out",
|
|
5060
|
+
hint: "Decrease active page zoom",
|
|
5061
|
+
keywords: "page scale smaller",
|
|
5062
|
+
shortcuts: [{ ctrl: true, key: "-" }],
|
|
5063
|
+
shortcutLabel: "Ctrl+-",
|
|
5064
|
+
icon: "zoom-out"
|
|
5065
|
+
},
|
|
5066
|
+
{
|
|
5067
|
+
id: "zoom-reset",
|
|
5068
|
+
label: "Reset Zoom",
|
|
5069
|
+
hint: "Return active page zoom to default",
|
|
5070
|
+
keywords: "page scale normal",
|
|
5071
|
+
shortcuts: [{ ctrl: true, key: "0" }],
|
|
5072
|
+
shortcutLabel: "Ctrl+0",
|
|
5073
|
+
icon: "search"
|
|
5074
|
+
},
|
|
5075
|
+
{
|
|
5076
|
+
id: "print",
|
|
5077
|
+
label: "Print Page",
|
|
5078
|
+
hint: "Open print options for the active tab",
|
|
5079
|
+
keywords: "printer paper",
|
|
5080
|
+
shortcuts: [{ ctrl: true, key: "p" }],
|
|
5081
|
+
shortcutLabel: "Ctrl+P",
|
|
5082
|
+
icon: "printer"
|
|
5083
|
+
},
|
|
5084
|
+
{
|
|
5085
|
+
id: "save-pdf",
|
|
5086
|
+
label: "Save Page as PDF",
|
|
5087
|
+
hint: "Export the active tab to a PDF",
|
|
5088
|
+
keywords: "print pdf export",
|
|
5089
|
+
shortcuts: [{ ctrl: true, shift: true, key: "p" }],
|
|
5090
|
+
shortcutLabel: "Ctrl+Shift+P",
|
|
5091
|
+
icon: "file-down"
|
|
5092
|
+
},
|
|
5093
|
+
{
|
|
5094
|
+
id: "toggle-pip",
|
|
5095
|
+
label: "Toggle Picture-in-Picture",
|
|
5096
|
+
hint: "Toggle picture-in-picture for supported media",
|
|
5097
|
+
keywords: "video picture in picture pip",
|
|
5098
|
+
shortcuts: [{ ctrl: true, shift: true, key: "i" }],
|
|
5099
|
+
shortcutLabel: "Ctrl+Shift+I",
|
|
5100
|
+
icon: "panel-right",
|
|
5101
|
+
privateMode: false
|
|
5102
|
+
},
|
|
5103
|
+
{
|
|
5104
|
+
id: "capture-highlight",
|
|
5105
|
+
label: "Capture Highlight",
|
|
5106
|
+
hint: "Save the current page selection",
|
|
5107
|
+
keywords: "highlight selection save quote",
|
|
5108
|
+
shortcuts: [{ ctrl: true, key: "h" }],
|
|
5109
|
+
shortcutLabel: "Ctrl+H",
|
|
5110
|
+
icon: "plus",
|
|
5111
|
+
privateMode: false
|
|
5112
|
+
}
|
|
5113
|
+
];
|
|
5114
|
+
function createBrowserCommands(context) {
|
|
5115
|
+
const actions = {
|
|
5116
|
+
"browser-command-palette": context.openBrowserCommandPalette,
|
|
5117
|
+
"ask-agent": context.openCommandBar,
|
|
5118
|
+
"toggle-sidebar": context.toggleSidebar,
|
|
5119
|
+
"focus-mode": context.toggleFocusMode,
|
|
5120
|
+
"new-tab": context.createTab,
|
|
5121
|
+
"close-tab": context.closeActiveTab,
|
|
5122
|
+
"reopen-tab": context.reopenClosedTab,
|
|
5123
|
+
"new-window": context.openNewWindow,
|
|
5124
|
+
"private-window": context.openPrivateWindow,
|
|
5125
|
+
reload: context.reload,
|
|
5126
|
+
"go-back": context.goBack,
|
|
5127
|
+
"go-forward": context.goForward,
|
|
5128
|
+
"find-page": () => void 0,
|
|
5129
|
+
settings: context.openSettings,
|
|
5130
|
+
downloads: context.openDownloads,
|
|
5131
|
+
"clear-data": context.clearBrowsingData,
|
|
5132
|
+
"keyboard-help": context.toggleKeyboardHelp,
|
|
5133
|
+
devtools: context.toggleDevTools,
|
|
5134
|
+
"zoom-in": context.zoomIn,
|
|
5135
|
+
"zoom-out": context.zoomOut,
|
|
5136
|
+
"zoom-reset": context.zoomReset,
|
|
5137
|
+
print: context.print,
|
|
5138
|
+
"save-pdf": context.printToPdf,
|
|
5139
|
+
"toggle-pip": context.togglePip,
|
|
5140
|
+
"capture-highlight": context.captureHighlight
|
|
5141
|
+
};
|
|
5142
|
+
return BROWSER_COMMAND_DEFINITIONS.filter(
|
|
5143
|
+
(definition) => definition.showInPalette !== false
|
|
5144
|
+
).map((definition) => ({
|
|
5145
|
+
id: definition.id,
|
|
5146
|
+
label: definition.label,
|
|
5147
|
+
hint: typeof definition.hint === "function" ? definition.hint(context) : definition.hint,
|
|
5148
|
+
keywords: definition.keywords,
|
|
5149
|
+
shortcut: definition.shortcutLabel,
|
|
5150
|
+
icon: definition.icon,
|
|
5151
|
+
run: actions[definition.id]
|
|
5152
|
+
}));
|
|
5153
|
+
}
|
|
5154
|
+
function getBrowserCommandShortcutHelp(privateMode = false) {
|
|
5155
|
+
return BROWSER_COMMAND_DEFINITIONS.filter(
|
|
5156
|
+
(definition) => definition.shortcutLabel && (!privateMode || definition.privateMode !== false)
|
|
5157
|
+
).map((definition) => ({
|
|
5158
|
+
keys: definition.shortcutLabel,
|
|
5159
|
+
action: definition.label
|
|
5160
|
+
}));
|
|
5161
|
+
}
|
|
5162
|
+
function getBrowserCommandIdForKeyboardEvent(event) {
|
|
5163
|
+
for (const definition of BROWSER_COMMAND_DEFINITIONS) {
|
|
5164
|
+
if (!definition.shortcuts) continue;
|
|
5165
|
+
if (definition.ignoreEditableTarget && isEditableTarget(event.target)) {
|
|
5166
|
+
continue;
|
|
5167
|
+
}
|
|
5168
|
+
if (definition.shortcuts.some((shortcut) => matchesShortcut(event, shortcut))) {
|
|
5169
|
+
return definition.id;
|
|
5170
|
+
}
|
|
5171
|
+
}
|
|
5172
|
+
return null;
|
|
5173
|
+
}
|
|
5174
|
+
function matchesShortcut(event, shortcut) {
|
|
5175
|
+
const ctrl = event.ctrlKey || event.metaKey;
|
|
5176
|
+
return ctrl === Boolean(shortcut.ctrl) && event.shiftKey === Boolean(shortcut.shift) && event.altKey === Boolean(shortcut.alt) && event.key.toLowerCase() === shortcut.key.toLowerCase();
|
|
5177
|
+
}
|
|
5178
|
+
function isEditableTarget(target) {
|
|
5179
|
+
if (typeof HTMLElement === "undefined" || !(target instanceof HTMLElement)) {
|
|
5180
|
+
return false;
|
|
5181
|
+
}
|
|
5182
|
+
return target.tagName === "INPUT" || target.tagName === "TEXTAREA" || target.isContentEditable;
|
|
5183
|
+
}
|
|
5184
|
+
var _tmpl$$h = /* @__PURE__ */ template(`<div class=browser-command-overlay><section class=browser-command-palette><div class=browser-command-search><input placeholder="Search browser commands..."><kbd>Esc</kbd></div><div class=browser-command-list role=listbox>`), _tmpl$2$h = /* @__PURE__ */ template(`<div class=browser-command-empty>No matching commands`), _tmpl$3$f = /* @__PURE__ */ template(`<button type=button class=browser-command-item role=option><span class=browser-command-icon></span><span class=browser-command-copy><span class=browser-command-label></span><span class=browser-command-hint>`), _tmpl$4$f = /* @__PURE__ */ template(`<kbd class=browser-command-shortcut>`);
|
|
5185
|
+
const PALETTE_EXIT_MS = 160;
|
|
5186
|
+
const COMMAND_ICONS = {
|
|
5187
|
+
"app-window": app_window_default,
|
|
5188
|
+
bot: bot_default,
|
|
5189
|
+
download: download_default,
|
|
5190
|
+
eraser: eraser_default,
|
|
5191
|
+
"file-down": file_down_default,
|
|
5192
|
+
focus: focus_default,
|
|
5193
|
+
"help-circle": circle_question_mark_default,
|
|
5194
|
+
"panel-right": panel_right_default,
|
|
5195
|
+
plus: plus_default,
|
|
5196
|
+
printer: printer_default,
|
|
5197
|
+
rotate: rotate_ccw_default,
|
|
5198
|
+
search: search_default,
|
|
5199
|
+
settings: settings_default,
|
|
5200
|
+
shield: shield_default,
|
|
5201
|
+
sidebar: panel_left_default,
|
|
5202
|
+
undo: undo_2_default,
|
|
5203
|
+
"zoom-in": zoom_in_default,
|
|
5204
|
+
"zoom-out": zoom_out_default
|
|
5205
|
+
};
|
|
5206
|
+
const BrowserCommandPalette = (props) => {
|
|
5207
|
+
const {
|
|
5208
|
+
browserCommandPaletteOpen: browserCommandPaletteOpen2,
|
|
5209
|
+
closeBrowserCommandPalette,
|
|
5210
|
+
openCommandBar,
|
|
5211
|
+
toggleSidebar,
|
|
5212
|
+
toggleFocusMode,
|
|
5213
|
+
toggleDevTools,
|
|
5214
|
+
openSettings
|
|
5215
|
+
} = useUI();
|
|
5216
|
+
const {
|
|
5217
|
+
activeTab,
|
|
5218
|
+
activeTabId: activeTabId2,
|
|
5219
|
+
createTab,
|
|
5220
|
+
closeTab,
|
|
5221
|
+
reload,
|
|
5222
|
+
goBack,
|
|
5223
|
+
goForward,
|
|
5224
|
+
reopenClosed,
|
|
5225
|
+
zoomIn,
|
|
5226
|
+
zoomOut,
|
|
5227
|
+
zoomReset,
|
|
5228
|
+
print,
|
|
5229
|
+
printToPdf
|
|
5230
|
+
} = useTabs();
|
|
5231
|
+
const {
|
|
5232
|
+
visible,
|
|
5233
|
+
closing
|
|
5234
|
+
} = useAnimatedPresence(browserCommandPaletteOpen2, PALETTE_EXIT_MS);
|
|
5235
|
+
const [query, setQuery] = createSignal("");
|
|
5236
|
+
const [selectedIndex, setSelectedIndex] = createSignal(0);
|
|
5237
|
+
let inputRef;
|
|
5238
|
+
const runForActiveTab = (action) => {
|
|
5239
|
+
const id = activeTabId2();
|
|
5240
|
+
if (id) return action(id);
|
|
5241
|
+
};
|
|
5242
|
+
const commands = createMemo(() => createBrowserCommands({
|
|
5243
|
+
activeTabTitle: () => activeTab()?.title,
|
|
5244
|
+
createTab: () => createTab(),
|
|
5245
|
+
closeActiveTab: () => runForActiveTab((id) => closeTab(id)),
|
|
5246
|
+
reopenClosedTab: () => reopenClosed(),
|
|
5247
|
+
openNewWindow: () => window.vessel.tabs.openNewWindow(),
|
|
5248
|
+
openPrivateWindow: () => window.vessel.tabs.openPrivateWindow(),
|
|
5249
|
+
reload: () => reload(),
|
|
5250
|
+
goBack: () => goBack(),
|
|
5251
|
+
goForward: () => goForward(),
|
|
5252
|
+
openBrowserCommandPalette: () => void 0,
|
|
5253
|
+
openCommandBar: () => openCommandBar(),
|
|
5254
|
+
toggleSidebar: () => toggleSidebar(),
|
|
5255
|
+
toggleFocusMode: () => toggleFocusMode(),
|
|
5256
|
+
openSettings: () => openSettings(),
|
|
5257
|
+
openDownloads: props.onOpenDownloads,
|
|
5258
|
+
clearBrowsingData: props.onOpenClearData,
|
|
5259
|
+
toggleKeyboardHelp: props.onToggleKeyboardHelp,
|
|
5260
|
+
toggleDevTools: () => toggleDevTools(),
|
|
5261
|
+
zoomIn: () => runForActiveTab((id) => zoomIn(id)),
|
|
5262
|
+
zoomOut: () => runForActiveTab((id) => zoomOut(id)),
|
|
5263
|
+
zoomReset: () => runForActiveTab((id) => zoomReset(id)),
|
|
5264
|
+
print: () => runForActiveTab((id) => print(id)),
|
|
5265
|
+
printToPdf: () => runForActiveTab((id) => printToPdf(id)),
|
|
5266
|
+
togglePip: () => window.vessel.pip.toggle(),
|
|
5267
|
+
captureHighlight: props.onCaptureHighlight
|
|
5268
|
+
}));
|
|
5269
|
+
const filteredCommands = createMemo(() => {
|
|
5270
|
+
const needle = query().trim().toLowerCase();
|
|
5271
|
+
if (!needle) return commands();
|
|
5272
|
+
return commands().filter((command) => `${command.label} ${command.hint} ${command.keywords}`.toLowerCase().includes(needle));
|
|
5273
|
+
});
|
|
5274
|
+
createEffect(() => {
|
|
5275
|
+
if (!browserCommandPaletteOpen2()) return;
|
|
5276
|
+
setQuery("");
|
|
5277
|
+
setSelectedIndex(0);
|
|
5278
|
+
queueMicrotask(() => inputRef?.focus());
|
|
5279
|
+
});
|
|
5280
|
+
createEffect(() => {
|
|
5281
|
+
const count = filteredCommands().length;
|
|
5282
|
+
if (selectedIndex() >= count) {
|
|
5283
|
+
setSelectedIndex(Math.max(0, count - 1));
|
|
5284
|
+
}
|
|
5285
|
+
});
|
|
5286
|
+
const close = () => closeBrowserCommandPalette();
|
|
5287
|
+
const runCommand = async (command) => {
|
|
5288
|
+
close();
|
|
5289
|
+
await command.run();
|
|
5290
|
+
};
|
|
5291
|
+
const onKeyDown = (event) => {
|
|
5292
|
+
if (event.key === "Escape") {
|
|
5293
|
+
event.preventDefault();
|
|
5294
|
+
close();
|
|
5295
|
+
return;
|
|
5296
|
+
}
|
|
5297
|
+
if (event.key === "ArrowDown") {
|
|
5298
|
+
event.preventDefault();
|
|
5299
|
+
const count = filteredCommands().length;
|
|
5300
|
+
if (count > 0) setSelectedIndex((selectedIndex() + 1) % count);
|
|
5301
|
+
return;
|
|
5302
|
+
}
|
|
5303
|
+
if (event.key === "ArrowUp") {
|
|
5304
|
+
event.preventDefault();
|
|
5305
|
+
const count = filteredCommands().length;
|
|
5306
|
+
if (count > 0) setSelectedIndex((selectedIndex() - 1 + count) % count);
|
|
5307
|
+
return;
|
|
5308
|
+
}
|
|
5309
|
+
if (event.key === "Enter") {
|
|
5310
|
+
event.preventDefault();
|
|
5311
|
+
const command = filteredCommands()[selectedIndex()];
|
|
5312
|
+
if (command) void runCommand(command);
|
|
5313
|
+
}
|
|
5314
|
+
};
|
|
5315
|
+
return createComponent(Show, {
|
|
5316
|
+
get when() {
|
|
5317
|
+
return visible();
|
|
5318
|
+
},
|
|
5319
|
+
get children() {
|
|
5320
|
+
var _el$ = _tmpl$$h(), _el$2 = _el$.firstChild, _el$3 = _el$2.firstChild, _el$4 = _el$3.firstChild, _el$5 = _el$3.nextSibling;
|
|
5321
|
+
_el$.$$click = close;
|
|
5322
|
+
_el$2.$$click = (event) => event.stopPropagation();
|
|
5323
|
+
insert(_el$3, createComponent(search_default, {
|
|
5324
|
+
size: 17,
|
|
5325
|
+
"aria-hidden": "true"
|
|
5326
|
+
}), _el$4);
|
|
5327
|
+
_el$4.$$keydown = onKeyDown;
|
|
5328
|
+
_el$4.$$input = (event) => setQuery(event.currentTarget.value);
|
|
5329
|
+
var _ref$ = inputRef;
|
|
5330
|
+
typeof _ref$ === "function" ? use(_ref$, _el$4) : inputRef = _el$4;
|
|
5331
|
+
setAttribute(_el$4, "spellcheck", false);
|
|
5332
|
+
insert(_el$5, createComponent(Show, {
|
|
5333
|
+
get when() {
|
|
5334
|
+
return filteredCommands().length > 0;
|
|
5335
|
+
},
|
|
5336
|
+
get fallback() {
|
|
5337
|
+
return _tmpl$2$h();
|
|
5338
|
+
},
|
|
5339
|
+
get children() {
|
|
5340
|
+
return createComponent(For, {
|
|
5341
|
+
get each() {
|
|
5342
|
+
return filteredCommands();
|
|
5343
|
+
},
|
|
5344
|
+
children: (command, index) => {
|
|
5345
|
+
const Icon2 = COMMAND_ICONS[command.icon];
|
|
5346
|
+
return (() => {
|
|
5347
|
+
var _el$7 = _tmpl$3$f(), _el$8 = _el$7.firstChild, _el$9 = _el$8.nextSibling, _el$0 = _el$9.firstChild, _el$1 = _el$0.nextSibling;
|
|
5348
|
+
_el$7.$$click = () => void runCommand(command);
|
|
5349
|
+
_el$7.addEventListener("mouseenter", () => setSelectedIndex(index()));
|
|
5350
|
+
insert(_el$8, createComponent(Icon2, {
|
|
5351
|
+
size: 16,
|
|
5352
|
+
"aria-hidden": "true"
|
|
5353
|
+
}));
|
|
5354
|
+
insert(_el$0, () => command.label);
|
|
5355
|
+
insert(_el$1, () => command.hint);
|
|
5356
|
+
insert(_el$7, createComponent(Show, {
|
|
5357
|
+
get when() {
|
|
5358
|
+
return command.shortcut;
|
|
5359
|
+
},
|
|
5360
|
+
children: (shortcut) => (() => {
|
|
5361
|
+
var _el$10 = _tmpl$4$f();
|
|
5362
|
+
insert(_el$10, shortcut);
|
|
5363
|
+
return _el$10;
|
|
5364
|
+
})()
|
|
5365
|
+
}), null);
|
|
5366
|
+
createRenderEffect((_p$) => {
|
|
5367
|
+
var _v$ = !!(index() === selectedIndex()), _v$2 = index() === selectedIndex();
|
|
5368
|
+
_v$ !== _p$.e && _el$7.classList.toggle("selected", _p$.e = _v$);
|
|
5369
|
+
_v$2 !== _p$.t && setAttribute(_el$7, "aria-selected", _p$.t = _v$2);
|
|
5370
|
+
return _p$;
|
|
5371
|
+
}, {
|
|
5372
|
+
e: void 0,
|
|
5373
|
+
t: void 0
|
|
5374
|
+
});
|
|
5375
|
+
return _el$7;
|
|
5376
|
+
})();
|
|
5377
|
+
}
|
|
5378
|
+
});
|
|
5379
|
+
}
|
|
5380
|
+
}));
|
|
5381
|
+
createRenderEffect(() => _el$.classList.toggle("closing", !!closing()));
|
|
5382
|
+
createRenderEffect(() => _el$4.value = query());
|
|
5383
|
+
return _el$;
|
|
5384
|
+
}
|
|
5385
|
+
});
|
|
5386
|
+
};
|
|
5387
|
+
delegateEvents(["click", "input", "keydown"]);
|
|
4527
5388
|
const MAX_PROVIDER_HISTORY_MESSAGES = 24;
|
|
4528
5389
|
const MAX_PROVIDER_HISTORY_CHARS = 24e3;
|
|
4529
5390
|
const MAX_PROVIDER_HISTORY_MESSAGE_CHARS = 3e3;
|
|
@@ -4897,33 +5758,6 @@ function useAI() {
|
|
|
4897
5758
|
}
|
|
4898
5759
|
};
|
|
4899
5760
|
}
|
|
4900
|
-
function useAnimatedPresence(isOpen, exitDurationMs) {
|
|
4901
|
-
const [visible, setVisible] = createSignal(false);
|
|
4902
|
-
const [closing, setClosing] = createSignal(false);
|
|
4903
|
-
let exitTimer;
|
|
4904
|
-
createEffect(() => {
|
|
4905
|
-
const open = isOpen();
|
|
4906
|
-
if (open) {
|
|
4907
|
-
if (exitTimer) {
|
|
4908
|
-
clearTimeout(exitTimer);
|
|
4909
|
-
exitTimer = void 0;
|
|
4910
|
-
}
|
|
4911
|
-
setClosing(false);
|
|
4912
|
-
setVisible(true);
|
|
4913
|
-
} else if (visible()) {
|
|
4914
|
-
setClosing(true);
|
|
4915
|
-
exitTimer = window.setTimeout(() => {
|
|
4916
|
-
setVisible(false);
|
|
4917
|
-
setClosing(false);
|
|
4918
|
-
exitTimer = void 0;
|
|
4919
|
-
}, exitDurationMs);
|
|
4920
|
-
}
|
|
4921
|
-
});
|
|
4922
|
-
onCleanup(() => {
|
|
4923
|
-
if (exitTimer) clearTimeout(exitTimer);
|
|
4924
|
-
});
|
|
4925
|
-
return { visible, closing };
|
|
4926
|
-
}
|
|
4927
5761
|
function useProviderAuthSetup(options = {}) {
|
|
4928
5762
|
const [codexAuthStatus, setCodexAuthStatus] = createSignal("idle");
|
|
4929
5763
|
const [codexAccountEmail, setCodexAccountEmail] = createSignal("");
|
|
@@ -9274,7 +10108,7 @@ ${contextBlock}` : contextBlock);
|
|
|
9274
10108
|
if (finished) return;
|
|
9275
10109
|
const totalDelta = startX - state.currentX;
|
|
9276
10110
|
const targetWidth = startWidth + totalDelta;
|
|
9277
|
-
const newWidth =
|
|
10111
|
+
const newWidth = clampSidebarWidth(targetWidth);
|
|
9278
10112
|
resizeSidebar(newWidth);
|
|
9279
10113
|
};
|
|
9280
10114
|
const clearPointerTracking = () => {
|
|
@@ -14055,75 +14889,6 @@ var _tmpl$$2 = /* @__PURE__ */ template(`<div class=command-bar-overlay><div cla
|
|
|
14055
14889
|
color: var(--text-secondary);
|
|
14056
14890
|
}
|
|
14057
14891
|
`), _tmpl$3$1 = /* @__PURE__ */ template(`<div class=keyboard-help-keys>`), _tmpl$4$1 = /* @__PURE__ */ template(`<div class=keyboard-help-action>`), _tmpl$5$1 = /* @__PURE__ */ template(`<span class=keyboard-help-plus>/`), _tmpl$6$1 = /* @__PURE__ */ template(`<kbd>`), _tmpl$7$1 = /* @__PURE__ */ template(`<span class=keyboard-help-plus>+`);
|
|
14058
|
-
const SHORTCUTS = [{
|
|
14059
|
-
keys: "Ctrl+L",
|
|
14060
|
-
action: "AI Command Bar",
|
|
14061
|
-
privateMode: false
|
|
14062
|
-
}, {
|
|
14063
|
-
keys: "Ctrl+Shift+L",
|
|
14064
|
-
action: "Toggle AI Sidebar",
|
|
14065
|
-
privateMode: false
|
|
14066
|
-
}, {
|
|
14067
|
-
keys: "Ctrl+Shift+F",
|
|
14068
|
-
action: "Toggle Focus Mode",
|
|
14069
|
-
privateMode: false
|
|
14070
|
-
}, {
|
|
14071
|
-
keys: "F12",
|
|
14072
|
-
action: "Toggle Dev Tools Panel",
|
|
14073
|
-
privateMode: false
|
|
14074
|
-
}, {
|
|
14075
|
-
keys: "Ctrl+N",
|
|
14076
|
-
action: "New Window"
|
|
14077
|
-
}, {
|
|
14078
|
-
keys: "Ctrl+T",
|
|
14079
|
-
action: "New Tab"
|
|
14080
|
-
}, {
|
|
14081
|
-
keys: "Ctrl+W",
|
|
14082
|
-
action: "Close Tab"
|
|
14083
|
-
}, {
|
|
14084
|
-
keys: "Ctrl+Shift+T",
|
|
14085
|
-
action: "Reopen Closed Tab"
|
|
14086
|
-
}, {
|
|
14087
|
-
keys: "Ctrl+F",
|
|
14088
|
-
action: "Find in Page"
|
|
14089
|
-
}, {
|
|
14090
|
-
keys: "Ctrl++ / Ctrl+=",
|
|
14091
|
-
action: "Zoom In"
|
|
14092
|
-
}, {
|
|
14093
|
-
keys: "Ctrl+-",
|
|
14094
|
-
action: "Zoom Out"
|
|
14095
|
-
}, {
|
|
14096
|
-
keys: "Ctrl+0",
|
|
14097
|
-
action: "Reset Zoom"
|
|
14098
|
-
}, {
|
|
14099
|
-
keys: "Ctrl+Shift+N",
|
|
14100
|
-
action: "New Private Window"
|
|
14101
|
-
}, {
|
|
14102
|
-
keys: "Ctrl+P",
|
|
14103
|
-
action: "Print Page"
|
|
14104
|
-
}, {
|
|
14105
|
-
keys: "Ctrl+Shift+P",
|
|
14106
|
-
action: "Save Page as PDF"
|
|
14107
|
-
}, {
|
|
14108
|
-
keys: "Ctrl+Shift+I",
|
|
14109
|
-
action: "Toggle Picture-in-Picture",
|
|
14110
|
-
privateMode: false
|
|
14111
|
-
}, {
|
|
14112
|
-
keys: "Ctrl+Shift+Delete",
|
|
14113
|
-
action: "Clear Browsing Data",
|
|
14114
|
-
privateMode: false
|
|
14115
|
-
}, {
|
|
14116
|
-
keys: "Ctrl+,",
|
|
14117
|
-
action: "Settings",
|
|
14118
|
-
privateMode: false
|
|
14119
|
-
}, {
|
|
14120
|
-
keys: "Ctrl+H",
|
|
14121
|
-
action: "Capture Highlight",
|
|
14122
|
-
privateMode: false
|
|
14123
|
-
}, {
|
|
14124
|
-
keys: "?",
|
|
14125
|
-
action: "This help overlay"
|
|
14126
|
-
}];
|
|
14127
14892
|
function shortcutParts(keys) {
|
|
14128
14893
|
return keys.split(" / ").map((combo) => combo.replace(/\+\+/g, "+Plus").split("+").filter(Boolean).map((key) => key === "Plus" ? "+" : key));
|
|
14129
14894
|
}
|
|
@@ -14132,7 +14897,7 @@ const KeyboardHelp = (props) => {
|
|
|
14132
14897
|
visible,
|
|
14133
14898
|
closing
|
|
14134
14899
|
} = useAnimatedPresence(() => props.open, 200);
|
|
14135
|
-
const shortcuts = () => props.privateMode
|
|
14900
|
+
const shortcuts = () => getBrowserCommandShortcutHelp(props.privateMode);
|
|
14136
14901
|
return createComponent(Show, {
|
|
14137
14902
|
get when() {
|
|
14138
14903
|
return visible();
|
|
@@ -14304,110 +15069,42 @@ const ClearBrowsingData = (props) => {
|
|
|
14304
15069
|
delegateEvents(["click"]);
|
|
14305
15070
|
function setupKeybindings(handlers) {
|
|
14306
15071
|
const listener = (e) => {
|
|
14307
|
-
const
|
|
14308
|
-
|
|
14309
|
-
|
|
14310
|
-
|
|
14311
|
-
handlers.openCommandBar?.();
|
|
14312
|
-
return;
|
|
14313
|
-
}
|
|
14314
|
-
if (ctrl && key === "l" && e.shiftKey) {
|
|
14315
|
-
e.preventDefault();
|
|
14316
|
-
handlers.toggleSidebar?.();
|
|
14317
|
-
return;
|
|
14318
|
-
}
|
|
14319
|
-
if (ctrl && key === "f" && e.shiftKey) {
|
|
14320
|
-
e.preventDefault();
|
|
14321
|
-
handlers.toggleFocusMode?.();
|
|
14322
|
-
return;
|
|
14323
|
-
}
|
|
14324
|
-
if (ctrl && key === "t" && e.shiftKey) {
|
|
14325
|
-
e.preventDefault();
|
|
14326
|
-
handlers.reopenClosedTab?.();
|
|
14327
|
-
return;
|
|
14328
|
-
}
|
|
14329
|
-
if (ctrl && key === "n" && e.shiftKey) {
|
|
14330
|
-
e.preventDefault();
|
|
14331
|
-
handlers.openPrivateWindow?.();
|
|
14332
|
-
return;
|
|
14333
|
-
}
|
|
14334
|
-
if (ctrl && key === "n" && !e.shiftKey) {
|
|
14335
|
-
e.preventDefault();
|
|
14336
|
-
handlers.openNewWindow?.();
|
|
14337
|
-
return;
|
|
14338
|
-
}
|
|
14339
|
-
if (ctrl && key === "t" && !e.shiftKey) {
|
|
14340
|
-
e.preventDefault();
|
|
14341
|
-
handlers.newTab();
|
|
14342
|
-
return;
|
|
14343
|
-
}
|
|
14344
|
-
if (ctrl && key === "w") {
|
|
14345
|
-
e.preventDefault();
|
|
14346
|
-
handlers.closeTab();
|
|
14347
|
-
return;
|
|
14348
|
-
}
|
|
14349
|
-
if (ctrl && key === "p" && e.shiftKey) {
|
|
14350
|
-
e.preventDefault();
|
|
14351
|
-
handlers.printToPdf?.();
|
|
14352
|
-
return;
|
|
14353
|
-
}
|
|
14354
|
-
if (ctrl && key === "i" && e.shiftKey) {
|
|
14355
|
-
e.preventDefault();
|
|
14356
|
-
handlers.togglePip?.();
|
|
14357
|
-
return;
|
|
14358
|
-
}
|
|
14359
|
-
if (ctrl && e.shiftKey && e.key === "Delete") {
|
|
14360
|
-
e.preventDefault();
|
|
14361
|
-
handlers.clearBrowsingData?.();
|
|
14362
|
-
return;
|
|
14363
|
-
}
|
|
14364
|
-
if (ctrl && key === "p" && !e.shiftKey) {
|
|
14365
|
-
e.preventDefault();
|
|
14366
|
-
handlers.print?.();
|
|
14367
|
-
return;
|
|
14368
|
-
}
|
|
14369
|
-
if (ctrl && e.key === ",") {
|
|
15072
|
+
const commandId = getBrowserCommandIdForKeyboardEvent(e);
|
|
15073
|
+
if (!commandId) return;
|
|
15074
|
+
const commandHandler = getCommandHandler(commandId, handlers);
|
|
15075
|
+
if (commandHandler) {
|
|
14370
15076
|
e.preventDefault();
|
|
14371
|
-
|
|
14372
|
-
return;
|
|
14373
|
-
}
|
|
14374
|
-
if (ctrl && key === "h" && !e.shiftKey) {
|
|
14375
|
-
e.preventDefault();
|
|
14376
|
-
handlers.captureHighlight?.();
|
|
14377
|
-
return;
|
|
14378
|
-
}
|
|
14379
|
-
if (e.key === "F12") {
|
|
14380
|
-
e.preventDefault();
|
|
14381
|
-
handlers.toggleDevTools?.();
|
|
14382
|
-
return;
|
|
14383
|
-
}
|
|
14384
|
-
if (ctrl && (e.key === "+" || e.key === "=")) {
|
|
14385
|
-
e.preventDefault();
|
|
14386
|
-
handlers.zoomIn?.();
|
|
14387
|
-
return;
|
|
14388
|
-
}
|
|
14389
|
-
if (ctrl && e.key === "-") {
|
|
14390
|
-
e.preventDefault();
|
|
14391
|
-
handlers.zoomOut?.();
|
|
14392
|
-
return;
|
|
14393
|
-
}
|
|
14394
|
-
if (ctrl && e.key === "0") {
|
|
14395
|
-
e.preventDefault();
|
|
14396
|
-
handlers.zoomReset?.();
|
|
14397
|
-
return;
|
|
14398
|
-
}
|
|
14399
|
-
if (e.key === "?" && !ctrl && !e.altKey) {
|
|
14400
|
-
const tag = e.target?.tagName;
|
|
14401
|
-
if (tag !== "INPUT" && tag !== "TEXTAREA" && !e.target?.isContentEditable) {
|
|
14402
|
-
e.preventDefault();
|
|
14403
|
-
handlers.toggleKeyboardHelp?.();
|
|
14404
|
-
return;
|
|
14405
|
-
}
|
|
15077
|
+
commandHandler();
|
|
14406
15078
|
}
|
|
14407
15079
|
};
|
|
14408
15080
|
document.addEventListener("keydown", listener);
|
|
14409
15081
|
return () => document.removeEventListener("keydown", listener);
|
|
14410
15082
|
}
|
|
15083
|
+
function getCommandHandler(commandId, handlers) {
|
|
15084
|
+
const commandHandlers = {
|
|
15085
|
+
"browser-command-palette": handlers.openBrowserCommandPalette,
|
|
15086
|
+
"ask-agent": handlers.openCommandBar,
|
|
15087
|
+
"toggle-sidebar": handlers.toggleSidebar,
|
|
15088
|
+
"focus-mode": handlers.toggleFocusMode,
|
|
15089
|
+
"new-tab": handlers.newTab,
|
|
15090
|
+
"close-tab": handlers.closeTab,
|
|
15091
|
+
"reopen-tab": handlers.reopenClosedTab,
|
|
15092
|
+
"new-window": handlers.openNewWindow,
|
|
15093
|
+
"private-window": handlers.openPrivateWindow,
|
|
15094
|
+
settings: handlers.openSettings,
|
|
15095
|
+
"clear-data": handlers.clearBrowsingData,
|
|
15096
|
+
"keyboard-help": handlers.toggleKeyboardHelp,
|
|
15097
|
+
devtools: handlers.toggleDevTools,
|
|
15098
|
+
"zoom-in": handlers.zoomIn,
|
|
15099
|
+
"zoom-out": handlers.zoomOut,
|
|
15100
|
+
"zoom-reset": handlers.zoomReset,
|
|
15101
|
+
print: handlers.print,
|
|
15102
|
+
"save-pdf": handlers.printToPdf,
|
|
15103
|
+
"toggle-pip": handlers.togglePip,
|
|
15104
|
+
"capture-highlight": handlers.captureHighlight
|
|
15105
|
+
};
|
|
15106
|
+
return commandHandlers[commandId];
|
|
15107
|
+
}
|
|
14411
15108
|
var _tmpl$ = /* @__PURE__ */ template(`<div class=loading-bar>`), _tmpl$2 = /* @__PURE__ */ template(`<div class=app><div class=chrome>`);
|
|
14412
15109
|
try {
|
|
14413
15110
|
const cached = localStorage.getItem("vessel:theme");
|
|
@@ -14423,6 +15120,7 @@ const App = () => {
|
|
|
14423
15120
|
const isChromeOnlyWindow = isPrivateWindow || isSecondaryWindow;
|
|
14424
15121
|
const {
|
|
14425
15122
|
openCommandBar,
|
|
15123
|
+
openBrowserCommandPalette,
|
|
14426
15124
|
toggleSidebar,
|
|
14427
15125
|
toggleFocusMode,
|
|
14428
15126
|
openSettings,
|
|
@@ -14492,6 +15190,7 @@ const App = () => {
|
|
|
14492
15190
|
if (view !== "chrome") return;
|
|
14493
15191
|
const cleanupKeys = setupKeybindings({
|
|
14494
15192
|
openCommandBar: isChromeOnlyWindow ? void 0 : openCommandBar,
|
|
15193
|
+
openBrowserCommandPalette: isChromeOnlyWindow ? void 0 : openBrowserCommandPalette,
|
|
14495
15194
|
toggleSidebar: isChromeOnlyWindow ? void 0 : toggleSidebar,
|
|
14496
15195
|
toggleFocusMode: isChromeOnlyWindow ? void 0 : toggleFocusMode,
|
|
14497
15196
|
newTab: () => createTab(),
|
|
@@ -14592,7 +15291,12 @@ const App = () => {
|
|
|
14592
15291
|
insert(_el$, createComponent(Show, {
|
|
14593
15292
|
when: !isChromeOnlyWindow,
|
|
14594
15293
|
get children() {
|
|
14595
|
-
return [createComponent(
|
|
15294
|
+
return [createComponent(BrowserCommandPalette, {
|
|
15295
|
+
onOpenClearData: () => setClearDataOpen(true),
|
|
15296
|
+
onToggleKeyboardHelp: () => setKeyboardHelpOpen((v) => !v),
|
|
15297
|
+
onCaptureHighlight: captureHighlight,
|
|
15298
|
+
onOpenDownloads: () => setDownloadsOpen(true)
|
|
15299
|
+
}), createComponent(CommandBar, {}), createComponent(Settings, {})];
|
|
14596
15300
|
}
|
|
14597
15301
|
}), null);
|
|
14598
15302
|
insert(_el$, createComponent(DownloadsPanel, {
|