@hachej/boring-ui-kit 0.3.2 → 0.4.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 (55) hide show
  1. package/README.md +46 -18
  2. package/THIRD_PARTY_NOTICES.md +35 -0
  3. package/dist/canvas-editor-native.d.ts +4 -1
  4. package/dist/canvas-editor-native.js +8 -6
  5. package/dist/canvas-editor.js +1 -1
  6. package/dist/canvas-proposals.d.ts +3 -1
  7. package/dist/canvas-proposals.js +4 -3
  8. package/dist/experience-document-viewer.d.ts +3 -0
  9. package/dist/experience-document-viewer.js +6 -5
  10. package/dist/experience.d.ts +3 -0
  11. package/dist/experience.js +2 -1
  12. package/dist/file-tree-view.d.ts +76 -3
  13. package/dist/file-tree-view.js +172 -39
  14. package/dist/file-tree.d.ts +3 -0
  15. package/dist/file-tree.js +17 -2
  16. package/dist/html-viewer.d.ts +4 -0
  17. package/dist/html-viewer.js +5 -3
  18. package/dist/markdown-autosave.d.ts +13 -0
  19. package/dist/markdown-autosave.js +94 -0
  20. package/dist/markdown-editor.d.ts +16 -0
  21. package/dist/markdown-editor.js +81 -17
  22. package/dist/markdown-extensions.js +9 -1
  23. package/dist/markdown-proposal-diff.d.ts +2 -1
  24. package/dist/markdown-proposal-diff.js +3 -2
  25. package/dist/markdown-safety.js +3 -1
  26. package/dist/native-chat.js +1 -1
  27. package/dist/remote-chat.js +5 -1
  28. package/dist/text-buffer.js +3 -2
  29. package/dist/text-draft-controls.d.ts +3 -1
  30. package/dist/text-draft-controls.js +3 -2
  31. package/dist/viewer-components.d.ts +14 -0
  32. package/dist/viewer-components.js +1 -0
  33. package/package.json +4 -4
  34. package/r/app-shell.json +39 -20
  35. package/r/button.json +19 -11
  36. package/r/dock.json +2 -2
  37. package/r/documents.json +17 -14
  38. package/r/feedback-preview.json +8 -2
  39. package/r/feedback.json +46 -325
  40. package/r/file-tree.json +14 -6
  41. package/r/html-viewer.json +8 -42
  42. package/r/markdown-editor.json +38 -87
  43. package/r/pi-ambient.json +15 -8
  44. package/r/pi-app.json +29 -18
  45. package/r/pi-chat.json +88 -69
  46. package/r/pi-workspace.json +7 -5
  47. package/r/provider-setup.json +9 -4
  48. package/r/registry.json +460 -888
  49. package/r/task-list-viewer.json +11 -21
  50. package/r/theme.json +23 -4
  51. package/r/version-history.json +24 -0
  52. package/r/viewers.json +139 -320
  53. package/styles/file-tree.css +41 -42
  54. package/dist/file-tree-shadcn.d.ts +0 -8
  55. package/dist/file-tree-shadcn.js +0 -14
package/r/registry.json CHANGED
@@ -7,7 +7,7 @@
7
7
  "name": "theme",
8
8
  "type": "registry:theme",
9
9
  "title": "Theme",
10
- "description": "The shadcn tokens every Tailwind item is styled with (neutral base, light and dark) and their Tailwind v4 `@theme inline` bindings. The CLI adds only the tokens the host does not define yet. The examples compile the same values (examples/studio/tailwind.mjs).",
10
+ "description": "The shadcn tokens every Tailwind item is styled with (neutral base, light and dark) and their Tailwind v4 `@theme inline` bindings. The CLI adds only the tokens the host does not define yet. The examples compile the same values (lab/studio/tailwind.mjs).",
11
11
  "cssVars": {
12
12
  "theme": {
13
13
  "color-background": "var(--background)",
@@ -33,7 +33,14 @@
33
33
  "radius-lg": "var(--radius)",
34
34
  "radius-xl": "calc(var(--radius) + 4px)",
35
35
  "radius-2xl": "calc(var(--radius) * 1.8)",
36
- "radius-3xl": "calc(var(--radius) * 2.2)"
36
+ "radius-3xl": "calc(var(--radius) * 2.2)",
37
+ "default-border-width": "var(--border-width, 1px)",
38
+ "shadow-xs": "var(--shadow-xs)",
39
+ "shadow-sm": "var(--shadow-sm)",
40
+ "shadow-md": "var(--shadow-md)",
41
+ "shadow-lg": "var(--shadow-lg)",
42
+ "shadow-xl": "var(--shadow-xl)",
43
+ "shadow-2xl": "var(--shadow-2xl)"
37
44
  },
38
45
  "light": {
39
46
  "radius": "0.75rem",
@@ -55,7 +62,13 @@
55
62
  "border": "oklch(0.92 0.004 286.32)",
56
63
  "input": "oklch(0.89 0.005 286.32)",
57
64
  "ring": "oklch(0.55 0.02 286.067)",
58
- "shell": "oklch(0.975 0.002 286)"
65
+ "shell": "oklch(0.975 0.002 286)",
66
+ "shadow-xs": "0 1px 2px 0 rgb(0 0 0 / 0.05)",
67
+ "shadow-sm": "0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1)",
68
+ "shadow-md": "0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1)",
69
+ "shadow-lg": "0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1)",
70
+ "shadow-xl": "0 20px 25px -5px rgb(0 0 0 / 0.1), 0 8px 10px -6px rgb(0 0 0 / 0.1)",
71
+ "shadow-2xl": "0 25px 50px -12px rgb(0 0 0 / 0.25)"
59
72
  },
60
73
  "dark": {
61
74
  "background": "oklch(0.175 0.006 285.885)",
@@ -76,7 +89,13 @@
76
89
  "border": "oklch(1 0 0 / 11%)",
77
90
  "input": "oklch(1 0 0 / 16%)",
78
91
  "ring": "oklch(0.65 0.02 286.067)",
79
- "shell": "oklch(0.13 0.005 285.823)"
92
+ "shell": "oklch(0.13 0.005 285.823)",
93
+ "shadow-xs": "0 1px 2px 0 rgb(0 0 0 / 0.05)",
94
+ "shadow-sm": "0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1)",
95
+ "shadow-md": "0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1)",
96
+ "shadow-lg": "0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1)",
97
+ "shadow-xl": "0 20px 25px -5px rgb(0 0 0 / 0.1), 0 8px 10px -6px rgb(0 0 0 / 0.1)",
98
+ "shadow-2xl": "0 25px 50px -12px rgb(0 0 0 / 0.25)"
80
99
  }
81
100
  }
82
101
  },
@@ -99,26 +118,34 @@
99
118
  },
100
119
  {
101
120
  "name": "button",
102
- "type": "registry:ui",
103
- "title": "Button",
104
- "description": "The one shadcn-style button of the Tailwind items (chat and viewer bar sizes, touch targets of 40-44px), IconButton, and the host actions every block takes (BlockAction, BlockActions, the shared ActionMenu), installed in components/button/ so it never overwrites the host's own button.",
121
+ "type": "registry:component",
122
+ "title": "Block actions",
123
+ "description": "Host action metadata composed with the consumer’s shadcn Button, Toggle and DropdownMenu.",
105
124
  "dependencies": [
106
125
  "react@^19.0.0",
126
+ "react-dom@^19.0.0",
107
127
  "lucide-react@^1.51.0"
108
128
  ],
109
129
  "registryDependencies": [
110
- "https://cdn.jsdelivr.net/npm/@hachej/boring-ui-kit@0.3.2/r/utils.json"
130
+ "https://cdn.jsdelivr.net/npm/@hachej/boring-ui-kit@0.4.0/r/utils.json",
131
+ "dropdown-menu",
132
+ "button",
133
+ "toggle",
134
+ "input",
135
+ "textarea",
136
+ "card",
137
+ "separator"
111
138
  ],
112
139
  "files": [
113
- {
114
- "path": "registry/button/button.tsx",
115
- "type": "registry:ui",
116
- "target": "components/button/button.tsx"
117
- },
118
140
  {
119
141
  "path": "registry/button/actions.tsx",
120
142
  "type": "registry:ui",
121
143
  "target": "components/button/actions.tsx"
144
+ },
145
+ {
146
+ "path": "registry/button/editor-controls.tsx",
147
+ "type": "registry:component",
148
+ "target": "components/button/editor-controls.tsx"
122
149
  }
123
150
  ]
124
151
  },
@@ -128,8 +155,8 @@
128
155
  "title": "Markdown editor",
129
156
  "description": "A host-owned styled wrapper over the concrete borrowed Markdown controller.",
130
157
  "dependencies": [
131
- "@hachej/boring-ui-kit@^0.3.2",
132
- "@hachej/boring-files@^0.3.2",
158
+ "@hachej/boring-ui-kit@^0.4.0",
159
+ "@hachej/boring-files@^0.4.0",
133
160
  "react@^19.0.0",
134
161
  "react-dom@^19.0.0",
135
162
  "marked@^17.0.6",
@@ -155,15 +182,10 @@
155
182
  ],
