@awesome-markdown/board-ui 1.6.0 → 2.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.
Files changed (67) hide show
  1. package/dist/board/Board.d.ts.map +1 -1
  2. package/dist/board/Board.js +79 -66
  3. package/dist/board/Board.js.map +1 -1
  4. package/dist/board/Cell.d.ts.map +1 -1
  5. package/dist/board/Cell.js +11 -6
  6. package/dist/board/Cell.js.map +1 -1
  7. package/dist/board/HomelessItemCard.d.ts.map +1 -1
  8. package/dist/board/HomelessItemCard.js +2 -1
  9. package/dist/board/HomelessItemCard.js.map +1 -1
  10. package/dist/board/ItemCard.d.ts.map +1 -1
  11. package/dist/board/ItemCard.js +9 -16
  12. package/dist/board/ItemCard.js.map +1 -1
  13. package/dist/board/dnd/mutateDragDrop.d.ts +3 -5
  14. package/dist/board/dnd/mutateDragDrop.d.ts.map +1 -1
  15. package/dist/board/dnd/mutateDragDrop.js +36 -55
  16. package/dist/board/dnd/mutateDragDrop.js.map +1 -1
  17. package/dist/board/layout/AxisBehavior.d.ts +2 -1
  18. package/dist/board/layout/AxisBehavior.d.ts.map +1 -1
  19. package/dist/board/layout/AxisBehavior.js +9 -5
  20. package/dist/board/layout/AxisBehavior.js.map +1 -1
  21. package/dist/board/layout/AxisDrawer.d.ts.map +1 -1
  22. package/dist/board/layout/AxisDrawer.js +1 -1
  23. package/dist/board/layout/AxisDrawer.js.map +1 -1
  24. package/dist/board/layout/filter-draft.d.ts.map +1 -1
  25. package/dist/board/layout/filter-draft.js +3 -1
  26. package/dist/board/layout/filter-draft.js.map +1 -1
  27. package/dist/components/ItemRecovery.d.ts +9 -0
  28. package/dist/components/ItemRecovery.d.ts.map +1 -0
  29. package/dist/components/ItemRecovery.js +48 -0
  30. package/dist/components/ItemRecovery.js.map +1 -0
  31. package/dist/components/PropertyTree.d.ts +18 -0
  32. package/dist/components/PropertyTree.d.ts.map +1 -0
  33. package/dist/components/PropertyTree.js +109 -0
  34. package/dist/components/PropertyTree.js.map +1 -0
  35. package/dist/lib/item-board.d.ts +0 -3
  36. package/dist/lib/item-board.d.ts.map +1 -1
  37. package/dist/lib/item-board.js +0 -7
  38. package/dist/lib/item-board.js.map +1 -1
  39. package/dist/lib/patch-visible-item.d.ts +4 -0
  40. package/dist/lib/patch-visible-item.d.ts.map +1 -0
  41. package/dist/lib/patch-visible-item.js +10 -0
  42. package/dist/lib/patch-visible-item.js.map +1 -0
  43. package/dist/lib/property-display.d.ts +2 -3
  44. package/dist/lib/property-display.d.ts.map +1 -1
  45. package/dist/lib/property-display.js +15 -10
  46. package/dist/lib/property-display.js.map +1 -1
  47. package/dist/lib/property-tree.d.ts +23 -0
  48. package/dist/lib/property-tree.d.ts.map +1 -0
  49. package/dist/lib/property-tree.js +109 -0
  50. package/dist/lib/property-tree.js.map +1 -0
  51. package/dist/pages/ItemEditorPage.d.ts.map +1 -1
  52. package/dist/pages/ItemEditorPage.js +185 -204
  53. package/dist/pages/ItemEditorPage.js.map +1 -1
  54. package/package.json +6 -5
  55. package/styles.css +766 -146
  56. package/dist/components/BoardAssigneeField.d.ts +0 -10
  57. package/dist/components/BoardAssigneeField.d.ts.map +0 -1
  58. package/dist/components/BoardAssigneeField.js +0 -37
  59. package/dist/components/BoardAssigneeField.js.map +0 -1
  60. package/dist/components/DeleteItemConfirmDialog.d.ts +0 -14
  61. package/dist/components/DeleteItemConfirmDialog.d.ts.map +0 -1
  62. package/dist/components/DeleteItemConfirmDialog.js +0 -46
  63. package/dist/components/DeleteItemConfirmDialog.js.map +0 -1
  64. package/dist/components/ItemEditorActions.d.ts +0 -15
  65. package/dist/components/ItemEditorActions.d.ts.map +0 -1
  66. package/dist/components/ItemEditorActions.js +0 -48
  67. package/dist/components/ItemEditorActions.js.map +0 -1
package/styles.css CHANGED
@@ -38,29 +38,34 @@
38
38
  }
39
39
 
