@opengeni/react 5.1.0-canary.0 → 5.2.0-canary.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (66) hide show
  1. package/dist/artifacts.d.ts +2 -0
  2. package/dist/artifacts.js +1391 -2
  3. package/dist/artifacts.js.map +1 -1
  4. package/dist/chunk-2TKI3WEG.js +73 -0
  5. package/dist/chunk-2TKI3WEG.js.map +1 -0
  6. package/dist/{chunk-M2HNWZYR.js → chunk-IHQII5WO.js} +69 -18
  7. package/dist/chunk-IHQII5WO.js.map +1 -0
  8. package/dist/{chunk-HUMIRRYI.js → chunk-IYCR4343.js} +19 -19
  9. package/dist/{chunk-HUMIRRYI.js.map → chunk-IYCR4343.js.map} +1 -1
  10. package/dist/{chunk-WS6D5BHH.js → chunk-QXJCNVSD.js} +2268 -2217
  11. package/dist/chunk-QXJCNVSD.js.map +1 -0
  12. package/dist/{chunk-BV5A4OTE.js → chunk-T5FRXMC3.js} +21 -2
  13. package/dist/{chunk-BV5A4OTE.js.map → chunk-T5FRXMC3.js.map} +1 -1
  14. package/dist/{chunk-BRFMGY4L.js → chunk-UGMKPUEM.js} +28 -3
  15. package/dist/chunk-UGMKPUEM.js.map +1 -0
  16. package/dist/components/artifacts/inline-html-document.d.ts +2 -0
  17. package/dist/components/artifacts/published-html-artifact-frame.d.ts +2 -0
  18. package/dist/components/artifacts/visualization-assets.gen.d.ts +2 -0
  19. package/dist/components/markdown.d.ts +13 -1
  20. package/dist/{computer-viewer-7TEZC6Y2.js → computer-viewer-AA4JH2AP.js} +2 -2
  21. package/dist/connect.js +1 -1
  22. package/dist/index.d.ts +2 -1
  23. package/dist/index.js +7 -4
  24. package/dist/index.js.map +1 -1
  25. package/dist/interaction.js +1 -1
  26. package/dist/{platform-activity-row-27LKAWZD.js → platform-activity-row-UW4UVVM4.js} +6 -3
  27. package/dist/platform-activity-row-UW4UVVM4.js.map +1 -0
  28. package/dist/session-ui.js +4 -3
  29. package/dist/session-ui.js.map +1 -1
  30. package/dist/session.js +1 -1
  31. package/dist/sites-ui.d.ts +2 -1
  32. package/dist/sites.js +12 -4
  33. package/dist/sites.js.map +1 -1
  34. package/dist/timeline/activity-rail.d.ts +1 -0
  35. package/dist/timeline/platform-activity-row.d.ts +1 -1
  36. package/dist/timeline/retained-image.d.ts +16 -0
  37. package/dist/timeline/rolling-activity.d.ts +9 -0
  38. package/dist/timeline/shared.d.ts +4 -1
  39. package/dist/timeline/turn-summary.d.ts +4 -1
  40. package/package.json +4 -4
  41. package/src/artifacts.ts +2 -0
  42. package/src/components/artifacts/inline-html-document.ts +24 -0
  43. package/src/components/artifacts/published-html-artifact-frame.tsx +32 -2
  44. package/src/components/artifacts/visualization-assets/base.css +1015 -0
  45. package/src/components/artifacts/visualization-assets/helpers.html +349 -0
  46. package/src/components/artifacts/visualization-assets.gen.ts +3 -0
  47. package/src/components/copy-button.tsx +7 -2
  48. package/src/components/markdown.tsx +111 -34
  49. package/src/components/message-timeline.tsx +48 -3
  50. package/src/hooks/use-computer-session.ts +36 -1
  51. package/src/index.ts +6 -1
  52. package/src/sites-ui.tsx +23 -6
  53. package/src/timeline/activity-rail.tsx +20 -3
  54. package/src/timeline/platform-activity-row.tsx +5 -2
  55. package/src/timeline/retained-image.ts +91 -0
  56. package/src/timeline/rolling-activity.tsx +83 -0
  57. package/src/timeline/shared.tsx +33 -12
  58. package/src/timeline/tool-renderers.tsx +7 -91
  59. package/src/timeline/turn-summary.tsx +21 -15
  60. package/styles/compiled.css +122 -0
  61. package/styles/index.css +49 -0
  62. package/dist/chunk-BRFMGY4L.js.map +0 -1
  63. package/dist/chunk-M2HNWZYR.js.map +0 -1
  64. package/dist/chunk-WS6D5BHH.js.map +0 -1
  65. package/dist/platform-activity-row-27LKAWZD.js.map +0 -1
  66. /package/dist/{computer-viewer-7TEZC6Y2.js.map → computer-viewer-AA4JH2AP.js.map} +0 -0
