@hachej/boring-ui-kit 0.3.2 → 0.4.1

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 (57) hide show
  1. package/README.md +46 -18
  2. package/THIRD_PARTY_NOTICES.md +35 -0
  3. package/bin/boring-ui-blocks.mjs +286 -0
  4. package/dist/canvas-editor-native.d.ts +4 -1
  5. package/dist/canvas-editor-native.js +8 -6
  6. package/dist/canvas-editor.js +1 -1
  7. package/dist/canvas-proposals.d.ts +3 -1
  8. package/dist/canvas-proposals.js +4 -3
  9. package/dist/experience-document-viewer.d.ts +3 -0
  10. package/dist/experience-document-viewer.js +6 -5
  11. package/dist/experience.d.ts +3 -0
  12. package/dist/experience.js +2 -1
  13. package/dist/file-tree-view.d.ts +76 -3
  14. package/dist/file-tree-view.js +172 -39
  15. package/dist/file-tree.d.ts +3 -0
  16. package/dist/file-tree.js +17 -2
  17. package/dist/html-viewer.d.ts +4 -0
  18. package/dist/html-viewer.js +5 -3
  19. package/dist/markdown-autosave.d.ts +13 -0
  20. package/dist/markdown-autosave.js +94 -0
  21. package/dist/markdown-editor.d.ts +16 -0
  22. package/dist/markdown-editor.js +81 -17
  23. package/dist/markdown-extensions.js +9 -1
  24. package/dist/markdown-proposal-diff.d.ts +2 -1
  25. package/dist/markdown-proposal-diff.js +3 -2
  26. package/dist/markdown-safety.js +3 -1
  27. package/dist/native-chat.js +1 -1
  28. package/dist/remote-chat.d.ts +18 -0
  29. package/dist/remote-chat.js +149 -7
  30. package/dist/text-buffer.js +3 -2
  31. package/dist/text-draft-controls.d.ts +3 -1
  32. package/dist/text-draft-controls.js +3 -2
  33. package/dist/viewer-components.d.ts +14 -0
  34. package/dist/viewer-components.js +1 -0
  35. package/package.json +8 -4
  36. package/r/app-shell.json +39 -20
  37. package/r/button.json +19 -11
  38. package/r/dock.json +2 -2
  39. package/r/documents.json +17 -14
  40. package/r/feedback-preview.json +8 -2
  41. package/r/feedback.json +46 -325
  42. package/r/file-tree.json +14 -6
  43. package/r/html-viewer.json +8 -42
  44. package/r/markdown-editor.json +38 -87
  45. package/r/pi-ambient.json +15 -8
  46. package/r/pi-app.json +30 -24
  47. package/r/pi-chat.json +101 -70
  48. package/r/pi-workspace.json +7 -5
  49. package/r/provider-setup.json +9 -4
  50. package/r/registry.json +471 -893
  51. package/r/task-list-viewer.json +11 -21
  52. package/r/theme.json +23 -4
  53. package/r/version-history.json +24 -0
  54. package/r/viewers.json +139 -320
  55. package/styles/file-tree.css +41 -42
  56. package/dist/file-tree-shadcn.d.ts +0 -8
  57. 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.1/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.1",
159
+ "@hachej/boring-files@^0.4.1",
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.1/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.1",
324
+ "@hachej/boring-files@^0.4.1",
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.1/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.1",
382
+ "@hachej/boring-files@^0.4.1",
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.1/r/utils.json",
397
+ "https://cdn.jsdelivr.net/npm/@hachej/boring-ui-kit@0.4.1/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",
@@ -591,6 +569,16 @@
591
569
  "path": "registry/pi-chat/locale.ts",
592
570
  "type": "registry:lib",
593
571
  "target": "components/pi-chat/locale.ts"
572
+ },
573
+ {
574
+ "path": "registry/pi-chat/use-conversations.ts",
575
+ "type": "registry:hook",
576
+ "target": "components/pi-chat/use-conversations.ts"
577
+ },
578
+ {
579
+ "path": "registry/pi-chat/run-card.tsx",
580
+ "type": "registry:component",
581
+ "target": "components/pi-chat/run-card.tsx"
594
582
  }
595
583
  ],
596
584
  "css": {
@@ -598,7 +586,10 @@
598
586
  ".pi-chat, .pi-chat *, .pi-chat *::before, .pi-chat *::after": {
599
587
  "box-sizing": "border-box"
600
588
  },
601
- ".pi-chat :where(button, input, textarea)": {
589
+ ".pi-chat :where(*), .pi-chat :where(*)::before, .pi-chat :where(*)::after": {
590
+ "border-color": "var(--border)"
591
+ },
592
+ ".pi-chat :where(button, input, textarea, select)": {
602
593
  "font": "inherit",
603
594
  "color": "inherit",
604
595
  "letter-spacing": "inherit"
@@ -613,6 +604,22 @@
613
604
  },
614
605
  ".pi-chat [hidden]": {
615
606
  "display": "none"
607
+ },
608
+ ".pi-chat :where([data-slot=\"empty\"])": {
609
+ "border-width": "0"
610
+ },
611
+ ".pi-chat :where([data-slot=\"sidebar-menu\"], [data-slot=\"sidebar-menu-sub\"])": {
612
+ "margin": "0",
613
+ "padding": "0",
614
+ "list-style": "none"
615
+ }
616
+ },
617
+ "@layer utilities": {
618
+ "@media (max-width: 640px), (pointer: coarse)": {
619
+ ".pi-chat :is([data-slot=\"button\"], [data-slot=\"toggle\"], [class~=\"group/button\"], [class~=\"group/toggle\"])": {
620
+ "min-height": "2.75rem",
621
+ "min-width": "2.75rem"
622
+ }
616
623
  }
617
624
  },
618
625
  "@layer components": {
@@ -621,49 +628,14 @@
621
628
  "--chat-warning": "var(--warning, var(--muted-foreground))",
622
629
  "--chat-warning-soft": "var(--warning-soft, color-mix(in oklab, var(--chat-warning) 15%, var(--background)))",
623
630
  "--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))"
631
+ "--chat-display": "var(--font-display, var(--font-sans))",
632
+ "--chat-composer-radius": "26px",
633
+ "--chat-send-radius": "9999px",
634
+ "--chat-sheet-duration": "200ms"
625
635
  },
626
636
  ".pi-chat:is(.dark, .dark *)": {
627
637
  "--chat-warning-soft": "var(--warning-soft, color-mix(in oklab, var(--chat-warning) 26%, var(--background)))",
628
638
  "--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
639
  }
668
640
  }
669
641
  }
@@ -674,7 +646,7 @@
674
646
  "title": "Pi ambient agent",
675
647
  "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
648
  "dependencies": [
677
- "@hachej/boring-ui-kit@^0.3.2",
649
+ "@hachej/boring-ui-kit@^0.4.1",
678
650
  "react@^19.0.0",
679
651
  "react-dom@^19.0.0",
680
652
  "@earendil-works/pi-durable@~1.2.0",
@@ -682,11 +654,18 @@
682
654
  "lucide-react@^1.51.0"
683
655
  ],
