@hachej/boring-ui-kit 0.2.0 → 0.2.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,2274 @@
1
+ {
2
+ "$schema": "https://ui.shadcn.com/schema/registry.json",
3
+ "name": "boring-ui-v4",
4
+ "homepage": "https://github.com/hachej/boring-ui",
5
+ "items": [
6
+ {
7
+ "name": "theme",
8
+ "type": "registry:theme",
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).",
11
+ "cssVars": {
12
+ "theme": {
13
+ "color-background": "var(--background)",
14
+ "color-foreground": "var(--foreground)",
15
+ "color-card": "var(--card)",
16
+ "color-card-foreground": "var(--card-foreground)",
17
+ "color-popover": "var(--popover)",
18
+ "color-popover-foreground": "var(--popover-foreground)",
19
+ "color-primary": "var(--primary)",
20
+ "color-primary-foreground": "var(--primary-foreground)",
21
+ "color-secondary": "var(--secondary)",
22
+ "color-secondary-foreground": "var(--secondary-foreground)",
23
+ "color-muted": "var(--muted)",
24
+ "color-muted-foreground": "var(--muted-foreground)",
25
+ "color-accent": "var(--accent)",
26
+ "color-accent-foreground": "var(--accent-foreground)",
27
+ "color-destructive": "var(--destructive)",
28
+ "color-border": "var(--border)",
29
+ "color-input": "var(--input)",
30
+ "color-ring": "var(--ring)",
31
+ "radius-sm": "calc(var(--radius) - 4px)",
32
+ "radius-md": "calc(var(--radius) - 2px)",
33
+ "radius-lg": "var(--radius)",
34
+ "radius-xl": "calc(var(--radius) + 4px)"
35
+ },
36
+ "light": {
37
+ "radius": "0.75rem",
38
+ "background": "oklch(1 0 0)",
39
+ "foreground": "oklch(0.141 0.005 285.823)",
40
+ "card": "oklch(1 0 0)",
41
+ "card-foreground": "oklch(0.141 0.005 285.823)",
42
+ "popover": "oklch(1 0 0)",
43
+ "popover-foreground": "oklch(0.141 0.005 285.823)",
44
+ "primary": "oklch(0.21 0.006 285.885)",
45
+ "primary-foreground": "oklch(0.985 0 0)",
46
+ "secondary": "oklch(0.967 0.001 286.375)",
47
+ "secondary-foreground": "oklch(0.21 0.006 285.885)",
48
+ "muted": "oklch(0.967 0.001 286.375)",
49
+ "muted-foreground": "oklch(0.52 0.016 285.938)",
50
+ "accent": "oklch(0.955 0.003 286.375)",
51
+ "accent-foreground": "oklch(0.21 0.006 285.885)",
52
+ "destructive": "oklch(0.577 0.245 27.325)",
53
+ "border": "oklch(0.92 0.004 286.32)",
54
+ "input": "oklch(0.89 0.005 286.32)",
55
+ "ring": "oklch(0.55 0.02 286.067)",
56
+ "shell": "oklch(0.975 0.002 286)"
57
+ },
58
+ "dark": {
59
+ "background": "oklch(0.175 0.006 285.885)",
60
+ "foreground": "oklch(0.985 0 0)",
61
+ "card": "oklch(0.205 0.006 285.885)",
62
+ "card-foreground": "oklch(0.985 0 0)",
63
+ "popover": "oklch(0.205 0.006 285.885)",
64
+ "popover-foreground": "oklch(0.985 0 0)",
65
+ "primary": "oklch(0.92 0.004 286.32)",
66
+ "primary-foreground": "oklch(0.21 0.006 285.885)",
67
+ "secondary": "oklch(0.274 0.006 286.033)",
68
+ "secondary-foreground": "oklch(0.985 0 0)",
69
+ "muted": "oklch(0.255 0.006 286.033)",
70
+ "muted-foreground": "oklch(0.72 0.015 286.067)",
71
+ "accent": "oklch(0.3 0.006 286.033)",
72
+ "accent-foreground": "oklch(0.985 0 0)",
73
+ "destructive": "oklch(0.704 0.191 22.216)",
74
+ "border": "oklch(1 0 0 / 11%)",
75
+ "input": "oklch(1 0 0 / 16%)",
76
+ "ring": "oklch(0.65 0.02 286.067)",
77
+ "shell": "oklch(0.13 0.005 285.823)"
78
+ }
79
+ }
80
+ },
81
+ {
82
+ "name": "utils",
83
+ "type": "registry:lib",
84
+ "title": "Shared helpers",
85
+ "description": "The class merge helper `cn` and `copyText` (host callback, Clipboard API, then a selection copy that works over plain HTTP) shared by every Tailwind item, installed once in components/utils/.",
86
+ "dependencies": [
87
+ "clsx@^2.1.1",
88
+ "tailwind-merge@^3.7.0"
89
+ ],
90
+ "files": [
91
+ {
92
+ "path": "registry/utils/utils.ts",
93
+ "type": "registry:lib",
94
+ "target": "components/utils/utils.ts"
95
+ }
96
+ ]
97
+ },
98
+ {
99
+ "name": "button",
100
+ "type": "registry:ui",
101
+ "title": "Button",
102
+ "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.",
103
+ "dependencies": [
104
+ "react@^19.0.0",
105
+ "lucide-react@^1.51.0"
106
+ ],
107
+ "registryDependencies": [
108
+ "@boring-ui/theme",
109
+ "@boring-ui/utils"
110
+ ],
111
+ "files": [
112
+ {
113
+ "path": "registry/button/button.tsx",
114
+ "type": "registry:ui",
115
+ "target": "components/button/button.tsx"
116
+ },
117
+ {
118
+ "path": "registry/button/actions.tsx",
119
+ "type": "registry:ui",
120
+ "target": "components/button/actions.tsx"
121
+ }
122
+ ]
123
+ },
124
+ {
125
+ "name": "markdown-editor",
126
+ "type": "registry:component",
127
+ "title": "Markdown editor",
128
+ "description": "A host-owned styled wrapper over the concrete borrowed Markdown controller.",
129
+ "dependencies": [
130
+ "@hachej/boring-ui-kit@^0.2.2",
131
+ "@hachej/boring-files@^0.2.2",
132
+ "react@^19.0.0",
133
+ "react-dom@^19.0.0",
134
+ "marked@^17.0.6",
135
+ "@tiptap/core@^3.31.4",
136
+ "@tiptap/react@^3.31.4",
137
+ "@tiptap/pm@^3.31.4",
138
+ "@tiptap/starter-kit@^3.31.4",
139
+ "@tiptap/markdown@^3.31.4",
140
+ "@tiptap/extensions@^3.31.4",
141
+ "@tiptap/extension-list@^3.31.4",
142
+ "@tiptap/extension-table@^3.31.4",
143
+ "@tiptap/extension-image@^3.31.4",
144
+ "@tiptap/extension-highlight@^3.31.4",
145
+ "@tiptap/extension-bubble-menu@^3.31.4",
146
+ "@tiptap/extension-floating-menu@^3.31.4"
147
+ ],
148
+ "files": [
149
+ {
150
+ "path": "registry/markdown-editor/markdown-editor.tsx",
151
+ "type": "registry:component",
152
+ "target": "components/markdown-editor/markdown-editor.tsx"
153
+ }
154
+ ],
155
+ "css": {
156
+ ".boring-markdown-recipe[data-boring=\"markdown-editor\"]": {
157
+ "background": "var(--boring-editor-background, var(--background, #fff))",
158
+ "color": "var(--boring-editor-foreground, var(--foreground, #111827))",
159
+ "border": "1px solid var(--boring-editor-border, var(--border, #d1d5db))",
160
+ "border-radius": "var(--boring-editor-radius, var(--radius, 0.75rem))",
161
+ "padding": "1rem",
162
+ "display": "grid",
163
+ "gap": "1rem",
164
+ "min-width": "0",
165
+ "font-family": "inherit"
166
+ },
167
+ ".boring-markdown-recipe[data-boring=\"markdown-editor\"] > header": {
168
+ "display": "flex",
169
+ "align-items": "center",
170
+ "justify-content": "space-between",
171
+ "flex-wrap": "wrap",
172
+ "gap": "0.75rem"
173
+ },
174
+ ".boring-markdown-recipe[data-boring=\"markdown-editor\"] > header > strong": {
175
+ "margin": "0",
176
+ "font-size": "1.125rem",
177
+ "font-weight": "600"
178
+ },
179
+ ".boring-markdown-recipe[data-boring=\"markdown-editor\"] [role=\"toolbar\"]": {
180
+ "display": "flex",
181
+ "flex-wrap": "wrap",
182
+ "gap": "0.375rem"
183
+ },
184
+ ".boring-markdown-recipe[data-boring=\"markdown-editor\"] button": {
185
+ "appearance": "none",
186
+ "font": "inherit",
187
+ "font-size": "0.875rem",
188
+ "line-height": "1.4",
189
+ "background": "var(--boring-editor-control-background, var(--background, #fff))",
190
+ "color": "inherit",
191
+ "border": "1px solid var(--boring-editor-border, var(--border, #d1d5db))",
192
+ "border-radius": "0.375rem",
193
+ "padding": "0.375rem 0.625rem",
194
+ "cursor": "pointer"
195
+ },
196
+ ".boring-markdown-recipe[data-boring=\"markdown-editor\"] button[aria-pressed=\"true\"]": {
197
+ "background": "var(--boring-editor-accent, var(--accent, #e5e7eb))",
198
+ "font-weight": "600"
199
+ },
200
+ ".boring-markdown-recipe[data-boring=\"markdown-editor\"] button:disabled": {
201
+ "opacity": "0.5",
202
+ "cursor": "not-allowed"
203
+ },
204
+ ".boring-markdown-recipe[data-boring=\"markdown-editor\"] button:focus-visible, .boring-markdown-recipe[data-boring=\"markdown-editor\"] textarea:focus-visible": {
205
+ "outline": "2px solid var(--boring-editor-focus, var(--ring, #2563eb))",
206
+ "outline-offset": "2px"
207
+ },
208
+ ".boring-markdown-recipe[data-boring=\"markdown-editor\"] [role=\"status\"]": {
209
+ "font-size": "0.875rem",
210
+ "color": "var(--boring-editor-muted, var(--muted-foreground, #4b5563))"
211
+ },
212
+ ".boring-markdown-recipe[data-boring=\"markdown-editor\"] nav[aria-label=\"Document outline\"]": {
213
+ "border-bottom": "1px solid var(--boring-editor-border, var(--border, #d1d5db))",
214
+ "padding-bottom": "0.75rem"
215
+ },
216
+ ".boring-markdown-recipe[data-boring=\"markdown-editor\"] nav ol": {
217
+ "padding-left": "1.25rem",
218
+ "margin": "0",
219
+ "display": "grid",
220
+ "gap": "0.25rem"
221
+ },
222
+ ".boring-markdown-recipe[data-boring=\"markdown-editor\"] .boring-markdown-content": {
223
+ "min-height": "12rem",
224
+ "max-width": "75ch",
225
+ "width": "100%",
226
+ "margin-inline": "auto",
227
+ "line-height": "1.7",
228
+ "overflow-wrap": "anywhere"
229
+ },
230
+ ".boring-markdown-recipe[data-boring=\"markdown-editor\"] .boring-markdown-content p": {
231
+ "margin": "0.75rem 0"
232
+ },
233
+ ".boring-markdown-recipe[data-boring=\"markdown-editor\"] .boring-markdown-content h1": {
234
+ "font-size": "1.875rem",
235
+ "line-height": "1.2",
236
+ "margin": "1.25rem 0 0.75rem",
237
+ "font-weight": "700"
238
+ },
239
+ ".boring-markdown-recipe[data-boring=\"markdown-editor\"] .boring-markdown-content h2": {
240
+ "font-size": "1.5rem",
241
+ "line-height": "1.3",
242
+ "margin": "1.25rem 0 0.75rem",
243
+ "font-weight": "650"
244
+ },
245
+ ".boring-markdown-recipe[data-boring=\"markdown-editor\"] .boring-markdown-content h3": {
246
+ "font-size": "1.25rem",
247
+ "margin": "1rem 0 0.5rem",
248
+ "font-weight": "600"
249
+ },
250
+ ".boring-markdown-recipe[data-boring=\"markdown-editor\"] .boring-markdown-content ul": {
251
+ "list-style": "disc",
252
+ "padding-left": "1.5rem"
253
+ },
254
+ ".boring-markdown-recipe[data-boring=\"markdown-editor\"] .boring-markdown-content ol": {
255
+ "list-style": "decimal",
256
+ "padding-left": "1.5rem"
257
+ },
258
+ ".boring-markdown-recipe[data-boring=\"markdown-editor\"] .boring-markdown-content ul[data-type=\"taskList\"]": {
259
+ "list-style": "none",
260
+ "padding-left": "0"
261
+ },
262
+ ".boring-markdown-recipe[data-boring=\"markdown-editor\"] .boring-markdown-content li[data-type=\"taskItem\"]": {
263
+ "display": "flex",
264
+ "gap": "0.5rem",
265
+ "align-items": "baseline"
266
+ },
267
+ ".boring-markdown-recipe[data-boring=\"markdown-editor\"] .boring-markdown-content blockquote": {
268
+ "border-left": "3px solid var(--boring-editor-border, var(--border, #d1d5db))",
269
+ "padding-left": "1rem",
270
+ "margin-inline": "0",
271
+ "color": "var(--boring-editor-muted, var(--muted-foreground, #4b5563))"
272
+ },
273
+ ".boring-markdown-recipe[data-boring=\"markdown-editor\"] .boring-markdown-content pre, .boring-markdown-recipe[data-boring=\"markdown-editor\"] [data-boring=\"proposal\"] pre": {
274
+ "overflow-x": "auto",
275
+ "background": "var(--boring-editor-code-background, var(--muted, #f3f4f6))",
276
+ "border-radius": "0.375rem",
277
+ "padding": "0.75rem",
278
+ "font-family": "ui-monospace, monospace"
279
+ },
280
+ ".boring-markdown-recipe[data-boring=\"markdown-editor\"] .boring-markdown-content code": {
281
+ "font-family": "ui-monospace, monospace",
282
+ "font-size": "0.9em"
283
+ },
284
+ ".boring-markdown-recipe[data-boring=\"markdown-editor\"] > textarea": {
285
+ "width": "100%",
286
+ "min-height": "16rem",
287
+ "resize": "vertical",
288
+ "font-family": "ui-monospace, monospace",
289
+ "font-size": "0.875rem",
290
+ "line-height": "1.6",
291
+ "padding": "0.75rem",
292
+ "background": "inherit",
293
+ "color": "inherit",
294
+ "border": "1px solid var(--boring-editor-border, var(--border, #d1d5db))",
295
+ "border-radius": "0.375rem",
296
+ "box-sizing": "border-box"
297
+ },
298
+ ".boring-markdown-recipe[data-boring=\"markdown-editor\"] [role=\"alert\"]": {
299
+ "border-left": "3px solid var(--boring-editor-danger, var(--destructive, #b91c1c))",
300
+ "padding": "0.75rem",
301
+ "overflow-wrap": "anywhere"
302
+ },
303
+ ".boring-markdown-recipe[data-boring=\"markdown-editor\"] [data-boring=\"proposal\"]": {
304
+ "border": "1px solid var(--boring-editor-border, var(--border, #d1d5db))",
305
+ "padding": "0.75rem",
306
+ "border-radius": "0.375rem"
307
+ },
308
+ ".boring-markdown-recipe[data-boring=\"markdown-editor\"] [data-boring=\"proposal\"] summary": {
309
+ "cursor": "pointer",
310
+ "font-weight": "600"
311
+ },
312
+ ".boring-markdown-recipe[data-boring=\"markdown-editor\"] .boring-markdown-content:focus-visible": {
313
+ "outline": "2px solid var(--boring-editor-focus, var(--ring, #2563eb))",
314
+ "outline-offset": "2px"
315
+ },
316
+ ".boring-markdown-recipe[data-boring=\"markdown-editor\"] [data-boring=\"proposal-diff\"]": {
317
+ "font-family": "ui-monospace, monospace",
318
+ "font-size": "0.875rem",
319
+ "line-height": "1.5",
320
+ "overflow-x": "auto"
321
+ },
322
+ ".boring-markdown-recipe[data-boring=\"markdown-editor\"] [data-diff]": {
323
+ "white-space": "pre-wrap",
324
+ "overflow-wrap": "anywhere",
325
+ "padding": "0.125rem 0.375rem"
326
+ },
327
+ ".boring-markdown-recipe[data-boring=\"markdown-editor\"] [data-diff=\"add\"]": {
328
+ "background": "var(--boring-editor-diff-add-background, #ecfdf5)",
329
+ "color": "var(--boring-editor-diff-add-foreground, #065f46)"
330
+ },
331
+ ".boring-markdown-recipe[data-boring=\"markdown-editor\"] [data-diff=\"remove\"]": {
332
+ "background": "var(--boring-editor-diff-remove-background, #fff1f2)",
333
+ "color": "var(--boring-editor-diff-remove-foreground, #9f1239)"
334
+ }
335
+ },
336
+ "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."
337
+ },
338
+ {
339
+ "name": "html-viewer",
340
+ "type": "registry:component",
341
+ "title": "HTML source and passive preview",
342
+ "description": "Exact HTML source editing with a reconstructed passive preview and borrowed controller. Browser security qualification remains separate.",
343
+ "dependencies": [
344
+ "@hachej/boring-ui-kit@^0.2.2",
345
+ "@hachej/boring-files@^0.2.2",
346
+ "react@^19.0.0",
347
+ "react-dom@^19.0.0"
348
+ ],
349
+ "files": [
350
+ {
351
+ "path": "registry/html-viewer/html-viewer.tsx",
352
+ "type": "registry:component",
353
+ "target": "components/html-viewer/html-viewer.tsx"
354
+ }
355
+ ],
356
+ "css": {
357
+ ".boring-html-recipe[data-boring=\"html-viewer\"]": {
358
+ "background": "var(--boring-html-background, var(--background, #fff))",
359
+ "color": "var(--boring-html-foreground, var(--foreground, #111827))",
360
+ "border": "1px solid var(--boring-html-border, var(--border, #d1d5db))",
361
+ "border-radius": "var(--boring-html-radius, var(--radius, 0.75rem))",
362
+ "padding": "1rem",
363
+ "display": "grid",
364
+ "gap": "0.75rem",
365
+ "min-width": "0",
366
+ "font-family": "inherit"
367
+ },
368
+ ".boring-html-recipe[data-boring=\"html-viewer\"] > header": {
369
+ "display": "flex",
370
+ "justify-content": "space-between",
371
+ "align-items": "center",
372
+ "flex-wrap": "wrap",
373
+ "gap": "0.75rem"
374
+ },
375
+ ".boring-html-recipe[data-boring=\"html-viewer\"] [role=\"toolbar\"]": {
376
+ "display": "flex",
377
+ "flex-wrap": "wrap",
378
+ "gap": "0.375rem"
379
+ },
380
+ ".boring-html-recipe[data-boring=\"html-viewer\"] button": {
381
+ "font": "inherit",
382
+ "background": "var(--boring-html-background, var(--background, #fff))",
383
+ "color": "var(--boring-html-foreground, var(--foreground, #111827))",
384
+ "border": "1px solid var(--boring-html-border, var(--border, #d1d5db))",
385
+ "border-radius": "0.375rem",
386
+ "padding": "0.375rem 0.625rem",
387
+ "cursor": "pointer"
388
+ },
389
+ ".boring-html-recipe[data-boring=\"html-viewer\"] button[aria-pressed=\"true\"]": {
390
+ "font-weight": "700",
391
+ "text-decoration": "underline"
392
+ },
393
+ ".boring-html-recipe[data-boring=\"html-viewer\"] button:disabled": {
394
+ "opacity": "0.5",
395
+ "cursor": "not-allowed"
396
+ },
397
+ ".boring-html-recipe[data-boring=\"html-viewer\"] button:focus-visible, .boring-html-recipe[data-boring=\"html-viewer\"] textarea:focus-visible": {
398
+ "outline": "2px solid var(--boring-html-focus, var(--ring, #2563eb))",
399
+ "outline-offset": "2px"
400
+ },
401
+ ".boring-html-recipe[data-boring=\"html-viewer\"] .boring-html-viewer__source": {
402
+ "box-sizing": "border-box",
403
+ "width": "100%",
404
+ "min-height": "18rem",
405
+ "font-family": "monospace",
406
+ "line-height": "1.5",
407
+ "background": "var(--boring-html-background, var(--background, #fff))",
408
+ "color": "var(--boring-html-foreground, var(--foreground, #111827))",
409
+ "padding": "0.75rem",
410
+ "border": "1px solid var(--boring-html-border, var(--border, #d1d5db))",
411
+ "border-radius": "0.375rem",
412
+ "resize": "vertical"
413
+ },
414
+ ".boring-html-recipe[data-boring=\"html-viewer\"] .boring-html-viewer__frame": {
415
+ "box-sizing": "border-box",
416
+ "width": "100%",
417
+ "min-height": "18rem",
418
+ "border": "1px solid var(--boring-html-border, var(--border, #d1d5db))",
419
+ "border-radius": "0.375rem"
420
+ },
421
+ ".boring-html-recipe[data-boring=\"html-viewer\"] [role=\"status\"]": {
422
+ "font-size": "0.875rem"
423
+ },
424
+ ".boring-html-recipe[data-boring=\"html-viewer\"] [role=\"alert\"]": {
425
+ "border-inline-start": "0.25rem solid currentColor",
426
+ "padding-inline-start": "0.75rem"
427
+ }
428
+ }
429
+ },
430
+ {
431
+ "name": "pi-chat",
432
+ "type": "registry:block",
433
+ "title": "Pi chat",
434
+ "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.",
435
+ "dependencies": [
436
+ "@hachej/boring-ui-kit@^0.2.2",
437
+ "react@^19.0.0",
438
+ "react-dom@^19.0.0",
439
+ "marked@^17.0.6",
440
+ "entities@^8.1.0",
441
+ "@earendil-works/pi-durable@^1.1.0",
442
+ "@earendil-works/chord@^1.1.0",
443
+ "@earendil-works/pi-ai@^1.1.0",
444
+ "@modelcontextprotocol/sdk@^1.32.0",
445
+ "lucide-react@^1.51.0",
446
+ "use-stick-to-bottom@^1.1.6"
447
+ ],
448
+ "registryDependencies": [
449
+ "@boring-ui/theme",
450
+ "@boring-ui/utils",
451
+ "@boring-ui/button"
452
+ ],
453
+ "files": [
454
+ {
455
+ "path": "registry/pi-chat/activity.tsx",
456
+ "type": "registry:component",
457
+ "target": "components/pi-chat/activity.tsx"
458
+ },
459
+ {
460
+ "path": "registry/pi-chat/artifact-card.tsx",
461
+ "type": "registry:component",
462
+ "target": "components/pi-chat/artifact-card.tsx"
463
+ },
464
+ {
465
+ "path": "registry/pi-chat/approval-card.tsx",
466
+ "type": "registry:component",
467
+ "target": "components/pi-chat/approval-card.tsx"
468
+ },
469
+ {
470
+ "path": "registry/pi-chat/artifact.ts",
471
+ "type": "registry:lib",
472
+ "target": "components/pi-chat/artifact.ts"
473
+ },
474
+ {
475
+ "path": "registry/pi-chat/code-block.tsx",
476
+ "type": "registry:component",
477
+ "target": "components/pi-chat/code-block.tsx"
478
+ },
479
+ {
480
+ "path": "registry/pi-chat/composer.tsx",
481
+ "type": "registry:component",
482
+ "target": "components/pi-chat/composer.tsx"
483
+ },
484
+ {
485
+ "path": "registry/pi-chat/config.ts",
486
+ "type": "registry:lib",
487
+ "target": "components/pi-chat/config.ts"
488
+ },
489
+ {
490
+ "path": "registry/pi-chat/empty-state.tsx",
491
+ "type": "registry:component",
492
+ "target": "components/pi-chat/empty-state.tsx"
493
+ },
494
+ {
495
+ "path": "registry/pi-chat/history.tsx",
496
+ "type": "registry:component",
497
+ "target": "components/pi-chat/history.tsx"
498
+ },
499
+ {
500
+ "path": "registry/pi-chat/markdown.tsx",
501
+ "type": "registry:component",
502
+ "target": "components/pi-chat/markdown.tsx"
503
+ },
504
+ {
505
+ "path": "registry/pi-chat/mention-menu.tsx",
506
+ "type": "registry:component",
507
+ "target": "components/pi-chat/mention-menu.tsx"
508
+ },
509
+ {
510
+ "path": "registry/pi-chat/message.tsx",
511
+ "type": "registry:component",
512
+ "target": "components/pi-chat/message.tsx"
513
+ },
514
+ {
515
+ "path": "registry/pi-chat/notice.tsx",
516
+ "type": "registry:component",
517
+ "target": "components/pi-chat/notice.tsx"
518
+ },
519
+ {
520
+ "path": "registry/pi-chat/pi-chat.tsx",
521
+ "type": "registry:component",
522
+ "target": "components/pi-chat/pi-chat.tsx"
523
+ },
524
+ {
525
+ "path": "registry/pi-chat/picker-keyboard.ts",
526
+ "type": "registry:lib",
527
+ "target": "components/pi-chat/picker-keyboard.ts"
528
+ },
529
+ {
530
+ "path": "registry/pi-chat/pickers.tsx",
531
+ "type": "registry:component",
532
+ "target": "components/pi-chat/pickers.tsx"
533
+ },
534
+ {
535
+ "path": "registry/pi-chat/question-card.tsx",
536
+ "type": "registry:component",
537
+ "target": "components/pi-chat/question-card.tsx"
538
+ },
539
+ {
540
+ "path": "registry/pi-chat/queue.tsx",
541
+ "type": "registry:component",
542
+ "target": "components/pi-chat/queue.tsx"
543
+ },
544
+ {
545
+ "path": "registry/pi-chat/rows.ts",
546
+ "type": "registry:lib",
547
+ "target": "components/pi-chat/rows.ts"
548
+ },
549
+ {
550
+ "path": "registry/pi-chat/session.tsx",
551
+ "type": "registry:component",
552
+ "target": "components/pi-chat/session.tsx"
553
+ },
554
+ {
555
+ "path": "registry/pi-chat/shimmer.tsx",
556
+ "type": "registry:component",
557
+ "target": "components/pi-chat/shimmer.tsx"
558
+ },
559
+ {
560
+ "path": "registry/pi-chat/slash-menu.tsx",
561
+ "type": "registry:component",
562
+ "target": "components/pi-chat/slash-menu.tsx"
563
+ },
564
+ {
565
+ "path": "registry/pi-chat/tool.tsx",
566
+ "type": "registry:component",
567
+ "target": "components/pi-chat/tool.tsx"
568
+ },
569
+ {
570
+ "path": "registry/pi-chat/labels.ts",
571
+ "type": "registry:lib",
572
+ "target": "components/pi-chat/labels.ts"
573
+ },
574
+ {
575
+ "path": "registry/pi-chat/labels-fr.ts",
576
+ "type": "registry:lib",
577
+ "target": "components/pi-chat/labels-fr.ts"
578
+ },
579
+ {
580
+ "path": "registry/pi-chat/locale.ts",
581
+ "type": "registry:lib",
582
+ "target": "components/pi-chat/locale.ts"
583
+ }
584
+ ],
585
+ "css": {
586
+ "@layer base": {
587
+ ".pi-chat, .pi-chat *, .pi-chat *::before, .pi-chat *::after": {
588
+ "box-sizing": "border-box"
589
+ },
590
+ ".pi-chat :where(button, input, textarea)": {
591
+ "font": "inherit",
592
+ "color": "inherit",
593
+ "letter-spacing": "inherit"
594
+ },
595
+ ".pi-chat :where(button)": {
596
+ "background-color": "transparent",
597
+ "border": "0",
598
+ "padding": "0"
599
+ },
600
+ ".pi-chat :where(textarea, input)": {
601
+ "margin": "0"
602
+ },
603
+ ".pi-chat [hidden]": {
604
+ "display": "none"
605
+ }
606
+ },
607
+ "@layer components": {
608
+ ".pi-chat-shimmer": {
609
+ "background-image": "linear-gradient(100deg, var(--muted-foreground) 35%, var(--foreground) 50%, var(--muted-foreground) 65%)",
610
+ "background-size": "250% 100%",
611
+ "background-clip": "text",
612
+ "-webkit-background-clip": "text",
613
+ "color": "transparent",
614
+ "animation": "pi-chat-shimmer 2.2s linear infinite"
615
+ },
616
+ ".pi-chat [data-testid=\"message-text\"][data-streaming=\"true\"] > :last-child:not([data-testid=\"code-block\"])::after": {
617
+ "content": "\"\"",
618
+ "display": "inline-block",
619
+ "width": "0.45em",
620
+ "height": "1.05em",
621
+ "margin-inline-start": "0.2em",
622
+ "vertical-align": "-0.15em",
623
+ "border-radius": "2px",
624
+ "background": "color-mix(in oklab, var(--foreground) 60%, transparent)",
625
+ "animation": "pi-chat-caret 1s steps(2, jump-none) infinite"
626
+ }
627
+ },
628
+ "@keyframes pi-chat-shimmer": {
629
+ "from": {
630
+ "background-position": "100% 0"
631
+ },
632
+ "to": {
633
+ "background-position": "0 0"
634
+ }
635
+ },
636
+ "@keyframes pi-chat-caret": {
637
+ "0%": {
638
+ "opacity": "1"
639
+ },
640
+ "50%": {
641
+ "opacity": "0.15"
642
+ },
643
+ "100%": {
644
+ "opacity": "1"
645
+ }
646
+ }
647
+ }
648
+ },
649
+ {
650
+ "name": "pi-ambient",
651
+ "type": "registry:block",
652
+ "title": "Pi ambient agent",
653
+ "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.",
654
+ "dependencies": [
655
+ "@hachej/boring-ui-kit@^0.2.2",
656
+ "react@^19.0.0",
657
+ "react-dom@^19.0.0",
658
+ "@earendil-works/pi-durable@^1.1.0",
659
+ "@earendil-works/pi-ai@^1.1.0",
660
+ "lucide-react@^1.51.0"
661
+ ],
662
+ "registryDependencies": [
663
+ "@boring-ui/pi-chat",
664
+ "@boring-ui/pi-workspace",
665
+ "@boring-ui/utils",
666
+ "@boring-ui/button"
667
+ ],
668
+ "files": [
669
+ {
670
+ "path": "registry/pi-ambient/ambient.tsx",
671
+ "type": "registry:component",
672
+ "target": "components/pi-ambient/ambient.tsx"
673
+ },
674
+ {
675
+ "path": "registry/pi-ambient/browser-notify.ts",
676
+ "type": "registry:hook",
677
+ "target": "components/pi-ambient/browser-notify.ts"
678
+ },
679
+ {
680
+ "path": "registry/pi-ambient/notifications.tsx",
681
+ "type": "registry:component",
682
+ "target": "components/pi-ambient/notifications.tsx"
683
+ }
684
+ ],
685
+ "css": {
686
+ "@layer components": {
687
+ ".pi-chat.pi-ambient[data-variant=\"contrast\"]": {
688
+ "color-scheme": "dark",
689
+ "--background": "oklch(0.262 0.004 285)",
690
+ "--foreground": "oklch(0.975 0.002 286)",
691
+ "--card": "oklch(0.262 0.004 285)",
692
+ "--card-foreground": "oklch(0.975 0.002 286)",
693
+ "--popover": "oklch(0.3 0.005 285)",
694
+ "--popover-foreground": "oklch(0.975 0.002 286)",
695
+ "--primary": "oklch(0.985 0 0)",
696
+ "--primary-foreground": "oklch(0.21 0.006 285.885)",
697
+ "--secondary": "oklch(0.33 0.006 286)",
698
+ "--secondary-foreground": "oklch(0.985 0 0)",
699
+ "--muted": "oklch(0.315 0.005 286)",
700
+ "--muted-foreground": "oklch(0.7 0.01 286)",
701
+ "--accent": "oklch(0.35 0.006 286)",
702
+ "--accent-foreground": "oklch(0.985 0 0)",
703
+ "--destructive": "oklch(0.704 0.191 22.216)",
704
+ "--border": "oklch(1 0 0 / 9%)",
705
+ "--input": "oklch(1 0 0 / 14%)",
706
+ "--ring": "oklch(0.75 0.02 286)"
707
+ }
708
+ }
709
+ }
710
+ },
711
+ {
712
+ "name": "pi-workspace",
713
+ "type": "registry:block",
714
+ "title": "Pi workspace layout",
715
+ "description": "ArtifactWorkspace: the chat with a right-hand panel that slides in at full height, a resizable divider, full screen, a full-screen sheet on a phone and an opt-in float-when-narrow (the host swaps in AmbientChat from pi-ambient). Layout only; what is open is the host's. Pair it with the viewers item for the panel contents. Also dock.tsx: composable docks (DockLayout, Dock, DockMain, useDock) for any host content on the left or right of the main area, each resizable, floatable, closable and a full-screen sheet on a phone.",
716
+ "dependencies": [
717
+ "react@^19.0.0",
718
+ "react-dom@^19.0.0"
719
+ ],
720
+ "registryDependencies": [
721
+ "@boring-ui/pi-chat",
722
+ "@boring-ui/utils"
723
+ ],
724
+ "files": [
725
+ {
726
+ "path": "registry/pi-workspace/workspace.tsx",
727
+ "type": "registry:component",
728
+ "target": "components/pi-workspace/workspace.tsx"
729
+ },
730
+ {
731
+ "path": "registry/pi-workspace/dock.tsx",
732
+ "type": "registry:component",
733
+ "target": "components/pi-workspace/dock.tsx"
734
+ }
735
+ ]
736
+ },
737
+ {
738
+ "name": "pi-app",
739
+ "type": "registry:block",
740
+ "title": "Pi agent app",
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).",
742
+ "dependencies": [
743
+ "@hachej/boring-ui-kit@^0.2.2",
744
+ "@hachej/boring-files@^0.2.2",
745
+ "react@^19.0.0",
746
+ "react-dom@^19.0.0",
747
+ "lucide-react@^1.51.0",
748
+ "radix-ui@^1.8.0"
749
+ ],
750
+ "registryDependencies": [
751
+ "@boring-ui/pi-chat",
752
+ "@boring-ui/pi-workspace",
753
+ "@boring-ui/viewers",
754
+ "@boring-ui/utils",
755
+ "@boring-ui/button"
756
+ ],
757
+ "files": [
758
+ {
759
+ "path": "registry/pi-app/agent-workspace.tsx",
760
+ "type": "registry:component",
761
+ "target": "components/pi-app/agent-workspace.tsx"
762
+ },
763
+ {
764
+ "path": "registry/pi-app/sessions.tsx",
765
+ "type": "registry:component",
766
+ "target": "components/pi-app/sessions.tsx"
767
+ },
768
+ {
769
+ "path": "registry/pi-app/artifact-panel.tsx",
770
+ "type": "registry:component",
771
+ "target": "components/pi-app/artifact-panel.tsx"
772
+ },
773
+ {
774
+ "path": "registry/pi-app/file-viewer.tsx",
775
+ "type": "registry:component",
776
+ "target": "components/pi-app/file-viewer.tsx"
777
+ },
778
+ {
779
+ "path": "registry/pi-app/file-kinds.ts",
780
+ "type": "registry:lib",
781
+ "target": "components/pi-app/file-kinds.ts"
782
+ },
783
+ {
784
+ "path": "registry/pi-app/use-saved.ts",
785
+ "type": "registry:hook",
786
+ "target": "components/pi-app/use-saved.ts"
787
+ },
788
+ {
789
+ "path": "registry/pi-app/use-new-version.ts",
790
+ "type": "registry:hook",
791
+ "target": "components/pi-app/use-new-version.ts"
792
+ },
793
+ {
794
+ "path": "registry/pi-app/new-version-notice.tsx",
795
+ "type": "registry:component",
796
+ "target": "components/pi-app/new-version-notice.tsx"
797
+ },
798
+ {
799
+ "path": "registry/pi-app/use-conversations.ts",
800
+ "type": "registry:hook",
801
+ "target": "components/pi-app/use-conversations.ts"
802
+ },
803
+ {
804
+ "path": "registry/pi-app/use-remote-chat.ts",
805
+ "type": "registry:hook",
806
+ "target": "components/pi-app/use-remote-chat.ts"
807
+ },
808
+ {
809
+ "path": "registry/pi-app/app-labels.ts",
810
+ "type": "registry:lib",
811
+ "target": "components/pi-app/app-labels.ts"
812
+ },
813
+ {
814
+ "path": "registry/pi-app/revision-files.ts",
815
+ "type": "registry:lib",
816
+ "target": "components/pi-app/revision-files.ts"
817
+ },
818
+ {
819
+ "path": "registry/pi-app/app-labels-fr.ts",
820
+ "type": "registry:lib",
821
+ "target": "components/pi-app/app-labels-fr.ts"
822
+ }
823
+ ]
824
+ },
825
+ {
826
+ "name": "viewers",
827
+ "type": "registry:component",
828
+ "title": "Viewers",
829
+ "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.",
830
+ "dependencies": [
831
+ "@hachej/boring-ui-kit@^0.2.2",
832
+ "@hachej/boring-files@^0.2.2",
833
+ "react@^19.0.0",
834
+ "react-dom@^19.0.0",
835
+ "marked@^17.0.6",
836
+ "@tiptap/core@^3.31.4",
837
+ "@tiptap/react@^3.31.4",
838
+ "@tiptap/pm@^3.31.4",
839
+ "@tiptap/starter-kit@^3.31.4",
840
+ "@tiptap/markdown@^3.31.4",
841
+ "@tiptap/extensions@^3.31.4",
842
+ "@tiptap/extension-list@^3.31.4",
843
+ "@tiptap/extension-table@^3.31.4",
844
+ "@tiptap/extension-image@^3.31.4",
845
+ "@tiptap/extension-highlight@^3.31.4",
846
+ "@tiptap/extension-bubble-menu@^3.31.4",
847
+ "@tiptap/extension-floating-menu@^3.31.4",
848
+ "lucide-react@^1.51.0"
849
+ ],
850
+ "registryDependencies": [
851
+ "@boring-ui/theme",
852
+ "@boring-ui/utils",
853
+ "@boring-ui/button"
854
+ ],
855
+ "files": [
856
+ {
857
+ "path": "registry/viewers/download.ts",
858
+ "type": "registry:lib",
859
+ "target": "components/viewers/download.ts"
860
+ },
861
+ {
862
+ "path": "registry/viewers/html-pane.tsx",
863
+ "type": "registry:component",
864
+ "target": "components/viewers/html-pane.tsx"
865
+ },
866
+ {
867
+ "path": "registry/viewers/image-pane.tsx",
868
+ "type": "registry:component",
869
+ "target": "components/viewers/image-pane.tsx"
870
+ },
871
+ {
872
+ "path": "registry/viewers/interactive-html.tsx",
873
+ "type": "registry:component",
874
+ "target": "components/viewers/interactive-html.tsx"
875
+ },
876
+ {
877
+ "path": "registry/viewers/markdown-pane.tsx",
878
+ "type": "registry:component",
879
+ "target": "components/viewers/markdown-pane.tsx"
880
+ },
881
+ {
882
+ "path": "registry/viewers/media.ts",
883
+ "type": "registry:lib",
884
+ "target": "components/viewers/media.ts"
885
+ },
886
+ {
887
+ "path": "registry/viewers/menu.tsx",
888
+ "type": "registry:component",
889
+ "target": "components/viewers/menu.tsx"
890
+ },
891
+ {
892
+ "path": "registry/viewers/pdf-pane.tsx",
893
+ "type": "registry:component",
894
+ "target": "components/viewers/pdf-pane.tsx"
895
+ },
896
+ {
897
+ "path": "registry/viewers/share.ts",
898
+ "type": "registry:lib",
899
+ "target": "components/viewers/share.ts"
900
+ },
901
+ {
902
+ "path": "registry/viewers/viewer-frame.tsx",
903
+ "type": "registry:component",
904
+ "target": "components/viewers/viewer-frame.tsx"
905
+ },
906
+ {
907
+ "path": "registry/viewers/viewer-window.ts",
908
+ "type": "registry:lib",
909
+ "target": "components/viewers/viewer-window.ts"
910
+ },
911
+ {
912
+ "path": "registry/viewers/viewer-labels-fr.ts",
913
+ "type": "registry:lib",
914
+ "target": "components/viewers/viewer-labels-fr.ts"
915
+ }
916
+ ],
917
+ "css": {
918
+ "@layer base": {
919
+ ".boring-viewer, .boring-viewer *, .boring-viewer *::before, .boring-viewer *::after": {
920
+ "box-sizing": "border-box"
921
+ },
922
+ ".boring-viewer :where(button, input, textarea)": {
923
+ "font": "inherit",
924
+ "color": "inherit",
925
+ "letter-spacing": "inherit"
926
+ },
927
+ ".boring-viewer :where(button)": {
928
+ "background-color": "transparent",
929
+ "border": "0",
930
+ "padding": "0"
931
+ },
932
+ ".boring-viewer :where(textarea, input)": {
933
+ "margin": "0"
934
+ },
935
+ ".boring-viewer [hidden]": {
936
+ "display": "none"
937
+ }
938
+ },
939
+ "@layer components": {
940
+ ".boring-viewer .boring-markdown-editor": {
941
+ "display": "flex",
942
+ "flex-direction": "column",
943
+ "flex": "1 1 auto",
944
+ "min-height": "0",
945
+ "min-width": "0",
946
+ "container-type": "inline-size"
947
+ },
948
+ ".boring-viewer .boring-markdown-surface": {
949
+ "flex": "1 1 auto",
950
+ "min-height": "0",
951
+ "overflow": "auto",
952
+ "scrollbar-width": "thin",
953
+ "scrollbar-color": "color-mix(in oklab, var(--foreground) 22%, transparent) transparent"
954
+ },
955
+ ".boring-viewer .boring-markdown-surface:focus-within": {
956
+ "box-shadow": "inset 0 0 0 1px color-mix(in oklab, var(--ring) 55%, transparent)"
957
+ },
958
+ ".boring-viewer .boring-markdown-toolbar": {
959
+ "display": "flex",
960
+ "flex": "none",
961
+ "align-items": "center",
962
+ "gap": "0.125rem",
963
+ "padding": "0.375rem 0.75rem",
964
+ "border-bottom": "1px solid var(--border)",
965
+ "background": "var(--background)",
966
+ "overflow-x": "auto",
967
+ "scrollbar-width": "none"
968
+ },
969
+ ".boring-viewer .boring-markdown-toolbar::-webkit-scrollbar": {
970
+ "display": "none"
971
+ },
972
+ ".boring-viewer .boring-markdown-tool": {
973
+ "display": "inline-flex",
974
+ "flex": "none",
975
+ "align-items": "center",
976
+ "justify-content": "center",
977
+ "width": "2rem",
978
+ "height": "2rem",
979
+ "border-radius": "0.375rem",
980
+ "color": "var(--muted-foreground)",
981
+ "cursor": "pointer",
982
+ "transition": "background-color 0.12s, color 0.12s"
983
+ },
984
+ ".boring-viewer .boring-markdown-tool:hover:not(:disabled)": {
985
+ "background": "var(--muted)",
986
+ "color": "var(--foreground)"
987
+ },
988
+ ".boring-viewer .boring-markdown-tool[aria-pressed=\"true\"]": {
989
+ "background": "color-mix(in oklab, var(--primary) 12%, transparent)",
990
+ "color": "var(--foreground)",
991
+ "box-shadow": "inset 0 0 0 1px color-mix(in oklab, var(--primary) 22%, transparent)"
992
+ },
993
+ ".boring-viewer .boring-markdown-tool:disabled": {
994
+ "opacity": "0.4",
995
+ "cursor": "not-allowed"
996
+ },
997
+ ".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": {
998
+ "outline": "2px solid color-mix(in oklab, var(--ring) 70%, transparent)",
999
+ "outline-offset": "1px"
1000
+ },
1001
+ ".boring-viewer .boring-markdown-separator": {
1002
+ "flex": "none",
1003
+ "width": "1px",
1004
+ "height": "1rem",
1005
+ "margin": "0 0.375rem",
1006
+ "background": "var(--border)"
1007
+ },
1008
+ ".boring-viewer .boring-markdown-icon": {
1009
+ "display": "block"
1010
+ },
1011
+ ".boring-viewer .boring-markdown-link": {
1012
+ "display": "flex",
1013
+ "flex": "none",
1014
+ "flex-wrap": "wrap",
1015
+ "align-items": "center",
1016
+ "gap": "0.5rem",
1017
+ "padding": "0.5rem 0.75rem",
1018
+ "border-bottom": "1px solid var(--border)",
1019
+ "background": "var(--muted)"
1020
+ },
1021
+ ".boring-viewer .boring-markdown-link input": {
1022
+ "flex": "1 1 14rem",
1023
+ "min-width": "0",
1024
+ "height": "2rem",
1025
+ "padding": "0 0.625rem",
1026
+ "border": "1px solid var(--input)",
1027
+ "border-radius": "0.375rem",
1028
+ "background": "var(--background)",
1029
+ "font-size": "0.875rem"
1030
+ },
1031
+ ".boring-viewer .boring-markdown-link input:focus-visible": {
1032
+ "outline": "2px solid color-mix(in oklab, var(--ring) 70%, transparent)",
1033
+ "outline-offset": "0"
1034
+ },
1035
+ ".boring-viewer .boring-markdown-link button, .boring-viewer .boring-markdown-alert button, .boring-viewer .boring-markdown-proposal > button": {
1036
+ "height": "2rem",
1037
+ "padding": "0 0.75rem",
1038
+ "border": "1px solid var(--border)",
1039
+ "border-radius": "0.375rem",
1040
+ "background": "var(--background)",
1041
+ "font-size": "0.8125rem",
1042
+ "font-weight": "500",
1043
+ "cursor": "pointer"
1044
+ },
1045
+ ".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)": {
1046
+ "background": "var(--muted)"
1047
+ },
1048
+ ".boring-viewer .boring-markdown-alert button:disabled, .boring-viewer .boring-markdown-proposal > button:disabled": {
1049
+ "opacity": "0.45",
1050
+ "cursor": "not-allowed"
1051
+ },
1052
+ ".boring-viewer .boring-markdown-notice, .boring-viewer .boring-markdown-alert, .boring-viewer .boring-markdown-proposal": {
1053
+ "flex": "none",
1054
+ "margin": "0.75rem 0.75rem 0",
1055
+ "padding": "0.625rem 0.75rem",
1056
+ "border": "1px solid var(--border)",
1057
+ "border-radius": "0.5rem",
1058
+ "background": "var(--muted)",
1059
+ "font-size": "0.8125rem",
1060
+ "line-height": "1.5"
1061
+ },
1062
+ ".boring-viewer .boring-markdown-notice": {
1063
+ "border-left": "3px solid color-mix(in oklab, var(--primary) 55%, transparent)"
1064
+ },
1065
+ ".boring-viewer .boring-markdown-alert": {
1066
+ "display": "flex",
1067
+ "flex-wrap": "wrap",
1068
+ "align-items": "center",
1069
+ "gap": "0.5rem",
1070
+ "border-color": "color-mix(in oklab, var(--destructive) 40%, var(--border))",
1071
+ "background": "color-mix(in oklab, var(--destructive) 8%, var(--background))"
1072
+ },
1073
+ ".boring-viewer .boring-markdown-proposal": {
1074
+ "display": "flex",
1075
+ "flex-wrap": "wrap",
1076
+ "align-items": "center",
1077
+ "gap": "0.5rem",
1078
+ "background": "var(--background)"
1079
+ },
1080
+ ".boring-viewer .boring-markdown-proposal h3": {
1081
+ "flex": "1 1 100%",
1082
+ "margin": "0",
1083
+ "font-size": "0.875rem"
1084
+ },
1085
+ ".boring-viewer .boring-markdown-proposal details": {
1086
+ "flex": "1 1 100%",
1087
+ "min-width": "0"
1088
+ },
1089
+ ".boring-viewer .boring-markdown-proposal summary": {
1090
+ "cursor": "pointer",
1091
+ "color": "var(--muted-foreground)"
1092
+ },
1093
+ ".boring-viewer .boring-markdown-proposal pre": {
1094
+ "margin": "0.25rem 0",
1095
+ "max-height": "12rem",
1096
+ "overflow": "auto",
1097
+ "padding": "0.5rem",
1098
+ "border-radius": "0.375rem",
1099
+ "background": "var(--muted)",
1100
+ "font": "0.75rem/1.5 ui-monospace, SFMono-Regular, Menlo, monospace",
1101
+ "white-space": "pre-wrap"
1102
+ },
1103
+ ".boring-viewer .boring-markdown-editor nav[aria-label=\"Document outline\"]": {
1104
+ "display": "none"
1105
+ },
1106
+ "@container (min-width: 46rem)": {
1107
+ ".boring-viewer .boring-markdown-editor nav[aria-label=\"Document outline\"]": {
1108
+ "display": "block",
1109
+ "flex": "none",
1110
+ "padding": "0.375rem 0.75rem",
1111
+ "border-bottom": "1px solid var(--border)",
1112
+ "overflow-x": "auto"
1113
+ },
1114
+ ".boring-viewer .boring-markdown-editor nav[aria-label=\"Document outline\"] ol": {
1115
+ "display": "flex",
1116
+ "gap": "0.25rem",
1117
+ "margin": "0",
1118
+ "padding": "0",
1119
+ "list-style": "none"
1120
+ },
1121
+ ".boring-viewer .boring-markdown-editor nav[aria-label=\"Document outline\"] button": {
1122
+ "max-width": "14rem",
1123
+ "padding": "0.125rem 0.5rem",
1124
+ "overflow": "hidden",
1125
+ "border-radius": "999px",
1126
+ "color": "var(--muted-foreground)",
1127
+ "font-size": "0.75rem",
1128
+ "text-overflow": "ellipsis",
1129
+ "white-space": "nowrap",
1130
+ "cursor": "pointer"
1131
+ },
1132
+ ".boring-viewer .boring-markdown-editor nav[aria-label=\"Document outline\"] button:hover": {
1133
+ "background": "var(--muted)",
1134
+ "color": "var(--foreground)"
1135
+ },
1136
+ ".boring-viewer .boring-markdown-editor nav[aria-label=\"Document outline\"] [data-heading-level=\"1\"] button": {
1137
+ "font-weight": "600"
1138
+ }
1139
+ },
1140
+ ".boring-viewer .boring-markdown-source, .boring-viewer .boring-html-viewer__source": {
1141
+ "display": "block",
1142
+ "flex": "1 1 auto",
1143
+ "width": "100%",
1144
+ "min-height": "0",
1145
+ "margin": "0",
1146
+ "padding": "1rem 1.25rem",
1147
+ "border": "0",
1148
+ "border-radius": "0",
1149
+ "outline": "none",
1150
+ "resize": "none",
1151
+ "background": "var(--background)",
1152
+ "color": "var(--foreground)",
1153
+ "font": "0.8125rem/1.65 ui-monospace, SFMono-Regular, \"SF Mono\", Menlo, Consolas, monospace",
1154
+ "tab-size": "2",
1155
+ "caret-color": "var(--foreground)"
1156
+ },
1157
+ ".boring-viewer .boring-markdown-source:focus-visible, .boring-viewer .boring-html-viewer__source:focus-visible": {
1158
+ "box-shadow": "inset 0 0 0 1px color-mix(in oklab, var(--ring) 55%, transparent)"
1159
+ },
1160
+ ".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": {
1161
+ "background": "color-mix(in oklab, var(--primary) 24%, transparent)"
1162
+ },
1163
+ ".boring-viewer .boring-markdown-content": {
1164
+ "max-width": "46rem",
1165
+ "min-height": "100%",
1166
+ "margin": "0 auto",
1167
+ "padding": "1.25rem 1.25rem 3rem",
1168
+ "outline": "none",
1169
+ "color": "var(--foreground)",
1170
+ "font-size": "0.9375rem",
1171
+ "line-height": "1.7",
1172
+ "letter-spacing": "-0.005em",
1173
+ "overflow-wrap": "anywhere"
1174
+ },
1175
+ ".boring-viewer .boring-markdown-content > :first-child": {
1176
+ "margin-top": "0"
1177
+ },
1178
+ ".boring-viewer .boring-markdown-content p": {
1179
+ "margin": "0.75rem 0"
1180
+ },
1181
+ ".boring-viewer .boring-markdown-content p.is-editor-empty:first-child::before": {
1182
+ "content": "attr(data-placeholder)",
1183
+ "float": "left",
1184
+ "height": "0",
1185
+ "color": "var(--muted-foreground)",
1186
+ "opacity": "0.8",
1187
+ "pointer-events": "none"
1188
+ },
1189
+ ".boring-viewer .boring-markdown-content :is(h1, h2, h3, h4, h5, h6)": {
1190
+ "color": "var(--foreground)",
1191
+ "font-weight": "600",
1192
+ "letter-spacing": "-0.02em",
1193
+ "line-height": "1.25"
1194
+ },
1195
+ ".boring-viewer .boring-markdown-content h1": {
1196
+ "margin": "1.75rem 0 0.75rem",
1197
+ "font-size": "1.875rem"
1198
+ },
1199
+ ".boring-viewer .boring-markdown-content h2": {
1200
+ "margin": "1.5rem 0 0.625rem",
1201
+ "padding-bottom": "0.25rem",
1202
+ "border-bottom": "1px solid color-mix(in oklab, var(--border) 70%, transparent)",
1203
+ "font-size": "1.375rem"
1204
+ },
1205
+ ".boring-viewer .boring-markdown-content h3": {
1206
+ "margin": "1.25rem 0 0.5rem",
1207
+ "font-size": "1.125rem"
1208
+ },
1209
+ ".boring-viewer .boring-markdown-content :is(h4, h5, h6)": {
1210
+ "margin": "1rem 0 0.4rem",
1211
+ "font-size": "1rem"
1212
+ },
1213
+ ".boring-viewer .boring-markdown-content :is(ul, ol)": {
1214
+ "margin": "0.75rem 0",
1215
+ "padding-left": "1.5rem"
1216
+ },
1217
+ ".boring-viewer .boring-markdown-content ul": {
1218
+ "list-style": "disc"
1219
+ },
1220
+ ".boring-viewer .boring-markdown-content ul ul": {
1221
+ "list-style": "circle"
1222
+ },
1223
+ ".boring-viewer .boring-markdown-content ul ul ul": {
1224
+ "list-style": "square"
1225
+ },
1226
+ ".boring-viewer .boring-markdown-content ol": {
1227
+ "list-style": "decimal"
1228
+ },
1229
+ ".boring-viewer .boring-markdown-content ol ol": {
1230
+ "list-style": "lower-alpha"
1231
+ },
1232
+ ".boring-viewer .boring-markdown-content ol ol ol": {
1233
+ "list-style": "lower-roman"
1234
+ },
1235
+ ".boring-viewer .boring-markdown-content li": {
1236
+ "margin": "0.25rem 0"
1237
+ },
1238
+ ".boring-viewer .boring-markdown-content li::marker": {
1239
+ "color": "var(--muted-foreground)"
1240
+ },
1241
+ ".boring-viewer .boring-markdown-content li > p": {
1242
+ "margin": "0"
1243
+ },
1244
+ ".boring-viewer .boring-markdown-content ul[data-type=\"taskList\"]": {
1245
+ "padding-left": "0",
1246
+ "list-style": "none"
1247
+ },
1248
+ ".boring-viewer .boring-markdown-content ul[data-type=\"taskList\"] li": {
1249
+ "display": "flex",
1250
+ "align-items": "flex-start",
1251
+ "gap": "0.5rem"
1252
+ },
1253
+ ".boring-viewer .boring-markdown-content ul[data-type=\"taskList\"] li > label": {
1254
+ "display": "inline-flex",
1255
+ "flex": "none",
1256
+ "align-items": "center",
1257
+ "height": "1.7em",
1258
+ "margin": "0",
1259
+ "user-select": "none"
1260
+ },
1261
+ ".boring-viewer .boring-markdown-content ul[data-type=\"taskList\"] li > label input[type=\"checkbox\"]": {
1262
+ "width": "1rem",
1263
+ "height": "1rem",
1264
+ "margin": "0",
1265
+ "accent-color": "var(--primary)",
1266
+ "cursor": "pointer"
1267
+ },
1268
+ ".boring-viewer .boring-markdown-content ul[data-type=\"taskList\"] li > div": {
1269
+ "flex": "1 1 auto",
1270
+ "min-width": "0"
1271
+ },
1272
+ ".boring-viewer .boring-markdown-content ul[data-type=\"taskList\"] li[data-checked=\"true\"] > div": {
1273
+ "color": "var(--muted-foreground)",
1274
+ "text-decoration": "line-through"
1275
+ },
1276
+ ".boring-viewer .boring-markdown-content strong": {
1277
+ "font-weight": "600"
1278
+ },
1279
+ ".boring-viewer .boring-markdown-content code": {
1280
+ "padding": "0.1em 0.35em",
1281
+ "border-radius": "0.25rem",
1282
+ "background": "color-mix(in oklab, var(--foreground) 7%, transparent)",
1283
+ "font": "0.88em ui-monospace, SFMono-Regular, Menlo, Consolas, monospace"
1284
+ },
1285
+ ".boring-viewer .boring-markdown-content pre": {
1286
+ "margin": "1rem 0",
1287
+ "padding": "0.875rem 1rem",
1288
+ "overflow-x": "auto",
1289
+ "border": "1px solid color-mix(in oklab, var(--border) 80%, transparent)",
1290
+ "border-radius": "0.5rem",
1291
+ "background": "color-mix(in oklab, var(--foreground) 4%, transparent)",
1292
+ "font": "0.8125rem/1.6 ui-monospace, SFMono-Regular, Menlo, Consolas, monospace"
1293
+ },
1294
+ ".boring-viewer .boring-markdown-content pre code": {
1295
+ "padding": "0",
1296
+ "background": "transparent",
1297
+ "font": "inherit"
1298
+ },
1299
+ ".boring-viewer .boring-markdown-content blockquote": {
1300
+ "margin": "1rem 0",
1301
+ "padding": "0.5rem 1rem",
1302
+ "border-left": "3px solid color-mix(in oklab, var(--primary) 35%, transparent)",
1303
+ "border-radius": "0 0.375rem 0.375rem 0",
1304
+ "background": "color-mix(in oklab, var(--foreground) 4%, transparent)",
1305
+ "color": "color-mix(in oklab, var(--foreground) 85%, transparent)"
1306
+ },
1307
+ ".boring-viewer .boring-markdown-content blockquote > :first-child": {
1308
+ "margin-top": "0"
1309
+ },
1310
+ ".boring-viewer .boring-markdown-content blockquote > :last-child": {
1311
+ "margin-bottom": "0"
1312
+ },
1313
+ ".boring-viewer .boring-markdown-content a": {
1314
+ "color": "var(--foreground)",
1315
+ "text-decoration": "underline",
1316
+ "text-decoration-thickness": "1px",
1317
+ "text-underline-offset": "3px",
1318
+ "text-decoration-color": "color-mix(in oklab, var(--foreground) 45%, transparent)",
1319
+ "cursor": "text"
1320
+ },
1321
+ ".boring-viewer .boring-markdown-content hr": {
1322
+ "margin": "1.5rem 0",
1323
+ "border": "0",
1324
+ "border-top": "1px solid color-mix(in oklab, var(--border) 85%, transparent)"
1325
+ },
1326
+ ".boring-viewer .boring-markdown-content mark": {
1327
+ "padding": "0 0.15em",
1328
+ "border-radius": "0.2em",
1329
+ "background": "color-mix(in oklab, #facc15 40%, transparent)",
1330
+ "color": "inherit"
1331
+ },
1332
+ ".boring-viewer .boring-markdown-content .tableWrapper": {
1333
+ "margin": "1rem 0",
1334
+ "overflow-x": "auto"
1335
+ },
1336
+ ".boring-viewer .boring-markdown-content table": {
1337
+ "width": "100%",
1338
+ "border-collapse": "collapse",
1339
+ "font-size": "0.875rem"
1340
+ },
1341
+ ".boring-viewer .boring-markdown-content :is(th, td)": {
1342
+ "min-width": "4rem",
1343
+ "padding": "0.5rem 0.75rem",
1344
+ "border": "1px solid color-mix(in oklab, var(--border) 90%, transparent)",
1345
+ "text-align": "left",
1346
+ "vertical-align": "top"
1347
+ },
1348
+ ".boring-viewer .boring-markdown-content th": {
1349
+ "background": "color-mix(in oklab, var(--foreground) 5%, transparent)",
1350
+ "font-weight": "600"
1351
+ },
1352
+ ".boring-viewer .boring-markdown-content :is(th, td) > p": {
1353
+ "margin": "0"
1354
+ },
1355
+ ".boring-viewer .boring-markdown-content .selectedCell": {
1356
+ "background": "color-mix(in oklab, var(--primary) 12%, transparent)"
1357
+ },
1358
+ ".boring-viewer .boring-markdown-content img": {
1359
+ "display": "block",
1360
+ "max-width": "100%",
1361
+ "height": "auto",
1362
+ "margin": "1rem 0",
1363
+ "border-radius": "0.5rem"
1364
+ },
1365
+ ".boring-viewer .boring-markdown-content .boring-markdown-image": {
1366
+ "display": "inline-flex",
1367
+ "align-items": "center",
1368
+ "gap": "0.4rem",
1369
+ "max-width": "100%",
1370
+ "margin": "0.125rem 0",
1371
+ "padding": "0.125rem 0.5rem",
1372
+ "border": "1px dashed var(--border)",
1373
+ "border-radius": "0.375rem",
1374
+ "background": "var(--muted)",
1375
+ "color": "var(--muted-foreground)",
1376
+ "font-size": "0.85em",
1377
+ "line-height": "1.5"
1378
+ },
1379
+ ".boring-viewer .boring-markdown-content .boring-markdown-image::before": {
1380
+ "content": "\"\"",
1381
+ "flex": "none",
1382
+ "width": "0.85em",
1383
+ "height": "0.85em",
1384
+ "border": "1.5px solid currentColor",
1385
+ "border-radius": "0.15em",
1386
+ "opacity": "0.7"
1387
+ },
1388
+ ".boring-viewer .boring-markdown-content .ProseMirror-selectednode": {
1389
+ "outline": "2px solid color-mix(in oklab, var(--ring) 70%, transparent)",
1390
+ "outline-offset": "2px"
1391
+ },
1392
+ ".boring-viewer .boring-html-pane": {
1393
+ "display": "flex",
1394
+ "flex": "1 1 auto",
1395
+ "flex-direction": "column",
1396
+ "min-height": "0",
1397
+ "min-width": "0"
1398
+ },
1399
+ ".boring-viewer .boring-html-viewer__preview": {
1400
+ "display": "flex",
1401
+ "flex": "1 1 auto",
1402
+ "flex-direction": "column",
1403
+ "min-height": "0",
1404
+ "background": "var(--muted)"
1405
+ },
1406
+ ".boring-viewer .boring-html-viewer__preview > p": {
1407
+ "flex": "none",
1408
+ "margin": "0",
1409
+ "padding": "0.375rem 0.75rem",
1410
+ "border-bottom": "1px solid var(--border)",
1411
+ "background": "var(--background)",
1412
+ "color": "var(--muted-foreground)",
1413
+ "font-size": "0.75rem"
1414
+ },
1415
+ ".boring-viewer .boring-html-viewer__preview > p[role=\"alert\"]": {
1416
+ "color": "var(--destructive)"
1417
+ },
1418
+ ".boring-viewer .boring-html-viewer__preview > div": {
1419
+ "display": "flex",
1420
+ "flex": "1 1 auto",
1421
+ "min-height": "0"
1422
+ },
1423
+ ".boring-viewer .boring-html-viewer__frame": {
1424
+ "flex": "1 1 auto",
1425
+ "width": "100%",
1426
+ "height": "100%",
1427
+ "min-height": "0",
1428
+ "border": "0",
1429
+ "background": "#fff",
1430
+ "color-scheme": "light"
1431
+ },
1432
+ ".boring-viewer .boring-viewer-checker": {
1433
+ "background-color": "#fff",
1434
+ "background-image": "linear-gradient(45deg, #d4d4d8 25%, transparent 25%, transparent 75%, #d4d4d8 75%), linear-gradient(45deg, #d4d4d8 25%, transparent 25%, transparent 75%, #d4d4d8 75%)",
1435
+ "background-position": "0 0, 8px 8px",
1436
+ "background-size": "16px 16px"
1437
+ },
1438
+ ".boring-viewer .boring-viewer-stage": {
1439
+ "background": "var(--muted)",
1440
+ "scrollbar-width": "thin"
1441
+ },
1442
+ ".boring-viewer .boring-viewer-stage:focus-visible": {
1443
+ "outline": "2px solid color-mix(in oklab, var(--ring) 60%, transparent)",
1444
+ "outline-offset": "-2px"
1445
+ },
1446
+ "@media (pointer: coarse)": {
1447
+ ".boring-viewer .boring-markdown-tool": {
1448
+ "width": "2.75rem",
1449
+ "height": "2.75rem"
1450
+ },
1451
+ ".boring-viewer .boring-markdown-link input, .boring-viewer .boring-markdown-link button, .boring-viewer .boring-markdown-alert button, .boring-viewer .boring-markdown-proposal > button": {
1452
+ "height": "2.75rem"
1453
+ },
1454
+ ".boring-viewer .boring-markdown-link input, .boring-viewer .boring-markdown-source, .boring-viewer .boring-html-viewer__source": {
1455
+ "font-size": "1rem"
1456
+ },
1457
+ ".boring-viewer .boring-markdown-content ul[data-type=\"taskList\"] li > label input[type=\"checkbox\"]": {
1458
+ "width": "1.25rem",
1459
+ "height": "1.25rem"
1460
+ }
1461
+ }
1462
+ }
1463
+ }
1464
+ },
1465
+ {
1466
+ "name": "provider-setup",
1467
+ "type": "registry:component",
1468
+ "title": "Provider setup",
1469
+ "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.",
1470
+ "dependencies": [
1471
+ "react@^19.0.0",
1472
+ "react-dom@^19.0.0",
1473
+ "lucide-react@^1.51.0"
1474
+ ],
1475
+ "registryDependencies": [
1476
+ "@boring-ui/theme",
1477
+ "@boring-ui/utils"
1478
+ ],
1479
+ "files": [
1480
+ {
1481
+ "path": "registry/provider-setup/provider-setup.tsx",
1482
+ "type": "registry:component",
1483
+ "target": "components/provider-setup/provider-setup.tsx"
1484
+ }
1485
+ ]
1486
+ },
1487
+ {
1488
+ "name": "feedback",
1489
+ "type": "registry:component",
1490
+ "title": "Feedback",
1491
+ "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.",
1492
+ "dependencies": [
1493
+ "@hachej/boring-feedback@^0.2.2",
1494
+ "@hachej/boring-ui-kit@^0.2.2",
1495
+ "@hachej/boring-files@^0.2.2",
1496
+ "react@^19.0.0",
1497
+ "react-dom@^19.0.0",
1498
+ "lucide-react@^1.51.0"
1499
+ ],
1500
+ "files": [
1501
+ {
1502
+ "path": "registry/feedback/feedback-session.tsx",
1503
+ "type": "registry:component",
1504
+ "target": "components/feedback/feedback-session.tsx"
1505
+ },
1506
+ {
1507
+ "path": "registry/feedback/point-button.tsx",
1508
+ "type": "registry:component",
1509
+ "target": "components/feedback/point-button.tsx"
1510
+ },
1511
+ {
1512
+ "path": "registry/feedback/picker-overlay.ts",
1513
+ "type": "registry:lib",
1514
+ "target": "components/feedback/picker-overlay.ts"
1515
+ },
1516
+ {
1517
+ "path": "registry/feedback/annotate-sheet.tsx",
1518
+ "type": "registry:component",
1519
+ "target": "components/feedback/annotate-sheet.tsx"
1520
+ },
1521
+ {
1522
+ "path": "registry/feedback/feedback-list.tsx",
1523
+ "type": "registry:component",
1524
+ "target": "components/feedback/feedback-list.tsx"
1525
+ },
1526
+ {
1527
+ "path": "registry/feedback/feedback-report.tsx",
1528
+ "type": "registry:component",
1529
+ "target": "components/feedback/feedback-report.tsx"
1530
+ },
1531
+ {
1532
+ "path": "registry/feedback/use-external.ts",
1533
+ "type": "registry:hook",
1534
+ "target": "components/feedback/use-external.ts"
1535
+ },
1536
+ {
1537
+ "path": "registry/feedback/feedback-card.tsx",
1538
+ "type": "registry:component",
1539
+ "target": "components/feedback/feedback-card.tsx"
1540
+ },
1541
+ {
1542
+ "path": "registry/feedback/voice-input.tsx",
1543
+ "type": "registry:component",
1544
+ "target": "components/feedback/voice-input.tsx"
1545
+ },
1546
+ {
1547
+ "path": "registry/feedback/feedback-labels.ts",
1548
+ "type": "registry:lib",
1549
+ "target": "components/feedback/feedback-labels.ts"
1550
+ }
1551
+ ],
1552
+ "css": {
1553
+ "[data-boring=\"feedback\"]": {
1554
+ "--boring-feedback-accent": "var(--primary, #2563eb)",
1555
+ "--boring-feedback-reveal": "#d97706",
1556
+ "--boring-feedback-surface": "var(--popover, var(--background, #ffffff))",
1557
+ "--boring-feedback-text": "var(--popover-foreground, var(--foreground, #111827))",
1558
+ "--boring-feedback-muted": "var(--muted-foreground, #6b7280)",
1559
+ "--boring-feedback-border": "var(--border, #e5e7eb)",
1560
+ "--boring-feedback-radius": "var(--radius, 0.625rem)",
1561
+ "--boring-feedback-label-background": "#111827",
1562
+ "--boring-feedback-label-foreground": "#f9fafb",
1563
+ "font": "14px/1.45 ui-sans-serif, system-ui, -apple-system, \"Segoe UI\", sans-serif",
1564
+ "color": "var(--boring-feedback-text)"
1565
+ },
1566
+ "[data-boring=\"feedback\"] *, [data-boring=\"feedback\"] *::before, [data-boring=\"feedback\"] *::after": {
1567
+ "box-sizing": "border-box"
1568
+ },
1569
+ "[data-boring=\"feedback\"] .boring-feedback-button": {
1570
+ "display": "inline-flex",
1571
+ "align-items": "center",
1572
+ "justify-content": "center",
1573
+ "gap": "0.375rem",
1574
+ "min-height": "2.25rem",
1575
+ "padding": "0 0.875rem",
1576
+ "border": "1px solid var(--boring-feedback-border)",
1577
+ "border-radius": "calc(var(--boring-feedback-radius) - 2px)",
1578
+ "background": "var(--boring-feedback-surface)",
1579
+ "color": "var(--boring-feedback-text)",
1580
+ "font": "inherit",
1581
+ "font-weight": "600",
1582
+ "cursor": "pointer"
1583
+ },
1584
+ "[data-boring=\"feedback\"] .boring-feedback-button:hover": {
1585
+ "background": "var(--accent, #f3f4f6)"
1586
+ },
1587
+ "[data-boring=\"feedback\"] .boring-feedback-button:focus-visible, [data-boring=\"feedback\"] button:focus-visible, [data-boring=\"feedback\"] textarea:focus-visible": {
1588
+ "outline": "2px solid var(--ring, var(--boring-feedback-accent))",
1589
+ "outline-offset": "2px"
1590
+ },
1591
+ "[data-boring=\"feedback\"] .boring-feedback-button[data-variant=\"primary\"]": {
1592
+ "border-color": "transparent",
1593
+ "background": "var(--boring-feedback-accent)",
1594
+ "color": "var(--primary-foreground, #ffffff)"
1595
+ },
1596
+ "[data-boring=\"feedback\"] .boring-feedback-button:disabled": {
1597
+ "opacity": "0.6",
1598
+ "cursor": "default"
1599
+ },
1600
+ "[data-boring=\"feedback\"] .boring-feedback-button[aria-pressed=\"true\"]": {
1601
+ "background": "var(--boring-feedback-accent)",
1602
+ "color": "var(--primary-foreground, #ffffff)"
1603
+ },
1604
+ "[data-boring=\"feedback\"] .boring-feedback-icon": {
1605
+ "display": "inline-flex",
1606
+ "align-items": "center",
1607
+ "justify-content": "center",
1608
+ "width": "2rem",
1609
+ "height": "2rem",
1610
+ "border": "0",
1611
+ "border-radius": "0.5rem",
1612
+ "background": "transparent",
1613
+ "color": "var(--boring-feedback-muted)",
1614
+ "font-size": "1.25rem",
1615
+ "line-height": "1",
1616
+ "cursor": "pointer"
1617
+ },
1618
+ "[data-boring=\"feedback\"].boring-feedback-point": {
1619
+ "display": "inline-flex",
1620
+ "align-items": "center",
1621
+ "gap": "0.625rem"
1622
+ },
1623
+ "[data-boring=\"feedback\"] .boring-feedback-hint": {
1624
+ "max-width": "32rem",
1625
+ "overflow": "hidden",
1626
+ "text-overflow": "ellipsis",
1627
+ "white-space": "nowrap",
1628
+ "color": "var(--boring-feedback-muted)",
1629
+ "font-size": "0.8125rem"
1630
+ },
1631
+ "[data-boring=\"feedback\"] .boring-feedback-keys": {
1632
+ "opacity": "0.8"
1633
+ },
1634
+ "[data-boring=\"feedback\"].boring-feedback-sheet, [data-boring=\"feedback\"].boring-feedback-report, [data-boring=\"feedback\"].boring-feedback-list": {
1635
+ "display": "flex",
1636
+ "flex-direction": "column",
1637
+ "gap": "0.75rem",
1638
+ "padding": "1rem",
1639
+ "border": "1px solid var(--boring-feedback-border)",
1640
+ "border-radius": "var(--boring-feedback-radius)",
1641
+ "background": "var(--boring-feedback-surface)"
1642
+ },
1643
+ "[data-boring=\"feedback\"].boring-feedback-sheet": {
1644
+ "z-index": "2147483000",
1645
+ "box-shadow": "0 16px 48px rgb(0 0 0 / 18%)",
1646
+ "max-height": "calc(100dvh - 24px)",
1647
+ "overflow": "auto"
1648
+ },
1649
+ "[data-boring=\"feedback\"].boring-feedback-sheet[data-docked=\"bottom\"]": {
1650
+ "position": "fixed",
1651
+ "left": "12px",
1652
+ "right": "12px",
1653
+ "bottom": "12px",
1654
+ "max-width": "32rem",
1655
+ "margin": "0 auto"
1656
+ },
1657
+ "[data-boring=\"feedback\"] .boring-feedback-sheet-header": {
1658
+ "display": "flex",
1659
+ "align-items": "center",
1660
+ "justify-content": "space-between",
1661
+ "gap": "0.5rem"
1662
+ },
1663
+ "[data-boring=\"feedback\"] h2": {
1664
+ "margin": "0",
1665
+ "font-size": "1rem",
1666
+ "font-weight": "650"
1667
+ },
1668
+ "[data-boring=\"feedback\"] h3": {
1669
+ "margin": "0 0 0.25rem",
1670
+ "font-size": "0.875rem"
1671
+ },
1672
+ "[data-boring=\"feedback\"] .boring-feedback-targets": {
1673
+ "margin": "0",
1674
+ "padding": "0",
1675
+ "list-style": "none",
1676
+ "color": "var(--boring-feedback-muted)",
1677
+ "font-size": "0.8125rem"
1678
+ },
1679
+ "[data-boring=\"feedback\"] .boring-feedback-field": {
1680
+ "display": "grid",
1681
+ "gap": "0.375rem",
1682
+ "font-weight": "600",
1683
+ "font-size": "0.8125rem"
1684
+ },
1685
+ "[data-boring=\"feedback\"] textarea": {
1686
+ "width": "100%",
1687
+ "padding": "0.5rem 0.625rem",
1688
+ "border": "1px solid var(--input, var(--boring-feedback-border))",
1689
+ "border-radius": "calc(var(--boring-feedback-radius) - 2px)",
1690
+ "background": "var(--background, #ffffff)",
1691
+ "color": "inherit",
1692
+ "font": "inherit",
1693
+ "font-size": "16px",
1694
+ "font-weight": "400",
1695
+ "resize": "vertical"
1696
+ },
1697
+ "[data-boring=\"feedback\"] .boring-feedback-actions": {
1698
+ "display": "flex",
1699
+ "flex-wrap": "wrap",
1700
+ "gap": "0.5rem"
1701
+ },
1702
+ "[data-boring=\"feedback\"] .boring-feedback-status": {
1703
+ "margin": "0",
1704
+ "min-height": "1.25em",
1705
+ "color": "var(--boring-feedback-muted)",
1706
+ "font-size": "0.8125rem"
1707
+ },
1708
+ "[data-boring=\"feedback\"] .boring-feedback-warning": {
1709
+ "margin": "0",
1710
+ "color": "var(--destructive, #b91c1c)",
1711
+ "font-size": "0.8125rem"
1712
+ },
1713
+ "[data-boring=\"feedback\"] .boring-feedback-notice": {
1714
+ "margin": "0",
1715
+ "padding": "0.5rem 0.625rem",
1716
+ "border-radius": "calc(var(--boring-feedback-radius) - 2px)",
1717
+ "background": "color-mix(in srgb, var(--boring-feedback-reveal) 14%, transparent)",
1718
+ "font-size": "0.8125rem"
1719
+ },
1720
+ "[data-boring=\"feedback\"] .boring-feedback-copied pre, [data-boring=\"feedback\"] .boring-feedback-manual": {
1721
+ "max-height": "12rem",
1722
+ "overflow": "auto",
1723
+ "margin": "0.375rem 0 0",
1724
+ "font": "12px/1.4 ui-monospace, SFMono-Regular, Menlo, monospace",
1725
+ "white-space": "pre-wrap"
1726
+ },
1727
+ "[data-boring=\"feedback\"] .boring-feedback-copied summary": {
1728
+ "cursor": "pointer",
1729
+ "color": "var(--boring-feedback-muted)",
1730
+ "font-size": "0.8125rem"
1731
+ },
1732
+ "[data-boring=\"feedback\"].boring-feedback-list ul": {
1733
+ "display": "flex",
1734
+ "flex-direction": "column",
1735
+ "gap": "0.25rem",
1736
+ "margin": "0",
1737
+ "padding": "0",
1738
+ "list-style": "none"
1739
+ },
1740
+ "[data-boring=\"feedback\"].boring-feedback-list li button": {
1741
+ "display": "grid",
1742
+ "gap": "0.125rem",
1743
+ "width": "100%",
1744
+ "padding": "0.5rem 0.625rem",
1745
+ "border": "0",
1746
+ "border-radius": "calc(var(--boring-feedback-radius) - 2px)",
1747
+ "background": "transparent",
1748
+ "color": "inherit",
1749
+ "font": "inherit",
1750
+ "text-align": "left",
1751
+ "cursor": "pointer"
1752
+ },
1753
+ "[data-boring=\"feedback\"].boring-feedback-list li button:hover, [data-boring=\"feedback\"].boring-feedback-list li button[aria-current=\"true\"]": {
1754
+ "background": "var(--accent, #f3f4f6)"
1755
+ },
1756
+ "[data-boring=\"feedback\"] .boring-feedback-title": {
1757
+ "font-weight": "600"
1758
+ },
1759
+ "[data-boring=\"feedback\"] .boring-feedback-meta": {
1760
+ "margin": "0",
1761
+ "color": "var(--boring-feedback-muted)",
1762
+ "font-size": "0.8125rem"
1763
+ },
1764
+ "[data-boring=\"feedback\"] [data-status=\"addressed\"]": {
1765
+ "color": "#15803d"
1766
+ },
1767
+ "[data-boring=\"feedback\"] .boring-feedback-empty": {
1768
+ "margin": "0",
1769
+ "color": "var(--boring-feedback-muted)"
1770
+ },
1771
+ "[data-boring=\"feedback\"] .boring-feedback-said": {
1772
+ "margin": "0",
1773
+ "white-space": "pre-wrap"
1774
+ },
1775
+ "[data-boring=\"feedback\"] .boring-feedback-anchors": {
1776
+ "display": "flex",
1777
+ "flex-direction": "column",
1778
+ "gap": "0.5rem",
1779
+ "margin": "0",
1780
+ "padding-left": "1.25rem"
1781
+ },
1782
+ "[data-boring=\"feedback\"] .boring-feedback-anchors > li": {
1783
+ "display": "flex",
1784
+ "flex-wrap": "wrap",
1785
+ "align-items": "center",
1786
+ "gap": "0.5rem"
1787
+ },
1788
+ "[data-boring=\"feedback\"] .boring-feedback-anchors code": {
1789
+ "font-size": "0.75rem",
1790
+ "color": "var(--boring-feedback-muted)"
1791
+ },
1792
+ "[data-boring=\"feedback\"] .boring-feedback-candidates": {
1793
+ "display": "flex",
1794
+ "flex-wrap": "wrap",
1795
+ "gap": "0.375rem",
1796
+ "margin": "0.375rem 0 0",
1797
+ "padding": "0",
1798
+ "list-style": "none"
1799
+ },
1800
+ "[data-boring=\"feedback\"].boring-feedback-bar": {
1801
+ "position": "fixed",
1802
+ "top": "12px",
1803
+ "left": "0",
1804
+ "right": "0",
1805
+ "z-index": "2147483000",
1806
+ "display": "flex",
1807
+ "flex-wrap": "nowrap",
1808
+ "align-items": "center",
1809
+ "gap": "0.5rem",
1810
+ "width": "max-content",
1811
+ "max-width": "calc(100vw - 24px)",
1812
+ "margin": "0 auto",
1813
+ "padding": "0.375rem 0.5rem 0.375rem 0.875rem",
1814
+ "border": "1px solid var(--boring-feedback-border)",
1815
+ "border-radius": "999px",
1816
+ "background": "var(--boring-feedback-surface)",
1817
+ "box-shadow": "0 10px 32px rgb(0 0 0 / 16%)"
1818
+ },
1819
+ "[data-boring=\"feedback\"].boring-feedback-bar[data-using=\"true\"]": {
1820
+ "border-color": "var(--boring-feedback-reveal)"
1821
+ },
1822
+ "[data-boring=\"feedback\"].boring-feedback-bar[data-docked=\"true\"]": {
1823
+ "position": "static",
1824
+ "width": "auto",
1825
+ "max-width": "none",
1826
+ "margin": "0 0.625rem 0.625rem",
1827
+ "flex-wrap": "wrap",
1828
+ "border-radius": "0.75rem",
1829
+ "box-shadow": "none"
1830
+ },
1831
+ "[data-boring=\"feedback\"].boring-feedback-bar > *": {
1832
+ "flex": "none"
1833
+ },
1834
+ "[data-boring=\"feedback\"].boring-feedback-bar > .boring-feedback-hint": {
1835
+ "flex": "0 1 auto",
1836
+ "min-width": "0",
1837
+ "max-width": "24rem"
1838
+ },
1839
+ "[data-boring=\"feedback\"] .boring-feedback-bar-title": {
1840
+ "display": "inline-flex",
1841
+ "align-items": "center",
1842
+ "gap": "0.375rem",
1843
+ "font-weight": "650"
1844
+ },
1845
+ "[data-boring=\"feedback\"] .boring-feedback-dot": {
1846
+ "width": "0.5rem",
1847
+ "height": "0.5rem",
1848
+ "border-radius": "50%",
1849
+ "background": "var(--boring-feedback-accent)"
1850
+ },
1851
+ "[data-boring=\"feedback\"].boring-feedback-bar[data-using=\"true\"] .boring-feedback-dot": {
1852
+ "background": "var(--boring-feedback-reveal)"
1853
+ },
1854
+ "[data-boring=\"feedback\"] .boring-feedback-bar-meta": {
1855
+ "color": "var(--boring-feedback-muted)",
1856
+ "font-size": "0.8125rem"
1857
+ },
1858
+ "[data-boring=\"feedback\"] .boring-feedback-alt": {
1859
+ "color": "var(--boring-feedback-muted)",
1860
+ "font-size": "0.75rem"
1861
+ },
1862
+ "[data-boring=\"feedback\"] .boring-feedback-icon[aria-pressed=\"true\"]": {
1863
+ "background": "color-mix(in srgb, #dc2626 16%, transparent)",
1864
+ "color": "#dc2626"
1865
+ },
1866
+ "[data-boring=\"feedback\"] .boring-feedback-icon:disabled": {
1867
+ "opacity": "0.45",
1868
+ "cursor": "default"
1869
+ },
1870
+ "[data-boring=\"feedback\"] .boring-feedback-recording": {
1871
+ "display": "inline-flex",
1872
+ "align-items": "center",
1873
+ "gap": "0.375rem",
1874
+ "padding": "0.125rem 0.5rem",
1875
+ "border-radius": "999px",
1876
+ "background": "color-mix(in srgb, #dc2626 12%, transparent)",
1877
+ "color": "#b91c1c",
1878
+ "font-size": "0.75rem",
1879
+ "font-weight": "650"
1880
+ },
1881
+ "[data-boring=\"feedback\"] .boring-feedback-rec": {
1882
+ "width": "0.5rem",
1883
+ "height": "0.5rem",
1884
+ "border-radius": "50%",
1885
+ "background": "#dc2626"
1886
+ },
1887
+ "[data-boring=\"feedback\"].boring-feedback-bar[data-docked=\"true\"] > .boring-feedback-hint": {
1888
+ "flex": "1 1 10rem",
1889
+ "max-width": "none",
1890
+ "white-space": "normal"
1891
+ },
1892
+ "[data-boring=\"feedback\"] .boring-feedback-record": {
1893
+ "min-height": "2rem",
1894
+ "padding": "0 0.625rem",
1895
+ "gap": "0.3125rem",
1896
+ "font-size": "0.8125rem"
1897
+ },
1898
+ "[data-boring=\"feedback\"] .boring-feedback-record[aria-pressed=\"true\"]": {
1899
+ "border-color": "transparent",
1900
+ "background": "#dc2626",
1901
+ "color": "#ffffff"
1902
+ },
1903
+ "[data-boring=\"feedback\"] .boring-feedback-stop": {
1904
+ "width": "0.625rem",
1905
+ "height": "0.625rem",
1906
+ "border-radius": "2px",
1907
+ "background": "currentColor"
1908
+ },
1909
+ "[data-boring=\"feedback\"] .boring-feedback-timer": {
1910
+ "font-variant-numeric": "tabular-nums"
1911
+ },
1912
+ "[data-boring=\"feedback\"].boring-feedback-bar[data-recording=\"true\"]": {
1913
+ "border-color": "color-mix(in srgb, #dc2626 55%, var(--boring-feedback-border))"
1914
+ },
1915
+ "[data-boring=\"feedback\"] .boring-feedback-voice-problem": {
1916
+ "flex": "1 1 100%",
1917
+ "margin": "0",
1918
+ "color": "var(--destructive, #b91c1c)",
1919
+ "font-size": "0.8125rem",
1920
+ "white-space": "normal"
1921
+ },
1922
+ "[data-boring=\"feedback\"] .boring-feedback-element": {
1923
+ "display": "inline-flex",
1924
+ "flex": "1",
1925
+ "align-items": "baseline",
1926
+ "gap": "0.375rem",
1927
+ "min-width": "0",
1928
+ "overflow": "hidden",
1929
+ "white-space": "nowrap"
1930
+ },
1931
+ "[data-boring=\"feedback\"] .boring-feedback-element-name": {
1932
+ "flex": "0 1 auto",
1933
+ "min-width": "2rem",
1934
+ "overflow": "hidden",
1935
+ "text-overflow": "ellipsis",
1936
+ "font-size": "0.8125rem",
1937
+ "font-weight": "600"
1938
+ },
1939
+ "[data-boring=\"feedback\"] .boring-feedback-element-file": {
1940
+ "flex": "0 100 auto",
1941
+ "min-width": "0",
1942
+ "overflow": "hidden",
1943
+ "text-overflow": "ellipsis",
1944
+ "color": "var(--boring-feedback-muted)",
1945
+ "font": "0.6875rem/1.4 ui-monospace, SFMono-Regular, Menlo, monospace"
1946
+ },
1947
+ "[data-boring=\"feedback\"] .boring-feedback-badge": {
1948
+ "flex": "none",
1949
+ "padding": "0 0.375rem",
1950
+ "border-radius": "999px",
1951
+ "background": "var(--muted, #f3f4f6)",
1952
+ "color": "var(--boring-feedback-muted)",
1953
+ "font-size": "0.6875rem",
1954
+ "line-height": "1.25rem"
1955
+ },
1956
+ "[data-boring=\"feedback\"].boring-feedback-bubble": {
1957
+ "z-index": "2147483001",
1958
+ "display": "grid",
1959
+ "gap": "0.375rem",
1960
+ "padding": "0.5rem",
1961
+ "border": "1px solid var(--boring-feedback-border)",
1962
+ "border-radius": "var(--boring-feedback-radius)",
1963
+ "background": "var(--boring-feedback-surface)",
1964
+ "box-shadow": "0 12px 32px rgb(0 0 0 / 18%)"
1965
+ },
1966
+ "[data-boring=\"feedback\"] .boring-feedback-bubble-head, [data-boring=\"feedback\"] .boring-feedback-note-head": {
1967
+ "display": "flex",
1968
+ "align-items": "center",
1969
+ "gap": "0.375rem",
1970
+ "min-width": "0"
1971
+ },
1972
+ "[data-boring=\"feedback\"] .boring-feedback-bubble-label, [data-boring=\"feedback\"] .boring-feedback-note-label": {
1973
+ "flex": "1",
1974
+ "min-width": "0",
1975
+ "overflow": "hidden",
1976
+ "text-overflow": "ellipsis",
1977
+ "white-space": "nowrap",
1978
+ "color": "var(--boring-feedback-muted)",
1979
+ "font-size": "0.75rem"
1980
+ },
1981
+ "[data-boring=\"feedback\"] .boring-feedback-pin": {
1982
+ "color": "var(--boring-feedback-accent)",
1983
+ "font-weight": "700"
1984
+ },
1985
+ "[data-boring=\"feedback\"].boring-feedback-chip": {
1986
+ "position": "relative",
1987
+ "display": "inline-flex",
1988
+ "flex-wrap": "wrap",
1989
+ "align-items": "center",
1990
+ "gap": "0.125rem",
1991
+ "max-width": "100%",
1992
+ "padding": "0.125rem 0.125rem 0.125rem 0.625rem",
1993
+ "border": "1px solid var(--boring-feedback-border)",
1994
+ "border-radius": "999px",
1995
+ "background": "color-mix(in srgb, var(--boring-feedback-accent) 8%, var(--boring-feedback-surface))",
1996
+ "font-size": "0.8125rem"
1997
+ },
1998
+ "[data-boring=\"feedback\"] .boring-feedback-chip-open": {
1999
+ "min-width": "0",
2000
+ "padding": "0.25rem 0.25rem",
2001
+ "border": "0",
2002
+ "background": "transparent",
2003
+ "color": "inherit",
2004
+ "font": "inherit",
2005
+ "font-weight": "600",
2006
+ "text-align": "left",
2007
+ "cursor": "pointer"
2008
+ },
2009
+ "[data-boring=\"feedback\"] .boring-feedback-chip-route": {
2010
+ "color": "var(--boring-feedback-muted)",
2011
+ "font-family": "ui-monospace, SFMono-Regular, Menlo, monospace",
2012
+ "font-weight": "500"
2013
+ },
2014
+ "[data-boring=\"feedback\"] .boring-feedback-chip-remove": {
2015
+ "width": "1.5rem",
2016
+ "height": "1.5rem",
2017
+ "font-size": "1rem"
2018
+ },
2019
+ "[data-boring=\"feedback\"].boring-feedback-review": {
2020
+ "z-index": "2147483000",
2021
+ "display": "flex",
2022
+ "flex-direction": "column",
2023
+ "gap": "0.625rem",
2024
+ "max-height": "min(28rem, calc(100dvh - 24px))",
2025
+ "overflow": "auto",
2026
+ "padding": "0.875rem",
2027
+ "border": "1px solid var(--boring-feedback-border)",
2028
+ "border-radius": "var(--boring-feedback-radius)",
2029
+ "background": "var(--boring-feedback-surface)",
2030
+ "box-shadow": "0 16px 48px rgb(0 0 0 / 18%)",
2031
+ "text-align": "left"
2032
+ },
2033
+ "[data-boring=\"feedback\"] .boring-feedback-notes": {
2034
+ "display": "flex",
2035
+ "flex-direction": "column",
2036
+ "gap": "0.5rem",
2037
+ "margin": "0",
2038
+ "padding": "0",
2039
+ "list-style": "none"
2040
+ },
2041
+ "[data-boring=\"feedback\"] .boring-feedback-notes > li": {
2042
+ "display": "grid",
2043
+ "gap": "0.25rem",
2044
+ "padding": "0.375rem",
2045
+ "border-radius": "calc(var(--boring-feedback-radius) - 2px)"
2046
+ },
2047
+ "[data-boring=\"feedback\"] .boring-feedback-notes > li:hover, [data-boring=\"feedback\"] .boring-feedback-notes > li:focus-within": {
2048
+ "background": "var(--accent, #f3f4f6)"
2049
+ },
2050
+ "@media (max-width: 640px), (pointer: coarse)": {
2051
+ "[data-boring=\"feedback\"] .boring-feedback-button": {
2052
+ "min-height": "2.75rem"
2053
+ },
2054
+ "[data-boring=\"feedback\"] .boring-feedback-icon": {
2055
+ "width": "2.75rem",
2056
+ "height": "2.75rem"
2057
+ },
2058
+ "[data-boring=\"feedback\"] .boring-feedback-hint": {
2059
+ "display": "none"
2060
+ },
2061
+ "[data-boring=\"feedback\"] .boring-feedback-alt": {
2062
+ "display": "none"
2063
+ },
2064
+ "[data-boring=\"feedback\"].boring-feedback-bar": {
2065
+ "top": "auto",
2066
+ "bottom": "12px",
2067
+ "flex-wrap": "wrap",
2068
+ "border-radius": "var(--boring-feedback-radius)"
2069
+ }
2070
+ },
2071
+ "[data-boring=\"feedback\"] .boring-feedback-mic": {
2072
+ "flex": "none",
2073
+ "display": "block"
2074
+ },
2075
+ "[data-boring=\"feedback\"].boring-feedback-preview": {
2076
+ "position": "fixed",
2077
+ "top": "12px",
2078
+ "left": "0",
2079
+ "right": "0",
2080
+ "z-index": "2147483001",
2081
+ "display": "flex",
2082
+ "flex-direction": "column",
2083
+ "gap": "0.5rem",
2084
+ "width": "min(40rem, calc(100vw - 24px))",
2085
+ "margin": "0 auto",
2086
+ "padding": "0.75rem 0.875rem",
2087
+ "border": "2px solid var(--boring-feedback-reveal)",
2088
+ "border-radius": "var(--boring-feedback-radius)",
2089
+ "background": "var(--boring-feedback-surface)",
2090
+ "box-shadow": "0 12px 36px rgb(0 0 0 / 18%)"
2091
+ },
2092
+ "[data-boring=\"feedback\"] .boring-feedback-preview-head": {
2093
+ "display": "flex",
2094
+ "flex-wrap": "wrap",
2095
+ "align-items": "baseline",
2096
+ "gap": "0.5rem"
2097
+ },
2098
+ "[data-boring=\"feedback\"] .boring-feedback-preview-title": {
2099
+ "padding": "0.125rem 0.5rem",
2100
+ "border-radius": "999px",
2101
+ "background": "var(--boring-feedback-reveal)",
2102
+ "color": "#ffffff",
2103
+ "font-size": "0.8125rem",
2104
+ "letter-spacing": "0.02em",
2105
+ "text-transform": "uppercase"
2106
+ },
2107
+ "[data-boring=\"feedback\"] .boring-feedback-preview-notice": {
2108
+ "font-weight": "600"
2109
+ },
2110
+ "[data-boring=\"feedback\"] .boring-feedback-preview-status": {
2111
+ "margin-left": "auto",
2112
+ "color": "var(--boring-feedback-muted)",
2113
+ "font-size": "0.8125rem"
2114
+ },
2115
+ "[data-boring=\"feedback\"] .boring-feedback-preview-summary": {
2116
+ "margin": "0"
2117
+ },
2118
+ "[data-boring=\"feedback\"] .boring-feedback-preview-changes": {
2119
+ "margin": "0",
2120
+ "padding-left": "1.125rem",
2121
+ "color": "var(--boring-feedback-muted)",
2122
+ "font-size": "0.8125rem"
2123
+ },
2124
+ "[data-boring=\"feedback\"] .boring-feedback-preview-changes code": {
2125
+ "font-size": "0.75rem"
2126
+ },
2127
+ "[data-boring=\"feedback\"] .boring-feedback-preview-error": {
2128
+ "margin": "0",
2129
+ "color": "#b91c1c",
2130
+ "font-size": "0.8125rem"
2131
+ },
2132
+ "[data-boring=\"feedback\"] .boring-feedback-preview-actions": {
2133
+ "display": "flex",
2134
+ "flex-wrap": "wrap",
2135
+ "gap": "0.5rem"
2136
+ },
2137
+ "[data-boring=\"feedback\"] .boring-feedback-preview-input": {
2138
+ "flex": "1 1 12rem",
2139
+ "min-width": "0",
2140
+ "min-height": "2.25rem",
2141
+ "padding": "0 0.75rem",
2142
+ "border": "1px solid var(--boring-feedback-border)",
2143
+ "border-radius": "calc(var(--boring-feedback-radius) - 2px)",
2144
+ "background": "var(--boring-feedback-surface)",
2145
+ "color": "var(--boring-feedback-text)",
2146
+ "font": "inherit"
2147
+ },
2148
+ "[data-boring=\"feedback\"] .boring-feedback-bubble-actions": {
2149
+ "display": "flex",
2150
+ "flex-wrap": "wrap",
2151
+ "gap": "0.375rem"
2152
+ },
2153
+ "[data-boring=\"feedback\"] .boring-feedback-bubble-actions .boring-feedback-button": {
2154
+ "min-height": "2rem",
2155
+ "padding": "0 0.625rem",
2156
+ "font-size": "0.8125rem"
2157
+ }
2158
+ },
2159
+ "registryDependencies": [
2160
+ "@boring-ui/pi-chat",
2161
+ "@boring-ui/utils"
2162
+ ]
2163
+ },
2164
+ {
2165
+ "name": "feedback-preview",
2166
+ "type": "registry:component",
2167
+ "title": "Feedback preview",
2168
+ "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).",
2169
+ "dependencies": [
2170
+ "@hachej/boring-feedback@^0.2.2",
2171
+ "@earendil-works/pi-ai@^1.1.0",
2172
+ "react@^19.0.0"
2173
+ ],
2174
+ "files": [
2175
+ {
2176
+ "path": "registry/feedback-preview/preview-banner.tsx",
2177
+ "type": "registry:component",
2178
+ "target": "components/feedback-preview/preview-banner.tsx"
2179
+ }
2180
+ ]
2181
+ },
2182
+ {
2183
+ "name": "task-list-viewer",
2184
+ "type": "registry:component",
2185
+ "title": "Consumer task-list viewer",
2186
+ "description": "A consumer-defined task-list schema and controller over the shared text buffer, with a restylable borrowed React renderer.",
2187
+ "dependencies": [
2188
+ "@hachej/boring-ui-kit@^0.2.2",
2189
+ "@hachej/boring-files@^0.2.2",
2190
+ "react@^19.0.0",
2191
+ "react-dom@^19.0.0",
2192
+ "zod@^4.6.5"
2193
+ ],
2194
+ "files": [
2195
+ {
2196
+ "path": "registry/task-list-viewer/task-list-document.ts",
2197
+ "type": "registry:lib",
2198
+ "target": "components/task-list-viewer/task-list-document.ts"
2199
+ },
2200
+ {
2201
+ "path": "registry/task-list-viewer/task-list-controller.ts",
2202
+ "type": "registry:lib",
2203
+ "target": "components/task-list-viewer/task-list-controller.ts"
2204
+ },
2205
+ {
2206
+ "path": "registry/task-list-viewer/task-list-viewer.tsx",
2207
+ "type": "registry:component",
2208
+ "target": "components/task-list-viewer/task-list-viewer.tsx"
2209
+ }
2210
+ ],
2211
+ "css": {
2212
+ ".boring-task-list-recipe[data-boring=\"task-list-viewer\"]": {
2213
+ "padding": "1rem",
2214
+ "border": "1px solid var(--border, #d1d5db)",
2215
+ "border-radius": "var(--boring-task-list-radius, 0.75rem)",
2216
+ "background": "var(--background, #fff)",
2217
+ "color": "var(--foreground, #111827)"
2218
+ },
2219
+ ".boring-task-list-recipe[data-boring=\"task-list-viewer\"] ul": {
2220
+ "list-style": "none",
2221
+ "padding": "0",
2222
+ "display": "grid",
2223
+ "gap": "0.5rem"
2224
+ },
2225
+ ".boring-task-list-recipe[data-boring=\"task-list-viewer\"] li": {
2226
+ "display": "flex",
2227
+ "align-items": "center",
2228
+ "gap": "0.5rem",
2229
+ "flex-wrap": "wrap"
2230
+ },
2231
+ ".boring-task-list-recipe[data-boring=\"task-list-viewer\"] button": {
2232
+ "min-height": "2.25rem",
2233
+ "padding": "0.375rem 0.75rem"
2234
+ },
2235
+ ".boring-task-list-recipe[data-boring=\"task-list-viewer\"] input[type=\"text\"]": {
2236
+ "min-height": "2.25rem",
2237
+ "max-width": "100%"
2238
+ },
2239
+ ".boring-task-list-recipe[data-boring=\"task-list-viewer\"] [role=\"alert\"]": {
2240
+ "color": "var(--destructive, #b91c1c)"
2241
+ },
2242
+ ".boring-task-list-recipe[data-boring=\"task-list-viewer\"] :focus-visible": {
2243
+ "outline": "2px solid var(--ring, #2563eb)",
2244
+ "outline-offset": "2px"
2245
+ }
2246
+ },
2247
+ "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."
2248
+ },
2249
+ {
2250
+ "name": "file-tree",
2251
+ "type": "registry:component",
2252
+ "title": "File tree",
2253
+ "description": "Browse, search, upload and inspect retained versions through one revisionProvider binding.",
2254
+ "dependencies": [
2255
+ "@hachej/boring-ui-kit@^0.2.2",
2256
+ "@hachej/boring-files@^0.2.2",
2257
+ "react@^19.0.0",
2258
+ "radix-ui@^1.8.0",
2259
+ "lucide-react@^1.51.0"
2260
+ ],
2261
+ "registryDependencies": [
2262
+ "@boring-ui/theme"
2263
+ ],
2264
+ "files": [
2265
+ {
2266
+ "path": "registry/file-tree/file-tree.tsx",
2267
+ "type": "registry:component",
2268
+ "target": "components/file-tree/file-tree.tsx"
2269
+ }
2270
+ ],
2271
+ "css": {}
2272
+ }
2273
+ ]
2274
+ }