@awesome-markdown/board-ui 0.0.0-stage → 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 (188) hide show
  1. package/README.md +76 -2
  2. package/dist/board/Board.d.ts +24 -0
  3. package/dist/board/Board.d.ts.map +1 -0
  4. package/dist/board/Board.js +179 -0
  5. package/dist/board/Board.js.map +1 -0
  6. package/dist/board/Cell.d.ts +23 -0
  7. package/dist/board/Cell.d.ts.map +1 -0
  8. package/dist/board/Cell.js +150 -0
  9. package/dist/board/Cell.js.map +1 -0
  10. package/dist/board/ColumnHeader.d.ts +18 -0
  11. package/dist/board/ColumnHeader.d.ts.map +1 -0
  12. package/dist/board/ColumnHeader.js +31 -0
  13. package/dist/board/ColumnHeader.js.map +1 -0
  14. package/dist/board/HomelessItemCard.d.ts +15 -0
  15. package/dist/board/HomelessItemCard.d.ts.map +1 -0
  16. package/dist/board/HomelessItemCard.js +37 -0
  17. package/dist/board/HomelessItemCard.js.map +1 -0
  18. package/dist/board/HomelessPanel.d.ts +17 -0
  19. package/dist/board/HomelessPanel.d.ts.map +1 -0
  20. package/dist/board/HomelessPanel.js +26 -0
  21. package/dist/board/HomelessPanel.js.map +1 -0
  22. package/dist/board/ItemCard.d.ts +21 -0
  23. package/dist/board/ItemCard.d.ts.map +1 -0
  24. package/dist/board/ItemCard.js +97 -0
  25. package/dist/board/ItemCard.js.map +1 -0
  26. package/dist/board/SwimlaneRow.d.ts +23 -0
  27. package/dist/board/SwimlaneRow.d.ts.map +1 -0
  28. package/dist/board/SwimlaneRow.js +30 -0
  29. package/dist/board/SwimlaneRow.js.map +1 -0
  30. package/dist/board/dnd/boardDnd.d.ts +15 -0
  31. package/dist/board/dnd/boardDnd.d.ts.map +1 -0
  32. package/dist/board/dnd/boardDnd.js +69 -0
  33. package/dist/board/dnd/boardDnd.js.map +1 -0
  34. package/dist/board/dnd/dragTypes.d.ts +24 -0
  35. package/dist/board/dnd/dragTypes.d.ts.map +1 -0
  36. package/dist/board/dnd/dragTypes.js +22 -0
  37. package/dist/board/dnd/dragTypes.js.map +1 -0
  38. package/dist/board/dnd/mutateDragDrop.d.ts +35 -0
  39. package/dist/board/dnd/mutateDragDrop.d.ts.map +1 -0
  40. package/dist/board/dnd/mutateDragDrop.js +97 -0
  41. package/dist/board/dnd/mutateDragDrop.js.map +1 -0
  42. package/dist/board/dnd/onDragEnd.d.ts +24 -0
  43. package/dist/board/dnd/onDragEnd.d.ts.map +1 -0
  44. package/dist/board/dnd/onDragEnd.js +47 -0
  45. package/dist/board/dnd/onDragEnd.js.map +1 -0
  46. package/dist/board/layout/AxisBehavior.d.ts +36 -0
  47. package/dist/board/layout/AxisBehavior.d.ts.map +1 -0
  48. package/dist/board/layout/AxisBehavior.js +86 -0
  49. package/dist/board/layout/AxisBehavior.js.map +1 -0
  50. package/dist/board/layout/AxisDrawer.d.ts +17 -0
  51. package/dist/board/layout/AxisDrawer.d.ts.map +1 -0
  52. package/dist/board/layout/AxisDrawer.js +40 -0
  53. package/dist/board/layout/AxisDrawer.js.map +1 -0
  54. package/dist/board/layout/BoardDrawer.d.ts +11 -0
  55. package/dist/board/layout/BoardDrawer.d.ts.map +1 -0
  56. package/dist/board/layout/BoardDrawer.js +27 -0
  57. package/dist/board/layout/BoardDrawer.js.map +1 -0
  58. package/dist/board/layout/Drawer.d.ts +19 -0
  59. package/dist/board/layout/Drawer.d.ts.map +1 -0
  60. package/dist/board/layout/Drawer.js +18 -0
  61. package/dist/board/layout/Drawer.js.map +1 -0
  62. package/dist/board/layout/FilterEditor.d.ts +12 -0
  63. package/dist/board/layout/FilterEditor.d.ts.map +1 -0
  64. package/dist/board/layout/FilterEditor.js +11 -0
  65. package/dist/board/layout/FilterEditor.js.map +1 -0
  66. package/dist/board/layout/InlineControls.d.ts +22 -0
  67. package/dist/board/layout/InlineControls.d.ts.map +1 -0
  68. package/dist/board/layout/InlineControls.js +39 -0
  69. package/dist/board/layout/InlineControls.js.map +1 -0
  70. package/dist/board/layout/SortableAxis.d.ts +28 -0
  71. package/dist/board/layout/SortableAxis.d.ts.map +1 -0
  72. package/dist/board/layout/SortableAxis.js +39 -0
  73. package/dist/board/layout/SortableAxis.js.map +1 -0
  74. package/dist/board/layout/axis-defaults.d.ts +22 -0
  75. package/dist/board/layout/axis-defaults.d.ts.map +1 -0
  76. package/dist/board/layout/axis-defaults.js +37 -0
  77. package/dist/board/layout/axis-defaults.js.map +1 -0
  78. package/dist/board/layout/filter-draft.d.ts +21 -0
  79. package/dist/board/layout/filter-draft.d.ts.map +1 -0
  80. package/dist/board/layout/filter-draft.js +112 -0
  81. package/dist/board/layout/filter-draft.js.map +1 -0
  82. package/dist/board/layout/useBoardLayout.d.ts +27 -0
  83. package/dist/board/layout/useBoardLayout.d.ts.map +1 -0
  84. package/dist/board/layout/useBoardLayout.js +92 -0
  85. package/dist/board/layout/useBoardLayout.js.map +1 -0
  86. package/dist/breadcrumb.d.ts +22 -0
  87. package/dist/breadcrumb.d.ts.map +1 -0
  88. package/dist/breadcrumb.js +15 -0
  89. package/dist/breadcrumb.js.map +1 -0
  90. package/dist/components/ConflictBanner.d.ts +12 -0
  91. package/dist/components/ConflictBanner.d.ts.map +1 -0
  92. package/dist/components/ConflictBanner.js +47 -0
  93. package/dist/components/ConflictBanner.js.map +1 -0
  94. package/dist/components/ConflictDiff.d.ts +13 -0
  95. package/dist/components/ConflictDiff.d.ts.map +1 -0
  96. package/dist/components/ConflictDiff.js +97 -0
  97. package/dist/components/ConflictDiff.js.map +1 -0
  98. package/dist/components/ConflictPanel.d.ts +16 -0
  99. package/dist/components/ConflictPanel.d.ts.map +1 -0
  100. package/dist/components/ConflictPanel.js +53 -0
  101. package/dist/components/ConflictPanel.js.map +1 -0
  102. package/dist/components/ItemRecovery.d.ts +9 -0
  103. package/dist/components/ItemRecovery.d.ts.map +1 -0
  104. package/dist/components/ItemRecovery.js +48 -0
  105. package/dist/components/ItemRecovery.js.map +1 -0
  106. package/dist/components/PropertyTree.d.ts +18 -0
  107. package/dist/components/PropertyTree.d.ts.map +1 -0
  108. package/dist/components/PropertyTree.js +109 -0
  109. package/dist/components/PropertyTree.js.map +1 -0
  110. package/dist/index.d.ts +32 -0
  111. package/dist/index.d.ts.map +1 -0
  112. package/dist/index.js +37 -0
  113. package/dist/index.js.map +1 -0
  114. package/dist/lib/derive-summary.d.ts +9 -0
  115. package/dist/lib/derive-summary.d.ts.map +1 -0
  116. package/dist/lib/derive-summary.js +27 -0
  117. package/dist/lib/derive-summary.js.map +1 -0
  118. package/dist/lib/item-board.d.ts +2 -0
  119. package/dist/lib/item-board.d.ts.map +1 -0
  120. package/dist/lib/item-board.js +7 -0
  121. package/dist/lib/item-board.js.map +1 -0
  122. package/dist/lib/patch-visible-item.d.ts +4 -0
  123. package/dist/lib/patch-visible-item.d.ts.map +1 -0
  124. package/dist/lib/patch-visible-item.js +10 -0
  125. package/dist/lib/patch-visible-item.js.map +1 -0
  126. package/dist/lib/property-display.d.ts +17 -0
  127. package/dist/lib/property-display.d.ts.map +1 -0
  128. package/dist/lib/property-display.js +86 -0
  129. package/dist/lib/property-display.js.map +1 -0
  130. package/dist/lib/property-tree.d.ts +23 -0
  131. package/dist/lib/property-tree.d.ts.map +1 -0
  132. package/dist/lib/property-tree.js +109 -0
  133. package/dist/lib/property-tree.js.map +1 -0
  134. package/dist/pages/BoardListPage.d.ts +9 -0
  135. package/dist/pages/BoardListPage.d.ts.map +1 -0
  136. package/dist/pages/BoardListPage.js +113 -0
  137. package/dist/pages/BoardListPage.js.map +1 -0
  138. package/dist/pages/BoardPage.d.ts +7 -0
  139. package/dist/pages/BoardPage.d.ts.map +1 -0
  140. package/dist/pages/BoardPage.js +37 -0
  141. package/dist/pages/BoardPage.js.map +1 -0
  142. package/dist/pages/ItemEditorPage.d.ts +3 -0
  143. package/dist/pages/ItemEditorPage.d.ts.map +1 -0
  144. package/dist/pages/ItemEditorPage.js +236 -0
  145. package/dist/pages/ItemEditorPage.js.map +1 -0
  146. package/dist/provider/ProviderContext.d.ts +17 -0
  147. package/dist/provider/ProviderContext.d.ts.map +1 -0
  148. package/dist/provider/ProviderContext.js +21 -0
  149. package/dist/provider/ProviderContext.js.map +1 -0
  150. package/dist/router/RouterAdapter.d.ts +43 -0
  151. package/dist/router/RouterAdapter.d.ts.map +1 -0
  152. package/dist/router/RouterAdapter.js +21 -0
  153. package/dist/router/RouterAdapter.js.map +1 -0
  154. package/dist/shell/SyncStatusDot.d.ts +8 -0
  155. package/dist/shell/SyncStatusDot.d.ts.map +1 -0
  156. package/dist/shell/SyncStatusDot.js +58 -0
  157. package/dist/shell/SyncStatusDot.js.map +1 -0
  158. package/dist/shell/ThemeToggle.d.ts +8 -0
  159. package/dist/shell/ThemeToggle.d.ts.map +1 -0
  160. package/dist/shell/ThemeToggle.js +21 -0
  161. package/dist/shell/ThemeToggle.js.map +1 -0
  162. package/dist/state/theme-store.d.ts +17 -0
  163. package/dist/state/theme-store.d.ts.map +1 -0
  164. package/dist/state/theme-store.js +58 -0
  165. package/dist/state/theme-store.js.map +1 -0
  166. package/dist/state/useBoardRender.d.ts +16 -0
  167. package/dist/state/useBoardRender.d.ts.map +1 -0
  168. package/dist/state/useBoardRender.js +53 -0
  169. package/dist/state/useBoardRender.js.map +1 -0
  170. package/dist/state/useProviderSubscribe.d.ts +22 -0
  171. package/dist/state/useProviderSubscribe.d.ts.map +1 -0
  172. package/dist/state/useProviderSubscribe.js +48 -0
  173. package/dist/state/useProviderSubscribe.js.map +1 -0
  174. package/dist/sync/conflict-api.d.ts +16 -0
  175. package/dist/sync/conflict-api.d.ts.map +1 -0
  176. package/dist/sync/conflict-api.js +35 -0
  177. package/dist/sync/conflict-api.js.map +1 -0
  178. package/dist/sync/conflict-store.d.ts +44 -0
  179. package/dist/sync/conflict-store.d.ts.map +1 -0
  180. package/dist/sync/conflict-store.js +159 -0
  181. package/dist/sync/conflict-store.js.map +1 -0
  182. package/fonts/InterTight-Medium.woff2 +0 -0
  183. package/fonts/InterTight-Regular.woff2 +0 -0
  184. package/fonts/JetBrainsMono-Medium.woff2 +0 -0
  185. package/fonts/JetBrainsMono-Regular.woff2 +0 -0
  186. package/fonts/LICENSE +14 -0
  187. package/package.json +59 -3
  188. package/styles.css +852 -0
