@a83/orbiter-admin 0.3.14 → 0.3.15

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/package.json CHANGED
@@ -1,12 +1,15 @@
1
1
  {
2
2
  "name": "@a83/orbiter-admin",
3
- "version": "0.3.14",
3
+ "version": "0.3.15",
4
4
  "description": "Standalone admin server for Orbiter CMS",
5
5
  "type": "module",
6
6
  "main": "./src/server.js",
7
+ "bin": {
8
+ "orbiter-admin": "./src/cli.js"
9
+ },
7
10
  "scripts": {
8
- "start": "node src/server.js",
9
- "dev": "node --watch src/server.js"
11
+ "start": "node src/cli.js",
12
+ "dev": "node --watch src/cli.js"
10
13
  },
11
14
  "engines": {
12
15
  "node": ">=20.0.0"
package/public/build.html CHANGED
@@ -61,7 +61,7 @@
61
61
  </div>
62
62
  </nav>
63
63
  <main class="main">
64
- <div class="page-header">
64
+ <div class="page-header glass-card">
65
65
  <h1 class="page-title">Build</h1>
66
66
  <p class="page-sub" id="last-triggered"></p>
67
67
  </div>
@@ -41,7 +41,7 @@
41
41
  </div>
42
42
  </nav>
43
43
  <main class="main">
44
- <div class="page-header" style="display:flex;align-items:flex-start;justify-content:space-between">
44
+ <div class="page-header glass-card" style="display:flex;align-items:flex-start;justify-content:space-between">
45
45
  <div>
46
46
  <h1 class="page-title">Collections</h1>
47
47
  <p class="page-sub">All content types in this pod</p>
@@ -205,7 +205,7 @@
205
205
 
206
206
  <!-- Workspace: Notes + To-do -->
207
207
  <div class="workspace glass-card">
208
- <div class="ws-panel">
208
+ <div class="ws-panel" id="notes">
209
209
  <div class="ws-head">
210
210
  <div class="section-title">Notes</div>
211
211
  <div style="display:flex;align-items:center;gap:10px">
@@ -215,7 +215,7 @@
215
215
  </div>
216
216
  <textarea class="notes-area" id="notes-area" placeholder="Jot something down…"></textarea>
217
217
  </div>
218
- <div class="ws-panel">
218
+ <div class="ws-panel" id="todos">
219
219
  <div class="ws-head">
220
220
  <div class="section-title">To-Do</div>
221
221
  <div style="display:flex;align-items:center;gap:10px">
@@ -236,7 +236,34 @@
236
236
  </div>
237
237
  </div>
238
238
 
239
-
239
+ <script>
240
+ // Scroll to workspace panel when navigated via dock hash link
241
+ (function () {
242
+ var hash = location.hash;
243
+ if (hash === '#notes' || hash === '#todos') {
244
+ window.addEventListener('load', function () {
245
+ var target = document.getElementById(hash.slice(1));
246
+ if (target) {
247
+ setTimeout(function () {
248
+ var main = document.querySelector('.main');
249
+ if (main) {
250
+ main.scrollTo({ top: target.offsetTop - 60, behavior: 'smooth' });
251
+ } else {
252
+ target.scrollIntoView({ behavior: 'smooth', block: 'start' });
253
+ }
254
+ if (hash === '#notes') {
255
+ var ta = document.getElementById('notes-area');
256
+ if (ta) ta.focus();
257
+ } else {
258
+ var inp = document.getElementById('todo-input');
259
+ if (inp) inp.focus();
260
+ }
261
+ }, 400);
262
+ }
263
+ });
264
+ }
265
+ })();
266
+ </script>
240
267
  <script type="module">
241
268
  // Auth
242
269
  const me = await fetch('/api/auth/me', { credentials: 'include' }).then(r => r.json()).catch(() => null);
@@ -111,7 +111,7 @@
111
111
  </div>
112
112
  </nav>
113
113
  <main class="main">
114
- <div class="page-header">
114
+ <div class="page-header glass-card">
115
115
  <h1 class="page-title">Import</h1>
116
116
  </div>
117
117
  <div class="import-wrap" id="import-root">
package/public/media.html CHANGED
@@ -72,7 +72,7 @@
72
72
  </div>
73
73
  </nav>
74
74
  <main class="main">
75
- <div class="page-header">
75
+ <div class="page-header glass-card">
76
76
  <h1 class="page-title">Media</h1>
77
77
  <p class="page-sub" id="media-count"></p>
78
78
  </div>
@@ -250,7 +250,7 @@
250
250
  </div>
251
251
  </nav>
252
252
  <main class="main">
253
- <div class="page-header">
253
+ <div class="page-header glass-card">
254
254
  <h1 class="page-title">Settings</h1>
255
255
  </div>
256
256
  <div class="settings-wrap" id="settings-content">
@@ -630,6 +630,26 @@
630
630
  <div class="theme-card-name">Glass</div>
631
631
  <div class="theme-card-sub">Glassmorphism · blur</div>
632
632
  </button>
633
+ <button class="style-card \${currentStyle==='xfce'?'active':''}" data-style="xfce">
634
+ <div class="style-preview sp-glass" style="position:relative;overflow:hidden;">
635
+ <div class="sp-orb sp-orb1"></div>
636
+ <div class="sp-orb sp-orb2"></div>
637
+ <div style="position:absolute;top:0;left:0;right:0;height:12%;background:color-mix(in srgb,var(--bg2) 60%,transparent);border-bottom:1px solid var(--line);"></div>
638
+ <div class="sp-body" style="margin:0;padding:8% 5% 25%;">
639
+ <div class="sp-row sp-glass-panel"></div>
640
+ <div class="sp-row sp-row-short sp-glass-panel"></div>
641
+ <div class="sp-row sp-glass-panel"></div>
642
+ </div>
643
+ <div style="position:absolute;bottom:4%;left:50%;transform:translateX(-50%);background:color-mix(in srgb,var(--bg2) 60%,transparent);border:1px solid var(--accent);border-radius:8px;padding:3px 8px;display:flex;gap:4px;align-items:center;">
644
+ <span style="width:6px;height:6px;background:var(--accent);border-radius:50%;display:block;"></span>
645
+ <span style="width:6px;height:6px;background:var(--muted);border-radius:50%;display:block;"></span>
646
+ <span style="width:6px;height:6px;background:var(--gold);border-radius:50%;display:block;"></span>
647
+ <span style="width:6px;height:6px;background:var(--muted);border-radius:50%;display:block;"></span>
648
+ </div>
649
+ </div>
650
+ <div class="theme-card-name">Station</div>
651
+ <div class="theme-card-sub">Dock · no sidebar</div>
652
+ </button>
633
653
  </div>
634
654
  </div>
635
655
  </div>
@@ -779,9 +799,13 @@
779
799
  const s = btn.dataset.style;
780
800
  document.querySelectorAll('.style-card').forEach(b => b.classList.toggle('active', b.dataset.style === s));
781
801
  const root = document.documentElement;
782
- if (s === 'glass') root.setAttribute('data-style', 'glass');
783
- else root.removeAttribute('data-style');
802
+ root.removeAttribute('data-style');
803
+ if (s === 'glass' || s === 'xfce') root.setAttribute('data-style', s);
784
804
  localStorage.setItem('orb_style', s);
805
+ // xfce requires a reload to inject the dock
806
+ if (s === 'xfce' || document.documentElement.dataset.style === 'xfce') {
807
+ location.reload();
808
+ }
785
809
  });
786
810
  });
787
811
 
package/public/sidebar.js CHANGED
@@ -1,7 +1,18 @@
1
1
  /**
2
2
  * sidebar.js — dynamically populates collection links + pod footer in every page.
3
3
  * Supports parent/child hierarchy (matching SidebarCollections.astro in the original).
4
+ * Also bootstraps xfce.js when orb_style === 'xfce'.
4
5
  */
6
+ ;(function () {
7
+ if (localStorage.getItem('orb_style') === 'xfce') {
8
+ var xs = document.createElement('script');
9
+ xs.src = '/xfce.js';
10
+ var cs = document.currentScript;
11
+ if (cs && cs.parentNode) cs.parentNode.insertBefore(xs, cs.nextSibling);
12
+ else document.head.appendChild(xs);
13
+ }
14
+ })();
15
+
5
16
  (function () {
6
17
  document.addEventListener('DOMContentLoaded', function () {
7
18
  var params = new URLSearchParams(location.search);