156
183
  "css": {
157
184
  ".boring-markdown-recipe[data-boring=\"markdown-editor\"]": {
158
- "background": "var(--boring-editor-background, var(--background, #fff))",
159
- "color": "var(--boring-editor-foreground, var(--foreground, #111827))",
160
- "border": "1px solid var(--boring-editor-border, var(--border, #d1d5db))",
161
- "border-radius": "var(--boring-editor-radius, var(--radius, 0.75rem))",
162
185
  "padding": "1rem",
163
186
  "display": "grid",
164
187
  "gap": "1rem",
165
- "min-width": "0",
166
- "font-family": "inherit"
188
+ "min-width": "0"
167
189
  },
168
190
  ".boring-markdown-recipe[data-boring=\"markdown-editor\"] > header": {
169
191
  "display": "flex",
@@ -173,45 +195,24 @@
173
195
  "gap": "0.75rem"
174
196
  },
175
197
  ".boring-markdown-recipe[data-boring=\"markdown-editor\"] > header > strong": {
176
- "margin": "0",
177
- "font-size": "1.125rem",
178
- "font-weight": "600"
198
+ "margin": "0"
179
199
  },
180
200
  ".boring-markdown-recipe[data-boring=\"markdown-editor\"] [role=\"toolbar\"]": {
181
201
  "display": "flex",
182
- "flex-wrap": "wrap",
202
+ "flex-wrap": "nowrap",
183
203
  "gap": "0.375rem"
184
204
  },
185
- ".boring-markdown-recipe[data-boring=\"markdown-editor\"] button": {
186
- "appearance": "none",
187
- "font": "inherit",
188
- "font-size": "0.875rem",
189
- "line-height": "1.4",
190
- "background": "var(--boring-editor-control-background, var(--background, #fff))",
191
- "color": "inherit",
192
- "border": "1px solid var(--boring-editor-border, var(--border, #d1d5db))",
193
- "border-radius": "0.375rem",
194
- "padding": "0.375rem 0.625rem",
195
- "cursor": "pointer"
196
- },
197
- ".boring-markdown-recipe[data-boring=\"markdown-editor\"] button[aria-pressed=\"true\"]": {
198
- "background": "var(--boring-editor-accent, var(--accent, #e5e7eb))",
199
- "font-weight": "600"
200
- },
201
- ".boring-markdown-recipe[data-boring=\"markdown-editor\"] button:disabled": {
202
- "opacity": "0.5",
203
- "cursor": "not-allowed"
204
- },
205
- ".boring-markdown-recipe[data-boring=\"markdown-editor\"] button:focus-visible, .boring-markdown-recipe[data-boring=\"markdown-editor\"] textarea:focus-visible": {
206
- "outline": "2px solid var(--boring-editor-focus, var(--ring, #2563eb))",
207
- "outline-offset": "2px"
205
+ ".boring-markdown-recipe[data-boring=\"markdown-editor\"] .boring-markdown-toolbar": {
206
+ "min-width": "0",
207
+ "overflow-x": "auto",
208
+ "scrollbar-width": "none",
209
+ "padding-right": "1.5rem",
210
+ "padding-inline-end": "1.5rem"
208
211
  },
209
- ".boring-markdown-recipe[data-boring=\"markdown-editor\"] [role=\"status\"]": {
210
- "font-size": "0.875rem",
211
- "color": "var(--boring-editor-muted, var(--muted-foreground, #4b5563))"
212
+ ".boring-markdown-recipe[data-boring=\"markdown-editor\"] .boring-markdown-toolbar > *": {
213
+ "flex-shrink": "0"
212
214
  },
213
215
  ".boring-markdown-recipe[data-boring=\"markdown-editor\"] nav[aria-label=\"Document outline\"]": {
214
- "border-bottom": "1px solid var(--boring-editor-border, var(--border, #d1d5db))",
215
216
  "padding-bottom": "0.75rem"
216
217
  },
217
218
  ".boring-markdown-recipe[data-boring=\"markdown-editor\"] nav ol": {
@@ -225,28 +226,28 @@
225
226
  "max-width": "75ch",
226
227
  "width": "100%",
227
228
  "margin-inline": "auto",
228
- "line-height": "1.7",
229
+ "line-height": "var(--leading-relaxed)",
229
230
  "overflow-wrap": "anywhere"
230
231
  },
231
232
  ".boring-markdown-recipe[data-boring=\"markdown-editor\"] .boring-markdown-content p": {
232
233
  "margin": "0.75rem 0"
233
234
  },
234
235
  ".boring-markdown-recipe[data-boring=\"markdown-editor\"] .boring-markdown-content h1": {
235
- "font-size": "1.875rem",
236
- "line-height": "1.2",
236
+ "font-size": "var(--text-3xl)",
237
+ "line-height": "var(--leading-tight)",
237
238
  "margin": "1.25rem 0 0.75rem",
238
- "font-weight": "700"
239
+ "font-weight": "var(--font-weight-semibold)"
239
240
  },
240
241
  ".boring-markdown-recipe[data-boring=\"markdown-editor\"] .boring-markdown-content h2": {
241
- "font-size": "1.5rem",
242
- "line-height": "1.3",
242
+ "font-size": "var(--text-2xl)",
243
+ "line-height": "var(--leading-tight)",
243
244
  "margin": "1.25rem 0 0.75rem",
244
- "font-weight": "650"
245
+ "font-weight": "var(--font-weight-semibold)"
245
246
  },
246
247
  ".boring-markdown-recipe[data-boring=\"markdown-editor\"] .boring-markdown-content h3": {
247
- "font-size": "1.25rem",
248
+ "font-size": "var(--text-xl)",
248
249
  "margin": "1rem 0 0.5rem",
249
- "font-weight": "600"
250
+ "font-weight": "var(--font-weight-semibold)"
250
251
  },
251
252
  ".boring-markdown-recipe[data-boring=\"markdown-editor\"] .boring-markdown-content ul": {
252
253
  "list-style": "disc",
@@ -266,58 +267,37 @@
266
267
  "align-items": "baseline"
267
268
  },
268
269
  ".boring-markdown-recipe[data-boring=\"markdown-editor\"] .boring-markdown-content blockquote": {
269
- "border-left": "3px solid var(--boring-editor-border, var(--border, #d1d5db))",
270
+ "border-left": "var(--default-border-width) solid var(--border)",
270
271
  "padding-left": "1rem",
271
272
  "margin-inline": "0",
272
- "color": "var(--boring-editor-muted, var(--muted-foreground, #4b5563))"
273
+ "color": "var(--muted-foreground)"
273
274
  },
274
275
  ".boring-markdown-recipe[data-boring=\"markdown-editor\"] .boring-markdown-content pre, .boring-markdown-recipe[data-boring=\"markdown-editor\"] [data-boring=\"proposal\"] pre": {
275
276
  "overflow-x": "auto",
276
- "background": "var(--boring-editor-code-background, var(--muted, #f3f4f6))",
277
- "border-radius": "0.375rem",
277
+ "background": "var(--muted)",
278
+ "border-radius": "var(--radius-md)",
278
279
  "padding": "0.75rem",
279
- "font-family": "ui-monospace, monospace"
280
+ "font-family": "var(--font-mono)"
280
281
  },
281
282
  ".boring-markdown-recipe[data-boring=\"markdown-editor\"] .boring-markdown-content code": {
282
- "font-family": "ui-monospace, monospace",
283
- "font-size": "0.9em"
283
+ "font-family": "var(--font-mono)",
284
+ "font-size": "var(--text-sm)"
284
285
  },
285
286
  ".boring-markdown-recipe[data-boring=\"markdown-editor\"] > textarea": {
286
287
  "width": "100%",
287
- "min-height": "16rem",
288
- "resize": "vertical",
289
- "font-family": "ui-monospace, monospace",
290
- "font-size": "0.875rem",
291
- "line-height": "1.6",
292
- "padding": "0.75rem",
293
- "background": "inherit",
294
- "color": "inherit",
295
- "border": "1px solid var(--boring-editor-border, var(--border, #d1d5db))",
296
- "border-radius": "0.375rem",
297
- "box-sizing": "border-box"
288
+ "resize": "vertical"
298
289
  },
299
290
  ".boring-markdown-recipe[data-boring=\"markdown-editor\"] [role=\"alert\"]": {
300
- "border-left": "3px solid var(--boring-editor-danger, var(--destructive, #b91c1c))",
301
291
  "padding": "0.75rem",
302
292
  "overflow-wrap": "anywhere"
303
293
  },
304
294
  ".boring-markdown-recipe[data-boring=\"markdown-editor\"] [data-boring=\"proposal\"]": {
305
- "border": "1px solid var(--boring-editor-border, var(--border, #d1d5db))",
306
- "padding": "0.75rem",
307
- "border-radius": "0.375rem"
295
+ "padding": "0.75rem"
308
296
  },
309
297
  ".boring-markdown-recipe[data-boring=\"markdown-editor\"] [data-boring=\"proposal\"] summary": {
310
- "cursor": "pointer",
311
- "font-weight": "600"
312
- },
313
- ".boring-markdown-recipe[data-boring=\"markdown-editor\"] .boring-markdown-content:focus-visible": {
314
- "outline": "2px solid var(--boring-editor-focus, var(--ring, #2563eb))",
315
- "outline-offset": "2px"
298
+ "cursor": "pointer"
316
299
  },
317
300
  ".boring-markdown-recipe[data-boring=\"markdown-editor\"] [data-boring=\"proposal-diff\"]": {
318
- "font-family": "ui-monospace, monospace",
319
- "font-size": "0.875rem",
320
- "line-height": "1.5",
321
301
  "overflow-x": "auto"
322
302
  },
323
303
  ".boring-markdown-recipe[data-boring=\"markdown-editor\"] [data-diff]": {
@@ -325,16 +305,14 @@
325
305
  "overflow-wrap": "anywhere",
326
306
  "padding": "0.125rem 0.375rem"
327
307
  },
328
- ".boring-markdown-recipe[data-boring=\"markdown-editor\"] [data-diff=\"add\"]": {
329
- "background": "var(--boring-editor-diff-add-background, #ecfdf5)",
330
- "color": "var(--boring-editor-diff-add-foreground, #065f46)"
331
- },
332
- ".boring-markdown-recipe[data-boring=\"markdown-editor\"] [data-diff=\"remove\"]": {
333
- "background": "var(--boring-editor-diff-remove-background, #fff1f2)",
334
- "color": "var(--boring-editor-diff-remove-foreground, #9f1239)"
308
+ ".boring-markdown-recipe[data-boring=\"markdown-editor\"] .boring-markdown-content:focus": {
309
+ "outline": "none"
335
310
  }
336
311
  },
337
- "docs": "Create and own a MarkdownController from @hachej/boring-ui-kit/markdown. Pass it to MarkdownEditor. The wrapper does not acquire resources or dispose the controller. Check the repository release notes for available npm versions; local tarball tests do not establish registry availability."
312
+ "docs": "Create and own a MarkdownController from @hachej/boring-ui-kit/markdown. Pass it to MarkdownEditor. The wrapper does not acquire resources or dispose the controller. Check the repository release notes for available npm versions; local tarball tests do not establish registry availability.",
313
+ "registryDependencies": [
314
+ "https://cdn.jsdelivr.net/npm/@hachej/boring-ui-kit@0.4.0/r/button.json"
315
+ ]
338
316
  },
339
317
  {
340
318
  "name": "html-viewer",
@@ -342,8 +320,8 @@
342
320
  "title": "HTML source and passive preview",
343
321
  "description": "Exact HTML source editing with a reconstructed passive preview and borrowed controller. Browser security qualification remains separate.",
344
322
  "dependencies": [
345
- "@hachej/boring-ui-kit@^0.3.2",
346
- "@hachej/boring-files@^0.3.2",
323
+ "@hachej/boring-ui-kit@^0.4.0",
324
+ "@hachej/boring-files@^0.4.0",
347
325
  "react@^19.0.0",
348
326
  "react-dom@^19.0.0"
349
327
  ],
@@ -356,15 +334,10 @@
356
334
  ],
357
335
  "css": {
358
336
  ".boring-html-recipe[data-boring=\"html-viewer\"]": {
359
- "background": "var(--boring-html-background, var(--background, #fff))",
360
- "color": "var(--boring-html-foreground, var(--foreground, #111827))",
361
- "border": "1px solid var(--boring-html-border, var(--border, #d1d5db))",
362
- "border-radius": "var(--boring-html-radius, var(--radius, 0.75rem))",
363
337
  "padding": "1rem",
364
338
  "display": "grid",
365
339
  "gap": "0.75rem",
366
- "min-width": "0",
367
- "font-family": "inherit"
340
+ "min-width": "0"
368
341
  },
369
342
  ".boring-html-recipe[data-boring=\"html-viewer\"] > header": {
370
343
  "display": "flex",
@@ -378,55 +351,26 @@
378
351
  "flex-wrap": "wrap",
379
352
  "gap": "0.375rem"
380
353
  },
381
- ".boring-html-recipe[data-boring=\"html-viewer\"] button": {
382
- "font": "inherit",
383
- "background": "var(--boring-html-background, var(--background, #fff))",
384
- "color": "var(--boring-html-foreground, var(--foreground, #111827))",
385
- "border": "1px solid var(--boring-html-border, var(--border, #d1d5db))",
386
- "border-radius": "0.375rem",
387
- "padding": "0.375rem 0.625rem",
388
- "cursor": "pointer"
389
- },
390
- ".boring-html-recipe[data-boring=\"html-viewer\"] button[aria-pressed=\"true\"]": {
391
- "font-weight": "700",
392
- "text-decoration": "underline"
393
- },
394
- ".boring-html-recipe[data-boring=\"html-viewer\"] button:disabled": {
395
- "opacity": "0.5",
396
- "cursor": "not-allowed"
397
- },
398
- ".boring-html-recipe[data-boring=\"html-viewer\"] button:focus-visible, .boring-html-recipe[data-boring=\"html-viewer\"] textarea:focus-visible": {
399
- "outline": "2px solid var(--boring-html-focus, var(--ring, #2563eb))",
400
- "outline-offset": "2px"
401
- },
402
354
  ".boring-html-recipe[data-boring=\"html-viewer\"] .boring-html-viewer__source": {
403
355
  "box-sizing": "border-box",
404
356
  "width": "100%",
405
357
  "min-height": "18rem",
406
- "font-family": "monospace",
407
- "line-height": "1.5",
408
- "background": "var(--boring-html-background, var(--background, #fff))",
409
- "color": "var(--boring-html-foreground, var(--foreground, #111827))",
410
358
  "padding": "0.75rem",
411
- "border": "1px solid var(--boring-html-border, var(--border, #d1d5db))",
412
- "border-radius": "0.375rem",
413
359
  "resize": "vertical"
414
360
  },
415
361
  ".boring-html-recipe[data-boring=\"html-viewer\"] .boring-html-viewer__frame": {
416
362
  "box-sizing": "border-box",
417
363
  "width": "100%",
418
- "min-height": "18rem",
419
- "border": "1px solid var(--boring-html-border, var(--border, #d1d5db))",
420
- "border-radius": "0.375rem"
421
- },
422
- ".boring-html-recipe[data-boring=\"html-viewer\"] [role=\"status\"]": {
423
- "font-size": "0.875rem"
364
+ "min-height": "18rem"
424
365
  },
425
366
  ".boring-html-recipe[data-boring=\"html-viewer\"] [role=\"alert\"]": {
426
367
  "border-inline-start": "0.25rem solid currentColor",
427
368
  "padding-inline-start": "0.75rem"
428
369
  }
429
- }
370
+ },
371
+ "registryDependencies": [
372
+ "https://cdn.jsdelivr.net/npm/@hachej/boring-ui-kit@0.4.0/r/button.json"
373
+ ]
430
374
  },
