@hachej/boring-ui-kit 0.2.1 → 0.2.3

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