pinokiod 7.3.10 → 7.3.12
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/kernel/bin/brew.js +12 -2
- package/kernel/bin/caddy.js +24 -20
- package/kernel/bin/huggingface.js +2 -2
- package/kernel/bin/setup.js +2 -3
- package/kernel/bin/uv.js +13 -6
- package/kernel/connect/index.js +5 -1
- package/kernel/connect/providers/huggingface/index.js +213 -75
- package/kernel/environment.js +16 -1
- package/kernel/router/localhost_home_router.js +7 -0
- package/kernel/shell.js +1 -5
- package/kernel/util.js +1 -0
- package/package.json +1 -1
- package/server/index.js +75 -33
- package/server/public/common.js +45 -71
- package/server/public/install.js +20 -2
- package/server/public/layout.js +1 -1
- package/server/public/style.css +1432 -511
- package/server/public/tab-link-popover.css +162 -18
- package/server/public/tab-link-popover.js +230 -21
- package/server/public/task-launcher.css +121 -84
- package/server/public/terminal-settings.js +121 -45
- package/server/public/universal-launcher.css +42 -33
- package/server/public/urldropdown.css +284 -0
- package/server/views/app.ejs +1608 -321
- package/server/views/autolaunch.ejs +4 -5
- package/server/views/checkpoints.ejs +223 -50
- package/server/views/connect/huggingface.ejs +406 -325
- package/server/views/connect.ejs +0 -1
- package/server/views/github.ejs +277 -324
- package/server/views/index.ejs +53 -1
- package/server/views/install.ejs +119 -19
- package/server/views/logs.ejs +10 -9
- package/server/views/net.ejs +341 -64
- package/server/views/network.ejs +85 -63
- package/server/views/partials/main_sidebar.ejs +237 -12
- package/server/views/plugins.ejs +141 -3
- package/server/views/settings.ejs +103 -7
- package/server/views/setup.ejs +0 -5
- package/server/views/skills.ejs +0 -1
- package/server/views/task_list.ejs +0 -1
- package/server/views/terminal.ejs +142 -1
- package/server/views/terminals.ejs +346 -6
- package/server/views/tools.ejs +828 -1691
- package/test/caddy-install.test.js +53 -0
- package/test/connect-setup.test.js +16 -0
- package/test/github-connection.test.js +1 -1
- package/test/huggingface-bin.test.js +4 -4
- package/test/huggingface-connect.test.js +73 -0
- package/test/main-sidebar.test.js +31 -0
- package/test/shell-run-template.test.js +5 -1
- package/test/uv-bin.test.js +29 -0
|
@@ -105,15 +105,15 @@ body.dark.connect-page.task-launcher-page::before {
|
|
|
105
105
|
body.plugin-detail-page .swal2-popup.pinokio-modern-modal {
|
|
106
106
|
padding: 0 !important;
|
|
107
107
|
border: 1px solid var(--task-border) !important;
|
|
108
|
-
border-radius:
|
|
108
|
+
border-radius: 8px !important;
|
|
109
109
|
background: var(--task-panel) !important;
|
|
110
|
-
box-shadow: 0
|
|
110
|
+
box-shadow: 0 18px 50px rgba(15, 23, 42, 0.16) !important;
|
|
111
111
|
color: var(--task-text) !important;
|
|
112
112
|
overflow: hidden !important;
|
|
113
113
|
}
|
|
114
114
|
|
|
115
115
|
body.dark.plugin-detail-page .swal2-popup.pinokio-modern-modal {
|
|
116
|
-
box-shadow: 0
|
|
116
|
+
box-shadow: 0 24px 72px rgba(0, 0, 0, 0.42) !important;
|
|
117
117
|
}
|
|
118
118
|
|
|
119
119
|
body.plugin-detail-page .swal2-popup.pinokio-modern-modal .swal2-html-container.pinokio-modern-html {
|
|
@@ -127,16 +127,16 @@ body.plugin-detail-page .swal2-popup.pinokio-modern-modal .swal2-html-container.
|
|
|
127
127
|
}
|
|
128
128
|
|
|
129
129
|
body.plugin-detail-page .pinokio-modern-close.swal2-close {
|
|
130
|
-
top:
|
|
131
|
-
right:
|
|
132
|
-
width:
|
|
133
|
-
height:
|
|
130
|
+
top: 12px !important;
|
|
131
|
+
right: 12px !important;
|
|
132
|
+
width: 28px;
|
|
133
|
+
height: 28px;
|
|
134
134
|
margin: 0;
|
|
135
135
|
border: 1px solid var(--task-border);
|
|
136
|
-
border-radius:
|
|
137
|
-
background:
|
|
136
|
+
border-radius: 6px;
|
|
137
|
+
background: transparent;
|
|
138
138
|
color: var(--task-muted) !important;
|
|
139
|
-
font-size:
|
|
139
|
+
font-size: 22px;
|
|
140
140
|
line-height: 1;
|
|
141
141
|
}
|
|
142
142
|
|
|
@@ -156,23 +156,23 @@ body.plugin-detail-page .pinokio-modal-surface {
|
|
|
156
156
|
body.plugin-detail-page .pinokio-modal-header {
|
|
157
157
|
display: flex;
|
|
158
158
|
align-items: flex-start;
|
|
159
|
-
gap:
|
|
160
|
-
padding:
|
|
159
|
+
gap: 10px;
|
|
160
|
+
padding: 14px;
|
|
161
161
|
border-bottom: 1px solid var(--task-border);
|
|
162
162
|
}
|
|
163
163
|
|
|
164
164
|
body.plugin-detail-page .pinokio-modal-icon {
|
|
165
|
-
width:
|
|
166
|
-
height:
|
|
165
|
+
width: 32px;
|
|
166
|
+
height: 32px;
|
|
167
167
|
flex: 0 0 auto;
|
|
168
168
|
display: inline-flex;
|
|
169
169
|
align-items: center;
|
|
170
170
|
justify-content: center;
|
|
171
171
|
border: 1px solid var(--task-border);
|
|
172
|
-
border-radius:
|
|
172
|
+
border-radius: 7px;
|
|
173
173
|
background: color-mix(in srgb, var(--task-panel) 92%, var(--task-soft));
|
|
174
|
-
color: var(--task-
|
|
175
|
-
font-size:
|
|
174
|
+
color: var(--task-muted);
|
|
175
|
+
font-size: 14px;
|
|
176
176
|
}
|
|
177
177
|
|
|
178
178
|
body.plugin-detail-page .pinokio-modal-heading {
|
|
@@ -183,9 +183,9 @@ body.plugin-detail-page .pinokio-modal-heading {
|
|
|
183
183
|
}
|
|
184
184
|
|
|
185
185
|
body.plugin-detail-page .pinokio-modal-title {
|
|
186
|
-
font-size:
|
|
186
|
+
font-size: 16px;
|
|
187
187
|
line-height: 1.25;
|
|
188
|
-
font-weight:
|
|
188
|
+
font-weight: 600;
|
|
189
189
|
color: var(--task-text);
|
|
190
190
|
}
|
|
191
191
|
|
|
@@ -197,7 +197,7 @@ body.plugin-detail-page .pinokio-modal-subtitle {
|
|
|
197
197
|
|
|
198
198
|
body.plugin-detail-page .pinokio-modal-body,
|
|
199
199
|
body.plugin-detail-page .pinokio-modal-body--iframe {
|
|
200
|
-
padding:
|
|
200
|
+
padding: 12px 14px 14px;
|
|
201
201
|
background: transparent;
|
|
202
202
|
}
|
|
203
203
|
|
|
@@ -207,7 +207,7 @@ body.plugin-detail-page .pinokio-modal-body--iframe iframe {
|
|
|
207
207
|
height: min(64vh, 540px);
|
|
208
208
|
min-height: 360px;
|
|
209
209
|
border: 1px solid var(--task-border);
|
|
210
|
-
border-radius:
|
|
210
|
+
border-radius: 7px;
|
|
211
211
|
background: color-mix(in srgb, var(--task-panel) 90%, var(--task-soft));
|
|
212
212
|
}
|
|
213
213
|
|
|
@@ -235,28 +235,30 @@ body.plugin-detail-page .pinokio-modal-body--iframe iframe {
|
|
|
235
235
|
}
|
|
236
236
|
|
|
237
237
|
.task-library-page .task-shell-header {
|
|
238
|
-
padding:
|
|
238
|
+
padding: 12px 18px 14px;
|
|
239
239
|
}
|
|
240
240
|
|
|
241
241
|
.task-library-page .task-title {
|
|
242
|
-
font-size:
|
|
242
|
+
font-size: 22px;
|
|
243
|
+
line-height: 1.12;
|
|
244
|
+
letter-spacing: 0;
|
|
243
245
|
}
|
|
244
246
|
|
|
245
247
|
.task-library-page .task-description {
|
|
246
|
-
margin-top:
|
|
248
|
+
margin-top: 4px;
|
|
247
249
|
font-size: 12px;
|
|
248
|
-
line-height: 1.
|
|
250
|
+
line-height: 1.4;
|
|
249
251
|
}
|
|
250
252
|
|
|
251
253
|
.task-container {
|
|
252
254
|
flex: 1;
|
|
253
255
|
min-width: 0;
|
|
254
|
-
padding:
|
|
256
|
+
padding: 0;
|
|
255
257
|
box-sizing: border-box;
|
|
256
258
|
}
|
|
257
259
|
|
|
258
260
|
body.task-page .task-shell {
|
|
259
|
-
width:
|
|
261
|
+
width: 100%;
|
|
260
262
|
margin: 0;
|
|
261
263
|
background: transparent;
|
|
262
264
|
border: 0;
|
|
@@ -314,27 +316,28 @@ body.task-page .task-shell {
|
|
|
314
316
|
}
|
|
315
317
|
|
|
316
318
|
body.plugin-page .task-shell {
|
|
317
|
-
width:
|
|
319
|
+
width: 100%;
|
|
318
320
|
}
|
|
319
321
|
|
|
320
322
|
body.connect-page .task-shell {
|
|
321
|
-
width:
|
|
323
|
+
width: 100%;
|
|
322
324
|
}
|
|
323
325
|
|
|
324
326
|
.task-shell-header {
|
|
325
327
|
position: static;
|
|
326
328
|
top: auto;
|
|
327
329
|
z-index: auto;
|
|
328
|
-
padding:
|
|
330
|
+
padding: 12px 18px 14px;
|
|
329
331
|
display: grid;
|
|
330
332
|
grid-template-columns: minmax(0, 1fr) auto;
|
|
331
|
-
gap:
|
|
332
|
-
align-items:
|
|
333
|
+
gap: 16px 24px;
|
|
334
|
+
align-items: center;
|
|
333
335
|
border-bottom: 1px solid var(--task-border);
|
|
334
336
|
}
|
|
335
337
|
|
|
336
338
|
.task-shell-header .task-title {
|
|
337
339
|
display: block;
|
|
340
|
+
margin: 0;
|
|
338
341
|
padding: 0;
|
|
339
342
|
}
|
|
340
343
|
|
|
@@ -359,15 +362,15 @@ body.connect-page .task-shell {
|
|
|
359
362
|
align-items: center;
|
|
360
363
|
justify-content: flex-start;
|
|
361
364
|
gap: 12px;
|
|
362
|
-
margin-bottom:
|
|
365
|
+
margin-bottom: 4px;
|
|
363
366
|
}
|
|
364
367
|
|
|
365
368
|
.task-eyebrow {
|
|
366
369
|
margin: 0;
|
|
367
370
|
color: var(--task-accent);
|
|
368
|
-
font-size:
|
|
371
|
+
font-size: 10px;
|
|
369
372
|
font-weight: 700;
|
|
370
|
-
letter-spacing: 0.
|
|
373
|
+
letter-spacing: 0.08em;
|
|
371
374
|
text-transform: uppercase;
|
|
372
375
|
}
|
|
373
376
|
|
|
@@ -387,9 +390,10 @@ body.connect-page .task-shell {
|
|
|
387
390
|
|
|
388
391
|
.task-title {
|
|
389
392
|
margin: 0;
|
|
390
|
-
font-size:
|
|
391
|
-
line-height: 1.
|
|
392
|
-
letter-spacing:
|
|
393
|
+
font-size: 22px;
|
|
394
|
+
line-height: 1.12;
|
|
395
|
+
letter-spacing: 0;
|
|
396
|
+
font-weight: 760;
|
|
393
397
|
}
|
|
394
398
|
|
|
395
399
|
.task-detail-page .task-title {
|
|
@@ -398,10 +402,14 @@ body.connect-page .task-shell {
|
|
|
398
402
|
}
|
|
399
403
|
|
|
400
404
|
.task-description {
|
|
401
|
-
margin:
|
|
405
|
+
margin: 4px 0 0;
|
|
402
406
|
color: var(--task-muted);
|
|
403
|
-
font-size:
|
|
404
|
-
line-height: 1.
|
|
407
|
+
font-size: 12px;
|
|
408
|
+
line-height: 1.4;
|
|
409
|
+
}
|
|
410
|
+
|
|
411
|
+
body.task-page .task-shell-header .task-description {
|
|
412
|
+
max-width: none;
|
|
405
413
|
}
|
|
406
414
|
|
|
407
415
|
.task-header-badges {
|
|
@@ -488,7 +496,7 @@ body.connect-page .task-shell {
|
|
|
488
496
|
}
|
|
489
497
|
|
|
490
498
|
.task-shell-body {
|
|
491
|
-
padding:
|
|
499
|
+
padding: 28px 28px 32px;
|
|
492
500
|
display: grid;
|
|
493
501
|
gap: 0;
|
|
494
502
|
}
|
|
@@ -1628,43 +1636,45 @@ body.dark .task-link-button.danger {
|
|
|
1628
1636
|
}
|
|
1629
1637
|
|
|
1630
1638
|
.setup-shell {
|
|
1631
|
-
width:
|
|
1639
|
+
width: 100%;
|
|
1632
1640
|
}
|
|
1633
1641
|
|
|
1634
1642
|
body.setup-page .task-shell-header {
|
|
1635
|
-
padding-bottom:
|
|
1643
|
+
padding-bottom: 14px;
|
|
1636
1644
|
}
|
|
1637
1645
|
|
|
1638
1646
|
body.setup-page .task-shell-header-main {
|
|
1639
1647
|
max-width: 820px;
|
|
1640
1648
|
}
|
|
1641
1649
|
|
|
1642
|
-
body.setup-page .task-eyebrow {
|
|
1643
|
-
color: var(--task-muted);
|
|
1644
|
-
letter-spacing: 0;
|
|
1645
|
-
}
|
|
1646
|
-
|
|
1647
1650
|
body.setup-page .task-title {
|
|
1648
|
-
font-size:
|
|
1649
|
-
line-height: 1.
|
|
1651
|
+
font-size: 22px;
|
|
1652
|
+
line-height: 1.12;
|
|
1650
1653
|
letter-spacing: 0;
|
|
1654
|
+
font-weight: 760;
|
|
1651
1655
|
}
|
|
1652
1656
|
|
|
1653
1657
|
body.setup-page .task-description {
|
|
1654
1658
|
max-width: 76ch;
|
|
1655
|
-
font-size:
|
|
1656
|
-
line-height: 1.
|
|
1659
|
+
font-size: 12px;
|
|
1660
|
+
line-height: 1.4;
|
|
1657
1661
|
}
|
|
1658
1662
|
|
|
1659
1663
|
body.setup-page .task-badge {
|
|
1660
1664
|
min-height: 22px;
|
|
1661
1665
|
border-radius: 7px;
|
|
1666
|
+
background: transparent;
|
|
1662
1667
|
}
|
|
1663
1668
|
|
|
1664
1669
|
body.setup-page .task-badge-warning {
|
|
1665
|
-
border-color:
|
|
1666
|
-
background:
|
|
1667
|
-
color:
|
|
1670
|
+
border-color: rgba(180, 83, 9, 0.26);
|
|
1671
|
+
background: transparent;
|
|
1672
|
+
color: #92400e;
|
|
1673
|
+
}
|
|
1674
|
+
|
|
1675
|
+
body.dark.setup-page .task-badge-warning {
|
|
1676
|
+
border-color: rgba(251, 191, 36, 0.28);
|
|
1677
|
+
color: #f5d69a;
|
|
1668
1678
|
}
|
|
1669
1679
|
|
|
1670
1680
|
.setup-layout {
|
|
@@ -1682,7 +1692,9 @@ body.setup-page .task-badge-warning {
|
|
|
1682
1692
|
|
|
1683
1693
|
.setup-requirement-list {
|
|
1684
1694
|
display: grid;
|
|
1685
|
-
gap:
|
|
1695
|
+
gap: 0;
|
|
1696
|
+
border-top: 1px solid var(--task-border);
|
|
1697
|
+
border-bottom: 1px solid var(--task-border);
|
|
1686
1698
|
}
|
|
1687
1699
|
|
|
1688
1700
|
.setup-requirement-row {
|
|
@@ -1690,15 +1702,18 @@ body.setup-page .task-badge-warning {
|
|
|
1690
1702
|
grid-template-columns: minmax(0, 1fr) auto;
|
|
1691
1703
|
gap: 14px;
|
|
1692
1704
|
align-items: center;
|
|
1693
|
-
padding:
|
|
1694
|
-
border:
|
|
1695
|
-
border-
|
|
1696
|
-
background:
|
|
1705
|
+
padding: 12px 0;
|
|
1706
|
+
border: 0;
|
|
1707
|
+
border-top: 1px solid var(--task-border);
|
|
1708
|
+
background: transparent;
|
|
1697
1709
|
}
|
|
1698
1710
|
|
|
1699
1711
|
.setup-requirement-row.needs-update {
|
|
1700
|
-
|
|
1701
|
-
|
|
1712
|
+
background: transparent;
|
|
1713
|
+
}
|
|
1714
|
+
|
|
1715
|
+
.setup-requirement-row:first-child {
|
|
1716
|
+
border-top: 0;
|
|
1702
1717
|
}
|
|
1703
1718
|
|
|
1704
1719
|
.setup-requirement-copy {
|
|
@@ -1726,9 +1741,9 @@ body.setup-page .task-badge-warning {
|
|
|
1726
1741
|
justify-content: center;
|
|
1727
1742
|
gap: 6px;
|
|
1728
1743
|
min-height: 26px;
|
|
1729
|
-
padding: 0
|
|
1730
|
-
border:
|
|
1731
|
-
border-radius:
|
|
1744
|
+
padding: 0;
|
|
1745
|
+
border: 0;
|
|
1746
|
+
border-radius: 0;
|
|
1732
1747
|
background: transparent;
|
|
1733
1748
|
color: var(--task-muted);
|
|
1734
1749
|
font-size: 10px;
|
|
@@ -1742,14 +1757,15 @@ body.setup-page .task-badge-warning {
|
|
|
1742
1757
|
}
|
|
1743
1758
|
|
|
1744
1759
|
.setup-requirement-row.is-installed .setup-requirement-state {
|
|
1745
|
-
|
|
1746
|
-
color: var(--task-text);
|
|
1760
|
+
color: var(--task-muted);
|
|
1747
1761
|
}
|
|
1748
1762
|
|
|
1749
1763
|
.setup-requirement-row.needs-update .setup-requirement-state {
|
|
1750
|
-
|
|
1751
|
-
|
|
1752
|
-
|
|
1764
|
+
color: #92400e;
|
|
1765
|
+
}
|
|
1766
|
+
|
|
1767
|
+
body.dark .setup-requirement-row.needs-update .setup-requirement-state {
|
|
1768
|
+
color: #f5d69a;
|
|
1753
1769
|
}
|
|
1754
1770
|
|
|
1755
1771
|
.setup-actions-column {
|
|
@@ -1767,12 +1783,31 @@ body.setup-page .task-badge-warning {
|
|
|
1767
1783
|
}
|
|
1768
1784
|
|
|
1769
1785
|
.setup-summary-grid {
|
|
1770
|
-
|
|
1786
|
+
display: grid;
|
|
1787
|
+
grid-template-columns: 1fr;
|
|
1788
|
+
gap: 7px;
|
|
1789
|
+
margin-top: 6px;
|
|
1771
1790
|
}
|
|
1772
1791
|
|
|
1773
1792
|
.setup-summary-grid .task-meta-chip {
|
|
1774
|
-
|
|
1775
|
-
|
|
1793
|
+
display: flex;
|
|
1794
|
+
align-items: baseline;
|
|
1795
|
+
justify-content: space-between;
|
|
1796
|
+
gap: 14px;
|
|
1797
|
+
padding: 0;
|
|
1798
|
+
border: 0;
|
|
1799
|
+
border-radius: 0;
|
|
1800
|
+
background: transparent;
|
|
1801
|
+
}
|
|
1802
|
+
|
|
1803
|
+
.setup-summary-grid .task-meta-chip-label {
|
|
1804
|
+
margin-bottom: 0;
|
|
1805
|
+
letter-spacing: 0.04em;
|
|
1806
|
+
}
|
|
1807
|
+
|
|
1808
|
+
.setup-summary-grid .task-meta-chip-value {
|
|
1809
|
+
font-size: 12px;
|
|
1810
|
+
color: var(--task-text);
|
|
1776
1811
|
}
|
|
1777
1812
|
|
|
1778
1813
|
.setup-primary-button {
|
|
@@ -1835,10 +1870,12 @@ body.setup-page .task-badge-warning {
|
|
|
1835
1870
|
display: flex;
|
|
1836
1871
|
align-items: center;
|
|
1837
1872
|
gap: 14px;
|
|
1838
|
-
padding: 16px;
|
|
1839
|
-
border:
|
|
1840
|
-
border-
|
|
1841
|
-
|
|
1873
|
+
padding: 16px 0;
|
|
1874
|
+
border: 0;
|
|
1875
|
+
border-top: 1px solid var(--task-border);
|
|
1876
|
+
border-bottom: 1px solid var(--task-border);
|
|
1877
|
+
border-radius: 0;
|
|
1878
|
+
background: transparent;
|
|
1842
1879
|
box-sizing: border-box;
|
|
1843
1880
|
}
|
|
1844
1881
|
|
|
@@ -1851,8 +1888,8 @@ body.setup-page .task-badge-warning {
|
|
|
1851
1888
|
justify-content: center;
|
|
1852
1889
|
border: 1px solid var(--task-border);
|
|
1853
1890
|
border-radius: 8px;
|
|
1854
|
-
background:
|
|
1855
|
-
color: var(--task-
|
|
1891
|
+
background: transparent;
|
|
1892
|
+
color: var(--task-muted);
|
|
1856
1893
|
font-size: 14px;
|
|
1857
1894
|
}
|
|
1858
1895
|
|
|
@@ -2318,7 +2355,7 @@ body.plugin-page .plugin-card {
|
|
|
2318
2355
|
padding: 15px;
|
|
2319
2356
|
border-radius: 16px;
|
|
2320
2357
|
border: 1px solid var(--task-border);
|
|
2321
|
-
background:
|
|
2358
|
+
background: transparent;
|
|
2322
2359
|
color: var(--task-text);
|
|
2323
2360
|
text-decoration: none;
|
|
2324
2361
|
transition: background 140ms ease, border-color 140ms ease, transform 140ms ease;
|
|
@@ -2326,7 +2363,7 @@ body.plugin-page .plugin-card {
|
|
|
2326
2363
|
|
|
2327
2364
|
body.plugin-page .plugin-card:hover,
|
|
2328
2365
|
body.plugin-page .plugin-card:focus-within {
|
|
2329
|
-
background: color-mix(in srgb, var(--task-
|
|
2366
|
+
background: color-mix(in srgb, var(--task-text) 5%, transparent);
|
|
2330
2367
|
border-color: var(--task-border-strong);
|
|
2331
2368
|
transform: translateY(-1px);
|
|
2332
2369
|
}
|
|
@@ -2338,7 +2375,7 @@ body.plugin-page .plugin-card .plugin-icon {
|
|
|
2338
2375
|
border-radius: 12px;
|
|
2339
2376
|
object-fit: cover;
|
|
2340
2377
|
flex-shrink: 0;
|
|
2341
|
-
background: color-mix(in srgb, var(--task-
|
|
2378
|
+
background: color-mix(in srgb, var(--task-text) 5%, transparent);
|
|
2342
2379
|
border: 1px solid var(--task-border);
|
|
2343
2380
|
}
|
|
2344
2381
|
|
|
@@ -2415,7 +2452,7 @@ body.plugin-page .plugin-empty {
|
|
|
2415
2452
|
padding: 22px;
|
|
2416
2453
|
border-radius: 16px;
|
|
2417
2454
|
border: 1px dashed var(--task-border-strong);
|
|
2418
|
-
background:
|
|
2455
|
+
background: transparent;
|
|
2419
2456
|
}
|
|
2420
2457
|
|
|
2421
2458
|
body.plugin-page .plugin-install-trigger {
|
|
@@ -132,26 +132,6 @@
|
|
|
132
132
|
}
|
|
133
133
|
|
|
134
134
|
shouldPreferModalInput() {
|
|
135
|
-
if (typeof navigator !== 'undefined') {
|
|
136
|
-
try {
|
|
137
|
-
if (navigator.userAgentData && typeof navigator.userAgentData.mobile === 'boolean') {
|
|
138
|
-
if (navigator.userAgentData.mobile) {
|
|
139
|
-
return true;
|
|
140
|
-
}
|
|
141
|
-
}
|
|
142
|
-
} catch (_) {}
|
|
143
|
-
const ua = navigator.userAgent || '';
|
|
144
|
-
if (/Mobi|Android|iPhone|iPad|Tablet/i.test(ua)) {
|
|
145
|
-
return true;
|
|
146
|
-
}
|
|
147
|
-
const platform = navigator.platform || '';
|
|
148
|
-
const maxTouchPoints = typeof navigator.maxTouchPoints === 'number'
|
|
149
|
-
? navigator.maxTouchPoints
|
|
150
|
-
: 0;
|
|
151
|
-
if (/Mac/i.test(platform) && maxTouchPoints > 1) {
|
|
152
|
-
return true;
|
|
153
|
-
}
|
|
154
|
-
}
|
|
155
135
|
return false;
|
|
156
136
|
}
|
|
157
137
|
|
|
@@ -651,41 +631,134 @@
|
|
|
651
631
|
return;
|
|
652
632
|
}
|
|
653
633
|
const tracker = {
|
|
654
|
-
|
|
655
|
-
|
|
656
|
-
|
|
657
|
-
|
|
658
|
-
|
|
634
|
+
active: false,
|
|
635
|
+
startTime: 0,
|
|
636
|
+
startX: 0,
|
|
637
|
+
startY: 0,
|
|
638
|
+
startScroll: null,
|
|
639
|
+
moved: false,
|
|
640
|
+
handlers: []
|
|
659
641
|
};
|
|
660
|
-
const
|
|
642
|
+
const getScrollSnapshot = () => {
|
|
643
|
+
const viewport = node.querySelector('.xterm-viewport');
|
|
644
|
+
const doc = typeof document !== 'undefined' ? document.documentElement : null;
|
|
645
|
+
const body = typeof document !== 'undefined' ? document.body : null;
|
|
646
|
+
return {
|
|
647
|
+
viewportTop: viewport ? viewport.scrollTop : 0,
|
|
648
|
+
viewportLeft: viewport ? viewport.scrollLeft : 0,
|
|
649
|
+
pageTop: typeof window !== 'undefined' ? (window.pageYOffset || doc && doc.scrollTop || body && body.scrollTop || 0) : 0,
|
|
650
|
+
pageLeft: typeof window !== 'undefined' ? (window.pageXOffset || doc && doc.scrollLeft || body && body.scrollLeft || 0) : 0
|
|
651
|
+
};
|
|
652
|
+
};
|
|
653
|
+
const didScrollChange = (start, end) => {
|
|
654
|
+
if (!start || !end) {
|
|
655
|
+
return false;
|
|
656
|
+
}
|
|
657
|
+
return Math.abs(end.viewportTop - start.viewportTop) > 1
|
|
658
|
+
|| Math.abs(end.viewportLeft - start.viewportLeft) > 1
|
|
659
|
+
|| Math.abs(end.pageTop - start.pageTop) > 1
|
|
660
|
+
|| Math.abs(end.pageLeft - start.pageLeft) > 1;
|
|
661
|
+
};
|
|
662
|
+
const resetTracker = () => {
|
|
663
|
+
tracker.active = false;
|
|
664
|
+
tracker.startScroll = null;
|
|
665
|
+
};
|
|
666
|
+
const getTouchPoint = (event, phase) => {
|
|
661
667
|
if (!event) {
|
|
662
|
-
return;
|
|
668
|
+
return null;
|
|
669
|
+
}
|
|
670
|
+
if (event.touches || event.changedTouches) {
|
|
671
|
+
const list = phase === 'end' ? event.changedTouches : event.touches;
|
|
672
|
+
const touch = list && list[0];
|
|
673
|
+
return touch && typeof touch.clientX === 'number' && typeof touch.clientY === 'number'
|
|
674
|
+
? { x: touch.clientX, y: touch.clientY }
|
|
675
|
+
: null;
|
|
676
|
+
}
|
|
677
|
+
return typeof event.clientX === 'number' && typeof event.clientY === 'number'
|
|
678
|
+
? { x: event.clientX, y: event.clientY }
|
|
679
|
+
: null;
|
|
680
|
+
};
|
|
681
|
+
const isInteractiveTarget = (target) => {
|
|
682
|
+
return Boolean(target && target.closest && target.closest('a, button, input, textarea, select, label, [role="button"], [contenteditable="true"], .terminal-keyboard-modal, .terminal-keyboard-backdrop'));
|
|
683
|
+
};
|
|
684
|
+
const isTouchEvent = (event) => {
|
|
685
|
+
if (!event) {
|
|
686
|
+
return false;
|
|
663
687
|
}
|
|
664
|
-
if (
|
|
688
|
+
if (event.touches || event.changedTouches) {
|
|
689
|
+
const list = event.touches || event.changedTouches;
|
|
690
|
+
if (list && list.length > 1) {
|
|
691
|
+
return false;
|
|
692
|
+
}
|
|
693
|
+
} else if (this.supportsPointer) {
|
|
665
694
|
const pointerType = event.pointerType;
|
|
666
695
|
if (pointerType && pointerType !== 'touch' && pointerType !== 'pen') {
|
|
667
|
-
return;
|
|
696
|
+
return false;
|
|
668
697
|
}
|
|
669
|
-
}
|
|
698
|
+
}
|
|
699
|
+
return true;
|
|
700
|
+
};
|
|
701
|
+
const handleStart = (event) => {
|
|
702
|
+
if (!isTouchEvent(event) || this.modalOpen || isInteractiveTarget(event.target)) {
|
|
703
|
+
resetTracker();
|
|
704
|
+
return;
|
|
705
|
+
}
|
|
706
|
+
const point = getTouchPoint(event, 'start');
|
|
707
|
+
if (!point) {
|
|
708
|
+
resetTracker();
|
|
709
|
+
return;
|
|
710
|
+
}
|
|
711
|
+
tracker.active = true;
|
|
712
|
+
tracker.moved = false;
|
|
713
|
+
tracker.startTime = Date.now();
|
|
714
|
+
tracker.startX = point.x;
|
|
715
|
+
tracker.startY = point.y;
|
|
716
|
+
tracker.startScroll = getScrollSnapshot();
|
|
717
|
+
};
|
|
718
|
+
const handleMove = (event) => {
|
|
719
|
+
if (!tracker.active) {
|
|
670
720
|
return;
|
|
671
721
|
}
|
|
672
|
-
const
|
|
673
|
-
|
|
674
|
-
|
|
675
|
-
|
|
676
|
-
const
|
|
677
|
-
|
|
678
|
-
|
|
722
|
+
const point = getTouchPoint(event, 'move');
|
|
723
|
+
if (!point) {
|
|
724
|
+
return;
|
|
725
|
+
}
|
|
726
|
+
const distance = Math.hypot(point.x - tracker.startX, point.y - tracker.startY);
|
|
727
|
+
if (distance > 12) {
|
|
728
|
+
tracker.moved = true;
|
|
729
|
+
}
|
|
730
|
+
};
|
|
731
|
+
const handleEnd = (event) => {
|
|
732
|
+
if (!tracker.active) {
|
|
733
|
+
return;
|
|
734
|
+
}
|
|
735
|
+
const point = getTouchPoint(event, 'end');
|
|
736
|
+
const duration = Date.now() - tracker.startTime;
|
|
737
|
+
const distance = point ? Math.hypot(point.x - tracker.startX, point.y - tracker.startY) : Infinity;
|
|
738
|
+
const scrolled = didScrollChange(tracker.startScroll, getScrollSnapshot());
|
|
739
|
+
resetTracker();
|
|
740
|
+
if (!tracker.moved && !scrolled && duration < 700 && distance <= 12 && !isInteractiveTarget(event.target)) {
|
|
679
741
|
event.preventDefault();
|
|
680
742
|
event.stopPropagation();
|
|
681
743
|
this.openModalFromGesture();
|
|
682
744
|
}
|
|
683
|
-
tracker.lastTime = now;
|
|
684
|
-
tracker.lastX = pointX;
|
|
685
|
-
tracker.lastY = pointY;
|
|
686
745
|
};
|
|
687
|
-
|
|
688
|
-
|
|
746
|
+
const addTrackedListener = (eventName, handler, options) => {
|
|
747
|
+
node.addEventListener(eventName, handler, options);
|
|
748
|
+
tracker.handlers.push({ eventName, handler, options });
|
|
749
|
+
};
|
|
750
|
+
if (this.supportsPointer) {
|
|
751
|
+
addTrackedListener('pointerdown', handleStart, { passive: true });
|
|
752
|
+
addTrackedListener('pointermove', handleMove, { passive: true });
|
|
753
|
+
addTrackedListener('pointerup', handleEnd, { passive: false });
|
|
754
|
+
addTrackedListener('pointercancel', resetTracker, { passive: true });
|
|
755
|
+
}
|
|
756
|
+
if (typeof window !== 'undefined' && 'TouchEvent' in window) {
|
|
757
|
+
addTrackedListener('touchstart', handleStart, { passive: true });
|
|
758
|
+
addTrackedListener('touchmove', handleMove, { passive: true });
|
|
759
|
+
addTrackedListener('touchend', handleEnd, { passive: false });
|
|
760
|
+
addTrackedListener('touchcancel', resetTracker, { passive: true });
|
|
761
|
+
}
|
|
689
762
|
tracker.node = node;
|
|
690
763
|
this.tapTrackers.set(term, tracker);
|
|
691
764
|
}
|
|
@@ -706,9 +779,10 @@
|
|
|
706
779
|
if (!tracker) {
|
|
707
780
|
return;
|
|
708
781
|
}
|
|
709
|
-
if (tracker.node && tracker.
|
|
710
|
-
|
|
711
|
-
|
|
782
|
+
if (tracker.node && Array.isArray(tracker.handlers)) {
|
|
783
|
+
tracker.handlers.forEach(({ eventName, handler, options }) => {
|
|
784
|
+
tracker.node.removeEventListener(eventName, handler, options);
|
|
785
|
+
});
|
|
712
786
|
}
|
|
713
787
|
this.tapTrackers.delete(term);
|
|
714
788
|
}
|
|
@@ -1190,6 +1264,8 @@
|
|
|
1190
1264
|
const nextTheme = Object.assign({}, theme);
|
|
1191
1265
|
const applied = this.applyOption(term, 'theme', nextTheme);
|
|
1192
1266
|
|
|
1267
|
+
console.log("nextTheme", nextTheme)
|
|
1268
|
+
|
|
1193
1269
|
const element = term.element;
|
|
1194
1270
|
if (element && element.style) {
|
|
1195
1271
|
if (nextTheme.background) {
|