684
656
  "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"
657
+ "https://cdn.jsdelivr.net/npm/@hachej/boring-ui-kit@0.4.1/r/theme.json",
658
+ "https://cdn.jsdelivr.net/npm/@hachej/boring-ui-kit@0.4.1/r/pi-chat.json",
659
+ "https://cdn.jsdelivr.net/npm/@hachej/boring-ui-kit@0.4.1/r/pi-workspace.json",
660
+ "https://cdn.jsdelivr.net/npm/@hachej/boring-ui-kit@0.4.1/r/utils.json",
661
+ "https://cdn.jsdelivr.net/npm/@hachej/boring-ui-kit@0.4.1/r/button.json",
662
+ "message-scroller",
663
+ "button",
664
+ "toggle",
665
+ "avatar",
666
+ "badge",
667
+ "card",
668
+ "separator"
690
669
  ],
691
670
  "files": [
692
671
  {
@@ -715,7 +694,7 @@
715
694
  "react@^19.0.0"
716
695
  ],
717
696
  "registryDependencies": [
718
- "https://cdn.jsdelivr.net/npm/@hachej/boring-ui-kit@0.3.2/r/utils.json"
697
+ "https://cdn.jsdelivr.net/npm/@hachej/boring-ui-kit@0.4.1/r/utils.json"
719
698
  ],
720
699
  "files": [
721
700
  {
@@ -735,10 +714,12 @@
735
714
  "react-dom@^19.0.0"
736
715
  ],
737
716
  "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"
717
+ "https://cdn.jsdelivr.net/npm/@hachej/boring-ui-kit@0.4.1/r/theme.json",
718
+ "https://cdn.jsdelivr.net/npm/@hachej/boring-ui-kit@0.4.1/r/pi-chat.json",
719
+ "https://cdn.jsdelivr.net/npm/@hachej/boring-ui-kit@0.4.1/r/utils.json",
720
+ "https://cdn.jsdelivr.net/npm/@hachej/boring-ui-kit@0.4.1/r/dock.json",
721
+ "badge",
722
+ "card"
742
723
  ],
743
724
  "files": [
744
725
  {
@@ -759,20 +740,26 @@
759
740
  "title": "Pi agent app",
760
741
  "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
742
  "dependencies": [
762
- "@hachej/boring-ui-kit@^0.3.2",
763
- "@hachej/boring-files@^0.3.2",
743
+ "@hachej/boring-ui-kit@^0.4.1",
744
+ "@hachej/boring-files@^0.4.1",
764
745
  "react@^19.0.0",
765
746
  "react-dom@^19.0.0",
766
- "lucide-react@^1.51.0",
767
- "radix-ui@^1.8.0"
747
+ "lucide-react@^1.51.0"
768
748
  ],
769
749
  "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"
750
+ "https://cdn.jsdelivr.net/npm/@hachej/boring-ui-kit@0.4.1/r/theme.json",
751
+ "https://cdn.jsdelivr.net/npm/@hachej/boring-ui-kit@0.4.1/r/pi-chat.json",
752
+ "https://cdn.jsdelivr.net/npm/@hachej/boring-ui-kit@0.4.1/r/pi-workspace.json",
753
+ "https://cdn.jsdelivr.net/npm/@hachej/boring-ui-kit@0.4.1/r/viewers.json",
754
+ "https://cdn.jsdelivr.net/npm/@hachej/boring-ui-kit@0.4.1/r/utils.json",
755
+ "https://cdn.jsdelivr.net/npm/@hachej/boring-ui-kit@0.4.1/r/button.json",
756
+ "drawer",
757
+ "button",
758
+ "https://cdn.jsdelivr.net/npm/@hachej/boring-ui-kit@0.4.1/r/file-tree.json",
759
+ "dropdown-menu",
760
+ "scroll-area",
761
+ "separator",
762
+ "table"
776
763
  ],
777
764
  "files": [
778
765
  {
@@ -785,6 +772,11 @@
785
772
  "type": "registry:component",
786
773
  "target": "components/pi-app/sessions.tsx"
787
774
  },
775
+ {
776
+ "path": "registry/pi-app/history-column.tsx",
777
+ "type": "registry:component",
778
+ "target": "components/pi-app/history-column.tsx"
779
+ },
788
780
  {
789
781
  "path": "registry/pi-app/artifact-panel.tsx",
790
782
  "type": "registry:component",
@@ -815,11 +807,6 @@
815
807
  "type": "registry:component",
816
808
  "target": "components/pi-app/new-version-notice.tsx"
817
809
  },
818
- {
819
- "path": "registry/pi-app/use-conversations.ts",
820
- "type": "registry:hook",
821
- "target": "components/pi-app/use-conversations.ts"
822
- },
823
810
  {
824
811
  "path": "registry/pi-app/app-labels.ts",
825
812
  "type": "registry:lib",
@@ -846,25 +833,30 @@
846
833
  "name": "app-shell",
847
834
  "type": "registry:block",
848
835
  "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).",
836
+ "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
837
  "dependencies": [
851
- "@hachej/boring-feedback@^0.3.2",
852
- "@hachej/boring-ui-kit@^0.3.2",
838
+ "@hachej/boring-feedback@^0.4.1",
839
+ "@hachej/boring-ui-kit@^0.4.1",
853
840
  "@base-ui/react@^1.9.0",
854
841
  "react@^19.0.0",
855
842
  "react-dom@^19.0.0",
856
843
  "lucide-react@^1.51.0"
857
844
  ],
858
845
  "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",
846
+ "https://cdn.jsdelivr.net/npm/@hachej/boring-ui-kit@0.4.1/r/pi-chat.json",
847
+ "https://cdn.jsdelivr.net/npm/@hachej/boring-ui-kit@0.4.1/r/dock.json",
848
+ "https://cdn.jsdelivr.net/npm/@hachej/boring-ui-kit@0.4.1/r/feedback.json",
849
+ "https://cdn.jsdelivr.net/npm/@hachej/boring-ui-kit@0.4.1/r/utils.json",
850
+ "https://cdn.jsdelivr.net/npm/@hachej/boring-ui-kit@0.4.1/r/button.json",
864
851
  "drawer",
865
852
  "sidebar",
866
853
  "avatar",
867
- "dropdown-menu"
854
+ "dropdown-menu",
855
+ "button",
856
+ "switch",
857
+ "badge",
858
+ "card",
859
+ "separator"
868
860
  ],
869
861
  "css": {
870
862
  "@layer base": {
@@ -881,6 +873,14 @@
881
873
  "margin": "0",
882
874
  "font": "inherit"
883
875
  }
876
+ },
877
+ "@layer utilities": {
878
+ "@media (max-width: 640px), (pointer: coarse)": {
879
+ ".app-shell :is([data-slot=\"button\"], [data-slot=\"toggle\"], [class~=\"group/button\"], [class~=\"group/toggle\"])": {
880
+ "min-height": "2.75rem",
881
+ "min-width": "2.75rem"
882
+ }
883
+ }
884
884
  }
885
885
  },
886
886
  "files": [
@@ -945,9 +945,14 @@
945
945
  "target": "components/app-shell/account.tsx"
946
946
  },
947
947
  {
948
- "path": "registry/app-shell/sheet.tsx",
948
+ "path": "registry/app-shell/app-sheet.tsx",
949
949
  "type": "registry:component",
950
- "target": "components/app-shell/sheet.tsx"
950
+ "target": "components/app-shell/app-sheet.tsx"
951
+ },
952
+ {
953
+ "path": "registry/app-shell/use-exclusive-sheet.ts",
954
+ "type": "registry:hook",
955
+ "target": "components/app-shell/use-exclusive-sheet.ts"
951
956
  },
952
957
  {
953
958
  "path": "registry/app-shell/compact.ts",
@@ -967,8 +972,8 @@
967
972
  "title": "Viewers",
968
973
  "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
974
  "dependencies": [
970
- "@hachej/boring-ui-kit@^0.3.2",
971
- "@hachej/boring-files@^0.3.2",
975
+ "@hachej/boring-ui-kit@^0.4.1",
976
+ "@hachej/boring-files@^0.4.1",
972
977
  "react@^19.0.0",
973
978
  "react-dom@^19.0.0",
974
979
  "marked@^17.0.6",
@@ -984,12 +989,21 @@
984
989
  "@tiptap/extension-highlight@^3.31.4",
985
990
  "@tiptap/extension-bubble-menu@^3.31.4",
986
991
  "@tiptap/extension-floating-menu@^3.31.4",
987
- "lucide-react@^1.51.0"
992
+ "lucide-react@^1.51.0",
993
+ "pdfjs-dist@6.3.289"
988
994
  ],
989
995
  "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"
996
+ "https://cdn.jsdelivr.net/npm/@hachej/boring-ui-kit@0.4.1/r/theme.json",
997
+ "https://cdn.jsdelivr.net/npm/@hachej/boring-ui-kit@0.4.1/r/utils.json",
998
+ "https://cdn.jsdelivr.net/npm/@hachej/boring-ui-kit@0.4.1/r/button.json",
999
+ "button",
1000
+ "toggle",
1001
+ "https://cdn.jsdelivr.net/npm/@hachej/boring-ui-kit@0.4.1/r/version-history.json",
1002
+ "toggle-group",
1003
+ "dialog",
1004
+ "textarea",
1005
+ "badge",
1006
+ "dropdown-menu"
993
1007
  ],
994
1008
  "files": [
995
1009
  {
@@ -1032,6 +1046,11 @@
1032
1046
  "type": "registry:component",
1033
1047
  "target": "components/viewers/pdf-pane.tsx"
1034
1048
  },
1049
+ {
1050
+ "path": "registry/viewers/pdf-pages.tsx",
1051
+ "type": "registry:component",
1052
+ "target": "components/viewers/pdf-pages.tsx"
1053
+ },
1035
1054
  {
1036
1055
  "path": "registry/viewers/share.ts",
1037
1056
  "type": "registry:lib",
@@ -1054,29 +1073,20 @@
1054
1073
  }
1055
1074
  ],
1056
1075
  "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"
1076
+ "@layer utilities": {
1077
+ "@media (max-width: 640px), (pointer: coarse)": {
1078
+ ".boring-viewer :is([data-slot=\"button\"], [data-slot=\"toggle\"], [data-slot=\"toggle-group-item\"], [class~=\"group/button\"], [class~=\"group/toggle\"])": {
1079
+ "min-height": "2.75rem",
1080
+ "min-width": "2.75rem"
1081
+ },
1082
+ ".boring-viewer.boring-markdown-bubble :is([data-slot=\"button\"], [data-slot=\"toggle\"])": {
1083
+ "min-height": "2.75rem",
1084
+ "min-width": "2.75rem"
1085
+ }
1076
1086
  }
1077
1087
  },
1078
1088
  "@layer components": {
1079
- ".boring-viewer .boring-markdown-editor": {
1089
+ ".boring-viewer .boring-markdown-editor, .boring-viewer .boring-html-pane": {
1080
1090
  "display": "flex",
1081
1091
  "flex-direction": "column",
1082
1092
  "flex": "1 1 auto",
@@ -1087,156 +1097,60 @@
1087
1097
  ".boring-viewer .boring-markdown-surface": {
1088
1098
  "flex": "1 1 auto",
1089
1099
  "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)"
1100
+ "overflow": "auto"
1096
1101
  },
1097
- ".boring-viewer .boring-markdown-toolbar": {
1102
+ ".boring-viewer .boring-markdown-toolbar, .boring-viewer.boring-markdown-bubble": {
1098
1103
  "display": "flex",
1099
1104
  "flex": "none",
1100
1105
  "align-items": "center",
1101
- "gap": "0.125rem",
1102
- "padding": "0.375rem 0.75rem",
1103
- "border-bottom": "1px solid var(--border)",
1104
- "background": "var(--background)",
1106
+ "gap": "0.25rem",
1107
+ "max-width": "calc(100vw - 24px)"
1108
+ },
1109
+ ".boring-viewer .boring-markdown-toolbar": {
1110
+ "padding": "0.375rem 1.5rem 0.375rem 0.75rem",
1105
1111
  "overflow-x": "auto",
1106
- "scrollbar-width": "none"
1112
+ "scrollbar-width": "none",
1113
+ "mask-image": "linear-gradient(to right, black calc(100% - 2rem), transparent)"
1107
1114
  },
1108
1115
  ".boring-viewer .boring-markdown-toolbar::-webkit-scrollbar": {
1109
1116
  "display": "none"
1110
1117
  },
1111
1118
  ".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"
1119
+ "flex": "none"
1139
1120
  },
1140
1121
  ".boring-viewer .boring-markdown-separator": {
1141
1122
  "flex": "none",
1142
- "width": "1px",
1143
- "height": "1rem",
1144
- "margin": "0 0.375rem",
1145
- "background": "var(--border)"
1123
+ "margin-inline": "0.25rem"
1124
+ },
1125
+ ".boring-viewer span.boring-markdown-separator": {
1126
+ "width": "0.5rem",
1127
+ "margin": "0"
1146
1128
  },
1147
1129
  ".boring-viewer .boring-markdown-icon": {
1148
1130
  "display": "block"
1149
1131
  },
1150
- ".boring-viewer .boring-markdown-link": {
1132
+ ".boring-viewer .boring-markdown-link, .boring-viewer .boring-markdown-alert, .boring-viewer .boring-markdown-proposal, .boring-viewer [data-boring=\"text-draft-controls\"]": {
1151
1133
  "display": "flex",
1152
1134
  "flex": "none",
1153
1135
  "flex-wrap": "wrap",
1154
1136
  "align-items": "center",
1155
1137
  "gap": "0.5rem",
1156
- "padding": "0.5rem 0.75rem",
1157
- "border-bottom": "1px solid var(--border)",
1158
- "background": "var(--muted)"
1138
+ "padding": "0.5rem 0.75rem"
1159
1139
  },
1160
- ".boring-viewer .boring-markdown-link input": {
1140
+ ".boring-viewer .boring-markdown-link [data-slot=\"input\"]": {
1161
1141
  "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"
1142
+ "min-width": "0"
1200
1143
  },
1201
1144
  ".boring-viewer .boring-markdown-notice": {
1202
- "border-left": "3px solid color-mix(in oklab, var(--primary) 55%, transparent)"
1203
- },
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))"
1145
+ "margin": "0.75rem"
1211
1146
  },
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": {
1147
+ ".boring-viewer .boring-markdown-proposal :is(h3, details)": {
1225
1148
  "flex": "1 1 100%",
1226
1149
  "min-width": "0"
1227
1150
  },
1228
- ".boring-viewer .boring-markdown-proposal summary": {
1229
- "cursor": "pointer",
1230
- "color": "var(--muted-foreground)"
1231
- },
1232
1151
  ".boring-viewer .boring-markdown-proposal pre": {
1233
- "margin": "0.25rem 0",
1234
1152
  "max-height": "12rem",
1235
1153
  "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
1154
  "white-space": "pre-wrap"
1241
1155
  },
1242
1156
  ".boring-viewer .boring-markdown-editor nav[aria-label=\"Document outline\"]": {
@@ -1246,70 +1160,35 @@
1246
1160
  ".boring-viewer .boring-markdown-editor nav[aria-label=\"Document outline\"]": {
1247
1161
  "display": "block",
1248
1162
  "flex": "none",
1249
- "padding": "0.375rem 0.75rem",
1250
- "border-bottom": "1px solid var(--border)",
1251
- "overflow-x": "auto"
1163
+ "overflow-x": "auto",
1164
+ "padding": "0.375rem 0.75rem"
1252
1165
  },
1253
1166
  ".boring-viewer .boring-markdown-editor nav[aria-label=\"Document outline\"] ol": {
1254
1167
  "display": "flex",
1255
1168
  "gap": "0.25rem",
1169
+ "list-style": "none",
1256
1170
  "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"
1171
+ "padding": "0"
1277
1172
  }
1278
1173
  },
1279
1174
  ".boring-viewer .boring-markdown-source, .boring-viewer .boring-html-viewer__source": {
1280
- "display": "block",
1281
1175
  "flex": "1 1 auto",
1282
1176
  "width": "100%",
1283
1177
  "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)"
1178
+ "resize": "none"
1301
1179
  },
1302
1180
  ".boring-viewer .boring-markdown-content": {
1303
- "max-width": "46rem",
1181
+ "max-width": "68ch",
1304
1182
  "min-height": "100%",
1305
1183
  "margin": "0 auto",
1306
- "padding": "1.25rem 1.25rem 3rem",
1307
- "outline": "none",
1184
+ "padding": "1.5rem 1.5rem 3rem",
1185
+ "overflow-wrap": "anywhere",
1308
1186
  "color": "var(--foreground)",
1309
- "font-size": "0.9375rem",
1310
- "line-height": "1.7",
1311
- "letter-spacing": "-0.005em",
1312
- "overflow-wrap": "anywhere"
1187
+ "font-size": "var(--text-base)",
1188
+ "line-height": "var(--leading-relaxed)"
1189
+ },
1190
+ ".boring-viewer .boring-markdown-content:focus": {
1191
+ "outline": "none"
1313
1192
  },
1314
1193
  ".boring-viewer .boring-markdown-content > :first-child": {
1315
1194
  "margin-top": "0"
@@ -1322,32 +1201,27 @@
1322
1201
  "float": "left",
1323
1202
  "height": "0",
1324
1203
  "color": "var(--muted-foreground)",
1325
- "opacity": "0.8",
1326
1204
  "pointer-events": "none"
1327
1205
  },
1328
1206
  ".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"
1207
+ "font-weight": "var(--font-weight-semibold)",
1208
+ "line-height": "var(--leading-tight)"
1333
1209
  },
1334
1210
  ".boring-viewer .boring-markdown-content h1": {
1335
1211
  "margin": "1.75rem 0 0.75rem",
1336
- "font-size": "1.875rem"
1212
+ "font-size": "var(--text-2xl)"
1337
1213
  },
1338
1214
  ".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"
1215
+ "margin": "2rem 0 0.75rem",
1216
+ "font-size": "var(--text-xl)"
1343
1217
  },
1344
1218
  ".boring-viewer .boring-markdown-content h3": {
1345
1219
  "margin": "1.25rem 0 0.5rem",
1346
- "font-size": "1.125rem"
1220
+ "font-size": "var(--text-lg)"
1347
1221
  },
1348
1222
  ".boring-viewer .boring-markdown-content :is(h4, h5, h6)": {
1349
1223
  "margin": "1rem 0 0.4rem",
1350
- "font-size": "1rem"
1224
+ "font-size": "var(--text-base)"
1351
1225
  },
1352
1226
  ".boring-viewer .boring-markdown-content :is(ul, ol)": {
1353
1227
  "margin": "0.75rem 0",
@@ -1356,27 +1230,12 @@
1356
1230
  ".boring-viewer .boring-markdown-content ul": {
1357
1231
  "list-style": "disc"
1358
1232
  },
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
1233
  ".boring-viewer .boring-markdown-content ol": {
1366
1234
  "list-style": "decimal"
1367
1235
  },
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
1236
  ".boring-viewer .boring-markdown-content li": {
1375
1237
  "margin": "0.25rem 0"
1376
1238
  },
1377
- ".boring-viewer .boring-markdown-content li::marker": {
1378
- "color": "var(--muted-foreground)"
1379
- },
1380
1239
  ".boring-viewer .boring-markdown-content li > p": {
1381
1240
  "margin": "0"
1382
1241
  },
@@ -1408,27 +1267,29 @@
1408
1267
  "flex": "1 1 auto",
1409
1268
  "min-width": "0"
1410
1269
  },
1411
- ".boring-viewer .boring-markdown-content ul[data-type=\"taskList\"] li[data-checked=\"true\"] > div": {
1270
+ ".boring-viewer .boring-markdown-content li[data-checked=\"true\"] > div": {
1412
1271
  "color": "var(--muted-foreground)",
1413
1272
  "text-decoration": "line-through"
1414
1273
  },
1415
1274
  ".boring-viewer .boring-markdown-content strong": {
1416
- "font-weight": "600"
1275
+ "font-weight": "var(--font-weight-semibold)"
1417
1276
  },
1418
1277
  ".boring-viewer .boring-markdown-content code": {
1419
1278
  "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"
1279
+ "border-radius": "var(--radius-sm)",
1280
+ "background": "var(--muted)",
1281
+ "font-family": "var(--font-mono)",
1282
+ "font-size": "var(--text-sm)"
1423
1283
  },
1424
1284
  ".boring-viewer .boring-markdown-content pre": {
1425
1285
  "margin": "1rem 0",
1426
1286
  "padding": "0.875rem 1rem",
1427
1287
  "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"
1288
+ "border": "var(--default-border-width) solid var(--border)",
1289
+ "border-radius": "var(--radius-lg)",
1290
+ "background": "var(--muted)",
1291
+ "font-family": "var(--font-mono)",
1292
+ "font-size": "var(--text-sm)"
1432
1293
  },
1433
1294
  ".boring-viewer .boring-markdown-content pre code": {
1434
1295
  "padding": "0",
@@ -1438,35 +1299,22 @@
1438
1299
  ".boring-viewer .boring-markdown-content blockquote": {
1439
1300
  "margin": "1rem 0",
1440
1301
  "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"
1302
+ "border-inline-start": "var(--default-border-width) solid var(--border)",
1303
+ "color": "var(--muted-foreground)"
1451
1304
  },
1452
1305
  ".boring-viewer .boring-markdown-content a": {
1453
1306
  "color": "var(--foreground)",
1454
1307
  "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
1308
  "cursor": "text"
1459
1309
  },
1460
1310
  ".boring-viewer .boring-markdown-content hr": {
1461
1311
  "margin": "1.5rem 0",
1462
1312
  "border": "0",
1463
- "border-top": "1px solid color-mix(in oklab, var(--border) 85%, transparent)"
1313
+ "border-top": "var(--default-border-width) solid var(--border)"
1464
1314
  },
1465
1315
  ".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"
1316
+ "background": "var(--accent)",
1317
+ "color": "var(--accent-foreground)"
1470
1318
  },
1471
1319
  ".boring-viewer .boring-markdown-content .tableWrapper": {
1472
1320
  "margin": "1rem 0",
@@ -1475,84 +1323,49 @@
1475
1323
  ".boring-viewer .boring-markdown-content table": {
1476
1324
  "width": "100%",
1477
1325
  "border-collapse": "collapse",
1478
- "font-size": "0.875rem"
1326
+ "font-size": "var(--text-sm)"
1479
1327
  },
1480
1328
  ".boring-viewer .boring-markdown-content :is(th, td)": {
1481
1329
  "min-width": "4rem",
1482
1330
  "padding": "0.5rem 0.75rem",
1483
- "border": "1px solid color-mix(in oklab, var(--border) 90%, transparent)",
1331
+ "border": "var(--default-border-width) solid var(--border)",
1484
1332
  "text-align": "left",
1485
1333
  "vertical-align": "top"
1486
1334
  },
1487
1335
  ".boring-viewer .boring-markdown-content th": {
1488
- "background": "color-mix(in oklab, var(--foreground) 5%, transparent)",
1489
- "font-weight": "600"
1336
+ "background": "var(--muted)",
1337
+ "font-weight": "var(--font-weight-semibold)"
1490
1338
  },
1491
1339
  ".boring-viewer .boring-markdown-content :is(th, td) > p": {
1492
1340
  "margin": "0"
1493
1341
  },
1494
1342
  ".boring-viewer .boring-markdown-content .selectedCell": {
1495
- "background": "color-mix(in oklab, var(--primary) 12%, transparent)"
1343
+ "background": "var(--accent)"
1496
1344
  },
1497
1345
  ".boring-viewer .boring-markdown-content img": {
1498
1346
  "display": "block",
1499
1347
  "max-width": "100%",
1500
1348
  "height": "auto",
1501
- "margin": "1rem 0",
1502
- "border-radius": "0.5rem"
1349
+ "margin": "1rem 0"
1503
1350
  },
1504
1351
  ".boring-viewer .boring-markdown-content .boring-markdown-image": {
1505
1352
  "display": "inline-flex",
1506
- "align-items": "center",
1507
- "gap": "0.4rem",
1508
1353
  "max-width": "100%",
1509
1354
  "margin": "0.125rem 0",
1510
1355
  "padding": "0.125rem 0.5rem",
1511
- "border": "1px dashed var(--border)",
1512
- "border-radius": "0.375rem",
1513
1356
  "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"
1357
+ "color": "var(--muted-foreground)"
1537
1358
  },
1538
1359
  ".boring-viewer .boring-html-viewer__preview": {
1539
1360
  "display": "flex",
1540
1361
  "flex": "1 1 auto",
1541
1362
  "flex-direction": "column",
1542
- "min-height": "0",
1543
- "background": "var(--muted)"
1363
+ "min-height": "0"
1544
1364
  },
1545
1365
  ".boring-viewer .boring-html-viewer__preview > p": {
1546
1366
  "flex": "none",
1547
1367
  "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)"
1368
+ "padding": "0.375rem 0.75rem"
1556
1369
  },
1557
1370
  ".boring-viewer .boring-html-viewer__preview > div": {
1558
1371
  "display": "flex",
@@ -1564,38 +1377,48 @@
1564
1377
  "width": "100%",
1565
1378
  "height": "100%",
1566
1379
  "min-height": "0",
1567
- "border": "0",
1568
- "background": "#fff",
1569
- "color-scheme": "light"
1380
+ "border": "0"
1570
1381
  },
1571
1382
  ".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%)",
1383
+ "background-color": "var(--background)",
1384
+ "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
1385
  "background-position": "0 0, 8px 8px",
1575
1386
  "background-size": "16px 16px"
1576
1387
  },
1577
1388
  ".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"
1389
+ "overflow": "auto"
1584
1390
  },
1585
- "@media (pointer: coarse)": {
1586
- ".boring-viewer .boring-markdown-tool": {
1587
- "width": "2.75rem",
1588
- "height": "2.75rem"
1391
+ "@media (max-width: 640px)": {
1392
+ ".boring-viewer .boring-markdown-content": {
1393
+ "padding": "1.25rem 1.25rem 3rem"
1589
1394
  },
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"
1395
+ ".boring-viewer .boring-markdown-toolbar": {
1396
+ "display": "none"
1592
1397
  },
1593
- ".boring-viewer .boring-markdown-link input, .boring-viewer .boring-markdown-source, .boring-viewer .boring-html-viewer__source": {
1594
- "font-size": "1rem"
1398
+ ".boring-viewer.boring-markdown-dock": {
1399
+ "display": "flex",
1400
+ "align-items": "center",
1401
+ "gap": "0.125rem",
1402
+ "overflow-x": "auto",
1403
+ "scrollbar-width": "none",
1404
+ "position": "fixed",
1405
+ "inset-inline": "0",
1406
+ "z-index": "50",
1407
+ "padding": "0.25rem 1.5rem 0.25rem 0.5rem",
1408
+ "padding-bottom": "calc(0.25rem + env(safe-area-inset-bottom, 0px))",
1409
+ "background": "var(--background)",
1410
+ "mask-image": "linear-gradient(to right, black calc(100% - 2rem), transparent)"
1411
+ },
1412
+ ".boring-viewer.boring-markdown-dock[data-keyboard]": {
1413
+ "padding-bottom": "0.25rem"
1414
+ },
1415
+ ".boring-viewer.boring-markdown-dock > .boring-markdown-dock-rule": {
1416
+ "position": "absolute",
1417
+ "inset-inline": "0",
1418
+ "top": "0"
1595
1419
  },
1596
- ".boring-viewer .boring-markdown-content ul[data-type=\"taskList\"] li > label input[type=\"checkbox\"]": {
1597
- "width": "1.25rem",
1598
- "height": "1.25rem"
1420
+ ".boring-viewer [data-boring=\"markdown-editor\"][data-dock] .boring-markdown-content": {
1421
+ "padding-bottom": "6rem"
1599
1422
  }
1600
1423
  }
1601
1424
  }
@@ -1605,15 +1428,20 @@
1605
1428
  "name": "provider-setup",
1606
1429
  "type": "registry:component",
1607
1430
  "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.",
1431
+ "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
1432
  "dependencies": [
1610
1433
  "react@^19.0.0",
1611
1434
  "react-dom@^19.0.0",
1612
1435
  "lucide-react@^1.51.0"
1613
1436
  ],
1614
1437
  "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"
1438
+ "https://cdn.jsdelivr.net/npm/@hachej/boring-ui-kit@0.4.1/r/theme.json",
1439
+ "https://cdn.jsdelivr.net/npm/@hachej/boring-ui-kit@0.4.1/r/utils.json",
1440
+ "button",
1441
+ "input",
1442
+ "label",
1443
+ "native-select",
1444
+ "popover"
1617
1445
  ],
1618
1446
  "files": [
1619
1447
  {
@@ -1629,9 +1457,9 @@
1629
1457
  "title": "Feedback",
1630
1458
  "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
1459
  "dependencies": [
1632
- "@hachej/boring-feedback@^0.3.2",
1633
- "@hachej/boring-ui-kit@^0.3.2",
1634
- "@hachej/boring-files@^0.3.2",
1460
+ "@hachej/boring-feedback@^0.4.1",
1461
+ "@hachej/boring-ui-kit@^0.4.1",
1462
+ "@hachej/boring-files@^0.4.1",
1635
1463
  "react@^19.0.0",
1636
1464
  "react-dom@^19.0.0",
1637
1465
  "lucide-react@^1.51.0"
@@ -1701,9 +1529,6 @@
1701
1529
  "--boring-feedback-text": "var(--popover-foreground)",
1702
1530
  "--boring-feedback-muted": "var(--muted-foreground)",
1703
1531
  "--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
1532
  "--boring-feedback-label-background": "var(--foreground)",
1708
1533
  "--boring-feedback-label-foreground": "var(--background)",
1709
1534
  "font-family": "inherit",
@@ -1711,58 +1536,17 @@
1711
1536
  "line-height": "var(--leading-normal, 1.5)",
1712
1537
  "color": "var(--boring-feedback-text)"
1713
1538
  },
1539
+ "@layer base": {
1540
+ "[data-boring=\"feedback\"] :where(button, [role=\"button\"])": {
1541
+ "appearance": "none",
1542
+ "background-color": "transparent",
1543
+ "border": "0",
1544
+ "padding": "0"
1545
+ }
1546
+ },
1714
1547
  "[data-boring=\"feedback\"] *, [data-boring=\"feedback\"] *::before, [data-boring=\"feedback\"] *::after": {
1715
1548
  "box-sizing": "border-box"
1716
1549
  },
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
1550
  "[data-boring=\"feedback\"].boring-feedback-point": {
1767
1551
  "display": "inline-flex",
1768
1552
  "align-items": "center",
@@ -1779,18 +1563,11 @@
1779
1563
  "[data-boring=\"feedback\"] .boring-feedback-keys": {
1780
1564
  "opacity": "0.8"
1781
1565
  },
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)"
1566
+ "[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)": {
1567
+ "padding-inline": "var(--card-spacing)"
1790
1568
  },
1791
1569
  "[data-boring=\"feedback\"].boring-feedback-sheet": {
1792
1570
  "z-index": "2147483000",
1793
- "box-shadow": "var(--boring-feedback-shadow)",
1794
1571
  "max-height": "calc(100dvh - 24px)",
1795
1572
  "overflow": "auto"
1796
1573
  },
@@ -1831,18 +1608,6 @@
1831
1608
  "font-weight": "var(--font-weight-semibold, 600)",
1832
1609
  "font-size": "var(--text-sm, 0.875rem)"
1833
1610
  },
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
1611
  "[data-boring=\"feedback\"] .boring-feedback-actions": {
1847
1612
  "display": "flex",
1848
1613
  "flex-wrap": "wrap",
@@ -1861,9 +1626,7 @@
1861
1626
  },
1862
1627
  "[data-boring=\"feedback\"] .boring-feedback-notice": {
1863
1628
  "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)",
1629
+ "color": "var(--boring-feedback-muted)",
1867
1630
  "font-size": "var(--text-sm, 0.875rem)"
1868
1631
  },
1869
1632
  "[data-boring=\"feedback\"] .boring-feedback-copied pre, [data-boring=\"feedback\"] .boring-feedback-manual": {
@@ -1888,22 +1651,6 @@
1888
1651
  "padding": "0",
1889
1652
  "list-style": "none"
1890
1653
  },
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
1654
  "[data-boring=\"feedback\"] .boring-feedback-title": {
1908
1655
  "font-weight": "var(--font-weight-semibold, 600)"
1909
1656
  },
@@ -1954,30 +1701,20 @@
1954
1701
  "left": "0",
1955
1702
  "right": "0",
1956
1703
  "z-index": "2147483000",
1957
- "display": "flex",
1704
+ "flex-direction": "row",
1958
1705
  "flex-wrap": "nowrap",
1959
1706
  "align-items": "center",
1960
1707
  "gap": "0.5rem",
1961
1708
  "width": "max-content",
1962
1709
  "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)"
1710
+ "margin": "0 auto"
1972
1711
  },
1973
1712
  "[data-boring=\"feedback\"].boring-feedback-bar[data-docked=\"true\"]": {
1974
1713
  "position": "static",
1975
1714
  "width": "auto",
1976
1715
  "max-width": "none",
1977
1716
  "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"
1717
+ "flex-wrap": "wrap"
1981
1718
  },
1982
1719
  "[data-boring=\"feedback\"].boring-feedback-bar > *": {
1983
1720
  "flex": "none"
@@ -1994,15 +1731,6 @@
1994
1731
  "gap": "0.375rem",
1995
1732
  "font-weight": "var(--font-weight-semibold, 600)"
1996
1733
  },
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
1734
  "[data-boring=\"feedback\"] .boring-feedback-bar-meta": {
2007
1735
  "color": "var(--boring-feedback-muted)",
2008
1736
  "font-size": "var(--text-sm, 0.875rem)"
@@ -2011,59 +1739,14 @@
2011
1739
  "color": "var(--boring-feedback-muted)",
2012
1740
  "font-size": "var(--text-xs, 0.75rem)"
2013
1741
  },
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
1742
  "[data-boring=\"feedback\"].boring-feedback-bar[data-docked=\"true\"] > .boring-feedback-hint": {
2040
1743
  "flex": "1 1 10rem",
2041
1744
  "max-width": "none",
2042
1745
  "white-space": "normal"
2043
1746
  },
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
1747
  "[data-boring=\"feedback\"] .boring-feedback-timer": {
2062
1748
  "font-variant-numeric": "tabular-nums"
2063
1749
  },
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
1750
  "[data-boring=\"feedback\"] .boring-feedback-voice-problem": {
2068
1751
  "flex": "1 1 100%",
2069
1752
  "margin": "0",
@@ -2098,24 +1781,8 @@
2098
1781
  "font-size": "var(--text-xs, 0.75rem)",
2099
1782
  "line-height": "var(--leading-snug, 1.375)"
2100
1783
  },
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
1784
  "[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)"
1785
+ "z-index": "2147483001"
2119
1786
  },
2120
1787
  "[data-boring=\"feedback\"] .boring-feedback-bubble-head, [data-boring=\"feedback\"] .boring-feedback-note-head": {
2121
1788
  "display": "flex",
@@ -2142,46 +1809,17 @@
2142
1809
  "flex-wrap": "wrap",
2143
1810
  "align-items": "center",
2144
1811
  "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"
1812
+ "max-width": "100%"
2162
1813
  },
2163
1814
  "[data-boring=\"feedback\"] .boring-feedback-chip-route": {
2164
1815
  "color": "var(--boring-feedback-muted)",
2165
1816
  "font-family": "var(--font-mono, ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace)",
2166
1817
  "font-weight": "var(--font-weight-medium, 500)"
2167
1818
  },
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
1819
  "[data-boring=\"feedback\"].boring-feedback-review": {
2174
1820
  "z-index": "2147483000",
2175
- "display": "flex",
2176
- "flex-direction": "column",
2177
- "gap": "0.625rem",
2178
1821
  "max-height": "min(28rem, calc(100dvh - 24px))",
2179
1822
  "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
1823
  "text-align": "left"
2186
1824
  },
2187
1825
  "[data-boring=\"feedback\"] .boring-feedback-notes": {
@@ -2194,34 +1832,15 @@
2194
1832
  },
2195
1833
  "[data-boring=\"feedback\"] .boring-feedback-notes > li": {
2196
1834
  "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)"
1835
+ "gap": "0.25rem"
2203
1836
  },
2204
1837
  "[data-boring=\"feedback\"].boring-feedback-pointbar": {
2205
1838
  "position": "fixed",
2206
1839
  "left": "8px",
2207
1840
  "right": "8px",
2208
1841
  "z-index": "2147483000",
2209
- "display": "flex",
2210
- "flex-direction": "column",
2211
- "gap": "0.375rem",
2212
1842
  "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)"
1843
+ "margin": "0 auto"
2225
1844
  },
2226
1845
  "[data-boring=\"feedback\"] .boring-feedback-point-line": {
2227
1846
  "display": "flex",
@@ -2230,9 +1849,6 @@
2230
1849
  "min-width": "0",
2231
1850
  "padding": "0 0.25rem"
2232
1851
  },
2233
- "[data-boring=\"feedback\"] .boring-feedback-point-line .boring-feedback-dot": {
2234
- "flex": "none"
2235
- },
2236
1852
  "[data-boring=\"feedback\"] .boring-feedback-point-hint": {
2237
1853
  "flex": "1",
2238
1854
  "min-width": "0",
@@ -2249,21 +1865,10 @@
2249
1865
  "align-items": "center",
2250
1866
  "gap": "0.375rem"
2251
1867
  },
2252
- "[data-boring=\"feedback\"] .boring-feedback-point-actions .boring-feedback-button": {
2253
- "min-height": "2.75rem",
2254
- "min-width": "2.75rem"
2255
- },
2256
1868
  "[data-boring=\"feedback\"] .boring-feedback-point-spacer": {
2257
1869
  "flex": "1"
2258
1870
  },
2259
1871
  "@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
1872
  "[data-boring=\"feedback\"] .boring-feedback-hint": {
2268
1873
  "display": "none"
2269
1874
  },
@@ -2273,30 +1878,21 @@
2273
1878
  "[data-boring=\"feedback\"].boring-feedback-bar": {
2274
1879
  "top": "auto",
2275
1880
  "bottom": "12px",
2276
- "flex-wrap": "wrap",
2277
- "border-radius": "var(--boring-feedback-radius)"
1881
+ "flex-wrap": "wrap"
1882
+ },
1883
+ "[data-boring=\"feedback\"] :is([data-slot=\"button\"], [data-slot=\"toggle\"], [class~=\"group/button\"], [class~=\"group/toggle\"])": {
1884
+ "min-height": "2.75rem",
1885
+ "min-width": "2.75rem"
2278
1886
  }
2279
1887
  },
2280
- "[data-boring=\"feedback\"] .boring-feedback-mic": {
2281
- "flex": "none",
2282
- "display": "block"
2283
- },
2284
1888
  "[data-boring=\"feedback\"].boring-feedback-preview": {
2285
1889
  "position": "fixed",
2286
1890
  "top": "12px",
2287
1891
  "left": "0",
2288
1892
  "right": "0",
2289
1893
  "z-index": "2147483001",
2290
- "display": "flex",
2291
- "flex-direction": "column",
2292
- "gap": "0.5rem",
2293
1894
  "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)"
1895
+ "margin": "0 auto"
2300
1896
  },
2301
1897
  "[data-boring=\"feedback\"] .boring-feedback-preview-head": {
2302
1898
  "display": "flex",
@@ -2304,15 +1900,6 @@
2304
1900
  "align-items": "baseline",
2305
1901
  "gap": "0.5rem"
2306
1902
  },
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
1903
  "[data-boring=\"feedback\"] .boring-feedback-preview-notice": {
2317
1904
  "font-weight": "var(--font-weight-semibold, 600)"
2318
1905
  },
@@ -2343,17 +1930,6 @@
2343
1930
  "flex-wrap": "wrap",
2344
1931
  "gap": "0.5rem"
2345
1932
  },
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
1933
  "[data-boring=\"feedback\"] .boring-feedback-pin-field": {
2358
1934
  "display": "grid"
2359
1935
  },
@@ -2367,55 +1943,28 @@
2367
1943
  "grid-row": "2"
2368
1944
  },