@@ -0,0 +1,1015 @@
1
+ /* Adapted from Codex visualize 1.0.32; shared with the OpenGeni visualization skill. */
2
+ :root {
3
+ color-scheme: light dark;
4
+ background-color: var(
5
+ --background,
6
+ var(--color-background-primary, light-dark(rgb(255 255 255), rgb(24 24 24)))
7
+ ) !important;
8
+
9
+ /* Agent-facing contract; keep in sync with SKILL.md. */
10
+ --background: var(
11
+ --color-background-primary,
12
+ light-dark(rgb(255 255 255), rgb(24 24 24))
13
+ );
14
+ --foreground: var(
15
+ --color-text-primary,
16
+ light-dark(rgb(26 28 31), rgb(255 255 255))
17
+ );
18
+ --card: color-mix(in oklab, var(--foreground) 5%, var(--background));
19
+ --card-foreground: var(
20
+ --color-text-primary,
21
+ light-dark(rgb(26 28 31), rgb(255 255 255))
22
+ );
23
+ --popover: var(
24
+ --color-background-secondary,
25
+ light-dark(rgb(255 255 255), rgb(45 45 45))
26
+ );
27
+ --popover-foreground: var(
28
+ --color-text-primary,
29
+ light-dark(rgb(26 28 31), rgb(255 255 255))
30
+ );
31
+ --primary: var(
32
+ --color-text-info,
33
+ light-dark(rgb(51 156 255), rgb(131 195 255))
34
+ );
35
+ --primary-foreground: var(
36
+ --color-text-inverse,
37
+ light-dark(rgb(255 255 255), rgb(13 13 13))
38
+ );
39
+ --secondary: var(
40
+ --color-background-secondary,
41
+ light-dark(rgb(255 255 255 / 96%), rgb(54 54 54 / 96%))
42
+ );
43
+ --secondary-foreground: var(
44
+ --color-text-primary,
45
+ light-dark(rgb(26 28 31), rgb(255 255 255))
46
+ );
47
+ --muted: color-mix(in srgb, var(--foreground) 10%, transparent);
48
+ --muted-foreground: var(
49
+ --color-text-secondary,
50
+ light-dark(rgb(26 28 31 / 49.4%), rgb(255 255 255 / 49.8%))
51
+ );
52
+ --accent: var(
53
+ --color-background-info,
54
+ light-dark(rgb(229 242 255), rgb(13 39 63))
55
+ );
56
+ --accent-foreground: var(
57
+ --color-text-info,
58
+ light-dark(rgb(51 156 255), rgb(131 195 255))
59
+ );
60
+ --destructive: var(
61
+ --color-text-warning,
62
+ light-dark(rgb(226 85 7), rgb(255 133 73))
63
+ );
64
+ --border: var(
65
+ --color-border-secondary,
66
+ light-dark(rgb(26 28 31 / 8%), rgb(255 255 255 / 8.2%))
67
+ );
68
+ --input: var(
69
+ --color-border-primary,
70
+ light-dark(
71
+ rgb(26 28 31 / 11.8%),
72
+ color-mix(in oklab, rgb(0 0 0) 10%, transparent)
73
+ )
74
+ );
75
+ --ring: var(
76
+ --color-ring-primary,
77
+ light-dark(rgb(51 156 255), rgb(131 195 255 / 76%))
78
+ );
79
+ --font-size-base: var(--font-text-md-size, 14px);
80
+ --blue: light-dark(rgb(51 156 255), rgb(51 156 255));
81
+ --orange: light-dark(rgb(226 85 7), rgb(251 106 34));
82
+ --green: light-dark(rgb(0 162 64), rgb(64 201 119));
83
+ --red: light-dark(rgb(224 46 42), rgb(255 103 100));
84
+ --purple: light-dark(rgb(146 79 247), rgb(173 123 249));
85
+ --yellow: light-dark(rgb(255 195 0), rgb(255 210 64));
86
+ --viz-series-1: var(--primary);
87
+ --viz-series-2: light-dark(rgb(243 136 59), rgb(245 154 86));
88
+ --viz-series-3: light-dark(rgb(93 201 119), rgb(116 213 139));
89
+ --viz-series-4: light-dark(rgb(235 119 177), rgb(240 143 192));
90
+ --viz-series-5: light-dark(rgb(155 121 236), rgb(170 145 239));
91
+ --viz-series-6: light-dark(rgb(58 185 177), rgb(90 203 194));
92
+
93
+ /* Internal implementation variables; not part of the agent contract. */
94
+ --font-sans: -apple-system, system-ui, "Segoe UI", sans-serif;
95
+ --font-mono:
96
+ ui-monospace, SFMono-Regular, "SF Mono", Menlo, Consolas, "Liberation Mono",
97
+ monospace;
98
+ --font-size-normal: max(11px, var(--font-size-base));
99
+ --font-size-tooltip: calc(var(--font-size-base) - 1px);
100
+ --font-size-small: max(11px, calc(var(--font-size-base) - 2px));
101
+ --font-size-h1: calc(var(--font-size-normal) * 1.7142857143);
102
+ --font-size-h2: calc(var(--font-size-normal) * 1.4285714286);
103
+ --font-size-h3: calc(var(--font-size-normal) * 1.2857142857);
104
+ --font-weight-normal: 430;
105
+ --font-weight-medium: 500;
106
+ --icon-size: 16px;
107
+ --line-height-normal: calc(var(--font-size-normal) * 1.5);
108
+ --line-height-tooltip: calc(var(--font-size-tooltip) * 1.4285714286);
109
+ --line-height-small: calc(var(--font-size-small) + 4px);
110
+ --corner-shape: round;
111
+ --radius: var(--border-radius-lg, 10px);
112
+ --radius-sm: calc(var(--radius) * 0.6);
113
+ --radius-md: calc(var(--radius) * 0.8);
114
+ --radius-lg: var(--radius);
115
+ --radius-2xl: calc(var(--radius) * 1.6);
116
+ --radius-full: 9999px;
117
+ --shadow-sm: 0 1px 2px -1px rgb(0 0 0 / 8%);
118
+ --checkmark-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 17 17'%3E%3Cpath d='M 12.8961 3.64101C13.1297 3.41418 13.4984 3.37523 13.7779 3.56581C14.0571 3.75635 14.1554 4.11331 14.0299 4.41347L13.9615 4.53847L7.71151 13.7045C7.59411 13.8767 7.4063 13.9877 7.19881 14.0072C6.99136 14.0267 6.78564 13.9533 6.63826 13.806L2.88826 10.056L2.79842 9.9457C2.6192 9.67407 2.64927 9.30496 2.88826 9.06581C3.12738 8.82669 3.49647 8.79676 3.76815 8.97597L3.8785 9.06581L7.03084 12.2182L12.8053 3.74941L12.8961 3.64101Z'/%3E%3C/svg%3E");
119
+
120
+ /* Legacy aliases; not part of the current agent contract. */
121
+ --viz-bg: transparent;
122
+ --viz-panel: var(--card);
123
+ --viz-border: var(--border);
124
+ --viz-text: var(--foreground);
125
+ --viz-muted: var(--muted-foreground);
126
+ --viz-accent: var(--primary);
127
+ --viz-accent-text: var(--primary-foreground);
128
+ --viz-accent-bg: var(--accent);
129
+ --viz-font-size: var(--font-size-base);
130
+ --viz-warning: var(--destructive);
131
+ }
132
+
133
+ :root[data-theme="light"] {
134
+ color-scheme: light;
135
+ }
136
+
137
+ :root[data-theme="dark"] {
138
+ color-scheme: dark;
139
+ }
140
+
141
+ * {
142
+ box-sizing: border-box;
143
+ }
144
+
145
+ html > body {
146
+ /* Preserve MCP aliases for older inline renderers without creating :root cycles. */
147
+ --color-background-primary: var(
148
+ --background,
149
+ light-dark(rgb(255 255 255), rgb(24 24 24))
150
+ );
151
+ --color-text-primary: var(
152
+ --foreground,
153
+ light-dark(rgb(26 28 31), rgb(255 255 255))
154
+ );
155
+ --color-border-secondary: var(
156
+ --border,
157
+ light-dark(rgb(26 28 31 / 8%), rgb(255 255 255 / 8.2%))
158
+ );
159
+
160
+ margin: 0;
161
+ padding: var(--visualize-paint-gutter, 16px);
162
+ color: var(--foreground);
163
+ background: transparent !important;
164
+ font-family: var(--font-sans) !important;
165
+ font-size: var(--font-size-normal);
166
+ font-weight: var(--font-weight-normal);
167
+ line-height: var(--line-height-normal);
168
+ }
169
+
170
+ a {
171
+ color: color-mix(in srgb, var(--viz-accent) 80%, var(--viz-text) 20%);
172
+ cursor: pointer;
173
+ font-weight: var(--font-weight-medium, 500);
174
+ text-decoration: none;
175
+ text-underline-offset: 2px;
176
+ }
177
+
178
+ a:is(:hover, :focus-visible) {
179
+ text-decoration-line: underline;
180
+ text-decoration-style: dashed;
181
+ text-decoration-thickness: 0.5px;
182
+ }
183
+
184
+ h1,
185
+ h2,
186
+ h3,
187
+ h4,
188
+ h5,
189
+ h6,
190
+ p {
191
+ margin-block: 0;
192
+ }
193
+
194
+ h1 {
195
+ font-size: var(--font-size-h1);
196
+ font-weight: var(--font-weight-medium);
197
+ line-height: 1.25;
198
+ }
199
+
200
+ h2 {
201
+ font-size: var(--font-size-h2);
202
+ font-weight: var(--font-weight-medium);
203
+ line-height: 1.25;
204
+ }
205
+
206
+ h3,
207
+ h4,
208
+ h5,
209
+ h6 {
210
+ font-size: var(--font-size-h3);
211
+ font-weight: var(--font-weight-medium);
212
+ line-height: 1.3;
213
+ }
214
+
215
+ b,
216
+ strong,
217
+ th {
218
+ font-weight: var(--font-weight-medium);
219
+ }
220
+
221
+ code:not(pre code) {
222
+ display: inline;
223
+ padding: 1px 6px;
224
+ border-radius: var(--radius-sm);
225
+ corner-shape: var(--corner-shape);
226
+ background: var(--muted);
227
+ font-family: var(--font-mono);
228
+ font-size: 0.92em;
229
+ overflow-wrap: anywhere;
230
+ -webkit-box-decoration-break: clone;
231
+ box-decoration-break: clone;
232
+ word-break: break-word;
233
+ }
234
+
235
+ .table-responsive {
236
+ width: 100%;
237
+ overflow-x: auto;
238
+ scrollbar-width: thin;
239
+ }
240
+
241
+ .table {
242
+ width: 100%;
243
+ border-collapse: collapse;
244
+ color: var(--foreground);
245
+ font: inherit;
246
+ text-align: start;
247
+ }
248
+
249
+ .table :is(th, td) {
250
+ padding-block: 10px;
251
+ padding-inline: 0 24px;
252
+ overflow-wrap: anywhere;
253
+ border-bottom: 1px solid var(--border);
254
+ text-align: start;
255
+ vertical-align: top;
256
+ }
257
+
258
+ .table-responsive > .table :is(th, td) {
259
+ overflow-wrap: break-word;
260
+ }
261
+
262
+ .table :is(th, td):last-child {
263
+ padding-inline-end: 0;
264
+ }
265
+
266
+ .table :is(caption, thead th) {
267
+ font-weight: 600;
268
+ }
269
+
270
+ .table thead th {
271
+ padding-block: 8px;
272
+ border-bottom-color: color-mix(in srgb, var(--foreground) 16%, transparent);
273
+ }
274
+
275
+ .table tbody tr:last-child :is(th, td) {
276
+ border-bottom: 0;
277
+ }
278
+
279
+ .table.table-sm :is(th, td) {
280
+ padding-block: 6px;
281
+ }
282
+
283
+ .table.table-sm :is(th, td):not(:last-child) {
284
+ padding-inline-end: 16px;
285
+ }
286
+
287
+ .table :is(.text-end, [align="right"]) {
288
+ text-align: end;
289
+ font-variant-numeric: tabular-nums;
290
+ }
291
+
292
+ .table :is(.text-center, [align="center"]) {
293
+ text-align: center;
294
+ }
295
+
296
+ .table .text-nowrap {
297
+ white-space: nowrap;
298
+ }
299
+
300
+ #widget {
301
+ display: flex;
302
+ flex-direction: column;
303
+ gap: 12px;
304
+ width: 100%;
305
+ padding: 0;
306
+ background: transparent !important;
307
+ }
308
+
309
+ .card {
310
+ min-width: 0;
311
+ padding: 12px;
312
+ overflow: hidden;
313
+ overflow-wrap: break-word;
314
+ border-radius: var(--radius-2xl);
315
+ corner-shape: var(--corner-shape);
316
+ color: var(--card-foreground);
317
+ background: var(--card);
318
+ }
319
+
320
+ #widget > :not(.card, .progress) {
321
+ width: 100% !important;
322
+ max-width: none !important;
323
+ margin: 0 !important;
324
+ padding: 0 !important;
325
+ border: 0 !important;
326
+ border-radius: 0 !important;
327
+ background: transparent !important;
328
+ box-shadow: none !important;
329
+ }
330
+
331
+ .tooltip {
332
+ position: fixed;
333
+ z-index: 50;
334
+ top: 0;
335
+ left: 0;
336
+ width: max-content;
337
+ max-width: min(
338
+ 20rem,
339
+ var(--tooltip-available-width, calc(100vw - 10px)),
340
+ calc(100vw - 10px)
341
+ );
342
+ max-height: min(
343
+ var(--tooltip-available-height, calc(100vh - 10px)),
344
+ calc(100vh - 10px)
345
+ );
346
+ padding: 4px 8px;
347
+ border: 1px solid var(--border);
348
+ border-radius: var(--radius-lg);
349
+ corner-shape: var(--corner-shape);
350
+ color: var(--popover-foreground);
351
+ background: var(--popover);
352
+ box-shadow: none;
353
+ font-size: var(--font-size-tooltip);
354
+ line-height: var(--line-height-tooltip);
355
+ overflow-wrap: break-word;
356
+ white-space: normal;
357
+ pointer-events: none;
358
+ user-select: none;
359
+ }
360
+
361
+ .viz-grid {
362
+ display: grid;
363
+ grid-template-columns: repeat(auto-fit, minmax(max(180px, 24%), 1fr));
364
+ gap: 10px;
365
+ }
366
+
367
+ .viz-stat {
368
+ display: flex;
369
+ flex-direction: column;
370
+ gap: 2px;
371
+ }
372
+
373
+ .viz-stat-value {
374
+ font-size: var(--font-size-h2);
375
+ font-weight: var(--font-weight-medium);
376
+ line-height: 1.25;
377
+ }
378
+
379
+ .viz-row {
380
+ display: flex;
381
+ flex-wrap: wrap;
382
+ align-items: center;
383
+ gap: 10px;
384
+ }
385
+
386
+ hr {
387
+ width: 100%;
388
+ height: 1px;
389
+ margin-block: 6px;
390
+ border: 0;
391
+ background: var(--border);
392
+ }
393
+
394
+ .nav {
395
+ display: flex;
396
+ min-width: 0;
397
+ align-items: center;
398
+ gap: 4px;
399
+ }
400
+
401
+ .progress {
402
+ display: flex;
403
+ height: 8px;
404
+ margin-block: calc((var(--line-height-normal, 1.5em) - 8px) / 2);
405
+ overflow: hidden;
406
+ border: 0;
407
+ border-radius: var(--radius-full);
408
+ background: var(--muted);
409
+ }
410
+
411
+ .progress-bar:only-child {
412
+ border-radius: var(--radius-full);
413
+ }
414
+
415
+ .progress-bar {
416
+ height: 100%;
417
+ flex-shrink: 0;
418
+ border: 0;
419
+ background: var(--viz-series-1);
420
+ }
421
+
422
+ .viz-badge {
423
+ padding: 3px 8px;
424
+ border-radius: var(--radius-full);
425
+ color: var(--accent-foreground);
426
+ background: var(--accent);
427
+ font-weight: var(--font-weight-medium);
428
+ }
429
+
430
+ small,
431
+ .text-small,
432
+ .viz-badge {
433
+ font-size: var(--font-size-small);
434
+ line-height: var(--line-height-small);
435
+ }
436
+
437
+ .text-muted {
438
+ color: var(--muted-foreground);
439
+ }
440
+
441
+ .tabular-nums {
442
+ font-variant-numeric: tabular-nums;
443
+ }
444
+
445
+ .sr-only {
446
+ position: absolute;
447
+ width: 1px;
448
+ height: 1px;
449
+ padding: 0;
450
+ overflow: hidden;
451
+ clip: rect(0, 0, 0, 0);
452
+ white-space: nowrap;
453
+ border: 0;
454
+ }
455
+
456
+ .viz-controls {
457
+ display: flex;
458
+ flex-wrap: wrap;
459
+ align-items: center;
460
+ gap: 8px;
461
+ }
462
+
463
+ .viz-controls > .form-label {
464
+ display: grid;
465
+ min-width: min(100%, 260px);
466
+ flex: 1 1 280px;
467
+ grid-template-columns: minmax(0, 1fr) auto;
468
+ align-items: baseline;
469
+ gap: 2px 12px;
470
+ margin-bottom: 0;
471
+ }
472
+
473
+ .viz-controls > .form-label > :is(.form-control, .form-range, .form-select) {
474
+ grid-column: 1 / -1;
475
+ }
476
+
477
+ .btn,
478
+ .nav-link,
479
+ .form-check-input,
480
+ .form-control,
481
+ .form-range,
482
+ .form-select {
483
+ font: inherit;
484
+ }
485
+
486
+ .btn,
487
+ .nav-link {
488
+ appearance: button;
489
+ display: inline-flex;
490
+ inline-size: fit-content;
491
+ max-inline-size: 100%;
492
+ min-height: 28px;
493
+ align-items: center;
494
+ justify-content: center;
495
+ gap: 4px;
496
+ margin: 0;
497
+ padding: 0 8px;
498
+ -webkit-app-region: no-drag;
499
+ border: 1px solid var(--input);
500
+ border-radius: var(--radius-lg);
501
+ corner-shape: var(--corner-shape);
502
+ color: var(--secondary-foreground);
503
+ background: var(--secondary);
504
+ cursor: var(--cursor-interaction, pointer);
505
+ text-align: center;
506
+ text-decoration: none;
507
+ white-space: nowrap;
508
+ user-select: none;
509
+ -webkit-font-smoothing: antialiased;
510
+ }
511
+
512
+ .btn:is(.btn-block, .viz-tile) {
513
+ inline-size: 100%;
514
+ }
515
+
516
+ .btn.viz-tile {
517
+ min-width: 0;
518
+ overflow-wrap: anywhere;
519
+ white-space: normal;
520
+ }
521
+
522
+ a.btn {
523
+ cursor: pointer;
524
+ text-decoration: none;
525
+ }
526
+
527
+ .btn:not(:disabled):hover,
528
+ .nav-link:not(:disabled):not([aria-disabled="true"]):hover {
529
+ background: color-mix(in srgb, var(--foreground) 6%, var(--secondary));
530
+ }
531
+
532
+ .btn-primary {
533
+ border-color: transparent;
534
+ color: var(--primary-foreground);
535
+ background: var(--foreground);
536
+ background-clip: padding-box;
537
+ }
538
+
539
+ .btn-primary .text-muted {
540
+ color: color-mix(in srgb, var(--primary-foreground) 50%, transparent);
541
+ }
542
+
543
+ .btn-primary:not(:disabled):hover {
544
+ background: color-mix(in srgb, var(--foreground) 80%, transparent);
545
+ background-clip: padding-box;
546
+ }
547
+
548
+ .btn-ghost {
549
+ border-color: transparent;
550
+ color: var(--muted-foreground);
551
+ background: transparent;
552
+ }
553
+
554
+ .btn-ghost:not(:disabled):hover {
555
+ color: var(--foreground);
556
+ background: color-mix(in srgb, var(--foreground) 6%, var(--secondary));
557
+ }
558
+
559
+ .nav-pills .nav-link {
560
+ min-width: 0;
561
+ border-color: transparent;
562
+ color: var(--muted-foreground);
563
+ background: transparent;
564
+ }
565
+
566
+ .nav-justified .nav-link {
567
+ flex: 1 1 0;
568
+ overflow-wrap: anywhere;
569
+ white-space: normal;
570
+ }
571
+
572
+ .nav-pills .nav-link.active {
573
+ color: var(--foreground);
574
+ background: var(--muted);
575
+ }
576
+
577
+ .btn:disabled,
578
+ .nav-link:disabled,
579
+ .nav-link[aria-disabled="true"] {
580
+ cursor: not-allowed;
581
+ opacity: 0.4;
582
+ }
583
+
584
+ [data-lucide] {
585
+ stroke-width: 1.6;
586
+ }
587
+
588
+ .form-label {
589
+ display: block;
590
+ margin-bottom: 6px;
591
+ color: var(--foreground);
592
+ }
593
+
594
+ .form-control {
595
+ display: block;
596
+ width: 100%;
597
+ min-height: 28px;
598
+ padding: 0 8px;
599
+ outline: none;
600
+ border: 1px solid var(--input);
601
+ border-radius: var(--radius-lg);
602
+ corner-shape: var(--corner-shape);
603
+ color: var(--foreground);
604
+ background: var(--secondary);
605
+ }
606
+
607
+ .form-control::placeholder {
608
+ color: var(--muted-foreground);
609
+ }
610
+
611
+ .form-control[type="file"] {
612
+ padding: 0;
613
+ overflow: hidden;
614
+ cursor: var(--cursor-interaction, pointer);
615
+ }
616
+
617
+ .form-control[type="file"]::file-selector-button {
618
+ min-height: 26px;
619
+ margin-right: 8px;
620
+ padding: 0 8px;
621
+ border: 0;
622
+ border-right: 1px solid var(--input);
623
+ color: var(--secondary-foreground);
624
+ background: var(--secondary);
625
+ cursor: inherit;
626
+ font: inherit;
627
+ }
628
+
629
+ .form-control[type="file"]:not(:disabled):hover::file-selector-button {
630
+ background: color-mix(in srgb, var(--foreground) 6%, var(--secondary));
631
+ }
632
+
633
+ .form-control-color[type="color"] {
634
+ width: 40px;
635
+ height: 28px;
636
+ padding: 3px;
637
+ cursor: var(--cursor-interaction, pointer);
638
+ }
639
+
640
+ .form-control-color[type="color"]::-webkit-color-swatch-wrapper {
641
+ padding: 0;
642
+ }
643
+
644
+ .form-control-color[type="color"]::-webkit-color-swatch {
645
+ border: 0;
646
+ border-radius: calc(var(--radius-lg) - 4px);
647
+ corner-shape: var(--corner-shape);
648
+ }
649
+
650
+ textarea.form-control {
651
+ height: auto;
652
+ min-height: 72px;
653
+ padding: 8px 10px;
654
+ resize: vertical;
655
+ }
656
+
657
+ .form-control:focus-visible {
658
+ border-color: var(--ring);
659
+ box-shadow: inset 0 0 0 1px var(--ring);
660
+ }
661
+
662
+ .form-control:disabled,
663
+ .form-select:disabled {
664
+ cursor: not-allowed;
665
+ opacity: 0.4;
666
+ }
667
+
668
+ .form-select {
669
+ appearance: none;
670
+ display: block;
671
+ width: 100%;
672
+ min-height: 28px;
673
+ margin: 0;
674
+ padding: 0 32px 0 8px;
675
+ outline: none;
676
+ border: 1px solid var(--input);
677
+ border-radius: var(--radius-lg);
678
+ corner-shape: var(--corner-shape);
679
+ color: var(--foreground);
680
+ background-color: var(--secondary);
681
+ background-image:
682
+ linear-gradient(45deg, transparent 50%, var(--muted-foreground) 50%),
683
+ linear-gradient(135deg, var(--muted-foreground) 50%, transparent 50%);
684
+ background-position:
685
+ calc(100% - 14px) 50%,
686
+ calc(100% - 10px) 50%;
687
+ background-repeat: no-repeat;
688
+ background-size: 4px 4px;
689
+ cursor: var(--cursor-interaction, default);
690
+ }
691
+
692
+ .form-select:not(:disabled):hover {
693
+ background-color: color-mix(in srgb, var(--foreground) 6%, var(--secondary));
694
+ }
695
+
696
+ .form-select:focus-visible {
697
+ border-color: var(--ring);
698
+ box-shadow: inset 0 0 0 1px var(--ring);
699
+ }
700
+
701
+ .form-check {
702
+ display: flex;
703
+ min-height: 20px;
704
+ align-items: center;
705
+ gap: 6px;
706
+ }
707
+
708
+ .form-check-input {
709
+ appearance: none;
710
+ width: 14px;
711
+ height: 14px;
712
+ flex: 0 0 auto;
713
+ margin: 0;
714
+ border: 1px solid var(--input);
715
+ color: var(--primary-foreground);
716
+ background-color: transparent;
717
+ cursor: var(--cursor-interaction, default);
718
+ transition:
719
+ background-color 150ms,
720
+ border-color 150ms,
721
+ box-shadow 150ms;
722
+ }
723
+
724
+ .form-check:not(.form-switch) .form-check-input[type="checkbox"] {
725
+ border-color: var(--input);
726
+ border-radius: var(--radius-sm);
727
+ corner-shape: var(--corner-shape);
728
+ background-color: var(--secondary);
729
+ box-shadow: var(--shadow-sm);
730
+ }
731
+
732
+ .form-check:not(.form-switch)
733
+ .form-check-input:not(:disabled):not(:checked):hover {
734
+ background-color: var(--card);
735
+ }
736
+
737
+ .form-check:not(.form-switch) .form-check-input[type="checkbox"]:checked {
738
+ border-color: var(--primary);
739
+ background-color: var(--primary);
740
+ }
741
+
742
+ .form-check:not(.form-switch)
743
+ .form-check-input[type="checkbox"]:checked::before {
744
+ display: block;
745
+ width: 100%;
746
+ height: 100%;
747
+ background: var(--primary-foreground);
748
+ content: "";
749
+ mask: var(--checkmark-image) center / 12px 12px no-repeat;
750
+ }
751
+
752
+ .form-check-input[type="radio"] {
753
+ width: 14px;
754
+ height: 14px;
755
+ border-radius: var(--radius-full);
756
+ }
757
+
758
+ .form-check-input[type="radio"]:checked {
759
+ border: 2px solid var(--primary);
760
+ background:
761
+ radial-gradient(circle, var(--primary-foreground) 0 2.5px, transparent 3px),
762
+ var(--primary);
763
+ }
764
+
765
+ .form-check:not(.form-switch) .form-check-input:focus-visible {
766
+ outline: 2px solid var(--ring);
767
+ outline-offset: 2px;
768
+ }
769
+
770
+ .form-check:not(.form-switch) .form-check-input:disabled {
771
+ cursor: not-allowed;
772
+ pointer-events: none;
773
+ }
774
+
775
+ .form-check:not(.form-switch) .form-check-input:disabled + .form-check-label {
776
+ cursor: not-allowed;
777
+ }
778
+
779
+ .form-switch .form-check-input:disabled,
780
+ .form-switch .form-check-input:disabled + .form-check-label {
781
+ cursor: not-allowed;
782
+ opacity: 0.6;
783
+ }
784
+
785
+ .form-check-label {
786
+ color: var(--foreground);
787
+ cursor: var(--cursor-interaction, default);
788
+ }
789
+
790
+ .form-switch .form-check-input {
791
+ position: relative;
792
+ width: 32px;
793
+ height: 20px;
794
+ border: 0;
795
+ border-radius: var(--radius-full);
796
+ background: var(--muted);
797
+ box-shadow: none;
798
+ transition: background-color 200ms cubic-bezier(0, 0, 0.2, 1);
799
+ }
800
+
801
+ .form-switch .form-check-input::before {
802
+ position: absolute;
803
+ top: 50%;
804
+ left: 0;
805
+ width: 16px;
806
+ height: 16px;
807
+ box-sizing: border-box;
808
+ border: 1px solid light-dark(var(--primary-foreground), var(--foreground));
809
+ border-radius: var(--radius-full);
810
+ background: light-dark(var(--primary-foreground), var(--foreground));
811
+ box-shadow: var(--shadow-sm);
812
+ content: "";
813
+ transform: translate(2px, -50%);
814
+ transition: transform 200ms cubic-bezier(0, 0, 0.2, 1);
815
+ }
816
+
817
+ .form-switch .form-check-input:checked {
818
+ background: var(--primary);
819
+ }
820
+
821
+ .form-switch .form-check-input:checked::before {
822
+ transform: translate(14px, -50%);
823
+ }
824
+
825
+ .form-switch .form-check-input:focus-visible {
826
+ box-shadow: 0 0 0 2px var(--ring);
827
+ }
828
+
829
+ .form-range {
830
+ appearance: none;
831
+ display: block;
832
+ width: 100%;
833
+ height: 28px;
834
+ flex: 1;
835
+ margin: 0;
836
+ padding: 0;
837
+ outline: none;
838
+ border: 0;
839
+ accent-color: var(--primary);
840
+ background: linear-gradient(
841
+ color-mix(in srgb, var(--foreground) 7%, transparent),
842
+ color-mix(in srgb, var(--foreground) 7%, transparent)
843
+ )
844
+ center / 100% 2px no-repeat;
845
+ }
846
+
847
+ .form-range::-webkit-slider-runnable-track {
848
+ height: 28px;
849
+ background: transparent;
850
+ }
851
+
852
+ .form-range::-webkit-slider-thumb {
853
+ appearance: none;
854
+ width: 20px;
855
+ height: 20px;
856
+ margin-top: 4px;
857
+ border: 1px solid var(--border);
858
+ border-radius: var(--radius-full);
859
+ background: light-dark(var(--primary-foreground), var(--foreground));
860
+ }
861
+
862
+ .form-range:focus-visible::-webkit-slider-thumb {
863
+ border-color: var(--ring);
864
+ box-shadow: inset 0 0 0 1px var(--ring);
865
+ }
866
+
867
+ .form-range::-moz-range-track {
868
+ height: 28px;
869
+ background: transparent;
870
+ }
871
+
872
+ .form-range::-moz-range-thumb {
873
+ width: 20px;
874
+ height: 20px;
875
+ border: 1px solid var(--border);
876
+ border-radius: var(--radius-full);
877
+ background: light-dark(var(--primary-foreground), var(--foreground));
878
+ }
879
+
880
+ .form-range:focus-visible::-moz-range-thumb {
881
+ border-color: var(--ring);
882
+ box-shadow: inset 0 0 0 1px var(--ring);
883
+ }
884
+
885
+ .form-range:disabled {
886
+ cursor: not-allowed;
887
+ opacity: 0.4;
888
+ }
889
+
890
+ .btn:not(.btn-primary, .viz-tile):is(
891
+ [aria-pressed="true"],
892
+ [aria-selected="true"],
893
+ .is-selected
894
+ ) {
895
+ border-color: var(--primary);
896
+ color: var(--primary-foreground);
897
+ background: var(--primary);
898
+ }
899
+
900
+ .btn.viz-tile:is([aria-pressed="true"], [aria-selected="true"], .is-selected) {
901
+ border-color: var(--primary);
902
+ box-shadow: inset 0 0 0 1px var(--primary);
903
+ }
904
+
905
+ .btn:focus-visible,
906
+ .nav-link:focus-visible {
907
+ outline: 2px solid var(--ring);
908
+ outline-offset: 2px;
909
+ }
910
+
911
+ @media (pointer: coarse) {
912
+ .btn,
913
+ .nav-link,
914
+ .form-control,
915
+ .form-select {
916
+ min-width: 44px;
917
+ min-height: 44px;
918
+ }
919
+
920
+ /* Keep small-screen WebKit from zooming when a text field receives focus. */
921
+ .form-control,
922
+ .form-select {
923
+ font-size: max(16px, var(--font-size-normal));
924
+ }
925
+
926
+ .form-control[type="file"]::file-selector-button {
927
+ min-width: 44px;
928
+ min-height: 44px;
929
+ }
930
+
931
+ .form-control-color[type="color"] {
932
+ width: 44px;
933
+ height: 44px;
934
+ }
935
+
936
+ .form-control:is(
937
+ [type="date"],
938
+ [type="datetime-local"],
939
+ [type="month"],
940
+ [type="time"],
941
+ [type="week"]
942
+ ) {
943
+ min-width: 0;
944
+ max-width: 100%;
945
+ padding-block: 8px;
946
+ }
947
+
948
+ .form-check {
949
+ min-height: 44px;
950
+ padding-inline: 15px;
951
+ }
952
+
953
+ .form-check-input {
954
+ position: relative;
955
+ }
956
+
957
+ .form-check-input::after {
958
+ position: absolute;
959
+ top: 50%;
960
+ left: 50%;
961
+ width: 44px;
962
+ height: 44px;
963
+ content: "";
964
+ transform: translate(-50%, -50%);
965
+ }
966
+
967
+ .form-check-label {
968
+ display: inline-flex;
969
+ min-width: 44px;
970
+ min-height: 44px;
971
+ align-items: center;
972
+ }
973
+
974
+ .form-range {
975
+ height: 44px;
976
+ touch-action: pan-y;
977
+ }
978
+
979
+ .form-range::-webkit-slider-runnable-track {
980
+ height: 44px;
981
+ }
982
+
983
+ .form-range::-moz-range-track {
984
+ height: 44px;
985
+ }
986
+
987
+ .form-range::-webkit-slider-thumb {
988
+ margin-top: 12px;
989
+ }
990
+ }
991
+
992
+ svg {
993
+ display: block;
994
+ max-width: 100%;
995
+ height: auto;
996
+ }
997
+
998
+ #widget > svg {
999
+ width: 100%;
1000
+ }
1001
+
1002
+ /* Model-authored chart rules can otherwise stretch icons after these styles load. */
1003
+ svg.lucide {
1004
+ display: block;
1005
+ width: var(--icon-size) !important;
1006
+ height: var(--icon-size) !important;
1007
+ flex: none;
1008
+ margin: 0 !important;
1009
+ stroke-width: 1.6;
1010
+ }
1011
+
1012
+ .text-warning,
1013
+ .text-destructive {
1014
+ color: var(--destructive);
1015
+ }