larkway 0.3.6

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.
@@ -0,0 +1,6 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32" role="img" aria-label="Larkway">
2
+ <rect width="32" height="32" rx="8" fill="#4f46e5"/>
3
+ <path d="M8 23 C 12 14.5, 18 10.5, 24.5 8.5" fill="none" stroke="#ffffff" stroke-width="2.8" stroke-linecap="round"/>
4
+ <circle cx="24.5" cy="8.5" r="3.1" fill="#ffffff"/>
5
+ <circle cx="8" cy="23" r="2.7" fill="none" stroke="#c7d2fe" stroke-width="2.3"/>
6
+ </svg>
@@ -0,0 +1,146 @@
1
+ <!doctype html>
2
+ <html lang="zh-CN">
3
+ <head>
4
+ <meta charset="utf-8" />
5
+ <meta name="viewport" content="width=device-width, initial-scale=1" />
6
+ <title>Larkway 看板</title>
7
+ <!-- 浏览器标签页图标:Larkway arc 品牌标(indigo 徽章 + 白弧) -->
8
+ <link rel="icon" type="image/svg+xml" href="/favicon.svg" />
9
+ <link rel="stylesheet" href="/style.css" />
10
+ <script>
11
+ // Token injected by the server when it renders index.html.
12
+ // If the placeholder survives (file served raw), app.js falls back to ?token=.
13
+ window.__LARKWAY_TOKEN__ = "__LARKWAY_TOKEN__";
14
+ </script>
15
+ </head>
16
+ <body class="lk-root">
17
+ <!-- ───────────────────────── 顶栏(HeaderCentered · 方案 B) ───────────────────────── -->
18
+ <header class="topbar">
19
+ <!-- 左:Arc 品牌标记(indigo)+ Larkway + 看板 + 版本药丸 -->
20
+ <div class="brand">
21
+ <span class="brand-mark" aria-hidden="true">
22
+ <svg viewBox="0 0 24 24" width="22" height="22">
23
+ <path d="M5 18 C 8 11, 13 8, 19 6" fill="none" stroke="#4f46e5" stroke-width="2.2" stroke-linecap="round" />
24
+ <circle cx="19" cy="6" r="2.5" fill="#4f46e5" />
25
+ <circle cx="5" cy="18" r="2.1" fill="none" stroke="#334155" stroke-width="1.9" />
26
+ </svg>
27
+ </span>
28
+ <span class="brand-word">Larkway</span>
29
+ <span class="brand-sub">看板</span>
30
+ <span class="brand-ver" id="brand-ver" title="Larkway 版本"></span>
31
+ </div>
32
+
33
+ <!-- 中:绝对居中分段控件(本机 可改 / 公司中心库 只读) -->
34
+ <nav class="context-switch" id="context-switch" aria-label="上下文切换">
35
+ <button class="ctx-btn is-active" data-mode="local" id="ctx-local" type="button">
36
+ 本机 <span class="ctx-hint">可改</span>
37
+ </button>
38
+ <button class="ctx-btn" data-mode="central" id="ctx-central" type="button" disabled>
39
+ 公司中心库 <span class="ctx-hint">只读</span>
40
+ </button>
41
+ </nav>
42
+
43
+ <!-- 右:本机服务指示器(LkServiceIndicator,renderServiceIndicator 注入)
44
+ —— 它统一承担顶栏的服务/状态呈现;旧的整机 status-pill 已并入此处。 -->
45
+ <div class="bridge-indicator" id="bridge-indicator" title="本机服务状态"></div>
46
+ </header>
47
+
48
+ <!-- 来源条:连接中心库后,在主体上方显示「来自 <仓库>@<分支> · 最近同步 N 分钟前」+ 同步入口。
49
+ 由 app.js renderCentralSourceBar() 注入内容;仅 central 已连接态显示。 -->
50
+ <div class="central-source-bar" id="central-source-bar" hidden></div>
51
+
52
+ <!-- ───────────────────────── 主体:300px 名册侧栏 + 1fr 详情 ───────────────────────── -->
53
+ <main class="layout">
54
+ <!-- 左:助手名册 -->
55
+ <aside class="sidebar" id="sidebar">
56
+ <div class="sidebar-head">
57
+ <div class="roster-eyebrow">助手名册</div>
58
+ <div class="roster-count" id="roster-count">
59
+ <button class="roster-refresh" id="btn-refresh" type="button" title="刷新列表" aria-label="刷新列表">
60
+ <svg class="icon icon-sm" viewBox="0 0 24 24" aria-hidden="true">
61
+ <path d="M3 12a9 9 0 0 1 15-6.7L21 8" />
62
+ <path d="M21 3v5h-5" />
63
+ <path d="M21 12a9 9 0 0 1-15 6.7L3 16" />
64
+ <path d="M3 21v-5h5" />
65
+ </svg>
66
+ </button>
67
+ <span id="roster-count-text">助手列表</span>
68
+ </div>
69
+ <!-- BL-18: 重启中/超时 名册头部状态行(by JS) -->
70
+ <div id="roster-restart-status" hidden></div>
71
+ </div>
72
+
73
+ <ul class="bot-list" id="bot-list">
74
+ <li class="empty" id="bot-list-empty">
75
+ <span class="list-loading"><span class="spinner"></span> 正在加载助手…</span>
76
+ </li>
77
+ </ul>
78
+
79
+ <!-- 底部:添加新助手(indigo)+ 从公司中心库拉取(中心可用时由 app.js 显示) -->
80
+ <div class="sidebar-actions" id="sidebar-actions">
81
+ <button class="btn btn-add" id="btn-add" type="button">
82
+ <svg class="icon icon-sm" viewBox="0 0 24 24" aria-hidden="true">
83
+ <path d="M12 5v14M5 12h14" />
84
+ </svg>
85
+ 添加新助手
86
+ </button>
87
+ <button class="btn btn-block" id="btn-sync" type="button">
88
+ <svg class="icon icon-sm" viewBox="0 0 24 24" aria-hidden="true">
89
+ <path d="M12 3v12" />
90
+ <path d="m8 11 4 4 4-4" />
91
+ <path d="M4 21h16" />
92
+ </svg>
93
+ 从公司中心库拉取
94
+ </button>
95
+ </div>
96
+ </aside>
97
+
98
+ <!-- 右:详情 / 编辑区 -->
99
+ <section class="detail" id="detail">
100
+ <!-- 空态(名册有助手但未选中):内容由 app.js renderDetailPlaceholder() 按 mode 填充 -->
101
+ <div class="detail-placeholder" id="detail-placeholder"></div>
102
+ <!-- detail content injected by app.js renderBotDetail() -->
103
+ </section>
104
+ </main>
105
+
106
+ <!-- toast -->
107
+ <div class="toast" id="toast" hidden></div>
108
+
109
+ <!-- 添加新助手 modal(扫码优先 · Block A) -->
110
+ <div class="modal-backdrop" id="onboard-backdrop" hidden>
111
+ <div
112
+ class="modal onboard-modal"
113
+ id="onboard-modal"
114
+ role="dialog"
115
+ aria-modal="true"
116
+ aria-labelledby="onboard-modal-title"
117
+ >
118
+ <!-- 整张卡内容由 app.js renderOnboardScan/renderOnboardNameForm/etc 注入 -->
119
+ </div>
120
+ </div>
121
+
122
+ <!-- 连接公司中心库 modal(form → connecting → connected/failed) -->
123
+ <div class="modal-backdrop" id="connect-backdrop" hidden>
124
+ <div
125
+ class="modal connect-modal"
126
+ id="connect-modal"
127
+ role="dialog"
128
+ aria-modal="true"
129
+ aria-labelledby="connect-header"
130
+ >
131
+ <!-- 整张卡内容由 app.js renderConnectFlow() 注入(各 phase 自带 header/footer) -->
132
+ </div>
133
+ </div>
134
+
135
+ <!-- 同步预览 modal -->
136
+ <div class="modal-backdrop" id="modal-backdrop" hidden>
137
+ <div class="modal" id="modal" role="dialog" aria-modal="true" aria-labelledby="modal-header">
138
+ <div class="modal-header" id="modal-header">同步预览</div>
139
+ <div class="modal-body" id="modal-body"></div>
140
+ <div class="modal-footer" id="modal-footer"></div>
141
+ </div>
142
+ </div>
143
+
144
+ <script type="module" src="/app.js"></script>
145
+ </body>
146
+ </html>