package/styles.css ADDED
@@ -0,0 +1,852 @@
1
+ /*
2
+ * @awesome-markdown/board-ui styles — design tokens (light/dark), self-hosted
3
+ * fonts, layout utilities and board-editing classes. Import once from the host:
4
+ * import "@awesome-markdown/board-ui/styles.css";
5
+ */
6
+
7
+ /* Self-hosted fonts (resolved relative to this file by the host bundler) */
8
+ @font-face {
9
+ font-family: 'JetBrains Mono';
10
+ src: url('./fonts/JetBrainsMono-Regular.woff2') format('woff2');
11
+ font-weight: 400;
12
+ font-style: normal;
13
+ font-display: swap;
14
+ }
15
+
16
+ @font-face {
17
+ font-family: 'JetBrains Mono';
18
+ src: url('./fonts/JetBrainsMono-Medium.woff2') format('woff2');
19
+ font-weight: 500;
20
+ font-style: normal;
21
+ font-display: swap;
22
+ }
23
+
24
+ @font-face {
25
+ font-family: 'Inter Tight';
26
+ src: url('./fonts/InterTight-Regular.woff2') format('woff2');
27
+ font-weight: 400;
28
+ font-style: normal;
29
+ font-display: swap;
30
+ }
31
+
32
+ @font-face {
33
+ font-family: 'Inter Tight';
34
+ src: url('./fonts/InterTight-Medium.woff2') format('woff2');
35
+ font-weight: 500;
36
+ font-style: normal;
37
+ font-display: swap;
38
+ }
39
+
40
+ :root {
41
+ --bg: #fafaf7;
42
+ --surface: #fafaf7;
43
+ --ink: #111111;
44
+ --ink-muted: #6b6760;
45
+ --border: #e6e4dd;
46
+ --accent: #ffe94a;
47
+ --on-accent: #111111;
48
+ --font-mono: 'JetBrains Mono', monospace;
49
+ --font-sans: 'Inter Tight', sans-serif;
50
+ }
51
+
52
+ [data-theme='dark'] {
53
+ --bg: #0e0e0e;
54
+ --surface: #0e0e0e;
55
+ --ink: #e8e8e8;
56
+ --ink-muted: #8a867e;
57
+ --border: #262626;
58
+ --accent: #f5e663;
59
+ --on-accent: #111111;
60
+ }
61
+
62
+ *,
63
+ *::before,
64
+ *::after {
65
+ box-sizing: border-box;
66
+ }
67
+ body {
68
+ margin: 0;
69
+ background: var(--bg);
70
+ color: var(--ink);
71
+ font-family: var(--font-sans);
72
+ font-size: 14px;
73
+ }
74
+
75
+ @keyframes pulse {
76
+ 0%,
77
+ 100% {
78
+ opacity: 1;
79
+ }
80
+ 50% {
81
+ opacity: 0.4;
82
+ }
83
+ }
84
+
85
+ /* Base resets */
86
+ button,
87
+ input,
88
+ select,
89
+ textarea {
90
+ border-radius: 0;
91
+ }
92
+
93
+ :focus-visible {
94
+ outline: 2px solid var(--accent);
95
+ outline-offset: 2px;
96
+ }
97
+
98
+ /* Layout utilities */
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
+ }
187
+
188
+ /* Spacing utilities */
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
+ }
269
+
270
+ /* Typography utilities */
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
+ }
310
+
311
+ /* Display utilities */
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
+ }
336
+
337
+ /* Position utilities */
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
+ }
362
+
363
+ /* Border utilities */
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
+ }
382
+
383
+ /* Interaction utilities */
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
+ }
399
+
400
+ /* Opacity utilities */
401
+ .opacity-50 {
402
+ opacity: 0.5;
403
+ }
404
+ .disabled\:opacity-50:disabled {
405
+ opacity: 0.5;
406
+ }
407
+
408
+ /* Shadow utilities */
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
+ }
417
+
418
+ /* Board layout editing */
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
+ }