@vvedantb/ui 0.17.1 → 0.18.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.
- package/README.md +251 -3
- package/package.json +13 -5
- package/shell/src/SidebarResize.tsx +1 -4
- package/src/ai-elements/__snapshots__/queue.test.tsx.snap +11 -0
- package/src/ai-elements/activity-question-utils.ts +26 -0
- package/src/ai-elements/activity-question.tsx +159 -0
- package/src/ai-elements/activity-shared.tsx +459 -0
- package/src/ai-elements/activity-step-detail.tsx +115 -0
- package/src/ai-elements/activity-step-label.ts +981 -0
- package/src/ai-elements/activity-tasks-utils.ts +199 -0
- package/src/ai-elements/activity-tasks.tsx +770 -0
- package/src/ai-elements/artifact.tsx +162 -52
- package/src/ai-elements/attachments.tsx +62 -32
- package/src/ai-elements/code-block.tsx +76 -22
- package/src/ai-elements/context.tsx +370 -0
- package/src/ai-elements/conversation.tsx +186 -62
- package/src/ai-elements/file-chip.tsx +53 -0
- package/src/ai-elements/message.tsx +161 -50
- package/src/ai-elements/model-picker-content.tsx +505 -0
- package/src/ai-elements/model-picker-types.ts +56 -0
- package/src/ai-elements/model-picker.tsx +301 -0
- package/src/ai-elements/model-selector.tsx +102 -21
- package/src/ai-elements/plan.tsx +130 -0
- package/src/ai-elements/prompt-input-settings.tsx +144 -0
- package/src/ai-elements/prompt-input-speech.tsx +189 -0
- package/src/ai-elements/prompt-input-traits.tsx +281 -0
- package/src/ai-elements/prompt-input.tsx +320 -134
- package/src/ai-elements/provider-icon.tsx +133 -0
- package/src/ai-elements/queue.tsx +293 -9
- package/src/ai-elements/shimmer.tsx +72 -1
- package/src/ai-elements/simple-model-ladder.tsx +108 -0
- package/src/ai-elements/test-results.tsx +510 -0
- package/src/ai-elements/trace.tsx +243 -0
- package/src/ai-elements/use-streaming-disclosure.ts +50 -0
- package/src/ai-elements/web-preview.tsx +349 -0
- package/src/composer/input-area/ComposerSlashMenu.tsx +1 -1
- package/src/index.ts +66 -12
- package/src/kibo/avatar-stack.tsx +40 -0
- package/src/kibo/contribution-graph.tsx +539 -0
- package/src/kibo/cursor.tsx +72 -0
- package/src/kibo/gantt-features.tsx +439 -0
- package/src/kibo/gantt-header.tsx +181 -0
- package/src/kibo/gantt-provider.tsx +657 -0
- package/src/kibo/gantt-sidebar.tsx +157 -0
- package/src/kibo/gantt-timeline.tsx +154 -0
- package/src/kibo/index.ts +151 -0
- package/src/kibo/kanban.tsx +338 -0
- package/src/kibo/kanbanDropTarget.ts +25 -0
- package/src/kibo/list.tsx +162 -0
- package/src/kibo/theme-switcher.tsx +109 -0
- package/src/kibo/video-player.tsx +237 -0
- package/src/markdown/Markdown.tsx +112 -0
- package/src/markdown/MarkdownBlockquote.tsx +45 -0
- package/src/markdown/MarkdownCodeBlock.tsx +197 -0
- package/src/markdown/MarkdownInlineCode.tsx +40 -0
- package/src/markdown/MarkdownLink.tsx +92 -0
- package/src/markdown/codeFence.ts +57 -0
- package/src/markdown/codeHighlight.ts +138 -0
- package/src/markdown/incrementalBlocks.ts +182 -0
- package/src/markdown/index.ts +3 -0
- package/src/markdown/markdownClipboard.ts +178 -0
- package/src/markdown/mermaid.ts +155 -0
- package/src/markdown/rehypeGithubAlerts.ts +80 -0
- package/src/motion/presets.ts +24 -0
- package/src/ui/__snapshots__/alt-wrappers.test.tsx.snap +19 -0
- package/src/ui/__snapshots__/sonner-dom.test.tsx.snap +5 -0
- package/src/ui/_menu-parts.tsx +29 -0
- package/src/ui/accordion.alt.tsx +46 -53
- package/src/ui/accordion.tsx +59 -10
- package/src/ui/avatar.tsx +56 -0
- package/src/ui/badge.tsx +45 -21
- package/src/ui/border-beam.tsx +97 -0
- package/src/ui/button-group.tsx +50 -21
- package/src/ui/button.tsx +67 -45
- package/src/ui/calendar.tsx +48 -5
- package/src/ui/card.tsx +77 -8
- package/src/ui/carousel.tsx +60 -0
- package/src/ui/centered-spinner.tsx +30 -0
- package/src/ui/checkbox.tsx +34 -16
- package/src/ui/clear-input.alt.tsx +33 -75
- package/src/ui/clear-input.tsx +140 -15
- package/src/ui/collapsible.tsx +40 -2
- package/src/ui/command.tsx +143 -70
- package/src/ui/context-menu.tsx +159 -93
- package/src/ui/crossfade-icon.tsx +123 -0
- package/src/ui/dialog.tsx +154 -70
- package/src/ui/dropdown-menu.tsx +177 -117
- package/src/ui/hover-card.tsx +59 -17
- package/src/ui/input-group.alt.tsx +83 -83
- package/src/ui/input-group.tsx +129 -58
- package/src/ui/input.tsx +13 -4
- package/src/ui/label.tsx +11 -8
- package/src/ui/list-row.tsx +232 -0
- package/src/ui/loading-state.tsx +215 -0
- package/src/ui/popover.tsx +56 -23
- package/src/ui/progress.tsx +28 -16
- package/src/ui/refresh-spin-icon.tsx +41 -0
- package/src/ui/search-input.tsx +66 -15
- package/src/ui/select.tsx +171 -100
- package/src/ui/separator.tsx +23 -14
- package/src/ui/slider.tsx +21 -7
- package/src/ui/sonner.tsx +68 -30
- package/src/ui/spinner.tsx +229 -11
- package/src/ui/status-dot.tsx +84 -0
- package/src/ui/surface.tsx +49 -0
- package/src/ui/switch.tsx +29 -15
- package/src/ui/table.tsx +38 -16
- package/src/ui/tabs.tsx +123 -35
- package/src/ui/tabsSliding.ts +33 -1
- package/src/ui/textarea.tsx +13 -4
- package/src/ui/tooltip.tsx +50 -14
- package/src/ui/ui-config.tsx +149 -0
- package/src/utils/cat-color.ts +123 -0
- package/src/utils/dayjs.ts +6 -0
- package/src/utils/gesture.ts +59 -0
- package/src/utils/runtimeVisibility.ts +167 -0
- package/src/utils/sharedClock.ts +96 -0
- package/src/utils/surface-radius.ts +16 -0
- package/src/utils/useDragSensors.ts +58 -0
- package/tokens/examples/tokens-moved/Fixture.tsx +283 -0
- package/tokens/examples/tokens-moved/README.md +20 -0
- package/tokens/examples/tokens-moved/index.html +12 -0
- package/tokens/examples/tokens-moved/main.tsx +6 -0
- package/tokens/examples/tokens-moved/package.json +14 -0
- package/tokens/examples/tokens-moved/styles.css +12 -0
- package/tokens/examples/tokens-moved/tsconfig.json +14 -0
- package/tokens/examples/tokens-moved/vite.config.ts +11 -0
- package/tokens/src/css/border-beam.css +116 -0
- package/tokens/src/css/markdown.css +318 -0
|
@@ -0,0 +1,318 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* @vvedantb/ui/tokens/css/markdown.css: typography, code blocks, callouts,
|
|
3
|
+
* links and tables for <Markdown/>. Opt-in: neither tokens.css nor index.css
|
|
4
|
+
* imports it.
|
|
5
|
+
*
|
|
6
|
+
* @import "@vvedantb/ui/tokens/css/markdown.css";
|
|
7
|
+
*
|
|
8
|
+
* Reads the shadcn channel variables as `rgb(var(--name))`: --foreground,
|
|
9
|
+
* --muted-foreground, --border, --primary, --success, --warning,
|
|
10
|
+
* --destructive, and --radius, --font-mono and --motion-fast (150ms when
|
|
11
|
+
* unset). The app (or compat-shadcn-rgb.css) must define them as space
|
|
12
|
+
* separated RGB channels. Code block and table panels fill with
|
|
13
|
+
* `var(--color-surface-secondary)`, which tokens.css and compat-shadcn-rgb.css
|
|
14
|
+
* both define (the compat file maps it to the app's `--muted`).
|
|
15
|
+
*
|
|
16
|
+
* Set on :root, `.markdown` or any ancestor to change (default shown):
|
|
17
|
+
* --markdown-alert-important: var(--primary) (RGB channels)
|
|
18
|
+
*
|
|
19
|
+
* Typography is owned here rather than by `prose`: headings stay compact so a
|
|
20
|
+
* chat reply reads as a reply, not a document. Sizes are in `em` so the scale
|
|
21
|
+
* follows whatever text size the surface sets (`text-sm` in chat, `text-xs`
|
|
22
|
+
* in compact rows). Everything sits in `components`, so a surface's own
|
|
23
|
+
* utilities (`[&_h3]:text-xs`) still win.
|
|
24
|
+
*
|
|
25
|
+
* Code blocks, inline code and callouts are tone surfaces, never hairlines.
|
|
26
|
+
*/
|
|
27
|
+
|
|
28
|
+
@layer components {
|
|
29
|
+
.markdown {
|
|
30
|
+
line-height: 1.625;
|
|
31
|
+
overflow-wrap: anywhere;
|
|
32
|
+
}
|
|
33
|
+
.markdown > :first-child {
|
|
34
|
+
margin-top: 0;
|
|
35
|
+
}
|
|
36
|
+
.markdown > :last-child {
|
|
37
|
+
margin-bottom: 0;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
.markdown :is(p, ul, ol, blockquote, table, .markdown-code, .markdown-alert, .katex-display) {
|
|
41
|
+
margin-block: 0.65rem;
|
|
42
|
+
}
|
|
43
|
+
.markdown [data-streamdown="table-wrapper"],
|
|
44
|
+
.markdown [data-streamdown="mermaid-block"] {
|
|
45
|
+
margin-block: 0.75rem;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
/* Headings — compact scale, 1em = the surface's body size. */
|
|
49
|
+
.markdown :is(h1, h2, h3, h4, h5, h6) {
|
|
50
|
+
margin: 1.25rem 0 0.5rem;
|
|
51
|
+
font-weight: 600;
|
|
52
|
+
line-height: 1.3;
|
|
53
|
+
color: rgb(var(--foreground));
|
|
54
|
+
letter-spacing: -0.01em;
|
|
55
|
+
}
|
|
56
|
+
.markdown h1 {
|
|
57
|
+
font-size: 1.43em;
|
|
58
|
+
}
|
|
59
|
+
.markdown h2 {
|
|
60
|
+
font-size: 1.29em;
|
|
61
|
+
}
|
|
62
|
+
.markdown h3 {
|
|
63
|
+
font-size: 1.14em;
|
|
64
|
+
}
|
|
65
|
+
.markdown :is(h4, h5, h6) {
|
|
66
|
+
font-size: 1em;
|
|
67
|
+
}
|
|
68
|
+
.markdown h6 {
|
|
69
|
+
color: rgb(var(--muted-foreground));
|
|
70
|
+
}
|
|
71
|
+
.markdown :is(h1, h2, h3, h4, h5, h6) + * {
|
|
72
|
+
margin-top: 0;
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
.markdown strong {
|
|
76
|
+
font-weight: 600;
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
.markdown hr {
|
|
80
|
+
margin-block: 1.25rem;
|
|
81
|
+
border: 0;
|
|
82
|
+
border-top: 1px solid rgb(var(--border));
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
/* Lists */
|
|
86
|
+
.markdown :is(ul, ol) {
|
|
87
|
+
padding-left: 1.25rem;
|
|
88
|
+
}
|
|
89
|
+
.markdown ul {
|
|
90
|
+
list-style: disc;
|
|
91
|
+
}
|
|
92
|
+
.markdown ul ul {
|
|
93
|
+
list-style: circle;
|
|
94
|
+
}
|
|
95
|
+
.markdown ul ul ul {
|
|
96
|
+
list-style: square;
|
|
97
|
+
}
|
|
98
|
+
.markdown ol {
|
|
99
|
+
list-style: decimal;
|
|
100
|
+
}
|
|
101
|
+
.markdown ol ol {
|
|
102
|
+
list-style: lower-alpha;
|
|
103
|
+
}
|
|
104
|
+
.markdown ol ol ol {
|
|
105
|
+
list-style: lower-roman;
|
|
106
|
+
}
|
|
107
|
+
.markdown li::marker {
|
|
108
|
+
color: rgb(var(--muted-foreground));
|
|
109
|
+
font-variant-numeric: tabular-nums;
|
|
110
|
+
}
|
|
111
|
+
.markdown li + li {
|
|
112
|
+
margin-top: 0.25rem;
|
|
113
|
+
}
|
|
114
|
+
.markdown li > :is(ul, ol) {
|
|
115
|
+
margin-block: 0.25rem;
|
|
116
|
+
}
|
|
117
|
+
.markdown li > p {
|
|
118
|
+
margin-block: 0.25rem;
|
|
119
|
+
}
|
|
120
|
+
/* GFM marks the whole list `contains-task-list` if any item is a task, so
|
|
121
|
+
* only task items drop their marker; the checkbox hangs in the gutter. */
|
|
122
|
+
.markdown li.task-list-item {
|
|
123
|
+
list-style: none;
|
|
124
|
+
}
|
|
125
|
+
.markdown .task-list-item > input[type="checkbox"] {
|
|
126
|
+
margin: 0 0.45em 0.15em -1.25rem;
|
|
127
|
+
vertical-align: middle;
|
|
128
|
+
accent-color: rgb(var(--primary));
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
/* Quotes and GitHub alerts */
|
|
132
|
+
.markdown blockquote {
|
|
133
|
+
padding-left: 0.8rem;
|
|
134
|
+
border-left: 2px solid rgb(var(--border));
|
|
135
|
+
color: rgb(var(--muted-foreground));
|
|
136
|
+
}
|
|
137
|
+
.markdown-alert {
|
|
138
|
+
--alert: var(--foreground);
|
|
139
|
+
padding: 0.6rem 0.8rem;
|
|
140
|
+
border-radius: clamp(0.75rem, var(--radius), 1rem);
|
|
141
|
+
background: rgb(var(--alert) / 0.06);
|
|
142
|
+
}
|
|
143
|
+
.markdown-alert[data-alert="tip"] {
|
|
144
|
+
--alert: var(--success);
|
|
145
|
+
}
|
|
146
|
+
.markdown-alert[data-alert="important"] {
|
|
147
|
+
--alert: var(--markdown-alert-important, var(--primary));
|
|
148
|
+
}
|
|
149
|
+
.markdown-alert[data-alert="warning"] {
|
|
150
|
+
--alert: var(--warning);
|
|
151
|
+
}
|
|
152
|
+
.markdown-alert[data-alert="caution"] {
|
|
153
|
+
--alert: var(--destructive);
|
|
154
|
+
}
|
|
155
|
+
.markdown-alert > :nth-child(2) {
|
|
156
|
+
margin-top: 0.25rem;
|
|
157
|
+
}
|
|
158
|
+
.markdown-alert > :last-child {
|
|
159
|
+
margin-bottom: 0;
|
|
160
|
+
}
|
|
161
|
+
.markdown .markdown-alert-title {
|
|
162
|
+
display: flex;
|
|
163
|
+
align-items: center;
|
|
164
|
+
gap: 0.4rem;
|
|
165
|
+
margin: 0;
|
|
166
|
+
font-weight: 600;
|
|
167
|
+
color: rgb(var(--alert));
|
|
168
|
+
}
|
|
169
|
+
.markdown-alert-title svg {
|
|
170
|
+
width: 1.1em;
|
|
171
|
+
height: 1.1em;
|
|
172
|
+
flex-shrink: 0;
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
/* Links */
|
|
176
|
+
.markdown-link {
|
|
177
|
+
color: rgb(var(--primary));
|
|
178
|
+
font-weight: 500;
|
|
179
|
+
text-decoration: underline;
|
|
180
|
+
text-decoration-color: rgb(var(--primary) / 0.3);
|
|
181
|
+
text-underline-offset: 0.2em;
|
|
182
|
+
transition: text-decoration-color var(--motion-fast, 150ms) ease-out;
|
|
183
|
+
}
|
|
184
|
+
.markdown-link:hover {
|
|
185
|
+
text-decoration-color: currentColor;
|
|
186
|
+
}
|
|
187
|
+
.markdown-link-icon {
|
|
188
|
+
display: inline-block;
|
|
189
|
+
width: 0.95em;
|
|
190
|
+
height: 0.95em;
|
|
191
|
+
margin-right: 0.3em;
|
|
192
|
+
vertical-align: -0.12em;
|
|
193
|
+
border-radius: 0.2em;
|
|
194
|
+
color: rgb(var(--muted-foreground));
|
|
195
|
+
}
|
|
196
|
+
.markdown-link-icon[data-failed] {
|
|
197
|
+
display: none;
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
/* Inline code */
|
|
201
|
+
.markdown-inline-code {
|
|
202
|
+
padding: 0.1em 0.35em;
|
|
203
|
+
border-radius: 0.375rem;
|
|
204
|
+
/* Foreground-relative, so it still reads inside muted tables and callouts. */
|
|
205
|
+
background: rgb(var(--foreground) / 0.06);
|
|
206
|
+
font-family: var(--font-mono), ui-monospace, monospace;
|
|
207
|
+
font-size: 0.86em;
|
|
208
|
+
overflow-wrap: anywhere;
|
|
209
|
+
}
|
|
210
|
+
.markdown-inline-code[data-file] svg {
|
|
211
|
+
display: inline-block;
|
|
212
|
+
width: 1em;
|
|
213
|
+
height: 1em;
|
|
214
|
+
margin-right: 0.25em;
|
|
215
|
+
vertical-align: -0.15em;
|
|
216
|
+
color: rgb(var(--muted-foreground));
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
/* Code blocks */
|
|
220
|
+
.markdown-code {
|
|
221
|
+
overflow: hidden;
|
|
222
|
+
border-radius: clamp(0.75rem, var(--radius), 1rem);
|
|
223
|
+
background: var(--color-surface-secondary);
|
|
224
|
+
content-visibility: auto;
|
|
225
|
+
contain-intrinsic-size: auto 120px;
|
|
226
|
+
}
|
|
227
|
+
.markdown-code-header {
|
|
228
|
+
display: flex;
|
|
229
|
+
align-items: center;
|
|
230
|
+
justify-content: space-between;
|
|
231
|
+
gap: 0.5rem;
|
|
232
|
+
padding: 0.25rem 0.3rem 0 0.9rem;
|
|
233
|
+
font-family: var(--font-mono), ui-monospace, monospace;
|
|
234
|
+
font-size: 0.75rem;
|
|
235
|
+
line-height: 1.75rem;
|
|
236
|
+
color: rgb(var(--muted-foreground));
|
|
237
|
+
}
|
|
238
|
+
.markdown-code-label {
|
|
239
|
+
display: flex;
|
|
240
|
+
min-width: 0;
|
|
241
|
+
align-items: center;
|
|
242
|
+
gap: 0.35rem;
|
|
243
|
+
}
|
|
244
|
+
.markdown-code-label svg {
|
|
245
|
+
width: 0.9rem;
|
|
246
|
+
height: 0.9rem;
|
|
247
|
+
flex-shrink: 0;
|
|
248
|
+
}
|
|
249
|
+
.markdown-code-actions {
|
|
250
|
+
display: flex;
|
|
251
|
+
flex-shrink: 0;
|
|
252
|
+
align-items: center;
|
|
253
|
+
gap: 0.125rem;
|
|
254
|
+
}
|
|
255
|
+
.markdown-code pre {
|
|
256
|
+
margin: 0;
|
|
257
|
+
padding: 0.25rem 0.9rem 0.8rem;
|
|
258
|
+
overflow-x: auto;
|
|
259
|
+
background: transparent;
|
|
260
|
+
font-family: var(--font-mono), ui-monospace, monospace;
|
|
261
|
+
font-size: 0.8125rem;
|
|
262
|
+
line-height: 1.55;
|
|
263
|
+
white-space: pre;
|
|
264
|
+
overflow-wrap: normal;
|
|
265
|
+
tab-size: 2;
|
|
266
|
+
scrollbar-width: thin;
|
|
267
|
+
}
|
|
268
|
+
.markdown-code[data-wrap] pre {
|
|
269
|
+
white-space: pre-wrap;
|
|
270
|
+
overflow-wrap: anywhere;
|
|
271
|
+
}
|
|
272
|
+
.markdown-code-line span[style] {
|
|
273
|
+
color: var(--md-c, inherit);
|
|
274
|
+
}
|
|
275
|
+
.dark .markdown-code-line span[style] {
|
|
276
|
+
color: var(--shiki-dark, var(--md-c, inherit));
|
|
277
|
+
}
|
|
278
|
+
|
|
279
|
+
/* Tables — cells size to their words, never split them mid-word. */
|
|
280
|
+
.markdown table {
|
|
281
|
+
font-size: 0.93em;
|
|
282
|
+
overflow-wrap: normal;
|
|
283
|
+
line-height: 1.5;
|
|
284
|
+
}
|
|
285
|
+
.markdown :is(th, td) {
|
|
286
|
+
padding: 0.45rem 0.75rem;
|
|
287
|
+
text-align: left;
|
|
288
|
+
vertical-align: top;
|
|
289
|
+
}
|
|
290
|
+
.markdown th {
|
|
291
|
+
font-weight: 600;
|
|
292
|
+
white-space: nowrap;
|
|
293
|
+
}
|
|
294
|
+
.markdown tbody tr + tr {
|
|
295
|
+
border-top: 1px solid rgb(var(--border) / 0.7);
|
|
296
|
+
}
|
|
297
|
+
|
|
298
|
+
.markdown .katex-display {
|
|
299
|
+
overflow-x: auto;
|
|
300
|
+
overflow-y: hidden;
|
|
301
|
+
}
|
|
302
|
+
}
|
|
303
|
+
|
|
304
|
+
/* Unlayered: Streamdown's table wrapper carries border / background / radius
|
|
305
|
+
* utilities, which outrank anything in `components`. Restyled to match code
|
|
306
|
+
* blocks — one surface-secondary tone, controls in its header row, no hairlines. */
|
|
307
|
+
.markdown [data-streamdown="table-wrapper"] {
|
|
308
|
+
gap: 0;
|
|
309
|
+
padding: 0.25rem 0.3rem 0.4rem;
|
|
310
|
+
border: 0;
|
|
311
|
+
border-radius: clamp(0.75rem, var(--radius), 1rem);
|
|
312
|
+
background: var(--color-surface-secondary);
|
|
313
|
+
}
|
|
314
|
+
.markdown [data-streamdown="table-wrapper"] > div:has([data-streamdown="table"]) {
|
|
315
|
+
border: 0;
|
|
316
|
+
border-radius: 0;
|
|
317
|
+
background: transparent;
|
|
318
|
+
}
|