2369
1945
  "[data-boring=\"feedback\"] .boring-feedback-pin-field textarea": {
2370
- "display": "block",
2371
- "box-sizing": "border-box",
2372
1946
  "width": "100%",
2373
- "padding-right": "3.25rem"
1947
+ "padding-inline-end": "3.25rem"
2374
1948
  },
2375
1949
  "[data-boring=\"feedback\"] .boring-feedback-pin-mic": {
2376
1950
  "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"
1951
+ "align-self": "end"
2399
1952
  },
2400
1953
  "[data-boring=\"feedback\"] .boring-feedback-bubble-actions": {
2401
1954
  "display": "flex",
2402
1955
  "flex-wrap": "wrap",
2403
1956
  "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
1957
  }
2415
1958
  },
2416
1959
  "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"
1960
+ "https://cdn.jsdelivr.net/npm/@hachej/boring-ui-kit@0.4.1/r/pi-chat.json",
1961
+ "https://cdn.jsdelivr.net/npm/@hachej/boring-ui-kit@0.4.1/r/utils.json",
1962
+ "button",
1963
+ "toggle",
1964
+ "badge",
1965
+ "item",
1966
+ "card",
1967
+ "textarea"
2419
1968
  ]
2420
1969
  },
2421
1970
  {
@@ -2424,7 +1973,7 @@
2424
1973
  "title": "Feedback preview",
2425
1974
  "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
1975
  "dependencies": [
2427
- "@hachej/boring-feedback@^0.3.2",
1976
+ "@hachej/boring-feedback@^0.4.1",
2428
1977
  "@earendil-works/pi-ai@~1.2.0",
2429
1978
  "react@^19.0.0"
2430
1979
  ],
@@ -2434,6 +1983,12 @@
2434
1983
  "type": "registry:component",
2435
1984
  "target": "components/feedback-preview/preview-banner.tsx"
2436
1985
  }