431
375
  {
432
376
  "name": "pi-chat",
@@ -434,22 +378,51 @@
434
378
  "title": "Pi chat",
435
379
  "description": "A complete Tailwind chat over the borrowed native chat controller: composer, messages, one collapsible activity block per turn (tool calls and reasoning), message queue, history, a human-in-the-loop question card, an Approve / Deny card for host tools wrapped with requireApproval optional artifact cards that open generated content in the host's panel, and feedback cards for the opt-in feedback tool (lists, and Show offers that the host page resolves). Chat only: no layout. Owned, editable source; no AI SDK. The optional pi-ambient and pi-workspace blocks build on it.",
436
380
  "dependencies": [
437
- "@hachej/boring-ui-kit@^0.3.2",
438
- "@hachej/boring-files@^0.3.2",
381
+ "@hachej/boring-ui-kit@^0.4.0",
382
+ "@hachej/boring-files@^0.4.0",
439
383
  "react@^19.0.0",
440
384
  "react-dom@^19.0.0",
441
385
  "marked@^17.0.6",
442
386
  "entities@^8.1.0",
387
+ "@base-ui/react@1.9.0",
443
388
  "@earendil-works/pi-durable@~1.2.0",
444
389
  "@earendil-works/chord@~1.2.0",
445
390
  "@earendil-works/pi-ai@~1.2.0",
446
- "@modelcontextprotocol/sdk@^1.32.0",
391
+ "@modelcontextprotocol/sdk@^1.32.1",
447
392
  "lucide-react@^1.51.0",
448
- "use-stick-to-bottom@^1.1.6"
393
+ "@shadcn/react@0.3.1"
449
394
  ],
450
395
  "registryDependencies": [
451
- "https://cdn.jsdelivr.net/npm/@hachej/boring-ui-kit@0.3.2/r/utils.json",
452
- "https://cdn.jsdelivr.net/npm/@hachej/boring-ui-kit@0.3.2/r/button.json"
396
+ "https://cdn.jsdelivr.net/npm/@hachej/boring-ui-kit@0.4.0/r/utils.json",
397
+ "https://cdn.jsdelivr.net/npm/@hachej/boring-ui-kit@0.4.0/r/button.json",
398
+ "trace",
399
+ "message",
400
+ "message-scroller",
401
+ "bubble",
402
+ "attachment",
403
+ "badge",
404
+ "alert",
405
+ "checkbox",
406
+ "table",
407
+ "card",
408
+ "spinner",
409
+ "collapsible",
410
+ "drawer",
411
+ "button",
412
+ "toggle",
413
+ "dropdown-menu",
414
+ "empty",
415
+ "input",
416
+ "input-group",
417
+ "popover",
418
+ "scroll-area",
419
+ "separator",
420
+ "sidebar",
421
+ "badge",
422
+ "item",
423
+ "drawer",
424
+ "alert",
425
+ "avatar"
453
426
  ],
454
427
  "files": [
455
428
  {
@@ -482,6 +455,11 @@
482
455
  "type": "registry:component",
483
456
  "target": "components/pi-chat/composer.tsx"
484
457
  },
458
+ {
459
+ "path": "registry/pi-chat/conversation-files.tsx",
460
+ "type": "registry:component",
461
+ "target": "components/pi-chat/conversation-files.tsx"
462
+ },
485
463
  {
486
464
  "path": "registry/pi-chat/config.ts",
487
465
  "type": "registry:lib",
@@ -598,7 +576,10 @@
598
576
  ".pi-chat, .pi-chat *, .pi-chat *::before, .pi-chat *::after": {
599
577
  "box-sizing": "border-box"
600
578
  },
601
- ".pi-chat :where(button, input, textarea)": {
579
+ ".pi-chat :where(*), .pi-chat :where(*)::before, .pi-chat :where(*)::after": {
580
+ "border-color": "var(--border)"
581
+ },
582
+ ".pi-chat :where(button, input, textarea, select)": {
602
583
  "font": "inherit",
603
584
  "color": "inherit",
604
585
  "letter-spacing": "inherit"
@@ -613,6 +594,22 @@
613
594
  },
614
595
  ".pi-chat [hidden]": {
615
596
  "display": "none"
597
+ },
598
+ ".pi-chat :where([data-slot=\"empty\"])": {
599
+ "border-width": "0"
600
+ },
601
+ ".pi-chat :where([data-slot=\"sidebar-menu\"], [data-slot=\"sidebar-menu-sub\"])": {
602
+ "margin": "0",
603
+ "padding": "0",
604
+ "list-style": "none"
605
+ }
606
+ },
607
+ "@layer utilities": {
608
+ "@media (max-width: 640px), (pointer: coarse)": {
609
+ ".pi-chat :is([data-slot=\"button\"], [data-slot=\"toggle\"], [class~=\"group/button\"], [class~=\"group/toggle\"])": {
610
+ "min-height": "2.75rem",
611
+ "min-width": "2.75rem"
612
+ }
616
613
  }
617
614
  },
618
615
  "@layer components": {
@@ -621,49 +618,14 @@
621
618
  "--chat-warning": "var(--warning, var(--muted-foreground))",
622
619
  "--chat-warning-soft": "var(--warning-soft, color-mix(in oklab, var(--chat-warning) 15%, var(--background)))",
623
620
  "--chat-warning-soft-foreground": "var(--warning-soft-foreground, color-mix(in oklab, var(--chat-warning) 75%, var(--foreground)))",
624
- "--chat-display": "var(--font-display, var(--font-sans))"
621
+ "--chat-display": "var(--font-display, var(--font-sans))",
622
+ "--chat-composer-radius": "26px",
623
+ "--chat-send-radius": "9999px",
624
+ "--chat-sheet-duration": "200ms"
625
625
  },
626
626
  ".pi-chat:is(.dark, .dark *)": {
627
627
  "--chat-warning-soft": "var(--warning-soft, color-mix(in oklab, var(--chat-warning) 26%, var(--background)))",
628
628
  "--chat-warning-soft-foreground": "var(--warning-soft-foreground, color-mix(in oklab, var(--chat-warning) 55%, var(--foreground)))"
629
- },
630
- ".pi-chat-shimmer": {
631
- "background-image": "linear-gradient(100deg, var(--muted-foreground) 35%, var(--foreground) 50%, var(--muted-foreground) 65%)",
632
- "background-size": "250% 100%",
633
- "background-clip": "text",
634
- "-webkit-background-clip": "text",
635
- "color": "transparent",
636
- "animation": "pi-chat-shimmer 2.2s linear infinite"
637
- },
638
- ".pi-chat [data-testid=\"message-text\"][data-streaming=\"true\"] > :last-child:not([data-testid=\"code-block\"])::after": {
639
- "content": "\"\"",
640
- "display": "inline-block",
641
- "width": "0.45em",
642
- "height": "1.05em",
643
- "margin-inline-start": "0.2em",
644
- "vertical-align": "-0.15em",
645
- "border-radius": "2px",
646
- "background": "color-mix(in oklab, var(--foreground) 60%, transparent)",
647
- "animation": "pi-chat-caret 1s steps(2, jump-none) infinite"
648
- }
649
- },
650
- "@keyframes pi-chat-shimmer": {
651
- "from": {
652
- "background-position": "100% 0"
653
- },
654
- "to": {
655
- "background-position": "0 0"
656
- }
657
- },
658
- "@keyframes pi-chat-caret": {
659
- "0%": {
660
- "opacity": "1"
661
- },
662
- "50%": {
663
- "opacity": "0.15"
664
- },
665
- "100%": {
666
- "opacity": "1"
667
629
  }
668
630
  }
669
631
  }
@@ -674,7 +636,7 @@
674
636
  "title": "Pi ambient agent",
675
637
  "description": "AmbientChat, a compact floating agent bar that grows into a chat window over an existing page, and AgentNotifications, toasts for finished, failed and waiting tasks (with the one guarded browser Notification helper). A block over the pi-chat item; its in-window artifact panel uses the pi-workspace layout.",
676
638
  "dependencies": [
677
- "@hachej/boring-ui-kit@^0.3.2",
639
+ "@hachej/boring-ui-kit@^0.4.0",
678
640
  "react@^19.0.0",
679
641
  "react-dom@^19.0.0",
680
642
  "@earendil-works/pi-durable@~1.2.0",
@@ -682,11 +644,18 @@
682
644
  "lucide-react@^1.51.0"
683
645
  ],
684
646
  "registryDependencies": [
685
- "https://cdn.jsdelivr.net/npm/@hachej/boring-ui-kit@0.3.2/r/theme.json",
686
- "https://cdn.jsdelivr.net/npm/@hachej/boring-ui-kit@0.3.2/r/pi-chat.json",
687
- "https://cdn.jsdelivr.net/npm/@hachej/boring-ui-kit@0.3.2/r/pi-workspace.json",
688
- "https://cdn.jsdelivr.net/npm/@hachej/boring-ui-kit@0.3.2/r/utils.json",
689
- "https://cdn.jsdelivr.net/npm/@hachej/boring-ui-kit@0.3.2/r/button.json"
647
+ "https://cdn.jsdelivr.net/npm/@hachej/boring-ui-kit@0.4.0/r/theme.json",
648
+ "https://cdn.jsdelivr.net/npm/@hachej/boring-ui-kit@0.4.0/r/pi-chat.json",
649
+ "https://cdn.jsdelivr.net/npm/@hachej/boring-ui-kit@0.4.0/r/pi-workspace.json",
650
+ "https://cdn.jsdelivr.net/npm/@hachej/boring-ui-kit@0.4.0/r/utils.json",
651
+ "https://cdn.jsdelivr.net/npm/@hachej/boring-ui-kit@0.4.0/r/button.json",
652
+ "message-scroller",
653
+ "button",
654
+ "toggle",
655
+ "avatar",
656
+ "badge",
657
+ "card",
658
+ "separator"
690
659
  ],
691
660
  "files": [
692
661
  {
@@ -715,7 +684,7 @@
715
684
  "react@^19.0.0"
716
685
  ],
717
686
  "registryDependencies": [
718
- "https://cdn.jsdelivr.net/npm/@hachej/boring-ui-kit@0.3.2/r/utils.json"
687
+ "https://cdn.jsdelivr.net/npm/@hachej/boring-ui-kit@0.4.0/r/utils.json"
719
688
  ],
720
689
  "files": [
721
690
  {
@@ -735,10 +704,12 @@
735
704
  "react-dom@^19.0.0"
736
705
  ],
737
706
  "registryDependencies": [
738
- "https://cdn.jsdelivr.net/npm/@hachej/boring-ui-kit@0.3.2/r/theme.json",
739
- "https://cdn.jsdelivr.net/npm/@hachej/boring-ui-kit@0.3.2/r/pi-chat.json",
740
- "https://cdn.jsdelivr.net/npm/@hachej/boring-ui-kit@0.3.2/r/utils.json",
741
- "https://cdn.jsdelivr.net/npm/@hachej/boring-ui-kit@0.3.2/r/dock.json"
707
+ "https://cdn.jsdelivr.net/npm/@hachej/boring-ui-kit@0.4.0/r/theme.json",
708
+ "https://cdn.jsdelivr.net/npm/@hachej/boring-ui-kit@0.4.0/r/pi-chat.json",
709
+ "https://cdn.jsdelivr.net/npm/@hachej/boring-ui-kit@0.4.0/r/utils.json",
710
+ "https://cdn.jsdelivr.net/npm/@hachej/boring-ui-kit@0.4.0/r/dock.json",
711
+ "badge",
712
+ "card"
742
713
  ],
743
714
  "files": [
744
715
  {
@@ -759,20 +730,25 @@
759
730
  "title": "Pi agent app",
760
731
  "description": "AgentWorkspace: a whole agent page in one component. Left: the sessions pane (search, New, rename, archive, delete; collapsible, a drawer on a narrow screen). Center: PiChat. Right: the artifact viewers (artifact panel with versions, file viewer, auto-open of new artifacts) in the ArtifactWorkspace panel, a full-screen sheet on a phone. Props are data and callbacks; hooks for the conversations handler (useConversations), the chat transport (useRemoteChat) and saved resources (useSaved).",
761
732
  "dependencies": [
762
- "@hachej/boring-ui-kit@^0.3.2",
763
- "@hachej/boring-files@^0.3.2",
733
+ "@hachej/boring-ui-kit@^0.4.0",
734
+ "@hachej/boring-files@^0.4.0",
764
735
  "react@^19.0.0",
765
736
  "react-dom@^19.0.0",
766
- "lucide-react@^1.51.0",
767
- "radix-ui@^1.8.0"
737
+ "lucide-react@^1.51.0"
768
738
  ],
769
739
  "registryDependencies": [
770
- "https://cdn.jsdelivr.net/npm/@hachej/boring-ui-kit@0.3.2/r/theme.json",
771
- "https://cdn.jsdelivr.net/npm/@hachej/boring-ui-kit@0.3.2/r/pi-chat.json",
772
- "https://cdn.jsdelivr.net/npm/@hachej/boring-ui-kit@0.3.2/r/pi-workspace.json",
773
- "https://cdn.jsdelivr.net/npm/@hachej/boring-ui-kit@0.3.2/r/viewers.json",
774
- "https://cdn.jsdelivr.net/npm/@hachej/boring-ui-kit@0.3.2/r/utils.json",
775
- "https://cdn.jsdelivr.net/npm/@hachej/boring-ui-kit@0.3.2/r/button.json"
740
+ "https://cdn.jsdelivr.net/npm/@hachej/boring-ui-kit@0.4.0/r/theme.json",
741
+ "https://cdn.jsdelivr.net/npm/@hachej/boring-ui-kit@0.4.0/r/pi-chat.json",
742
+ "https://cdn.jsdelivr.net/npm/@hachej/boring-ui-kit@0.4.0/r/pi-workspace.json",
743
+ "https://cdn.jsdelivr.net/npm/@hachej/boring-ui-kit@0.4.0/r/viewers.json",
744
+ "https://cdn.jsdelivr.net/npm/@hachej/boring-ui-kit@0.4.0/r/utils.json",
745
+ "https://cdn.jsdelivr.net/npm/@hachej/boring-ui-kit@0.4.0/r/button.json",
746
+ "drawer",
747
+ "button",
748
+ "https://cdn.jsdelivr.net/npm/@hachej/boring-ui-kit@0.4.0/r/file-tree.json",
749
+ "dropdown-menu",
750
+ "scroll-area",
751
+ "separator"
776
752
  ],
777
753
  "files": [
778
754
  {
@@ -785,6 +761,11 @@
785
761
  "type": "registry:component",
786
762
  "target": "components/pi-app/sessions.tsx"
787
763
  },
764
+ {
765
+ "path": "registry/pi-app/history-column.tsx",
766
+ "type": "registry:component",
767
+ "target": "components/pi-app/history-column.tsx"
768
+ },
788
769
  {
789
770
  "path": "registry/pi-app/artifact-panel.tsx",
790
771
  "type": "registry:component",
@@ -846,25 +827,30 @@
846
827
  "name": "app-shell",
847
828
  "type": "registry:block",
848
829
  "title": "App shell: layouts, list/detail and agent layer",
849
- "description": "AppShell with three layouts. B \"workspace\" puts a ListDetail on a screen (phone: the list, then the detail as a stack step with Back; wide: a 20rem list and the detail side by side, sidebar as an icon rail). C \"chat\" wraps the app's own AgentWorkspace (untouched, passed as the nav item's render; install the pi-app item yourself) in the same sidebar, account menu and header; it takes no shell agent. A \"screen\": one screen at a time, every screen kept mounted. On a phone bottom tabs (at most four; more give three plus a « Plus » sheet) and an avatar button that opens the account sheet; on a wide screen the shadcn sidebar (icon rail, NavUser). One header per screen through useScreenHeader (title, subtitle, back, up to two actions, the rest behind « … »). The account menu holds « Améliorer l'app » (the improve agent), the app's own entries and sign out. AppSheet is the one bottom sheet (one open at a time, Back closes it). It mounts the AgentLayer: one agent's PiChat above the app (phone: a drawer with peek, half and full snap points; wide: a right panel), the improve agent in the same layer, optional push-to-talk and point mode. Also useAgentContext and readAgentContext (the screen on show travels as `context` with each submit) and useBackLayer, the one Back manager. Built on the shadcn drawer, sidebar, avatar and dropdown-menu of the host's own style (Base UI variants).",
830
+ "description": "AppShell with three layouts. B \"workspace\" puts a ListDetail on a screen (phone: the list, then the detail as a stack step with Back; wide: a 20rem list and the detail side by side, sidebar as an icon rail). C \"chat\" wraps the app's own AgentWorkspace (untouched, passed as the nav item's render; install the pi-app item yourself) in the same sidebar, account menu and header; it takes no shell agent. A \"screen\": one screen at a time, every screen kept mounted. On a phone bottom tabs (at most four; more give three plus a « Plus » sheet) and an avatar button that opens the account sheet; on a wide screen the shadcn sidebar (icon rail, NavUser). One header per screen through useScreenHeader (title, subtitle, back, up to two actions, the rest behind « … »). The account menu holds « Améliorer l'app » (the improve agent), the app's own entries and sign out. AppSheet is the one bottom sheet (one open at a time, Back closes it). It mounts the AgentLayer: one agent's PiChat above the app (phone: a drawer with peek, half and full snap points; wide: a right panel), the improve agent in the same layer, optional push-to-talk and point mode. Also useAgentContext and readAgentContext (the screen on show travels as `context` with each submit) and useBackLayer, the one Back manager. Built on explicitly pinned Base UI drawer and dropdown-menu recipes, plus the sidebar and avatar of the host's own shadcn style.",
850
831
  "dependencies": [
851
- "@hachej/boring-feedback@^0.3.2",
852
- "@hachej/boring-ui-kit@^0.3.2",
832
+ "@hachej/boring-feedback@^0.4.0",
833
+ "@hachej/boring-ui-kit@^0.4.0",
853
834
  "@base-ui/react@^1.9.0",
854
835
  "react@^19.0.0",
855
836
  "react-dom@^19.0.0",
856
837
  "lucide-react@^1.51.0"
857
838
  ],
858
839
  "registryDependencies": [
859
- "https://cdn.jsdelivr.net/npm/@hachej/boring-ui-kit@0.3.2/r/pi-chat.json",
860
- "https://cdn.jsdelivr.net/npm/@hachej/boring-ui-kit@0.3.2/r/dock.json",
861
- "https://cdn.jsdelivr.net/npm/@hachej/boring-ui-kit@0.3.2/r/feedback.json",
862
- "https://cdn.jsdelivr.net/npm/@hachej/boring-ui-kit@0.3.2/r/utils.json",
863
- "https://cdn.jsdelivr.net/npm/@hachej/boring-ui-kit@0.3.2/r/button.json",
840
+ "https://cdn.jsdelivr.net/npm/@hachej/boring-ui-kit@0.4.0/r/pi-chat.json",
841
+ "https://cdn.jsdelivr.net/npm/@hachej/boring-ui-kit@0.4.0/r/dock.json",
842
+ "https://cdn.jsdelivr.net/npm/@hachej/boring-ui-kit@0.4.0/r/feedback.json",
843
+ "https://cdn.jsdelivr.net/npm/@hachej/boring-ui-kit@0.4.0/r/utils.json",
844
+ "https://cdn.jsdelivr.net/npm/@hachej/boring-ui-kit@0.4.0/r/button.json",
864
845
  "drawer",
865
846
  "sidebar",
866
847
  "avatar",
867
- "dropdown-menu"
848
+ "dropdown-menu",
849
+ "button",
850
+ "switch",
851
+ "badge",
852
+ "card",
853
+ "separator"
868
854
  ],
869
855
  "css": {
870
856
  "@layer base": {
@@ -881,6 +867,14 @@
881
867
  "margin": "0",
882
868
  "font": "inherit"
883
869
  }
870
+ },
871
+ "@layer utilities": {
872
+ "@media (max-width: 640px), (pointer: coarse)": {
873
+ ".app-shell :is([data-slot=\"button\"], [data-slot=\"toggle\"], [class~=\"group/button\"], [class~=\"group/toggle\"])": {
874
+ "min-height": "2.75rem",
875
+ "min-width": "2.75rem"
876
+ }
877
+ }
884
878
  }
885
879
  },
886
880
  "files": [
@@ -945,9 +939,14 @@
945
939
  "target": "components/app-shell/account.tsx"
946
940
  },
947
941
  {
948
- "path": "registry/app-shell/sheet.tsx",
942
+ "path": "registry/app-shell/app-sheet.tsx",
949
943
  "type": "registry:component",
950
- "target": "components/app-shell/sheet.tsx"
944
+ "target": "components/app-shell/app-sheet.tsx"
945
+ },
946
+ {
947
+ "path": "registry/app-shell/use-exclusive-sheet.ts",
948
+ "type": "registry:hook",
949
+ "target": "components/app-shell/use-exclusive-sheet.ts"
951
950
  },
952
951
  {
953
952
  "path": "registry/app-shell/compact.ts",
@@ -967,8 +966,8 @@
967
966
  "title": "Viewers",
968
967
  "description": "The standard viewer top bar (title, status, viewer controls, Refresh, Share, Copy, Download, Open in new tab, Close, overflow menu) with Tailwind panes over it: the Markdown editor with a formatting toolbar and prose styling, the passive HTML preview and source editor, an image viewer with zoom and pan, and a PDF viewer. Owned, editable source over the borrowed controllers; no AI SDK.",
969
968
  "dependencies": [
970
- "@hachej/boring-ui-kit@^0.3.2",
971
- "@hachej/boring-files@^0.3.2",
969
+ "@hachej/boring-ui-kit@^0.4.0",
970
+ "@hachej/boring-files@^0.4.0",
972
971
  "react@^19.0.0",
973
972
  "react-dom@^19.0.0",
974
973
  "marked@^17.0.6",
@@ -984,12 +983,21 @@
984
983
  "@tiptap/extension-highlight@^3.31.4",
985
984
  "@tiptap/extension-bubble-menu@^3.31.4",
986
985
  "@tiptap/extension-floating-menu@^3.31.4",
987
- "lucide-react@^1.51.0"
986
+ "lucide-react@^1.51.0",
987
+ "pdfjs-dist@6.3.289"
988
988
  ],
989
989
  "registryDependencies": [
990
- "https://cdn.jsdelivr.net/npm/@hachej/boring-ui-kit@0.3.2/r/theme.json",
991
- "https://cdn.jsdelivr.net/npm/@hachej/boring-ui-kit@0.3.2/r/utils.json",
992
- "https://cdn.jsdelivr.net/npm/@hachej/boring-ui-kit@0.3.2/r/button.json"
990
+ "https://cdn.jsdelivr.net/npm/@hachej/boring-ui-kit@0.4.0/r/theme.json",
991
+ "https://cdn.jsdelivr.net/npm/@hachej/boring-ui-kit@0.4.0/r/utils.json",
992
+ "https://cdn.jsdelivr.net/npm/@hachej/boring-ui-kit@0.4.0/r/button.json",
993
+ "button",
994
+ "toggle",
995
+ "https://cdn.jsdelivr.net/npm/@hachej/boring-ui-kit@0.4.0/r/version-history.json",
996
+ "toggle-group",
997
+ "dialog",
998
+ "textarea",
999
+ "badge",
1000
+ "dropdown-menu"
993
1001
  ],
994
1002
  "files": [
995
1003
  {
@@ -1032,6 +1040,11 @@
1032
1040
  "type": "registry:component",
1033
1041
  "target": "components/viewers/pdf-pane.tsx"
1034
1042
  },
1043
+ {
1044
+ "path": "registry/viewers/pdf-pages.tsx",
1045
+ "type": "registry:component",
1046
+ "target": "components/viewers/pdf-pages.tsx"
1047
+ },
1035
1048
  {
1036
1049
  "path": "registry/viewers/share.ts",
1037
1050
  "type": "registry:lib",
@@ -1054,29 +1067,20 @@
1054
1067
  }
1055
1068
  ],
1056
1069
  "css": {
1057
- "@layer base": {
1058
- ".boring-viewer, .boring-viewer *, .boring-viewer *::before, .boring-viewer *::after": {
1059
- "box-sizing": "border-box"
1060
- },
1061
- ".boring-viewer :where(button, input, textarea)": {
1062
- "font": "inherit",
1063
- "color": "inherit",
1064
- "letter-spacing": "inherit"
1065
- },
1066
- ".boring-viewer :where(button)": {
1067
- "background-color": "transparent",
1068
- "border": "0",
1069
- "padding": "0"
1070
- },
1071
- ".boring-viewer :where(textarea, input)": {
1072
- "margin": "0"
1073
- },
1074
- ".boring-viewer [hidden]": {
1075
- "display": "none"
1070
+ "@layer utilities": {
1071
+ "@media (max-width: 640px), (pointer: coarse)": {
1072
+ ".boring-viewer :is([data-slot=\"button\"], [data-slot=\"toggle\"], [data-slot=\"toggle-group-item\"], [class~=\"group/button\"], [class~=\"group/toggle\"])": {
1073
+ "min-height": "2.75rem",
1074
+ "min-width": "2.75rem"
1075
+ },
1076
+ ".boring-viewer.boring-markdown-bubble :is([data-slot=\"button\"], [data-slot=\"toggle\"])": {
1077
+ "min-height": "2.75rem",
1078
+ "min-width": "2.75rem"
1079
+ }
1076
1080
  }
1077
1081
  },
1078
1082
  "@layer components": {
1079
- ".boring-viewer .boring-markdown-editor": {
1083
+ ".boring-viewer .boring-markdown-editor, .boring-viewer .boring-html-pane": {
1080
1084
  "display": "flex",
1081
1085
  "flex-direction": "column",
1082
1086
  "flex": "1 1 auto",
@@ -1087,156 +1091,60 @@
1087
1091
  ".boring-viewer .boring-markdown-surface": {
1088
1092
  "flex": "1 1 auto",
1089
1093
  "min-height": "0",
1090
- "overflow": "auto",
1091
- "scrollbar-width": "thin",
1092
- "scrollbar-color": "color-mix(in oklab, var(--foreground) 22%, transparent) transparent"
1093
- },
1094
- ".boring-viewer .boring-markdown-surface:focus-within": {
1095
- "box-shadow": "inset 0 0 0 1px color-mix(in oklab, var(--ring) 55%, transparent)"
1094
+ "overflow": "auto"
1096
1095
  },
1097
- ".boring-viewer .boring-markdown-toolbar": {
1096
+ ".boring-viewer .boring-markdown-toolbar, .boring-viewer.boring-markdown-bubble": {
1098
1097
  "display": "flex",
1099
1098
  "flex": "none",
1100
1099
  "align-items": "center",
1101
- "gap": "0.125rem",
1102
- "padding": "0.375rem 0.75rem",
1103
- "border-bottom": "1px solid var(--border)",
1104
- "background": "var(--background)",
1100
+ "gap": "0.25rem",
1101
+ "max-width": "calc(100vw - 24px)"
1102
+ },
1103
+ ".boring-viewer .boring-markdown-toolbar": {
1104
+ "padding": "0.375rem 1.5rem 0.375rem 0.75rem",
1105
1105
  "overflow-x": "auto",
1106
- "scrollbar-width": "none"
1106
+ "scrollbar-width": "none",
1107
+ "mask-image": "linear-gradient(to right, black calc(100% - 2rem), transparent)"
1107
1108
  },
1108
1109
  ".boring-viewer .boring-markdown-toolbar::-webkit-scrollbar": {
1109
1110
  "display": "none"
1110
1111
  },
1111
1112
  ".boring-viewer .boring-markdown-tool": {
1112
- "display": "inline-flex",
1113
- "flex": "none",
1114
- "align-items": "center",
1115
- "justify-content": "center",
1116
- "width": "2rem",
1117
- "height": "2rem",
1118
- "border-radius": "0.375rem",
1119
- "color": "var(--muted-foreground)",
1120
- "cursor": "pointer",
1121
- "transition": "background-color 0.12s, color 0.12s"
1122
- },
1123
- ".boring-viewer .boring-markdown-tool:hover:not(:disabled)": {
1124
- "background": "var(--muted)",
1125
- "color": "var(--foreground)"
1126
- },
1127
- ".boring-viewer .boring-markdown-tool[aria-pressed=\"true\"]": {
1128
- "background": "color-mix(in oklab, var(--primary) 12%, transparent)",
1129
- "color": "var(--foreground)",
1130
- "box-shadow": "inset 0 0 0 1px color-mix(in oklab, var(--primary) 22%, transparent)"
1131
- },
1132
- ".boring-viewer .boring-markdown-tool:disabled": {
1133
- "opacity": "0.4",
1134
- "cursor": "not-allowed"
1135
- },
1136
- ".boring-viewer .boring-markdown-tool:focus-visible, .boring-viewer .boring-markdown-link button:focus-visible, .boring-viewer .boring-markdown-alert button:focus-visible, .boring-viewer .boring-markdown-proposal button:focus-visible": {
1137
- "outline": "2px solid color-mix(in oklab, var(--ring) 70%, transparent)",
1138
- "outline-offset": "1px"
1113
+ "flex": "none"
1139
1114
  },
1140
1115
  ".boring-viewer .boring-markdown-separator": {
1141
1116
  "flex": "none",
1142
- "width": "1px",
1143
- "height": "1rem",
1144
- "margin": "0 0.375rem",
1145
- "background": "var(--border)"
1117
+ "margin-inline": "0.25rem"
1118
+ },
1119
+ ".boring-viewer span.boring-markdown-separator": {
1120
+ "width": "0.5rem",
1121
+ "margin": "0"
1146
1122
  },
1147
1123
  ".boring-viewer .boring-markdown-icon": {
1148
1124
  "display": "block"
1149
1125
  },
1150
- ".boring-viewer .boring-markdown-link": {
1126
+ ".boring-viewer .boring-markdown-link, .boring-viewer .boring-markdown-alert, .boring-viewer .boring-markdown-proposal, .boring-viewer [data-boring=\"text-draft-controls\"]": {
1151
1127
  "display": "flex",
1152
1128
  "flex": "none",
1153
1129
  "flex-wrap": "wrap",
1154
1130
  "align-items": "center",
1155
1131
  "gap": "0.5rem",
1156
- "padding": "0.5rem 0.75rem",
1157
- "border-bottom": "1px solid var(--border)",
1158
- "background": "var(--muted)"
1132
+ "padding": "0.5rem 0.75rem"
1159
1133
  },
1160
- ".boring-viewer .boring-markdown-link input": {
1134
+ ".boring-viewer .boring-markdown-link [data-slot=\"input\"]": {
1161
1135
  "flex": "1 1 14rem",
1162
- "min-width": "0",
1163
- "height": "2rem",
1164
- "padding": "0 0.625rem",
1165
- "border": "1px solid var(--input)",
1166
- "border-radius": "0.375rem",
1167
- "background": "var(--background)",
1168
- "font-size": "0.875rem"
1169
- },
1170
- ".boring-viewer .boring-markdown-link input:focus-visible": {
1171
- "outline": "2px solid color-mix(in oklab, var(--ring) 70%, transparent)",
1172
- "outline-offset": "0"
1173
- },
1174
- ".boring-viewer .boring-markdown-link button, .boring-viewer .boring-markdown-alert button, .boring-viewer .boring-markdown-proposal > button": {
1175
- "height": "2rem",
1176
- "padding": "0 0.75rem",
1177
- "border": "1px solid var(--border)",
1178
- "border-radius": "0.375rem",
1179
- "background": "var(--background)",
1180
- "font-size": "0.8125rem",
1181
- "font-weight": "500",
1182
- "cursor": "pointer"
1183
- },
1184
- ".boring-viewer .boring-markdown-link button:hover:not(:disabled), .boring-viewer .boring-markdown-alert button:hover:not(:disabled), .boring-viewer .boring-markdown-proposal > button:hover:not(:disabled)": {
1185
- "background": "var(--muted)"
1186
- },
1187
- ".boring-viewer .boring-markdown-alert button:disabled, .boring-viewer .boring-markdown-proposal > button:disabled": {
1188
- "opacity": "0.45",
1189
- "cursor": "not-allowed"
1190
- },
1191
- ".boring-viewer .boring-markdown-notice, .boring-viewer .boring-markdown-alert, .boring-viewer .boring-markdown-proposal": {
1192
- "flex": "none",
1193
- "margin": "0.75rem 0.75rem 0",
1194
- "padding": "0.625rem 0.75rem",
1195
- "border": "1px solid var(--border)",
1196
- "border-radius": "0.5rem",
1197
- "background": "var(--muted)",
1198
- "font-size": "0.8125rem",
1199
- "line-height": "1.5"
1136
+ "min-width": "0"
1200
1137
  },
1201
1138
  ".boring-viewer .boring-markdown-notice": {
1202
- "border-left": "3px solid color-mix(in oklab, var(--primary) 55%, transparent)"
1139
+ "margin": "0.75rem"
1203
1140
  },
1204
- ".boring-viewer .boring-markdown-alert": {
1205
- "display": "flex",
1206
- "flex-wrap": "wrap",
1207
- "align-items": "center",
1208
- "gap": "0.5rem",
1209
- "border-color": "color-mix(in oklab, var(--destructive) 40%, var(--border))",
1210
- "background": "color-mix(in oklab, var(--destructive) 8%, var(--background))"
1211
- },
1212
- ".boring-viewer .boring-markdown-proposal": {
1213
- "display": "flex",
1214
- "flex-wrap": "wrap",
1215
- "align-items": "center",
1216
- "gap": "0.5rem",
1217
- "background": "var(--background)"
1218
- },
1219
- ".boring-viewer .boring-markdown-proposal h3": {
1220
- "flex": "1 1 100%",
1221
- "margin": "0",
1222
- "font-size": "0.875rem"
1223
- },
1224
- ".boring-viewer .boring-markdown-proposal details": {
1141
+ ".boring-viewer .boring-markdown-proposal :is(h3, details)": {
1225
1142
  "flex": "1 1 100%",
1226
1143
  "min-width": "0"
1227
1144
  },
1228
- ".boring-viewer .boring-markdown-proposal summary": {
1229
- "cursor": "pointer",
1230
- "color": "var(--muted-foreground)"
1231
- },
1232
1145
  ".boring-viewer .boring-markdown-proposal pre": {
1233
- "margin": "0.25rem 0",
1234
1146
  "max-height": "12rem",
1235
1147
  "overflow": "auto",
1236
- "padding": "0.5rem",
1237
- "border-radius": "0.375rem",
1238
- "background": "var(--muted)",
1239
- "font": "0.75rem/1.5 ui-monospace, SFMono-Regular, Menlo, monospace",
1240
1148
  "white-space": "pre-wrap"
1241
1149
  },
1242
1150
  ".boring-viewer .boring-markdown-editor nav[aria-label=\"Document outline\"]": {
@@ -1246,70 +1154,35 @@
1246
1154
  ".boring-viewer .boring-markdown-editor nav[aria-label=\"Document outline\"]": {
1247
1155
  "display": "block",
1248
1156
  "flex": "none",
1249
- "padding": "0.375rem 0.75rem",
1250
- "border-bottom": "1px solid var(--border)",
1251
- "overflow-x": "auto"
1157
+ "overflow-x": "auto",
1158
+ "padding": "0.375rem 0.75rem"
1252
1159
  },
1253
1160
  ".boring-viewer .boring-markdown-editor nav[aria-label=\"Document outline\"] ol": {
1254
1161
  "display": "flex",
1255
1162
  "gap": "0.25rem",
1163
+ "list-style": "none",
1256
1164
  "margin": "0",
1257
- "padding": "0",
1258
- "list-style": "none"
1259
- },
1260
- ".boring-viewer .boring-markdown-editor nav[aria-label=\"Document outline\"] button": {
1261
- "max-width": "14rem",
1262
- "padding": "0.125rem 0.5rem",
1263
- "overflow": "hidden",
1264
- "border-radius": "999px",
1265
- "color": "var(--muted-foreground)",
1266
- "font-size": "0.75rem",
1267
- "text-overflow": "ellipsis",
1268
- "white-space": "nowrap",
1269
- "cursor": "pointer"
1270
- },
1271
- ".boring-viewer .boring-markdown-editor nav[aria-label=\"Document outline\"] button:hover": {
1272
- "background": "var(--muted)",
1273
- "color": "var(--foreground)"
1274
- },
1275
- ".boring-viewer .boring-markdown-editor nav[aria-label=\"Document outline\"] [data-heading-level=\"1\"] button": {
1276
- "font-weight": "600"
1165
+ "padding": "0"
1277
1166
  }
1278
1167
  },
1279
1168
  ".boring-viewer .boring-markdown-source, .boring-viewer .boring-html-viewer__source": {
1280
- "display": "block",
1281
1169
  "flex": "1 1 auto",
1282
1170
  "width": "100%",
1283
1171
  "min-height": "0",
1284
- "margin": "0",
1285
- "padding": "1rem 1.25rem",
1286
- "border": "0",
1287
- "border-radius": "0",
1288
- "outline": "none",
1289
- "resize": "none",
1290
- "background": "var(--background)",
1291
- "color": "var(--foreground)",
1292
- "font": "0.8125rem/1.65 ui-monospace, SFMono-Regular, \"SF Mono\", Menlo, Consolas, monospace",
1293
- "tab-size": "2",
1294
- "caret-color": "var(--foreground)"
1295
- },
1296
- ".boring-viewer .boring-markdown-source:focus-visible, .boring-viewer .boring-html-viewer__source:focus-visible": {
1297
- "box-shadow": "inset 0 0 0 1px color-mix(in oklab, var(--ring) 55%, transparent)"
1298
- },
1299
- ".boring-viewer .boring-markdown-source::selection, .boring-viewer .boring-html-viewer__source::selection, .boring-viewer .boring-markdown-content ::selection, .boring-viewer .boring-markdown-content::selection": {
1300
- "background": "color-mix(in oklab, var(--primary) 24%, transparent)"
1172
+ "resize": "none"
1301
1173
  },
1302
1174
  ".boring-viewer .boring-markdown-content": {
1303
- "max-width": "46rem",
1175
+ "max-width": "68ch",
1304
1176
  "min-height": "100%",
1305
1177
  "margin": "0 auto",
1306
- "padding": "1.25rem 1.25rem 3rem",
1307
- "outline": "none",
1178
+ "padding": "1.5rem 1.5rem 3rem",
1179
+ "overflow-wrap": "anywhere",
1308
1180
  "color": "var(--foreground)",
1309
- "font-size": "0.9375rem",
1310
- "line-height": "1.7",
1311
- "letter-spacing": "-0.005em",
1312
- "overflow-wrap": "anywhere"
1181
+ "font-size": "var(--text-base)",
1182
+ "line-height": "var(--leading-relaxed)"
1183
+ },
1184
+ ".boring-viewer .boring-markdown-content:focus": {
1185
+ "outline": "none"
1313
1186
  },
1314
1187
  ".boring-viewer .boring-markdown-content > :first-child": {
1315
1188
  "margin-top": "0"
@@ -1322,32 +1195,27 @@
1322
1195
  "float": "left",
1323
1196
  "height": "0",
1324
1197
  "color": "var(--muted-foreground)",
1325
- "opacity": "0.8",
1326
1198
  "pointer-events": "none"
1327
1199
  },
1328
1200
  ".boring-viewer .boring-markdown-content :is(h1, h2, h3, h4, h5, h6)": {
1329
- "color": "var(--foreground)",
1330
- "font-weight": "600",
1331
- "letter-spacing": "-0.02em",
1332
- "line-height": "1.25"
1201
+ "font-weight": "var(--font-weight-semibold)",
1202
+ "line-height": "var(--leading-tight)"
1333
1203
  },
1334
1204
  ".boring-viewer .boring-markdown-content h1": {
1335
1205
  "margin": "1.75rem 0 0.75rem",
1336
- "font-size": "1.875rem"
1206
+ "font-size": "var(--text-2xl)"
1337
1207
  },
1338
1208
  ".boring-viewer .boring-markdown-content h2": {
1339
- "margin": "1.5rem 0 0.625rem",
1340
- "padding-bottom": "0.25rem",
1341
- "border-bottom": "1px solid color-mix(in oklab, var(--border) 70%, transparent)",
1342
- "font-size": "1.375rem"
1209
+ "margin": "2rem 0 0.75rem",
1210
+ "font-size": "var(--text-xl)"
1343
1211
  },
1344
1212
  ".boring-viewer .boring-markdown-content h3": {
1345
1213
  "margin": "1.25rem 0 0.5rem",
1346
- "font-size": "1.125rem"
1214
+ "font-size": "var(--text-lg)"
1347
1215
  },
1348
1216
  ".boring-viewer .boring-markdown-content :is(h4, h5, h6)": {
1349
1217
  "margin": "1rem 0 0.4rem",
1350
- "font-size": "1rem"
1218
+ "font-size": "var(--text-base)"
1351
1219
  },
1352
1220
  ".boring-viewer .boring-markdown-content :is(ul, ol)": {
1353
1221
  "margin": "0.75rem 0",
@@ -1356,27 +1224,12 @@
1356
1224
  ".boring-viewer .boring-markdown-content ul": {
1357
1225
  "list-style": "disc"
1358
1226
  },
1359
- ".boring-viewer .boring-markdown-content ul ul": {
1360
- "list-style": "circle"
1361
- },
1362
- ".boring-viewer .boring-markdown-content ul ul ul": {
1363
- "list-style": "square"
1364
- },
1365
1227
  ".boring-viewer .boring-markdown-content ol": {
1366
1228
  "list-style": "decimal"
1367
1229
  },
1368
- ".boring-viewer .boring-markdown-content ol ol": {
1369
- "list-style": "lower-alpha"
1370
- },
1371
- ".boring-viewer .boring-markdown-content ol ol ol": {
1372
- "list-style": "lower-roman"
1373
- },
1374
1230
  ".boring-viewer .boring-markdown-content li": {
1375
1231
  "margin": "0.25rem 0"
1376
1232
  },
1377
- ".boring-viewer .boring-markdown-content li::marker": {
1378
- "color": "var(--muted-foreground)"
1379
- },
1380
1233
  ".boring-viewer .boring-markdown-content li > p": {
1381
1234
  "margin": "0"
1382
1235
  },
@@ -1408,27 +1261,29 @@
1408
1261
  "flex": "1 1 auto",
1409
1262
  "min-width": "0"
1410
1263
  },
1411
- ".boring-viewer .boring-markdown-content ul[data-type=\"taskList\"] li[data-checked=\"true\"] > div": {
1264
+ ".boring-viewer .boring-markdown-content li[data-checked=\"true\"] > div": {
1412
1265
  "color": "var(--muted-foreground)",
1413
1266
  "text-decoration": "line-through"
1414
1267
  },
1415
1268
  ".boring-viewer .boring-markdown-content strong": {
1416
- "font-weight": "600"
1269
+ "font-weight": "var(--font-weight-semibold)"
1417
1270
  },
1418
1271
  ".boring-viewer .boring-markdown-content code": {
1419
1272
  "padding": "0.1em 0.35em",
1420
- "border-radius": "0.25rem",
1421
- "background": "color-mix(in oklab, var(--foreground) 7%, transparent)",
1422
- "font": "0.88em ui-monospace, SFMono-Regular, Menlo, Consolas, monospace"
1273
+ "border-radius": "var(--radius-sm)",
1274
+ "background": "var(--muted)",
1275
+ "font-family": "var(--font-mono)",
1276
+ "font-size": "var(--text-sm)"
1423
1277
  },
1424
1278
  ".boring-viewer .boring-markdown-content pre": {
1425
1279
  "margin": "1rem 0",
1426
1280
  "padding": "0.875rem 1rem",
1427
1281
  "overflow-x": "auto",
1428
- "border": "1px solid color-mix(in oklab, var(--border) 80%, transparent)",
1429
- "border-radius": "0.5rem",
1430
- "background": "color-mix(in oklab, var(--foreground) 4%, transparent)",
1431
- "font": "0.8125rem/1.6 ui-monospace, SFMono-Regular, Menlo, Consolas, monospace"
1282
+ "border": "var(--default-border-width) solid var(--border)",
1283
+ "border-radius": "var(--radius-lg)",
1284
+ "background": "var(--muted)",
1285
+ "font-family": "var(--font-mono)",
1286
+ "font-size": "var(--text-sm)"
1432
1287
  },
1433
1288
  ".boring-viewer .boring-markdown-content pre code": {
1434
1289
  "padding": "0",
@@ -1438,35 +1293,22 @@
1438
1293
  ".boring-viewer .boring-markdown-content blockquote": {
1439
1294
  "margin": "1rem 0",
1440
1295
  "padding": "0.5rem 1rem",
1441
- "border-left": "3px solid color-mix(in oklab, var(--primary) 35%, transparent)",
1442
- "border-radius": "0 0.375rem 0.375rem 0",
1443
- "background": "color-mix(in oklab, var(--foreground) 4%, transparent)",
1444
- "color": "color-mix(in oklab, var(--foreground) 85%, transparent)"
1445
- },
1446
- ".boring-viewer .boring-markdown-content blockquote > :first-child": {
1447
- "margin-top": "0"
1448
- },
1449
- ".boring-viewer .boring-markdown-content blockquote > :last-child": {
1450
- "margin-bottom": "0"
1296
+ "border-inline-start": "var(--default-border-width) solid var(--border)",
1297
+ "color": "var(--muted-foreground)"
1451
1298
  },
1452
1299
  ".boring-viewer .boring-markdown-content a": {
1453
1300
  "color": "var(--foreground)",
1454
1301
  "text-decoration": "underline",
1455
- "text-decoration-thickness": "1px",
1456
- "text-underline-offset": "3px",
1457
- "text-decoration-color": "color-mix(in oklab, var(--foreground) 45%, transparent)",
1458
1302
  "cursor": "text"
1459
1303
  },
1460
1304
  ".boring-viewer .boring-markdown-content hr": {
1461
1305
  "margin": "1.5rem 0",
1462
1306
  "border": "0",
1463
- "border-top": "1px solid color-mix(in oklab, var(--border) 85%, transparent)"
1307
+ "border-top": "var(--default-border-width) solid var(--border)"
1464
1308
  },
1465
1309
  ".boring-viewer .boring-markdown-content mark": {
1466
- "padding": "0 0.15em",
1467
- "border-radius": "0.2em",
1468
- "background": "color-mix(in oklab, #facc15 40%, transparent)",
1469
- "color": "inherit"
1310
+ "background": "var(--accent)",
1311
+ "color": "var(--accent-foreground)"
1470
1312
  },
1471
1313
  ".boring-viewer .boring-markdown-content .tableWrapper": {
1472
1314
  "margin": "1rem 0",
@@ -1475,84 +1317,49 @@
1475
1317
  ".boring-viewer .boring-markdown-content table": {
1476
1318
  "width": "100%",
1477
1319
  "border-collapse": "collapse",
1478
- "font-size": "0.875rem"
1320
+ "font-size": "var(--text-sm)"
1479
1321
  },
1480
1322
  ".boring-viewer .boring-markdown-content :is(th, td)": {
1481
1323
  "min-width": "4rem",
1482
1324
  "padding": "0.5rem 0.75rem",
1483
- "border": "1px solid color-mix(in oklab, var(--border) 90%, transparent)",
1325
+ "border": "var(--default-border-width) solid var(--border)",
1484
1326
  "text-align": "left",
1485
1327
  "vertical-align": "top"
1486
1328
  },
1487
1329
  ".boring-viewer .boring-markdown-content th": {
1488
- "background": "color-mix(in oklab, var(--foreground) 5%, transparent)",
1489
- "font-weight": "600"
1330
+ "background": "var(--muted)",
1331
+ "font-weight": "var(--font-weight-semibold)"
1490
1332
  },
1491
1333
  ".boring-viewer .boring-markdown-content :is(th, td) > p": {
1492
1334
  "margin": "0"
1493
1335
  },
1494
1336
  ".boring-viewer .boring-markdown-content .selectedCell": {
1495
- "background": "color-mix(in oklab, var(--primary) 12%, transparent)"
1337
+ "background": "var(--accent)"
1496
1338
  },
1497
1339
  ".boring-viewer .boring-markdown-content img": {
1498
1340
  "display": "block",
1499
1341
  "max-width": "100%",
1500
1342
  "height": "auto",
1501
- "margin": "1rem 0",
1502
- "border-radius": "0.5rem"
1343
+ "margin": "1rem 0"
1503
1344
  },
1504
1345
  ".boring-viewer .boring-markdown-content .boring-markdown-image": {
1505
1346
  "display": "inline-flex",
1506
- "align-items": "center",
1507
- "gap": "0.4rem",
1508
1347
  "max-width": "100%",
1509
1348
  "margin": "0.125rem 0",
1510
1349
  "padding": "0.125rem 0.5rem",
1511
- "border": "1px dashed var(--border)",
1512
- "border-radius": "0.375rem",
1513
1350
  "background": "var(--muted)",
1514
- "color": "var(--muted-foreground)",
1515
- "font-size": "0.85em",
1516
- "line-height": "1.5"
1517
- },
1518
- ".boring-viewer .boring-markdown-content .boring-markdown-image::before": {
1519
- "content": "\"\"",
1520
- "flex": "none",
1521
- "width": "0.85em",
1522
- "height": "0.85em",
1523
- "border": "1.5px solid currentColor",
1524
- "border-radius": "0.15em",
1525
- "opacity": "0.7"
1526
- },
1527
- ".boring-viewer .boring-markdown-content .ProseMirror-selectednode": {
1528
- "outline": "2px solid color-mix(in oklab, var(--ring) 70%, transparent)",
1529
- "outline-offset": "2px"
1530
- },
1531
- ".boring-viewer .boring-html-pane": {
1532
- "display": "flex",
1533
- "flex": "1 1 auto",
1534
- "flex-direction": "column",
1535
- "min-height": "0",
1536
- "min-width": "0"
1351
+ "color": "var(--muted-foreground)"
1537
1352
  },
1538
1353
  ".boring-viewer .boring-html-viewer__preview": {
1539
1354
  "display": "flex",
1540
1355
  "flex": "1 1 auto",
1541
1356
  "flex-direction": "column",
1542
- "min-height": "0",
1543
- "background": "var(--muted)"
1357
+ "min-height": "0"
1544
1358
  },
1545
1359
  ".boring-viewer .boring-html-viewer__preview > p": {
1546
1360
  "flex": "none",
1547
1361
  "margin": "0",
1548
- "padding": "0.375rem 0.75rem",
1549
- "border-bottom": "1px solid var(--border)",
1550
- "background": "var(--background)",
1551
- "color": "var(--muted-foreground)",
1552
- "font-size": "0.75rem"
1553
- },
1554
- ".boring-viewer .boring-html-viewer__preview > p[role=\"alert\"]": {
1555
- "color": "var(--destructive)"
1362
+ "padding": "0.375rem 0.75rem"
1556
1363
  },
1557
1364
  ".boring-viewer .boring-html-viewer__preview > div": {
1558
1365
  "display": "flex",
@@ -1564,38 +1371,48 @@
1564
1371
  "width": "100%",
1565
1372
  "height": "100%",
1566
1373
  "min-height": "0",
1567
- "border": "0",
1568
- "background": "#fff",
1569
- "color-scheme": "light"
1374
+ "border": "0"
1570
1375
  },
1571
1376
  ".boring-viewer .boring-viewer-checker": {
1572
- "background-color": "#fff",
1573
- "background-image": "linear-gradient(45deg, #d4d4d8 25%, transparent 25%, transparent 75%, #d4d4d8 75%), linear-gradient(45deg, #d4d4d8 25%, transparent 25%, transparent 75%, #d4d4d8 75%)",
1377
+ "background-color": "var(--background)",
1378
+ "background-image": "linear-gradient(45deg, var(--muted) 25%, transparent 25%, transparent 75%, var(--muted) 75%), linear-gradient(45deg, var(--muted) 25%, transparent 25%, transparent 75%, var(--muted) 75%)",
1574
1379
  "background-position": "0 0, 8px 8px",
1575
1380
  "background-size": "16px 16px"
1576
1381
  },
1577
1382
  ".boring-viewer .boring-viewer-stage": {
1578
- "background": "var(--muted)",
1579
- "scrollbar-width": "thin"
1580
- },
1581
- ".boring-viewer .boring-viewer-stage:focus-visible": {
1582
- "outline": "2px solid color-mix(in oklab, var(--ring) 60%, transparent)",
1583
- "outline-offset": "-2px"
1383
+ "overflow": "auto"
1584
1384
  },
1585
- "@media (pointer: coarse)": {
1586
- ".boring-viewer .boring-markdown-tool": {
1587
- "width": "2.75rem",
1588
- "height": "2.75rem"
1385
+ "@media (max-width: 640px)": {
1386
+ ".boring-viewer .boring-markdown-content": {
1387
+ "padding": "1.25rem 1.25rem 3rem"
1388
+ },
1389
+ ".boring-viewer .boring-markdown-toolbar": {
1390
+ "display": "none"
1391
+ },
1392
+ ".boring-viewer.boring-markdown-dock": {
1393
+ "display": "flex",
1394
+ "align-items": "center",
1395
+ "gap": "0.125rem",
1396
+ "overflow-x": "auto",
1397
+ "scrollbar-width": "none",
1398
+ "position": "fixed",
1399
+ "inset-inline": "0",
1400
+ "z-index": "50",
1401
+ "padding": "0.25rem 1.5rem 0.25rem 0.5rem",
1402
+ "padding-bottom": "calc(0.25rem + env(safe-area-inset-bottom, 0px))",
1403
+ "background": "var(--background)",
1404
+ "mask-image": "linear-gradient(to right, black calc(100% - 2rem), transparent)"
1589
1405
  },
1590
- ".boring-viewer .boring-markdown-link input, .boring-viewer .boring-markdown-link button, .boring-viewer .boring-markdown-alert button, .boring-viewer .boring-markdown-proposal > button": {
1591
- "height": "2.75rem"
1406
+ ".boring-viewer.boring-markdown-dock[data-keyboard]": {
1407
+ "padding-bottom": "0.25rem"
1592
1408
  },
1593
- ".boring-viewer .boring-markdown-link input, .boring-viewer .boring-markdown-source, .boring-viewer .boring-html-viewer__source": {
1594
- "font-size": "1rem"
1409
+ ".boring-viewer.boring-markdown-dock > .boring-markdown-dock-rule": {
1410
+ "position": "absolute",
1411
+ "inset-inline": "0",
1412
+ "top": "0"
1595
1413
  },
1596
- ".boring-viewer .boring-markdown-content ul[data-type=\"taskList\"] li > label input[type=\"checkbox\"]": {
1597
- "width": "1.25rem",
1598
- "height": "1.25rem"
1414
+ ".boring-viewer [data-boring=\"markdown-editor\"][data-dock] .boring-markdown-content": {
1415
+ "padding-bottom": "6rem"
1599
1416
  }
1600
1417
  }
1601
1418
  }
@@ -1605,15 +1422,20 @@
1605
1422
  "name": "provider-setup",
1606
1423
  "type": "registry:component",
1607
1424
  "title": "Provider setup",
1608
- "description": "A Tailwind popover for configuring model access: pick any registered Pi provider and model, save an API key (masked, shows \"saved\"), run a device-code subscription sign-in (code, link and status), set an optional gateway and see when a provider needs one. Transport-agnostic: props in, callbacks out, no fetch. Owned, editable source; fits the pi-chat controls slot.",
1425
+ "description": "A shadcn popover for configuring model access: pick any registered Pi provider and model, save an API key (masked, shows \"saved\"), run a device-code subscription sign-in (code, link and status), set an optional gateway and see when a provider needs one. Transport-agnostic: props in, callbacks out, no fetch. Owned, editable source; fits the pi-chat controls slot.",
1609
1426
  "dependencies": [
1610
1427
  "react@^19.0.0",
1611
1428
  "react-dom@^19.0.0",
1612
1429
  "lucide-react@^1.51.0"
1613
1430
  ],
1614
1431
  "registryDependencies": [
1615
- "https://cdn.jsdelivr.net/npm/@hachej/boring-ui-kit@0.3.2/r/theme.json",
1616
- "https://cdn.jsdelivr.net/npm/@hachej/boring-ui-kit@0.3.2/r/utils.json"
1432
+ "https://cdn.jsdelivr.net/npm/@hachej/boring-ui-kit@0.4.0/r/theme.json",
1433
+ "https://cdn.jsdelivr.net/npm/@hachej/boring-ui-kit@0.4.0/r/utils.json",
1434
+ "button",
1435
+ "input",
1436
+ "label",
1437
+ "native-select",
1438
+ "popover"
1617
1439
  ],
1618
1440
  "files": [
1619
1441
  {
@@ -1629,9 +1451,9 @@
1629
1451
  "title": "Feedback",
1630
1452
  "description": "Feedback from the chat composer: one Feedback button starts feedback mode on the application page (hover, click to pin a numbered note, hold ⌥ to use the app, optional voice), and one chip carries the notes to the next message. FeedbackBar, NoteBubble, FeedbackChip with its review, useComposerFeedback for the pi-chat composer, and PickerOverlay styles. Optional, not mounted by default: PointButton, AnnotateSheet, FeedbackList and FeedbackReport. Picking, masking, anchoring and placement stay in @hachej/boring-feedback/page and /ui, so restyling cannot weaken them.",
1631
1453
  "dependencies": [
1632
- "@hachej/boring-feedback@^0.3.2",
1633
- "@hachej/boring-ui-kit@^0.3.2",
1634
- "@hachej/boring-files@^0.3.2",
1454
+ "@hachej/boring-feedback@^0.4.0",
1455
+ "@hachej/boring-ui-kit@^0.4.0",
1456
+ "@hachej/boring-files@^0.4.0",
1635
1457
  "react@^19.0.0",
1636
1458
  "react-dom@^19.0.0",
1637
1459
  "lucide-react@^1.51.0"
@@ -1701,9 +1523,6 @@
1701
1523
  "--boring-feedback-text": "var(--popover-foreground)",
1702
1524
  "--boring-feedback-muted": "var(--muted-foreground)",
1703
1525
  "--boring-feedback-border": "var(--border)",
1704
- "--boring-feedback-radius": "var(--radius-lg, var(--radius, 0.625rem))",
1705
- "--boring-feedback-radius-md": "var(--radius-md, calc(var(--radius, 0.625rem) * 0.8))",
1706
- "--boring-feedback-shadow": "var(--shadow-lg, 0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1))",
1707
1526
  "--boring-feedback-label-background": "var(--foreground)",
1708
1527
  "--boring-feedback-label-foreground": "var(--background)",
1709
1528
  "font-family": "inherit",
@@ -1711,58 +1530,17 @@
1711
1530
  "line-height": "var(--leading-normal, 1.5)",
1712
1531
  "color": "var(--boring-feedback-text)"
1713
1532
  },
1533
+ "@layer base": {
1534
+ "[data-boring=\"feedback\"] :where(button, [role=\"button\"])": {
1535
+ "appearance": "none",
1536
+ "background-color": "transparent",
1537
+ "border": "0",
1538
+ "padding": "0"
1539
+ }
1540
+ },
1714
1541
  "[data-boring=\"feedback\"] *, [data-boring=\"feedback\"] *::before, [data-boring=\"feedback\"] *::after": {
1715
1542
  "box-sizing": "border-box"
1716
1543
  },
1717
- "[data-boring=\"feedback\"] .boring-feedback-button": {
1718
- "display": "inline-flex",
1719
- "align-items": "center",
1720
- "justify-content": "center",
1721
- "gap": "0.375rem",
1722
- "min-height": "2.25rem",
1723
- "padding": "0 0.875rem",
1724
- "border": "var(--border-width, 1px) solid var(--boring-feedback-border)",
1725
- "border-radius": "var(--boring-feedback-radius-md)",
1726
- "background": "var(--boring-feedback-surface)",
1727
- "color": "var(--boring-feedback-text)",
1728
- "font": "inherit",
1729
- "font-weight": "var(--font-weight-semibold, 600)",
1730
- "cursor": "pointer"
1731
- },
1732
- "[data-boring=\"feedback\"] .boring-feedback-button:hover": {
1733
- "background": "var(--accent)"
1734
- },
1735
- "[data-boring=\"feedback\"] .boring-feedback-button:focus-visible, [data-boring=\"feedback\"] button:focus-visible, [data-boring=\"feedback\"] textarea:focus-visible": {
1736
- "outline": "2px solid var(--ring)",
1737
- "outline-offset": "2px"
1738
- },
1739
- "[data-boring=\"feedback\"] .boring-feedback-button[data-variant=\"primary\"]": {
1740
- "border-color": "transparent",
1741
- "background": "var(--boring-feedback-accent)",
1742
- "color": "var(--primary-foreground)"
1743
- },
1744
- "[data-boring=\"feedback\"] .boring-feedback-button:disabled": {
1745
- "opacity": "0.6",
1746
- "cursor": "default"
1747
- },
1748
- "[data-boring=\"feedback\"] .boring-feedback-button[aria-pressed=\"true\"]": {
1749
- "background": "var(--boring-feedback-accent)",
1750
- "color": "var(--primary-foreground)"
1751
- },
1752
- "[data-boring=\"feedback\"] .boring-feedback-icon": {
1753
- "display": "inline-flex",
1754
- "align-items": "center",
1755
- "justify-content": "center",
1756
- "width": "2rem",
1757
- "height": "2rem",
1758
- "border": "0",
1759
- "border-radius": "var(--boring-feedback-radius-md)",
1760
- "background": "transparent",
1761
- "color": "var(--boring-feedback-muted)",
1762
- "font-size": "var(--text-xl, 1.25rem)",
1763
- "line-height": "1",
1764
- "cursor": "pointer"
1765
- },
1766
1544
  "[data-boring=\"feedback\"].boring-feedback-point": {
1767
1545
  "display": "inline-flex",
1768
1546
  "align-items": "center",
@@ -1779,18 +1557,11 @@
1779
1557
  "[data-boring=\"feedback\"] .boring-feedback-keys": {
1780
1558
  "opacity": "0.8"
1781
1559
  },
1782
- "[data-boring=\"feedback\"].boring-feedback-sheet, [data-boring=\"feedback\"].boring-feedback-report, [data-boring=\"feedback\"].boring-feedback-list": {
1783
- "display": "flex",
1784
- "flex-direction": "column",
1785
- "gap": "0.75rem",
1786
- "padding": "1rem",
1787
- "border": "var(--border-width, 1px) solid var(--boring-feedback-border)",
1788
- "border-radius": "var(--boring-feedback-radius)",
1789
- "background": "var(--boring-feedback-surface)"
1560
+ "[data-boring=\"feedback\"]:is(.boring-feedback-sheet, .boring-feedback-report, .boring-feedback-list, .boring-feedback-bubble, .boring-feedback-review, .boring-feedback-pointbar, .boring-feedback-preview, .boring-feedback-bar)": {
1561
+ "padding-inline": "var(--card-spacing)"
1790
1562
  },
1791
1563
  "[data-boring=\"feedback\"].boring-feedback-sheet": {
1792
1564
  "z-index": "2147483000",
1793
- "box-shadow": "var(--boring-feedback-shadow)",
1794
1565
  "max-height": "calc(100dvh - 24px)",
1795
1566
  "overflow": "auto"
1796
1567
  },
@@ -1831,18 +1602,6 @@
1831
1602
  "font-weight": "var(--font-weight-semibold, 600)",
1832
1603
  "font-size": "var(--text-sm, 0.875rem)"
1833
1604
  },
1834
- "[data-boring=\"feedback\"] textarea": {
1835
- "width": "100%",
1836
- "padding": "0.5rem 0.625rem",
1837
- "border": "var(--border-width, 1px) solid var(--input)",
1838
- "border-radius": "var(--boring-feedback-radius-md)",
1839
- "background": "var(--background)",
1840
- "color": "inherit",
1841
- "font": "inherit",
1842
- "font-size": "var(--text-base, 1rem)",
1843
- "font-weight": "var(--font-weight-normal, 400)",
1844
- "resize": "vertical"
1845
- },
1846
1605
  "[data-boring=\"feedback\"] .boring-feedback-actions": {
1847
1606
  "display": "flex",
1848
1607
  "flex-wrap": "wrap",
@@ -1861,9 +1620,7 @@
1861
1620
  },
1862
1621
  "[data-boring=\"feedback\"] .boring-feedback-notice": {
1863
1622
  "margin": "0",
1864
- "padding": "0.5rem 0.625rem",
1865
- "border-radius": "var(--boring-feedback-radius-md)",
1866
- "background": "color-mix(in srgb, var(--boring-feedback-reveal) 14%, transparent)",
1623
+ "color": "var(--boring-feedback-muted)",
1867
1624
  "font-size": "var(--text-sm, 0.875rem)"
1868
1625
  },
1869
1626
  "[data-boring=\"feedback\"] .boring-feedback-copied pre, [data-boring=\"feedback\"] .boring-feedback-manual": {
@@ -1888,22 +1645,6 @@
1888
1645
  "padding": "0",
1889
1646
  "list-style": "none"
1890
1647
  },
1891
- "[data-boring=\"feedback\"].boring-feedback-list li button": {
1892
- "display": "grid",
1893
- "gap": "0.125rem",
1894
- "width": "100%",
1895
- "padding": "0.5rem 0.625rem",
1896
- "border": "0",
1897
- "border-radius": "var(--boring-feedback-radius-md)",
1898
- "background": "transparent",
1899
- "color": "inherit",
1900
- "font": "inherit",
1901
- "text-align": "left",
1902
- "cursor": "pointer"
1903
- },
1904
- "[data-boring=\"feedback\"].boring-feedback-list li button:hover, [data-boring=\"feedback\"].boring-feedback-list li button[aria-current=\"true\"]": {
1905
- "background": "var(--accent)"
1906
- },
1907
1648
  "[data-boring=\"feedback\"] .boring-feedback-title": {
1908
1649
  "font-weight": "var(--font-weight-semibold, 600)"
1909
1650
  },
@@ -1954,30 +1695,20 @@
1954
1695
  "left": "0",
1955
1696
  "right": "0",
1956
1697
  "z-index": "2147483000",
1957
- "display": "flex",
1698
+ "flex-direction": "row",
1958
1699
  "flex-wrap": "nowrap",
1959
1700
  "align-items": "center",
1960
1701
  "gap": "0.5rem",
1961
1702
  "width": "max-content",
1962
1703
  "max-width": "calc(100vw - 24px)",
1963
- "margin": "0 auto",
1964
- "padding": "0.375rem 0.5rem 0.375rem 0.875rem",
1965
- "border": "var(--border-width, 1px) solid var(--boring-feedback-border)",
1966
- "border-radius": "999px",
1967
- "background": "var(--boring-feedback-surface)",
1968
- "box-shadow": "var(--boring-feedback-shadow)"
1969
- },
1970
- "[data-boring=\"feedback\"].boring-feedback-bar[data-using=\"true\"]": {
1971
- "border-color": "var(--boring-feedback-reveal)"
1704
+ "margin": "0 auto"
1972
1705
  },
1973
1706
  "[data-boring=\"feedback\"].boring-feedback-bar[data-docked=\"true\"]": {
1974
1707
  "position": "static",
1975
1708
  "width": "auto",
1976
1709
  "max-width": "none",
1977
1710
  "margin": "0 0.625rem 0.625rem",
1978
- "flex-wrap": "wrap",
1979
- "border-radius": "var(--radius-xl, calc(var(--radius, 0.625rem) * 1.4))",
1980
- "box-shadow": "none"
1711
+ "flex-wrap": "wrap"
1981
1712
  },
1982
1713
  "[data-boring=\"feedback\"].boring-feedback-bar > *": {
1983
1714
  "flex": "none"
@@ -1994,15 +1725,6 @@
1994
1725
  "gap": "0.375rem",
1995
1726
  "font-weight": "var(--font-weight-semibold, 600)"
1996
1727
  },
1997
- "[data-boring=\"feedback\"] .boring-feedback-dot": {
1998
- "width": "0.5rem",
1999
- "height": "0.5rem",
2000
- "border-radius": "50%",
2001
- "background": "var(--boring-feedback-accent)"
2002
- },
2003
- "[data-boring=\"feedback\"].boring-feedback-bar[data-using=\"true\"] .boring-feedback-dot": {
2004
- "background": "var(--boring-feedback-reveal)"
2005
- },
2006
1728
  "[data-boring=\"feedback\"] .boring-feedback-bar-meta": {
2007
1729
  "color": "var(--boring-feedback-muted)",
2008
1730
  "font-size": "var(--text-sm, 0.875rem)"
@@ -2011,59 +1733,14 @@
2011
1733
  "color": "var(--boring-feedback-muted)",
2012
1734
  "font-size": "var(--text-xs, 0.75rem)"
2013
1735
  },
2014
- "[data-boring=\"feedback\"] .boring-feedback-icon[aria-pressed=\"true\"]": {
2015
- "background": "color-mix(in srgb, var(--destructive) 16%, transparent)",
2016
- "color": "var(--destructive)"
2017
- },
2018
- "[data-boring=\"feedback\"] .boring-feedback-icon:disabled": {
2019
- "opacity": "0.45",
2020
- "cursor": "default"
2021
- },
2022
- "[data-boring=\"feedback\"] .boring-feedback-recording": {
2023
- "display": "inline-flex",
2024
- "align-items": "center",
2025
- "gap": "0.375rem",
2026
- "padding": "0.125rem 0.5rem",
2027
- "border-radius": "999px",
2028
- "background": "color-mix(in srgb, var(--destructive) 12%, transparent)",
2029
- "color": "var(--destructive)",
2030
- "font-size": "var(--text-xs, 0.75rem)",
2031
- "font-weight": "var(--font-weight-semibold, 600)"
2032
- },
2033
- "[data-boring=\"feedback\"] .boring-feedback-rec": {
2034
- "width": "0.5rem",
2035
- "height": "0.5rem",
2036
- "border-radius": "50%",
2037
- "background": "var(--destructive)"
2038
- },
2039
1736
  "[data-boring=\"feedback\"].boring-feedback-bar[data-docked=\"true\"] > .boring-feedback-hint": {
2040
1737
  "flex": "1 1 10rem",
2041
1738
  "max-width": "none",
2042
1739
  "white-space": "normal"
2043
1740
  },
2044
- "[data-boring=\"feedback\"] .boring-feedback-record": {
2045
- "min-height": "2rem",
2046
- "padding": "0 0.625rem",
2047
- "gap": "0.3125rem",
2048
- "font-size": "var(--text-sm, 0.875rem)"
2049
- },
2050
- "[data-boring=\"feedback\"] .boring-feedback-record[aria-pressed=\"true\"]": {
2051
- "border-color": "transparent",
2052
- "background": "var(--destructive)",
2053
- "color": "white"
2054
- },
2055
- "[data-boring=\"feedback\"] .boring-feedback-stop": {
2056
- "width": "0.625rem",
2057
- "height": "0.625rem",
2058
- "border-radius": "2px",
2059
- "background": "currentColor"
2060
- },
2061
1741
  "[data-boring=\"feedback\"] .boring-feedback-timer": {
2062
1742
  "font-variant-numeric": "tabular-nums"
2063
1743
  },
2064
- "[data-boring=\"feedback\"].boring-feedback-bar[data-recording=\"true\"]": {
2065
- "border-color": "color-mix(in srgb, var(--destructive) 55%, var(--boring-feedback-border))"
2066
- },
2067
1744
  "[data-boring=\"feedback\"] .boring-feedback-voice-problem": {
2068
1745
  "flex": "1 1 100%",
2069
1746
  "margin": "0",
@@ -2098,24 +1775,8 @@
2098
1775
  "font-size": "var(--text-xs, 0.75rem)",
2099
1776
  "line-height": "var(--leading-snug, 1.375)"
2100
1777
  },
2101
- "[data-boring=\"feedback\"] .boring-feedback-badge": {
2102
- "flex": "none",
2103
- "padding": "0 0.375rem",
2104
- "border-radius": "999px",
2105
- "background": "var(--muted)",
2106
- "color": "var(--boring-feedback-muted)",
2107
- "font-size": "var(--text-xs, 0.75rem)",
2108
- "line-height": "calc(var(--spacing, 0.25rem) * 5)"
2109
- },
2110
1778
  "[data-boring=\"feedback\"].boring-feedback-bubble": {
2111
- "z-index": "2147483001",
2112
- "display": "grid",
2113
- "gap": "0.375rem",
2114
- "padding": "0.5rem",
2115
- "border": "var(--border-width, 1px) solid var(--boring-feedback-border)",
2116
- "border-radius": "var(--boring-feedback-radius)",
2117
- "background": "var(--boring-feedback-surface)",
2118
- "box-shadow": "var(--boring-feedback-shadow)"
1779
+ "z-index": "2147483001"
2119
1780
  },
2120
1781
  "[data-boring=\"feedback\"] .boring-feedback-bubble-head, [data-boring=\"feedback\"] .boring-feedback-note-head": {
2121
1782
  "display": "flex",
@@ -2142,46 +1803,17 @@
2142
1803
  "flex-wrap": "wrap",
2143
1804
  "align-items": "center",
2144
1805
  "gap": "0.125rem",
2145
- "max-width": "100%",
2146
- "padding": "0.125rem 0.125rem 0.125rem 0.625rem",
2147
- "border": "var(--border-width, 1px) solid var(--boring-feedback-border)",
2148
- "border-radius": "999px",
2149
- "background": "color-mix(in srgb, var(--boring-feedback-accent) 8%, var(--boring-feedback-surface))",
2150
- "font-size": "var(--text-sm, 0.875rem)"
2151
- },
2152
- "[data-boring=\"feedback\"] .boring-feedback-chip-open": {
2153
- "min-width": "0",
2154
- "padding": "0.25rem 0.25rem",
2155
- "border": "0",
2156
- "background": "transparent",
2157
- "color": "inherit",
2158
- "font": "inherit",
2159
- "font-weight": "var(--font-weight-semibold, 600)",
2160
- "text-align": "left",
2161
- "cursor": "pointer"
1806
+ "max-width": "100%"
2162
1807
  },
2163
1808
  "[data-boring=\"feedback\"] .boring-feedback-chip-route": {
2164
1809
  "color": "var(--boring-feedback-muted)",
2165
1810
  "font-family": "var(--font-mono, ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace)",
2166
1811
  "font-weight": "var(--font-weight-medium, 500)"
2167
1812
  },
2168
- "[data-boring=\"feedback\"] .boring-feedback-chip-remove": {
2169
- "width": "1.5rem",
2170
- "height": "1.5rem",
2171
- "font-size": "var(--text-base, 1rem)"
2172
- },
2173
1813
  "[data-boring=\"feedback\"].boring-feedback-review": {
2174
1814
  "z-index": "2147483000",
2175
- "display": "flex",
2176
- "flex-direction": "column",
2177
- "gap": "0.625rem",
2178
1815
  "max-height": "min(28rem, calc(100dvh - 24px))",
2179
1816
  "overflow": "auto",
2180
- "padding": "0.875rem",
2181
- "border": "var(--border-width, 1px) solid var(--boring-feedback-border)",
2182
- "border-radius": "var(--boring-feedback-radius)",
2183
- "background": "var(--boring-feedback-surface)",
2184
- "box-shadow": "var(--boring-feedback-shadow)",
2185
1817
  "text-align": "left"
2186
1818
  },
2187
1819
  "[data-boring=\"feedback\"] .boring-feedback-notes": {
@@ -2194,34 +1826,15 @@
2194
1826
  },
2195
1827
  "[data-boring=\"feedback\"] .boring-feedback-notes > li": {
2196
1828
  "display": "grid",
2197
- "gap": "0.25rem",
2198
- "padding": "0.375rem",
2199
- "border-radius": "var(--boring-feedback-radius-md)"
2200
- },
2201
- "[data-boring=\"feedback\"] .boring-feedback-notes > li:hover, [data-boring=\"feedback\"] .boring-feedback-notes > li:focus-within": {
2202
- "background": "var(--accent)"
1829
+ "gap": "0.25rem"
2203
1830
  },
2204
1831
  "[data-boring=\"feedback\"].boring-feedback-pointbar": {
2205
1832
  "position": "fixed",
2206
1833
  "left": "8px",
2207
1834
  "right": "8px",
2208
1835
  "z-index": "2147483000",
2209
- "display": "flex",
2210
- "flex-direction": "column",
2211
- "gap": "0.375rem",
2212
1836
  "max-width": "32rem",
2213
- "margin": "0 auto",
2214
- "padding": "0.5rem",
2215
- "border": "var(--border-width, 1px) solid var(--boring-feedback-border)",
2216
- "border-radius": "var(--boring-feedback-radius)",
2217
- "background": "var(--boring-feedback-surface)",
2218
- "box-shadow": "var(--boring-feedback-shadow)"
2219
- },
2220
- "[data-boring=\"feedback\"].boring-feedback-pointbar[data-using=\"true\"]": {
2221
- "border-color": "var(--boring-feedback-reveal)"
2222
- },
2223
- "[data-boring=\"feedback\"].boring-feedback-pointbar[data-using=\"true\"] .boring-feedback-dot": {
2224
- "background": "var(--boring-feedback-reveal)"
1837
+ "margin": "0 auto"
2225
1838
  },
2226
1839
  "[data-boring=\"feedback\"] .boring-feedback-point-line": {
2227
1840
  "display": "flex",
@@ -2230,9 +1843,6 @@
2230
1843
  "min-width": "0",
2231
1844
  "padding": "0 0.25rem"
2232
1845
  },
2233
- "[data-boring=\"feedback\"] .boring-feedback-point-line .boring-feedback-dot": {
2234
- "flex": "none"
2235
- },
2236
1846
  "[data-boring=\"feedback\"] .boring-feedback-point-hint": {
2237
1847
  "flex": "1",
2238
1848
  "min-width": "0",
@@ -2249,21 +1859,10 @@
2249
1859
  "align-items": "center",
2250
1860
  "gap": "0.375rem"
2251
1861
  },
2252
- "[data-boring=\"feedback\"] .boring-feedback-point-actions .boring-feedback-button": {
2253
- "min-height": "2.75rem",
2254
- "min-width": "2.75rem"
2255
- },
2256
1862
  "[data-boring=\"feedback\"] .boring-feedback-point-spacer": {
2257
1863
  "flex": "1"
2258
1864
  },
2259
1865
  "@media (max-width: 640px), (pointer: coarse)": {
2260
- "[data-boring=\"feedback\"] .boring-feedback-button": {
2261
- "min-height": "2.75rem"
2262
- },
2263
- "[data-boring=\"feedback\"] .boring-feedback-icon": {
2264
- "width": "2.75rem",
2265
- "height": "2.75rem"
2266
- },
2267
1866
  "[data-boring=\"feedback\"] .boring-feedback-hint": {
2268
1867
  "display": "none"
2269
1868
  },
@@ -2273,30 +1872,21 @@
2273
1872
  "[data-boring=\"feedback\"].boring-feedback-bar": {
2274
1873
  "top": "auto",
2275
1874
  "bottom": "12px",
2276
- "flex-wrap": "wrap",
2277
- "border-radius": "var(--boring-feedback-radius)"
1875
+ "flex-wrap": "wrap"
1876
+ },
1877
+ "[data-boring=\"feedback\"] :is([data-slot=\"button\"], [data-slot=\"toggle\"], [class~=\"group/button\"], [class~=\"group/toggle\"])": {
1878
+ "min-height": "2.75rem",
1879
+ "min-width": "2.75rem"
2278
1880
  }
2279
1881
  },
2280
- "[data-boring=\"feedback\"] .boring-feedback-mic": {
2281
- "flex": "none",
2282
- "display": "block"
2283
- },
2284
1882
  "[data-boring=\"feedback\"].boring-feedback-preview": {
2285
1883
  "position": "fixed",
2286
1884
  "top": "12px",
2287
1885
  "left": "0",
2288
1886
  "right": "0",
2289
1887
  "z-index": "2147483001",
2290
- "display": "flex",
2291
- "flex-direction": "column",
2292
- "gap": "0.5rem",
2293
1888
  "width": "min(40rem, calc(100vw - 24px))",
2294
- "margin": "0 auto",
2295
- "padding": "0.75rem 0.875rem",
2296
- "border": "calc(var(--border-width, 1px) * 2) solid var(--boring-feedback-reveal)",
2297
- "border-radius": "var(--boring-feedback-radius)",
2298
- "background": "var(--boring-feedback-surface)",
2299
- "box-shadow": "var(--boring-feedback-shadow)"
1889
+ "margin": "0 auto"
2300
1890
  },
2301
1891
  "[data-boring=\"feedback\"] .boring-feedback-preview-head": {
2302
1892
  "display": "flex",
@@ -2304,15 +1894,6 @@
2304
1894
  "align-items": "baseline",
2305
1895
  "gap": "0.5rem"
2306
1896
  },
2307
- "[data-boring=\"feedback\"] .boring-feedback-preview-title": {
2308
- "padding": "0.125rem 0.5rem",
2309
- "border-radius": "999px",
2310
- "background": "var(--primary)",
2311
- "color": "var(--primary-foreground)",
2312
- "font-size": "var(--text-sm, 0.875rem)",
2313
- "letter-spacing": "var(--tracking-wide, 0.025em)",
2314
- "text-transform": "uppercase"
2315
- },
2316
1897
  "[data-boring=\"feedback\"] .boring-feedback-preview-notice": {
2317
1898
  "font-weight": "var(--font-weight-semibold, 600)"
2318
1899
  },
@@ -2343,17 +1924,6 @@
2343
1924
  "flex-wrap": "wrap",
2344
1925
  "gap": "0.5rem"
2345
1926
  },
2346
- "[data-boring=\"feedback\"] .boring-feedback-preview-input": {
2347
- "flex": "1 1 12rem",
2348
- "min-width": "0",
2349
- "min-height": "2.25rem",
2350
- "padding": "0 0.75rem",
2351
- "border": "var(--border-width, 1px) solid var(--boring-feedback-border)",
2352
- "border-radius": "var(--boring-feedback-radius-md)",
2353
- "background": "var(--boring-feedback-surface)",
2354
- "color": "var(--boring-feedback-text)",
2355
- "font": "inherit"
2356
- },
2357
1927
  "[data-boring=\"feedback\"] .boring-feedback-pin-field": {
2358
1928
  "display": "grid"
2359
1929
  },
@@ -2367,55 +1937,28 @@
2367
1937
  "grid-row": "2"
2368
1938
  },
2369
1939
  "[data-boring=\"feedback\"] .boring-feedback-pin-field textarea": {
2370
- "display": "block",
2371
- "box-sizing": "border-box",
2372
1940
  "width": "100%",
2373
- "padding-right": "3.25rem"
1941
+ "padding-inline-end": "3.25rem"
2374
1942
  },
2375
1943
  "[data-boring=\"feedback\"] .boring-feedback-pin-mic": {
2376
1944
  "justify-self": "end",
2377
- "align-self": "end",
2378
- "display": "inline-flex",
2379
- "align-items": "center",
2380
- "justify-content": "center",
2381
- "width": "2.75rem",
2382
- "height": "2.75rem",
2383
- "padding": "0",
2384
- "border": "0",
2385
- "border-radius": "var(--boring-feedback-radius-md)",
2386
- "background": "transparent",
2387
- "color": "var(--boring-feedback-muted)",
2388
- "cursor": "pointer"
2389
- },
2390
- "[data-boring=\"feedback\"] .boring-feedback-pin-mic:hover": {
2391
- "color": "var(--boring-feedback-text, inherit)"
2392
- },
2393
- "[data-boring=\"feedback\"] .boring-feedback-pin-mic[aria-pressed=\"true\"]": {
2394
- "color": "var(--boring-feedback-accent)"
2395
- },
2396
- "[data-boring=\"feedback\"] .boring-feedback-pin-mic:disabled": {
2397
- "opacity": "0.6",
2398
- "cursor": "default"
1945
+ "align-self": "end"
2399
1946
  },
2400
1947
  "[data-boring=\"feedback\"] .boring-feedback-bubble-actions": {
2401
1948
  "display": "flex",
2402
1949
  "flex-wrap": "wrap",
2403
1950
  "gap": "0.375rem"
2404
- },
2405
- "[data-boring=\"feedback\"] .boring-feedback-bubble-actions .boring-feedback-button": {
2406
- "min-height": "2.75rem",
2407
- "padding": "0 0.625rem",
2408
- "font-size": "var(--text-sm, 0.875rem)"
2409
- },
2410
- "@media (pointer: coarse)": {
2411
- "[data-boring=\"feedback\"] .boring-feedback-bubble-actions .boring-feedback-button": {
2412
- "min-height": "2.75rem"
2413
- }
2414
1951
  }
2415
1952
  },
2416
1953
  "registryDependencies": [
2417
- "https://cdn.jsdelivr.net/npm/@hachej/boring-ui-kit@0.3.2/r/pi-chat.json",
2418
- "https://cdn.jsdelivr.net/npm/@hachej/boring-ui-kit@0.3.2/r/utils.json"
1954
+ "https://cdn.jsdelivr.net/npm/@hachej/boring-ui-kit@0.4.0/r/pi-chat.json",
1955
+ "https://cdn.jsdelivr.net/npm/@hachej/boring-ui-kit@0.4.0/r/utils.json",
1956
+ "button",
1957
+ "toggle",
1958
+ "badge",
1959
+ "item",
1960
+ "card",
1961
+ "textarea"
2419
1962
  ]
2420
1963
  },
2421
1964
  {
@@ -2424,7 +1967,7 @@
2424
1967
  "title": "Feedback preview",
2425
1968
  "description": "PreviewBanner: a live, reversible preview of a change in the page (Approve / Discard) over `@hachej/boring-feedback/preview`, whose subagent calls models through a host gateway. Separate from `feedback` so annotation-only apps do not install the model SDK; install `feedback` first (its styles cover the banner).",
2426
1969
  "dependencies": [
2427
- "@hachej/boring-feedback@^0.3.2",
1970
+ "@hachej/boring-feedback@^0.4.0",
2428
1971
  "@earendil-works/pi-ai@~1.2.0",
2429
1972
  "react@^19.0.0"
2430
1973
  ],
@@ -2434,6 +1977,12 @@
2434
1977
  "type": "registry:component",
2435
1978
  "target": "components/feedback-preview/preview-banner.tsx"
2436
1979
  }
1980
+ ],
1981
+ "registryDependencies": [
1982
+ "button",
1983
+ "card",
1984
+ "badge",
1985
+ "input"
2437
1986
  ]
2438
1987
  },
2439
1988
  {
@@ -2442,8 +1991,8 @@
2442
1991
  "title": "Consumer task-list viewer",
2443
1992
  "description": "A consumer-defined task-list schema and controller over the shared text buffer, with a restylable borrowed React renderer.",
2444
1993
  "dependencies": [
2445
- "@hachej/boring-ui-kit@^0.3.2",
2446
- "@hachej/boring-files@^0.3.2",
1994
+ "@hachej/boring-ui-kit@^0.4.0",
1995
+ "@hachej/boring-files@^0.4.0",
2447
1996
  "react@^19.0.0",
2448
1997
  "react-dom@^19.0.0",
2449
1998
  "zod@^4.6.5"
@@ -2467,11 +2016,7 @@
2467
2016
  ],
2468
2017
  "css": {
2469
2018
  ".boring-task-list-recipe[data-boring=\"task-list-viewer\"]": {
2470
- "padding": "1rem",
2471
- "border": "1px solid var(--border, #d1d5db)",
2472
- "border-radius": "var(--boring-task-list-radius, 0.75rem)",
2473
- "background": "var(--background, #fff)",
2474
- "color": "var(--foreground, #111827)"
2019
+ "padding-inline": "var(--card-spacing)"
2475
2020
  },
2476
2021
  ".boring-task-list-recipe[data-boring=\"task-list-viewer\"] ul": {
2477
2022
  "list-style": "none",
@@ -2485,38 +2030,62 @@
2485
2030
  "gap": "0.5rem",
2486
2031
  "flex-wrap": "wrap"
2487
2032
  },
2488
- ".boring-task-list-recipe[data-boring=\"task-list-viewer\"] button": {
2489
- "min-height": "2.25rem",
2490
- "padding": "0.375rem 0.75rem"
2491
- },
2492
- ".boring-task-list-recipe[data-boring=\"task-list-viewer\"] input[type=\"text\"]": {
2493
- "min-height": "2.25rem",
2494
- "max-width": "100%"
2495
- },
2496
2033
  ".boring-task-list-recipe[data-boring=\"task-list-viewer\"] [role=\"alert\"]": {
2497
- "color": "var(--destructive, #b91c1c)"
2498
- },
2499
- ".boring-task-list-recipe[data-boring=\"task-list-viewer\"] :focus-visible": {
2500
- "outline": "2px solid var(--ring, #2563eb)",
2501
- "outline-offset": "2px"
2034
+ "color": "var(--destructive)"
2502
2035
  }
2503
2036
  },
2504
- "docs": "The installed task-list schema/controller are trusted consumer code; publication and draft recovery come from @hachej/boring-ui-kit/text-buffer. Construct a feature with a host-authenticated ResourceClient and exact source, then pass its concrete controller to TaskListViewer. Install native tools separately on the server. No host credentials or native kernel are copied into this item. Local tarball qualification only; no hosted release endpoint is advertised."
2037
+ "docs": "The installed task-list schema/controller are trusted consumer code; publication and draft recovery come from @hachej/boring-ui-kit/text-buffer. Construct a feature with a host-authenticated ResourceClient and exact source, then pass its concrete controller to TaskListViewer. Install native tools separately on the server. No host credentials or native kernel are copied into this item. Local tarball qualification only; no hosted release endpoint is advertised.",
2038
+ "registryDependencies": [
2039
+ "button",
2040
+ "card",
2041
+ "input",
2042
+ "checkbox"
2043
+ ]
2044
+ },
2045
+ {
2046
+ "name": "version-history",
2047
+ "type": "registry:component",
2048
+ "title": "Version history rows",
2049
+ "description": "Shared view-only version rows and menu metadata with relative time, provenance and Current. No file reads, publication or restoration.",
2050
+ "dependencies": [
2051
+ "@hachej/boring-files@^0.4.0",
2052
+ "react@^19.0.0"
2053
+ ],
2054
+ "registryDependencies": [
2055
+ "https://cdn.jsdelivr.net/npm/@hachej/boring-ui-kit@0.4.0/r/theme.json",
2056
+ "https://cdn.jsdelivr.net/npm/@hachej/boring-ui-kit@0.4.0/r/button.json",
2057
+ "button"
2058
+ ],
2059
+ "files": [
2060
+ {
2061
+ "path": "registry/version-history/version-history.tsx",
2062
+ "type": "registry:component",
2063
+ "target": "components/version-history/version-history.tsx"
2064
+ }
2065
+ ]
2505
2066
  },
2506
2067
  {
2507
2068
  "name": "file-tree",
2508
2069
  "type": "registry:component",
2509
2070
  "title": "File tree",
2510
- "description": "Browse, search, upload and inspect retained versions through one revisionProvider binding.",
2071
+ "description": "Browse, search, upload and inspect retained versions through one revisionProvider binding. Uses the consumer's shadcn Button and dropdown-menu with shared version-history rows; Base UI style only.",
2511
2072
  "dependencies": [
2512
- "@hachej/boring-ui-kit@^0.3.2",
2513
- "@hachej/boring-files@^0.3.2",
2073
+ "@hachej/boring-ui-kit@^0.4.0",
2074
+ "@hachej/boring-files@^0.4.0",
2514
2075
  "react@^19.0.0",
2515
- "radix-ui@^1.8.0",
2516
2076
  "lucide-react@^1.51.0"
2517
2077
  ],
2518
2078
  "registryDependencies": [
2519
- "https://cdn.jsdelivr.net/npm/@hachej/boring-ui-kit@0.3.2/r/theme.json"
2079
+ "https://cdn.jsdelivr.net/npm/@hachej/boring-ui-kit@0.4.0/r/theme.json",
2080
+ "https://cdn.jsdelivr.net/npm/@hachej/boring-ui-kit@0.4.0/r/utils.json",
2081
+ "https://cdn.jsdelivr.net/npm/@hachej/boring-ui-kit@0.4.0/r/version-history.json",
2082
+ "button",
2083
+ "dropdown-menu",
2084
+ "collapsible",
2085
+ "empty",
2086
+ "input",
2087
+ "separator",
2088
+ "sidebar"
2520
2089
  ],
2521
2090
  "files": [
2522
2091
  {
@@ -2533,21 +2102,24 @@
2533
2102
  "title": "Documents: the Library, a file and its revisions",
2534
2103
  "description": "The workspace's Library as the list, the chosen file in its viewer and its retained revisions beside it (an older one opens read-only). DocumentSheet opens one document over the app for a host's « Voir la fiche », with an optional « Toutes les fiches ». Every read goes through one revisionProvider binding.",
2535
2104
  "dependencies": [
2536
- "@hachej/boring-ui-kit@^0.3.2",
2537
- "@hachej/boring-files@^0.3.2",
2105
+ "@hachej/boring-ui-kit@^0.4.0",
2106
+ "@hachej/boring-files@^0.4.0",
2538
2107
  "react@^19.0.0",
2539
2108
  "lucide-react@^1.51.0"
2540
2109
  ],
2541
2110
  "registryDependencies": [
2542
- "https://cdn.jsdelivr.net/npm/@hachej/boring-ui-kit@0.3.2/r/theme.json",
2543
- "https://cdn.jsdelivr.net/npm/@hachej/boring-ui-kit@0.3.2/r/utils.json",
2544
- "https://cdn.jsdelivr.net/npm/@hachej/boring-ui-kit@0.3.2/r/button.json",
2545
- "https://cdn.jsdelivr.net/npm/@hachej/boring-ui-kit@0.3.2/r/pi-chat.json",
2546
- "https://cdn.jsdelivr.net/npm/@hachej/boring-ui-kit@0.3.2/r/pi-app.json",
2547
- "https://cdn.jsdelivr.net/npm/@hachej/boring-ui-kit@0.3.2/r/app-shell.json",
2548
- "https://cdn.jsdelivr.net/npm/@hachej/boring-ui-kit@0.3.2/r/file-tree.json",
2549
- "https://cdn.jsdelivr.net/npm/@hachej/boring-ui-kit@0.3.2/r/viewers.json",
2550
- "drawer"
2111
+ "https://cdn.jsdelivr.net/npm/@hachej/boring-ui-kit@0.4.0/r/theme.json",
2112
+ "https://cdn.jsdelivr.net/npm/@hachej/boring-ui-kit@0.4.0/r/utils.json",
2113
+ "https://cdn.jsdelivr.net/npm/@hachej/boring-ui-kit@0.4.0/r/button.json",
2114
+ "https://cdn.jsdelivr.net/npm/@hachej/boring-ui-kit@0.4.0/r/pi-chat.json",
2115
+ "https://cdn.jsdelivr.net/npm/@hachej/boring-ui-kit@0.4.0/r/pi-app.json",
2116
+ "https://cdn.jsdelivr.net/npm/@hachej/boring-ui-kit@0.4.0/r/app-shell.json",
2117
+ "https://cdn.jsdelivr.net/npm/@hachej/boring-ui-kit@0.4.0/r/file-tree.json",
2118
+ "https://cdn.jsdelivr.net/npm/@hachej/boring-ui-kit@0.4.0/r/viewers.json",
2119
+ "drawer",
2120
+ "button",
2121
+ "scroll-area",
2122
+ "separator"
2551
2123
  ],
2552
2124
  "files": [
2553
2125
  {