40
40
  :root {
41
- --bg: #FAFAF7;
42
- --surface: #FAFAF7;
43
- --ink: #111111;
44
- --ink-muted: #6B6760;
45
- --border: #E6E4DD;
46
- --accent: #FFE94A;
41
+ --bg: #fafaf7;
42
+ --surface: #fafaf7;
43
+ --ink: #111111;
44
+ --ink-muted: #6b6760;
45
+ --border: #e6e4dd;
46
+ --accent: #ffe94a;
47
47
  --on-accent: #111111;
48
48
  --font-mono: 'JetBrains Mono', monospace;
49
49
  --font-sans: 'Inter Tight', sans-serif;
50
50
  }
51
51
 
52
- [data-theme="dark"] {
53
- --bg: #0E0E0E;
54
- --surface: #0E0E0E;
55
- --ink: #E8E8E8;
56
- --ink-muted: #8A867E;
57
- --border: #262626;
58
- --accent: #F5E663;
52
+ [data-theme='dark'] {
53
+ --bg: #0e0e0e;
54
+ --surface: #0e0e0e;
55
+ --ink: #e8e8e8;
56
+ --ink-muted: #8a867e;
57
+ --border: #262626;
58
+ --accent: #f5e663;
59
59
  --on-accent: #111111;
60
60
  }
61
61
 
62
- *, *::before, *::after { box-sizing: border-box; }
62
+ *,
63
+ *::before,
64
+ *::after {
65
+ box-sizing: border-box;
66
+ }
63
67
  body {
68
+ margin: 0;
64
69
  background: var(--bg);
65
70
  color: var(--ink);
66
71
  font-family: var(--font-sans);
@@ -68,12 +73,20 @@ body {
68
73
  }
69
74
 
70
75
  @keyframes pulse {
71
- 0%, 100% { opacity: 1; }
72
- 50% { opacity: 0.4; }
76
+ 0%,
77
+ 100% {
78
+ opacity: 1;
79
+ }
80
+ 50% {
81
+ opacity: 0.4;
82
+ }
73
83
  }
74
84
 
75
85
  /* Base resets */
76
- button, input, select, textarea {
86
+ button,
87
+ input,
88
+ select,
89
+ textarea {
77
90
  border-radius: 0;
78
91
  }
79
92
 
@@ -83,150 +96,757 @@ button, input, select, textarea {
83
96
  }
84
97
 
85
98
  /* Layout utilities */
86
- .flex { display: flex; }
87
- .flex-col { flex-direction: column; }
88
- .flex-1 { flex: 1; }
89
- .flex-shrink-0 { flex-shrink: 0; }
90
- .shrink-0 { flex-shrink: 0; }
91
- .items-center { align-items: center; }
92
- .items-start { align-items: flex-start; }
93
- .justify-between { justify-content: space-between; }
94
- .justify-center { justify-content: center; }
95
- .justify-end { justify-content: flex-end; }
96
- .flex-wrap { flex-wrap: wrap; }
97
- .gap-1 { gap: 0.25rem; }
98
- .gap-2 { gap: 0.5rem; }
99
- .gap-3 { gap: 0.75rem; }
100
- .gap-4 { gap: 1rem; }
101
- .h-full { height: 100%; }
102
- .h-screen { height: 100vh; }
103
- .w-full { width: 100%; }
104
- .w-28 { width: 112px; }
105
- .min-w-\[240px\] { min-width: 240px; }
106
- .w-\[240px\] { width: 240px; }
107
- .min-h-\[120px\] { min-height: 120px; }
108
- .max-w-2xl { max-width: 42rem; }
109
- .max-w-md { max-width: 28rem; }
110
- .max-w-6xl { max-width: 72rem; }
111
- .overflow-hidden { overflow: hidden; }
112
- .overflow-auto { overflow: auto; }
113
- .overflow-y-auto { overflow-y: auto; }
114
- .overflow-x-auto { overflow-x: auto; }
99
+ .flex {
100
+ display: flex;
101
+ }
102
+ .flex-col {
103
+ flex-direction: column;
104
+ }
105
+ .flex-1 {
106
+ flex: 1;
107
+ }
108
+ .flex-shrink-0 {
109
+ flex-shrink: 0;
110
+ }
111
+ .shrink-0 {
112
+ flex-shrink: 0;
113
+ }
114
+ .items-center {
115
+ align-items: center;
116
+ }
117
+ .items-start {
118
+ align-items: flex-start;
119
+ }
120
+ .justify-between {
121
+ justify-content: space-between;
122
+ }
123
+ .justify-center {
124
+ justify-content: center;
125
+ }
126
+ .justify-end {
127
+ justify-content: flex-end;
128
+ }
129
+ .flex-wrap {
130
+ flex-wrap: wrap;
131
+ }
132
+ .gap-1 {
133
+ gap: 0.25rem;
134
+ }
135
+ .gap-2 {
136
+ gap: 0.5rem;
137
+ }
138
+ .gap-3 {
139
+ gap: 0.75rem;
140
+ }
141
+ .gap-4 {
142
+ gap: 1rem;
143
+ }
144
+ .h-full {
145
+ height: 100%;
146
+ }
147
+ .h-screen {
148
+ height: 100vh;
149
+ height: 100dvh;
150
+ }
151
+ .w-full {
152
+ width: 100%;
153
+ }
154
+ .w-28 {
155
+ width: 112px;
156
+ }
157
+ .min-w-\[240px\] {
158
+ min-width: 240px;
159
+ }
160
+ .w-\[240px\] {
161
+ width: 240px;
162
+ }
163
+ .min-h-\[120px\] {
164
+ min-height: 120px;
165
+ }
166
+ .max-w-2xl {
167
+ max-width: 42rem;
168
+ }
169
+ .max-w-md {
170
+ max-width: 28rem;
171
+ }
172
+ .max-w-6xl {
173
+ max-width: 72rem;
174
+ }
175
+ .overflow-hidden {
176
+ overflow: hidden;
177
+ }
178
+ .overflow-auto {
179
+ overflow: auto;
180
+ }
181
+ .overflow-y-auto {
182
+ overflow-y: auto;
183
+ }
184
+ .overflow-x-auto {
185
+ overflow-x: auto;
186
+ }
115
187
 
116
188
  /* Spacing utilities */
117
- .p-2 { padding: 0.5rem; }
118
- .p-3 { padding: 0.75rem; }
119
- .p-4 { padding: 1rem; }
120
- .p-6 { padding: 1.5rem; }
121
- .p-8 { padding: 2rem; }
122
- .px-3 { padding-left: 0.75rem; padding-right: 0.75rem; }
123
- .px-4 { padding-left: 1rem; padding-right: 1rem; }
124
- .px-6 { padding-left: 1.5rem; padding-right: 1.5rem; }
125
- .py-1 { padding-top: 0.25rem; padding-bottom: 0.25rem; }
126
- .py-1\.5 { padding-top: 0.375rem; padding-bottom: 0.375rem; }
127
- .py-2 { padding-top: 0.5rem; padding-bottom: 0.5rem; }
128
- .py-3 { padding-top: 0.75rem; padding-bottom: 0.75rem; }
129
- .py-4 { padding-top: 1rem; padding-bottom: 1rem; }
130
- .py-16 { padding-top: 4rem; padding-bottom: 4rem; }
131
- .pb-3 { padding-bottom: 0.75rem; }
132
- .pb-4 { padding-bottom: 1rem; }
133
- .pt-1 { padding-top: 0.25rem; }
134
- .mb-4 { margin-bottom: 1rem; }
135
- .ml-4 { margin-left: 1rem; }
136
- .mt-1 { margin-top: 0.25rem; }
137
- .mt-4 { margin-top: 1rem; }
138
- .mx-4 { margin-left: 1rem; margin-right: 1rem; }
139
- .mx-auto { margin-left: auto; margin-right: auto; }
189
+ .p-2 {
190
+ padding: 0.5rem;
191
+ }
192
+ .p-3 {
193
+ padding: 0.75rem;
194
+ }
195
+ .p-4 {
196
+ padding: 1rem;
197
+ }
198
+ .p-6 {
199
+ padding: 1.5rem;
200
+ }
201
+ .p-8 {
202
+ padding: 2rem;
203
+ }
204
+ .px-3 {
205
+ padding-left: 0.75rem;
206
+ padding-right: 0.75rem;
207
+ }
208
+ .px-4 {
209
+ padding-left: 1rem;
210
+ padding-right: 1rem;
211
+ }
212
+ .px-6 {
213
+ padding-left: 1.5rem;
214
+ padding-right: 1.5rem;
215
+ }
216
+ .py-1 {
217
+ padding-top: 0.25rem;
218
+ padding-bottom: 0.25rem;
219
+ }
220
+ .py-1\.5 {
221
+ padding-top: 0.375rem;
222
+ padding-bottom: 0.375rem;
223
+ }
224
+ .py-2 {
225
+ padding-top: 0.5rem;
226
+ padding-bottom: 0.5rem;
227
+ }
228
+ .py-3 {
229
+ padding-top: 0.75rem;
230
+ padding-bottom: 0.75rem;
231
+ }
232
+ .py-4 {
233
+ padding-top: 1rem;
234
+ padding-bottom: 1rem;
235
+ }
236
+ .py-16 {
237
+ padding-top: 4rem;
238
+ padding-bottom: 4rem;
239
+ }
240
+ .pb-3 {
241
+ padding-bottom: 0.75rem;
242
+ }
243
+ .pb-4 {
244
+ padding-bottom: 1rem;
245
+ }
246
+ .pt-1 {
247
+ padding-top: 0.25rem;
248
+ }
249
+ .mb-4 {
250
+ margin-bottom: 1rem;
251
+ }
252
+ .ml-4 {
253
+ margin-left: 1rem;
254
+ }
255
+ .mt-1 {
256
+ margin-top: 0.25rem;
257
+ }
258
+ .mt-4 {
259
+ margin-top: 1rem;
260
+ }
261
+ .mx-4 {
262
+ margin-left: 1rem;
263
+ margin-right: 1rem;
264
+ }
265
+ .mx-auto {
266
+ margin-left: auto;
267
+ margin-right: auto;
268
+ }
140
269
 
141
270
  /* Typography utilities */
142
- .text-center { text-align: center; }
143
- .text-xs { font-size: 0.75rem; line-height: 1rem; }
144
- .text-sm { font-size: 0.875rem; line-height: 1.25rem; }
145
- .text-xl { font-size: 1.25rem; line-height: 1.75rem; }
146
- .text-5xl { font-size: 3rem; line-height: 1; }
147
- .font-medium { font-weight: 500; }
148
- .font-semibold { font-weight: 600; }
149
- .font-mono { font-family: var(--font-mono); }
150
- .whitespace-pre { white-space: pre; }
151
- .truncate { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
152
- .min-w-0 { min-width: 0; }
271
+ .text-center {
272
+ text-align: center;
273
+ }
274
+ .text-xs {
275
+ font-size: 0.75rem;
276
+ line-height: 1rem;
277
+ }
278
+ .text-sm {
279
+ font-size: 0.875rem;
280
+ line-height: 1.25rem;
281
+ }
282
+ .text-xl {
283
+ font-size: 1.25rem;
284
+ line-height: 1.75rem;
285
+ }
286
+ .text-5xl {
287
+ font-size: 3rem;
288
+ line-height: 1;
289
+ }
290
+ .font-medium {
291
+ font-weight: 500;
292
+ }
293
+ .font-semibold {
294
+ font-weight: 600;
295
+ }
296
+ .font-mono {
297
+ font-family: var(--font-mono);
298
+ }
299
+ .whitespace-pre {
300
+ white-space: pre;
301
+ }
302
+ .truncate {
303
+ overflow: hidden;
304
+ text-overflow: ellipsis;
305
+ white-space: nowrap;
306
+ }
307
+ .min-w-0 {
308
+ min-width: 0;
309
+ }
153
310
 
154
311
  /* Display utilities */
155
- .block { display: block; }
156
- .grid { display: grid; }
157
- .grid-cols-2 { grid-template-columns: repeat(2, minmax(0, 1fr)); }
158
- .last\:border-b-0:last-child { border-bottom: 0; }
159
- .space-y-2 > * + * { margin-top: 0.5rem; }
160
- .space-y-3 > * + * { margin-top: 0.75rem; }
161
- .space-y-5 > * + * { margin-top: 1.25rem; }
162
- .space-y-6 > * + * { margin-top: 1.5rem; }
312
+ .block {
313
+ display: block;
314
+ }
315
+ .grid {
316
+ display: grid;
317
+ }
318
+ .grid-cols-2 {
319
+ grid-template-columns: repeat(2, minmax(0, 1fr));
320
+ }
321
+ .last\:border-b-0:last-child {
322
+ border-bottom: 0;
323
+ }
324
+ .space-y-2 > * + * {
325
+ margin-top: 0.5rem;
326
+ }
327
+ .space-y-3 > * + * {
328
+ margin-top: 0.75rem;
329
+ }
330
+ .space-y-5 > * + * {
331
+ margin-top: 1.25rem;
332
+ }
333
+ .space-y-6 > * + * {
334
+ margin-top: 1.5rem;
335
+ }
163
336
 
164
337
  /* Position utilities */
165
- .sticky { position: sticky; }
166
- .top-0 { top: 0; }
167
- .z-10 { z-index: 10; }
168
- .z-50 { z-index: 50; }
169
- .relative { position: relative; }
170
- .fixed { position: fixed; }
171
- .inset-0 { top: 0; right: 0; bottom: 0; left: 0; }
338
+ .sticky {
339
+ position: sticky;
340
+ }
341
+ .top-0 {
342
+ top: 0;
343
+ }
344
+ .z-10 {
345
+ z-index: 10;
346
+ }
347
+ .z-50 {
348
+ z-index: 50;
349
+ }
350
+ .relative {
351
+ position: relative;
352
+ }
353
+ .fixed {
354
+ position: fixed;
355
+ }
356
+ .inset-0 {
357
+ top: 0;
358
+ right: 0;
359
+ bottom: 0;
360
+ left: 0;
361
+ }
172
362
 
173
363
  /* Border utilities */
174
- .border-t { border-top: 1px solid var(--border); }
175
- .border-b { border-bottom: 1px solid var(--border); }
176
- .border-r { border-right: 1px solid var(--border); }
177
- .rounded { border-radius: 4px; }
178
- .rounded-lg { border-radius: 8px; }
179
- .rounded-xl { border-radius: 12px; }
364
+ .border-t {
365
+ border-top: 1px solid var(--border);
366
+ }
367
+ .border-b {
368
+ border-bottom: 1px solid var(--border);
369
+ }
370
+ .border-r {
371
+ border-right: 1px solid var(--border);
372
+ }
373
+ .rounded {
374
+ border-radius: 4px;
375
+ }
376
+ .rounded-lg {
377
+ border-radius: 8px;
378
+ }
379
+ .rounded-xl {
380
+ border-radius: 12px;
381
+ }
180
382
 
181
383
  /* Interaction utilities */
182
- .cursor-pointer { cursor: pointer; }
183
- .cursor-not-allowed { cursor: not-allowed; }
184
- .select-none { user-select: none; }
185
- .pointer-events-none { pointer-events: none; }
186
- .hover\:underline:hover { text-decoration: underline; }
384
+ .cursor-pointer {
385
+ cursor: pointer;
386
+ }
387
+ .cursor-not-allowed {
388
+ cursor: not-allowed;
389
+ }
390
+ .select-none {
391
+ user-select: none;
392
+ }
393
+ .pointer-events-none {
394
+ pointer-events: none;
395
+ }
396
+ .hover\:underline:hover {
397
+ text-decoration: underline;
398
+ }
187
399
 
188
400
  /* Opacity utilities */
189
- .opacity-50 { opacity: 0.5; }
190
- .disabled\:opacity-50:disabled { opacity: 0.5; }
401
+ .opacity-50 {
402
+ opacity: 0.5;
403
+ }
404
+ .disabled\:opacity-50:disabled {
405
+ opacity: 0.5;
406
+ }
191
407
 
192
408
  /* Shadow utilities */
193
- .shadow-sm { box-shadow: 0 1px 2px 0 rgb(0 0 0 / 0.05); }
194
- .shadow-xl { box-shadow: 0 20px 25px -5px rgb(0 0 0 / 0.1), 0 8px 10px -6px rgb(0 0 0 / 0.1); }
409
+ .shadow-sm {
410
+ box-shadow: 0 1px 2px 0 rgb(0 0 0 / 0.05);
411
+ }
412
+ .shadow-xl {
413
+ box-shadow:
414
+ 0 20px 25px -5px rgb(0 0 0 / 0.1),
415
+ 0 8px 10px -6px rgb(0 0 0 / 0.1);
416
+ }
195
417
 
196
418
  /* Board layout editing */
197
- .icon-btn { display: inline-flex; align-items: center; justify-content: center; width: 22px; height: 22px; padding: 0; flex-shrink: 0; border: 1px solid transparent; background: none; color: var(--ink-muted); cursor: pointer; }
198
- .icon-btn:hover { color: var(--ink); border-color: var(--border); }
199
- .icon-btn[aria-pressed="true"] { background: var(--accent); color: var(--on-accent); }
200
- .plus-btn { font: 16px var(--font-mono); border: 1px dashed var(--ink-muted); background: transparent; color: var(--ink-muted); cursor: pointer; padding: 0; }
201
- .plus-btn:hover { border-style: solid; border-color: var(--ink); color: var(--ink); }
202
- .axis-drag { cursor: grab; touch-action: none; }
203
- .axis-sub { display: block; font: 400 10.5px var(--font-mono); color: var(--ink-muted); text-transform: none; letter-spacing: 0; margin-top: 2px; }
204
- .inline-input { font: inherit; text-transform: inherit; letter-spacing: inherit; color: var(--ink); background: transparent; border: 0; border-bottom: 1px solid var(--accent); padding: 0; width: 100%; min-width: 0; outline: none; }
205
-
206
- .drawer { position: fixed; top: 48px; right: 0; bottom: 0; width: 440px; max-width: 100vw; background: var(--bg); border-left: 1px solid var(--ink); overflow-y: auto; z-index: 40; }
207
- .drawer-header { position: sticky; top: 0; display: flex; align-items: baseline; gap: 10px; padding: 16px 20px 12px; background: var(--bg); border-bottom: 1px solid var(--border); z-index: 1; }
208
- .drawer-header h3 { margin: 0; font: 500 17px var(--font-sans); color: var(--ink); }
209
- .drawer-kind { font: 11px var(--font-mono); color: var(--ink-muted); }
210
- .drawer-body { padding: 16px 20px 24px; display: flex; flex-direction: column; gap: 18px; }
211
- .drawer-section { display: flex; flex-direction: column; gap: 8px; padding-top: 16px; border-top: 1px dashed var(--border); }
212
- .drawer-section h4 { margin: 0; font: 500 12px var(--font-mono); color: var(--ink); }
213
- .drawer-footer { display: flex; align-items: center; gap: 12px; padding-top: 16px; border-top: 1px solid var(--border); }
214
- .field { display: flex; flex-direction: column; gap: 4px; }
215
- .field-label { font: 11px var(--font-mono); color: var(--ink-muted); }
216
- .input { font: 13px var(--font-mono); color: var(--ink); background: transparent; border: 1px solid var(--border); padding: 5px 8px; min-width: 0; }
217
- .input-sans { font-family: var(--font-sans); font-size: 14px; }
218
- .help { margin: 0; font-size: 13px; color: var(--ink-muted); }
219
- .notice { font-size: 13px; padding: 10px 12px; border-left: 3px solid var(--accent); color: var(--ink); }
220
- .warn { font-size: 13px; padding: 8px 10px; border: 1px dashed var(--ink-muted); color: var(--ink); }
221
- .segs { display: inline-flex; flex-wrap: wrap; }
222
- .seg { font: 12px var(--font-mono); color: var(--ink); background: transparent; border: 1px solid var(--border); padding: 5px 10px; margin-left: -1px; cursor: pointer; }
223
- .seg:first-child { margin-left: 0; }
224
- .seg[aria-pressed="true"] { background: var(--ink); color: var(--bg); border-color: var(--ink); position: relative; }
225
- .cond-row { display: grid; grid-template-columns: minmax(0, 1fr) 118px minmax(0, 1fr) 22px; gap: 6px; }
226
- .write-row { display: grid; grid-template-columns: 84px minmax(0, 1fr) minmax(0, 1fr) 22px; gap: 6px; }
227
- .btn { font: 12px var(--font-mono); color: var(--ink); background: transparent; border: 1px solid var(--border); padding: 6px 12px; cursor: pointer; }
228
- .btn:hover { border-color: var(--ink); }
229
- .btn-primary { background: var(--ink); color: var(--bg); border-color: var(--ink); }
230
- .btn:disabled { opacity: 0.4; cursor: not-allowed; }
231
- .link-btn { font: 12px var(--font-mono); color: var(--ink); background: none; border: 0; padding: 2px 0; cursor: pointer; text-decoration: underline; text-underline-offset: 3px; text-decoration-color: var(--border); }
232
- .link-btn:hover { text-decoration-color: var(--ink); }
419
+ .icon-btn {
420
+ display: inline-flex;
421
+ align-items: center;
422
+ justify-content: center;
423
+ width: 22px;
424
+ height: 22px;
425
+ padding: 0;
426
+ flex-shrink: 0;
427
+ border: 1px solid transparent;
428
+ background: none;
429
+ color: var(--ink-muted);
430
+ cursor: pointer;
431
+ }
432
+ .icon-btn:hover {
433
+ color: var(--ink);
434
+ border-color: var(--border);
435
+ }
436
+ .icon-btn[aria-pressed='true'] {
437
+ background: var(--accent);
438
+ color: var(--on-accent);
439
+ }
440
+ .plus-btn {
441
+ font: 16px var(--font-mono);
442
+ border: 1px dashed var(--ink-muted);
443
+ background: transparent;
444
+ color: var(--ink-muted);
445
+ cursor: pointer;
446
+ padding: 0;
447
+ }
448
+ .plus-btn:hover {
449
+ border-style: solid;
450
+ border-color: var(--ink);
451
+ color: var(--ink);
452
+ }
453
+ .axis-drag {
454
+ cursor: grab;
455
+ touch-action: none;
456
+ }
457
+ .axis-sub {
458
+ display: block;
459
+ font: 400 10.5px var(--font-mono);
460
+ color: var(--ink-muted);
461
+ text-transform: none;
462
+ letter-spacing: 0;
463
+ margin-top: 2px;
464
+ }
465
+ .inline-input {
466
+ font: inherit;
467
+ text-transform: inherit;
468
+ letter-spacing: inherit;
469
+ color: var(--ink);
470
+ background: transparent;
471
+ border: 0;
472
+ border-bottom: 1px solid var(--accent);
473
+ padding: 0;
474
+ width: 100%;
475
+ min-width: 0;
476
+ outline: none;
477
+ }
478
+
479
+ .drawer {
480
+ position: fixed;
481
+ top: 48px;
482
+ right: 0;
483
+ bottom: 0;
484
+ width: 440px;
485
+ max-width: 100vw;
486
+ background: var(--bg);
487
+ border-left: 1px solid var(--ink);
488
+ overflow-y: auto;
489
+ z-index: 40;
490
+ }
491
+ .drawer-header {
492
+ position: sticky;
493
+ top: 0;
494
+ display: flex;
495
+ align-items: baseline;
496
+ gap: 10px;
497
+ padding: 16px 20px 12px;
498
+ background: var(--bg);
499
+ border-bottom: 1px solid var(--border);
500
+ z-index: 1;
501
+ }
502
+ .drawer-header h3 {
503
+ margin: 0;
504
+ font: 500 17px var(--font-sans);
505
+ color: var(--ink);
506
+ }
507
+ .drawer-kind {
508
+ font: 11px var(--font-mono);
509
+ color: var(--ink-muted);
510
+ }
511
+ .drawer-body {
512
+ padding: 16px 20px 24px;
513
+ display: flex;
514
+ flex-direction: column;
515
+ gap: 18px;
516
+ }
517
+ .drawer-section {
518
+ display: flex;
519
+ flex-direction: column;
520
+ gap: 8px;
521
+ padding-top: 16px;
522
+ border-top: 1px dashed var(--border);
523
+ }
524
+ .drawer-section h4 {
525
+ margin: 0;
526
+ font: 500 12px var(--font-mono);
527
+ color: var(--ink);
528
+ }
529
+ .drawer-footer {
530
+ display: flex;
531
+ align-items: center;
532
+ gap: 12px;
533
+ padding-top: 16px;
534
+ border-top: 1px solid var(--border);
535
+ }
536
+ .field {
537
+ display: flex;
538
+ flex-direction: column;
539
+ gap: 4px;
540
+ }
541
+ .field-label {
542
+ font: 11px var(--font-mono);
543
+ color: var(--ink-muted);
544
+ }
545
+ .input {
546
+ font: 13px var(--font-mono);
547
+ color: var(--ink);
548
+ background: transparent;
549
+ border: 1px solid var(--border);
550
+ padding: 5px 8px;
551
+ min-width: 0;
552
+ }
553
+ .input-sans {
554
+ font-family: var(--font-sans);
555
+ font-size: 14px;
556
+ }
557
+ .help {
558
+ margin: 0;
559
+ font-size: 13px;
560
+ color: var(--ink-muted);
561
+ }
562
+ .notice {
563
+ font-size: 13px;
564
+ padding: 10px 12px;
565
+ border-left: 3px solid var(--accent);
566
+ color: var(--ink);
567
+ }
568
+ .warn {
569
+ font-size: 13px;
570
+ padding: 8px 10px;
571
+ border: 1px dashed var(--ink-muted);
572
+ color: var(--ink);
573
+ }
574
+ .segs {
575
+ display: inline-flex;
576
+ flex-wrap: wrap;
577
+ }
578
+ .seg {
579
+ font: 12px var(--font-mono);
580
+ color: var(--ink);
581
+ background: transparent;
582
+ border: 1px solid var(--border);
583
+ padding: 5px 10px;
584
+ margin-left: -1px;
585
+ cursor: pointer;
586
+ }
587
+ .seg:first-child {
588
+ margin-left: 0;
589
+ }
590
+ .seg[aria-pressed='true'] {
591
+ background: var(--ink);
592
+ color: var(--bg);
593
+ border-color: var(--ink);
594
+ position: relative;
595
+ }
596
+ .cond-row {
597
+ display: grid;
598
+ grid-template-columns: minmax(0, 1fr) 118px minmax(0, 1fr) 22px;
599
+ gap: 6px;
600
+ }
601
+ .write-row {
602
+ display: grid;
603
+ grid-template-columns: 84px minmax(0, 1fr) minmax(0, 1fr) 22px;
604
+ gap: 6px;
605
+ }
606
+ .btn {
607
+ font: 12px var(--font-mono);
608
+ color: var(--ink);
609
+ background: transparent;
610
+ border: 1px solid var(--border);
611
+ padding: 6px 12px;
612
+ cursor: pointer;
613
+ }
614
+ .btn:hover {
615
+ border-color: var(--ink);
616
+ }
617
+ .btn-primary {
618
+ background: var(--ink);
619
+ color: var(--bg);
620
+ border-color: var(--ink);
621
+ }
622
+ .btn:disabled {
623
+ opacity: 0.4;
624
+ cursor: not-allowed;
625
+ }
626
+ .link-btn {
627
+ font: 12px var(--font-mono);
628
+ color: var(--ink);
629
+ background: none;
630
+ border: 0;
631
+ padding: 2px 0;
632
+ cursor: pointer;
633
+ text-decoration: underline;
634
+ text-underline-offset: 3px;
635
+ text-decoration-color: var(--border);
636
+ }
637
+ .link-btn:hover {
638
+ text-decoration-color: var(--ink);
639
+ }
640
+
641
+ /* The item is a document: one reading column, with a visible property hierarchy. */
642
+ .item-page {
643
+ max-width: 860px;
644
+ margin: 0 auto;
645
+ padding: 32px 24px 64px;
646
+ color: var(--ink);
647
+ font: 14px/1.6 var(--font-sans);
648
+ overflow-wrap: anywhere;
649
+ }
650
+ .item-heading {
651
+ display: flex;
652
+ justify-content: space-between;
653
+ align-items: center;
654
+ gap: 20px;
655
+ }
656
+ .item-heading h1 {
657
+ margin: 0;
658
+ font-size: 28px;
659
+ font-weight: 500;
660
+ line-height: 1.3;
661
+ }
662
+ .item-slug,
663
+ .item-status {
664
+ color: var(--ink-muted);
665
+ margin: 0 0 8px;
666
+ }
667
+ .item-status:empty {
668
+ display: none;
669
+ }
670
+ .item-page h2 {
671
+ font-size: 17px;
672
+ font-weight: 500;
673
+ margin: 24px 0 12px;
674
+ }
675
+ .item-session {
676
+ min-width: 0;
677
+ border: 0;
678
+ padding: 0;
679
+ margin: 0;
680
+ }
681
+ .item-page button {
682
+ border: 1px solid var(--border);
683
+ padding: 6px 12px;
684
+ color: var(--ink);
685
+ background: transparent;
686
+ font: inherit;
687
+ cursor: pointer;
688
+ }
689
+ .item-page button:hover {
690
+ border-color: var(--ink);
691
+ }
692
+ .item-page button:disabled {
693
+ opacity: 0.5;
694
+ cursor: not-allowed;
695
+ }
696
+ .item-page :focus-visible {
697
+ outline: 2px solid var(--accent);
698
+ outline-offset: 3px;
699
+ }
700
+ .item-page summary {
701
+ cursor: pointer;
702
+ padding: 8px 0;
703
+ }
704
+ .item-page code,
705
+ .item-page pre {
706
+ font-family: var(--font-mono);
707
+ white-space: pre-wrap;
708
+ }
709
+ .property-type {
710
+ color: var(--ink-muted);
711
+ font: 12px var(--font-sans);
712
+ margin: 0 8px;
713
+ }
714
+ .property-container {
715
+ border-left: 2px solid var(--border);
716
+ padding-left: 12px;
717
+ margin: 8px 0;
718
+ min-width: 0;
719
+ }
720
+ .property-children {
721
+ padding-left: 12px;
722
+ min-width: 0;
723
+ }
724
+ .property-scalar {
725
+ display: flex;
726
+ flex-wrap: wrap;
727
+ align-items: baseline;
728
+ gap: 4px;
729
+ padding: 7px 0;
730
+ }
731
+ .property-scalar strong {
732
+ font-weight: 500;
733
+ }
734
+ .property-scalar code {
735
+ min-width: 0;
736
+ }
737
+ .property-edit-entry {
738
+ display: grid;
739
+ grid-template-columns: minmax(0, 1fr) auto;
740
+ gap: 12px;
741
+ align-items: start;
742
+ padding: 8px 0;
743
+ border-bottom: 1px solid var(--border);
744
+ }
745
+ .property-edit-entry > button {
746
+ margin-top: 6px;
747
+ }
748
+ .property-field,
749
+ .item-page label {
750
+ display: flex;
751
+ flex-direction: column;
752
+ gap: 4px;
753
+ min-width: 0;
754
+ }
755
+ .property-field input,
756
+ .property-field textarea,
757
+ .item-page select,
758
+ .property-add input,
759
+ .item-document textarea {
760
+ color: var(--ink);
761
+ background: var(--bg);
762
+ border: 1px solid var(--border);
763
+ padding: 8px;
764
+ font: 14px/1.5 var(--font-mono);
765
+ max-width: 100%;
766
+ }
767
+ .property-field input[type='checkbox'] {
768
+ width: 20px;
769
+ height: 20px;
770
+ }
771
+ .property-field textarea,
772
+ .item-document textarea {
773
+ width: 100%;
774
+ resize: vertical;
775
+ box-sizing: border-box;
776
+ }
777
+ .property-field [aria-invalid='true'] {
778
+ border-color: var(--ink);
779
+ border-width: 2px;
780
+ }
781
+ .property-add {
782
+ margin: 12px 0;
783
+ }
784
+ .property-add-form {
785
+ display: flex;
786
+ flex-wrap: wrap;
787
+ align-items: end;
788
+ gap: 8px;
789
+ padding: 12px;
790
+ border: 1px dashed var(--border);
791
+ }
792
+ .property-add-form > span:first-child {
793
+ width: 100%;
794
+ }
795
+ .item-metadata,
796
+ .item-recovery {
797
+ margin-top: 24px;
798
+ padding-top: 12px;
799
+ border-top: 1px solid var(--border);
800
+ }
801
+ .item-metadata .property-scalar {
802
+ font-size: 12px;
803
+ }
804
+ .item-document {
805
+ margin-top: 16px;
806
+ line-height: 1.7;
807
+ }
808
+ .item-recovery pre {
809
+ padding: 16px;
810
+ border: 1px solid var(--border);
811
+ border-radius: 4px;
812
+ background: color-mix(in srgb, var(--ink) 4%, var(--bg));
813
+ overflow-x: auto;
814
+ }
815
+ .item-recovery pre code {
816
+ display: block;
817
+ white-space: pre;
818
+ overflow-wrap: normal;
819
+ font-size: 13px;
820
+ line-height: 1.6;
821
+ }
822
+ .item-document img {
823
+ max-width: 100%;
824
+ }
825
+ .item-actions {
826
+ display: flex;
827
+ flex-wrap: wrap;
828
+ gap: 10px;
829
+ margin-top: 20px;
830
+ }
831
+ .item-actions button[data-testid='item-save'] {
832
+ background: var(--ink);
833
+ color: var(--bg);
834
+ }
835
+ .item-page [role='alert'] {
836
+ padding: 8px 12px;
837
+ border-left: 3px solid var(--accent);
838
+ }
839
+ @media (max-width: 540px) {
840
+ .item-page {
841
+ padding: 20px 12px 40px;
842
+ }
843
+ .property-children {
844
+ padding-left: 4px;
845
+ }
846
+ .property-edit-entry {
847
+ gap: 6px;
848
+ }
849
+ .property-edit-entry > button {
850
+ padding: 6px;
851
+ }
852
+ }