1986
+ ],
1987
+ "registryDependencies": [
1988
+ "button",
1989
+ "card",
1990
+ "badge",
1991
+ "input"
2437
1992
  ]
2438
1993
  },
2439
1994
  {
@@ -2442,8 +1997,8 @@
2442
1997
  "title": "Consumer task-list viewer",
2443
1998
  "description": "A consumer-defined task-list schema and controller over the shared text buffer, with a restylable borrowed React renderer.",
2444
1999
  "dependencies": [
2445
- "@hachej/boring-ui-kit@^0.3.2",
2446
- "@hachej/boring-files@^0.3.2",
2000
+ "@hachej/boring-ui-kit@^0.4.1",
2001
+ "@hachej/boring-files@^0.4.1",
2447
2002
  "react@^19.0.0",
2448
2003
  "react-dom@^19.0.0",
2449
2004
  "zod@^4.6.5"
@@ -2467,11 +2022,7 @@
2467
2022
  ],
2468
2023
  "css": {
2469
2024
  ".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)"
2025
+ "padding-inline": "var(--card-spacing)"
2475
2026
  },
2476
2027
  ".boring-task-list-recipe[data-boring=\"task-list-viewer\"] ul": {
2477
2028
  "list-style": "none",
@@ -2485,38 +2036,62 @@
2485
2036
  "gap": "0.5rem",
2486
2037
  "flex-wrap": "wrap"
2487
2038
  },
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
2039
  ".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"
2040
+ "color": "var(--destructive)"
2502
2041
  }
