bacon-tracker 1.0.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.
@@ -0,0 +1,211 @@
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="utf-8">
5
+ <meta name="viewport" content="width=device-width, initial-scale=1">
6
+ <title><%= h @doc_title %> - decisions</title>
7
+ <link rel="preconnect" href="https://fonts.googleapis.com">
8
+ <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
9
+ <link href="https://fonts.googleapis.com/css2?family=Source+Code+Pro:ital,wght@0,300;0,400;1,400&display=swap" rel="stylesheet">
10
+ <script><%= erb :'_theme_boot', layout: false %></script>
11
+ <style>
12
+ <%= erb :'_root_css', layout: false %>
13
+ <%= erb :'_header_css', layout: false %>
14
+ <%= erb :'_board_css', layout: false %>
15
+ <%= erb :'_detail_css', layout: false %>
16
+ <%= erb :'_markdown_css', layout: false %>
17
+ html,
18
+ body {
19
+ height: 100%;
20
+ }
21
+ body {
22
+ background: var(--bg);
23
+ color: var(--fg);
24
+ font-family: var(--font-mono);
25
+ display: flex;
26
+ flex-direction: column;
27
+ }
28
+ .board {
29
+ min-height: 0;
30
+ }
31
+
32
+ /* data-status colours (BT-144): proposed wants attention, accepted is in
33
+ force, rejected reads as the bug colour, history fades. data-stage stays
34
+ the story board's; the two never meet in one board. */
35
+ .column[data-status="proposed"] {
36
+ background: rgba(192, 130, 162, 0.1);
37
+ border-color: rgba(192, 130, 162, 0.22);
38
+ }
39
+ .column[data-status="accepted"] {
40
+ background: rgba(80, 140, 100, 0.08);
41
+ border-color: rgba(80, 140, 100, 0.18);
42
+ }
43
+ .column[data-status="rejected"] {
44
+ background: rgba(212, 112, 112, 0.08);
45
+ border-color: rgba(212, 112, 112, 0.18);
46
+ }
47
+ .column[data-status="deprecated"],
48
+ .column[data-status="superseded"] {
49
+ background: rgba(195, 195, 195, 0.1);
50
+ border-color: rgba(195, 195, 195, 0.22);
51
+ }
52
+ .column[data-status="proposed"] .col-header h2 {
53
+ color: var(--accent);
54
+ }
55
+ .column[data-status="accepted"] .col-header h2 {
56
+ color: #5e8c6a;
57
+ }
58
+ .column[data-status="rejected"] .col-header h2 {
59
+ color: var(--c-bug);
60
+ }
61
+ .column[data-status="deprecated"] .col-header h2,
62
+ .column[data-status="superseded"] .col-header h2 {
63
+ color: var(--fg-muted);
64
+ }
65
+
66
+ .dcard {
67
+ padding: 8px 10px;
68
+ }
69
+ .dcard .card-id {
70
+ font-size: 0.62rem;
71
+ color: var(--fg-muted);
72
+ display: flex;
73
+ gap: 6px;
74
+ }
75
+ .dcard .card-id .d-date {
76
+ margin-left: auto;
77
+ }
78
+ .dcard .d-title {
79
+ font-size: 0.78rem;
80
+ color: var(--fg-strong);
81
+ margin-top: 3px;
82
+ word-break: break-word;
83
+ }
84
+ .dcard .d-succ {
85
+ font-size: 0.64rem;
86
+ margin-top: 4px;
87
+ }
88
+ .dcard .d-succ a {
89
+ color: var(--accent);
90
+ cursor: pointer;
91
+ }
92
+ .dcard-reveal {
93
+ visibility: hidden;
94
+ background: none;
95
+ border: 1px solid var(--border);
96
+ border-radius: var(--radius-sm);
97
+ color: var(--fg-muted);
98
+ cursor: pointer;
99
+ padding: 0 0.35rem;
100
+ font-size: 0.7rem;
101
+ margin-left: 6px;
102
+ }
103
+ .dcard:hover .dcard-reveal {
104
+ visibility: visible;
105
+ }
106
+ .dcard-reveal:hover {
107
+ color: var(--accent);
108
+ border-color: var(--accent);
109
+ }
110
+ .card {
111
+ cursor: pointer;
112
+ }
113
+ .col-toggle {
114
+ background: none;
115
+ border: none;
116
+ color: var(--fg-muted);
117
+ cursor: pointer;
118
+ font-family: var(--font-mono);
119
+ font-size: 0.6rem;
120
+ }
121
+ .card {
122
+ cursor: grab;
123
+ }
124
+ .board-flash {
125
+ position: fixed;
126
+ bottom: 1rem;
127
+ left: 50%;
128
+ transform: translateX(-50%);
129
+ background: var(--c-bug);
130
+ color: #fff;
131
+ padding: 0.5rem 0.9rem;
132
+ border-radius: var(--radius-sm);
133
+ font-size: 0.78rem;
134
+ z-index: 200;
135
+ max-width: 80%;
136
+ }
137
+ .board-flash.info {
138
+ background: var(--accent);
139
+ }
140
+ .picker-cand {
141
+ display: block;
142
+ width: 100%;
143
+ text-align: left;
144
+ margin: 0.2rem 0;
145
+ background: none;
146
+ border: 1px solid var(--border);
147
+ border-radius: var(--radius-sm);
148
+ color: var(--fg-strong);
149
+ font-family: var(--font-mono);
150
+ font-size: 0.78rem;
151
+ padding: 0.35rem 0.6rem;
152
+ cursor: pointer;
153
+ }
154
+ .picker-cand:hover {
155
+ border-color: var(--accent);
156
+ color: var(--accent);
157
+ }
158
+ #picker-free {
159
+ width: 100%;
160
+ margin-top: 0.6rem;
161
+ background: none;
162
+ border: 1px solid var(--border);
163
+ border-radius: var(--radius-input);
164
+ color: var(--fg);
165
+ font-family: var(--font-mono);
166
+ font-size: 0.78rem;
167
+ padding: 0.35rem 0.6rem;
168
+ }
169
+ </style>
170
+ </head>
171
+ <body>
172
+ <header>
173
+ <a href="/" class="back-link">← <%= @doc_slug ? "dashboard" : "board" %></a>
174
+ <span class="carrot-mark" aria-hidden="true">🥕</span>
175
+ <h1><%= h @doc_title %></h1>
176
+ <span class="ns">decisions</span>
177
+ <div class="header-spacer"></div>
178
+ <button class="theme-toggle" title="dark mode">◐</button>
179
+ </header>
180
+ <main class="board" id="decision-board"></main>
181
+ <div class="detail-backdrop" id="doc-detail">
182
+ <div class="detail-modal">
183
+ <div class="detail-head">
184
+ <span class="detail-id" id="doc-detail-path"></span>
185
+ <span class="detail-stage" id="doc-detail-status" title="Current status"></span>
186
+ <span class="detail-id" id="doc-detail-refs"></span>
187
+ <button class="detail-close" id="doc-detail-close" title="Close">✕</button>
188
+ </div>
189
+ <div class="detail-title" id="doc-detail-title"></div>
190
+ <div class="detail-body md-content" id="doc-detail-body"></div>
191
+ </div>
192
+ </div>
193
+ <div class="detail-backdrop" id="supersede-picker">
194
+ <div class="detail-modal">
195
+ <div class="detail-head">
196
+ <span class="detail-id">supersede <span id="picker-subject"></span></span>
197
+ <button class="detail-close" id="picker-cancel" title="Cancel">✕</button>
198
+ </div>
199
+ <div class="detail-title">Which decision supersedes it?</div>
200
+ <div class="detail-body">
201
+ <div id="picker-list"></div>
202
+ <input id="picker-free" placeholder="…or an id in another namespace, then ⏎">
203
+ </div>
204
+ </div>
205
+ </div>
206
+ <script src="/theme.js"></script>
207
+ <% if @doc_slug %><script>window.BT_API_BASE = <%= "/projects/#{@doc_slug}".to_json %>;</script><% end %>
208
+ <script src="/logic.js"></script>
209
+ <script src="/decisions.js"></script>
210
+ </body>
211
+ </html>
@@ -0,0 +1,234 @@
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="utf-8">
5
+ <meta name="viewport" content="width=device-width, initial-scale=1">
6
+ <title><%= h @doc_title %> - docs</title>
7
+ <link rel="preconnect" href="https://fonts.googleapis.com">
8
+ <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
9
+ <link href="https://fonts.googleapis.com/css2?family=Source+Code+Pro:ital,wght@0,300;0,400;1,400&display=swap" rel="stylesheet">
10
+ <script><%= erb :'_theme_boot', layout: false %></script>
11
+ <style>
12
+ <%= erb :'_root_css', layout: false %>
13
+ <%= erb :'_header_css', layout: false %>
14
+ html,
15
+ body {
16
+ height: 100%;
17
+ }
18
+ body {
19
+ background: var(--bg);
20
+ color: var(--fg);
21
+ font-family: var(--font-mono);
22
+ display: flex;
23
+ flex-direction: column;
24
+ }
25
+ .docs-main {
26
+ flex: 1;
27
+ min-height: 0;
28
+ padding: 1rem 1.2rem;
29
+ display: flex;
30
+ }
31
+ a {
32
+ color: var(--accent);
33
+ }
34
+ .docs-layout {
35
+ display: flex;
36
+ gap: 0;
37
+ flex: 1;
38
+ min-height: 0;
39
+ width: 100%;
40
+ border: 1px solid var(--border);
41
+ border-radius: var(--radius-card);
42
+ overflow: hidden;
43
+ }
44
+ /* flex-shrink 0: the container must never shrink below its columns -
45
+ that clipped the 220px column to ~150px behind a scrollbar (BT-173). */
46
+ #doc-columns {
47
+ display: flex;
48
+ overflow-x: auto;
49
+ flex: 0 0 auto;
50
+ max-width: 55%;
51
+ }
52
+ .doc-col {
53
+ list-style: none;
54
+ min-width: 220px;
55
+ max-width: 320px;
56
+ overflow-y: auto;
57
+ border-right: 1px solid var(--border);
58
+ padding: 0.4rem 0;
59
+ }
60
+ .doc-entry {
61
+ padding: 0.3rem 0.7rem;
62
+ cursor: pointer;
63
+ white-space: nowrap;
64
+ overflow: hidden;
65
+ text-overflow: ellipsis;
66
+ font-size: 0.85rem;
67
+ }
68
+ .doc-entry:hover {
69
+ color: var(--fg-strong);
70
+ }
71
+ .doc-entry.selected {
72
+ background: var(--accent);
73
+ color: var(--color-pink);
74
+ }
75
+ [data-theme="dark"] .doc-entry.selected {
76
+ color: var(--color-grey-dark);
77
+ }
78
+ #doc-preview {
79
+ flex: 1 1 auto;
80
+ overflow: auto;
81
+ padding: 1rem 1.6rem;
82
+ font-size: 0.88rem;
83
+ line-height: 1.55;
84
+ }
85
+ <%= erb :'_markdown_css', layout: false %>
86
+ .doc-notice {
87
+ color: var(--c-bug);
88
+ }
89
+ .doc-flash {
90
+ position: fixed;
91
+ bottom: 1rem;
92
+ left: 50%;
93
+ transform: translateX(-50%);
94
+ background: var(--c-bug);
95
+ color: #fff;
96
+ padding: 0.5rem 0.9rem;
97
+ border-radius: var(--radius-sm);
98
+ font-size: 0.78rem;
99
+ z-index: 200;
100
+ max-width: 80%;
101
+ }
102
+ #doc-search {
103
+ background: none;
104
+ border: 1px solid rgba(255, 227, 240, 0.18);
105
+ border-radius: var(--radius-input);
106
+ color: var(--color-pink);
107
+ width: 190px;
108
+ font-family: var(--font-mono);
109
+ font-size: 0.72rem;
110
+ padding: 2px 8px;
111
+ }
112
+ #doc-search::placeholder {
113
+ color: rgba(255, 227, 240, 0.35);
114
+ }
115
+ #doc-search:focus {
116
+ outline: none;
117
+ border-color: var(--accent);
118
+ }
119
+ .search-hit {
120
+ padding: 0.35rem 0.2rem;
121
+ cursor: pointer;
122
+ border-bottom: 1px solid var(--border);
123
+ }
124
+ .search-hit:hover .sh-path {
125
+ color: var(--accent);
126
+ }
127
+ .sh-folder {
128
+ color: var(--fg-muted);
129
+ font-size: 0.72rem;
130
+ text-transform: uppercase;
131
+ letter-spacing: 0.08em;
132
+ margin: 0.9rem 0 0.2rem;
133
+ }
134
+ .sh-path {
135
+ color: var(--fg-strong);
136
+ font-size: 0.8rem;
137
+ }
138
+ .sh-line {
139
+ color: var(--fg-muted);
140
+ font-size: 0.76rem;
141
+ }
142
+ .sh-line mark {
143
+ background: var(--accent);
144
+ color: var(--color-pink);
145
+ border-radius: 2px;
146
+ }
147
+ <%= erb :'_detail_css', layout: false %>
148
+ /* A slim bar above the content instead of buttons floating over it -
149
+ the hover overlay sat on top of the first lines of text (BT-174). */
150
+ .doc-actions {
151
+ display: flex;
152
+ justify-content: flex-end;
153
+ gap: 0.35rem;
154
+ padding: 0.35rem 0.7rem;
155
+ border-bottom: 1px solid var(--border);
156
+ flex-shrink: 0;
157
+ }
158
+ .doc-expand {
159
+ background: none;
160
+ border: 1px solid var(--border);
161
+ border-radius: var(--radius-sm);
162
+ color: var(--fg-muted);
163
+ cursor: pointer;
164
+ padding: 0.1rem 0.45rem;
165
+ }
166
+ .doc-expand:hover {
167
+ color: var(--accent);
168
+ border-color: var(--accent);
169
+ }
170
+ #doc-preview-wrap {
171
+ flex: 1 1 auto;
172
+ display: flex;
173
+ flex-direction: column;
174
+ min-width: 0;
175
+ }
176
+ .doc-fm {
177
+ border: 1px solid var(--border);
178
+ border-radius: var(--radius-sm);
179
+ padding: 0.5rem 0.8rem;
180
+ margin-bottom: 0.9rem;
181
+ font-size: 0.78rem;
182
+ }
183
+ .doc-fm dt {
184
+ color: var(--fg-muted);
185
+ display: inline;
186
+ }
187
+ .doc-fm dd {
188
+ display: inline;
189
+ margin: 0 0.9rem 0 0.3rem;
190
+ color: var(--fg-strong);
191
+ }
192
+ </style>
193
+ </head>
194
+ <body>
195
+ <header>
196
+ <a href="/" class="back-link">← <%= @doc_slug ? "dashboard" : "board" %></a>
197
+ <span class="carrot-mark" aria-hidden="true">🥕</span>
198
+ <h1><%= h @doc_title %></h1>
199
+ <span class="ns">docs</span>
200
+ <span id="doc-version" class="header-meta"></span>
201
+ <a id="doc-changelog" class="header-meta" style="display:none;cursor:pointer">changelog</a>
202
+ <div class="header-spacer"></div>
203
+ <input id="doc-search" placeholder="search docs…" autocomplete="off">
204
+ <button class="theme-toggle" title="dark mode">◐</button>
205
+ </header>
206
+ <main class="docs-main">
207
+ <div class="docs-layout">
208
+ <div id="doc-columns"></div>
209
+ <div id="doc-preview-wrap">
210
+ <div class="doc-actions">
211
+ <button class="doc-expand" id="doc-editor" title="Open in editor">✎</button>
212
+ <button class="doc-expand" id="doc-reveal" title="Reveal the file">↗</button>
213
+ <button class="doc-expand" id="doc-expand" title="Open detail view">⤢</button>
214
+ </div>
215
+ <div id="doc-preview" class="md-content"></div>
216
+ </div>
217
+ </div>
218
+ <div class="detail-backdrop" id="doc-detail">
219
+ <div class="detail-modal">
220
+ <div class="detail-head">
221
+ <span class="detail-id" id="doc-detail-path"></span>
222
+ <button class="detail-close" id="doc-detail-close" title="Close">✕</button>
223
+ </div>
224
+ <div class="detail-title" id="doc-detail-title"></div>
225
+ <div class="detail-body md-content" id="doc-detail-body"></div>
226
+ </div>
227
+ </div>
228
+ </main>
229
+ <% if @doc_slug %><script>window.BT_API_BASE = <%= "/projects/#{@doc_slug}".to_json %>;</script><% end %>
230
+ <script src="/theme.js"></script>
231
+ <script src="/logic.js"></script>
232
+ <script src="/docs.js"></script>
233
+ </body>
234
+ </html>