clay-server 2.7.2 → 2.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bin/cli.js +2 -1
- package/lib/config.js +7 -4
- package/lib/project.js +343 -15
- package/lib/public/app.js +1043 -135
- package/lib/public/apple-touch-icon-dark.png +0 -0
- package/lib/public/apple-touch-icon.png +0 -0
- package/lib/public/clay-logo.png +0 -0
- package/lib/public/css/base.css +10 -0
- package/lib/public/css/filebrowser.css +1 -0
- package/lib/public/css/home-hub.css +455 -0
- package/lib/public/css/icon-strip.css +6 -5
- package/lib/public/css/loop.css +141 -23
- package/lib/public/css/messages.css +2 -0
- package/lib/public/css/mobile-nav.css +38 -12
- package/lib/public/css/overlays.css +205 -169
- package/lib/public/css/playbook.css +264 -0
- package/lib/public/css/profile.css +268 -0
- package/lib/public/css/scheduler-modal.css +1429 -0
- package/lib/public/css/scheduler.css +1305 -0
- package/lib/public/css/sidebar.css +305 -11
- package/lib/public/css/sticky-notes.css +23 -19
- package/lib/public/css/stt.css +155 -0
- package/lib/public/css/title-bar.css +14 -6
- package/lib/public/favicon-banded-32.png +0 -0
- package/lib/public/favicon-banded.png +0 -0
- package/lib/public/icon-192-dark.png +0 -0
- package/lib/public/icon-192.png +0 -0
- package/lib/public/icon-512-dark.png +0 -0
- package/lib/public/icon-512.png +0 -0
- package/lib/public/icon-banded-76.png +0 -0
- package/lib/public/icon-banded-96.png +0 -0
- package/lib/public/index.html +335 -42
- package/lib/public/modules/ascii-logo.js +389 -0
- package/lib/public/modules/filebrowser.js +2 -1
- package/lib/public/modules/markdown.js +118 -0
- package/lib/public/modules/notifications.js +50 -63
- package/lib/public/modules/playbook.js +578 -0
- package/lib/public/modules/profile.js +357 -0
- package/lib/public/modules/project-settings.js +4 -9
- package/lib/public/modules/scheduler.js +2826 -0
- package/lib/public/modules/server-settings.js +1 -1
- package/lib/public/modules/sidebar.js +378 -31
- package/lib/public/modules/sticky-notes.js +2 -0
- package/lib/public/modules/stt.js +272 -0
- package/lib/public/modules/terminal.js +32 -0
- package/lib/public/modules/theme.js +3 -10
- package/lib/public/modules/tools.js +2 -1
- package/lib/public/style.css +6 -0
- package/lib/public/sw.js +82 -3
- package/lib/public/wordmark-banded-20.png +0 -0
- package/lib/public/wordmark-banded-32.png +0 -0
- package/lib/public/wordmark-banded-64.png +0 -0
- package/lib/public/wordmark-banded-80.png +0 -0
- package/lib/scheduler.js +402 -0
- package/lib/sdk-bridge.js +3 -2
- package/lib/server.js +124 -3
- package/lib/sessions.js +35 -2
- package/package.json +1 -1
|
@@ -3,7 +3,7 @@ import { iconHtml, refreshIcons } from './icons.js';
|
|
|
3
3
|
|
|
4
4
|
var ctx;
|
|
5
5
|
var basePath = "/";
|
|
6
|
-
var
|
|
6
|
+
var onboardingPill, onboardingText, onboardingClose, onboardingDismissed;
|
|
7
7
|
var notifAlertEnabled, notifSoundEnabled, notifPermission;
|
|
8
8
|
var audioCtx = null;
|
|
9
9
|
|
|
@@ -13,12 +13,12 @@ export function getNotifPermission() { return notifPermission; }
|
|
|
13
13
|
|
|
14
14
|
export function showOnboarding(html) {
|
|
15
15
|
onboardingText.innerHTML = html;
|
|
16
|
-
|
|
16
|
+
onboardingPill.classList.remove("hidden");
|
|
17
17
|
refreshIcons();
|
|
18
18
|
}
|
|
19
19
|
|
|
20
20
|
export function hideOnboarding() {
|
|
21
|
-
|
|
21
|
+
onboardingPill.classList.add("hidden");
|
|
22
22
|
}
|
|
23
23
|
|
|
24
24
|
export function playDoneSound() {
|
|
@@ -80,69 +80,57 @@ export function initNotifications(_ctx) {
|
|
|
80
80
|
window.visualViewport.addEventListener("scroll", onViewportChange);
|
|
81
81
|
}
|
|
82
82
|
|
|
83
|
-
// --- Update
|
|
83
|
+
// --- Update pill badge ---
|
|
84
84
|
(function () {
|
|
85
|
-
var
|
|
86
|
-
var
|
|
87
|
-
var
|
|
85
|
+
var pillWrap = $("update-pill-wrap");
|
|
86
|
+
var pillBtn = $("update-pill");
|
|
87
|
+
var popover = $("update-popover");
|
|
88
88
|
var updateNowBtn = $("update-now");
|
|
89
|
-
if (!
|
|
90
|
-
|
|
91
|
-
// Build popover (manual update instructions)
|
|
92
|
-
var popover = document.createElement("div");
|
|
93
|
-
popover.id = "update-popover";
|
|
94
|
-
popover.innerHTML =
|
|
95
|
-
'<div class="popover-label">Run in your terminal:</div>' +
|
|
96
|
-
'<div class="popover-cmd">' +
|
|
97
|
-
'<code>npx clay-server@latest</code>' +
|
|
98
|
-
'<button class="popover-copy" title="Copy">' + iconHtml("copy") + '</button>' +
|
|
99
|
-
'</div>';
|
|
100
|
-
banner.appendChild(popover);
|
|
101
|
-
refreshIcons();
|
|
89
|
+
if (!pillWrap) return;
|
|
102
90
|
|
|
103
91
|
var copyBtn = popover.querySelector(".popover-copy");
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
copyBtn.classList.remove("copied");
|
|
111
|
-
copyBtn.innerHTML = iconHtml("copy");
|
|
92
|
+
if (copyBtn) {
|
|
93
|
+
copyBtn.addEventListener("click", function (e) {
|
|
94
|
+
e.stopPropagation();
|
|
95
|
+
copyToClipboard("npx clay-server@latest").then(function () {
|
|
96
|
+
copyBtn.classList.add("copied");
|
|
97
|
+
copyBtn.innerHTML = iconHtml("check");
|
|
112
98
|
refreshIcons();
|
|
113
|
-
|
|
99
|
+
setTimeout(function () {
|
|
100
|
+
copyBtn.classList.remove("copied");
|
|
101
|
+
copyBtn.innerHTML = iconHtml("copy");
|
|
102
|
+
refreshIcons();
|
|
103
|
+
}, 1500);
|
|
104
|
+
});
|
|
114
105
|
});
|
|
115
|
-
}
|
|
106
|
+
}
|
|
116
107
|
|
|
117
108
|
// "Update now" button — trigger server-side update + restart
|
|
118
109
|
if (updateNowBtn) {
|
|
119
|
-
updateNowBtn.addEventListener("click", function () {
|
|
110
|
+
updateNowBtn.addEventListener("click", function (e) {
|
|
111
|
+
e.stopPropagation();
|
|
120
112
|
if (ctx.ws && ctx.connected) {
|
|
121
113
|
ctx.ws.send(JSON.stringify({ type: "update_now" }));
|
|
122
|
-
|
|
114
|
+
var textNode = updateNowBtn.lastChild;
|
|
115
|
+
if (textNode) textNode.textContent = " Updating...";
|
|
123
116
|
updateNowBtn.disabled = true;
|
|
124
117
|
}
|
|
125
118
|
});
|
|
126
119
|
}
|
|
127
120
|
|
|
128
|
-
//
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
121
|
+
// Toggle popover on pill click
|
|
122
|
+
if (pillBtn) {
|
|
123
|
+
pillBtn.addEventListener("click", function (e) {
|
|
124
|
+
e.stopPropagation();
|
|
125
|
+
popover.classList.toggle("visible");
|
|
126
|
+
});
|
|
127
|
+
}
|
|
133
128
|
|
|
134
129
|
document.addEventListener("click", function (e) {
|
|
135
|
-
if (!popover.contains(e.target) && e.target !==
|
|
130
|
+
if (!popover.contains(e.target) && e.target !== pillBtn && !pillBtn.contains(e.target)) {
|
|
136
131
|
popover.classList.remove("visible");
|
|
137
132
|
}
|
|
138
133
|
});
|
|
139
|
-
|
|
140
|
-
if (closeBtn) {
|
|
141
|
-
closeBtn.addEventListener("click", function () {
|
|
142
|
-
banner.classList.add("hidden");
|
|
143
|
-
popover.classList.remove("visible");
|
|
144
|
-
});
|
|
145
|
-
}
|
|
146
134
|
})();
|
|
147
135
|
|
|
148
136
|
// --- Settings: Check for updates ---
|
|
@@ -199,10 +187,10 @@ export function initNotifications(_ctx) {
|
|
|
199
187
|
}
|
|
200
188
|
})();
|
|
201
189
|
|
|
202
|
-
// --- Onboarding
|
|
203
|
-
|
|
204
|
-
onboardingText = $("onboarding-
|
|
205
|
-
onboardingClose = $("onboarding-
|
|
190
|
+
// --- Onboarding pill badge (HTTPS / Push) ---
|
|
191
|
+
onboardingPill = $("onboarding-pill");
|
|
192
|
+
onboardingText = $("onboarding-pill-text");
|
|
193
|
+
onboardingClose = $("onboarding-pill-close");
|
|
206
194
|
onboardingDismissed = localStorage.getItem("onboarding-dismissed");
|
|
207
195
|
|
|
208
196
|
if (onboardingClose) {
|
|
@@ -218,7 +206,7 @@ export function initNotifications(_ctx) {
|
|
|
218
206
|
if (!onboardingDismissed) {
|
|
219
207
|
showOnboarding(
|
|
220
208
|
iconHtml("bell-ring") +
|
|
221
|
-
'
|
|
209
|
+
' <a href="/setup">Set up HTTPS</a>'
|
|
222
210
|
);
|
|
223
211
|
}
|
|
224
212
|
}
|
|
@@ -563,8 +551,7 @@ export function initNotifications(_ctx) {
|
|
|
563
551
|
if (!onboardingDismissed) {
|
|
564
552
|
showOnboarding(
|
|
565
553
|
iconHtml("bell-ring") +
|
|
566
|
-
'
|
|
567
|
-
'<button class="onboarding-cta" id="onboarding-enable-push">Enable push notifications</button>'
|
|
554
|
+
' <button class="onboarding-cta" id="onboarding-enable-push">Enable push</button>'
|
|
568
555
|
);
|
|
569
556
|
var enableBtn = $("onboarding-enable-push");
|
|
570
557
|
if (enableBtn) {
|
|
@@ -596,13 +583,13 @@ export function initNotifications(_ctx) {
|
|
|
596
583
|
var open = debugMenu.classList.toggle("hidden");
|
|
597
584
|
debugBtn.classList.toggle("active", !open);
|
|
598
585
|
|
|
599
|
-
// Sync toggle states with current
|
|
600
|
-
var
|
|
601
|
-
if (debugToggleUpdate &&
|
|
602
|
-
debugToggleUpdate.checked = !
|
|
586
|
+
// Sync toggle states with current pill visibility
|
|
587
|
+
var updatePillWrap = $("update-pill-wrap");
|
|
588
|
+
if (debugToggleUpdate && updatePillWrap) {
|
|
589
|
+
debugToggleUpdate.checked = !updatePillWrap.classList.contains("hidden");
|
|
603
590
|
}
|
|
604
|
-
if (debugToggleOnboarding &&
|
|
605
|
-
debugToggleOnboarding.checked = !
|
|
591
|
+
if (debugToggleOnboarding && onboardingPill) {
|
|
592
|
+
debugToggleOnboarding.checked = !onboardingPill.classList.contains("hidden");
|
|
606
593
|
}
|
|
607
594
|
});
|
|
608
595
|
|
|
@@ -615,15 +602,15 @@ export function initNotifications(_ctx) {
|
|
|
615
602
|
|
|
616
603
|
if (debugToggleUpdate) {
|
|
617
604
|
debugToggleUpdate.addEventListener("change", function () {
|
|
618
|
-
var
|
|
619
|
-
if (!
|
|
605
|
+
var pillWrap = $("update-pill-wrap");
|
|
606
|
+
if (!pillWrap) return;
|
|
620
607
|
if (debugToggleUpdate.checked) {
|
|
621
608
|
// Trigger real update check from server (debug mode uses v0.0.9)
|
|
622
609
|
if (ctx.ws && ctx.connected) {
|
|
623
610
|
ctx.ws.send(JSON.stringify({ type: "check_update" }));
|
|
624
611
|
}
|
|
625
612
|
} else {
|
|
626
|
-
|
|
613
|
+
pillWrap.classList.add("hidden");
|
|
627
614
|
}
|
|
628
615
|
refreshIcons();
|
|
629
616
|
});
|
|
@@ -635,10 +622,10 @@ export function initNotifications(_ctx) {
|
|
|
635
622
|
if (!onboardingText.innerHTML.trim()) {
|
|
636
623
|
showOnboarding(
|
|
637
624
|
iconHtml("bell-ring") +
|
|
638
|
-
'
|
|
625
|
+
' <a href="/setup">Set up HTTPS</a>'
|
|
639
626
|
);
|
|
640
627
|
} else {
|
|
641
|
-
|
|
628
|
+
onboardingPill.classList.remove("hidden");
|
|
642
629
|
}
|
|
643
630
|
} else {
|
|
644
631
|
hideOnboarding();
|