2503
2042
  },
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."
2043
+ "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.",
2044
+ "registryDependencies": [
2045
+ "button",
2046
+ "card",
2047
+ "input",
2048
+ "checkbox"
2049
+ ]
2050
+ },
2051
+ {
2052
+ "name": "version-history",
2053
+ "type": "registry:component",
2054
+ "title": "Version history rows",
2055
+ "description": "Shared view-only version rows and menu metadata with relative time, provenance and Current. No file reads, publication or restoration.",
2056
+ "dependencies": [
2057
+ "@hachej/boring-files@^0.4.1",
2058
+ "react@^19.0.0"
2059
+ ],
2060
+ "registryDependencies": [
2061
+ "https://cdn.jsdelivr.net/npm/@hachej/boring-ui-kit@0.4.1/r/theme.json",
2062
+ "https://cdn.jsdelivr.net/npm/@hachej/boring-ui-kit@0.4.1/r/button.json",
2063
+ "button"
2064
+ ],
2065
+ "files": [
2066
+ {
2067
+ "path": "registry/version-history/version-history.tsx",
2068
+ "type": "registry:component",
2069
+ "target": "components/version-history/version-history.tsx"
2070
+ }
2071
+ ]
2505
2072
  },
2506
2073
  {
2507
2074
  "name": "file-tree",
2508
2075
  "type": "registry:component",
2509
2076
  "title": "File tree",
2510
- "description": "Browse, search, upload and inspect retained versions through one revisionProvider binding.",
2077
+ "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
2078
  "dependencies": [
2512
- "@hachej/boring-ui-kit@^0.3.2",
2513
- "@hachej/boring-files@^0.3.2",
2079
+ "@hachej/boring-ui-kit@^0.4.1",
2080
+ "@hachej/boring-files@^0.4.1",
2514
2081
  "react@^19.0.0",
2515
- "radix-ui@^1.8.0",
2516
2082
  "lucide-react@^1.51.0"
2517
2083
  ],
2518
2084
  "registryDependencies": [
2519
- "https://cdn.jsdelivr.net/npm/@hachej/boring-ui-kit@0.3.2/r/theme.json"
2085
+ "https://cdn.jsdelivr.net/npm/@hachej/boring-ui-kit@0.4.1/r/theme.json",
2086
+ "https://cdn.jsdelivr.net/npm/@hachej/boring-ui-kit@0.4.1/r/utils.json",
2087
+ "https://cdn.jsdelivr.net/npm/@hachej/boring-ui-kit@0.4.1/r/version-history.json",
2088
+ "button",
2089
+ "dropdown-menu",
2090
+ "collapsible",
2091
+ "empty",
2092
+ "input",
2093
+ "separator",
2094
+ "sidebar"
2520
2095
  ],
2521
2096
  "files": [
2522
2097
  {
@@ -2533,21 +2108,24 @@
2533
2108
  "title": "Documents: the Library, a file and its revisions",
2534
2109
  "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
2110
  "dependencies": [
2536
- "@hachej/boring-ui-kit@^0.3.2",
2537
- "@hachej/boring-files@^0.3.2",
2111
+ "@hachej/boring-ui-kit@^0.4.1",
2112
+ "@hachej/boring-files@^0.4.1",
2538
2113
  "react@^19.0.0",
2539
2114
  "lucide-react@^1.51.0"
2540
2115
  ],
2541
2116
  "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"
2117
+ "https://cdn.jsdelivr.net/npm/@hachej/boring-ui-kit@0.4.1/r/theme.json",
2118
+ "https://cdn.jsdelivr.net/npm/@hachej/boring-ui-kit@0.4.1/r/utils.json",
2119
+ "https://cdn.jsdelivr.net/npm/@hachej/boring-ui-kit@0.4.1/r/button.json",
2120
+ "https://cdn.jsdelivr.net/npm/@hachej/boring-ui-kit@0.4.1/r/pi-chat.json",
2121
+ "https://cdn.jsdelivr.net/npm/@hachej/boring-ui-kit@0.4.1/r/pi-app.json",
2122
+ "https://cdn.jsdelivr.net/npm/@hachej/boring-ui-kit@0.4.1/r/app-shell.json",
2123
+ "https://cdn.jsdelivr.net/npm/@hachej/boring-ui-kit@0.4.1/r/file-tree.json",
2124
+ "https://cdn.jsdelivr.net/npm/@hachej/boring-ui-kit@0.4.1/r/viewers.json",
2125
+ "drawer",
2126
+ "button",
2127
+ "scroll-area",
2128
+ "separator"
2551
2129
  ],
2552
2130
  "files": [
2553
2131
  {